THREADS: Chủ đề hạt nhân so với chủ đề hỗ trợ hạt nhân so với chủ đề cấp người dùng?


9

Có ai biết sự khác biệt giữa những điều này là gì?

Dường như với tôi rằng các luồng nhân tương ứng với mã chạy kernel (theo trực giác), nhưng tôi không chắc về hai ...

Ngoài ra, tiêu chuẩn pthreads có được coi là cấp độ người dùng và hỗ trợ kernel hay không, vì bạn đang truy cập vào thư viện trong khi kernel thực hiện tất cả việc lập lịch / chuyển đổi luồng?

Câu trả lời:


14

Thuật ngữ "các luồng nhân" có thể được sử dụng để chỉ các luồng thực tế chạy hoàn toàn trong không gian kernel hoặc nó có thể chỉ các luồng không gian người dùng được lên lịch bởi kernel. Thuật ngữ "hỗ trợ kernel" có nghĩa là các luồng sau, các luồng chạy trong không gian người dùng nhưng được tạo điều kiện bởi kernel, điều này thường có nghĩa là kernel lên lịch cho chúng.

"Chủ đề cấp người dùng" thường có nghĩa là chủ đề hiển thị cho không gian người dùng. Đó là, những gì bạn tạo khi bạn gọi chức năng "tạo chủ đề" của tiêu chuẩn luồng của bạn. Nói chung, thuật ngữ "luồng cấp độ người dùng" được sử dụng để chỉ một luồng được tạo bởi mã ứng dụng bất kể hệ thống được triển khai như thế nào. Nó có thể là một luồng không gian người dùng thuần túy có ít hoặc không hỗ trợ kernel hoặc nó có thể là một luồng được lên lịch bởi kernel.

Tiêu chuẩn pthreads có thể được triển khai dưới dạng các luồng không gian người dùng thuần túy (trong đó kernel lập lịch cho tiến trình và tiến trình lên lịch cho các luồng), các luồng được hỗ trợ kernel (trong đó kernel lập lịch trực tiếp cho các luồng) hoặc một cách tiếp cận lai (nơi kernel lên lịch một luồng cấp hạt nhân mà sau đó, trong không gian người dùng, lên lịch một luồng cấp độ người dùng). Tiêu chuẩn không yêu cầu bất kỳ một phương tiện thực hiện cụ thể. Việc triển khai phổ biến nhất là ánh xạ 1 đến 1 trong đó mỗi luồng cấp độ người dùng có một luồng tương ứng được lên lịch bởi kernel.


Việc triển khai trên Linux như thế nào?
yati sagade

3
Trên tất cả các hệ thống Linux hiện đại (2.6 kernel trở lên) mà tôi biết, việc triển khai luồng mặc định của hệ thống là 1-1, mỗi luồng cấp độ người dùng có một KSE (thực thể lập lịch trình kernel - về cơ bản, một luồng được lên lịch bởi Nền tảng Linux). Chuỗi bạn tạo bằng 'pthread_create' sẽ được lên lịch trực tiếp bởi kernel. Các hệ thống hiện đại thường sử dụng NPTL , các hệ thống cũ hơn đã sử dụng LinuxThread - cả hai đều là 1-1.
David Schwartz

"hoặc một cách tiếp cận hỗn hợp (trong đó kernel lập lịch cho một luồng cấp kernel, sau đó, trong không gian người dùng, lên lịch cho một luồng cấp độ người dùng)." Này David, bạn có thể giải thích điều này một lần nữa? Tôi không chắc chắn điều gì đang xảy ra ... Khi bạn nói ánh xạ 1 đến 1, bạn đang đề cập đến Khối điều khiển luồng khi đề cập đến các cấp độ hạt nhân?
Templar tối

Theo 1-1 tôi có nghĩa là mỗi khi bạn gọi 'pthread_create', một bối cảnh mới được tạo ra được lên lịch bởi kernel. Theo cách tiếp cận hỗn hợp , số lượng bối cảnh được nhân theo lịch trình ít hơn số lượng luồng được tạo - hạt nhân lên lịch một trong những bối cảnh đó, và sau đó thư viện luồng lên lịch một trong các luồng được tạo bởi ứng dụng.
David Schwartz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.