Linux Explanation
I. Linux có phải là một hệ điều hành?
Một câu cửa miệng của các lập trình viên trong các cuộc nói chuyện là: “Server X này dùng hệ điều hành Linux”. Nhưng khi chúng ta search bản cái thì không có OS nào tên chính xác là Linux, vậy câu hỏi Linux có phải là OS và tại sao mọi người hay gọi như vậy.
Vậy hệ điều hành là gì?
Là một gói phần mềm gồm:
+ Phần mềm quản lý các tài nguyên phần cứng.
+ Các phần mềm quan trọng khác như phần mềm giao diện dòng lệnh (CLI – Command Line Interpreter), phần mềm giao diện đồ họa (GUI – Graphic User Interface), …
Linux là gì?
-> Về mặt kỹ thuật, không chính xác khi coi Linux là một hệ điều hành hoàn chỉnh. Linux thực sự chỉ đề cập cụ thể đến kernel, được đặt theo tên của người sáng lập Linus Torvalds.
Phần lớn trải nghiệm desktop Linux đến từ dự án GNU, một sáng kiến cũ tạo ra hệ điều hành desktop gần như hoàn chỉnh. Tất cả những gì nó cần là một kernel và Linux đã đáp ứng nhu cầu đó. Đây là lý do tại sao một số người gọi hệ điều hành này là GNU/Linux.
Linux kernel và các phần mềm tiện ích được đóng gói lại với nhau, tạo thành bản phân phối Linux (Linux distribution).
Các bản phân phối của Linux được sử dụng phổ biến trên PC và server là: Ubuntu, Redhat, Fedora, Centos, Debian, Gentoo, Open Suse.
Các bản phân phối của Linux hay dùng trên các thiết bị nhúng là: MontaVista, TimeSys, KaeilOS.
II. Linux kernel làm những công việc gì?
Đầu tiền ta đi vào phân tích kiến trúc của một nhân Linux sao đó sẽ lướt qua một ví dụ nhỏ để thấy chương trình thực tế tương tác với nhân Linux như thế nào.
Kiến trúc nhân Linux
Gồm 6 thành phần cơ bản như hình dưới với nhiệm vụ mỗi thành phần như sau:
Hình 1: Kiến trúc của nhân Linux
System call interface: Cung cấp dịch vụ sử dụng phần cứng cho các tiến trình (print ra màn hình, in ra máy in…)
Memory Management: Quản lí Ram:
– Cấp phát bộ nhớ trước khi đứa chương trình vào, thu hồi bộ nhớ khi chương trình kết thúc.
– Đảm bảo chương trình nào cũng có cơ hội được đưa vào bộ nhớ.
– Bảo về vùng nhớ của mỗi tiến trình khỏi những tiến trình khác.Process management: Có nhiệm vụ quản lý các tiến trình:
– Tạo/hủy các tiến trình.
– Lập lịch cho các tiến trình. Đây thực chất là lên kế hoạch: CPU sẽ thực thi chương trình khi nào, thực thi trong bao lâu, tiếp theo là chương trình nào.
– Hỗ trợ các tiến trình giao tiếp với nhau.Đồng bộ hoạt động của các tiến trình để tránh xảy ra tranh chấp tài nguyên.
File system management: có nhiệm vụ quản lý dữ liệu trên thiết bị lưu trữ (như ổ cứng, thẻ nhớ). Quản lý dữ liệu gồm các công việc: thêm, tìm kiếm, sửa, xóa dữ liệu.
Device management: có nhiệm vụ quản lý thiết bị, (Tương tác với drive của thiết bị):
Điều khiển hoạt động của các thiết bị.
Giám sát trạng thái của các thiết bị.
Trao đổi dữ liệu với các thiết bị.
Lập lịch sử dụng các thiết bị, đặc biệt là thiết bị lưu trữ (ví dụ ổ cứng).
Networking management: có nhiệm vụ quản lý các gói tin (packet) theo mô hình TCP/IP.
Phân tích quá trình thực thi một tiến trình điển hình:
Hình 2: Quá trình thực thi một tiến trình
RAM: Trên thực tế RAM chứa các lệnh, dữ liệu dạng nhị phân của Linux Kernel + các tiến trình (phần chương trình) đang chạy được load vào RAM. Như vậy RAM gồm 2 miền.
Kernel space là vùng không gian chứa các lệnh và dữ liệu của kernel.
User space là vùng không gian chứa các lệnh và dữ liệu của các tiến trình.
CPU: Có 2 chế độ thực thi:
Kernel mode: CPU nhận và thực thi các lệnh từ kernel, CPU sẽ thực thi bất kì lệnh nào nó nhận được, CPU có thể truy cập bất kì địa chỉ nào trong không gian địa chỉ.
User mode: CPU chỉ thực thi 1 phần tập lệnh và truy cập 1 phần không gian địa chỉ trong giới hạn nhất định.
Phân tích luồng chạy trong ví dụ:
Với tiến trình 1 đang được chạy gồm 2 lệnh CPU sẽ lấy lần lượt các lệnh này ra thực thi. Lệnh thứ nhất, “a = 5 + 10”, là một lệnh tính toán, sẽ được CPU thực thi ở chế độ user mode. Lệnh thứ hai, “printf(“%d”, a)”, là một lệnh vào/ra. Hàm “printf” sẽ gọi system call “write” để yêu cầu Linux kernel in thông tin ra màn hình. Khi đó, CPU sẽ chuyển sang chế độ kernel mode để thực thi các lệnh của Linux kernel.
Tài liệu tham khảo:
https://quantrimang.com/tim-hieu-ve-linux-kernel-va-nhung-chuc-nang-chinh-cua-chung-72129