Kernel là gì?
Là nhân hệ điều hành là thành phần trung tâm của hầu hết các hệ điều hành.
Kernel 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).

Thông thường, với vai trò một thành phần cơ bản của một hệ điều hành, nhân có thể cung cấp các tầng trừu tượng mức thấp nhất cho các tài nguyên máy tính đặc biệt là bộ nhớ, CPU, và các thiết bị vào ra mà phần mềm ứng dụng cần điều khiển để thực hiện các chức năng của mình.
Linux Kernel 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 hàm 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.
Phiên bản Kernel
Về bản chất, có nhiều cách để xây dựng cấu trúc và biên dịch 1 bộ kernel nhất định từ đầu.

Nhìn chung, với hầu hết các kernel hiện nay, chúng ta có thể chia ra làm 3 loại: monolithic, microkernel, và hybrid. Linux sử dụng kernel monolithic trong khi OS X (XNU) và Windows 7 sử dụng kernel hybrid.
Microkernel:
Microkernel có đầy đủ các tính năng cần thiết để quản lý bộ vi xử lý, bộ nhớ và IPC. Có rất nhiều thứ khác trong máy tính có thể được nhìn thấy, tiếp xúc và quản lý trong chế độ người dùng.


Microkernel có tính linh hoạt khá cao, vì vậy bạn không phải lo lắng khi thay đổi 1 thiết bị nào đó, ví dụ như VGA (vga là gì, ổ cứng lưu trữ… hoặc thậm chí là cả hệ điều hành.
Microkernel với những thông số liên quan footprint rất nhỏ, tương tự với bộ nhớ và dung lượng lưu trữ, chúng còn có tính bảo mật khá cao vì chỉ định rõ ràng những tiến trình nào hoạt động trong chế độ user mode, mà không được cấp quyền như trong chế độ giám sát – supervisor mode.
Ưu điểm:
– Tính linh hoạt cao
– Bảo mật
– Sử dụng ít footprint cài đặt và lưu trữ
Nhược điểm:
– Phần cứng đôi khi “khó hiểu” hơn thông qua hệ thống driver
– Phần cứng hoạt động dưới mức hiệu suất thông thường vì các trình điều khiển ở trong chế độ user mode
– Các tiến trình phải chờ đợi để được nhận thông tin
– Các tiến trình không thể truy cập tới những ứng dụng khác mà không phải chờ đợi
Monolithic Kernel:
Monolithic chúng có chức năng bao quát rộng hơn so với microkernel, không chỉ tham gia quản lý bộ vi xử lý, bộ nhớ, IRC, chúng còn can thiệp vào trình điều khiển driver, tính năng điều phối file hệ thống, các giao tiếp qua lại giữa server…

Monolithic tốt hơn khi truy cập tới phần cứng và đa tác vụ, bởi vì nếu 1 chương trình muốn thu thập thông tin từ bộ nhớ và các tiến trình khác, chúng cần có quyền truy cập trực tiếp và không phải chờ đợi các tác vụ khác kết thúc.
Nhưng đồng thời, chúng cũng là nguyên nhân gây ra sự bất ổn vì nhiều chương trình chạy trong chế độ supervisor mode hơn, chỉ cần 1 sự cố nhỏ cũng khiến cho cả hệ thống mất ổn định.
Ưu điểm:
– Truy cập trực tiếp đến các phần cứng
– Dễ dàng xử lý các tín hiệu và liên lạc giữa nhiều thành phần với nhau
– Nếu được hỗ trợ đầy đủ, hệ thống phần cứng sẽ không cần cài đặt thêm driver cũng như phần mềm khác
– Quá trình xử lý và tương tác nhanh hơn vì không cần phải chờ đợi
Nhược điểm:
– Tiêu tốn nhiều footprint cài đặt và lưu trữ
– Tính bảo mật kém hơn vì tất cả đều hoạt động trong chế độ giám sát – supervisor mode
Hybrid Kernel:
Hybrid có khả năng chọn lựa và quyết định những ứng dụng nào được phép chạy trong chế độ user hoặc supervisor.

Thông thường, những thứ như driver và file hệ thống I/O sẽ hoạt động trong chế độ user mode trong khi IPC và các gói tín hiệu từ server được giữ lại trong chế độ supervisor.
Tính năng này thực sự rất có ích vì chúng đảm bảo tính hiệu quả của hệ thống, phân phối và điều chỉnh công việc phù hợp, dễ quản lý.
Ưu điểm:
– Các nhà phát triển có thể chọn và phân loại những ứng dụng nào sẽ chạy trong chế độ thích hợp
– Sử dụng ít footprint hơn so với monolithic kernel
– Có tính linh hoạt và cơ động cao nhất
Nhược điểm:
– Có thể bị bỏ lại trong quá trình gây treo hệ thống tương tự như với microkernel
– Các trình điều khiển thiết bị phải được quản lý bởi người dùng