Nhân hệ điều hành
thành phần trung tâm của hầu hết hệ điều hành / From Wikipedia, the free encyclopedia
Nhân hệ điều hành (tiếng Anh: Kernel) là một chương trình máy tính, là thành phần trung tâm và không thể thiếu của các hệ điều hành máy tính, kiểm soát hoàn toàn mọi thứ trong hệ thống.[1] Nó là "phần của mã hệ điều hành luôn thường trú trong bộ nhớ"[2] có nhiệm vụ quản lý các tài nguyên hệ thống (liên lạc giữa các thành phần phần cứng và phần mềm).[3] Trong phần lớn các hệ thống, nó là chương trình đầu tiên được nạp vào trong quá trình khởi động máy tính (sau bootloader). Nó xử lý phần còn lại của khởi động cũng như các yêu cầu vào/ra từ phần mềm, chuyển chúng thành hướng dẫn xử lý dữ liệu cho CPU. 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. Nhân hệ điều hành thường cung cấp các tiện ích xử lý này cho các tiến trình của các phần mềm ứng dụng qua các cơ chế liên lạc 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 nhân khác nhau thực hiện các tác vụ của hệ điều hành theo các cách khác nhau, tùy theo thiết kế và cài đặt. Các nhân kiểu nguyên khối (monolithic kernel) thực hiện các nhiệm vụ của mình bằng cách thực thi toàn bộ mã hệ điều hành trong cùng một địa chỉ bộ nhớ để tăng hiệu năng hệ thống. Trong khi đó các nhân loại nhỏ (microkernel) chạy hầu hết các dịch vụ tại không gian người dùng (user space) với mục đích tăng khả năng bảo trì và tính mô đun của hệ điều hành. Có nhiều thiết kế nằm ở giữa hai thái cực này ví dụ như (hybrid kernel) là nhân tự động phân luồng.
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, vùng này đượ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ác ít quan trọng hơn của hệ điều hành. Kernel thực hiện các nhiệm vụ của nó, chẳng hạn như chạy các tiến trình, quản lý các thiết bị phần cứng như đĩa cứng và xử lý các ngắt, trong kernel space được bảo vệ này. Ngược lại, các chương trình ứng dụng như trình duyệt, trình xử lý văn bản hoặc trình phát âm thanh hoặc video sử dụng một vùng bộ nhớ, không gian người dùng riêng biệt. Sự tách biệt này ngăn không cho dữ liệu của người dùng và dữ liệu hạt nhân can thiệp với nhau và gây ra sự mất ổn định và chậm chạp,[1] cũng như ngăn chặn các chương trình ứng dụng bị trục trặc làm hỏng toàn bộ hệ điều hành.
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 một dịch vụ tới hạt nhân, nó phải gửi một lời gọi hệ thống, thường là thông qua một hàm wrapper giao tiếp với các ứng dụng không gian người dùng bởi các thư viện hợp ngữ nhúng để truy nhập hạt nhân sau khi tải các thanh ghi CPU với số syscall và các tham số của nó (ví dụ: hệ điều hành tương tự UNIX thực hiện nhiệm vụ này bằng cách sử dụng thư viện chuẩn C).
Có các thiết kế kiến trúc nhân khác nhau. Hạt nhân monolithic chạy hoàn toàn trong một không gian địa chỉ duy nhất với CPU thực thi ở chế độ giám sát, tập trung vào hiệu năng. Microkernels chạy hầu hết các dịch vụ tại không gian người dùng (user space)[4] với mục đích tăng khả năng bảo trì và tính mô đun của hệ điều hành.[5] MINIX 3 là một ví dụ đáng chú ý về thiết kế microkernel. Thay vào đó, nhân Linux là monolithic, mặc dù nó cũng là mô-đun, vì nó có thể chèn và loại bỏ các mô-đun nhân có thể tải được trong runtime.
Thành phần trung tâm này của hệ thống máy tính có nhiệm vụ chạy hoặc thực thi các chương trình. Kernel chịu trách nhiệm quyết định bất kỳ lúc 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ý.
- Bộ nhớ truy cập ngẫu nhiên (RAM)
- RAM được dùng để lưu trữ cả cấu trúc và dữ liệu ứng dụng.[chú thích 1] Thông thường, cả hai cần phải có trong bộ nhớ để một chương trình có thể thực thi. Thường thì nhiều chương trình sẽ muốn truy cập vào bộ nhớ, thường đòi hỏi nhiều bộ nhớ hơn máy tính có sẵn. Kernel chịu trách nhiệm quyết định bộ nhớ nào mà mỗi tiến trình có thể được sử dụng và xác định việc cần làm khi không có đủ bộ nhớ.
- 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à thiết bị hiển thị. Kernel phân bổ các yêu cầu từ các ứng dụng để thực hiện I/O tới một thiết bị thích hợp và cung cấp các phương pháp thuận tiện để sử dụng thiết bị (thường được trừu tượng hóa đến mức ứng dụng không cần biết chi tiết triển khai của thiết bị).