Xem: Tìm hiểu về nhân Linux , Ấn bản thứ 3 của Daniel P. Bovet, Marco Cesati
- Nhà xuất bản: O'Reilly
- Ngày xuất bản: tháng 11 năm 2005
- Sđd: 0-596-00565-2
- Trang: 942
Trong phần giới thiệu, Daniel P. Bovet và Marco Cesati đã nói:
Về mặt kỹ thuật, Linux là một nhân Unix thực sự, mặc dù nó không phải là một hệ điều hành Unix đầy đủ, bởi vì nó không bao gồm tất cả các ứng dụng như tiện ích hệ thống tập tin, hệ thống cửa sổ và máy tính để bàn đồ họa, lệnh quản trị hệ thống, trình soạn thảo văn bản, trình biên dịch, v.v. trên. Do đó, những gì bạn đọc trong cuốn sách này và thấy trong nhân Linux, cũng có thể giúp bạn hiểu các biến thể Unix khác.
Trong các đoạn tiếp theo, tôi sẽ cố gắng giải quyết các quan điểm của bạn dựa trên sự hiểu biết của tôi đối với các sự kiện được trình bày trong "Hiểu về hạt nhân Linux", ở một mức độ rất lớn tương tự như trong Unix.
Một quá trình có nghĩa là gì? :
Các quy trình giống như con người, chúng được tạo ra, chúng có một cuộc sống ít nhiều có ý nghĩa, chúng tùy ý tạo ra một hoặc nhiều quá trình con và cuối cùng chúng chết. Một quy trình có năm phần cơ bản: mã ("văn bản"), dữ liệu (VM), ngăn xếp, I / O tệp và bảng tín hiệu
Mục đích của một quá trình trong Kernel là hoạt động như một thực thể mà tài nguyên hệ thống (thời gian CPU, bộ nhớ, v.v.) được phân bổ. Khi một quá trình được tạo ra, nó gần như giống hệt với cha mẹ của nó. Nó nhận được một bản sao (logic) của không gian địa chỉ của cha mẹ và thực thi cùng mã với cha mẹ, bắt đầu ở lệnh tiếp theo sau lệnh gọi hệ thống tạo quy trình. Mặc dù cha mẹ và con cái có thể chia sẻ các trang chứa mã chương trình (văn bản), chúng có các bản sao riêng của dữ liệu (ngăn xếp và đống), do đó, sự thay đổi của đứa trẻ thành một vị trí bộ nhớ là vô hình đối với cha mẹ (và ngược lại) .
Quy trình hoạt động như thế nào?
Một chương trình thực thi cần nhiều hơn là mã nhị phân cho máy tính biết phải làm gì. Chương trình cần bộ nhớ và các tài nguyên hệ điều hành khác nhau để chạy. Một quá trình xử lý trên mạng là những gì chúng ta gọi là một chương trình đã được tải vào bộ nhớ cùng với tất cả các tài nguyên mà nó cần để vận hành. Một luồng là đơn vị thực hiện trong một quy trình. Một tiến trình có thể có bất cứ nơi nào từ chỉ một luồng đến nhiều luồng. Khi một quá trình bắt đầu, nó được gán bộ nhớ và tài nguyên. Mỗi luồng trong quá trình chia sẻ bộ nhớ và tài nguyên đó. Trong các quy trình đơn luồng, quy trình chứa một luồng. Quá trình và luồng là một và giống nhau, và chỉ có một điều xảy ra. Trong các quy trình đa luồng, quy trình chứa nhiều hơn một luồng và quá trình này đang hoàn thành một số thứ cùng một lúc.
Các cơ chế của một hệ thống đa xử lý, bao gồm các quy trình nhẹ và nặng:
Trong một quy trình nặng, nhiều quy trình đang chạy song song. Mỗi quá trình nặng song song có không gian địa chỉ bộ nhớ riêng. Giao tiếp giữa các quá trình chậm vì các tiến trình có địa chỉ bộ nhớ khác nhau. Chuyển đổi bối cảnh giữa các quá trình là tốn kém hơn. Các quy trình không chia sẻ bộ nhớ với các quy trình khác. Giao tiếp giữa các quá trình này sẽ liên quan đến các cơ chế truyền thông bổ sung như ổ cắm hoặc đường ống.
Trong một quá trình nhẹ, cũng được gọi là chủ đề. Chủ đề được sử dụng để chia sẻ và phân chia khối lượng công việc. Chủ đề sử dụng bộ nhớ của quá trình họ thuộc về. Giao tiếp giữa các luồng có thể nhanh hơn giao tiếp giữa các quá trình vì các luồng của cùng một tiến trình chia sẻ bộ nhớ với tiến trình mà chúng thuộc về. kết quả là giao tiếp giữa các luồng rất đơn giản và hiệu quả. Chuyển đổi bối cảnh giữa các luồng của cùng một quá trình ít tốn kém hơn. Chủ đề chia sẻ bộ nhớ với các chủ đề khác của cùng một quá trình
Có hai loại luồng: luồng cấp độ người dùng và luồng cấp hạt nhân. Các luồng cấp người dùng tránh kernel và tự quản lý công việc. Các luồng cấp độ người dùng có một vấn đề là một luồng duy nhất có thể độc quyền lát cắt thời gian do đó bỏ đói các luồng khác trong tác vụ. Các luồng cấp người dùng thường được hỗ trợ phía trên kernel trong không gian người dùng và được quản lý mà không cần hỗ trợ kernel. Nhân không biết gì về các luồng cấp người dùng và quản lý chúng như thể chúng là các tiến trình đơn luồng. Như vậy, các luồng cấp độ người dùng rất nhanh, nó hoạt động nhanh hơn 100 lần so với các luồng nhân.
Các luồng cấp hạt nhân thường được triển khai trong kernel bằng một số tác vụ. Trong trường hợp này, kernel lập lịch cho từng luồng trong khoảng thời gian của mỗi tiến trình. Ở đây, vì đánh dấu đồng hồ sẽ xác định thời gian chuyển đổi, một tác vụ ít có khả năng hog thời gian từ các luồng khác trong tác vụ. Các luồng mức kernel được hệ điều hành hỗ trợ và quản lý trực tiếp. Mối quan hệ giữa các luồng cấp độ người dùng và luồng cấp độ hạt nhân không hoàn toàn độc lập, trên thực tế có sự tương tác giữa hai cấp độ này. Nói chung, các luồng cấp độ người dùng có thể được triển khai bằng một trong bốn mô hình: mô hình nhiều-một, một-một, nhiều-nhiều và hai cấp. Tất cả các mô hình này ánh xạ các luồng cấp người dùng thành các luồng cấp hạt nhân và gây ra sự tương tác ở các mức độ khác nhau giữa cả hai cấp độ.
Chủ đề so với quy trình
- Chương trình bắt đầu như một tệp văn bản của mã lập trình,
- Chương trình được biên dịch hoặc giải thích thành dạng nhị phân,
- Chương trình được tải vào bộ nhớ,
- Chương trình trở thành một hoặc nhiều quá trình đang chạy.
- Các quy trình thường độc lập với nhau,
- Trong khi các chủ đề tồn tại như là tập hợp con của một quá trình.
- Các chủ đề có thể giao tiếp với nhau dễ dàng hơn các quy trình có thể,
- Nhưng các luồng dễ bị ảnh hưởng bởi các vấn đề gây ra bởi các luồng khác trong cùng tiến trình
Người giới thiệu:
Hiểu về hạt nhân Linux, phiên bản thứ 3
Thêm 1 2 3 4 5
...............................................
Bây giờ, hãy đơn giản hóa tất cả các điều khoản này ( đoạn này là từ quan điểm của tôi ). Kernel là giao diện giữa phần mềm và phần cứng. Nói cách khác, hạt nhân hoạt động như một bộ não. Nó thao túng mối quan hệ giữa vật liệu di truyền (tức là mã và phần mềm dẫn xuất của nó) và hệ thống cơ thể (tức là phần cứng hoặc cơ bắp).
Bộ não này (tức là nhân) gửi tín hiệu đến các quá trình hoạt động tương ứng. Một số các quá trình này giống như cơ bắp (tức là các luồng), mỗi cơ có chức năng và nhiệm vụ riêng nhưng tất cả chúng hoạt động cùng nhau để hoàn thành khối lượng công việc. Giao tiếp giữa các chủ đề này (tức là cơ bắp) rất hiệu quả và đơn giản, vì vậy họ đạt được công việc của mình một cách trơn tru, nhanh chóng và hiệu quả. Một số chủ đề (tức là cơ bắp) nằm dưới sự kiểm soát của người dùng (như cơ bắp ở tay và chân của chúng ta). Những người khác nằm dưới sự kiểm soát của não (như các cơ ở dạ dày, mắt, tim mà chúng ta không kiểm soát).
Các luồng không gian người dùng tránh kernel và tự quản lý các tác vụ. Thường thì điều này được gọi là "đa nhiệm hợp tác", và thực sự nó giống như các chi trên và dưới của chúng ta, nó nằm dưới sự kiểm soát của chính chúng ta và nó phối hợp với nhau để đạt được công việc (ví dụ như tập thể dục hoặc ...) và không cần đơn đặt hàng trực tiếp từ não. Mặt khác, các luồng Kernel-Space được điều khiển hoàn toàn bởi kernel và bộ lập lịch của nó.
...............................................
Trả lời câu hỏi của bạn:
Là một quá trình luôn luôn được thực hiện dựa trên một hoặc nhiều quá trình trọng lượng nhẹ? Hình 3.4 dường như nói có. Tại sao Hình 3.5 (a) hiển thị các quy trình trực tiếp trên CPU?
Vâng, có những quy trình nhẹ gọi là chủ đề, và quy trình nặng.
Một quy trình nặng (bạn có thể gọi nó là quy trình xử lý tín hiệu) đòi hỏi chính bộ xử lý phải thực hiện nhiều công việc hơn để ra lệnh thực thi, đó là lý do tại sao Hình 3.5 (a) hiển thị các quy trình trực tiếp trên CPU.
Là một quá trình trọng lượng nhẹ luôn luôn được thực hiện dựa trên một chủ đề hạt nhân? Hình 3.4 dường như nói có. Tại sao Hình 3.5 (b) hiển thị các quy trình trọng lượng nhẹ trực tiếp trên đầu các quy trình?
Không, các quy trình trọng lượng nhẹ được chia thành hai loại: quy trình cấp người dùng và cấp nhân, như đã đề cập ở trên. Quá trình cấp người dùng dựa vào thư viện riêng của mình để xử lý các tác vụ của nó. Hạt nhân lên lịch trình quá trình cấp kernel. Chủ đề cấp độ người dùng có thể được thực hiện bằng một trong bốn mô hình: nhiều-một, một-một, nhiều-nhiều và hai cấp. Tất cả, các mô hình này ánh xạ các luồng cấp người dùng thành các luồng cấp hạt nhân.
Các chủ đề hạt nhân là các thực thể duy nhất có thể được lên lịch?
Không, các luồng cấp Kernel, được tạo bởi chính kernel. Chúng khác với các luồng cấp độ người dùng trong thực tế là các luồng cấp hạt nhân không có không gian địa chỉ giới hạn. Họ chỉ sống trong không gian hạt nhân, không bao giờ chuyển sang vương quốc của người dùng. Tuy nhiên, chúng là các thực thể có thể lập lịch và có thể lên lịch đầy đủ, giống như các quy trình thông thường (lưu ý: có thể vô hiệu hóa hầu hết các ngắt cho các hành động hạt nhân quan trọng). Mục đích của các luồng riêng của kernel chủ yếu là để thực hiện các nhiệm vụ bảo trì trên hệ thống. Chỉ kernel có thể bắt đầu hoặc dừng một chuỗi kernel. Mặt khác, quá trình ở cấp độ người dùng có thể tự lên lịch dựa trên thư viện riêng và đồng thời nó có thể được lên lịch bởi kernel dựa trên các mô hình hai cấp và nhiều-nhiều (đã đề cập ở trên),
Có phải các quy trình trọng lượng nhẹ được lên lịch chỉ gián tiếp thông qua lập lịch các luồng nhân bên dưới?
Các luồng nhân được điều khiển bởi bộ lập lịch kernel. Hỗ trợ các luồng ở cấp độ người dùng có nghĩa là có một thư viện cấp độ người dùng được liên kết với ứng dụng và thư viện này (không phải CPU) cung cấp tất cả quản lý trong hỗ trợ thời gian chạy cho các luồng. Nó sẽ hỗ trợ các cấu trúc dữ liệu cần thiết để thực hiện trừu tượng luồng và cung cấp tất cả đồng bộ hóa lập lịch và các cơ chế khác cần thiết để đưa ra quyết định quản lý tài nguyên cho các luồng này. Bây giờ, một số quy trình xử lý mức người dùng có thể được ánh xạ vào các luồng cấp nhân bên dưới và điều này bao gồm ánh xạ một-một, một-nhiều và nhiều-nhiều.
Có phải các quy trình chỉ được lên kế hoạch gián tiếp thông qua lập lịch các quy trình nhẹ bên dưới?
Nó phụ thuộc vào việc nó là một quá trình nặng hay nhẹ. Nặng là các quá trình được lên lịch bởi chính kernel. quá trình ánh sáng có thể được quản lý ở cấp hạt nhân và ở cấp độ người dùng.