Hạt nhân hệ điều hành (Kernel) là thành phần cốt lõi và thiết yếu trong các hệ điều hành máy tính, chịu trách nhiệm kiểm soát toàn bộ hoạt động của hệ thống. Đây là 'phần mã hệ điều hành luôn hiện diện trong bộ nhớ' có nhiệm vụ quản lý tài nguyên hệ thống, bao gồm việc điều phối các giao tiếp giữa phần cứng và phần mềm. Trong hầu hết các hệ thống, hạt nhân là chương trình đầu tiên được nạp trong quá trình khởi động máy tính (sau bootloader) và thực hiện các nhiệm vụ khởi động, xử lý yêu cầu vào/ra từ phần mềm, đồng thời chuyển các hướng dẫn xử lý dữ liệu cho CPU. Hạt nhân quản lý bộ nhớ và các thiết bị ngoại vi như bàn phím, màn hình, máy in và loa, đồng thời cung cấp các dịch vụ cho các tiến trình phần mềm thông qua các cơ chế giao tiếp giữa các tiến trình (inter-process communication) và các lời gọi hệ thống (system call).
Các loại hạt nhân khác nhau thực hiện nhiệm vụ của hệ điều hành theo các phương thức khác nhau dựa trên thiết kế và cài đặt. Hạt nhân nguyên khối (monolithic kernel) thực hiện các tác vụ của nó bằng cách thực thi toàn bộ mã hệ điều hành trong cùng một vùng bộ nhớ, từ đó cải thiện hiệu năng hệ thống. Ngược lại, các hạt nhân loại nhỏ (microkernel) thực hiện hầu hết các dịch vụ trong không gian người dùng (user space) nhằm nâng cao khả năng bảo trì và tính mô đun của hệ điều hành. Một số thiết kế kết hợp giữa hai loại này, chẳng hạn như (hybrid kernel), có khả năng phân luồng tự động.
Các mã lệnh quan trọng của hạt nhân thường được tải vào một vùng bộ nhớ riêng biệt, được bảo vệ khỏi sự truy cập của các chương trình ứng dụng hoặc các phần không quan trọng khác của hệ điều hành. Hạt nhân thực hiện các nhiệm vụ của nó, chẳng hạn như quản lý tiến trình, điều khiển thiết bị phần cứng như đĩa cứng và xử lý các ngắt, trong vùng bộ nhớ bảo vệ này. Ngược lại, các ứng dụng như trình duyệt, trình xử lý văn bản hoặc phần mềm phát âm thanh và video hoạt động trong không gian người dùng riêng biệt. Việc phân chia này giúp ngăn chặn sự can thiệp giữa dữ liệu của người dùng và dữ liệu của hạt nhân, giảm thiểu rủi ro gây mất ổn định hoặc chậm chạp, cũng như bảo vệ hệ điều hành khỏi việc bị hỏng do sự cố của các ứng dụng.
Giao diện của hạt nhân là một lớp trừu tượng ở mức thấp. Khi một tiến trình yêu cầu dịch vụ từ hạt nhân, nó cần gửi một lời gọi hệ thống, thường thông qua hàm wrapper giao tiếp với các ứng dụng không gian người dùng qua các thư viện hợp ngữ. Sau khi tải các thanh ghi CPU với số syscall và các tham số tương ứng, hệ điều hành sẽ xử lý yêu cầu (ví dụ: các hệ điều hành giống UNIX thực hiện điều này qua thư viện chuẩn C).
Các thiết kế kiến trúc hạt nhân có sự khác biệt. Hạt nhân monolithic hoạt động hoàn toàn trong một không gian địa chỉ duy nhất với CPU hoạt động ở chế độ giám sát, tập trung vào hiệu năng. Hạt nhân loại nhỏ (microkernel) thực hiện hầu hết các dịch vụ trong không gian người dùng (user space) để nâng cao khả năng bảo trì và tính mô đun của hệ điều hành, với MINIX 3 là ví dụ tiêu biểu. Ngược lại, nhân Linux thuộc loại monolithic nhưng cũng có tính mô-đun, cho phép thêm và gỡ bỏ các mô-đun nhân trong thời gian thực.
Thành phần cốt lõi của hệ thống máy tính này chịu trách nhiệm chạy hoặc thực thi các chương trình. Hạt nhân quyết định chương trình nào trong số nhiều chương trình đang chạy sẽ được cấp phát cho bộ xử lý hoặc các bộ xử lý vào bất kỳ thời điểm nào.
- Bộ nhớ truy cập ngẫu nhiên (RAM)
- RAM lưu trữ cả cấu trúc và dữ liệu của ứng dụng. Để một chương trình có thể chạy, cả hai đều cần có mặt trong bộ nhớ. Thường thì nhiều chương trình sẽ yêu cầu nhiều bộ nhớ hơn máy tính cung cấp. Hạt nhân chịu trách nhiệm phân bổ bộ nhớ cho từng tiến trình và quản lý tình huống khi bộ nhớ không đủ.
- Thiết bị vào/ra (I/O)
- Thiết bị vào/ra bao gồm các thiết bị ngoại vi như bàn phím, chuột, ổ đĩa, máy in, thiết bị USB, bộ điều hợp mạng và màn hình. Hạt nhân phân phối yêu cầu từ các ứng dụng cho thiết bị phù hợp và cung cấp các phương thức dễ sử dụng để tương tác với thiết bị (thường được trừu tượng hóa để ứng dụng không cần biết chi tiết cài đặt của thiết bị).
Tổng quan chung
Theo định nghĩa của Jochen Liedtke, 'nhân hệ điều hành' thường chỉ phần của hệ điều hành có tính chất bắt buộc và chia sẻ chung với tất cả các phần mềm khác.
Hầu hết các hệ điều hành đều dựa vào hạt nhân để hoạt động. Sự tồn tại của hạt nhân là hệ quả tất yếu của việc thiết kế hệ thống máy tính thành các lớp trừu tượng, làm đơn giản hóa các quá trình xử lý cho con người nhưng tăng độ phức tạp cho máy tính. Mỗi lớp trừu tượng thấp hơn dựa vào các lớp ngay trên nó để xử lý các tác vụ. Hạt nhân hệ điều hành đại diện cho lớp trừu tượng thấp nhất trước khi qua trình biên dịch ngôn ngữ assembly và thực thi trên phần cứng. Một số phần mềm có thể bỏ qua hạt nhân và giao tiếp trực tiếp với phần cứng, điều này làm gia tăng sự phức tạp trong thiết kế và lập trình phần mềm. Thiết kế này được xem như xây dựng hệ thống đơn giản nhất cho máy tính, có tính khả thi cao và có thể thực thi phần mềm.
Mặc dù thường được gọi là nhân hệ điều hành, phần tương tự trong hệ thống máy tính cũng được biết đến với các tên gọi mới như hạt nhân - nucleus hoặc lõi - core. (Lưu ý rằng từ core liên quan đến bộ nhớ chính của hệ thống máy tính, vì các máy tính trước đây sử dụng bộ nhớ core). Những tên gọi này thường được sử dụng để chỉ những yếu tố cốt lõi của hệ điều hành.
Thông thường, boot loader khởi động hạt nhân hệ điều hành ở chế độ giám sát. Hạt nhân sau đó sẽ nạp phần đầu và thực thi tiến trình đầu tiên. Sau khi khởi động xong, hạt nhân không hoạt động liên tục mà chỉ phản hồi các sự kiện bên ngoài (Ví dụ: các ứng dụng yêu cầu dịch vụ từ hạt nhân qua hàm hệ thống, hoặc phần cứng sử dụng ngắt để thông báo cho hạt nhân về các sự kiện). Hạt nhân còn cung cấp một vòng lặp thực thi khi không có tiến trình nào đang chạy, thường được gọi là tiến trình nhàn rỗi.
Quản lý tài nguyên
Các yếu tố chính trong việc quản lý tài nguyên bao gồm việc xác định miền thực thi (không gian địa chỉ) và cơ chế bảo vệ để quản lý quyền truy cập tài nguyên trong miền đó. Hạt nhân cung cấp các phương pháp đồng bộ hóa và giao tiếp liên tiến trình (IPC). Các phương pháp này có thể được thực hiện trực tiếp trong hạt nhân hoặc thông qua các tiến trình khác đang hoạt động. Mặc dù hạt nhân cần cung cấp IPC để cho phép truy cập vào tài nguyên từ các tiến trình khác, nó cũng cần cung cấp các phương thức cho các chương trình đang chạy để yêu cầu truy cập tài nguyên. Hạt nhân còn phải quản lý việc chuyển đổi ngữ cảnh giữa các tiến trình hoặc luồng.
Quản lý bộ nhớ
Hạt nhân có quyền truy cập hoàn toàn vào bộ nhớ hệ thống và phải đảm bảo các tiến trình có thể truy cập bộ nhớ một cách an toàn khi cần. Thường, điều này bắt đầu với việc định địa chỉ ảo, thường thông qua phân trang và/hoặc phân đoạn. Định địa chỉ ảo cho phép hạt nhân chuyển đổi địa chỉ vật lý thành địa chỉ ảo, giúp phân chia bộ nhớ cho các tiến trình khác nhau. Điều này đảm bảo rằng mỗi chương trình hoạt động như thể nó là chương trình duy nhất (ngoài hạt nhân), từ đó ngăn ngừa các ứng dụng gây lỗi lẫn nhau.
Trên nhiều hệ thống, địa chỉ ảo của chương trình có thể liên kết đến dữ liệu chưa có trong bộ nhớ. Lớp định hướng từ địa chỉ ảo cho phép hệ điều hành sử dụng các kho lưu trữ bổ sung như ổ cứng để lưu trữ dữ liệu thay vì bộ nhớ chính (RAM). Nhờ vậy, hệ điều hành có thể cung cấp nhiều bộ nhớ hơn so với bộ nhớ vật lý có sẵn. Khi dữ liệu cần thiết không có trong RAM, CPU thông báo cho hạt nhân, hạt nhân sẽ ghi dữ liệu không còn hoạt động vào ổ đĩa (nếu cần) và thay thế bằng dữ liệu yêu cầu. Sau đó, chương trình có thể tiếp tục từ điểm dừng. Quá trình này thường được gọi là phân trang theo nhu cầu.
Định địa chỉ ảo cũng cho phép tạo ra các phân vùng ảo của bộ nhớ, với một vùng dành cho hạt nhân (kernel space) và một vùng khác cho ứng dụng (user space). Bộ xử lý ngăn không cho các ứng dụng truy cập bộ nhớ của hạt nhân, từ đó bảo vệ hạt nhân khỏi việc bị hỏng do ứng dụng. Cấu trúc phân vùng này đã góp phần quan trọng vào các thiết kế hiện tại của các hạt nhân đa mục đích, và mặc dù một số hạt nhân nghiên cứu (như Singularity) có cách tiếp cận khác, nhưng đây là một yếu tố phổ biến trong các hệ thống hiện đại.
Quản lý thiết bị
Để các tiến trình thực hiện chức năng hiệu quả, chúng cần truy cập vào các thiết bị ngoại vi gắn với máy tính, điều này được quản lý bởi nhân thông qua các trình điều khiển thiết bị. Trình điều khiển thiết bị là phần mềm giúp hệ điều hành giao tiếp với phần cứng, cung cấp thông tin về cách điều khiển và tương tác với các thiết bị cụ thể. Chức năng của trình điều khiển là trừu tượng hóa, chuyển các lệnh gọi hàm từ hệ điều hành thành các lệnh gọi thiết bị. Điều này đảm bảo thiết bị hoạt động chính xác với trình điều khiển phù hợp. Các trình điều khiển thiết bị thường được sử dụng cho card màn hình, card âm thanh, máy in, máy quét, modem và card mạng LAN.
Tại cấp độ phần cứng, các loại trình điều khiển thiết bị phổ biến bao gồm:
- Giao tiếp trực tiếp với phần cứng
- Sử dụng giao diện cấp cao như Video BIOS
- Sử dụng trình điều khiển cấp thấp hơn, chẳng hạn như trình điều khiển file kết hợp với trình điều khiển đĩa
- Mô phỏng công việc với phần cứng trong khi thực hiện các chức năng khác hoàn toàn
Ở cấp độ phần mềm, các phương pháp tóm tắt của trình điều khiển thiết bị bao gồm:
- Cho phép hệ điều hành truy cập trực tiếp vào các tài nguyên phần cứng
- Chỉ triển khai các tính năng cơ bản
- Cung cấp giao diện cho phần mềm không phải trình điều khiển, ví dụ như TWAIN
- Triển khai các ngôn ngữ (thường là ngôn ngữ cấp cao như PostScript)
Khi một ứng dụng cần hiển thị thông tin trên màn hình, nó gửi yêu cầu đến nhân hệ điều hành, nhân sẽ chuyển tiếp yêu cầu đó tới trình điều khiển hiển thị, và trình điều khiển chịu trách nhiệm thực hiện việc vẽ ký tự hoặc pixel trên màn hình.
Nhân hệ điều hành phải duy trì danh sách các thiết bị sẵn có. Danh sách này có thể được xác định từ trước (như trong hệ thống nhúng nơi hạt nhân được viết lại khi phần cứng thay đổi), cấu hình bởi người dùng (trên các PC cũ hoặc hệ thống không dành riêng cho cá nhân) hoặc phát hiện tại thời điểm chạy (thường gọi là plug and play). Trong các hệ thống plug-and-play, trình quản lý thiết bị quét các bus phần cứng như PCI hoặc USB để phát hiện thiết bị đã cài đặt và tìm kiếm trình điều khiển phù hợp.
Quản lý thiết bị là một lĩnh vực rất chuyên biệt trong hệ điều hành, và các trình điều khiển được xử lý khác nhau tùy thuộc vào thiết kế của nhân. Dù vậy, nhân phải cung cấp giao diện I/O để trình điều khiển có thể truy cập phần cứng thông qua các cổng hoặc vùng bộ nhớ. Quyết định thiết kế hệ thống quản lý thiết bị rất quan trọng, vì một số thiết kế có thể yêu cầu chuyển mạch ngữ cảnh, điều này có thể tốn nhiều tài nguyên CPU và gây ảnh hưởng đáng kể đến hiệu suất.
- Giao tiếp liên tiến trình.
- Hệ điều hành.
- Bộ nhớ ảo.
Chú thích
Ghi chú
- Benjamin Roch (2004). “Nhân đơn khối so với Nhân vi mô” (PDF). Lưu trữ ngày 1 tháng 11 năm 2006. Truy cập ngày 12 tháng 10 năm 2006.
- Abraham Silberschatz, Henry Korth, S. Sudarshan (1991). Các khái niệm về hệ điều hành. James L. Peterson, Peter B. Galvin. Addison-Wesley, Boston, Massachusetts. ISBN 0-201-51379-X.
- Per Brinch Hansen. Nguyên lý Hệ điều hành. Prentice Hall. ISBN 0-13-637843-9.
- Per Brinch Hansen (2001). “Sự tiến hóa của hệ điều hành” (pdf). Truy cập ngày 24 tháng 10 năm 2006. Cùng với: Per Brinch Hansen (biên tập). Hệ điều hành cổ điển: từ xử lý lô đến hệ thống phân tán. Springer-Verlag, New York. ISBN 0-387-95113-X.
- Hermann Härtig, Michael Hohmuth, Jochen Liedtke, Sebastian Schönberg, Jean Wolter. Hiệu suất của các hệ thống dựa trên µ-kernel. ACM SIGOPS Operating Systems Review, v.31 n.5, p. 66-77, Tháng 12 năm 1997.
- M. E. Houdek, F. G. Soltis, R. L. Hoffman. Hỗ trợ địa chỉ hóa dựa trên khả năng của IBM System/38. Trong: Kỷ yếu Hội nghị quốc tế ACM về Kiến trúc máy tính lần thứ 8, ACM/IEEE, p. 341–348, 1981.
- Intel Corporation (2002). Sách hướng dẫn phát triển phần mềm IA-32, Tập 1: Kiến trúc cơ bản.
- R. Levin (1975). “Tách biệt chính sách và cơ chế trong Hydra”. ACM Symposium on Operating Systems Principles / Kỷ yếu hội nghị lần thứ năm về nguyên tắc hệ điều hành: 132–140.
- Henry M. Levy (1984). Các hệ thống máy tính dựa trên khả năng. Digital Press, Maynard, Mass. ISBN 0-932376-22-3.
- Jochen Liedtke. Xây dựng µ-Kernel, Kỷ yếu Hội nghị ACM lần thứ 15 về Nguyên tắc Hệ điều hành (SOSP), Tháng 12 năm 1995.
- Theodore A. Linden (1976). “Cấu trúc hệ điều hành hỗ trợ bảo mật và phần mềm đáng tin cậy”. ACM Computing Surveys (CSUR). 8 (4): 409–445.
- Harold Lorin (1981). Các hệ điều hành. Addison-Wesley, Boston, Massachusetts. ISBN 0-201-14464-6.
- Michael D. Schroeder, Jerome H. Saltzer (1972). “Kiến trúc phần cứng để triển khai các vòng bảo vệ”. Communications of the ACM. 15 (3): 157–170.
- Alan C. Shaw (1974). Thiết kế logic của các hệ điều hành. Prentice-Hall. ISBN 0-13-540112-7.
- Andrew S. Tanenbaum (1979). Tổ chức máy tính có cấu trúc. Prentice-Hall, Englewood Cliffs, New Jersey. ISBN 0-13-148521-0.
- W. Wulf, E. Cohen, W. Corwin, A. Jones, R. Levin, C. Pierson, F. Pollack. HYDRA: nhân của một hệ điều hành đa xử lý. Communications of the ACM. 17 (6): 337–345.
- F. Baiardi (1988). Architettura dei Sistemi di Elaborazione, volume 1 (bằng tiếng Ý). Franco Angeli. ISBN 88-204-2746-X.
- Michael M. Swift, Brian N. Bershad, Henry M. Levy. Cải thiện độ tin cậy của các hệ điều hành thương mại. ACM Transactions on Computer Systems (TOCS), v.23 n.1, p. 77-110, Tháng 2 năm 2005.
Đọc thêm
- Andrew Tanenbaum, Hệ điều hành - Thiết kế và Triển khai (Phiên bản thứ ba);
- Andrew Tanenbaum, Các hệ điều hành hiện đại (Phiên bản thứ hai);
- Daniel P. Bovet, Marco Cesati, Nhân Linux;
- David A. Peterson, Nitin Indurkhya, Patterson, Tổ chức và Thiết kế Máy tính, Morgan Koffman (ISBN 1-55860-428-6);
- B.S. Chalk, Tổ chức và Kiến trúc Máy tính, Macmillan P. (ISBN 0-333-64551-0).
Liên kết bên ngoài
- So sánh chi tiết giữa các nhân hệ điều hành phổ biến nhất
Hệ điều hành | |||||
---|---|---|---|---|---|
Chung |
| ||||
Hạt nhân |
| ||||
Quản lý tiến trình |
| ||||
Quản lý bộ nhớ và bảo vệ tài nguyên |
| ||||
Truy cập lưu trữ và hệ thống tập tin |
| ||||
Danh sách |
| ||||
Khái niệm khác |
|