Câu trả lời:
Trên một hạt nhân được ưu tiên, một tiến trình đang chạy trong chế độ kernel có thể được thay thế bằng một tiến trình khác trong khi ở giữa một hàm kernel.
Điều này chỉ áp dụng cho các quy trình chạy trong chế độ kernel, các quy trình thực thi CPU trong chế độ người dùng được coi là "không hoạt động". Nếu một quá trình chế độ người dùng muốn yêu cầu một dịch vụ từ kernel, anh ta phải đưa ra một ngoại lệ mà kernel có thể xử lý.
Ví dụ:
Quá trình A
thực thi một trình xử lý ngoại lệ, Quá trình B
được đánh thức bởi một yêu cầu IRQ, kernel thay thế tiến trình A
bằng B
(một chuyển đổi quy trình bắt buộc). Quá trình A
còn lại dang dở. Bộ lập lịch quyết định sau đó nếu quá trình A
có thời gian CPU hay không.
Trên một hạt nhân không từ chối, quá trình A
sẽ chỉ sử dụng tất cả thời gian của bộ xử lý cho đến khi anh ta kết thúc hoặc tự nguyện quyết định cho phép các quá trình khác làm gián đoạn anh ta (một công tắc quy trình theo kế hoạch).
Các hệ điều hành dựa trên Linux ngày nay thường không bao gồm một hạt nhân hoàn toàn được ưu tiên, vẫn có các chức năng quan trọng phải chạy mà không bị gián đoạn. Vì vậy, tôi nghĩ rằng bạn có thể gọi đây là "hạt nhân phòng ngừa chọn lọc".
Ngoài ra, có nhiều cách tiếp cận để làm cho nhân Linux (gần như) hoàn toàn được ưu tiên.
sự ưu tiên là -> Khả năng của hệ điều hành có thể ưu tiên hoặc dừng một tác vụ hiện đang được lên lịch để ủng hộ một nhiệm vụ ưu tiên cao hơn. Việc lập lịch trình có thể là một trong, nhưng không giới hạn ở quy trình, lập lịch hoặc I / O, v.v.
Trong Linux, các chương trình không gian người dùng luôn được ưu tiên: kernel ngắt các chương trình không gian người dùng để chuyển sang các luồng khác, sử dụng đánh dấu đồng hồ thông thường. Vì vậy, kernel không đợi các chương trình không gian người dùng giải phóng rõ ràng bộ xử lý (đó là trường hợp đa nhiệm hợp tác). Điều này có nghĩa là một vòng lặp vô hạn trong chương trình không gian người dùng không thể chặn hệ thống.
Tuy nhiên, cho đến 2,6 hạt nhân, bản thân hạt nhân không thể định trước được: ngay khi một luồng đã vào hạt nhân, nó không thể được ưu tiên thực hiện một luồng khác. Tuy nhiên, sự vắng mặt của sự ưu tiên trong kernel đã gây ra một số vấn đề liên quan đến độ trễ và khả năng mở rộng. Vì vậy, quyền ưu tiên kernel đã được giới thiệu trong 2,6 hạt nhân và người ta có thể bật hoặc tắt nó bằng tùy chọn CONFIG_PREEMPT. Nếu CONFIG_PREEMPT được bật, thì mã hạt nhân có thể được ưu tiên ở mọi nơi, ngoại trừ khi mã đã vô hiệu hóa các ngắt cục bộ. Một vòng lặp vô hạn trong mã không còn có thể chặn toàn bộ hệ thống. Nếu CONFIG_PREEMPT bị vô hiệu hóa, thì hành vi 2.4 được khôi phục.
Được trích dẫn và định dạng từ: http://www.linuxquestions.org/questions/linux-general-1/pre-eemive-vs-non-pre-eemive-kernel-582437/
Một hạt nhân ưu tiên cho phép một quá trình được ưu tiên trong khi nó đang chạy trong chế độ kernel. Một hạt nhân không từ chối không cho phép một tiến trình đang chạy trong modeto kernel; một quá trình chế độ kernel sẽ chạy cho đến khi nó thoát khỏi chế độ kernel, chặn hoặc tự nguyện mang lại quyền kiểm soát CPU. Rõ ràng, một hạt nhân không từ chối về cơ bản không có các điều kiện chủng tộc trên các cấu trúc dữ liệu hạt nhân, vì chỉ có một quá trình được kích hoạt trong hạt nhân tại một thời điểm. Chúng ta không thể nói như vậy về các hạt nhân được ưu tiên, vì vậy chúng phải được thiết kế cẩn thận để đảm bảo rằng dữ liệu kernel được chia sẻ không có điều kiện chủng tộc. Các hạt nhân ưu tiên đặc biệt khó thiết kế cho các kiến trúc SMP, vì trong các môi trường này, hai quy trình chế độ nhân có thể chạy đồng thời trên các bộ xử lý khác nhau. Một hạt nhân ưu tiên phù hợp hơn cho lập trình thời gian thực, vì nó sẽ cho phép một quy trình thời gian thực lấy trước một quy trình hiện đang chạy trong kernel. Hơn nữa, một hạt nhân được ưu tiên có thể phản ứng nhanh hơn, vì có ít rủi ro hơn rằng quy trình chế độ nhân sẽ chạy trong một khoảng thời gian dài tùy ý trước khi đưa bộ xử lý vào các quy trình chờ. Tất nhiên, hiệu ứng này có thể được giảm thiểu bằng cách thiết kế mã hạt nhân không hoạt động theo cách này. Phần sau của chương này, chúng ta khám phá cách các hệ điều hành khác nhau quản lý sự ưu tiên trong nhân. hiệu ứng này có thể được giảm thiểu bằng cách thiết kế mã hạt nhân không hoạt động theo cách này. Phần sau của chương này, chúng ta khám phá cách các hệ điều hành khác nhau quản lý sự ưu tiên trong nhân. hiệu ứng này có thể được giảm thiểu bằng cách thiết kế mã hạt nhân không hoạt động theo cách này. Phần sau của chương này, chúng ta khám phá cách các hệ điều hành khác nhau quản lý sự ưu tiên trong nhân.