Tôi chỉ đọc lên trên linux làm việc như thế nào trong OS-book của tôi khi tôi đi qua này ..Cuộc gọi hệ thống mà không cần chuyển ngữ cảnh?
[...] hạt nhân được tạo ra dưới dạng đĩa đơn, nhị phân monolitic. Lý do chính là cải thiện hiệu suất. Bởi vì tất cả mã kernel và cấu trúc dữ liệu được lưu giữ trong một không gian địa chỉ đơn lẻ, nên không cần chuyển mạch bối cảnh khi một tiến trình gọi một hàm hệ điều hành hoặc khi một ngắt phần cứng được gửi đi.
Điều đó nghe khá tuyệt vời với tôi, chắc chắn nó phải lưu trữ bối cảnh của quá trình trước khi chạy vào chế độ hạt nhân để xử lý gián đoạn .. Nhưng ok, tôi sẽ mua nó ngay bây giờ. Một vài trang trên, trong khi mô tả bối cảnh lập lịch trình của quy trình, nó cho biết:
Cả hai cuộc gọi và gián đoạn xảy ra trong quá trình thực thi sẽ sử dụng chồng này.
"ngăn xếp này" là nơi hạt nhân lưu trữ sổ đăng ký của quy trình và như vậy.
Đây không phải là mâu thuẫn trực tiếp với báo giá đầu tiên? Tôi có hiểu nhầm nó bằng cách nào đó không?
Cảm ơn bạn. Đã lâu rồi tôi mới nghiên cứu điều này, nhưng tôi đã bị ấn tượng rằng phần cứng ngắt thực sự _interrupts_ việc thực hiện và nhảy ngay lập tức đến thủ tục xử lý hơn là bỏ phiếu cho các ngắt sau này. Tôi nghĩ rằng nếu quá trình này đang thực hiện ở chế độ hạt nhân thì nó vẫn cần lưu trữ ngữ cảnh của nó trước khi nhảy, nhưng có lẽ đó là lỗi của tôi? Tôi cho rằng bây giờ điều đó sẽ không khác với bất kỳ cuộc gọi phương thức nào khác nếu phương thức được gọi xử lý các thanh ghi đã sử dụng một cách chính xác .. tôi đã hiểu đúng chưa? – user1130005
Sự hiểu biết của tôi là quá trình đang chạy ở chế độ người dùng và thực sự có một chuyển ngữ cảnh sang chế độ hạt nhân trước khi ngắt được xử lý. Tuy nhiên, * xử lý * ngắt không đòi hỏi một công tắc ngữ cảnh bổ sung trong hạt nhân nguyên khối, nhưng trong các vi mạch (vì trình điều khiển thiết bị nằm trong không gian người dùng). –