2013-03-24 33 views
17

Sau khi đọc this SO câu hỏi tôi có một vài nghi ngờ. Xin giúp đỡ trong sự hiểu biết.Linux có lên kế hoạch cho một tiến trình hay một luồng không?

Lập kế hoạch liên quan đến việc quyết định khi nào nên chạy một quy trình và lượng thời gian nào.

  1. Hạt nhân Linux có lập lịch trình luồng hoặc quá trình không? Khi quá trình và luồng không được phân biệt bên trong hạt nhân như thế nào một bộ lập lịch xử lý chúng?

  2. Làm thế nào lượng tử cho mỗi sợi được quyết định? a. Nếu một lượng tử thời gian (nói 100us) được quyết định cho một quá trình là nhận được chia sẻ giữa tất cả các chủ đề của quá trình? hoặc b. Một lượng tử cho mỗi sợi được quyết định bởi bộ lập lịch?

Lưu ý: Câu hỏi 1 và 2 có liên quan và có thể giống nhau nhưng chỉ muốn biết rõ mọi thứ đang hoạt động như thế nào ở đây.

Trả lời

24

Trình lập lịch biểu Linux (trên hạt nhân Linux gần đây, ví dụ: 3.0 ít nhất) đang lập lịch các tác vụ có thể lập lịch hoặc chỉ đơn giản là nhiệm vụ.

Một nhiệm vụ có thể là:

  • một quá trình đơn luồng (ví dụ như tạo ra bởi fork mà không cần bất kỳ thư viện thread)
  • chủ đề bất kì bên trong một quá trình đa luồng (bao gồm cả chủ đề chính của nó), đặc biệt đề Posix (pthreads)
  • nhiệm vụ hạt nhân, được bắt đầu trong nội bộ hạt nhân và ở lại đất hạt nhân (ví dụ kworker, nfsiod, kjournald, kauditd, kswapd etc etc ...)

Nói cách khác, các chủ đề bên trong các quy trình đa luồng được lên lịch như không có luồng -i.e. các quy trình đơn luồng.

Các cấp thấp clone(2) syscall tạo sử dụng đất nhiệm vụ schedulable (và có thể được sử dụng cả hai để tạo fork quá trình -ed hoặc để thực hiện các thư viện chủ đề, như pthread). Trừ khi bạn là người triển khai thư viện chuỗi cấp thấp, bạn không muốn sử dụng trực tiếp clone.

AFAIK, đối với các quy trình đa luồng, hạt nhân (gần như) không lập lịch trình, nhưng mỗi luồng riêng lẻ bên trong (bao gồm cả chuỗi chính).

Trên thực tế, có một số khái niệm về nhóm chủ đề và affinity trong lịch trình, nhưng tôi không biết họ cũng

Những ngày này, bộ vi xử lý có chung nhiều hơn một lõi, và mỗi lõi đang chạy một nhiệm vụ (tại một số tức thì) vì vậy bạn có một số nhiệm vụ chạy song song.

thời gian CPU lượng tử được trao cho nhiệm vụ, không để xử lý

+0

Mọi người nói quy trình lịch trình Linux trong khi cửa sổ lên lịch chủ đề. Điều đó có nghĩa là gì? Theo câu trả lời này có vẻ như nhiệm vụ lịch trình Linux (có thể được coi là chủ đề) và các cửa sổ thực hiện tương tự. Hay tôi thiếu cái gì? – prasannatsm

+1

@prasannatsm: Tôi không biết về Linux, nhưng Windows chắc chắn chỉ lập lịch trình luồng. Trong bất kỳ hoạt động lịch biểu nào, Windows chọn "chuỗi tiếp theo" từ danh sách tất cả các chuỗi đang chạy có ái lực bộ xử lý và ngữ cảnh chuyển sang nó. Ngoài việc thực hiện chuyển đổi CR3, bộ lập lịch không xem xét các quy trình cho mục đích chọn luồng tiếp theo để chạy trên lõi. – SecurityMatt

2

Việc thực hiện NPTL của thông số kỹ thuật chủ đề POSIX thấy chủ đề là một quá trình khác nhau bên trong hạt nhân, có độc đáo task_struct (và do đó pid quá) vì vậy mỗi chủ đề là schedulable trong chính nó như đã đề cập. Do đó, mỗi luồng có thời gian riêng và được lên lịch giống như các quy trình như đã đề cập ở trên.

Chỉ cần thêm, Trình lên lịch Linux hiện cũng có khả năng lên lịch không chỉ các tác vụ đơn lẻ (một quy trình đơn giản) mà còn là các nhóm quy trình hoặc thậm chí người dùng (tất cả các quy trình, thuộc về người dùng). Điều này cho phép thực hiện lập kế hoạch nhóm, trong đó thời gian CPU được chia đầu tiên giữa các nhóm tiến trình và sau đó được phân phối trong các nhóm đó thành các chuỗi đơn.

Chủ đề Linux không trực tiếp hoạt động trên các quy trình hoặc chủ đề, nhưng hoạt động với thực thể có thể lập lịch biểu. Đại diện bởi struct sched_entity. Thật công bằng khi nói rằng mọi tiến trình/luồng là sched_entity nhưng ngược lại có thể không đúng.

Để biết lịch trình quy trình chi tiết, hãy tham khảo here

Các vấn đề liên quan