Hạt nhân Linux
Kiến trúc

Nhân Linux là một thiết kế nguyên khối và mô đun hóa (có thể nạp vào hay gỡ bỏ các kernel mô đun trong lúc đang chạy), hỗ trợ hầu hết các tính năng chỉ có trên nhân mã nguồn đóng của các hệ điều hành không tự do. Từ giờ trở đi, bài viết này sử dụng các thuật ngữ của các hệ điều hành Unix và tương tự, được đề cập trong các Man page (cẩm nang) chính thức. Các số đằng sau câu lệnh, giao diện hay các tính năng khác chỉ định nó thuộc thành phần nào của nhân (ví dụ execve(2) là một lời gọi hệ thống, còn exec(3) là một wrapper trong userspace). Danh sách sau đây và các phần tiếp theo mô tả tổng quan không đầy đủ về thiết kế kiến ​​trúc Linux và một số tính năng đáng chú ý của nó.
Tính toán tương tranh và thậm chí thực thi các tiến trình song song trên các hệ thống SMP và NUMA (nếu có đủ số nhân CPU cho các tác vụ đã sẵn sàng)
Cho phép lựa chọn và cấu hình hàng trăm tính năng và trình điều khiển trong nhân (bằng cách sử dụng một trong các lệnh make *config trước khi biên dịch kernel), thay đổi các tham số trong kernel trước khi khởi động (thông qua GRUB menu) và tinh chỉnh cách vận hành của kernel trong lúc chạy (sử dụng giao diện sysctl(8) tới /proc/sys/).
Cho phép cấu hình và thay đối các chính sách của trình lập lịch tác vụ, thông qua nice(2), setpriority(2), và các lời gọi hệ thống sched_*(2), cho phép đa nhiệm ưu tiên (trong chế độ người dùng và trong kernel từ phiên bản 2.6 trở đi); Completely Fair Scheduler (CFS) là trình lập lịch mặc định kể từ 2007, sử dụng một cây đỏ-đen để tìm kiếm, thêm vào và xóa thông tin tiến trình với độ phức tạp của thời gian chạy thuật toán là O(log n), với n là số tác vụ có thể chạy.
Quản lý bộ nhớ nâng cao với bộ nhớ ảo phân trang.
Giao tiếp liên tiến trình và đồng bộ hóa.
Một hệ thống file ảo trên vài hệ thống file thực (ext4, Btrfs, XFS, JFS, FAT32 v.v.).
Trình lập lịch I/O cấu hình được, lời gọi hệ thống ioctl(2) để thay đổi tham số của thiết bị trong các file đặc biệt (tuy nhiên nó không phải lời gọi chuẩn bởi có nhiều thiết bị khác nhau), I/O không đồng bộ của POSIX (tuy nhiên do khả năng mở rộng quy mô kém trong đa luồng, người ta phải tạo ra các lời gọi hệ thống của riêng Linux (io_*(2)) ).
Ảo hóa cấp độ hệ điều hành với Linux-VServer, paravirtualization và ảo hóa với trợ giúp phần cứng (với KVM hoặc Xen, và sử dụng QEMU để giả lập phần cứng); Trên hypervisor Xen, Linux kernel hỗ trợ biên dịch các bản phân phối Linux (như OpenSuSE Leap v.v) gọi là Dom0, các server máy ảo chủ cung cấp môi trường quản lý cho các máy ảo khách của người dùng (DomU).
Ảo hóa I/O với VFIO và SR-IOV. Virtual function I/O (VFIO) cung cấp truy cập trực tiếp vào thiết bị từ userspace trong một môi trường bảo vệ bộ nhớ nghiêm ngặt (IOMMU). Với VFIO, một máy ảo khách có thể truy cập trực tiếp vào phần cứng trên server máy ảo chủ. Kỹ thuật này cải thiện hiệu năng so với Ảo hóa toàn phần và Paravirtualization. Tuy nhiên với VFIO các thiết bị không thể được chia sẻ giữa các máy ảo khách. Single Root I/O Virtualization (SR-IOV) kết hợp hiệu năng của VFIO với khả năng chia sẻ thiết bị giữa các máy ảo khách (nhưng nó đòi hỏi phần cứng phải có khả năng hiển thị trong các máy ảo dưới dạng các thiết bị khác nhau).
Các cơ chế bảo mật để kiểm soát truy cập tùy quyền và bắt buộc (SELinux, AppArmor, POSIX ACLs, v.v.).
Một số loại giao thức truyền thông phân tầng (bao gồm cả Internet protocol suite)
Đa xử lý không đối xứng, thông qua hệ thống RPMsg.
Trình điều khiển thiết bị và phần mở rộng kernel chạy trong không gian kernel (ring 0 trong nhiều kiến trúc CPU), với toàn quyền truy cập vào phần cứng, mặc dù một số ngoại lệ chạy trong không gian người dùng, ví dụ: hệ thống file dựa trên FUSE/CUSE, và các phần của UIO. Hơn nữa, X Window và Wayland, các hệ thống cửa sổ và các giao thức máy chủ hiển thị mà hầu hết mọi người sử dụng với Linux không chạy trong kernel.
Không giống như các hạt nhân nguyên khối tiêu chuẩn, trình điều khiển thiết bị dễ dàng được cấu hình dưới dạng các mô-đun và được tải hoặc không tải trong khi hệ thống đang chạy. Ngoài ra driver có thể bị ngắt quãng trong một số điều kiện nhất định; tính năng này đã được thêm vào để xử lý các ngắt phần cứng một cách chính xác và để hỗ trợ tốt hơn cho đa xử lý đối xứng. Theo lựa chọn, nhân Linux không có giao diện nhị phân ứng dụng ổn định cho các driver.
Phần cứng cũng được thể hiện trong hệ thống phân cấp file. Giao diện trình điều khiển thiết bị với các ứng dụng người dùng thông qua một mục trong thư mục /dev hoặc /sys. Thông tin tiến trình cũng được ánh xạ tới hệ thống file thông qua thư mục /proc.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| --- | --- | --- | --- | --- | --- | --- |
| User mode | Ứng dụng người dùng | Ví dụ, bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, v.v. | Ví dụ, bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, v.v. | Ví dụ, bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, v.v. | Ví dụ, bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, v.v. | Ví dụ, bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, v.v. |
| User mode | Các thành phần hệ thống | Các daemons hệ thống: systemd, runit, logind, networkd, PulseAudio, ... | Hệ thống cửa sổ: X11, Wayland, SurfaceFlinger (Android) | Đồ hoạ: Mesa, AMD Catalyst, ... | Thư viện khác: GTK+, Qt, EFL, SDL, SFML, FLTK, GNUstep, v.v. | Thư viện khác: GTK+, Qt, EFL, SDL, SFML, FLTK, GNUstep, v.v. |
| User mode | Thư viện chuẩn C | open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (lên đến 2000 chương trình con) glibc nhắm tới tốc độ, musl và uClibc nhắm đến hệ thống nhúng, bionic được viết cho Android, v.v. Tất cả đều hướng đến việc tương thích với POSIX/SUS. | open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (lên đến 2000 chương trình con) glibc nhắm tới tốc độ, musl và uClibc nhắm đến hệ thống nhúng, bionic được viết cho Android, v.v. Tất cả đều hướng đến việc tương thích với POSIX/SUS. | open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (lên đến 2000 chương trình con) glibc nhắm tới tốc độ, musl và uClibc nhắm đến hệ thống nhúng, bionic được viết cho Android, v.v. Tất cả đều hướng đến việc tương thích với POSIX/SUS. | open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (lên đến 2000 chương trình con) glibc nhắm tới tốc độ, musl và uClibc nhắm đến hệ thống nhúng, bionic được viết cho Android, v.v. Tất cả đều hướng đến việc tương thích với POSIX/SUS. | open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (lên đến 2000 chương trình con) glibc nhắm tới tốc độ, musl và uClibc nhắm đến hệ thống nhúng, bionic được viết cho Android, v.v. Tất cả đều hướng đến việc tương thích với POSIX/SUS. |
| Kernel mode | Nhân Linux | stat, splice, dup, read, open, ioctl, write, mmap, close, exit, v.v. (có khoảng 380 lời gọi hệ thống) Nhân Linux System Call Interface (SCI, nhắm đến việc tương thích với POSIX/SUS) | stat, splice, dup, read, open, ioctl, write, mmap, close, exit, v.v. (có khoảng 380 lời gọi hệ thống) Nhân Linux System Call Interface (SCI, nhắm đến việc tương thích với POSIX/SUS) | stat, splice, dup, read, open, ioctl, write, mmap, close, exit, v.v. (có khoảng 380 lời gọi hệ thống) Nhân Linux System Call Interface (SCI, nhắm đến việc tương thích với POSIX/SUS) | stat, splice, dup, read, open, ioctl, write, mmap, close, exit, v.v. (có khoảng 380 lời gọi hệ thống) Nhân Linux System Call Interface (SCI, nhắm đến việc tương thích với POSIX/SUS) | stat, splice, dup, read, open, ioctl, write, mmap, close, exit, v.v. (có khoảng 380 lời gọi hệ thống) Nhân Linux System Call Interface (SCI, nhắm đến việc tương thích với POSIX/SUS) |
| Kernel mode | Nhân Linux | Hệ thống con Lập lịch cho các tiến trình | Hệ thống con Giao tiếp giữa các tiến trình | Hệ thống con Quản lý bộ nhớ | Hệ thống con Hệ thống file ảo | Hệ thống con Mạng |
| Kernel mode | Nhân Linux | Các thành phần khác: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter Các môdun bảo mật: SELinux, TOMOYO, AppArmor, Smack | Các thành phần khác: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter Các môdun bảo mật: SELinux, TOMOYO, AppArmor, Smack | Các thành phần khác: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter Các môdun bảo mật: SELinux, TOMOYO, AppArmor, Smack | Các thành phần khác: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter Các môdun bảo mật: SELinux, TOMOYO, AppArmor, Smack | Các thành phần khác: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter Các môdun bảo mật: SELinux, TOMOYO, AppArmor, Smack |
Phần cứng (CPU, bộ nhớ chính, thiết bị lưu trữ dữ liệu, v.v)