Quá trình trong chế độ người dùng chuyển sang chế độ kernel. Sau đó, quá trình sẽ có quyền root?


7

Theo http://www.linfo.org/kernel_mode.html trong đoạn 7:

Khi một tiến trình người dùng chạy một phần mã hạt nhân thông qua một cuộc gọi hệ thống, quá trình này tạm thời trở thành một tiến trình kernel và ở chế độ kernel. Trong khi ở chế độ kernel, quá trình sẽ có các đặc quyền gốc (tức là quản trị) và quyền truy cập vào các tài nguyên hệ thống chính. Toàn bộ kernel, không phải là tiến trình mà là bộ điều khiển các tiến trình, chỉ thực thi trong chế độ kernel. Khi kernel đã thỏa mãn yêu cầu của một tiến trình, nó sẽ trả về tiến trình đó cho chế độ người dùng.

Nó không được tiết lộ cho tôi về dòng này,

Trong khi ở chế độ kernel, quá trình sẽ có các đặc quyền gốc (tức là quản trị) và quyền truy cập vào các tài nguyên hệ thống chính.

Tại sao một quá trình không gian người dùng chạy không phải là root sẽ có quyền root? Làm thế nào nó khác với quá trình không gian người dùng chạy như root?


Nó chỉ ra rằng không phải tất cả mọi thứ bạn đọc trên internet là chính xác. Bạn không trở thành root, khi ở chế độ kernel. Chế độ kernel là tất cả mạnh mẽ. Trong chế độ này, nó có thể tự hỏi, người dùng nào đang hoạt động, tôi sẽ làm những gì đã được hỏi về tôi. Nếu bạn đã trở thành root, thì kernel sẽ là mọi thứ bạn yêu cầu, đây rõ ràng không phải là trường hợp.
ctrl-alt-delor

Câu trả lời:


4

(Tôi sẽ cố gắng ngắn gọn.)

Về lý thuyết, có hai chiều đặc quyền:

  • Kiến trúc tập lệnh của máy tính (ISA), bảo vệ một số thông tin và / hoặc chức năng nhất định của máy.

  • Hệ điều hành (HĐH) tạo ra một hệ sinh thái cho các ứng dụng và giao tiếp. Tại cốt lõi của nó là kernel, một chương trình có thể chạy trên ISA mà không phụ thuộc bất kỳ loại nào.

Các hệ điều hành ngày nay thực hiện rất nhiều nhiệm vụ rất khác nhau để chúng ta có thể sử dụng máy tính như chúng ta làm ngày nay. Trong một khung nhìn rất đơn giản, rất, rất, bạn có thể tưởng tượng kernel là chương trình duy nhất được thực hiện bởi máy tính. Các ứng dụng, quy trình và người dùng đều là các vật phẩm của hệ sinh thái được tạo bởi HĐH và đặc biệt là kernel.

Khi chúng ta nói về các đặc quyền của người dùng (không gian) đối với hệ điều hành, chúng ta sẽ nói về các đặc quyền được quản lý, cấp và thực thi bởi hệ điều hành. Ví dụ, quyền hạn chế tệp tìm nạp dữ liệu từ một thư mục cụ thể được thực thi bởi kernel. Nó xem xét một số ID được đồng hóa với tệp, diễn giải một số bit đại diện cho các đặc quyền và sau đó lấy dữ liệu hoặc từ chối làm như vậy.

Hệ thống phân cấp đặc quyền trong ISA cung cấp các công cụ mà kernel sử dụng cho mục đích của nó. Các chi tiết cụ thể khác nhau rất nhiều, nhưng nói chung có chế độ nhân, trong đó các chương trình được CPU thực thi rất tự do để thực hiện I / O và sử dụng các hướng dẫn được cung cấp bởi ISA và chế độ người dùng trong đó I / O và hướng dẫn gò bó.

Chẳng hạn, khi đọc hướng dẫn ghi dữ liệu vào một địa chỉ bộ nhớ cụ thể, CPU ở chế độ kernel có thể chỉ cần ghi dữ liệu vào một địa chỉ bộ nhớ cụ thể, trong khi ở chế độ người dùng, trước tiên, nó sẽ thực hiện một vài kiểm tra để xem liệu địa chỉ bộ nhớ có ở trong không phạm vi địa chỉ được phép mà dữ liệu có thể được ghi. Nếu được xác định rằng địa chỉ có thể không được ghi vào, thông thường, ISA sẽ chuyển sang chế độ kernel và bắt đầu thực thi một luồng lệnh khác, đó là một phần của kernel và nó sẽ thực hiện đúng (TM).

Đó là một ví dụ cho chiến lược thực thi để đảm bảo rằng một chương trình không can thiệp vào chương trình khác ... để javascript trên trang web bạn hiện đang truy cập không thể khiến ứng dụng ngân hàng trực tuyến của bạn thực hiện các giao dịch đáng ngờ ...

Lưu ý, trong chế độ kernel, không có gì khác được kích hoạt để thực thi đúng, nó được giả định rằng chương trình đang chạy trong chế độ kernel đang làm đúng. Đó là lý do tại sao trong chế độ kernel, không có gì có thể buộc một chương trình tuân thủ các quy tắc và khái niệm trừu tượng của hệ sinh thái của HĐH. Đó là lý do tại sao các chương trình chạy trong chế độ kernel có sức mạnh tương đương như người dùng root.

Về mặt kỹ thuật, chế độ kernel mạnh hơn nhiều so với việc chỉ là người dùng root trên HĐH của bạn.


Có phải CPU, liên quan đến mức đặc quyền trong ISA, được thiết kế với đặc quyền của người dùng và kernel?
Ron Vince

@RonVince Có, các đặc quyền kernel / user (hoặc một cái gì đó tương tự, ví dụ như trên x86, chúng được gọi là nhẫn nhẫn nhẫn) tồn tại trong tất cả các CPU cho phép các HĐH phân tách nhiệm vụ (như tất cả các HĐH máy tính để bàn hoặc máy chủ hiện đại: Unix, VMS, Windows , OS / 2, Plan9, BeOS, QNX, Mạnh) để chạy.
Gilles 'SO- ngừng trở thành ác quỷ'

Đây chủ yếu là một câu trả lời hay, nhưng đoạn văn bắt đầu bằng Ví dụ, khi đọc hướng dẫn để ghi dữ liệu, thì hoàn toàn sai. Địa chỉ tải được ánh xạ cho chế độ CPU hiện tại và ghi sẽ đi qua, hoặc không, và một ngoại lệ được đưa ra. Chuyển sang chế độ kernel khi lỗi cấp phép không xảy ra (dù sao nó cũng hoàn toàn vô nghĩa vì nó sẽ khiến các đặc quyền không liên quan).
Gilles 'SO- ngừng trở nên xấu xa'

@gilles: đó là một ISA rất đơn giản và trừu tượng mà tôi tưởng tượng cho câu trả lời này, và ví dụ này có nghĩa là lỗi trang, tồn tại và dẫn đến một trat kernel, IIRC
Bananguin

Ví dụ của bạn không mô tả cách hoạt động của lỗi trang.
Gilles 'SO- ngừng trở nên xấu xa'

6

Quyền root và không root là tất cả những thứ liên quan đến không gian người dùng. Ví dụ: người dùng root có thể cài đặt một ứng dụng và người dùng bình thường không thể.

Tuy nhiên, ngay cả người dùng root cũng có một số hạn chế. Những hạn chế đó được áp đặt bởi thiết kế của hệ điều hành làm phân biệt giữa không gian người dùng và không gian kernel. Ví dụ, ngay cả khi bạn là người dùng root, bạn không thể thay đổi tốc độ mà đĩa cứng quay nếu tùy chọn đó không được cung cấp cho bạn thông qua trình điều khiển (bạn có thể viết trình điều khiển cho phép chức năng, nhưng thậm chí sau đó bạn không truy cập trực tiếp vào phần cứng mà thông qua trình điều khiển).

Lý do cho điều này là việc kiểm soát phần cứng thực tế đều được thực hiện trong không gian kernel và cách thức không gian người dùng truy cập thông qua các cuộc gọi hệ thống. Một không gian kernel không phải là nơi dành cho người dùng :)

Để trả lời câu hỏi của bạn, đây không phải là quá trình nhận được các đặc quyền gốc, đó là chuyển sang chế độ kernel cho phép truy cập không giới hạn vào mọi tài nguyên hệ thống. Tuy nhiên, quyền truy cập không giới hạn đó chỉ khả dụng đối với mã đang chạy trong chế độ kernel, vì vậy quy trình của bạn không có nó. Nó chỉ sử dụng các cuộc gọi của mã hạt nhân.

Mã chạy trong chế độ kernel có quyền truy cập hoàn toàn không bị hạn chế vào hệ thống.


Có nghĩa là dòng đó là sai? Bởi vì đây là lần đầu tiên tôi đọc từ 'root' được sử dụng trong thảo luận về chế độ kernel.
Ron Vince

Về mặt lý thuyết, mọi quy trình không gian người dùng có thể có quyền truy cập không giới hạn vào mọi tài nguyên hệ thống thông qua cuộc gọi hệ thống, nhưng người dùng không phải root bị giới hạn trong danh sách các cuộc gọi hệ thống so với người dùng root?
Ron Vince

@RonVince Vâng, câu thứ hai bạn trích dẫn là sai. Đó là một xấp xỉ, nhưng nó quá thô sơ đến nỗi ở đây nó hoàn toàn sai lệch.
Gilles 'SO- đừ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.