Bài giảng Kiến trúc Unix/Linux

___________________________________________________________________________  
Phần 1: Lí thuyết HĐH Unix/Linux  
Mục lục  
A. Tổng quan: Vài nét về Hệ Điều hành  
B. Unix/Linux  
Chương I.  
Tổng quan hệ thống Unix  
Chương II. Hệ thống tệp (file subsystem)  
1. Tổng quan về Hệ thống tệp  
2. Gọi Hệ Thống thao tác tệp (System call for FS)  
Tiến Trình (process)  
Chương III.  
1 Tổng quan về tiến trình  
2 Cấu trúc của Tiến trình  
3 Kiểm soát tiến trình  
Chương IV.  
Chương V.  
Chương VI.  
Chương VII  
Liên lạc giữa các tiến trình  
Các hệ thống vào ra (I/O subsystem)  
Đa xử lí (Multiprocessor Systems)  
Các hệ Unix phân tán (Distributed Unix Systems)  
Phần 2: Lập trình trong Unix  
Phần 3: Lập trình mạng trong Unix  
1
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
I. Tổng quan về Hệ Điều Hành  
(An Operating System is a group of programs that provide basic  
functionality on a computer. This functionality is called services. Other word  
an Operating System can be seen as a set of functionality building blocks  
upon which other programs depend. It also manages computer resources and  
resolves resource conflicts, so OS abstracts the real hardware of the system  
and presents the system’s users and its applications with a virtual machine).  
1. Phần mềm máy tính chia ra làm hai loại: các phần mềm hệ thống, quản lí hoạt động của  
bản thân máy tính, và các chương trình ứng dụng, giải quyết các yêu cầu của người dùng.  
Phần căn bản nhất của tất cả các phần mềm hệ thống, gọi là Hệ điều hành, mà chức năng cơ  
bản là kiểm soát tất cả nguồn tài nguyên, cung cấp nền tảng (các hàm chức năng, các dịch vụ  
hệ thống) để trên đó các chương trình ứng dụng được viết ra sẽ sử dụng. Mô hình một máy  
tính như sau:  
Hình trên cho ta một phần gọi là kernel, hay nhân của HĐH, kernel hổ trợ HĐH thực  
hiện chức năng quản lí các thành phần sau đây:  
1.Thiết bị (devices), cho một giao tiếp để các chương trình người dùng “ nói  
chuyện” với  
thiết bị;  
2.Bộ nhớ (memory), cấp bộ nhớ cho các chương trình (tiến trình) đang chạy;  
3.Các Tiến trình (process), tạo, giám sát hoạt động của các tiến trình;  
4.Liên lạc (communication) giữa các TT.  
Nguồn tài nguyên máy tính có nhiều, như (CPU(s), bộ nhớ, các thiết bị ngoại vi ghép  
nối vào máy tính…) tạo thành một hệ thống rất phức tạp. Viết các chương trình để theo dõi  
tất cả các thành phần, khai thác chúng chính xác và để chúng chạy độc lập một cách tối ưu, là  
việc rất khó. Và nếu điều này lại để cho từng người dùng quan tâm, thì sẽ có vô số các  
2
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
chương trình được viết và nếu hệ là loại nhiều người dùng thì, hãy thử tưởng tượng … Như  
vậy rỏ ràng cần tách người dùng ra khỏi sự phức tạp của phần cứng. Cách có thể đảm bảo là  
đặt phần mềm (hay lớp phần mềm) lên trên đỉnh của phần cứng và nó quản lí tất cả các phần  
của máy tính, trong khi trao cho người dùng một giao diện (interface) hay một máy tính ảo  
(virtual machine) dễ hiểu hơn và dễ lập trình ứng dụng hơn. Lớp phần mềm đó gọi là HĐH.  
Từ đây xuất hiện một quan niệm mới, đó là sự phân biệt chế độ chạy máy, nó bao gồm:  
HĐH chạy trong một môi trường đặc biệt, gọi là chế độ nhân (kernel mode hay  
supervisor mode). Chế độ này được hổ trợ bởi kiến trúc của CPU ( bởi các lệnh máy đặc  
biệt) và nó ngăn người dùng truy nhập vào phần cứng (quản lí phần cứng chuẩn xác cho  
nhiều người dùng đồng thời, còn gọi là chế độ được bảo vệ (protected mode)).  
Thuật ngữ kernel đề cập đến phần mã cốt yếu nhất của các chương trình hệ thống, nó  
kiểm soát các tệp, khởi động và cho chạy các chương trình ứng dụng đồng thời, phân chia  
thời gian sử dụng CPU cho các chương trình, cấp bộ nhớ cũng như các tài nguyên khác cho  
các chương trình của người dùng. Bản thân kernel không làm gì nhiều nhưng cung cấp các  
công cụ nguyên thuỷ (primitive functions) mà các tiện ích khác, các dịch vụ khác của HĐH  
được xây dựng. Do đó các chương trình hệ thống, các trình ứng dụng sử dụng các dịch vụ của  
HĐH, chạy trong user mode. Tuy nhiên có sự khác biệt là các trình ứng dụng thì tận dụng  
những tiện ích hệ thống cho, còn các trình hệ thống là cần thiết để máy tính chạy được. Các  
trình ứng dụng chạy trong chế độ người dùng (user mode), các primitive functions chạy trong  
kernel . Việc kết nối giữa hai chế độ chạy trình được thực hiện bởi gọi hệ thống (system call).  
Gọi hệ thống (hay gọi các dịch vụ của hệ thống, GHT), là một giao diện lập trình giữa  
HĐH và ứng dụng. Nó được thực hiện bằng cách đặt các thông số vào những chổ được định  
nghĩa rỏ ràng (vào các thanh ghi của CPU hay đặt vào stack) và sau đó thực hiện một lệnh  
bẩy đặt biệt (trap intruction) của CPU. Lệnh này chuyển chế độ chạy máy từ user mode vào  
kernel mode và từ đó điều khiển chuyển cho HĐH (1). Tiếp theo HĐH kiểm tra số hiệu và  
các thông số của GHT để xác định GHT nào sẽ thực hiện (2). Từ trong bảng với chỉ số (số  
hiệu của GHT), HĐH lấy ra con trỏ trỏ đến qui trình (procedure) thực hiện GHT đó (3). Khi  
thực hiện xong GHT, điều khiển chuyển trả lại cho chương trình của người dùng.  
Từ đây có thể thấy cấu trúc cơ bản của GHT như sau:  
1.  
Một chương trình chính kích hoạt dịch vụ hệ thống bằng một GHT.  
3
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
2.  
3.  
4.  
Bẩy (TRAP) chuyển GHT vào nhân HĐH, nhân xác định số hiệu của dịch vụ.  
Thực hiện dịch vụ.  
Kết thúc dịch vụ và trở về nơi phát sinh GHT.  
Hình sau cho các bước theo trình tự từ lập trình đến thực thi GHT read():  
Khi nhìn cách thực thi một chương trình, phần mã chương trình người dùng được kết  
hợp với mã của kernel (khi thực hiện các primitive functions qua GHT), tạo ra toàn bộ mã  
chương trình. Nói cách khác vào thời điểm chạy trình, phần mã của kernel thực hiện bởi GHT  
là mã của chương trình người dùng, chỉ khác ở chế độ thực hiện.  
2. Trên cơ sở định nghĩa kernel mode và user mode, kiến trúc của các HĐH có thể khác  
nhau:  
a. Loại đơn thể (monolitic OS):  
4
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
HĐH kiểu đơn thể (monolitic OS)  
Các trình ứng dụng chạy ở user mode khi thực hiện gọi một dịch vụ của Hệ thống, HĐH sẽ  
chuyển việc thực hiện dịch vụ vào kernel mode. Khi dịch vụ hoàn tất HĐH chuyển việc thực  
hiện chương trình đã phát sinh gọi dịch vụ trở lại user mode, chương trình này tiếp tục chạy.  
PC DOS là một ví dụ. Đặc điểm chung của loại này là kernel là một thực thể đơn, một  
chương trình rất lớn, mà các thành phần chức năng truy nhập tới tất cả các cấu trúc dữ liệu và  
thủ tục của hệ thống.  
b. Mô hình Client/Server:  
Chia OS ra thành nhiều tiến trình (TT), mỗi TT cung cấp một tập các dịch vụ ( ví dụ các dịch  
vụ bộ nhớ, dịch vụ tạo TT, dịch vụ lập biểu …). Các phần mềm dịch vụ (server) chạy trong  
user mode thực hiện vòng lặp để tiếp nhận yêu cầu các dịch vụ của nó từ các client. Client có  
thể là thành phần khác của HĐH, hay là một ứng dụng, yêu cầu phục vụ bằng cách gởi một  
thông điệp (message) tới server. Kernel của HĐH, là phần rất nhỏ gọn (microkernel) chạy  
trong kernel mode phát các thông điệp tới server, server thực hiện yêu cầu, kernel trả lại kết  
quả cho client. Server chạy các TT trong user mode tách biệt, nên nếu có sự cố (fail) thì toàn  
bộ hệ thống không hề bị ảnh hưởng. Với nhiều CPU, hay nhiều máy kết hợp, các dịch vụ chạy  
trên các CPU, máy khác nhau, thích hợp cho các tính toán phân tán.  
5
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
c. Loại cấu trúc theo lớp (layered OS):  
HĐH được chia thành các lớp xếp chồng lên nhau. Phân lớp là cấu trúc được sắp xếp theo hai  
hướng lên-xuống (nhìn tại một lớp bất kì), sao cho mỗi lớp thành một đơn thể với chức năng  
cung cấp các dịch vụ cho lớp trên liền kề, và sử dụng tòan bộ dịch vụ của lớp dưới liền kề,  
với nguyên tắc lớp trên yêu cầu và nhận kết quả, lớp dưới thực hiện và trao kết quả cho lớp  
trên. Với cách xác định tường minh như vậy sẽ tránh được sự trùng lặp chức năng cũng như  
chồng chéo quan hệ (ví dụ ở mô hình đơn thể nói trên) giữa các đơn thể. Kiểu cấu trúc này  
mang lại các ưu điểm sau:  
- Nếu chuẩn hóa được các dịch vụ ở mỗi lớp, và chuẩn định dạng dữ liệu vào/ra thì  
các phần mềm thực hiện đơn thể sẽ trở nên phổ quát, dễ dùng chung cho các hệ thống có cấu  
trúc tương tự. Chương trình nguồn dễ dàng biên dịch lại và chạy ở các phần cứng khác nhau.  
Đó là tính portable.  
- Đơn giản hóa quá trình cải tiến hay nâng cấp hệ thống bằng việc thay đổi, nâng cấp  
các đơn thể các thể, mà không phải chờ đợi cho đến khi hòan tất toàn bộ hệ thống. Chính nhờ  
vậy mà tăng được hiệu năng họat động, tính ổn định của hệ thống.  
- Hổ trợ tốt cho nhu cầu trao đổi dữ liệu giữa các hệ thống khác nhau khi có sự chuẩn  
hóa về giao diện (interface), và giao thức (protocol). Đó chính là tính mở của hệ thống.  
Các HĐH kiểu UNIX (VAX/VMS hay Multics (tiền thân của UNIX), …) thuộc loại  
này.  
Hãy quan sát mô tả điển hình của cấu trúc phân lớp theo hình sau:  
6
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
Trên mô hình này, lớp 1, 2 gần với từng loại kiến trúc máy tính (hardware), trong đó  
lớp 1 cố gắng dấu đi các kiến trúc phần cứng có thể, tạo ra một lớp phần cứng trừu tượng  
(Hardware Abstract Layer). Lớp 2 là các thao tác (handling) cơ bản áp dụng trên các phần  
cứng bên dưới (bao gồm xử lí ngắt, chuyển bối cảnh thực hiện của các tiến trình, quản lí  
bộ nhớ). Lớp 3 thực thi phân phối thời gian chạy máy (scheduling), đồng bộ tiến trình và  
luồng. Lớp 4 là các đặc tả thiết bị có trên máy dạng tổng quát, không phụ thuộc vào loại  
thiết bị cụ thể, ví dụ ở UNIX tại gồm các tệp thiết bị tại thư mục /dev. Lớp 5 và 6 là cách  
tổ chức tài nguyên mà kernel sẽ thực hiện các biện pháp quản lí (tổ chức chức tệp (File  
System, Virtual File System), bộ nhớ ảo). Lớp 7 là giao diện của HĐH với trình ứng  
dụng. Có thể thấy, lớp 3 đến 7 là các lớp tổng quát, không phụ thuộc vào phần cứng. Như  
vậy mã thực thi có thể triển khai trên bất kì loại kiến trúc máy nào. Mô hình dưới cho thấy  
một ví dụ của ý tưởng trên:  
Unix là một ví dụ điển hình với các đặc điểm như sau:  
7
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
1. Hệ được viết bằng ngôn ngữ bậc cao, làm cho dễ đọc, dễ hiểu, dễ thay đổi và chạy  
trên các nền phần cứng khác nhau.  
2. Có giao diện người dùng đơn giản, mang lại sức mạnh cung cấp các dịch vụ người  
dùng yêu cầu.  
3. Cung cấp các hàm cơ bản (primitive) để phát triển các chương trình phức tạp từ các  
chương trình đơn giản.  
4. Sử dụng hệ thống tệp có cấu trúc, dễ dùng, dễ bảo trì và hiệu quả.  
5. Tệp được tổ chức theo kiểu dòng các byte, nhất quán, dễ tạo các ứng dụng.  
6. Giao tiếp các thiết bị ngoại vi đơn giản, nhất quán và ổn định.  
7. Là hệ nhiều người dùng, nhiều tiến trình, mỗi người dùng có thể chạy nhiều tiến trình  
đồng thời. Hệ cón là hệ đa xử lí.  
8. Người phát triển ứng dụng không cần biết tới cấu trúc máy tính, do đó ứng dụng viết  
ra có thể chạy trên nhiều phần cứng khác nhau.  
Đơn giản, nhất quán, đó là tư tưởng chủ đạo của Unix.  
II. Unix/Linux  
Chương I.  
Tổng quan hệ thống Unix  
1. Cấu trúc hệ thống  
Cấu trúc của Unix  
Unix có thể xem như một loại kim tự tháp với các lớp chức năng xếp chồng lên nhau và  
tạo ra các giao diện. Phần cứng (hardware) sẽ đề cập sau. Hệ Điều Hành (HĐH, hay  
Operating System-OS) tương tác trực tiếp với phần cứng, cung cấp các dịch vụ cơ bản cho  
các chương trình và ngăn cách các chương trình với phần cứng cụ thể. Nếu nhìn hệ thống như  
từ các lớp, thì OS thông thường được gọi là nhân hệ thống (System Kernel), nó được cách li  
với chương trình của người dùng. Bởi vì các chương trình ứng dụng nói chung, kể cả OS, độc  
lập với phần cứng, nên dễ dàng chạy trên các phần cứng khác nhau vì không phụ thuộc vào  
8
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
phần cứng cụ thể. Chẳng hạn Shell và các editors (vi, ed) ở lớp ngoài tương tác với kernel  
bằng cách phát sinh ra Gọi Hệ Thống (GHT) – system calls. GHT sẽ chỉ thị cho kernel làm  
những việc khác nhau mà chương trình gọi yêu cầu, thực hiện trao đổi dữ liệu (data) giữa  
kernel và chương trình đó. Một vài chương trình có tên trong hình là các chương trình chuẩn  
trong cấu hình của hệ thống và được biết tên dưới dạng các lệnh – commands. Lớp này cũng  
có thể bao hàm cả các chương trình của người dùng với tên là a.out, một loại tên chuẩn cho  
các tệp chạy được do bộ dịch C tạo ra. Còn có loại ứng dụng khác (APPS) được xây dựng  
trên lớp trên cùng của các chương trình có mức thấp hơn hiện diện ở lớp ngoài cùng của mô  
hình. Mặc dù mô hình mô tả hai cấp các APPS, nhưng người dùng có thể mở rộng ra các cấp  
thích hợp. Rất nhiều các hệ thống ứng dụng, các chương trình, cho cách nhìn ở mức cao, song  
tất cả đều dùng các dịch vụ cấp thấp được cung cấp bởi kernel qua GHT. Trong System V  
chuẩn có 64 GHT, trong đó có 32 GHT là thường dùng nhất (LINUX 2.x có nhiều hơn và  
khoản chừng 164 lệnh GHT).  
Tập hợp các System calls và các thuật toán bên trong tạo thành thân (body) của kernel, do  
vậy việc nghiên cứu Unix trong sách này sẽ giản lược để nghiên cứu chi tiết các system calls  
cũng như sự tương tác giữa chúng. Và khái niệm “Unix system”, hay “kernel” hay “system”  
trong sách đều có ý nói tới kernel của hệ điều hành Unix và rõ ràng hơn ở từng bối cảnh trình  
bày.  
2. Cách nhìn từ phía người dùng: tổ chức tệp  
Phần này tóm lượt các nét đặc trưng ở mức cao của Unix chẳng hạn: hệ thống tệp (File  
system FS), môi trường xử lí, xây dựng các khối nguyên hàm, và sẽ được khai thác sau này.  
2.1. Hệ thống tệp (File system – FS)  
Hệ thống tệp của Unix được đặc tả bởi:  
·
·
·
·
Cấu trúc cấp bậc (cây thư mục);  
Cách xử lí nhất quán dữ liệu của tệp (chuổi các byte byte stream );  
Khả năng tạo và hủy tệp (tạo mới, xóa);  
Tính tăng trưởng động của tệp (thêm bớt, cắt dán);  
9
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
·
·
Khả năng bảo vệ dữ liệu của tệp (bởi các kiểu thuộc tính như quyền truy nhập);  
Xử lí các thiết bị ngoại vi như xử lí các tệp (cách nhìn thiết bị bởi mô tả kiểu tệp).  
FS được tổ chức như một cây bắt đầu từ một nút đơn gọi là root, được biểu diễn như sau: “ /  
”; từ đó sẽ có các thư mục khác tạo thành nhánh của cây, trong các nhánh có thể có các nhánh  
(con) khác. Dưới các nhánh sẽ là tệp. Tệp có thể là tệp bình thường (regural files) hay cũng  
có thể là tệp đặc biệt (special files). Tệp được truy nhập qua đường dẫn (path name) mô tả  
cách thức định vị được tệp trong FS. Đường dẫn đầy đủ, hay đường dẫn tuyệt đối, bắt đầu bởi  
dấu / và nó xác định sẽ tìm tệp bằng cách đi từ root qua cấu trúc cây thư mục theo các nhánh  
chỉ thị trong đường dẫn. Ví dụ trong hình ta có: /usr/src/cmd/date.c là đường dẫn tuyệt đối tới  
tệp date.c. Đường dẫn không bắt đầu từ root gọi là đường dẫn tương đối, chỉ tới thư mục hiện  
tại của tệp.  
Các chương trình trong Unix không có hiểu biết gì về định dạng (format) bên trong của dữ  
liệu của tệp. Kernel lưu dữ liệu của tệp, xử lí dữ liệu tệp như một dòng các bytes (byte  
stream) không có định dạng. Do vậy cú pháp truy nhập dữ liệu trong tệp được định nghĩa bởi  
hệ thống và nhất quán như nhau cho tất cả các chương trình, nhưng ngữ nghĩa của dữ liệu thì  
chương trình ứng dụng phải xử lí.  
Ví dụ: Chương trình troff xử lí văn bản có định dạng hoài vọng sẽ tìm thấy các kí tự “dòng  
mới” (“ new line ”) ở cuối mỗi dòng văn bản, còn chương trình kế toán acctcom hoài vọng  
tìm thấy những bản ghi có độ dài cố định. Cả hai chương trình dùng cùng các dịch vụ hệ  
thống để truy nhập dữ liệu trong tệp theo cách byte stream, nhưng bên trong mỗi chương trình  
lại dùng cách phân tích cú pháp khác nhau thích hợp cho nó. Nếu một chương trình phát hiện  
thấy định dạng là không đúng, thì bản thân chương trình sẽ thực hiện một hành vi khác để xử  
lí (chứ không phải hệ thống làm điều đó).  
Thư mục cũng là một loại tệp, hệ thống xử lí dữ liệu trong thư mục cũng bằng byte stream,  
nhưng dữ liệu ở đây chứa tên các tệp trong thư mục có khuôn dạng dự đoán được, sao cho OS  
và các chương trình, ví dụ ls, có thể nhận ra các tệp trong thư mục.  
Việc truy nhập tệp được kiểm soát bởi quyền truy nhập (access permission) kết hợp với tệp.  
Quyền truy nhập được lập ra một cách độc lập để kiểm soát truy nhập đọc (read), ghi (write),  
và thực hiện (execute) cho ba lớp người sử dụng: người sở hữu tệp (u - user), nhóm người  
được truy nhập (g - group), những người khác (o - other). Người dùng có thể tạo tệp nếu họ  
được phép và các tệp mới tạo sẽ là các nhánh lá của cấu trúc thư mục hệ thống.  
10  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
Đối với người dùng, Unix xử lí các thiết bị như thể đó là các tệp. Các thiết bị được mô tả bởi  
các tệp thiết bị đặc biệt và nằm ở một nhánh trong cấu trúc hệ thống thư mục (/dev). Các  
chương trình truy nhập các thiết bị bằng cú pháp giống như đã dùng để truy nhập tệp bình  
thường, các thiết bị cũng được bảo vệ cùng phương thức như các tệp, qua việc ấn định quyền  
truy nhập. Bởi vì tên các thiết bị cũng giống như tên các tệp bình thường và các thao tác trên  
chúng là như nhau, nên hầu hết các chương trình đều không biết tới kiểu tệp bên trong của tệp  
mà chúng thao tác.  
2.2  
Môi trường xử lí  
Một chương trình - program là một tệp thực thi và một tiến trình (TT – procces) là một  
khoảnh khắc (instance) của chương trình được thực hiện theo trục thời gian. TT bao gồm:  
mã trình thực thi,  
dữ liệu (data) của TT,  
program (user) stack,  
CPU program counter,  
kernel stack,  
CPU registers  
và thông tin khác cần thiết để chạy trình. Các dữ liệu này tạo ra bối cảnh (context)  
của TT, mỗi TT có bối cảnh riêng biệt. Có rất nhiều TT được thực hiện đồng thời trên Unix  
(đặc tính này còn gọi là đa trình - multiprogramming hay đa nhiệm - multitasking) theo  
nguyên lí phân chia thời gian (time sharing), mà tổng số các TT về logic là không có giới  
hạn. Có nhiều GHT cho phép các TT tạo ra các TT mới, kết thúc các TT, đồng bộ các giai  
đoạn thực hiện TT, kiểm soát phản ứng với các sự kiện khác nhau. Các TT sử dụng GHT độc  
lập với nhau. Ví dụ chạy đa trình với 4 chương trình A, B, C, D trên một CPU:  
Hãy xét ví dụ sau:  
main (argc, argv)  
int argc;  
char *argv[];  
{
/* giả định có 2 đối đầu vào*/  
11  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
if (fork () == 0)  
execl (“copy”, ”copy”, argv[1], argv[2], 0);  
wait((int *) 0);  
printf (“copy done\n”);  
}
Chương trình trên dùng GHT fork() để tạo ra một TT mới. TT mới gọi là TT con sẽ nhận  
được giá trị trả lại là 0 từ lệnh fork và nó kích hoạt execl để chạy trình copy. Lệnh execl sẽ  
phủ lên không gian địa chỉ của TT con bằng mã của trình “copy”, với giả định trình “copy”  
nằm cùng trong thư mục hiện hành của main, và chạy trình copy với các thông số do người  
dùng đưa vào. Nếu execl hoàn tất nó sẽ không trở về địa chỉ xuất phát trong main vì nó chạy  
trong một miền địa chỉ mới khác. Trong khi đó TT bố đã kích hoạt fork() lại nhận được giá trị  
trả lại khác 0 từ GHT wait(), nó “treo” việc thực hiện để đợi cho đến khi “copy” kết thúc và in  
ra thông báo “copy done “ và sau đó kết thúc thực hiện main bằng exit (exit() là ngầm định  
khi kết thúc main trong C).  
Một cách tổng quát, GHT cho phép người dùng viết các chương trình thực hiện các  
thao tác rất tinh tế mà bản thân kernel không cần có nhiều chức năng hơn là cần thiết. Có thể  
đề cập tới một số các chức năng, chẳng hạn các bộ dịch (compilers), bộ soạn thảo (editors)  
thuộc lớp các chương trình cấp người dùng (user level) và quan trọng hàng đầu là shell, là  
trình thông dịch mà người dùng sử dụng ngay sau khi log in vào hệ thống: shell thông dịch  
các từ trong dòng lệnh thành tên lệnh máy, phát sinh TT con và TT con thực hiện lệnh đưa  
vào, xử lí các từ còn lại trong dòng lệnh như các thông số của lệnh.  
Shell thực hiện ba kiểu lệnh:  
1. Lệnh là tệp có thể thực hiện được chứa mã máy phát sinh do bộ dịch tạo ra từ mã  
nguồn (chương trình C chẳng hạn);  
2. Lệnh là tệp chứa một xâu các dòng lệnh của shell;  
3. Là các lệnh bên trong của shell. Các lệnh bên trong này làm cho shell trở thành một  
ngôn ngữ lập trình rất mạnh trong Unix.  
Shell là chương trình thuộc lớp người dùng, không phải là phần của kernel, cho nên có thể dể  
dàng biến cải cho mỗi môi trường đặc thù. Bản thân shell cũng có ba loại khác nhau thích hợp  
cho các nhu cầu sử dụng khác nhau và hệ thống có thể chạy các shell đó đồng thời.  
Sức mạnh của mỗi kiểu shell thể hiện ở khả năng lập trình của mỗi kiểu.  
Mỗi TT được thực hiện trong Unix có một môi trường (execution environment) thực hiện, bao  
gồm cả thư mục hiện hành. Thư mục hiện hành của TT là thư mục dùng để chỉ đường dẫn  
không bắt đầu bằng “ /”. Người dùng có thể thực hiện nhiều TT cùng một lúc, và các TT lại  
có thể tạo ra các TT khác một cách động, và đồng bộ việc thực hiện các TT đó. Đặc tính này  
tạo ra một môi trường thực hiện chương trình rất mạnh trong Unix.  
2.3  
Xây dựng các hàm chức năng cơ bản (primitives)  
Như đã đề cập, tính triết lí của Unix là để cung cấp cho OS các nguyên hàm (primitives) mà  
người dùng sẽ sử dụng để viết các chương trình (chức năng) nhỏ, có tính modul, được dùng  
như các khối xây dựng để tạo ra các chương trình lớn và phức tạp. Một trong các primitive đó  
là khả năng tái định tuyến vào/ra (redirect I/O). Tiếp theo là pipe, một cơ chế linh hoạt cho  
phép truyền dữ liệu giữa các TT, hay lệnh ngay từ bàn phím. Ví dụ, khi dùng các chương  
12  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
trình nhỏ để tạo các chương trình lớn và phức tạp, người lập trình sử dụng các primitives  
redirect I/O và pipe để hợp nhất các phần đó lại.  
3. Các dịch vụ của Unix/Linux  
· Trong hình mô tả các lớp của kernel, cho thấy lớp kernel nằm ngay bên dưới lớp các  
trình ứng dụng của người dùng. Kernel thực hiện vô số các thao tác cơ bản  
(primitives) thay mặt cho các TT của nguời dùng để hỗ trợ cho giao diện người dùng.  
Các thao tác đó bao hàm các dịch vụ mà kernel cấp:  
· Kiểm soát việc thực hiện các TT gồm có: cho phép TT tạo TT mới, kết thúc TT, treo  
việc thực hiện và trao đổi thông điệp giữa các TT;  
· Lập biểu để các TT được thục hiện trên CPU. Các TT chia xẻ CPU theo phương thức  
phân chia thời gian, một TT sẽ bị treo sau khi thời gian phân bổ đã hết, kernel lấy TT  
khác đưa vào thực hiện. Sau này kernel sẽ lại lựa chọn TT bị treo để đưa vào thực hiện  
trở lại.  
· Cấp phát bộ nhớ cho TT đang thực hiện, cho phép TT chia sẻ không gian địa chỉ của  
TT dưới những điều kiện nhất định, bảo vệ miền địa chỉ riêng của TT đối với các TT  
khác. Nếu hệ thống chạy trong hoàn cảnh thiếu bộ nhớ, kernel sẽ giải phóng bộ nhớ  
bằng cách ghi lại các TT tạm thời vào bộ nhớ dự phòng (còn gọi là thiết bị swap). Nếu  
toàn bộ TT được ghi vào swap, thì hệ Unix gọi là hệ tráo đổi (swapping system); Nếu  
kernel ghi các trang của bộ nhớ lên swap, thì hệ đó gọi là hệ lưu trang (paging  
system).  
· Cấp phát bộ nhớ thứ cấp để cất và tìm lại dữ liệu của người dùng có hiệu quả. Dịch vụ  
này cấu tạo nên hệ thống tệp. Kernel cấp vùng nhớ thứ cấp cho tệp của người dùng,  
khôi phục lại vùng nhớ, xây dựng cấu trúc tệp theo một cách thức hiểu được, bảo vệ  
tệp của người dùng trước các truy nhập bất hợp pháp.  
· Cho phép các TT truy nhập các thiết bị ngoại vi, ví dụ t/b đầu cuối, đĩa, t/b mạng.  
· Kernel cung cấp các dịch vụ một cách thông suốt, chẳng hạn kernel ghi nhận tệp cần  
thao tác thuộc loại tệp bình thường hay tệp thiết bị, nhưng ẩn điều đó đối với TT của  
người dùng; hay ví dụ, kernel tạo khuôn dữ liệu trong tệp để ghi (đĩa), nhưng lại ẩn  
khuôn dạng đó đối với TT người dùng (user). Tương tự như vậy đối với các dịch vụ  
hệ thống cung cấp cho các TT user dùng ở mức độ cấp người dùng. Ví dụ dịch vụ hệ  
thống mà shell dùng để đóng vai trò là trình thông dịch lệnh: cho phép shell đọc đầu  
vào từ t/b đầu cuối, phát sinh động các TT, đồng bộ việc thực hiện các TT, tạo pipe,  
đổi hướng I/O. Người dùng cấu tạo các phiên bản shell riêng mà không tác động tới  
những users khác. Các trình đó cùng dùng các dịch vụ của kernel ở mức shell chuẩn.  
4. Phần cứng  
Tiến trình người dùng (TT user) trên Unix được chia ra làm hai mức độ: Chế độ người  
dùng (user mode) và chế độ nhân (kernel mode). Khi TT thục hiện một GHT, chế độ thực  
hiện TT sẽ chuyển từ user mode sang kernel mode: OS thực hiện và cố gắng phục vụ các yêu  
cầu của user, trả lại kết quả và thông báo lỗi nếu có. OS lưu lại các hoạt động có liên quan tới  
TT user, thao tác các ngắt, lập biểu chạy TT, quản lí bộ nhớ... Có loại máy hỗ trợ nhiều mức  
hơn, tuy nhiên trong Unix hai mức này là đủ.  
13  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
Sự khác biệt của hai mức này là:  
· Các ứng dụng chạy trong chế độ xử lí không có đặc quyền, user mode, liên lạc với hệ  
thống qua một tập các giao tiếp giới hạn (kể cả một số lệnh của CPU), cũng như bị  
hạn chế truy nhập dữ liệu hệ thống. TT ứng dụng có thể truy nhập các lệnh và dữ liệu  
của nó, không được truy nhập lệnh và dữ liệu của kernel cũng như của các TT khác.  
Khi TT trong user mode thực hiện một GHT, kernel “bẩy“ GHT đó, chuyển chế độ  
thực hiện vào kernel mode. Kernel kiểm soát TT, xác thực các đối (ví dụ quyền truy  
nhập, quyền thao tác dữ liệu) mà TT chuyển cho GHT và thực hiện GHT đó. Khi  
GHT kết thúc, Kernel chuyển TT ngược lại vào user mode trước khi trả điều khiển lại  
cho TT, cho phép TT tiếp tục chạy. Bằng cách đó kernel bảo vệ được chính nó cũng  
như các dữ liệu khỏi bị TT user làm tổn hại.  
· Thực hiện mã của HĐH chạy trong chế độ đặc quyền của CPU, gọi là kernel mode.  
Trong chế độ này HĐH chạy và thực hiện các GHT mà TT user đã gọi. TT trong  
kernel mode có thể truy nhập vào không gian địa chỉ của nó ở cả hai vùng kernel và  
user. Việc truy nhập tài nguyên hệ thống (các cấu trúc dữ liệu hê thống và phần cứng)  
không có giới hạn đối với kernel. Một số các lệnh máy là đặc quyền chỉ kernel mode  
mới dùng được.  
· OS duy trì các thông tin (records) bên trong để phân biệt các TT thực hiện trên hệ  
thống. Mặc dù hệ thống chạy một trong hai chế độ nói trên, song kernel chạy trên  
danh nghĩa của TT user. Kernel không phải là tập hợp của các TT riêng biệt chạy song  
song với các TT user, mà là một phần của mỗi TT user. Trong văn ngữ khi nói “kernel  
thực hiện...” thì điều đó có nghĩa là TT chạy trong chế độ kernel thực hiện... cái gì đó.  
Ví dụ, shell đọc đầu vào qua GHT và được mô tả như sau: Kernel thực hiện nhân  
danh TT shell, kiểm soát thao tác thiết bị đầu cuối, trả lại các kí tự nhận vào cho shell.  
Đến đây shell, chạy trong user mode, thông dịch xâu kí tự nhận được từ người dùng  
và thực hiện một số hành động mà có thể các hành động đó kích hoạt GHT khác dẫn  
tới TT shell lại trở vào kernel mode.  
· Trong môi trường đa người dùng như Unix, các thiết bị hoạt động trên cơ sở độc lập  
có ý nghĩa rất căn bản. Unix nhìn nhận các thiết bị như một tệp đặc biệt. Khi một t/b  
mới cần đưa vào hệ, người quản trị thực hiện thêm một liên kết cần thiết vào kernel.  
Liên kết này được biết như là phần mềm thiết bị (device driver) , đảm bảo rằng kernel  
và thiết bị được gắn lại theo cùng một phương thức mỗi khi t/b đuợc đưa vào phục vụ.  
Điểm mấu chốt để t/b là độc lập, liên quan tới khả năng tự thích nghi của kernel: Unix  
không có giới hạn số lượng của bất kì loạt t/b nào khi thích ứng vào hệ vì mỗi t/b  
được nhìn nhận độc lập qua liên kết riêng biệt với kernel.  
4.1. Ngắt và Ngoại lệ  
Unix cho phép các t/b như I/O, đồng hồ hệ thống ngắt CPU theo cách dị bộ. Khi chấp  
nhận ngắt, kernel sẽ bảo vệ bối cảnh (context) hiện tại của TT đang thực hiện, xác định lí do  
của ngắt, và phục vụ cho yêu cầu ngắt đó. Sau khi xử lí xong kernel khôi phục lại context của  
TT trước đó và tiếp tục thực hiện như không có gì đã xảy ra. Phần cứng thông thường có cơ  
chế để đặt các cấp độ ưu tiên và che các ngắt theo thứ tự mà ngắt được thao tác.  
Các trường hợp ngoại lệ là sự kiện không trông đợi gây ra bởi một TT, ví dụ truy nhập vào  
vùng địa chỉ cấm, thực hiện lệnh đặc quyền, phép chia cho zero... Các ngoại lệ này khác với  
14  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
ngắt bởi chúng phát sinh do các sự kiện bên ngoài một TT. Ngoại lệ xảy ra ở giữa chừng đang  
thực hiện một lệnh, và hệ thống sẽ tái khởi động lại lệnh sau khi đã thao tác ngoại lệ. Ngắt  
được xem là xảy ra giữa hai lệnh và hệ thống chạy lệnh tiếp theo sau xử lí ngắt. Unix dùng  
cùng một cơ chế để thao tác ngắt cũng như thao tác các ngoại lệ.  
4.2. Các mức độ thực hiện xử lí  
Đôi khi kernel phải ngăn chặn sự xuất hiện của ngắt trong lúc thực hiện những hoạt  
động có tính chất đặc biệt mà ngắt có thể làm hỏng dữ liệu hay rối loạn các con trỏ. Các máy  
tính thường có một số lệnh đặc biệt để làm công việc này gọi là đặt các mức độ xử lí theo  
mức, có thể che các ngắt mức thấp và cho phép ngắt mức cao.  
4.3. Quản lí bộ nhớ  
Kernel thường trú trong bộ nhớ chính và thực hiện TT hiện thời (hay ít ra là một phần  
của TT đó). Khi compiler dịch một chương trình, nó tạo ra tập các địa chỉ của chương trình  
đó cho các biến, cấu trúc dữ liệu, địa chỉ của lệnh... Compiler phát sinh ra địa chỉ cho một  
máy ảo, như thể không có chương trình nào khác sẽ được thực hiện đồng thời trên máy vật lí.  
Khi một chương trình chạy trong máy tính, kernel sẽ cấp cho trình một không gian địa chỉ  
trong bộ nhớ vật lí, nhưng không gian địa chỉ ảo này không nhất thiết phải đồng nhất với địa  
chỉ vật lí. Kernel phối hợp với phần cứng để ánh xạ từ địa chỉ ảo vào địa chỉ vật lí. Cách ánh  
xạ phụ thuộc vào đặc thù của phần cứng và các phần của Unix sẽ thích ứng theo. Ví dụ loại  
máy hỗ trợ theo trang (paging) hay theo hoán đổi (swapping), kernel có các hàm cơ sở tương  
tự cho mỗi loại cấu hình.  
5. Nhân hệ điều hành (kernel)  
Phần này sẽ giới thiệu tổng quát về nhân (kernel) của Unix theo cách nhìn kiến trúc  
với các khái niệm cơ bản, hỗ trợ cho các phần sau.  
5.1. Kiến trúc của hệ điều hành unix  
15  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
Trên Unix, hệ thống tệp (File SystemfiFS) có chỗ để cư trú và Tiến trình (TT-Proccess) có  
cuộc đời của nó. Tệp (File) và TT chính là hai khái niệm trung tâm trong mô hình của HĐH  
Unix. Hình sau đây là sơ đồ khối của Unix, cho thấy các modul và mối quan hệ giữa các  
modul đó. Phía trái là hệ thống tệp (FS) và bên phải là hệ thống kiểm soát TT (procces  
control subsystem), đây là hai thành phần cơ bản của Unix. Sơ đồ cho một cách nhìn logic về  
kernel, cho dù trong thực tế có thể có những khác biệt về chi tiết.  
Mô hình chỉ ra ba mức: người dùng (user level), nhân (kernel level) và phần cứng  
(hardware level). GHT và Thư viện (Lib) tạo ra ghép nối giữa chương trình của người dùng  
(user programs), còn gọi là chương trình ứng dụng, và kernel. GHT tương tự các hàm gọi  
trong C, và Lib ánh xạ các hàm gọi tới các hàm cơ sở (primitive) cần thiết để đi vào kernel.  
Các chương trình hợp ngữ (assembly language) có thể kích hoạt GHT trực tiếp không cần  
dùng thư viện Lib. Các chuơng trình thường xuyên dùng các chức năng chuẩn, ví dụ I/O của  
Lib, để tạo ra cách dùng tinh xảo khi GHT, và các hàm của Lib sẽ được liên kết vào chương  
trình vào thời điểm dịch và là bộ phận của chương trình ứng dụng. GHT chia ra thành các tập  
16  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
hợp tương tác với file subsystem và với process control subsystem.  
File subsystem trong hình thực hiện các chức năng quản lí tệp: cấp phát vùng nhớ cho  
tệp, quản lí vùng trống (trong bộ nhớ, trên đĩa), kiểm soát truy nhập tệp, tìm dữ liệu cho users.  
TT tương tác với File subsystem qua một tập xác định các GHT, chẳng hạn open để mở tệp,  
close, read, write thao tác các kí tự của tệp, stat để tìm các thuộc tính tệp, chown thay đổi chủ  
sở hữu tệp, chmod thay đổi phép truy nhập.  
File subsystem truy nhập dữ liệu bằng cơ chế đệm (buferring), điều chỉnh thông lượng  
dữ liệu giữa kernel và các t/b nhớ thứ cấp, tương tác với phần điều khiển (drivers) I/O để khởi  
động quá trình trao đổi dữ liệu. Các drivers này chính là các module của kernel, kiểm soát các  
t/b ngoại vi của hệ thống. Các t/b ngoại vi gồm loại truy nhập ngẫu nhiên như t/b khối (đĩa),  
hay liên tục (raw hay character device) như băng từ (loại này không qua cơ chế đệm).  
Procces control subsystem thực hiện chức năng điều khiển đồng bộ các TT, liên lạc  
giữa các TT, lập biểu đưa một TT vào thực hiện và quản lí bộ nhớ. Procces control subsystem  
và File subsystem tác động lẫn nhau khi nạp một tệp thực thi (executable) vào bộ nhớ để thực  
hiện.  
Một số trong GHT để kiểm soát TT bao gồm: fork (tạo TT mới), exec (phủ mã của  
chương trình kích hoạt lên vùng bộ nhớ của TT gọi exec đang chạy), exit (kết thúc tức thì việc  
thực hiện một TT), wait (đồng bộ thực hiện TT này với exit hay với TT trước đó đã tạo ra TT  
nó), brk (điều chỉnh kích thước bộ nhớ đã cấp cho TT), signal (kiểm soát đáp ứng của TT  
trước sự kiện khác thường).  
Memory management module kiểm soát cấp phát bộ nhớ, điều chỉnh bộ nhớ qua  
swapping hay paging sao cho các ứng dụng có đủ bộ nhớ để thực hiện.  
Scheduler tuyển chọn một TT đưa vào thực hiện: cho các TT thuê CPU để thực hiện cho tới  
khi TT tự động trả lại CPU để đợi một tài nguyên hoặc kernel sẽ dừng thực hiện khi lượng  
thời gian cấp phát cho TT đã hết. Sau đó scheduler sẽ chọn TT có mức ưu tiên thích hợp nhất  
để cho chạy. TT trước đó sẽ chạy lại khi nó trở thành ưu tiên thích hợp nhất.  
Việc liên lạc giữa các TT có thể thực hiện qua vài phương thức từ đồng bộ tín hiệu của các  
sự kiện hay truyền thông điệp đồng bộ giữa các TT.  
Cuối cùng khối hardware control thực hiện thao tác, xử lí các ngắt (do đĩa, t/b đầu  
cuối...), và liên lạc với máy tính. Xử lí ngắt không thực hiện bởi một TT đặc biệt mà bởi các  
chức năng đặc biệt trong kernel được gọi tới (phát động) trong bối cảnh của TT hiện đang  
chạy.  
Chương II.  
Hệ thống tệp (file system)  
A. Tổng quan về Hệ thống tệp ảo (VFS)  
17  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
VFS được thiết kế để biểu diễn cách trình bày dữ liệu trên một thiết bị cứng (đĩa cứng  
chẳng hạn). Hầu hết các thiết bị cứng đều thông qua phần mềm điều khiển cùng kiểu (generic  
device driver) để liên kết vào máy tính. VFS, xa hơn, cho phép người quản trị “ghép” (mount)  
bất kì một hệ thống tệp logic trên bất kì thiết bị nào vào hệ thống. VFS trừu tượng hoá các  
chi tiết của cả hai thiết bị vật lí và hệ thống tệp logic, và cho phép TT người dùng truy nhập  
tệp dùng các giao tiếp thông thường mà không cần biết hệ thống tệp logic hay vật lí tồn tại ở  
đâu.  
Kiến trúc Hệ thống tệp ảo  
Các modules  
1. Cho mỗi thiết bị, có một trình điều khiển. Do nhiều thiết bị không tương thích nhau,  
nên có một số lượng lớn trình điều khiển cho mỗi loại.  
2. Modul ghép nối độc lập với thiết bị (Device Independent Interface) cung cấp mô tả  
thích hợp của tất cả các thiết bị.  
3. Đối với mỗi hệ thống tệp, có một hệ thống tệp logic tương ứng.  
4. Giao diện độc lập với hệ thống (system independent interface) cho mô tả phần cứng  
và mô tả sự độc lập của hệ thống tệp logic với các tài nguyên phần cứng.  
5. Giao diện gọi hệ thống (system call interface) cung cấp truy nhập có kiểm soát cho TT  
người dùng vào hệ thống tệp. VFS chỉ trao cho TT người dùng những chức năng nhất  
định.  
18  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
Biểu diễn dữ liệu  
Tất cả các tệp được biểu diễn bới các i-node. Mỗi cấu trúc i-node cho thông tin vị trí  
của các khối của tệp ở thiết bị vật lí nào. Nó chứa các con trỏ của các trình thủ tục trong  
module hệ thống tệp logic và các trình điều khiển các thao tác đọc/ghi. Bằng cách lưu các con  
trỏ các hàm chức năng theo cách này, các hệ thống tệp logic và các trình điều khiển tự ghi  
nhận với nhân HĐH làm cho nhân HĐH không bị phụ thuộc vào bất kì module cụ thể nào.  
Tính độc lập, dòng dữ liệu và hướng điều khiển  
Trình điều khiển của một thiết bị đặc trưng là một mô phỏng của thiết bị trong bộ nhớ  
(ramdisk): thiết bị thuê một không gian của bộ nhớ để đặc tả về thiết bị, xử lí đặc tả dó như  
thể xử lí chính thiết bị. Như vậy nó sử dụng quả lí bộ nhớ để hoàn tất các thao tác, như vậy sẽ  
có sự phụ thuộc, có luồng điều khiển, dòng dữ liệu giữa trình điều khiển thiết bị của hệ thống  
tệp và quản lí bộ nhớ.  
Một trong các hệ thống tệp logic là hệ thống tệp mạng chỉ với vai trò là khách thể  
(client của một máy khác). Hệ tệp này truy nhập các tệp trên một máy khác như thể đó là một  
phần của một máy logic. Để làm được điều này, một trong các module hệ thống tệp sử dụng  
hệ thống con mạng. Như vậy sẽ có sự phụ thuộc, dòng dữ liệu và luồng điều khiển giữa hai hệ  
thống con.  
Như đã nói, quản lí bộ nhớ sử dụng VFS để thực thi hoán đổi bộ nhớ-thiết bị, đồng  
thời sử dụng lập biểu TT để treo TT trong khi đợi thao tác vào/ra hoàn thành và cho chạy lại  
khi vào/ra đã kết thúc. Giao diện gọi hệ thống cho phép TT người dùng gọi vào VFS để cát  
hay tìm dữ liệu. Chổ khác biệt ở đây là không có cơ chế nào để người dùng đăng kí yêu cầu  
không tường minh, do vậy sẽ không có luồng diều khiển từ VFS tới TT người dùng.  
Các kiểu tệp và Hệ thống tệp  
1. tệp chính tắc (regular) (-): là tệp phổ biến cho lưu thông tin trong hệ thống.  
1. tệp thư mục (directory) (d): là tệp danh mục của các tệp;  
2. tệp đặc biệt (special file) (c,f): là một cơ chế sử dụng cho cá thao tác vào / ra (I/O),  
fifo. Các tệp loại này nằm ở thư mục /dev.  
3. liên kết (link) (l): là một hệ thống tạo ra một thư mỵc hay tệp nhìn thấy được trong  
nhiều phần của cây hệ thống tệp.  
4. socket (s): là loại tệp đặc biệt cho các truyền thông mạng của một tiến trình bên  
trong hệ thống, và được bảo vệ bởi qui tắc truy nhập tệp.  
5. ống (pipe) (p): là cơ chế để các tiến trình liên lạc với nhau.  
Và một số kiểu khác.  
Linux files  
• tên_tệp.bz2 file compressed with bzip2  
• tên_tệp.gz file compressed with gzip  
• tên_tệp.tar file archived with tar (short for tape archive), also known as a tar  
file  
• tên_tệp.tbz tarred and bzipped file  
• tên_tệp.tgz tarred and gzipped filetên_tệp  
•tên_tệ.pzip file compressed with ZIP compression  
19  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
___________________________________________________________________________  
File Formats  
. tên_tệp.au  
• tên_tệp.gif  
audio file  
GIF image file  
• tên_tệp.html HTML file  
• tên_tệp.jpg JPEG image file  
• tên_tệp.pdf an electronic image of a document; PDF stands for Portable Document  
Format  
• tên_tệp.png PNG image file (short for Portable Network Graphic)  
• tên_tệp.ps  
• tên_tệp.txt  
PostScript file; formatted for printing  
ASCII text file  
•tên_tệp.wav audio file  
• tên_tệp.xpm image file  
System Files  
. .conf a configuration file. Configuration files sometimes use the .cfg extension, as  
well. . .lock a lock file; determines whether a program or device is in use  
. .rpm a Red Hat Package Manager file used to install software  
Programming and Scripting Files  
. .c a C program language source code file  
. .cpp a C++ program language source code file  
. .h a C or C++ program language header file  
. .o a program object file  
. .pl a Perl script  
. .py a Python script  
. .so a library file  
. .sh a shell script  
. .tcl a TCL script  
Các cơ sơ dữ liệu hệ thống cho tệp  
Trong hệ thống tệp, tệp được biểu diễn bằng một inode. Inode cho biết mô tả của một tệp trên  
đĩa cùng các thông tin khác như sở hữu tệp, quyền truy nhập, thời gian truy nhập tệp. Khái  
niệm inode có ý nghĩa là chỉ số của một nút (index node, trong FS là một lá của cấu trúc  
cây) và dùng thông dụng trong tài liệu về Unix. Mỗi tệp có một inode duy nhất, nhưng mỗi  
inode lại có thể có nhiều tên (tệp) khác nhau. Các tên tệp này đều qui chiếu tới inode đó và  
mỗi tên như vậy gọi là một liên kết (link). Khi một TT truy nhập một tệp bằng tên, kernel sẽ  
phân tích tên trong đường dẫn, tìm tới thư mục chứa tệp, kiểm tra phép truy nhập, tìm inode  
và trao inode cho TT. Khi TT tạo tệp mới, kernel gán cho tệp một inode chưa sử dụng. Các  
inode lưu trong FS trên đĩa, nhưng khi thao tác tệp, kernel đọc từ đĩa và đưa vào một bảng gọi  
là in - core inode table (gọi tắt là Inode table) trong bộ nhớ hệ thống.  
Kernel còn có hai cấu trúc dữ liệu khác là bảng các tệp (File table) và bảng các mô tả  
tệp của người dùng (User file descriptor per procces table gọi tắt là File descriptor table).  
File table là cấu trúc tổng thể của kernel, còn File descriptor table cấp cho TT khi TT mở  
một tệp. Khi TT open hay creat tệp, kernel cấp một đầu vào trong mỗi bảng tương ứng với  
20  
________________________________________________________________________  
Huỳnh Thúc Cước, Viện CNTT, VKHCN VN, Hà nội  
Tải về để xem bản đầy đủ
pdf 213 trang myanh 24580 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiến trúc Unix/Linux", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_kien_truc_unixlinux.pdf