Làm thế nào các chủ đề được thực hiện trong các hệ điều hành khác nhau?


7

Tôi đã đọc Phát triển nhân Linux của Robert Love, nơi tôi đã bắt gặp điều này

Linux có một cách tiếp cận thú vị để hỗ trợ luồng: Nó không phân biệt giữa các luồng và các quy trình thông thường. Đối với kernel, tất cả các quy trình đều giống nhau, một số tình cờ chỉ xảy ra để chia sẻ tài nguyên.

Tôi không biết nhiều về HĐH (mong muốn biết thêm) và hạt nhân và do đó, trích dẫn trên đã đặt ra một câu hỏi về việc triển khai luồng trong các HĐH khác nhau (ít nhất là các hệ điều hành phổ biến như Windows, Linux và Unix).

Ai đó có thể vui lòng giải thích các kỹ thuật khác nhau để cung cấp hỗ trợ luồng trong HĐH không? (và tùy ý tương phản chúng)


1
Bạn có thể muốn xem câu trả lời cho câu hỏi này trên stackoverflow .
Pedro

Câu hỏi này dường như là về Linux. Như vậy, nó không chính thức ở đây và nên có trên Unix & Linux . Nếu nó được coi là một câu hỏi chung về hệ điều hành, vui lòng chỉnh sửa để làm rõ điều đó.
Raphael

@Pedro Cảm ơn nhưng đó không phải là điều tôi bối rối. Câu hỏi đó (những gì tôi cảm thấy) là nói nhiều hơn về các vấn đề hiệu suất và khóa và vân vân. Tôi quan tâm đến cách các chủ đề thực sự được thực hiện và các khả năng khác nhau
Ankit

@Raphael Cảm ơn. Tôi sẽ đặt nó ở nơi đó (chỉ khi tôi biết về điều đó). Vì vậy, điều tồi tệ của tôi là tôi đã không tìm kiếm cộng đồng Linux trên stackexchange. Bạn có thể vui lòng di chuyển nó?
Ankit

@Raphael, câu hỏi là về việc hiểu hậu quả của một cách tiếp cận khác nhau đối với một câu hỏi về hệ điều hành khi tôi hiểu nó. (btw, tôi không nghĩ việc cụ thể của linux sẽ khiến một câu hỏi lạc đề ở đây.)
Kaveh

Câu trả lời:


2

Chủ đề và quy trình là bối cảnh thực hiện. Chúng hầu như chỉ khác nhau bởi số lượng trạng thái chia sẻ (bộ nhớ, bộ xử lý tín hiệu, bộ mô tả tệp, ...) với các bối cảnh thực thi khác (các quy trình chia sẻ rất ít với các quy trình khác; các luồng chia sẻ rất nhiều với các luồng khác trong cùng quy trình).

Hầu hết các hệ điều hành giữ hai thứ tách biệt, và do đó biết về một số loại bối cảnh thực thi.

Mặt khác, nhân Linux chỉ có một loại bối cảnh thực thi, có thể chia sẻ hoặc không chia sẻ mọi thứ với nhau. Nếu bạn muốn một quy trình, hãy thiết lập nó để nó chia sẻ ít, bạn muốn các chủ đề, thiết lập chúng để chúng chia sẻ những gì chúng cần. Bạn có thể thiết lập mọi thứ để chúng hoạt động theo cách không phù hợp với thuật ngữ quy trình / luồng.

API POSIX thường được sử dụng khi lập trình cho Linux chỉ biết về các quy trình và luồng và do đó, hầu hết các chương trình không thực sự quan tâm đến chi tiết triển khai cho chúng theo cách phân chia trách nhiệm giữa kernel và không gian người dùng. Việc triển khai các luồng cũ hơn đã rò rỉ một số chi tiết triển khai (ps hiển thị các luồng, id luồng và id tiến trình trộn lẫn, ...) và không cung cấp chính xác ngữ nghĩa POSIX trong một số trường hợp (phân phối tín hiệu có vấn đề IIRC).


2
Tôi nghĩ rằng bạn đang thiếu một số sự phức tạp của trình lập lịch biểu của Linux. Nó không biết liệu các chủ đề thuộc về cùng một quá trình. Có chủ đề người dùng, là tốt. Hơn nữa, đây dường như là một câu trả lời SO, về việc triển khai cụ thể, hơn là một câu trả lời CS, giải thích các khái niệm.
Gilles 'SO- ngừng trở nên xấu xa'
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.