Sunday, November 29, 2009

Kiến trúc Unix/Linux 3

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
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 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)
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.



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.
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.
  2. tệp thư mục (directory) (d): là tệp danh mục của các tệp;
  3. 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.
  4. 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.
  5. 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.
  6. ống (pipe) (p): là cơ chế để các tiến trình liên lạc với nhau.
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 file tên_tệp
  • tên_tệ.pzip: file compressed with ZIP compression
File Formats
  • tên_tệp.au: audio file
  • tên_tệp.gif: 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: PostScript file; formatted for printing
  • tên_tệp.txt: 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 tệp đó. Các thông tin có trong các đầu vào ở ba bảng sẽ duy trì trạng thái của tệp cũng như khả năng user truy nhập tới tệp:
  • File table theo dõi quyền truy nhập, /đọc/ghi byte tiếp theo trong tệp qua con trỏ tệp byte offset, số đếm qui chiếu cho biết tổng số các TT truy nhập tệp, con trỏ trỏ vào inode table;
  • File descriptor table cho biết tất cả các tệp một TT đã mở. Hình sau cho thấy mối quan hệ giữa các bảng nói trên: kernel trả lại mô tả tệp-file descriptor, chỉ số trỏ tới một đầu vào của File descriptor table, của mỗi tệp khi TT GHT open và creat. Khi thực hiện GHT read hay write, kernel dùng file descriptor để vào File descriptor table, lấy con trỏ tìm tới File table, rồi từ đó theo con trỏ trong File table truy nhập vào Inode table. Từ inode sẽ có các thông tin cần thiết để truy nhập dữ liệu của tệp.
  • Inode table là bảng của kernel, chứa các inode được đọc từ đĩa. Mỗi inode khi được đọc vào bộ nhớ sẽ được cấp một đầu vào trong bảng, mỗi đầu vào đó cho một mảng dữ liệu đặc tả về một inode đĩa (xem định nghĩa về inode).
Với ba cấu trúc dữ liệu hệ thống trên kernel có đủ các mức độ khác nhau để thực hiện quản lí và các thao tác chia sẻ tệp. Tệp trong Unix được để trên thiết bị khối (đĩa, băng từ). Máy tính có thể có nhiều đĩa, mỗi đĩa có thể có một hay vài phân hoạch, mỗi phân hoạch tạo thành một hệ thống tệp (File systemfiFS). Phân hoạch một đĩa thành nhiều phần tạo điều kiện dể dàng cho việc kiểm soát dữ liệu, vì kernel xử lí ở mức logic với các FS chứ không phải với bản thân thiết bị. Mỗi một phân hoạch là một thiết bị logic và nhận biết nó bằng số của t/b.



Ví dụ: SCO Unix: hd0a: hd chỉ hard disk, 0 chỉ đĩa IDE primary, a chỉ phân hoạch thứ nhất.
Linux: hda1: hd chỉ hard disk, a chỉ đĩa IDE primary, 1 chỉ phân hoạch thứ nhất. (Trên PC, BIOS cho phép tạo tối da 4 phân hoạch chính (primary partions), các phân hoạch khác sẽ là phần mở rộng bên trong một phân hoạch chính đó). Do vậy ta có: hda6 sẽ là phân hoạch mở rộng của một phân hoạch chính nào đó một khi đã sử dụng hết 4 phân hoạch chính. Muốn biết cụ thể chỉ có thể ghi nhận lại trong quá trình cài đặt khi tạo các phân hoạch đĩa.
Qui ước chung: xxyN ,

trong đó: xx kiểu thiết bị (major number), y số hiệu của t/b (miror number), N số của phân hoạch trên t/b, ví dụ trên máy tính các nhân (PC):
  • hd = loại IDE: hda=IDE Primary 1, hda1, hda2 phân hoạch 1 và 2 của Primary IDE; hdb=IDE Secondary 1, hdb1, hdb2, hdb3; hdc=IDE Primary 2; hdd=IDE Secondary 2
  • sb = loại SCSI, sba1, sba2, …
Việc biến đổi giữa địa chỉ của thiết bị logic (magic number của FS) và địa chỉ của thiết bị vật lí (ổ đĩa) được thực hiện bởi bộ điều khiển đĩa (disk driver). Sách dùng khái niệm thiết bị là để chỉ tới thiết bị logic, trừ khi có diễn đạt cụ thể khác.
FS chứa một chuỗi các khối logic có độ lớn 512 bytes hay bội số của 512 tuỳ hệ và là đồng nhất bên trong mỗi hệ, nhưng có thể khác nhau khi áp dụng trên mỗi hệ cụ thể. Độ lớn này có ảnh hưởng nhất định về thời gian truy nhập cũng như hiệu quả sử dụng dung lượng đĩa. Sách đề cập tới “khối” có nghĩa một khối logic đĩa (logical block) với kích thước là 1 K bytes. FS có sắp xếp hình thức như sau: Ví dụ đĩa có 3 phân họach, mỗi phân hoạch là 1 FS:



Linux ext2 FS:
  • Boot block, phần đầu tiên của FS đĩa, là sector đầu tiên chứa mã bootstrap được đọc vào máy và chạy để nạp HĐH.
  • Superblock, mô tả tình trạng của FS: độ lớn, chứa được bao nhiêu tệp (inode), không gian còn trống (block) của đĩa để chứa nội dung tệp tìm thấy ở đâu, cũng như các thông tin khác.

    Super block có các trường sau đây:
    • kích thước của FS,
    • tổng số các block còn chưa cấp phát cho tệp (free block) trong FS.
    • danh sách các free block sẵn có trên FS (xem thêm phần cấp phát block đĩa),
    • chỉ số của free block tiếp theo trong danh sách free block.
    • kích thước của danh sách inode,
    • tổng số các inode chưa cấp phát (free inode) trong FS,
    • danh sách free inode trong FS,
    • chỉ số của free inode tiếp theo trong danh sách free inode,
    • các trường khoá (lock) cho free block và các danh sách free inode,
    • cờ (flag) cho biết super block đã có thay đổi.
Phần tiếp theo sẽ nói đến cách sử dụng các trường, các chỉ số và khóa. Kernel sẽ thường xuyên cập nhật super block một khi có sự thay đổi sao cho nó luôn nhất quán với data trong hệ thống.
  • Inode List, danh cách các inode trong FS. Người quản trị xác định kích thước khi làm cấu hình (cài đặt) hệ thống. Kernel qui chiếu các inode bằng chỉ số (index) trong inode list. Có một inode gọi là root inode trong mỗi FS: là inode khởi đầu để vào được FS sau khi thực hiện GHT phép ghép (mount) FS đó vào cây thư mục gốc.
  • Data blocks, vùng chứa nội dung (dữ liệu) của tệp và dữ liệu quản trị hệ thống (là các block của tệp thư mục, các block nội dung của một inode). Một khối khi đã cấp cho mỗi tệp thì khối đó chỉ thuộc tệp đó mà thôi.

No comments:

Post a Comment