Thay đổi từ chế độ Kernel sang chế độ Người dùng (và ngược lại)


8

Tôi đang đọc cuốn sách Hệ điều hành của Galvin. Galvin giải thích, chế độ kernel & user là gì, đặc quyền hướng dẫn được cung cấp cho cả hai chế độ & cả về mode-bit. Nhưng tôi quan tâm để biết làm thế nào thay đổi chế độ từ người này sang người khác. Về cơ bản tôi muốn giải quyết câu hỏi sau đây:

Một CPU có 2 chế độ, đặc quyền và không đặc quyền. Để thay đổi chế độ từ chiếm ưu thế sang không phổ biến

a) Một ngắt phần cứng là cần thiết

b) Một ngắt phần mềm là cần thiết.

c) Một hướng dẫn đặc quyền là cần thiết.

d) Một hướng dẫn không đặc quyền là cần thiết.

Từ những gì tôi hiểu,

từ chế độ người dùng sang chế độ kernel - Cần có Ngắt phần cứng [như trong Đĩa I / O]. Bây giờ, trong trường hợp người dùng chương trình sử dụng lốp xe để truy cập vào bộ nhớ vượt quá phạm vi cho phép của nó, sẽ xảy ra một cái bẫy, về cơ bản là một phần mềm bị gián đoạn sẽ được xử lý bởi HĐH. Bây giờ, trong chế độ người dùng, chúng tôi không thể thực hiện bất kỳ hướng dẫn đặc quyền nào. Vì vậy, một hướng dẫn không có đặc quyền như yêu cầu I / O có thể thay đổi người dùng sang chế độ kernel. Vì vậy, tôi nghĩ rằng, để thay đổi

từ không đặc quyền (người dùng) đến đặc quyền (kernel) - Hướng dẫn ngắt H / W, ngắt S / W và không đặc quyền sẽ làm.

Bây giờ đến, kernel vào chế độ người dùng. HĐH có thể thay đổi kernel sang chế độ người dùng. Vì vậy, nó chỉ đơn giản sẽ chạy một hướng dẫn đặc quyền để thay đổi từ kernel sang chế độ người dùng. Nó không cần phải tạo ra ngắt H / w hoặc S / w. Vì vậy, tôi kết luận, để thay đổi

từ chiếm ưu thế đến không phổ biến - một hướng dẫn đặc quyền sẽ làm.

Tôi có đúng không

Ngoài ra khi thực hiện ở chế độ kernel, tất cả các ngắt sẽ bị vô hiệu hóa phải không? Vì vậy, câu trả lời không thể là (a) hoặc (b). Ngoài ra, vì hệ điều hành về cơ bản là một phần mềm, nó không thể tạo ra các ngắt H / W.

Ngoài ra, do hệ điều hành tự xử lý các ngắt, nên tôi không hiểu tại sao phải tạo ra một ngắt (& dịch vụ nó) để thay đổi từ kernel sang chế độ người dùng.

Xin vui lòng cho tôi biết nếu tôi sai ở bất cứ đâu. Bất kỳ trợ giúp liên quan đến điều này được đánh giá cao.

Câu trả lời:


7

Usermode thành kernelmode: Sai! ;-) Có, các ngắt được xử lý trong chế độ kernel và ban đầu cách để vào chế độ kernel là bằng cách ngắt bằng cách nào đó bằng phần mềm. Vào tháng 12 năm 2020, có một bộ UIO (Mã lệnh hướng dẫn chưa thực hiện), gọi bất kỳ thứ nào gây ra bẫy cho hệ điều hành. Chúng bao gồm các hướng dẫn dấu phẩy động (nếu không có trong phần cứng) và các hướng dẫn kỳ lạ khác, nhưng cũng là phương tiện để thực hiện các cuộc gọi hệ điều hành. Gia đình i? 86 có inthướng dẫn (ngắt), theo truyền thống được sử dụng như bạn nói. Các thành viên mới hơn trong gia đình có SYSTENT để thực hiện các cuộc gọi giám sát hiệu quả hơn. Các phương tiện chuyển sang chế độ giám sát không thể được đặc quyền, nhưng bằng cách nào đó phải được kiểm soát chặt chẽ bởi kernel (nơi bạn nhập kernel, những đối số bạn vượt qua, ...).

Kernelmode to usermode: Không cần hoạt động "đặc quyền thả" được đặc quyền. Nếu bạn không có đặc quyền, bỏ chúng là không có. Nhưng cơ chế chính xác là kiến ​​trúc phụ thuộc cực độ.

Ngắt bị vô hiệu hóa trong kernel: Ngắt cho biết một số điều kiện phải được xử lý càng sớm càng tốt (ví dụ: nếu dữ liệu đến qua mạng không được lưu từ thẻ trước khi đến lần tiếp theo, nó sẽ bị ghi đè). Do đó, ngắt rất hiếm khi bị vô hiệu hóa. Trong các hệ thống Unix ban đầu (và cùng thời), có một CPU và cách đơn giản nhất để có được một khu vực quan trọng ("không ai gây rối với dữ liệu của tôi trong khi tôi sửa đổi nó") chỉ là để vô hiệu hóa các ngắt. Pains đã được thực hiện để giữ cho "ngắt bị gián đoạn" kéo dài càng ngắn càng tốt vì những điều trên. Trên các máy đa CPU hiện tại, việc vô hiệu hóa các ngắt trên một CPU không làm được gì nhiều theo hướng này; vô hiệu hóa các ngắt trên toàn cầu là cực kỳ tốn kém trong việc phối hợp giữa các CPU, vì vậy nó không được thực hiện (hoặc cực kỳ hiếm).


"Không cần hoạt động" thả đặc quyền "để được đặc quyền". Vì vậy, bạn muốn nói, để thay đổi từ Kernel sang chế độ Người dùng, một hướng dẫn không có đặc quyền sẽ làm. Nếu đó là một hướng dẫn không có đặc quyền, thì ngay cả người dùng cũng có thể thực thi nó & thay đổi từ kernel sang chế độ người dùng? Hay tôi đã giải thích nó sai?
avi

Có, "người dùng bình thường" không thể vào chế độ kernel. Bên cạnh đó, bỏ đặc quyền không thể gây hại gì, do đó, nó không cần phải được đặc quyền (tự nó). Nếu làm điều này trên một số máy có nghĩa là các thanh ghi đặc quyền frobbing, nó sẽ được đặc quyền ở đó. Nhưng nó không phải là đặc quyền.
vonbrand

Tôi không hiểu đúng. Nhận xét và trả lời trước đây của bạn mâu thuẫn với chính nó. Trong nhận xét bạn đã nói, "một" người dùng bình thường "không thể vào chế độ kernel", nhưng trong câu trả lời, bạn đã đề cập đến "Không cần hoạt động" thả đặc quyền "để được đặc quyền" ". Tôi đang thiếu gì? : S Nói một cách đơn giản, để thay đổi Kernel thành chế độ Người dùng, bit chế độ phải được thay đổi. Mà không thể được thực hiện trong chế độ người dùng phải không? Vì vậy, nó không thể là hướng dẫn không đặc quyền.
avi

Chết tiệt, tôi cũng không hiểu tại sao chế độ người dùng sang chế độ kernel lại sai? Theo giải thích của bạn, trong một vài dòng đầu tiên bạn đề cập đến người dùng ở chế độ kernel có thể được thực hiện thông qua hướng dẫn INT & cuối cùng bạn đã đề cập: 'Phương tiện chuyển sang chế độ giám sát không thể được đặc quyền'. Đây không phải là tất cả những gì tôi đã đề cập sao? Ngắt H / W (rõ ràng, ví dụ: yêu cầu I / O), ngắt S / W (lệnh INT) & lệnh không đặc quyền.
avi

có thể được thực hiện với một ngắt, nhưng có những khả năng khác. Nó không thể là đặc quyền (nếu có, không người dùng nào có thể làm điều đó ;-).
vonbrand

0

Từ chế độ kernel (đặc quyền) đến người dùng (không có đặc quyền), chúng tôi sử dụng RtI (trở về từ ngắt), đây là một hướng dẫn đặc quyền ( https://www-01.ibm.com/support/ledgeledgecenter/ssw_aix_71/com.ibm.aix .alangref / idalangref_rfi_retfinter_instrs.htm ). vì vậy, theo tôi nó nên là tùy chọn C.


3
Những gì hướng dẫn được sử dụng là hoàn toàn phụ thuộc vào kiến ​​trúc.
David Richerby
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.