lOMoARcPSD| 61554479
Hệ điều hành Linux
1.Giới thiệu tổng quan về hệ điều hành Linux
Linux một hcác hệ điều hành tự do nguồn mở tương tự Unix dựa trên Linux
kernel, một hạt nhân hệ điều hành được phát hành lần đầu tiên vào ngày 17 tháng 9 năm 1991,
bởi Linus Torvalds. Linux thường được đóng gói thành các bản phân phối Linux là một
trong những ví dụ nổi tiếng nhất của phần mềm tự do và của việc phát triển mã nguồn mở.
Các bản phân phối bao gồm nhân Linux và các thư viện và phần mềm hệ thống hỗ trợ,
nhiều thư viện được cung cấp bởi GNU Project. Nhiều bản phân phối Linux sử dụng từ "Linux"
trong tên của họ, nhưng Free Software Foundation sử dụng tên GNU/Linux để nhấn mạnh
tầm quan trọng của phần mềm GNU.
Các bản phân phối Linux phổ biến bao gồm Debian, Fedora, và Ubuntu. Các bản phân
phối thương mại bao gồm Red Hat Enterprise Linux SUSE Linux Enterprise Server. Các
bản phân phối thương mại bao gồm Red Hat Enterprise Linux SUSE Linux Enterprise
Server. Bản phân phối Desktop Linux bao gồm một windowing system như X11 hoặc
Wayland, và một môi trường desktop giống như GNOME hay KDE Plasma.
Linux ban đầu được phát triển cho các máy tính nhân dựa trên kiến trúc Intel x86,
nhưng sau đó đã được ported sang nhiều nền tảng n bất kỳ hệ điều hành nào khác. Do sự
thống trị của Android trên điện thoại thông minh, Linux cũng sở được cài đặt lớn nhất
trong tất cả các hệ điều hành mục đích chung. Mặc chỉ được sdụng bởi khoảng
2.3% máy tính để bàn, nhưng Chromebook, chạy Chrome OS dựa trên nhân Linux, thống trị
thị trường giáo dục K–12 của Mỹ và chiếm gần 20% doanh số notebook dưới 300 đô la ở Mỹ.
Linux hệ điều hành hàng đầu trên các máy chủ (hơn 96,4% trong số 1 triệu hệ điều hành
máy chủ web hàng đầu Linux),
[26]
dẫn đầu các hthống big iron như các hệ thống mainframe,
lOMoARcPSD| 61554479
và là hệ điều hành duy nhất được sử dụng trên các siêu máy tính TOP500 (kể từ tháng 11 năm
2017, đã dần dần loại bỏ tất cả các đối thủ cạnh tranh).
Linux cũng chạy trên các hệ thống nhúng, tức các thiết bị hệ điều hành thường
được tích hợp vào firmware được thiết kế riêng cho hệ thống. Điều này bao gồm routers,
điều khiển tự động hóa, công nghệ nhà thông minh (giống nGoogle Nest), TV (các smartTv
của Samsung LG dùng Tizen WebOS, tương ứng), ô (ví dụ, Tesla, Audi, Mercedes-
Benz, Hyundai, Toyota đều dựa trên Linux), máy quay video kỹ thuật số, video game
consoles, smartwatches. Hệ thống điện tử của Falcon 9 Dragon 2 sử dụng phiên bản
Linux tùy biến.
Linux là một trong những dụ nổi bật nhất của phần mềm tự do nguồn mở và của việc phát
triển mã nguồn mở. Mã nguồn có thể được dùng, sửa đổi và phân phối - thương mại hoặc phi
thương mại - bởi bất kỳ ai theo các điều khoản của giấy phép tương ứng, dụ như GNU
General Public License.
2. Ưu nhược điểm
2.1. Ưu điểm
Tương tự nhiều hệ điều hành khác, Linux cũng có những ưu điểm riêng như:
Miễn phí hoàn toàn cho người dùng.
Hỗ trợ các phần mềm văn phòng như: LibreOffice, OpenOffice.
Chỉnh sửa hệ điều hành theo nhu cầu sử dụng khi cần. Thích hợp với các lập trình viên.
Không yêu cầu máy tính phải có cấu hình cao do tốn ít bộ nhớ.
Tính bảo mật tốt.
2.2. Nhược điểm
Linux chưa phổ biến nên chưa được các nhà sản xuất máy tính khai thác.
Phần mềm hỗ trợ còn hạn chế.
Một số nhà sản xuất không có Driver hỗ trợ hệ điều hành Linux.
lOMoARcPSD| 61554479
3.Cấu trúc hệ điều hành Linux
Figure 0-1. Cấu trúc hệ điều hành Linux
Cấu trúc hệ HĐH Linux gồm:
Kernel (Nhân): Phần quan trọng nhất trong hệ điều hành Linux vai trò quản tài
nguyên trong phần cứng như: Bvi xử lý, bộ nhớ, thiết bị lưu trữ, thiết bị ngoại vi, định
vị. Qua đó các phần mềm có thể truy cập và dùng.
Shell: nơi chứa các dòng lệnh cung cấp cho người dùng giao diện để nhập các
dòng lệnh yêu cầu hệ thống thực hiện. Hiện có khá nhiều loại Shell nhưng bash shell là
phổ biến nhất.
Hệ thống tập tin (File system): Là nơi tổ chức và quản lý các thư mục, tệp tin trên hệ
thống. HĐH Linux hỗ trợ khá nhiều loại tập tin như: NTFS, XFS, FAT32, ext4, HFS +.
Service Manager: Là hệ thống có nhiệm vụ quản lý tiến tình, dịch vụ của hệ thống.
Qua đó giúp tạm dừng, khởi động, tương tác hay quản lý với dịch vụ và tiến trình.
Chương trình ứng dụng và tiện ích: Người dùng có thể sử dụng các tiện ích, chương
trình như: trình duyệt web, trình biên dịch, ứng dụng đồ họa, trình soạn thảo văn bản.
Các thành phần trong Linux:
lOMoARcPSD| 61554479
Figure 0-2 Các thành phần trong Linux
3.1. Nhân (Kernel)
Vào năm 1991, dựa trên UNIX kernel, Linus Torvalds đã tạo ra Linux kernel chạy
trên máy tính của ông ấy. Dựa vào chức năng của hệ điều hành, Linux kernel được
chia làm 6 thành phần:
lOMoARcPSD| 61554479
Hình 1.4. Kiến trúc của Linux kernel đứng ở góc độ quản lý (management point of view)
Process management: nhiệm vụ quản các ến trình, bao gồm các công việc:
- Tạo/hủy các ến trình.
- Lập lịch cho các ế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, ếp theo chương
trình nào.
- Hỗ trợ các ến trình giao ếp với nhau.
- Đồng bộ hoạt động của các ến trình để tránh xảy ra tranh chấp
tài nguyên.
Memory management: có nhiệm vquản lý bộ nhớ, bao gồm các công việc:
- Cấp phát bộ nhớ trước khi đưa chương trình vào, thu hồi bộ nh
khi ến 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 ến trình.
lOMoARcPSD| 61554479
Device management: có nhiệm vquản lý thiết bị, bao gồm các công việc:
- Đ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ữ liu với các thiết bị.
- Lập lịch sdụng các thiết bị, đặc biệt thiết bị u tr(ví dụ
cứng).
File system management: nhiệm vụ quản dliệ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.
Networking management: nhiệm vụ quản các gói n (packet) theo hình
TCP/IP.
System call Interface: nhiệm vụ cung cấp các dịch vụ sử dụng phần cứng cho các
ến trình. Mỗi dịch vđưc gọi là một system call.
Khi triển khai thực tế, mã nguồn của Linux kernel gồm các thư mục sau:
Thư mục
Vai trò
/arch
Chứa nguồn giúp Linux kernel thể thực thi được trên nhiều kiến trúc
CPU khác nhau như x86, alpha, arm, mips, mk68, powerpc, sparc,…
/block
Chứa mã nguồn triển khai nhiệm vụ lập lịch cho các thiết bị lưu trữ.
/drivers
Chứa mã nguồn để triển khai nhiệm vụ điều khiển, giám sát, trao đổi dữ liệu
với các thiết bị.
/fs
Chứa mã nguồn triển khai nhiệm vụ quản lý dữ liệu trên các thiết bị lưu trữ.
/ipc
Chứa mã nguồn triển khai nhiệm vụ giao tiếp giữa các tiến trình
/kernel
Chứa nguồn triển khai nhiệm vlập lịch đồng bộ hoạt động của các
tiến trình.
/mm
Chứa mã nguồn triển khai nhiệm vụ quản lý bộ nhớ
lOMoARcPSD| 61554479
/net
Chứa mã nguồn triển khai nhiệm vụ xử lý các gói tin theo mô hình TCP/IP.
Bảng 1. Một số thư mục trong mã nguồn của Linux kernel
3.2.Thư viện hệ thống (System libraries)
Thư viện hệ thống là các chương trình đặc biệt giúp truy cập các tính năng của hạt nhân. Một
hạt nhân phải được kích hoạt để thực hiện một tác vụ việc kích hoạt này được thực hiện bởi
các ứng dụng. Nhưng các ứng dụng phải biết cách đặt lệnh gọi hệ thống mỗi hạt nhân
một nhóm lệnh gọi hệ thống khác nhau. Các lập trình viên đã phát triển một thư viện tiêu chuẩn
của các thủ tục để giao tiếp với hạt nhân. Mỗi hệ điều hành hỗ trợ các tiêu chuẩn này, và sau
đó các tiêu chuẩn này được chuyển sang các lệnh gọi hệ thống cho hệ điều hành đó. Thư viện
hệ thống nổi tiếng nhất dành cho Linux là Glibc (thư viện GNU C).
3.3. Công cụ hệ thống ( System Tools)
Hệ điều hành Linux một tập hợp các công cụ tiện ích, thường các lệnh đơn giản.
một phần mềm mà dự án GNU đã viết và xuất bản theo giấy phép nguồn mở của họ để phần
mềm được cung cấp miễn pcho tất cả mọi người. Với sự trợ giúp của các lệnh, bạn thể
truy cập tệp của mình, chỉnh sửa và thao tác dữ liệu trong thư mục hoặc tệp của bạn, thay đổi
vị trí của tệp hoặc bất cứ thứ gì.
3.4. Công cụ phát triển ( Development Tools)
Với ba thành phần trên, hệ điều hành của bạn đang chạy và hoạt động. Nhưng để cập nhật hệ
thống của bạn, bạn có các công cụ và thư viện bổ sung. Các công cụ và thư viện bổ sung này
được viết bởi các lập trình viên được gọi chuỗi công cụ. Chuỗi công cmột công cụ
phát triển quan trọng được các nhà phát triển sử dụng để tạo ra một ứng dụng hoạt động.
3.5. Công cụ người dùng cuối ( End user tools)
Các công cụ cuối này tạo nên một hệ thống duy nhất cho người dùng. Công cụ cuối không bắt
buộc đối với hệ điều hành nhưng cần thiết cho người dùng. Một số dụ về công cụ cuối
công cụ thiết kế đồ họa, bộ văn phòng, trình duyệt, trình phát đa phương tiện, v.v.
Tính năng cơ bản của Linux:
Di động - Tính di động có nghĩa là phần mềm có thể hoạt động trên các loại phần cứng
khác nhau theo cùng một cách. Các chương trình ứng dụng nhân Linux hỗ trợ cài đặt
trên bất kỳ loại nền tảng phần cứng nào.
nguồn mở nguồn Linux được cung cấp miễn phí dự án phát triển dựa
vào cộng đồng. Nhiều nhóm cộng tác làm việc để nâng cao khả năng của hệ điều hành
Linux và nó liên tục phát triển.
Nhiều người dùng Linux một hệ thống nhiều người dùng nghĩa là nhiều người
dùng có thể truy cập các tài nguyên hệ thống như bộ nhớ/ ram/ chương trình ứng dụng
cùng một lúc.
lOMoARcPSD| 61554479
Đa chương trình Linux một hthống đa chương trình nghĩa nhiều ứng dụng
có thể chạy cùng một lúc.
Hệ thống tệp phân cấp Linux cung cấp cấu trúc tệp tiêu chuẩn trong đó các tệp hệ
thống/tệp người dùng được sắp xếp.
Shell Linux cung cấp một chương trình thông dịch đặc biệt thể được sử dụng để
thực thi các lệnh của hệ điều hành. Nó thể được sử dụng để thực hiện nhiều loại hoạt
động khác nhau, gọi các chương trình ứng dụng. vân vân.
Bảo mật Linux cung cấp bảo mật cho người dùng bằng cách sử dụng các tính năng
xác thực như bảo vệ bằng mật khẩu/quyền truy cập có kiểm soát vào các tệp cụ thể/mã
hóa dữ liệu.
Device driver trong Linux
1. Vai trò của Driver
Driver là một trình điều khiển có vai trò điều khiển, quản lý, giám sát một thực thể
nào đó dưới quyền của nó. Bus driver làm việc với một đường bus, device làm việc
với một thiết bị (chuột, bàn phím, màn hình, đãi cứng, camera…). Có thể lấy dụ
tương tự như vai trò của một phi công hoặc một hệ thống bay tự động được giám sát
bởi phi công, một thành phần cứng có thể được điều khiển bởi một driver hoặc được
điều khiển bởi một phần cứng khác được quản bởi một driver. Trường hợp này,
phần cứng vai trò điều khiển được gọi một device controller. Bản thân các
controller cũng cần driver. dụ: hard disk controller, display controller, audio
controller, quản lý các thiết bị kết nối với chúng, nói một cách kỹ thuật hơn
đó các IDE controller, PCI controller, USB controller, SPI controller, I2C
controller, … Các khái niệm này được minh họa tổng quan như hình sau:
lOMoARcPSD| 61554479
Hình 1.1. Tương tác giữa thiết bị và driver
Các device controller thông thường được kết nối với CPU thông qua đường bus (PCI,
IDE, USB, SPI, …). Trong vi điều khiển, CPU và các device controller thường được
thiết kế trên một chip. Điều này cho phép giảm kích thước giá thành, phợp với
phát triển hthống nhúng. về mặt nguyên tắc, sẽ không khác biệt đối lớn
đối với các driver trên các hệ thống máy tính cá nhân.
2. Hai nhiệm vụ của Driver
Các bus driver cung cấp giao diện đặc tả cho các giao thức phần cứng tương ứng.
nằm ở tầng dưới cùng trong hình phân lớp phần mềm của hệ điều hành. Nằm
trên là các device driver thực sự để vận hành các thiết bị, mang đặc trưng của
từng thiết bị xác định. Ngoài ra, mục đích quan trọng của các driver thiết bị là cung
cấp một giao diện trừu tường hóa cho người sử dụng, tức là cung cấp một giao diện
lên tầng trên của hệ điều hành. Một cách tổng quan, một driver sẽ bao gồm 2 phần
quan trọng: a) giao tiếp với thiết bị (Device-specific) b) giao tiếp với hệ điều hành
(OS-specific)
Hình 1.2. Các thành phần của driver trên Linux
Thành phần giao tiếp với thiết bị (device-specific) của một driver là giống nhau đối
với tất cả các hệ điều hành. thể hiểu giải các thông tin vthiết bị (chi
tiết kỹ thuật, kiểu thao tác, hiệu năng, cách lập trình giao tiếp với thiết bị, …) Thành
lOMoARcPSD| 61554479
phần giao tiếp với hệ điều hành (OS-specific) gắn kết chặt chẽ với các chế của hệ
điều hành, và do vậy sẽ khác nhau giữa một driver trên Linux một driver trên
Windows, hoặc MacOS, …
lOMoARcPSD| 61554479
3. Mô hình phân lớp theo chiều dọc
Trên Linux, device driver cung cấp một giao diện “system call” (giao diện gọi các
hàm hệ thống) đến tầng ứng dụng cho người dùng; đây được coi một ranh giới
giữa tầng nhân (kernel space) tầng người dùng (user space) của Linux. hình
phân tầng được chỉ ra như hình vẽ.
Hình 1.3. Kiến trúc tổng quan nhân Linux
Tùy thuộc vào đặc trưng của của driver với hệ điều hành, driver trên Linux được phân
chia thành 3 loại (phân cấp theo chiều dọc):
- Packet-oriented or the network vercal (driver hướng gói dữ liu)
- Block-oriented or the storage vercal (driver hướng khối dliu)
- Byte-oriented or the character vercal (driver hướng byte/ký tự)
Packet-oriented hay network driver gồm 2 phần: a) network protocol stack b)
network interface card (NIC) device drivers, hoặc đơn giản là network device driver
(có thể là Ethernet, Wi-Fi, hoặc bất kỳ các giao tiếp mạng nào khác,…)
Block-oriented hay storage driver gồm 2 phần: a) File-system drivers để giải các
định dạng khác nhau trên các phân vùng lưu trữ khác nhau (FAT, ext, …) b) Block
device drivers cho các giao thức phần cứng ứng với các thiết bị lưu trữ khác nhau
(IDE, SCSI, MTD, …)
lOMoARcPSD| 61554479
Các Byte-oriented hay character driver lại tiếp tục được phân chia thành
các lớp con (sub-classified) như tty driver, input driver, console driver,
frame-buffer drivers, sound driver, … (tương ứng với các giao tiếp như
RS232, PS/2, VGA, I2C, SPI, …)

Preview text:

lOMoAR cPSD| 61554479 Hệ điều hành Linux
1.Giới thiệu tổng quan về hệ điều hành Linux
Linux là một họ các hệ điều hành tự do nguồn mở tương tự Unix và dựa trên Linux
kernel, một hạt nhân hệ điều hành được phát hành lần đầu tiên vào ngày 17 tháng 9 năm 1991,
bởi Linus Torvalds. Linux thường được đóng gói thành các bản phân phối Linux và là một
trong những ví dụ nổi tiếng nhất của phần mềm tự do và của việc phát triển mã nguồn mở.
Các bản phân phối bao gồm nhân Linux và các thư viện và phần mềm hệ thống hỗ trợ,
nhiều thư viện được cung cấp bởi GNU Project. Nhiều bản phân phối Linux sử dụng từ "Linux"
trong tên của họ, nhưng Free Software Foundation sử dụng tên GNU/Linux để nhấn mạnh
tầm quan trọng của phần mềm GNU.
Các bản phân phối Linux phổ biến bao gồm Debian, Fedora, và Ubuntu. Các bản phân
phối thương mại bao gồm Red Hat Enterprise Linux và SUSE Linux Enterprise Server. Các
bản phân phối thương mại bao gồm Red Hat Enterprise Linux và SUSE Linux Enterprise
Server. Bản phân phối Desktop Linux bao gồm một windowing system như X11 hoặc
Wayland, và một môi trường desktop giống như GNOME hay KDE Plasma.
Linux ban đầu được phát triển cho các máy tính cá nhân dựa trên kiến trúc Intel x86,
nhưng sau đó đã được ported sang nhiều nền tảng hơn bất kỳ hệ điều hành nào khác. Do sự
thống trị của Android trên điện thoại thông minh, Linux cũng có cơ sở được cài đặt lớn nhất
trong tất cả các hệ điều hành có mục đích chung. Mặc dù nó chỉ được sử dụng bởi khoảng
2.3% máy tính để bàn, nhưng Chromebook, chạy Chrome OS dựa trên nhân Linux, thống trị
thị trường giáo dục K–12 của Mỹ và chiếm gần 20% doanh số notebook dưới 300 đô la ở Mỹ.
Linux là hệ điều hành hàng đầu trên các máy chủ (hơn 96,4% trong số 1 triệu hệ điều hành
máy chủ web hàng đầu là Linux),[26] dẫn đầu các hệ thống big iron như các hệ thống mainframe, lOMoAR cPSD| 61554479
và là hệ điều hành duy nhất được sử dụng trên các siêu máy tính TOP500 (kể từ tháng 11 năm
2017, đã dần dần loại bỏ tất cả các đối thủ cạnh tranh).
Linux cũng chạy trên các hệ thống nhúng, tức là các thiết bị có hệ điều hành thường
được tích hợp vào firmware và được thiết kế riêng cho hệ thống. Điều này bao gồm routers,
điều khiển tự động hóa, công nghệ nhà thông minh (giống như Google Nest), TV (các smartTv
của Samsung và LG dùng Tizen và WebOS, tương ứng), ô tô (ví dụ, Tesla, Audi, Mercedes-
Benz, Hyundai, và Toyota đều dựa trên Linux), máy quay video kỹ thuật số, video game
consoles, và smartwatches. Hệ thống điện tử của Falcon 9 và Dragon 2 sử dụng phiên bản Linux tùy biến.
Linux là một trong những ví dụ nổi bật nhất của phần mềm tự do nguồn mở và của việc phát
triển mã nguồn mở. Mã nguồn có thể được dùng, sửa đổi và phân phối - thương mại hoặc phi
thương mại - bởi bất kỳ ai theo các điều khoản của giấy phép tương ứng, ví dụ như GNU General Public License. 2. Ưu nhược điểm 2.1. Ưu điểm
Tương tự nhiều hệ điều hành khác, Linux cũng có những ưu điểm riêng như: •
Miễn phí hoàn toàn cho người dùng. •
Hỗ trợ các phần mềm văn phòng như: LibreOffice, OpenOffice. •
Chỉnh sửa hệ điều hành theo nhu cầu sử dụng khi cần. Thích hợp với các lập trình viên. •
Không yêu cầu máy tính phải có cấu hình cao do tốn ít bộ nhớ. • Tính bảo mật tốt. 2.2. Nhược điểm •
Linux chưa phổ biến nên chưa được các nhà sản xuất máy tính khai thác. •
Phần mềm hỗ trợ còn hạn chế. •
Một số nhà sản xuất không có Driver hỗ trợ hệ điều hành Linux. lOMoAR cPSD| 61554479
3.Cấu trúc hệ điều hành Linux
Figure 0-1. Cấu trúc hệ điều hành Linux
Cấu trúc hệ HĐH Linux gồm: •
Kernel (Nhân): Phần quan trọng nhất trong hệ điều hành Linux có vai trò quản lý tài
nguyên trong phần cứng như: Bộ vi xử lý, bộ nhớ, thiết bị lưu trữ, thiết bị ngoại vi, định
vị. Qua đó các phần mềm có thể truy cập và dùng. •
Shell: Là nơi chứa các dòng lệnh và cung cấp cho người dùng giao diện để nhập các
dòng lệnh yêu cầu hệ thống thực hiện. Hiện có khá nhiều loại Shell nhưng bash shell là phổ biến nhất. •
Hệ thống tập tin (File system): Là nơi tổ chức và quản lý các thư mục, tệp tin trên hệ
thống. HĐH Linux hỗ trợ khá nhiều loại tập tin như: NTFS, XFS, FAT32, ext4, HFS +. •
Service Manager: Là hệ thống có nhiệm vụ quản lý tiến tình, dịch vụ của hệ thống.
Qua đó giúp tạm dừng, khởi động, tương tác hay quản lý với dịch vụ và tiến trình. •
Chương trình ứng dụng và tiện ích: Người dùng có thể sử dụng các tiện ích, chương
trình như: trình duyệt web, trình biên dịch, ứng dụng đồ họa, trình soạn thảo văn bản.
Các thành phần trong Linux: lOMoAR cPSD| 61554479
Figure 0-2 Các thành phần trong Linux 3.1. Nhân (Kernel)
Vào năm 1991, dựa trên UNIX kernel, Linus Torvalds đã tạo ra Linux kernel chạy
trên máy tính của ông ấy. Dựa vào chức năng của hệ điều hành, Linux kernel được chia làm 6 thành phần: lOMoAR cPSD| 61554479
Hình 1.4. Kiến trúc của Linux kernel đứng ở góc độ quản lý (management point of view)
Process management: có nhiệm vụ quản lý các tiến trình, bao gồm các công việc:
- 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.
Memory management: có nhiệm vụ quản lý bộ nhớ, bao gồm các công việc:
- Cấp phát bộ nhớ trước khi đưa chương trình vào, thu hồi bộ nhớ
khi tiến 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. lOMoAR cPSD| 61554479
Device management: có nhiệm vụ quản lý thiết bị, bao gồm các công việc:
- Đ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).
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.
Networking management: có nhiệm vụ quản lý các gói tin (packet) theo mô hình TCP/IP.
System call Interface: có nhiệm vụ cung cấp các dịch vụ sử dụng phần cứng cho các
tiến trình. Mỗi dịch vụ được gọi là một system call.
Khi triển khai thực tế, mã nguồn của Linux kernel gồm các thư mục sau: Thư mục Vai trò /arch
Chứa mã nguồn giúp Linux kernel có thể thực thi được trên nhiều kiến trúc
CPU khác nhau như x86, alpha, arm, mips, mk68, powerpc, sparc,… /block
Chứa mã nguồn triển khai nhiệm vụ lập lịch cho các thiết bị lưu trữ. /drivers
Chứa mã nguồn để triển khai nhiệm vụ điều khiển, giám sát, trao đổi dữ liệu với các thiết bị. /fs
Chứa mã nguồn triển khai nhiệm vụ quản lý dữ liệu trên các thiết bị lưu trữ. /ipc
Chứa mã nguồn triển khai nhiệm vụ giao tiếp giữa các tiến trình /kernel
Chứa mã nguồn triển khai nhiệm vụ lập lịch và đồng bộ hoạt động của các tiến trình. /mm
Chứa mã nguồn triển khai nhiệm vụ quản lý bộ nhớ lOMoAR cPSD| 61554479 /net
Chứa mã nguồn triển khai nhiệm vụ xử lý các gói tin theo mô hình TCP/IP.
Bảng 1. Một số thư mục trong mã nguồn của Linux kernel
3.2.Thư viện hệ thống (System libraries)
Thư viện hệ thống là các chương trình đặc biệt giúp truy cập các tính năng của hạt nhân. Một
hạt nhân phải được kích hoạt để thực hiện một tác vụ và việc kích hoạt này được thực hiện bởi
các ứng dụng. Nhưng các ứng dụng phải biết cách đặt lệnh gọi hệ thống vì mỗi hạt nhân có
một nhóm lệnh gọi hệ thống khác nhau. Các lập trình viên đã phát triển một thư viện tiêu chuẩn
của các thủ tục để giao tiếp với hạt nhân. Mỗi hệ điều hành hỗ trợ các tiêu chuẩn này, và sau
đó các tiêu chuẩn này được chuyển sang các lệnh gọi hệ thống cho hệ điều hành đó. Thư viện
hệ thống nổi tiếng nhất dành cho Linux là Glibc (thư viện GNU C). 3.3.
Công cụ hệ thống ( System Tools)
Hệ điều hành Linux có một tập hợp các công cụ tiện ích, thường là các lệnh đơn giản. Nó là
một phần mềm mà dự án GNU đã viết và xuất bản theo giấy phép nguồn mở của họ để phần
mềm được cung cấp miễn phí cho tất cả mọi người. Với sự trợ giúp của các lệnh, bạn có thể
truy cập tệp của mình, chỉnh sửa và thao tác dữ liệu trong thư mục hoặc tệp của bạn, thay đổi
vị trí của tệp hoặc bất cứ thứ gì. 3.4.
Công cụ phát triển ( Development Tools)
Với ba thành phần trên, hệ điều hành của bạn đang chạy và hoạt động. Nhưng để cập nhật hệ
thống của bạn, bạn có các công cụ và thư viện bổ sung. Các công cụ và thư viện bổ sung này
được viết bởi các lập trình viên và được gọi là chuỗi công cụ. Chuỗi công cụ là một công cụ
phát triển quan trọng được các nhà phát triển sử dụng để tạo ra một ứng dụng hoạt động. 3.5.
Công cụ người dùng cuối ( End user tools)
Các công cụ cuối này tạo nên một hệ thống duy nhất cho người dùng. Công cụ cuối không bắt
buộc đối với hệ điều hành nhưng cần thiết cho người dùng. Một số ví dụ về công cụ cuối là
công cụ thiết kế đồ họa, bộ văn phòng, trình duyệt, trình phát đa phương tiện, v.v.
Tính năng cơ bản của Linux:
• Di động - Tính di động có nghĩa là phần mềm có thể hoạt động trên các loại phần cứng
khác nhau theo cùng một cách. Các chương trình ứng dụng và nhân Linux hỗ trợ cài đặt
trên bất kỳ loại nền tảng phần cứng nào.
• Mã nguồn mở − Mã nguồn Linux được cung cấp miễn phí và là dự án phát triển dựa
vào cộng đồng. Nhiều nhóm cộng tác làm việc để nâng cao khả năng của hệ điều hành
Linux và nó liên tục phát triển.
• Nhiều người dùng − Linux là một hệ thống nhiều người dùng có nghĩa là nhiều người
dùng có thể truy cập các tài nguyên hệ thống như bộ nhớ/ ram/ chương trình ứng dụng cùng một lúc. lOMoAR cPSD| 61554479
• Đa chương trình − Linux là một hệ thống đa chương trình có nghĩa là nhiều ứng dụng
có thể chạy cùng một lúc.
• Hệ thống tệp phân cấp − Linux cung cấp cấu trúc tệp tiêu chuẩn trong đó các tệp hệ
thống/tệp người dùng được sắp xếp.
• Shell − Linux cung cấp một chương trình thông dịch đặc biệt có thể được sử dụng để
thực thi các lệnh của hệ điều hành. Nó có thể được sử dụng để thực hiện nhiều loại hoạt
động khác nhau, gọi các chương trình ứng dụng. vân vân.
• Bảo mật − Linux cung cấp bảo mật cho người dùng bằng cách sử dụng các tính năng
xác thực như bảo vệ bằng mật khẩu/quyền truy cập có kiểm soát vào các tệp cụ thể/mã hóa dữ liệu. Device driver trong Linux
1. Vai trò của Driver
Driver là một trình điều khiển có vai trò điều khiển, quản lý, giám sát một thực thể
nào đó dưới quyền của nó. Bus driver làm việc với một đường bus, device làm việc
với một thiết bị (chuột, bàn phím, màn hình, đãi cứng, camera…). Có thể lấy ví dụ
tương tự như vai trò của một phi công hoặc một hệ thống bay tự động được giám sát
bởi phi công, một thành phần cứng có thể được điều khiển bởi một driver hoặc được
điều khiển bởi một phần cứng khác mà được quản lý bởi một driver. Trường hợp này,
phần cứng có vai trò điều khiển được gọi là một device controller. Bản thân các
controller cũng cần driver. Ví dụ: hard disk controller, display controller, audio
controller, … quản lý các thiết bị kết nối với chúng, mà nói một cách kỹ thuật hơn
đó là các IDE controller, PCI controller, USB controller, SPI controller, I2C
controller, … Các khái niệm này được minh họa tổng quan như hình sau: lOMoAR cPSD| 61554479
Hình 1.1. Tương tác giữa thiết bị và driver
Các device controller thông thường được kết nối với CPU thông qua đường bus (PCI,
IDE, USB, SPI, …). Trong vi điều khiển, CPU và các device controller thường được
thiết kế trên một chip. Điều này cho phép giảm kích thước và giá thành, phù hợp với
phát triển hệ thống nhúng. Mà về mặt nguyên tắc, sẽ không có gì khác biệt đối lớn
đối với các driver trên các hệ thống máy tính cá nhân.
2. Hai nhiệm vụ của Driver
Các bus driver cung cấp giao diện đặc tả cho các giao thức phần cứng tương ứng.
Nó nằm ở tầng dưới cùng trong mô hình phân lớp phần mềm của hệ điều hành. Nằm
trên nó là các device driver thực sự để vận hành các thiết bị, mang đặc trưng của
từng thiết bị xác định. Ngoài ra, mục đích quan trọng của các driver thiết bị là cung
cấp một giao diện trừu tường hóa cho người sử dụng, tức là cung cấp một giao diện
lên tầng trên của hệ điều hành. Một cách tổng quan, một driver sẽ bao gồm 2 phần
quan trọng: a) giao tiếp với thiết bị (Device-specific) b) giao tiếp với hệ điều hành (OS-specific)
Hình 1.2. Các thành phần của driver trên Linux
Thành phần giao tiếp với thiết bị (device-specific) của một driver là giống nhau đối
với tất cả các hệ điều hành. Nó có thể hiểu và giải mã các thông tin về thiết bị (chi
tiết kỹ thuật, kiểu thao tác, hiệu năng, cách lập trình giao tiếp với thiết bị, …) Thành lOMoAR cPSD| 61554479
phần giao tiếp với hệ điều hành (OS-specific) gắn kết chặt chẽ với các cơ chế của hệ
điều hành, và do vậy sẽ là khác nhau giữa một driver trên Linux và một driver trên Windows, hoặc MacOS, … lOMoAR cPSD| 61554479
3. Mô hình phân lớp theo chiều dọc
Trên Linux, device driver cung cấp một giao diện “system call” (giao diện gọi các
hàm hệ thống) đến tầng ứng dụng cho người dùng; đây được coi là một ranh giới
giữa tầng nhân (kernel space) và tầng người dùng (user space) của Linux. Mô hình
phân tầng được chỉ ra như hình vẽ.
Hình 1.3. Kiến trúc tổng quan nhân Linux
Tùy thuộc vào đặc trưng của của driver với hệ điều hành, driver trên Linux được phân
chia thành 3 loại (phân cấp theo chiều dọc):
- Packet-oriented or the network vertical (driver hướng gói dữ liệu)
- Block-oriented or the storage vertical (driver hướng khối dữ liệu)
- Byte-oriented or the character vertical (driver hướng byte/ký tự)
Packet-oriented hay network driver gồm 2 phần: a) network protocol stack và b)
network interface card (NIC) device drivers, hoặc đơn giản là network device driver
(có thể là Ethernet, Wi-Fi, hoặc bất kỳ các giao tiếp mạng nào khác,…)
Block-oriented hay storage driver gồm 2 phần: a) File-system drivers để giải mã các
định dạng khác nhau trên các phân vùng lưu trữ khác nhau (FAT, ext, …) và b) Block
device drivers cho các giao thức phần cứng ứng với các thiết bị lưu trữ khác nhau (IDE, SCSI, MTD, …) lOMoAR cPSD| 61554479
Các Byte-oriented hay character driver lại tiếp tục được phân chia thành
các lớp con (sub-classified) như tty driver, input driver, console driver,
frame-buffer drivers, sound driver, … (tương ứng với các giao tiếp như
RS232, PS/2, VGA, I2C, SPI, …)