Linux Kernel là linh hồn và là bộ não của hệ điều hành Linux được tạo ra bởi Linus Torvalds cùng các lập trình viên khác để thử nghiệmk và xây dựng nên hệ điều hành Linux. Để hiểu hơn Linux Kernel là gì? Và hoạt động như thế nào? Cùng Vietnix tìm hiểu ngay trong bài viết dưới đây nhé
Linux Kernel là gì?
Linux Kernel (nhân Linux) là phần mềm mã nguồn mở, miễn phí. Linux Kernel chính là cốt lõi của hệ điều hành Linux và có thể hiểu Linux Kernel là một cầu nối giữa phần cứng và phần mềm, quản lý tài nguyên hệ thống và đảm bảo mọi thứ hoạt động trơn tru. Được phát triển từ năm 1991 và đã trở thành một ví dụ thành công nhất về sự hợp tác của cộng đồng mã nguồn mở toàn cầu.
![Linux Kernel là gì? Cách hoạt động và chức năng của hạt nhân Linux 10 Linux Kernel là bộ não cốt lõi của hệ điều hành Linux](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/linux-kernel-la-gi.png)
Cách thức hoạt động của Linux Kernel
Linux Kernel hoạt động dựa trên cấu trúc nguyên khối (monolithic), có nghĩa là toàn bộ hệ điều hành, bao gồm các chức năng cốt lõi, đều nằm trong không gian kernel. Điều này khác biệt với kiến trúc microkernel, nơi chỉ có các chức năng cơ bản nhất nằm trong kernel, còn các chức năng khác chạy ở chế độ user. Bạn xem hình ảnh dưới đây để hình dung dễ hơn:
![Linux Kernel là gì? Cách hoạt động và chức năng của hạt nhân Linux 13 Kernel hoạt động dựa trên cấu trúc nguyên khối (monolithic)](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/cau-truc-kernel-nguyen-khoi.webp)
Ở hình trên, có thể thấy rằng kernel kiểu nguyên khối quản lý toàn bộ giao tiếp giữa các ứng dụng với phần cứng.
Linux Kernel nằm ở đâu trong hệ thống?
Linux Kernel, thành phần cốt lõi của hệ điều hành, được lưu trữ trong một phân vùng khởi động riêng biệt để đảm bảo tính an toàn và ổn định. Khi hệ thống khởi động (reboot), kernel sẽ được tự động tải vào bộ nhớ và bắt đầu quản lý các tài nguyên hệ thống.
Vị trí lưu trữ Linux Kernel:
- Thường nằm trong thư mục
/boot
trên các hệ thống Debian/Ubuntu. - Có thể nằm ở phân vùng khởi động riêng biệt trên các hệ thống khác.
Để truy cập được vào Linux Kernel, bạn cần biết được phiên bản Linux Kernel hiện tại đang sử dụng. Xem cách kiểm tra phiên bản Linux Kernet nhanh bằng cách sử dụng lệnh:
uname -r
Kết quả: Macbook: ~ uname -r 5.3.0-28
Trong đó:
- 5 – Phiên bản kernel chính, đánh dấu những thay đổi lớn về tính năng và kiến trúc
- 3 – Bản sửa đổi chính, bao gồm các tính năng mơips và những cải tiến đáng kể. Trước đây, là số chẵn (2,4,6…) thường là chỉ phiên bản ổn định còn số lẽ (3,5,7…) là phiên bản phát triển.
- 0 – Bản sửa đổi phụ, tập trung vào việc sửa lỗi vá các lỗ hổng bảo mật.
Vậy phiên bản của hạt nhân Linux (Linux Kernel) là 5.3.0
Chức năng và ứng dụng của Linux Kernel
Linux Kernel là một thành phần không thể thiếu của hệ điều hành, do đó nó cũng thực hiện rất nhiều tác vụ: Từ cung cấp tài nguyên cho ứng dụng, đến việc lên lịch các tiến trình,…Trong phần này, hãy cùng Vietnix tìm hiểu những nhiệm vụ cơ bản nhất của Linux kernel.
Quản lý bộ nhớ
Quản lý bộ nhớ là một trong những chức năng quan trọng nhất của Linux Kernel, đảm bảo hiệu suất, ổn định và bảo mật hệ thống. Kernel có nhiệm vụ cấp phát và giải phóng bộ nhớ vật lý, đồng thời quản lý bộ nhớ ảo cho các tiến trình.
Cơ chế quản lý bộ nhớ của Linux Kernel:
- Bảng page: Lưu trữ ánh xạ giữa địa chỉ ảo và địa chỉ vật lý, cho phép kernel quản lý bộ nhớ hiệu quả.
- Phân bổ (paging): Chia bộ nhớ thành các page (trang) có kích thước cố định (thường là 4096 byte) để dễ dàng quản lý và phân bổ.
- Phân mảnh bộ nhớ: Xảy ra khi bộ nhớ được chia nhỏ thành nhiều phần không liền kề, ảnh hưởng đến hiệu suất hệ thống. Kernel sử dụng các thuật toán để giảm thiểu phân mảnh và tối ưu hóa việc sử dụng bộ nhớ.
- Bộ nhớ ảo: Cho phép các process sử dụng nhiều bộ nhớ hơn bộ nhớ vật lý thực tế, tạo ra không gian địa chỉ riêng biệt và bảo vệ hệ thống khỏi các truy cập trái phép.
Hầu hết các tác vụ trong kernel đều hoạt động thông qua system call
. Chẳng hạn bạn có một system call
để truy xuất kích thước page trong bộ nhớ như sau:
#include<unistd.h> #include<stdio.h> int main(){ // Thực hiện system call int size = getpagesize(); // In kích thước page printf("%d\n", size); return 1; }
Output: 4096
Chức năng quản lý bộ nhớ có nhiệm vụ paging (phân bổ bộ nhớ) và swapping (hoán đổi page) trong bộ nhớ ảo. Bộ nhớ ảo được phân bổ cho process được tách biệt hoàn toàn, từ đó tạo thêm một lớp bảo vệ hệ điều hành khỏi các chương trình độc hại.
Các lệnh Linux như htop
và atop
có thể được dùng để giám sát các thông tin liên quan đến bộ nhớ cho từng process đang chạy.
![Linux Kernel là gì? Cách hoạt động và chức năng của hạt nhân Linux 14 Output của lệnh atop để theo dõi thông tin và quản lý bộ nhớ](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/output-quan-ly-bo-nhh-bang-lenh-atop.webp)
Quản lý Process
Mọi chương trình đang chạy trong hệ thống đều được xem là một tiến trình (process). Kernel trong Linux quản lý việc tạo, chạy và xoá những process này. Các system call như fork()
hoặc exec()
là những công cụ rất hữu ích trong môi trường đa tiến trình (multi-processing).
Mọi process trong hệ thống đều cần có CPU để thực thi, và công cụ lên lịch cho tiến trình (Process Scheduler) là một phần không thể thiếu để quản lý process. Các công cụ này thường hỗ trợ nhiều loại thuật toán khác nhau để sắp xếp lịch cho process.
Bên cạnh đó, các Linux Kernel còn có một vai trò quan trọng là IPC (Inter-Process Communication – Giao tiếp giữa các tiến trình). Các cơ chế như pipe hay semaphore được điều phối bởi kernel với mục đích duy trì giao tiếp giữa các tiến trình với nhau.
Để xem nhanh các process đang chạy, bạn có thể sử dụng lệnh htop
trong Terminal. Ngoài ra lệnh này còn trả về những thông tin khác như thứ tự ưu tiên trong lịch và tỉ lệ CPU đang sử dụng.
![Linux Kernel là gì? Cách hoạt động và chức năng của hạt nhân Linux 17 Sử dụng lệnh htop để theo dõi các process đang chạy](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/lenh-htop-xem-process-dang-chay.webp)
Hướng dẫn cài đặt Linux Kernel
Một điều đặc biệt của Linux Kernel là người dùng có thể thay đổi sang những phiên bản kernel khác. Tuy nhiên việc này tương đối phức tạp nên Vietnix sẽ chỉ đề cập ngắn gọn những bước cơ bản nhất để cài đặt một phiên bản cụ thể của Linux Kernel:
- Bước 1: Bạn cần download file kernel cần cài đặt từ website chính thức tại đây. Sau đó, giải nén và cấu hình file thông qua lệnh
make
.
- Bước 2: Chạy lệnh
make menuconfig
, khi đó một cửa sổ mới sẽ hiện ra để người dùng chọn module và tính năng cho kernel mới. Có một cách nhanh hơn là copy file cấu hình hiện tại của kernel đang chạy vào directory vừa giải nén:
cp /boot/config-$(uname -r) .config
Lệnh ở trên có nhiệm vụ copy file config có trong directory boot của kernel hiện tại, rồi lưu lại dưới dạng một file config mới với tên .config
.
- Bước 3: Tiếp theo, bạn cần cài đặt một số công cụ và compiler để biên dịch file kernel. Nếu bạn dùng Debian/Ubuntu có thể sử dụng lệnh dưới đây:
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev
Kernel image được biên dịch bằng lệnh make trong Linux bên trong directory chứa file kernel mới. Quá trình biên dịch có thể mất khá nhiều thời gian, nên bạn bạn chờ thêm một chút nhé!
- Bước 4: Sau khi quá trình biên dịch hoàn tất, bạn cần cài đặt các module và kernel image bằng lệnh sau:
make install_modules && make install
Trong đó, phần lệnh đầu tiên cài đặt module của kernel, phần lệnh sau có nhiệm vụ cài đặt kernel hoàn chỉnh cùng với các hình ảnh và file quan trọng bên trong thư mục /boot
.
- Bước 5: Bây giờ ta có thể chuyển sang phiên bản kernel mới vừa cài đặt:
sudo update-initramfs -c -k <PHIEN_BAN_KERNEL_MOI>
Trong đó, PHIEN_BAN_KERNEL_MOI
phải khớp với tên của file image vừa mới cài đặt.
- Bước 6: Ở bước cuối cùng, bạn chỉ cần restart lại hệ thống bằng lệnh
reboot
để áp dụng các thay đổi.
Cài đặt Linux Kernel trên Ubuntu
Ubuntu hỗ trợ Kernel PPA để người dùng download các gói kernel từ phiên bản 2.6 đến 5.19 (Mới nhất).
- Bước 1: Bạn có thể download package
.deb
cho một phiên bản kernel tại đây.
Bên cạnh bản 64-bit (amd64
) thì PPA cũng hỗ trợ các kiến trúc CPU khác như arm64/armhf, ppc64el
và s390x
.
- Bước 2: Sau khi download package xong, bạn có thể cài đặt bằng lệnh
apt
trong Terminal như sau:
sudo apt install ~/Downloads/linux-*.deb
![Linux Kernel là gì? Cách hoạt động và chức năng của hạt nhân Linux 18 Sử dụng Terminal để thực hiện lệnh cài đặt Linux Kernel trên Ubuntu](https://static-xf1.vietnix.vn/wp-content/uploads/2024/05/cai-dat-linux-kernel-tren-ubuntu-bang-terminal.webp)
- Bước 3: Cuối cùng là restart lại máy rồi kiểm tra phiên bản Linux Kernel hiện tại bằng lệnh:
uname -a.
Cài đặt Linux Kernel trong Fedora
Tương tự như Ubuntu thì Fedora cũng có Kernel Vanilla Repositories để lưu trữ các gói Kernel Linux mới nhất.
Các dòng cho kiến trúc CPU amd64
và arm64
:
- kernel-vanilla-mainline – Bản kernel mới nhất trong giai đoạn tiền phát hành (còn gọi là rc kernel).
- kernel-vanilla-mainline-wo-mergew – Tương tự ở trên nhưng bỏ kernel khỏi cửa sổ merge.
- kernel-vanilla-stable – Bản kernel ổn định mới nhất, theo kernel.org.
- kernel-vanilla-stable-rc – Tương tự ở trên, kèm theo kernel RC.
- kernel-vanilla-fedora – Bản phát hành mới nhất của dòng kernel mặc định cho Fedora.
- Bước 1: Trước tiên, mở Terminal rồi nhập lệnh sau để thiết lập repo:
curl -s https://repos.fedorapeople.org/repos/thl/kernel-vanilla.repo | sudo tee /etc/yum.repos.d/kernel-vanilla.repo
- Bước 2: Sau đó cài đặt bản Kernel mới nhất bằng lệnh:
sudo dnf --enablerepo=kernel-vanilla-stable update
Trong đó, thay kernel-vanilla-stable
bằng các option bạn muốn theo ở trên.
- Bước 3: Cuối cùng là restart lại máy tính để thử nghiệm bản Linux kernel mới cho Fedora.
Kết luận
Linux Kernel chính là bộ não của cả hệ điều hành Linux. Việc tìm hiểu về Linux Kernel giúp bạn hiểu rõ hơn về hệ điều hành này và cách sử dụng Linux Kernel. Hy vọng bài viết Vietnix chia sẻ ở đây cung cấp cho bạn những kiến thức cơ bản nhất về kernel. Chúc các bạn thành công!