4. H4. Hệệ đi

điềều hu hàành Linux nh Linux

21.1

HHệệ đi

điềều hu hàành Linux nh Linux

n Lịch sử Linux

n Nguyên tắc thiết kế

n Lập trình Kernel Modules

n Quản lý quá trình

n Định thời

n Quản lý bộ nhớ

n Hệ thống file

n Hệ thống xuất nhập (I/O)

n Truyền thông liên quá trình

n Cấu trúc mạng

n Bảo mật

21.2

MMụục tiêu c tiêu

n Khảo sát lịch sử hệ điều hành Unix - nguồn gốc của Linux và một

số nguyên tắc bắt buộc để thiết kế Linux

n Nghiên cứu mô hình xử lý Linux bằng việc minh họa cách định thời

các quá trình và cung cấp truyền thông liên quá trình.

n Xem xét cách quản lý bộ nhớ trong Linux

n Tìm hiểu xem Linux hiện thực hệ thống file và quản lý các thiết bị

xuât nhập như thế nào

21.3

LLịịch sch sửử n Linux là một hệ điều hành tiên tiến và miễn phí dựa trên tiêu chuẩn

Unix

n Ban đầu Linux phát triển nhỏ. Đến năm 1991 Linus Torvalds kết

hợp thêm kernel(nhân) với mục đích chính là có khả năng thích hợp với Unix

n Lịch sử cho thấy Linux là sự cộng tác của nhiều người sử dụng trên

toàn thế giới, hầu hết họ trao đổi đều qua internet

n Linux được thiết kế để có thể chạy hiệu quả trên những phần cứng máy tính thông thường, hơn nữa Linux còn có thể chạy trên nhiều nền phần cứng khác.

n Nòng cốt của hệ điều hành Linux kernel là toàn bộ nguyên bản,

nhưng nó có thể chạy nhiều phần mềm Unix miễn phí, đó là kết quả của việc tích hợp code để có thể thích hợp Unix.

n Thêm vào đó, thay đổi Linux bao gồm cung cấp thêm kernel, các

ứng dụng, và các công cụ quản lý

21.4

The Linux Kernel The Linux Kernel

n Phiên bản 0.01 (5-1991) không có mạng, chỉ có thể chạy trên 80386- tương thích với vi xử lý intel và trên phần cứng máy tính, đặc biệt bị giới hạn trong giao tiếp device-drive, và chỉ cung cấp cho hệ thống file Minix

l Hỗ trợ thêm giao thức mạng TCP/IP theo chuẩn UNIX

l Các chương trình mạng được hỗ trợ giao tiếp socket tương

n Linux 1.0 (3-1994) có thêm một số tính năng mới:

thích BCD

l Hỗ trợ giao tiếp Device-driver để có thể chạy IP trong mạng

Ethernet

l Tăng cường hệ thống file

l Hỗ trợ cách sắp xếp cho điều khiển SCSI giúp tăng hiệu

quả truy xuất đĩa.

l Hỗ trợ thêm phần cứng

n Phiên bản 1.2 (5-1995) là bản Linux kernel cho PC cuối cùng

21.5

Linux 2.0 Linux 2.0

l Hỗ trợ thêm cấu trúc phức tạp, bao gồm cồng Alpha 64-bit l Hỗ trợ cấu trúc đa vi xử lý.

n 6-1996, 2.0 thêm 2 tính năng mới:

l Cải thiện mã quản lý bộ nhớ l Cải thiện hiệu suất TCP/IP l Hỗ trợ vào nhân(kernel) sơ cấp các luồng, và tự động nạp các

n Các tính năng khác:

module theo yêu cầu l Giao diện cấu hình chuẩn

n Được dùng cho Motorola 68000-series vi xử lý, hệ thống Sun Sparc,

PC và hệ thống PowerMac

n 2.4 và 2.6 tăng thêm hỗ trợ SMP, thêm nhật ký trong hệ thống file, ưu

tiên kernel, hỗ trợ bộ nhớ 64-bit

21.6

HHệệ ththốống Linux ng Linux

n Linux dùng nhiều công cụ giống như: hệ thống Berkeley’s BSD,hệ

thống MIT’s X Window, và dự án Free Software Foundation's GNU

n Một thư viện nhỏ được bắt đầu bằng dự án GNU, và cộng đồng

Linux đã dần dần cải thiện.

n Mạng Linux-công cụ quản lý được bắt nguồn từ mã 4.3BSD;

Nguồn gốc của mã BSD gần đây như Free BSD đã mượn lại từ bảng mã này của Linux

n Các hệ thống Linux được duy trì bởi một mạng lưới lỏng lẻo của

các cộng tác trên Internet, với một số lượng nhỏ của các trang web công cộng hoạt động với tiêu chuẩn thực tế

21.7

Linux Distributions Linux Distributions

n Tập hợp các gói trước khi biên dịch hay distributions, bao gồm hệ thống Linux cơ bản, cài đặt hệ thống, quản lý tiện ích và cơ chế sẵn sàng để cài đặt các gói của công cụ tiện ích

n Các phân phối đầu tiên quản lý các gói bằng cách đơn giản là cung cấp phương tiện để bung tất cả các tập tin vào nơi thích hợp; các phân phối sau này bao gồm các gói quản lý nâng cao

l Red Hat và Debian là các nhà phân phối phổ biến bao gồm các

n Mỗi nhà phân phối bao gồm SLS và Slackware

nguồn thương mại và không thương mại

n Gói định dạng file RPM cho phép tích hợp giữa các nhà phân phối

Linux

21.8

GiGiấấy phy phéép Linux p Linux

n Nhân Linux được phân phát bởi GNU General Public License (GPL), các điều khoản trong đó được đặt ra bởi Free Software Foundation

n Bất cứ ai sử dụng Linux, hay tạo ra các ứng dụng của Linux, có thể làm mất nguồn gốc của các sản phẩm độc quyền; phần mềm phát hành dưới GPL có thể không được cấp phát lại như là sản phẩm binary-only

21.9

Nguyên tắắc thi Nguyên t

c thiếết kt kếế

n Linux là một hệ thống đa tác vụ, đa người dùng với tập hợp các

công cụ thích hợp với Unix

n Các hệ thống tập tin của nó tôn trọng triệt để UNIX semantic truyền thống , và nó thực hiện đầy đủ các tiêu chuẩn mô hình mạng UNIX

n Mục tiêu thiết kế chính là tốc độ, hiệu quả và tiêu chuẩn hóa

n Linux được thiết kế để có thể tuân thủ với các tài liệu liên quan

posix ; ít nhất có hai phân phối Linux đã chính thức được cấp giấy chứng nhận posix. Giao diện lập trình Linux tuân thủ SVR4 UNIX semantics, hơn là để hoạt động BSD.

21.10

CCáác thc thàành ph

nh phầần hn hệệ ththốống Linux ng Linux

21.11

CCáác thc thàành ph

nh phầần hn hệệ ththốống Linux(Cont.) ng Linux(Cont.)

n Giống như hiện thực UNIX, code tạo thành Linux gồm có 3 phần chính; quan trọng nhất là sự khác biệt giữa nhân(kernel) và các phần khác

n Kernel có trách nhiệm duy trì những phần trừu tượng quan trọng

của hệ điều hành.

l Kernel code thực thi trong chế độ kernel với khả năng truy xuất

đến tất cả các tài nguyên vật lý của máy tính

l Tất cả các mã kernel và cấu trúc giữ liệu được giữ trong cùng

một không gian địa chỉ đơn

21.12

CCáác thc thàành ph

nh phầần hn hệệ ththốống Linux(Cont.) ng Linux(Cont.)

n Hệ thống thư viện định nghĩa một tập hợp chuẩn các hàm,thông

qua các hàm này các ứng dụng có thể tương tác với nhân, và hiện thực một số chức năng của hệ điều hành, mà không cần ưu tiên qua mã kernel.

n system utilities thực thi các thao tác quản lý chuyên dụng cá nhân

21.13

Kernel modules Kernel modules

n Những phần của mã kernel có thể được biên dịch, load, và unload không phụ thuộc vào những phần còn lại của kernel. n Kernel module có thể thực thi trình điều khiển thiết bị, file hệ

thống, hay một giao thức mạng.

n Giao diện module cho phép người sử dụng thứ 3 viết và phân

phát trong phạm vi giới hạn của họ,có thêm trình điều khiển thiết bị hay file hệ thống –chúng không được phân phối dưới dạng GPL

n Kernel modules cho phép Linux được thiết lập theo một tiêu

chuẩn,nhân nhỏ nhất mà không cần xây dựng thêm bất kỳ trình điều khiển thiết bị nào.

l Quản lý module l Điều khiển đăng ký l Giải quyết mâu thuẫn

n Linux module hỗ trợ 3 thành phần:

21.14

QuQuảản lý Module n lý Module

n Hỗ trợ việc nạp module vào bộ nhớ, cho phép chúng giao tiếp với

các phần còn lại của kernel

l Quản lý các đoạn mã module trong bộ nhớ nhân

l Những module được phép tham khảo và trình bày tượng trưng

n Quá trình nạp module được chia thành 2 phần khác nhau:

n Module requestor quản lý các yêu cầu nạp dữ liệu; nó cũng liên tục hỏi nhân xem các module động đã được nạp vẫn còn sử dụng không, và khi không cần nữa module này sẽ được xóa

21.15

Driver Registration Driver Registration

đăng ký bộộ phphậận đin điềều khi ((đăng ký b

u khiểển)n)

n Cho phép module nói với phần còn lại của nhân rằng có một drive

mới vừa được thêm vào

n Kernel duy trì một bảng động có lưu tất cả các driver, và cung cấp một tập hợp các routine cho phép các driver này thêm vào hay gõ bỏ ra khỏi bảng bất cứ lúc nào.

l Trình quản lý thiết bị

l Hệ thống file

l Giao thức mạng

l Định dạng nhị phân

n Bảng đăng ký bao gồm những phần sau:

21.16

GiGiảải quy

i quyếết mâu thu

t mâu thuẫẫnn

n Là một kỹ thuật cho phép các tài nguyên khác nhau dành riêng các tài nguyên trong phần cứng và bảo vệ các tài nguyên này khỏi các tình huống bất ngờ được dùng từ các driver khác

l Ngăn ngừa các va chạm khi các module truy xuất tài nguyên

n Module giải quyết mâu thuẫn có mục đích:

của phần cứng.

l Ngăn ngừa sự quấy rối của các trình quản lý thiết bị đến

autoprobes

l Giải quyết các mâu thuẫn khi các driver cố gắng truy xuất vào

cùng một phần cứng

21.17

QuQuảản lý ti

n lý tiếến trn trììnhnh

n Quản lý tiến trình Unix chia việc tạo quá trình và việc chạy các quá

trình mới thành hai thao tác độc lập.

l Câu lệnh fork để tạo quá trình mới

l Một chương trình được chạy sau lời gọi: execve

n Trong UNIX, một chương trình bao gồm tất cả các thông tin phải duy trì t track để chứa các bối cảnh của một hiện thực đơn trong quá trình đơn

n Trong Linux, đặc tính của quá trình chia thành 3 nhóm: đặc tính

của quá trình, môi trường, và bối cảnh.

21.18

ĐĐồồng nh

ng nhấất tit tiếến trn trììnhnh

n

ID của quá trình (PID). Định danh đơn cho quá trình; dùng cho những quá trình đặc biệt trong hệ điều hành khi một quá trình gọi một system call để signal, modify, hay wait một quá trình khác

n Credentials. Mỗi quá trình phải có một ID liên hệ với người sử dụng và một hay nhiều nhóm ID có thể quyết định quyền truy xuất vào tài nguyên và file của hệ thống

n Personality. Trong những hệ thống Unix thì không thể tìm thấy

nhưng trong Linũ thì mỗi quá trình có một định danh liên kết cá nhân- mà nó có thể sửa các sematic của một số system call l Được sử dụng đầu tiên bởi các thư viện mô phỏng để yêu cầu các system call này thích hợp với một số tính năng của Unix

21.19

Môi trườờng ti Môi trư

ng tiếến trn trììnhnh

n Môi trường tiến trình được thừa kế từ các tiến trình cha mẹ, và được

soạn thảo thành 2 vector kết thúc bằng 0:

l The argument vector lists the command-line arguments used to

invoke the running program; conventionally starts with the name of the program itself

l The environment vector is a list of “NAME=VALUE” pairs that associates named environment variables with arbitrary textual values

n Qua các biến môi trường trong số các quá trình và các biến được thừa kế của tiến trình con, việc chuyển thông tin đến các phần của phần mềm hệ thống user-mode trở nên linh động

n Biến môi trường cung cấp cơ chế tùy định của hệ điều hành. Cơ chế này được tạo ra ở mỗi quá trình, chứ không phải là định cầu hình hệ thống cho toàn bộ

21.20

NgNgữữ ccảảnh qu

nh quáá trtrììnhnh

n Trạng thái-thay đổi liên tục của một quá trình đang chạy tại một

điểm thời gian

n Định thời ngữ cảnh là một phần quan trọng của ngữ cảnh quá trình; đó là thông tin mà bộ định thời cần có để tạm ngưng hay khởi động lại quá trình

n Kernel duy trì thông tin accounting về tài nguyên hiện hành được sử dụng bởi mỗi quá trình, tổng số tài nguyên được sử dụng bởi quá trình từ lúc bắt đầu đến khi kết thúc

l Khi tạo một file xuất nhập bằng system call, quá trình đề cập

n Bảng file là một mảng các con trỏ đến cấu trúc file kernel

các file bởi địa chỉ của nó trong bảng

21.21

NgNgữữ ccảảnh qu

nh quáá trtrììnhnh

n Trong khi đó, bảng các tập tin liệt kê các file đang mở,

file-system context cung cấp yêu cầu để mở một file mới

l Những tập tin gốc hiện tại và đường dẫn mặc định được dùng

cho việc tìm kiếm file mới được chứa trong đó

n Signal-handler table định nghĩa các công việc trong không gian

địa chỉ quá trình được gọi khi có một tín hiệu đặc biệt đến

n Virtual-memory context mô tả tất cả nội dung của không gian địa

chỉ riêng nó

21.22

QuQuáá trtrìình vnh vàà luluồồngng

n Linux dùng các cách trình bày giống nhau về bản chất của các quá trình và luồng; một luồng đơn giản chỉ là một quá trình mới, mà xảy ra việc chia sẻ không gian địa chỉ với quá trình cha của nó

n Sự phân biệt chỉ được tạo ra khi có một luồng mới tạo ra bằng việc

gọi system call clone

l

fork tạo ra một quá trình con, có khả năng sở hữu toàn bộ quá trình ngữ cảnh của nó

l clone tạo ra một quá trình mới giống như chính nó, nhưng

được cho phép để chia sẻ cấu trúc dữ liệu của quá trình cha

n Sử dụng clone để tạo một ứng dụng fine-grained điều khiển chính

xác những gì được chia sẻ giữa hai luồng

21.23

ĐĐịịnh th

nh thờờii

n Nhiệm vụ là chỉ định thời gian CPU cho các tác vụ khác nhau trong

phạm vi hệ điều hành

n Trong khi định thời thường được xem như là việc chạy và ngắt các quá trình. Trong Linux, việc chạy các chươn trình cũng bao gồm các tác vụ kernel khác nhau

n Việc chạy các tác vụ kernel bao gồm cả các tác vụ yêu cầu bởi các quá trình đang chạy và các tác vụ thực thi thay mặt cho một thiết bị điều khiển

l Sắp xếp thời gian thực

l Giá trị đẹp

n Như ví dụ 2.5, giải thuật định thời mới – ưu tiên, độ ưu tiên cơ sở

21.24

Qua hQua hệệ gigiữữa đa độộ ưu tiên v

ưu tiên vàà đ độộ ddàài phân th

i phân thờời i

giangian

21.25

c ưu tiên Danh sáách cch cáác đc địịa cha chỉỉ đ đưượợc ưu tiên Danh s

21.26

ĐĐồồng bng bộộ hhóóa Kernel a Kernel

n Một yêu cầu cho việc thực thi chế độ nhân có thể xảy ra theo hai

cách:

l Khi một chương trình đang chạy có thể yêu cầu một dịch vụ

của hệ điều hành, hoặc rõ ràng hơn thì qua system call. Ví dụ: khi lỗi trang xảy ra.

l Một trình điều khiển có thể chuyển các ngắt, các ngắt này làm

cho CPU bắt đầu thực thi từng ngắt

n Đồng bộ nhân yêu cầu các framework để cho phép các vùng tranh chấp của nhân chạy mà không ngắt các vùng tranh chấp khác

21.27

ĐĐồồng bng bộộ hhóóa Kernel a Kernel

n Linux dùng 2 kỹ thuật để bảo vệ vùng tranh chấp:

1. Mã kernel bình thường thì nonpreemptible (until 2.4)

– khi có một ngắt xảy ra trong khi chương trình đang thực thi một tác vụ của hệ thống nhân, cờ need_resched của kernel được bật lên để bộ định thời sẽ chạy system call đến khi hoàn thành và điều khiển trả về chế độ người sử dụng

2. Kỹ thuật thứ hai là vùng tranh chấp xảy ra trong service routine

– bằng cách dùng ngắt vi xử lý để điều khiển không cho ngắt xảy ra trong vùng tranh chấp, kernel đảm bảo rằng nó có thể xử lý mà không có một lỗi nào do các cấu trúc dữ liệu chia xẻ truy suất cùng lúc

21.28

ĐĐồồng bng bộộ hhóóa Kernel a Kernel

n Để tránh những bất lợi hiệu suất , các nhân Linux dùng những cấu trúc đồng bộ, để cho phép những vùng tranh chấp dài chạy mà không vô hiệu các ngắt cho độ dài của tất cả các vùng tranh chấp

n

Interrupt service routines được chia thành a top half and a bottom half.

l Top half là interrupt service routine bình thường và chạy mà

không cho phép ngắt lặp lại

l Bottom half chạy cho phép tất cả các ngắt, bằng một bộ dịnh thời nhỏ để chắc rằng các bottom half không bao giờ ngắt chính nó

l Kiến trúc này được hoàn thành bởi một cơ chế để vô hiệu hoá lựa chọn các bottom half trong khi đang thực thi bình thường, mã nhân foreground

21.29

CCáác Cc Cấấp Đp Độộ BBảảo Vo Vệệ NgNgắắtt

n Mỗi mức có thể bị ngắt bởi mã thực thi cấp cao, nhưng không

bao giờ bị ngắt bởi mã thực thi cùng cấp hay thấp hơn n Tiến trình người dùng luôn có thể bị chiếm ưu tiên bởi tiến

trình khác khi một time-sharing scheduling interrupt xuất hiện

21.30

ĐĐịịnh Th

nh Thờời Ti

i Tiếến Trn Trììnhnh

l Một giải thuật time-sharing để định thời ưu tiên cân bằng giữa

n Linux dùng hai giải thuật định thời tiến trình:

nhiều tiến trình

l Một giải thuật real-time cho các tác vụ mà ở đó mức ưu tiên tuyệt

đối quan trọng hơn sự cân bằng

n Một lớp định thời tiến trình sẽ xác định giải thuật nào được áp dụng n Với các tiến trình time-sharing, Linux dùng một giải thuật có ưu tiên

dựa trên credit l Luật crediting

credits

priority

: =

+

credits 2

chia các nhân tố trong cả lịch sử của tiến trình và mức ưu tiên của nó

l Hệ thống crediting này tự động dánh ưu tiên các tiến trình tương

tác hay I/O-bound

21.31

ĐĐịịnh Th

nh Thờời Ti

i Tiếến Trn Trìình (tt) nh (tt)

l Scheduler chạy tiến trình có mức ưu tiên cao nhất; với các tiến trình có cùng mức ưu tiên, nó chạy tiến trình đã chờ lâu nhất

l Các tiến trình FIFO tiếp tục chạy đến khi chúng thoát hay bị

n Linux hiện thực các lớp định thời FIFO và round-robin real-time trong cả hai trường hợp, mỗi tiến trình có một mức ưu tiên ngoài lớp định thời của nó

chặn lại

l Một tiến trình round-robin sẽ bị chiếm ưu tiên sau một khoảng và chuyển vào cuối hàng đợi định thời, do đó các tiến trình round-robing có cùng mức ưu tiên tự động chia sẻ thời gian với nhau

21.32

ThThựực Hic Hiệện Đa Ti

n Đa Tiếến Trn Trìình Đnh Đồồng Bng Bộộ

n Linux 2.0 là Linux kernel đầu tiên hỗ trợ thiết bị phần cứng SMP; các tiến trình hay tuyến có thể thực thi song song trên có bộ xử lý riêng biệt

n Để duy trì các yêu cầu đồng bộ hóa không ưu tiên của kernel, SMP đòi hỏi một hạn chế, thông qua một kernel spinlock đơn, mà mỗi lần chỉ có một bộ xử lý có thể thực thi mã kernel-mode

21.33

QuQuảản Lý B

n Lý Bộộ NhNhớớ

n Hệ thống quản lý bộ nhớ vật lý của Linux xử lý việc cấp phát và

giải phóng các trang, nhóm trang và các block bộ nhớ

n Có các cơ chế phụ để xử lý bộ nhớ ảo, bộ nhớ được map vào

không gian địa chỉ của các tiến trình đang hoạt động

n Chia bộ nhớ thành 3 miền (zones) khác nhau về đặc tính

21.34

Quan Hệệ gigiữữa ca cáác Mi Quan H

c Miềền vn vàà Đ Địịa Cha Chỉỉ BBộộ NhNhớớ

trong 80x86 trong 80x86

21.35

Chia Bộộ NhNhớớ ththàành mnh mộột Buddy Heap t Buddy Heap Chia B

21.36

QuQuảản Lý B

n Lý Bộộ NhNhớớ VVậật Lýt Lý

n Page allocator cấp phát và giải phóng tất cả trang vật lý; nó có thể cấp phát một khoảng các trang kề vật lý với nhau nếu có yêu cầu n Allocator dùng một giải thuật buddy-heap để lưu dấu các trang vật lý

có thể dùng được l Mỗi region (vùng) nhớ có thể cấp phát được ghép cặp với vùng

kế bên

l Mỗi khi hai region bạn bè đều được giải phóng chúng kết hợp

để tạo một region lớn hơn

l Nếu một yêu cầu bộ nhớ nhỏ không được đáp ứng bằng cách

cấp phát một region nhớ nhỏ còn trống, thì một region trống lớn hơn sẽ được chia ra làm hai để đáp ứng yêu cầu

n Việc cấp phát bộ nhớ trong Linux kernel xuất hiện cả tĩnh (drivers dự trữ một khu vực bộ nhớ liên tiếp trong lúc khởi động hệ thống) hay động (thông qua page allocator)

n Cũng sử dụng slab allocator cho bộ nhớ kernel

21.37

21.07 21.07

21.38

BBộộ NhNhớớ ẢẢoo

n Hệ thống VM duy trì không gian bộ nhớ thấy được cho mỗi tiến

trình: nó tạo các trang bộ nhớ ảo theo yêu cầu, và quản lý việc tải các trang từ đĩa hoặc swap trở ra đĩa khi cần

n VM manager giữ hai quan điểm riêng biệt về một không gian địa

chỉ bộ nhớ của tiến trình :

l Một quan điểm luận lý mô tả các chỉ thị liên quan đến việc bố

trí không gian địa chỉ

(cid:23) Không gian bộ nhớ gồm một bộ các vùng nonoverlap, mỗi

cái biểu diễn một tập con không gian địa chỉ kế tiếp nhau và đồng chỉ trang (page-aligned)

l Một quan điểm vật lý về mỗi không gian địa chỉ được chứa

trong các bảng (table) trang phần cứng cho tiến trình

21.39

BBộộ NhNhớớ ẢẢo (tt) o (tt)

l Backing store, mô tả nguồn gốc các trang dành cho một

n Các region (vùng) bộ nhớ ảo có các đặc điểm dựa trên:

region; các regions thường được backed bởi một file hoặc không có gì hết (demand-zero memory)

l Phản ứng của region với việc ghi (page sharing hay copy-on-

write)

n Kernel tạo một không gian địa chỉ ảo mới

1. Khi một tiến trình chạy một chương trình mới bằng lời gọi hệ

thống exec

2. Trong lúc tạo một tiến trình mới bằng lời gọi hệ thống fork

21.40

BBộộ NhNhớớ ẢẢo (tt) o (tt)

n Khi thực thi một chương trình mới, tiến trình được cho một không gian địa chỉ ảo mới hoàn toàn rỗng; các thủ tục tải chương trình đưa các region bộ nhớ ảo đến trú ở không gian địa chỉ này

n Tạo một tiến trình mới với fork bao gồm việc tạo một bản sao đầy

đủ của không gian địa chỉ ảo của tiến trình đang có

l Kernel sao chép VMA descriptors của tiến trình cha, sau đó tạo

một tập hợp page table cho tiến trình con

l Page tables của tiến trình cha được sao chép trực tiếp vào con, với reference count của mỗi trang được che giấu được tăng lên

l Sau fork, tiến trình cha và con chia sẻ cùng những trang bộ

nhớ vật lý trong không gian địa chỉ của chúng

21.41

BBộộ NhNhớớ ẢẢo (tt) o (tt)

n Hệ thống VM paging di chuyển các trang bộ nhớ từ bộ nhớ chính

ngoài ra ngoài bộ nhớ khi bộ nhớ được cần cho thứ gì khác

l Giải thuật pageout-policy quyết định khi nào và trang nào được

n Hệ thống VM paging có thể được chia làm hai phần:

ghi ra ngoài đĩa

l Cơ chế thực sự thực hiện việc di chuyển, và page dữ liệu trở

lại vào bộ nhớ vật lý khi cần

21.42

BBộộ NhNhớớ ẢẢo (tt) o (tt)

n Linux kernel duy trì một vùng (region) không đổi không phụ thuộc kiến trúc gồm không gian địa chỉ ảo của mỗi tiến trình cho việc sử dụng bên trong nó

l Một area tĩnh chứa các page table references cho mỗi trang vật lý bộ nhớ sẵn dùng trong hệ thống, do đó có một sự chuyển đổi đơn giản từ địa chỉ vật lý sang ảo khi chạy mã kernel

l Reminder của phân đoạn dự trữ không được dự trữ cho một mục đích xác định nào; các page-table entry của nó có thể được thay đổi trỏ tới bất cứ khu vực (area) nào của bộ nhớ

n Khu vực (area) bộ nhớ ảo này gồm hai vùng (region) :

21.43

ThThựực Thi v

c Thi vàà TTảải Chương Tr

i Chương Trìình Ngư

nh Ngườời Di Dùùngng

n Linux duy trì một bản các hàm để tải chương trình; nó cho mỗi hàm

cơ hội để tải file được cho khi có một lời gọi hệ thống

n Việc đặng ký các thủ tục đa loader cho phép Linux hỗ trợ cả các

định dạng nhị phân ELF và a.out

l Chỉ khi một chương trình cố truy cập một trang cho trước thì

n Ban đầu, các trang binary-file được map vào bộ nhớ ảo

mới tạo ra một lỗi trang trong trang đang được tải vào bộ nhớ vật lý

n Một file định dạng nhị phân ELF chứa một header theo sau bởi vài

phân đoạn (section) page-aligned

l ELF loader làm việc bằng cách đọc header và map các phân

đoạn của file vào các region riêng biệc của bộ nhớ ảo

21.44

BBốố TrTríí BBộộ NhNhớớ cho Ch

cho Chương Tr

ương Trìình nh ELF ELF

21.45

Liên Kếết Tt Tĩĩnh vnh vàà Đ Độộngng Liên K

n Một chương trình có các hàm thư viện ghi trực tiếp trong file thực thi nhị phân của chương trình thì liên kết tĩnh (statically) với các thư viện của nó

n Điểm bất lợi duy nhất của liên kết tĩnh là mỗi chương trình tạo ra

phải sao chép chính xác các hàm thư viện giống nhau

n Liên kết động (dynamic) hiệu quả hơn về cả sử dụng bộ nhớ vật lý lẫn không gian đĩa vì nó tải các thư việc hệ thống vào bộ nhớ chỉ một lần

21.46

CCáác Hc Hệệ ThThốống File ng File

n Với người dùng, hệ thống file của Linux có vẻ như là một cây thư

mục có cấp bậc tuân theo UNIX semantics

n Bên trong, kernel giấu các chi tiết hiện thực và quản lý nhiều hệ

thống file khác nhau thông qua một lớp trừu tượng, đó là, hệ thống file ảo virtual file system (VFS)

n Linux VFS được thiết kế quanh các nguyên tắc hướng đối tượng

và gồm có hai thành phần :

l Một tập hợp các định nghĩa xác định một file object (được cho

phép) trông như thế nào

(cid:23) Các cấu trúc Inode-object và file-object biểu diễn các file

riêng biệc

(cid:23) file system object biểu diễn cả một hệ thống file

l Một lớp phần mềm để thao tác các đối tượng này

21.47

HHệệ ThThốống File Ext2fs c

ng File Ext2fs củủa Linux a Linux

n Ext2fs dùng một cơ chế tương tự của BSD Fast File System (ffs) cho

việc định vị các block dữ liệu tới một file xác định

n Khác biệt chính giữa ext2fs và ffs liên quan tới cách cấp phát đĩa của

chúng l Trong ffs, đĩa được cấp phát tới file theo block 8Kb, với các block được chia nhỏ thành các phân mảnh 1Kb để lưu trữ các file nhỏ hay các block được làm đầy một phần ở cuối file

l Ext2fs không dùng phân mảnh; nó thực hiện cấp phát với các

đơn vị nhỏ hơn (cid:23) Kích thước block mặc định trong ext2fs là 1Kb, mặc dù block

2Kb và 4Kb cũng được hỗ trợ

l Ext2fs dùng các cách cấp phát được thiết kế để đặt các block kề luận lý của một file vào các block kề vật lý trên đĩa, do đó nó có thể chấp nhận một yêu cầu I/O cho vài block đĩa như một thao tác đơn

21.48

Ext2fs cáác Cc Cáách Cch Cấấp Php Pháát Block t Block Ext2fs c

21.49

HHệệ ThThốống File Proc c

ng File Proc củủa Linux a Linux

n Hệ Thống file proc không lưu trữ dữ liệu, mà, nội dung của nó

được tính toán theo yêu cầu theo các yêu cầu file I/O người dùng

l Nó sử dụng inode number này để xác định thao tác nào cần thiết khi một người dùng cố đọc từ một file đặc biệt hay thực hiện tìm kiếm trong một inode thư mục đặc biệt

l Khi dữ liệu được đọc từ một trong những file này, proc thu

n proc phải hiện thực một cấu trúc thư mục, và nội dung file trong đó; sau đó nó phải xác định một inode number duy nhất và bền vững cho mỗi thư mục và file trong đó

thập thông tin thích hợp, định dạng nó thành văn bản và đặt nó vào buffer đọc của tiến trình yêu cầu

21.50

Output Input vàà Output Input v

n Hệ thống file hướng thiết bị của Linux truy cập kho lưu trữ đĩa qua

hai cache :

l Dữ liệu được cached trong page cache, được hợp nhất với hệ

thống bộ nhớ ảo

l Metadata được cached trong buffer cache, một cache riêng

biệt được ghi mục lục (index) bởi disk physical block

l block devices cho phép truy cập ngẫu nhiên vào các block dữ

n Linux chia tất cả thiết bị thành ba lớp:

liệu có kích thước cố định và hoàn toàn độc lập

l

character devices gồm hầu hết các thiết bị khác; chúng không cần hỗ trợ functionality của các file thông thường

l network devices được kết nối thông qua networking subsystem

của kernel

21.51

CCấấu Tru Trúúc Device

Driver Block c Device--Driver Block

21.52

Block Devices Block Devices

n Cung cấp giao diện chính đến tất cả thiết bị đĩa trong một hệ thống

l Hoạt động như một hồ chứa các buffers cho I/O tích cực

l Phục vụ như một cache cho I/O đã hoàn tất

n Block buffer cache thực hiện hai chức năng chính:

n Request manager quản lý việc đọc và ghi nội dung buffer từ và đến

một block device driver

21.53

Character Devices Character Devices

n Một device driver không cung cấp truy cập ngẫu nhiên vào các

block dữ liệu cố định

n Một character device driver phải đăng ký một tập hợp các hàm

hiện thực các thao tác file I/O khác nhau của driver

n Kernel hẩu như không thực hiện tiền xử lý một yêu cầu đọc hay ghi file đến một character device, mà đơn giản chuyển yêu cầu đến cho thiết bị

n Ngoại lệ chính của nguyên tắc này là tập hợp con đặc biệt gồm các

character device drivers thực hiện terminal devices, đã được kernel duy trì một giao diện chuẩn cho nó

21.54

Giao Tiếếp Liên Ti Giao Ti

p Liên Tiếến Trn Trììnhnh

n Như UNIX, Linux thông báo cho các tiến trình biết có một sự kiện

xuất hiện thông qua các tín hiệu

n Có một số lượng tín hiệu giới hạn, và chúng không thể mang thông tin: chỉ có sự kiện một tín hiệu xuất hiện là có giá trị với tiến trình

n Linux kernel không sử dụng các tín hiệu để giao tiếp với các tiến

trình đang chạy ở kernel mode, mà, giao tiếp nội trong kernel được thực hiện thông qua các trạng thái định thời và các cấu trúc hàm đợi wait.queue

21.55

ChuyChuyểển Dn Dữữ LiLiệệu Giu Giữữa ca cáác Tic Tiếến Trn Trììnhnh

n Cơ chế pipe (đường ống) cho phép một tiến trình con kế thừa một kênh giao tiếp từ cha nó, dữ liệu viết lên một đầu của pipe có thể được đọc ở đầu còn lại

n Bộ nhớ chi sẻ cung cấp một cách giao tiếp cực nhanh; bất cứ dữ liệu nào được viết bởi một tiến trình vào một shared memory region (vùng bộ nhớ chia sẻ) có thể được đọc ngay lập tức bởi bất cứ tiến trìn nào đã map vùng (region) đó vào không gian địa chỉ của nó

n Tuy nhiên, để đạt được sự đồng bộ, bộ nhớ chia sẻ phải được sử

dụng kết hợp với cơ chế giao tiếp liên tiến trình

21.56

Shared Memory Object Shared Memory Object

n Shared-memory object hành động như một backing store cho các shared-memory regions cùng cách mà một file có thể hành động với một memory-mapped memory region

n Shared-memory mappings hướng các lỗi trang map trong các

trang từ một đối tượng shared-memory bền vững

n Shared-memory object nhớ nội dung của chúng cả khi không có

tiến trình nào đang map chúng vào bộ nhớ ảo

21.57

CCấấu Tru Trúúc Mc Mạạngng

l Nó hỗ trợ các nghi thức Internet chuẩn cho UNIX cho các giao

n Networking là lĩnh vực mấu chốt của tính hữu dụng của Linux

tiếp UNIX

l Nó cũng hiện thực các nghi thức tự nhiên đối với các hệ điều

hành nonUNIX, đặc biệt, các nghi thức được sử dụng trên các mạng PC, như Appletalk và IPX

n Bên trong, networking trong Linux kernel được hiện thực bởi ba lớp

phần mềm:

l The socket interface

l Protocol drivers

l Network device drivers

21.58

CCấấu Tru Trúúc Mc Mạạng (tt) ng (tt)

n Tập hợp quan trọng nhất của các nghi thức trong hệ thống Linux

networking là bộ internet protocol suite

l Nó hiện thực việc truyền gửi (routing) giữa các host khác nhau

ở bất cứ nơi đâu trong mạng

l Trên cùng của nghi thức routing được xây dựng trên các nghi

thức UDP, TCP và ICMP

21.59

An Ninh An Ninh

n Hệ thống pluggable authentication modules (PAM) có sẵn dưới

Linux

n PAM dựa trên một thư viện chia sẻ có thể được sử dụng bởi bất kỳ

thành phần hệ thống nào cần nhận biết người dùng

n Điều khiển truy cập các hệ thống dưới UNIX, bao gồm Linux, được thực hiện thông qua việc sử dụng các unique numeric identifiers (uid và gid)

n Điều khiển truy cập được thực hiện bằng cách cấp cho các đối tượng một protections mask, xác định các chế độ nào —read, write, hay execute— được cấp cho tiến trình với truy cập người dùng, nhóm, hay tất cả

21.60

An Ninh (tt) An Ninh (tt)

l Nó thực hiện POSIX specification’s saved user-id mechanism, cho phép một tiến trình lặp đi lặp lại việc bỏ và lấy lại uid hiệu quả của nó

l Nó thêm vào một đặc tính tiến trình cấp cho một tập hợp con

n Linux tăng cơ chế chuẩn UNIX setuid bằng hai cách :

các quyền của uid hiệu quả

n Linux cung cấp một cơ chế khác cho phép một khách hàng chuyển có lựa chọn lối vào cho một file đơn vào tiến trình server nào đó mà không cấp cho nó đặc quyền nào khác

21.61

End of Chapter 21 End of Chapter 21

21.62