Làm thế nào để Hệ điều hành có thể chạy trên cùng một con chip mà nó được cho là đang quản lý?


17

Từ những bài đọc của tôi về Hệ điều hành (đọc tài liệu cơ bản trên Wikipedia, các trang công nghệ, v.v.) tôi đã biết rằng Hệ điều hành là một chương trình cho phép các chương trình và ứng dụng tương tác với phần cứng một cách hiệu quả và an toàn.

Tuy nhiên, tôi bối rối về cách Hệ điều hành giám sát hoạt động của máy tính khi chính nó cần được vận hành.

Ý tôi là sao Chà, theo cách tôi tưởng tượng một Hệ điều hành hoạt động, là trên máy tính, sẽ có hai CPU. Một cái chạy HĐH mọi lúc, và cái khác mà HĐH sử dụng để chạy máy tính. Tuy nhiên, hóa ra HĐH đang chạy trên cùng một CPU mà các tiến trình khác đang có. Điều này giống như một người quản lý phải làm việc trên cùng một dây chuyền sản xuất với nhân viên của mình và chỉ được sử dụng các công cụ quyền lực khi một nhân viên khác hoàn thành công việc với họ. Anh ta sẽ không phải là một người quản lý rất hiệu quả, vì anh ta sẽ không có khả năng ra lệnh nếu nhân viên của anh ta thậm chí hơi vô kỷ luật.

Vậy làm thế nào để HĐH chỉ chạy một phần thời gian trên cùng một CPU phải chia sẻ giữa tất cả các tiến trình khác? Làm thế nào để kết thúc công việc này?


1
Một người quản lý không nên sử dụng các công cụ quyền lực của nhân viên của mình! Thay vào đó, anh ta phải đảm bảo rằng các nhân viên có công cụ quyền lực làm việc.
MSalters

Câu trả lời:


15

Các CPU hiện đại nhận thức được hệ điều hành ở một mức độ nhất định. Họ cung cấp một số "công cụ quyền lực" cho người đầu tiên tuyên bố chúng. Thông thường đây là bộ tải khởi động, sau đó bàn giao quyền điều khiển cho HĐH. Người ta thường nói về "chế độ kernel" so với "chế độ người dùng" hoặc "ring 0" so với "ring 3" để phân biệt giữa một tiến trình với các đặc quyền bổ sung và phần còn lại.

Các "công cụ quyền lực" này là các đặc quyền nhất định để quản lý tài nguyên: Kiểm soát bộ nhớ, truy cập vào phần cứng và thời gian mã cấp độ người dùng có thể được thực thi mà không bị gián đoạn.

CPU thực thi HĐH với các đặc quyền đặc biệt của nó khi một trong những sự kiện sau xảy ra:

  1. Một quy trình chế độ người dùng bàn giao rõ ràng quyền điều khiển cho quy trình chế độ kernel. Đây được gọi là một tòa nhà cao tầng .
  2. Quá trình chế độ nhân có thể sử dụng các đặc quyền đặc biệt của nó để đăng ký một số sự kiện nhất định (ví dụ: phần cứng bên ngoài gửi tín hiệu đặc biệt đến CPU hoặc quá trình không gian người dùng cố gắng truy cập tài nguyên dành riêng). Khi xảy ra chẵn như vậy, CPU sẽ dừng quá trình chế độ người dùng ngay lập tức và bàn giao điều khiển quá trình chế độ kernel. Thông thường một người nói từ một ngắt .

Vì vậy, hệ điều hành có thể chạy trên cùng một chip vì chip được xây dựng cho việc này. Nó có thể bảo lưu các đặc quyền đặc biệt cho chính nó. CPU có thể làm gián đoạn tất cả các đoạn mã khác mà không có các đặc quyền đặc biệt này bất cứ lúc nào và bàn giao quyền điều khiển cho HĐH.

Một số chip có hỗ trợ rất hạn chế (ví dụ: vi điều khiển ) không có hỗ trợ này cho mã đặc quyền đặc biệt. Những con chip này thường chạy mà không có HĐH. Chỉ có một chương trình lớn đang chạy, có thể truy cập trực tiếp vào phần cứng, phải đáp ứng các ngắt phần cứng và có thể truy cập bất kỳ tài nguyên nào bất cứ lúc nào. Nếu chương trình đó mắc một lỗi, thường thì toàn bộ sự cố.


17

Ở dạng nguyên thủy nhất của chúng, các hệ điều hành dựa trên các quy trình được xử lý tốt và chuyển giao quyền điều khiển trở lại hệ điều hành theo thời gian. Nếu một quy trình không được xử lý tốt, thì thực sự có thể xảy ra việc hệ điều hành bị đóng băng.

Tuy nhiên, hầu hết các CPU đều có các ngắt : một ngắt tạm dừng quá trình hiện tại (quyền ưu tiên) và điều khiển trở lại hệ điều hành. Bạn có thể lên lịch các ngắt xảy ra theo các khoảng thời gian cụ thể hoặc được kích hoạt bên ngoài (ví dụ: nhấn nút đặt lại).

Về cơ bản, CPU chuyển đổi qua lại giữa việc chạy HĐH và chạy các tiến trình với tốc độ cực nhanh. Hơn nữa, CPU có "chế độ người dùng" và "chế độ nhân". Các tiến trình chạy ở chế độ người dùng và HĐH chạy ở chế độ kernel. Chạy trong chế độ người dùng sẽ ngăn quá trình thực thi các lệnh bị hạn chế (chẳng hạn như IO). Nếu một quá trình muốn ghi vào đĩa, nó phải yêu cầu HĐH thực hiện. HĐH chuyển sang chế độ kernel và thực hiện ghi thay mặt cho quá trình (sau khi đảm bảo quy trình có các quyền cần thiết).


7
@Imray Không thực sự, với CPU, HĐH chỉ là một đoạn mã khác. Tuy nhiên, CPU có nhiều tính năng được thiết kế để sử dụng bởi những người tạo ra HĐH.
Tom van der Zanden

3
Tôi không biết "nhận thức" có phải là thuật ngữ đúng hay không, nhưng CPU không có lý do gì để tồn tại ngoài việc chạy HĐH. Nó chắc chắn không hoàn toàn độc lập. Trên thực tế, CPU hoàn toàn phụ thuộc vào HĐH để quản lý các chế độ khác nhau của nó và nói cho nó biết phải làm gì.
Mohair

2
@Mohair Có rất nhiều bộ vi điều khiển chạy mà không có HĐH, liệu chúng có được tính là CPU không?
Tom van der Zanden

2
"có được tính là CPU không?" Tất nhiên họ làm. 6502 trong máy tính đầu tiên của tôi cũng vậy, mặc dù nó không có vòng nhân và người dùng riêng biệt, và bạn có thể poketừ dòng lệnh để làm việc với tất cả các loại nghịch ngợm.
dmckee

2
@TomvanderZanden chính xác như thế nào the CPU switches back and forth between running the OS and running processes? Điều gì kích hoạt công tắc?
jnovacho

1

Bạn không cần hai bộ xử lý khác nhau cho bộ vi xử lý để chạy mã không gian người dùng và mã vùng. Về cơ bản, nó hoạt động theo cách này khi bạn bật máy tính của mình lên Bios tải Bootloader (mã 512kb trên đĩa kết thúc chữ ký bộ tải khởi động 55aa) để ram và thông qua bộ tải khởi động này, kernel của bạn được tải vào ram và chạy mãi cho đến khi bạn tắt máy tính. Và kernel của bạn quản lý bộ nhớ và không cho phép mã kernel của bạn nằm trên ram sẽ không bị ghi đè bởi mã không gian người dùng. Với mục đích này, có các cuộc gọi hệ thống mà mã không gian người dùng được gọi bằng cách sử dụng các cuộc gọi hệ thống này và thêm mã không gian người dùng của bạn vào ram và bắt đầu thực hiện nó. Trong các hệ điều hành, khái niệm này được nghiên cứu như Quản lý bộ nhớ. Đây là liên kết bạn có thể đọc nó rất tốt để bắt đầu https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf


0

Để xây dựng các câu trả lời khác, sẽ dễ hiểu hơn nếu bạn nghĩ rằng chính kernel không phải là một quy trình mà là một mã quản lý. Bất kỳ quá trình người dùng nào cũng có thể chuyển từ chế độ người dùng sang chế độ kernel và thực thi mã kernel (hướng dẫn được mã hóa) bằng cách sử dụng một phần của không gian kernel. Sau đó, quá trình có thể quay trở lại chế độ người dùng và chạy lại trong không gian người dùng.

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.