You are on page 1of 111

Học phần:

HỆ ĐIỀU HÀNH
MỤC TIÊU CHUNG CỦA MÔN HỌC

 Về kiến thức: Cung cấp cho sinh viên kiến thức cơ bản về Hệ điều hành,
thành phần, nguyên lý xây dựng và các chức năng cơ bản của hệ điều hành.

 Về kỹ năng: Sinh viên có thể hiểu nguyên lí hoạt động của các hệ điều hành
phổ biến, có thể giải quyết các bài toán về quản lý tiến trình, bộ nhớ, thiết bị vào
ra và hệ tệp.

◆ Về thái độ: Có thái độ nghiêm túc, đúng đắn, có tinh thần tự học, tự nghiên
cứu kiến thức có liên quan đến hệ điều hành.

TÀI LIỆU HỌC TẬP


- Giáo Trình Hệ Điều Hành, PGS.TS. Từ Minh Phương, NXB. Thông tin
và truyền thông, 2016
a. ĐIỂM CHUYÊN CẦN - 10%
- Sinh viên tham dự đầy đủ các giờ học trên lớp
- Thực hiện đầy đủ các nhiệm vụ được giao trên lớp và về nhà

b. ĐIỂM BÀI TẬP – 10%


- Bài tập nhóm
- Bài tập cá nhân

c. ĐIỂM KIỂM TRA GIỮA KỲ (TRÊN LỚP) - 20 %


- Hình thức kiểm tra: trắc nghiệm
- Thời gian: 90 phút
- Thời gian thực hiện: sau chương 4

d. THI KẾT THÚC HỌC PHẦN – 60 %


- Hình thức thi: trắc nghiệm
- Thời gian: 90 phút
- Thời gian thực hiện: sau khi kết thúc học phần - phòng đào tạo tổ chức
PHÂN BỔ THỜI LƯỢNG
- Số tín chỉ: 03
- Số tiết: 45 tiết lên lớp (30 lý thuyết; 15 bài tập), 75 tiết tự học.
- Bài kiểm tra định kỳ: kiểm tra viết 90’.

PHÂN BỔ NỘI DUNG

CHƯƠNG I: TỔNG QUAN


CHƯƠNG II: QUẢN LÝ TIẾN TRÌNH
CHƯƠNG III: QUẢN LÝ BỘ NHỚ
CHƯƠNG IV: HỆ THỐNG FILE
1. CÁC THÀNH PHẦN CỦA HỆ THỐNG MÁY TÍNH
2. KHÁI NIỆM

3. CÁC CHỨC NĂNG CHÍNH CỦA HỆ ĐIỀU HÀNH


4. CẤU TRÚC CỦA HỆ ĐIỀU HÀNH
5. LỊCH SỬ PHÁT TRIỂN HỆ ĐIỀU HÀNH
6. MỘT SỐ HỆ ĐIỀU HÀNH CỤ THỂ
1. CÁC THÀNH PHẦN CỦA HỆ THỐNG MÁY TÍNH
Một hệ thống máy tính bao gồm các thiết bị phần cứng và các chương trình phần
mềm. Phần cứng có thể biểu diễn ở lớp dưới cùng, là cơ sở cho toàn bộ hệ thống
máy tính, gồm các thiết bị như CPU, bộ nhớ, thiết bị nhớ ngoài, thiết bị vào ra.
Phần mềm chia làm 2 lớp: phần mềm hệ thống và phần mềm ứng dụng.

NGƯỜI DÙNG

CHƯƠNG TRÌNH ỨNG DỤNG,


CHƯƠNG TRÌNH HỆ THỐNG
CHƯƠNG TRÌNH TIỆN ÍCH

HỆ ĐIỀU HÀNH

PHẦN CỨNG

CÁC THÀNH PHẦN CỦA HỆ THỐNG MÁY TÍNH


2. KHÁI NIỆM
2.1. Tài nguyên máy tính
- Tài nguyên phần cứng
- Tài nguyên phần mềm
2.2. Hệ điều hành (OS)
2.2.1. Khái niệm:
Có thể coi hệ điều hành là một tập hợp các chương trình hệ thống có chức năng
tạo môi trường giao diện cho người sử dụng, tạo môi trường hoạt động cho các
chương trình ứng dụng; quản lý và khai thác hiệu quả các thiết bị phần cứng.
2.2.2. Cài đặt và chạy hệ điều hành:
- OS phải tự tải chính mình vào bộ nhớ một chương trình nhỏ gọi là chương
trình tải hay chương trình mồi (OS loader hoặt boot), quá trình này được gọi là
booting.

- Nếu trên máy tính cài cùng lúc nhiều OS, chương trình mồi được gọi là Multi
OS loader cho phép chọn một trong các hệ điều hành đấy để tải vào bộ nhớ.
3. CHỨC NĂNG CỦA HỆ ĐIỀU HÀNH
3.1. Quản lý bộ nhớ
OS cần thực hiện các nhiệm vụ sau để quản lý bộ nhớ:
- Cấp phát, phân phối bộ nhớ cho các tiến trình;

- Tạo bộ nhớ ảo và ánh xạ bộ nhớ ảo vào bộ nhớ thực.

- Ngăn chặn các xung đột trong truy cập bộ nhớ;

- Cung cấp và giải phóng bộ nhớ theo yêu cầu của tiến trình;

- Quản lý không gian nhớ đã cấp và không gian nhớ còn trống;
3.2. Quản lý tiến trình
Tiến trình là một chương trình đang ở trạng thái thực hiện. Khi thực hiện một
tiến trình, đòi hỏi một số tài nguyên nhất định như: CPU, bộ nhớ, các thiết bị
... các tài nguyên này sẽ được cấp phát cho tiến trình vào những thời điểm cần
thiết và được thu hồi khi tiến trình kết thúc. Ngoài ra, khi tiến trình hoạt động
trong hệ thống có thể phát sinh các tiến trình con.
OS có nhiệm vụ:
- Tạo, xóa và lưu thông tin về các tiến trình;

- Tạm treo và khôi phục các tiến trình bị treo;

- Lập lịch cho các tiến trình (lập lịch cho CPU);

- Đồng bộ hóa các tiến trình;

- Giải quyết các bế tắc;

- Tạo các cơ chế để liên lạc giữa các tiến trình.


3.3. Quản lý hệ thống file và thư mục
Để thuận lợi trong việc lưu trữ và quản lý thông tin, hệ điều hành
sử dụng một đơn vị lưu trữ đồng nhất trên tất cả các thiết bị lưu trữ gọi
là file. Người dùng và các chương trình không cần quan tâm cách lưu
trữ file trên bộ nhớ như thế nào, OS chịu trách nhiệm ánh xạ các file
lên các thiết bị nhớ.
OS tổ chức các file thành các thư mục và kiểm soát việc truy cập
đồng thời đến cùng một file.
Hệ điều hành chịu trách nhiệm về các thao tác:
- Tạo và xoá file (thư mục);
- Đọc, ghi file;
- Ánh xạ các file lên bộ nhớ ngoài;
3.4. Quản lý hệ thống vào/ ra
Các thiết bị vào ra được điều khiển bởi các driver và các giao
diện lớp trên driver do hệ điều hành cung cấp. Hiệu quả của
việc trao đổi thông tin với các thiết bị ngoại vi được tăng nhờ
hệ thống vùng đệm (buffe) và bộ nhớ cache. Nhiệm vụ của OS
bao gồm:
- Quản lý các driver;

- Quản lý giao diện cho driver ở mức cao hơn;

- Quản lý vùng đệm, cache.


3.5. Hệ thống bảo vệ
 Khi hệ thống cho phép nhiều người sử dụng đồng thời, các tiến trình
song hành cần phải được bảo vệ để tránh sự xâm phạm vô tình hoặc cố
ý có thể gây sai lệch toàn hệ thống. Hệ điều hành cần xây dựng các cơ
chế bảo vệ cho phép đặc tả sự kiểm soát và một phương thức để áp dụng
các chiến lược bảo vệ thích hợp. Như vậy mục đích của hệ thống bảo vệ
là:
- Giúp cho hệ thống hoạt động bình thường
- Bảo vệ các tài nguyên sử dụng chung
- Phát triển và ngăn chặn các khả năng sai sót của các tiến trình
3.6. Bộ dịch lệnh và lời gọi hệ thống
Bộ dịch lệnh là thành phần quan trọng của hệ điều hành, đóng vai trò
tạo giao diện giữa máy tính và người sử dụng.
- Trình biên dịch

- Trình thông dịch

Lời gọi hệ thống (system calls)


System call là một yêu cầu do một tiến trình thực hiện đối với hệ điều
hành.
Lời gọi hệ thống (system call) thực hiện các hoạt động cấp hệ thống,
chẳng hạn như giao tiếp với các thiết bị phần cứng và đọc và ghi file.
4. CẤU TRÚC CỦA HỆ ĐIỀU HÀNH
4.1. Một số tính chất cơ bản của hệ điều hành:
Độ tin cậy cao: Mọi hoạt động, mọi thông báo của hệ điều hành phải chuẩn xác
tuyệt đối. Chỉ khi nào chắc chắn đúng thì hệ điều hành mới cung cấp thông tin
cho người sử dụng.
Tính an toàn: Hệ điều hành cần phải đảm bảo sao cho dữ liệu và các chương
trình không bị thay đổi ngoài ý muốn trong mọi trường hợp và trong mọi chế độ
hoạt động. (cung cấp các cơ chế bảo vệ dữ liệu và bảo vệ các tài nguyên sử dụng
chung, tránh được sự vi phạm do vô tình hoặc cố ý của người sử dụng và các
chương trình).
Tính hiệu quả: phải khai thác được triệt để các tài nguyên hệ thống, đồng thời
phải duy trì hoạt động đồng bộ trong toàn hệ thống.
Tính kế thừa: Hệ điều hành phải có tính kế thừa các ưu điểm, khắc phục các
nhược điểm của phiên bản trước và khả năng thích nghi với những thay đổi trong
tương lai.
Tính thuận lợi: Hệ điều hành phải sử dụng dễ dàng, phải có hệ thống trợ giúp,
hướng dẫn phải giúp người sử dụng tự đào tạo mình ngay trong quá trình khai
thác.
Các tính chất trên có thể mâu thuẫn với nhau nhưng mỗi hệ điều hành cần có
một giải pháp trung hoà, ưu tiên hợp lý ở tính chất này hoặc tính chất khác.
4.2. Nhân của hệ điều hành
Nhân (kernel) là phần cốt lõi, là phần thực hiện các chức năng cơ bản
nhất, quan trọng nhất của hệ điều hành và thường xuyên được giữ trong
bộ nhớ.
* Chế độ đặc quyền và chế độ người dùng
- chế độ đặc quyền (privilege mode), hay còn gọi là chế độ hệ thống
(system mode), chế độ nhân: chương trình thực hiện trong chế độ này
có đầy đủ quyền truy cập và điều khiển phần cứng máy tính
- chế độ người dùng (user mode), hay còn gọi là chế độ bình thường
(normal mode): chương trình thực hiện trong chế độ này bị hạn chế rất
nhiều quyền truy cập và điều khiển phần cứng
Do nhân của hệ điều hành được thực hiện trong chế độ đặc quyền
nên có toàn quyền kiểm soát và quản lý tài nguyên phần cứng. Trình
ứng dụng phải thông qua nhân để có thể tiếp cận tài nguyên hệ thống.
4.3. Nguyên tắc thiết kế và xây dựng hệ điều hành
➢ Nguyên tắc modul:

➢ Nguyên tắc tương đối trong định vị:

➢ Nguyên tắc Macro Processor:

➢ Nguyên tắc lặp chức năng:

➢ Nguyên tắc giá trị chuẩn:

➢ Nguyên tắc khởi tạo khi cài đặt:

➢ Nguyên tắc bảo vệ nhiều mức:


4.4. Một số kiểu cấu trúc hệ điều hành
4.4.1. Cấu trúc nguyên khối (monolithic), hay cấu trúc đơn giản, là cấu trúc
trong đó toàn bộ các chương trình và dữ liệu của hệ điều hành có chung một
không gian nhớ và do vậy có thể coi như một khối duy nhất.
- Ưu điểm: tốc độ thực hiện cao
- Nhược điểm: thiếu tính mềm dẻo và độ tin cậy của hệ thống không cao.
- Khắc phục: tổ chức các mô đun có thể tải từ đĩa và gắn vào nhân khi cần, nếu
không cần có thể xóa khỏi nhân.
4.4.2. Cấu trúc phân lớp sử dụng nguyên tắc mô đun hóa, theo đó toàn hệ
thống được phân thành các mô đun có thể được phát triển, thay đổi, kiểm tra lỗi
tương đối độc lập với các nhau.
Các thành phần của OS được phân thành các lớp nằm chồng lên nhau hay tiếp
xúc với nhau theo một thứ tự nhất định, trong đó mỗi lớp chỉ có thể liên lạc với
lớp nằm kề bên trên và kề bên dưới, mỗi lớp chỉ có thể sử dụng dịch vụ do lớp
nằm ngay bên dưới cung cấp.
- Ưu điểm: dễ dò lỗi và hoàn thiện OS

- Nhược điểm: tốc độ chậm, khó xác định số lớp và phân chia thành phần của
lớp.
4.4.3. Cấu trúc vi nhân (microkernel)
Phần nhân chỉ chứa các chức năng quan trọng nhất như quản lý tiến trình,
quản lý bộ nhớ. Các chức năng còn lại được tổ chức thành các môđun, hoạt động
trong chế độ đặc quyền hoặc trong chế độ người dùng. Khi có yêu cầu về dịch vụ,
nhân sẽ chuyển tiếp cho mô đun tương ứng thực hiện.
- Ưu điểm: giảm thiểu kích thước nhân, việc thiết kế, cài đặt, quản lý các mô đun
sẽ dễ dàng và mềm dẻo hơn so với cấu trúc khối. Lỗi của các mô đun chạy trong
chế độ người dùng không ảnh hưởng đến toàn bộ OS.
- Nhược điểm: Việc chuyển đổi giữa các mô đun đòi hỏi tài nguyên hệ thống và
thời gian.

5.3.4. Cấu trúc lai - Là cấu trúc kết hợp của các kiểu cấu trúc trên.
5. LỊCH SỬ PHÁT TRIỂN CỦA HỆ ĐIỀU HÀNH

5.1. Các máy tính thế hệ thứ nhất (1945-1955)


Các máy tính thế hệ thứ nhất không có hệ điều hành. Các chương trình đều
viết bằng ngôn ngữ máy và đưa vào máy bằng cách nối dây trên các bảng
cắm nối (plugboard). Chính việc điều khiển máy tính cũng được thực hiện
qua các bảng cắm nối. Không có sự phân biệt giữa chương trình của người sử
dụng và chương trình điều khiển

5.2. Hệ điều hành của các máy tính thế hệ thứ hai (1955-1965)
Các máy tính thế hệ thứ hai có tốc độ vài nghìn đến vài chục nghìn phép tính
một giây, bộ nhớ trong từ vài nghìn đến vài chục nghìn từ máy. Thông tin
nhập vào máy qua bìa đục lỗ (punched card) hay băng đục lỗ. Bộ nhớ ngoài
kiểu băng từ đã được sử dụng.
Từ thế hệ này bắt đầu có hệ điều hành. Đấy là các OS đơn chương trình, mỗi
lúc chỉ cho phép thực hiện một chương trình. Để tăng hiệu suất của máy,
người ta sử dụng kỹ thuật xử lý theo lô (batch rocessing), hay còn gọi là
xử lý theo mẻ.
Lập trình viên chuẩn bị chương trình trên bìa đục lỗ hoặc trên đĩa từ và giao cho
các kỹ thuật viên. Kỹ thuật viên sẽ phân chương trình thành các lô. Mỗi lô bao
gồm những chương trình có yêu cầu giống nhau, sau đó nạp toàn bộ lô vào băng
từ và tải vào máy để thực hiện lần lượt.
- Một chương trình giám sát được gọi là Monitor được lưu trữ thường xuyên
trong bộ nhớ để tự động hóa việc xử lý theo lô, nhằm loại trừ thời gian chết của
CPU khi chuyển tiếp giữa các công đoạn trong một công việc.
- Monitor chính là dạng đơn giản nhất của hệ điều hành.
- Hai hệ điều hành tiêu biểu của thời kỳ này là FMS (The FORTRAN Monitor
System) và IBMSYS của IBM chạy trên dòng máy 7094.

MONITOR

CHƯƠNG TRÌNH ỨNG


DỤNG

Mô hình tổ chức bộ nhớ của hệ điều hành xử lý theo lô


5.3. Hệ điều hành của các máy tính thế hệ thứ ba (1965-1980)
Hệ điều hành đa chương trình: sử dụng kỹ thuật đa chương trình
(multiprogramming). Trong kỹ thuật này, nhiều chương trình cùng lúc được
nạp vào bộ nhớ. Trong khi chương trình thứ nhất sử dụng CPU thì chương
trình thứ hai có thể đọc dữ liệu từ đĩa, còn chương trình thứ ba có thể sử dụng
máy in... Vai trò của hệ OS là điều phối các “tài nguyên” của hệ thống một
cách hợp lý phục vụ cho các chương trình để giảm thời gian chờ.

Hỗ trợ chia sẻ thời gian và đa nhiệm:


- Cơ chế phân chia thời gian (time sharing) thường được áp dụng khi có nhiều
người dùng giao tiếp trực tiếp với máy tính qua OS, trong đó OS lần lượt phân
chia CPU cho người sử dụng trong những khoảng thời gian nhất định.
- Đa nhiệm: cho phép cùng lúc thực hiện nhiều nhiệm vụ trên máy chứ không
chờ kết thúc một tiến trình rồi mới bắt đầu tiến trình khác, chính vì thế mà hệ
điều hành được gọi là đa nhiệm (multi-task).
Ảo hóa:
- Cho phép chạy nhiều hệ điều hành cùng lúc trên máy tính.
- Hệ quản lý máy ảo (virtual machine manager) chạy như một ứng dụng của hệ
điều hành chủ và tạo ra các máy ảo (virtual machine), mỗi máy có thể chạy một
hệ điều hành riêng rẽ.

Chương trình Chương trình Chương trình


….
ứng dụng ứng dụng ứng dụng
Máy ảo Máy ảo …. Máy ảo
Hệ quản lý máy ảo (virtual machine manager)
Hệ điều hành chủ
Phần cứng
Điện toán đám mây (cloud computing):
Khái niệm này dùng để chỉ mô hình điện toán sử dụng các công nghệ máy tính
và phát triển dựa vào mạng Internet, trong đó việc tính toán, lưu trữ dữ liệu
cũng như các chương trình ứng dụng được cung cấp qua mạng.
Điện toán đám mây bao gồm ba dạng dịch vụ chính:
- SaaS - Software as a Service - “phần mềm như một dịch vụ”: cho
thuê/cung cấp phần mềm ứng dụng qua mạng.
- PaaS - Platform as a Service - “nền tảng như một dịch vụ”: là hình
thức cho thuê/cung cấp một tập phần mềm đã cài sẵn qua mạng.
- IaaS - Infrastructure as a Service - “hạ tầng như một dịch vụ”: là dịch
vụ cho thuê/cung cấp phần cứng (CPU, bộ nhớ ngoài) qua mạng.
5.4. Hệ điều hành của các máy tính thế hệ thứ tư (1980 - nay)
Có hai khuynh hướng phát triển vào thời kỳ này: máy tính nhỏ - máy tính cá
nhân và máy tính mạnh - siêu máy tính.

5.4.1. Hệ điều hành dành cho máy tính cá nhân:


- Tiêu biểu là DOS, WINDOWS trên các dòng máy PC với bộ xử lý Intel và
MAC/OS trên Macintosh với bộ xử lý Motorola.
+ DOS: đơn nhiệm; giao diện dòng lệnh; quản lý thông tin trên đĩa bằng đơn vị
file, các file được tổ chức thành cây thư mục …
+ WINDOWS: giao diện đồ họa; đa nhiệm.
+ MAC/OS: hệ điều hành đầu tiên tổ chức thành công giao diện tiêu chuẩn với
các biểu tượng (icon), thực đơn thả xuống (pulldown menu), cửa sổ ứng dụng
(windows), hộp thoại (dialog box) và cơ chế chỉ định bằng chuột (mouse) vào
năm 1985 và đã trở thành chuẩn giao tiếp đồ họa cho đến ngày nay.
Cơ chế plug and play: hệ điều hành tự nhận dạng thiết bị ngoại vi mới và tự cài
đặt các chương trình điều khiển ở mức tự động hoá cao nhất có thể.
5.4.2. Hệ điều hành của các máy tính lớn
Đối với các dòng máy lớn như mini và mainframe thì hệ điều hành chủ
đạo vẫn là UNIX – một sự kế thừa của MULTICS.
- UNIX là OS đa nhiệm, nhiều người dùng với cơ chế chia sẻ thời gian.

- Hệ thống file được phân cấp theo một cây thư mục có các thuộc tính
để kiểm soát thẩm quyền: đọc, sửa, …

- 6. MỘT SỐ HỆ ĐIỀU HÀNH CỤ THỂ


- MS-DOS - UNIX
- WINDOWS - MINIX
- iOS - CHROME OS
- Android - STEAMOS
- Linux
YÊU CẦU:
- Mỗi nhóm chọn 01 hệ điều hành

- Tìm hiểu về hệ điều hành đã chọn

- Làm slide thuyết trình, nộp bản word tài liệu.

- Nhận xét về mức độ tham gia của các thành viên trong nhóm

Kết quả yêu cầu:


- Đặc điểm của OS

- Cầu trúc OS

- Nguyên tắc làm việc, kỹ thuật sử dụng


CÂU HỎI ÔN TẬP CHƯƠNG

1. Hãy trình bày các chức năng chính của hệ điều hành.
2. Trình bày khái niệm về tài nguyên hệ thống. Cho ví dụ minh hoạ
3. Trình bày các nguyên tắc thiết kế và xây dựng hệ điều hành.
4. Hệ điều hành cần đảm bảo những tính chất cơ bản nào, trình bày một số kiểu
cấu trúc hệ điều hành, so sánh ưu nhược điểm của các kiểu cấu trúc đấy.
5. Tại sao cần tách biệt chế độ nhân và chế độ người dùng? Hãy sử dụng ví dụ
để minh họa cho lập luận.
6. Trình bày kỹ thuật xử lý theo lô, kỹ thuật đa chương trình, hỗ trợ thời gian và
đa nhiệm.

LÀM TRÊN GIẤY, CHỤP BÀI GỬI VÀO ZALO CHO CÔ


0973588919
CHƯƠNG II: QUẢN LÝ TIẾN TRÌNH

1. KHÁI NIỆM
2. LẬP LỊCH CPU
3. ĐỒNG BỘ HÓA TIẾN TRÌNH ĐỒNG THỜI
1. KHÁI NIỆM
1.1. Tiến trình (Process)
- Tiến trình là một chương trình đang trong quá trình thực hiện

TIẾN TRÌNH 1 CP I/O CPU I/O


TIẾN TRÌNH 2 I/O CPU I/O CPU I/O
TIẾN TRÌNH 3 I/O CPU I/O CPU

- Thành phần của tiến trình:


+ Các lệnh
+ Con trỏ lệnh
+ Các biến
+ Ngăn xếp (stack)
+Thông tin về hoạt động hiện thời của tiến trình
+ Heap: vùng bộ nhớ được cấp phát động trong quá trình thực hiện tiến
trình
Tập hợp tât cả các thành phần này tạo nên ảnh của tiến trình
1.2. Các trạng thái của tiến trình
 Trạng thái của tiến trình tại mỗi thời điểm được xác định bởi hoạt
động của tiến trình tại thời điểm đó. Trong suốt khoảng thời gian tồn tại
trong hệ thống, một tiến trình có thể thay đổi trạng thái do rất nhiều
nguyên nhân như: chờ đợi sự kiện nào đó xảy ra, đợi một thao tác vào /
ra hoàn tất, hết thời gian xử lý...
1.3. Thông tin mô tả tiến trình
Khối quản lý tiến trình (Process Control Block – PCB)
Thông tin được lưu trong khối quản lý tiến trình, bao gồm:
- Số định danh của tiến trình: cho phép phân biệt các tiến trình.
- Trạng thái tiến trình: xác định trạng thái hiện tại của tiến trình
- Nội dung một số thanh ghi CPU như: thanh ghi con trỏ lệnh, thanh ghi
con trỏ ngăn xếp, các thanh ghi điều kiện và trạng thái, các thanh ghi đa
dụng khác …
- Thông tin phục vụ điều độ tiến trình: mức độ ưu tiên, thứ tự của tiến
trình trong hàng đợi, ...
- Thông tin về bộ nhớ của tiến trình: chỉ rõ vị trí của tiến trình trong bộ
nhớ
- Danh sách các tài nguyên khác: các file đang mở, các thiết bị I/O đang
sử dụng
- Thông tin thống kê phục vụ quản lý: thời gian sử dụng CPU, giới hạn
thời gian, tài khoản …
* OS quản lý các PCB thông qua bảng tiến trình chứa con trỏ chỉ đến
vị trí của các PCB, hoặc liên kết các tiến trình vào danh sách
1.4. Tiểu trình – thread (luồng, dòng)
Mỗi tiến trình có thể tạo ra nhiều tiểu trình, mỗi tiểu trình thực hiện một
chức năng nào đó và thực thi đồng thời bằng cách chia sẻ CPU. Các tiểu
trình của 1 tiến trình dùng chung không gian địa chỉ nhưng có con trỏ tập
lệnh, tập thanh ghi và stack khác nhau.
1.4. Phân bổ tài nguyên giữa tiến trình và tiểu trình
Tiến trình và tiểu trình sở hữu chung:
- Không gian nhớ của tiến trình.
- Các tài nguyên khác như file do tiến trình mở, thiết bị hoặc cổng vào/ra.
2. LẬP LỊCH CPU (ĐIỀU ĐỘ TIẾN TRÌNH)
2.1. KHÁI NIỆM
Điều độ: là quyết định tiến trình nào được sử dụng tài nguyên phần cứng khi
nào, trong bao lâu.
Các dạng điều độ: gắn liền với việc chuyển tiến trình tự trạng thái này sang
trạng thái khác.
-Điều độ dài hạn, trung hạn, ngắn hạn.
Điều độ ngắn hạn (Lập lịch cho CPU)
Thời gian mà CPU phục vụ cho một tiến trình hoạt động được gọi là giờ CPU.
Tại mỗi thời điểm nhất định, chỉ có một tiến trình được phân phối giờ CPU.
Các dạng điều độ CPU:
- Điều độ có phân phối lại (preemptive): OS có thể thu hồi lại CPU khi cần mà
không cần chờ tiến trình kết thúc hoặc chuyển sang trạng thái đợi
- Điều độ không phân phối lại (nonpreemptive): tiến trình đang ở trạng thái chạy
sẽ sử dụng CPU cho đến khi xảy ra một trong các tình huống sau: tiến trình kết
thúc, hoặc phải chuyển sang trạng thái chờ đợi do thực hiện yêu cầu vào/ra hoặc
lời gọi hệ thống, hoặc chờ đợi tín hiệu đồng bộ từ tiến trình khác.
Các tiêu chí điều độ
- Lượng tiến trình được thực hiện xong
- Hiệu suất sử dụng CPU
- Thời gian vòng đời trung bình tiến trình
- Thời gian chờ đợi
- Thời gian đáp ứng

Tiêu chí bổ sung liên quan đến đảm bảo tính ổn định của hệ thống:
- Tính dự đoán được.
- Tính công bằng.
2.2. MỘT SỐ THUẬT TOÁN LẬP LỊCH CPU
2.2.1 Đến trước phục vụ trước (First Come First Served)
Tiến trình nào yêu cầu CPU trước sẽ được cấp trước, thông thường đây là dạng
điều độ không phân phối lại.
Ví dụ:
Có 5 tiến trình

Sơ đồ Gant:

Thời gian đợi trung bình của các tiến trình: TTB = (0+8+10+24+24)/5=13,2
=> Đơn giản và công bằng nhưng thời gian đợi của tiến trình lớn.
2.2.2. Điều độ quay vòng (round robin - RR)
Trong thuật toán này, hệ thống quy định một lượng tử thời gian (time
quantum) khoảng từ 10 – 100 mili giây. Mỗi tiến trình được phân phối một
lượng tử thời gian, sau khoảng thời gian đấy nếu tiến trình chưa kết thúc hoặc
rơi vào trạng thái đợi, nó được chuyển về cuối hàng đợi. Hàng đợi được tổ
chức theo kiểu vòng tròn theo cơ chế FIFO.

* Cần chọn lượng tử thời gian thích hợp: nếu time quantum lớn việc bổ sung
tiến trình mới hoặc kích hoạt tiến trình bị ngắt sẽ làm tăng thời gian chờ đợi
trung bình nhưng nếu chọn giá trị time quantum nhỏ thì các tiến trình phải liên
tục chuyển trạng thái dẫn đến giảm hệ số hữu ích của CPU.

Time quantum thường được chọn theo công thức:


q = t/n hoặc q = t/n - s.
Trong đó: t là thời gian khống chế trước; n là số tiến trình; s thời gian chuyển
từ tiến trình này sang tiến trình khác.
Ví dụ: cho các tiến trình và thời gian phục vụ tương ứng

Sơ đồ theo Gant của thuật toán RR với q=5:

Thời gian chờ tương ứng: 19+11=30 5+19-3=21 10+15+5-8=22 15-15=0


19+12-17=14
Thời gian đợi trung bình của các tiến trình:=(30+21+22+0+14)/5=17,4
1. Vẽ sơ đồ Gant theo thuật toán RR, với q=3
2. Tính thời gian chờ trung bình
2.2.3. Điều độ ưu tiên tiến trình ngắn nhất (Shortest Process First - SPF)
Tiến trình nào có thời gian thực hiện ngắn sẽ được ưu tiên phục vụ trước, nếu
các tiến trình có chu kỳ bằng nhau thì tiến trình đứng trước trong hàng đợi sẽ
được chọn.
Ví dụ:

Sơ đồ Gant:
Sơ đồ theo SPF:

Thời gian đợi trung bình: TTB = (0+8+23+5+5)/5= 8.2


=> Thời gian chờ đợi trung bình rút ngắn đáng kể, nhưng rất khó sử dụng
trên thực tế do đòi hỏi phải biết trước độ dài chu kỳ sử dụng CPU tiếp theo
của tiến trình.
2.2.4. Điều độ ưu tiên thời gian còn lại ngắn nhất trước (Shortest Remaining
Time First – SRTF)
Tương tự như SPF nhưng trong thuật toán này, độ ưu tiên thực hiện các tiến
trình dựa vào thời gian cần thiết để thực hiện nốt tiến trình (bằng tổng thời gian
– thời gian đã thực hiện).
Ví dụ:

Sơ đồ Gant:

Thời gian đợi trung bình: TTB = (11+0+23+0+5)/5= 7,8

=> thời gian chờ đợi trung bình nhỏ nhưng đòi hỏi hệ điều hành phải dự
đoán được độ dài chu kỳ sử dụng CPU của tiến trình
2.2.5. Điều độ có mức ưu tiên - Priority Scheduling
- Mỗi tiến trình sẽ được gán một độ ưu tiên; CPU sẽ được cấp cho tiến trình có
độ ưu tiên cao nhất.
- Hệ điều hành quy định mức ưu tiên dưới dạng số nguyên trong một khoảng
nào đó.
Điều độ có mức ưu tiên không phân phối lại: (giả sử tất cả các tiến trình
cùng xuất hiện ở thời điểm 0)

Thời gian đợi: 6; 0; 16; 18; 1;


Thời gian chờ đợi trung bình = (0 + 1 + 6 + 16 + 18)/5 = 8,2
Điều độ có mức ưu tiên có phân phối lại:

Sơ đồ Gant:

Thời gian để hoàn thành được tính như sau:


P1=16; P2=2-1=1; P3=18-2=16; P4=19-3=16; P5=9-4=5
Thời gian đợi của từng tiến trình :
P1=0+1+5=6; P2=0; P3=16-2=14; P4=18-3=15; P5=4-4=0
2.2.6. Điều độ với nhiều hàng đợi - Multi Level Queue (MLQ)
Điều độ với nhiều hàng đợi là phương pháp điều độ trong đó tiến trình được
phân chia thành nhiều loại tùy theo đặc điểm và độ ưu tiên. Mỗi loại được xếp
trong một hàng đợi riêng và được điều độ theo phương pháp phù hợp với đặc
điểm của loại tiến trình đó.
Ví dụ về tổ chức hàng đợi trong MLQ:
2.2.7. Multi Level Feedback Queues (MLFQ)
MLFQ là thuật toán tổng quát nhất để lập lịch cho CPU, đó hệ thống tổ chức
nhiều hàng đợi. Mỗi hàng đợi có độ ưu tiên và cách thức tổ chức thực hiện khác
nhau. Các tiến trình có thể chuyển đổi từ hàng đợi này sang hàng đợi khác.

Các yếu tố cần chú ý:


- Số lượng hàng đợi sao cho hợp lý.
- Chọn thuật toán thích hợp cho mỗi hàng đợi.
- Tiêu chuẩn và cách thức hạ mức một tiến trình.
- Tiêu chuẩn và cách thức nâng mức một tiến trình.
- Tiêu chuẩn và cách thức xác định hàng đợi cho một tiến trình mới phát sinh.
3. ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH SONG HÀNH
Tiến trình song hành (concurrent process) là những tiến trình cùng tồn tại song
song.
3.1. KHÁI NIỆM
- Tài nguyên nguy hiểm - Critical resource (Tài nguyên găng): là tài nguyên
mà nhiều tiến trình cùng yêu cầu
- Đoạn nguy hiểm - critical section (Miền găng): đoạn mã có chứa thao tác
truy cập tài nguyên nguy hiểm.
- Loại trừ tương hỗ - mutual exclusion: đảm bảo rằng nếu một tiến trình đang
sử dụng tài nguyên nguy hiểm thì tiến trình khác không thể sử dụng nó.
- Bế tắc (deadlock): P1 yêu cầu tài nguyên A => P1 rơi vào trạng thái waiting.
P1 có thể mãi mãi nằm ở trạng thái waiting nếu như A đang bị P2 nắm giữ, mà
P2 thì đang chờ một tài nguyên B nào đó đang bị một tiến trình khác (có thể là
P1) nắm giữ => cả P1 và P2 rơi vào trạng thái bế tắc không thể thực hiện tiếp.
- Đói tài nguyên (starvation): tiến trình rơi vào trạng thái chờ đợi mà không
được cấp phát tài nguyên nên không thể thực hiện tiếp mặc dù không hề xảy ra
bế tắc.
3.2. VẤN ĐỀ ĐOẠN NGUY HIỂM - CRITICAL SECTION PROBLEM
3.2.1 Yêu cầu đối với giải pháp cho đoạn nguy hiểm
- Loại trừ tương hỗ (Mutual Exclusion): Khi P1 đang thực thi trong đoạn nguy
hiểm (CS) thì không P2 nào khác đang thực thi trong CS của P1.

- Phát triển (Progress): Một tiến trình tạm dừng bên ngoài CS không được ngăn
cản các tiến trình khác vào CS.

- Chờ đợi có giới hạn (Bounded Waiting): Mỗi tiến trình chỉ phải chờ để được
vào CS trong một khoảng thời gian có hạn (finite wait time). Không được xảy
ra tình trạng đói tài nguyên (starvation).
3.2.2 Nhóm giải pháp Busy Waiting
Đặc điểm:
- Tiếp tục sử dụng CPU trong khi chờ đợi vào CS (kiểm tra điều kiện vào CS
liên tục)
- Không đòi hỏi sự trợ giúp của hệ điều hành.
Một số loại tiêu biểu:
- Sử dụng các biến cờ hiệu (Semarphore)
- Sử dụng việc kiểm tra luân phiên.
- Thuật toán Peterson.
- Cấm ngắt (giải pháp phần cứng – hardware).
- Chỉ thị TSL (giải pháp phần cứng – hardware).
Biến cờ hiệu (Semarphore):
Các tiến trình chia sẻ một biến chung đóng vai trò « chốt cửa » (lock) , biến này
được khởi động là 0. Một tiến trình muốn vào đoạn nguy hiểm trước tiên phải
kiểm tra giá trị của biến lock. Nếu lock = 0, tiến trình đặt lại giá trị cho lock = 1
và đi vào đoạn nguy hiểm . Nếu lock đang nhận giá trị 1, tiến trình phải chờ bên
ngoài đoạn nguy hiểm cho đến khi lock có giá trị 0. Như vậy giá trị 0 của lock
mang ý nghĩa là không có tiến trình nào đang ở trong đoạn nguy hiểm , và
lock=1 khi có một tiến trình đang ở trong đoạn nguy hiểm .
Kiểm tra luân phiên:
Giải pháp đề xuất cho hai tiến trình. Hai tiến trình này sử dụng chung
biến turn (phản ánh phiên tiến trình nào được vào miền găng), được khởi động
với giá trị 0. Nếu turn = 0, tiến trình A được vào đoạn nguy hiểm . Nếu turn =
1, tiến trình A đi vào một vòng lặp chờ đến khi turn nhận giá trị 0. Khi tiến trình
A rời khỏi đoạn nguy hiểm , nó đặt giá trị turn về 1 để cho phép tiến trình B đi
vào đoạn nguy hiểm .
Thuật toán Peterson
Kết hợp cả 2 giải pháp trên. Các tiến trình chia sẻ 2 biến chung:
int turn; // đến phiên ai
int interesse[2]; // khởi động là FALSE
Khi một tiến trình Pi muốn vào đoạn nguy hiểm , nó đặt giá trị
interesse[i]=TRUE để tuyên bố nhu cầu vào đoạn nguy hiểm , sau đó đặt
Turn=j (kiểm tra nhu cầu vào đoạn nguy hiểm của tiến trình khác). Nếu tiến
trình Pj không có nhu cầu vào đoạn nguy hiểm (interesse[j]=FALSE), thì Pi có
thể vào, ngược lại Pi phải chờ đến khi interesse[j]=FALSE. Khi rời khỏi đoạn
nguy hiểm , Pi đặt lại giá trị cho interesse[i]= FALSE.
Cấm ngắt
Cho phép tiến trình cấm tất cả các ngắt trước khi vào đoạn nguy hiểm , và phục
hồi ngắt khi ra khỏi đoạn nguy hiểm . Khi đó, ngắt đồng hồ cũng không xảy ra,
do vậy hệ thống không thể tạm dừng hoạt động của tiến trình đang xử lý để cấp
phát CPU cho tiến trình khác, nhờ đó tiến trình hiện hành yên tâm thao tác trên
đoạn nguy hiểm mà không sợ bị tiến trình nào khác tranh chấp.
Chỉ thị TSL (Test-and-Set)
Giải pháp đòi hỏi sự trợ giúp của cơ chế phần cứng. Nhiều máy tính cung cấp
một chỉ thị đặc biệt cho phép kiểm tra và cập nhật nội dung một vùng nhớ
trong một thao tác nguyên tử (atomic), gọi là chỉ thị Test-and-Set Lock (TSL).

Tất cả các giải pháp trên đều phải thực hiện một vòng lặp để kiểm tra xem
tiến trình có được phép vào đoạn nguy hiểm hay không, nếu điều kiện chưa
cho phép, tiến trình phải chờ tiếp tục trong vòng lặp kiểm tra này. Các giải
pháp buộc tiến trình phải liên tục kiểm tra điều kiện để phát hiện thời điểm
thích hợp được vào đoạn nguy hiểm như thế được gọi các giải pháp «busy
waiting». Lưu ý rằng việc kiểm tra như thế tiêu thụ rất nhiều thời gian sử
dụng CPU, tiến trình đang chờ vẫn chiếm dụng CPU. Vì vậy, xu hướng giải
quyết vấn đề đồng bộ hoá thường tránh các giải pháp « busy waiting ».
3.2.3 Nhóm giải pháp Sleep & Wakeup
Đặc điểm:
- Tiến trình chưa đủ điều kiện vào đoạn nguy hiểm chuyển sang trạng thái
blocked, từ bỏ quyền sử dụng CPU.
- Cần sự hỗ trợ từ hệ điều hành (để đánh thức tiến trình ra khỏi trạng thái blocked
và đưa nó vào trạng thái ready)
SLEEP là một lời gọi hệ thống có tác dụng tạm dừng hoạt động của tiến trình
(blocked) gọi nó và chờ đến khi được một tiến trình khác «đánh thức ». Lời gọi hệ
thống WAKEUP nhận một tham số duy nhất : tiến trình sẽ được tái kích hoạt (đặt
về trạng thái ready).
Một số loại:
-Semaphore.
-Monitor.
-Message
Semaphore
Semaphore là 1 biến nhận các thuộc tính sau:
- Một giá trị nguyên dương e(s)
- Một hàng đợi f(s) (danh sách các tiến trình đang chờ trên semaphore s
Chỉ có hai thao tác được định nghĩa trên semaphore
- Wait(s): giảm giá trị của semaphore s đi 1 đơn vị nếu semaphore có trị e(s) > 0,
và tiếp tục xử lý, nếu ngược lại, tiến trình sẽ phải chờ đến khi e(s) >0.
- Signal(s): tăng giá trị của semaphore s lên 1 đơn vị. Nếu có một hoặc nhiều tiến
trình đang chờ trên semaphore s, bị khóa bởi thao tác Wait, thì hệ thống sẽ chọn
một trong các tiến trình này để kết thúc thao tác Wait và cho tiếp tục xử lý.
* Wait và Signal là những thao tác nguyên tử
- Xây dựng cờ hiệu
- Sử dụng cờ hiệu:
+ Sử dụng để gửi tín hiệu trước khi vào đoạn nguy hiểm và sau khi ra khỏi đoạn
nguy hiểm
+ Khi cần truy cập tài nguyên, tiến trình thực hiện thao tác Wait của cờ hiệu tương
ứng
+ Sau khi dùng xong tài nguyên, tiến trình thực hiện Signal trên cùng cờ hiệu
Monitor
-Giải pháp dựa trên hỗ trợ của hệ điều hành và ngôn ngữ bậc cao.
- Là một cấu trúc đặc biệt bao gồm các thủ tục, các biến và cấu trúc dữ liệu có các
thuộc tính:
+ Các biến và cấu trúc dữ liệu bên trong monitor chỉ có thể được thao tác bởi các
thủ tục định nghĩa bên trong monitor đó
+ Tại một thời điểm, chỉ có một tiến trình duy nhất được hoạt động trong monitor
+ Trong một monitor, có thể định nghĩa các biến điều kiện và hai thao tác kèm
theo là Wait và Signal như sau : gọi C là biến điều kiện được định nghĩa trong
monitor:
Wait(c): chuyển trạng thái tiến trình gọi sang blocked , và đặt tiến trình này vào
hàng đợi trên biến điều kiện C.
Signal(c): nếu có một tiến trình đang bị khóa trong hàng đợi của C, tái kích hoạt
tiến trình đó, và tiến trình gọi sẽ rời khỏi monitor.
Message
Một tiến trình kiểm soát việc sử dụng tài nguyên và nhiều tiến trình khác yêu
cầu tài nguyên này. Tiến trình có yêu cầu tài nguyên sẽ gửi một thông điệp
đến tiến trình kiểm soát và sau đó chuyển sang trạng thái blocked cho đến khi
nhận được một thông điệp chấp nhận cho truy xuất từ tiến trình kiểm soát tài
nguyên. Khi sử dụng xong tài nguyên , tiến trình gửi một thông điệp khác đến
tiến trình kiểm soát để báo kết thúc truy xuất.
Tiến trình kiểm soát, khi nhận được thông điệp yêu cầu tài nguyên, nó sẽ chờ
đến khi tài nguyên sẵn sàng để cấp phát thì gửi một thông điệp đến tiến trình
đang bị khóa trên tài nguyên đó để đánh thức tiến trình này.

=> Semaphore và monitor có thể giải quyết được vấn đề truy xuất độc quyền
trên các máy tính có một hoặc nhiều bộ xử lý chia sẻ một vùng nhớ chung.
Nhưng không hữu dụng trong các hệ thống phân tán, khi mà mỗi bộ xử lý sở
hữu một bộ nhớ riêng biệt và liên lạc thông qua mạng. Trong những hệ thống
phân tán như thế, cơ chế trao đổi thông điệp tỏ ra hữu hiệu và được dùng để
giải quyết bài toán đồng bộ hóa.
3.3 BẾ TẮC – DEADLOCK
3.3.1. Deadlock là gì?
Khi tiến trình P1 yêu cầu tài nguyên A, nhưng A chưa sẵn sàng thì P1 rơi vào
trạng thái chờ đợi. P1 có thể mãi mãi chờ đợi nếu A đang bị tiến trình P2 nắm
giữ, mà P2 đang trong trạng thái chờ tài nguyên B nào đó do P1 nắm giữ.
Trường hợp chờ đợi vòng tròn như vậy và hệ thống không thể tiến triển được
gọi là bế tắc (deadlock).

Ví dụ :
Hệ thống có 2 file (A và B) trên đĩa.
- P1 đang mở (đang khoá) file A và yêu cầu file B.
- P2 đang mở (đang khoá) file B và yêu cầu file A.
=> Deadlock.
3.3.2 Điều kiện xảy ra deadlock
Một tình huống deadlock chỉ xuất hiện khi có 4 tình huống sau đây cùng xảy ra
đồng thời:
• Loại trừ tương hỗ (Mutual Exclusion): Tồn tại một tài nguyên găng
(Critical resource), nơi tại cùng một thời điểm chỉ có thể 1 tiến trình truy
cập.
• Giữ và chờ (Hold and Wait): Một tiến trình P1 phải đang giữ ít nhất một tài
nguyên A và đang chờ một hoặc nhiều tài nguyên B đang bị giữ bởi một tiến
trình B2 khác.
• Không phân phối lại (Non-Preemption): Tài nguyên mà tiến trình đang giữ
không thể phân phối lại cho tiến trình khác trừ khi tiến trình nắm giữ kết thúc
công việc của mình hoặc tự nguyện nhường.
• Chờ đợi vòng tròn (Circular Wait) :Tồn tại nhóm tiến trình P1, P2, …, Pn
sao cho P1 chờ đợi tài nguyên do P2 đang giữ, P2 chờ tài nguyên do P3 đang
giữ, …, Pn chờ tài nguyên do P1 đang giữ.
3.3.3 Các giải pháp cho vấn đề deadlock
- Ngăn ngừa deadlock
- Phòng tránh deadlock
- Phát hiện và giải quyết deadlock
- Bỏ qua deadlock
3.3.3.1 Ngăn ngừa deadlock - (deadlock prevention):
Đảm bảo để không xảy ra ít nhất 1 trong 4 điều kiện nói trên.
- Loại trừ tương hỗ:
+ Đối với tài nguyên không chia sẻ (printer) : Không làm được.
+ Đối với tài nguyên chia sẻ (read-only file) : Không cần thiết.
- Giữ và chờ:
+Cách 1 : Mỗi tiến trình yêu cầu toàn bộ tài nguyên cần thiết một lần.
Nếu có đủ tài nguyên thì hệ thống sẽ cấp phát, nếu không đủ tài nguyên thì tiến
trình phải bị block.
+Cách 2 : Khi yêu cầu tài nguyên, tiến trình không được giữ tài
nguyên nào. Nếu đang có thì phải trả lại trước khi yêu cầu thêm.
- Không phân phối lại: Nếu P1 yêu cầu tài nguyên đang bị tiến trình khác nắm
giữ, có 2 cách:
+ cách 1: OS thu hồi lại toàn bộ tài nguyên mà P1 đang nắm giữ, P1
chỉ Ready khi nhận lại được tài nguyên cũ cùng tài nguyên mới yêu cầu.
+ cách 2: nếu tài nguyên đang giữ bởi 1 tiến trình P2 khác cũng đang
đợi tài nguyên khác thì OS lấy lại tài nguyên và cấp cho P1.

- Chờ đợi vòng tròn:


Gán thứ tự cho các loại tài nguyên của hệ thống (máy in, ổ đĩa, …) và tiến trình
chỉ được yêu cầu tài nguyên sau có thứ tự lớn hơn tài nguyên trước.
Tập hợp tài nguyên:
R = {R1, R2, … , Rn}
+ Các loại tài nguyên được sắp xếp theo thứ tự tăng dần.
+ Nếu tiến trình đã yêu cầu Ri, thì sau đó nó chỉ được phép yêu cầu Rj với điều
kiện j>i.
+ Nếu tiến trình cần nhiều tài nguyên cùng loại thì tiến trình phải yêu cầu tất cả
tài nguyên dạng đó cùng một lúc
3.3.3.2 Phòng tránh deadlock - deadlock avoidance
Cho phép một số điều kiện bế tắc được thỏa mãn nhưng đảm bảo để không đạt
tới điểm bế tắc.
- OS cần xem xét yêu cầu cấp phát tài nguyên của các tiến trình để quyết định
việc cấp phát tài nguyên hay buộc tiến trình phải đợi.
- Để đưa ra quyết định cấp phát ngay hay không, OS cần biết rõ số lượng tài
nguyên đã cấp, đang còn và còn cần phải cấp:
+ yêu cầu tiến trình khai báo số lượng tài nguyên tối đa để thực hiện
+ kiểm tra trạng thái cấp phát tài nguyên để đảm bảo hệ thống không deadlock
(trạng thái an toàn)
+ định nghĩa trạng thái cấp phát tài nguyên (cấp hay không cấp) dựa trên số tài
nguyên còn lại, số tài nguyên đã được cấp và yêu cầu tối đa về tài nguyên của
các tiến trình.
Thuật toán Banker:
Thuật toán dựa trên nguyên tắc cho vay của ngân hàng. Cho vay được nhiều là
tốt, nhưng nếu cho vay quá khả năng đáp ứng của ngân hàng sẽ dẫn đến bế tắc
cho cả ngân hàng và khách vay.
- Tiến trình muốn được khởi tạo cần thông báo dạng tài nguyên và số lượng tài
nguyên tối đa yêu cầu đối với mỗi dạng.
- OS xác định trạng thái, bao gồm các thông tin:
+ số lượng tài nguyên tối đa mà các tiến trình yêu cầu
+ số lượng tài nguyên đã cấp phát
+ số lượng tài nguyên còn lại
+ số lượng tài nguyên còn cần cấp phát
- Trạng thái an toàn: Trạng thái an toàn là trạng thái mà từ đó có ít nhất một
phương án cấp phát sao cho bế tắc không xảy ra.
Khi tiến trình yêu cầu cấp tài nguyên, thuật toán Banker cho phép cập nhật trạng
thái cấp phát giả định, kiểm tra nếu sau khi cấp phát hệ thống sẽ ở trạng thái an
toàn thì cấp tài nguyên, ngược lại tiến trình sẽ phải chờ cho đến bao giờ giải
phóng đủ tài nguyên cần thiết.
3.3.3.2 Phát hiện và xử lý deadlock:
Không sử dụng 2 biện pháp trên, hệ thống định kỳ kiểm tra để phát hiện bế tắc và
xử lý để phá vỡ bế tắc
Phát hiện bế tắc (deadlock detection):
- Sử dụng thuật toán tương tự như thuật toán Banker.
Lựa chọn:
+ chạy thuật toán khi tiến trình yêu cầu tài nguyên mà không được thỏa mãn: phát
hiện được ngay bế tắc nhưng giảm hiệu suất của hệ thống
+ chạy thuật toán sau những chu kỳ thời gian nhất định hoặc khi có dấu hiệu hiệu
suất làm việc giảm xuống: không phát hiện được ngay bế tắc nhưng không làm a/h
đến hiệu suất của hệ thống
Xử lý bế tắc:
- Kết thúc tất cả các tiến trình đang ở trạng thái bế tắc
- Kết thúc lần lượt các tiến trình đang bế tắc cho đến bao giờ hết bế tắc
- Khôi phục các tiến trình về thời điểm trước khi xảy ra bế tắc và cho hoạt động lại
từ thời điểm đấy
- Lần lượt thu hồi lại tài nguyên của các tiến trình cho đến khi hết bế tắc
CHƯƠNG III: QUẢN LÝ BỘ NHỚ

1. ĐỊA CHỈ VÀ CÁC VẤN ĐỀ LIÊN QUAN


2. MỘT SỐ CÁCH TỔ CHỨC CỦA CHƯƠNG TRÌNH
3. PHÂN CHƯƠNG BỘ NHỚ
4. PHÂN ĐOẠN BỘ NHỚ
5. PHÂN TRANG BỘ NHỚ
6. BỘ NHỚ ẢO
1. ĐỊA CHỈ VÀ CÁC VẤN ĐỀ LIÊN QUAN
1.1. Yêu cầu đối với quản lý bộ nhớ
- quản lý bộ nhớ trống
- cấp phát bộ nhớ trống cho các tiến trình và giải phóng bộ nhớ đã cấp phát
- ngăn chặn việc truy cập trái phép tới các vùng bộ nhớ
- ánh xạ giữa địa chỉ lôgic và địa chỉ vật lý
1.2. Gán địa chỉ (sinh địa chỉ)
- Chương trình được viết trên ngôn ngữ bậc cao hoặc hợp ngữ
- Trong chương trình nguồn, địa chỉ được viết dưới dạng các tên (biến, hàm)
- Chương trình dịch biến đổi mã nguồn của từng mô đun (từng file mã nguồn)
thành mã máy và thay đổi tên thành địa chỉ tương đối, tính từ đầu mô đun
chương trình được dịch.
- Liên kết là quá trình kết hợp các mô đun chương trình thành chương trình
hoàn chỉnh, còn gọi là các mô đun tải được. Chương trình liên kết có thể gán
địa chỉ trong phạm vi toàn chương trình, thay vì trong từng mô đun như
chương trình dịch.
- OS đọc chương trình từ đĩa vào bộ nhớ và tạo ra tiến trình. Địa chỉ của tiến
trình trong bộ nhớ có thể thay đổi và không biết trước.
1.3. Địa chỉ logic và địa chỉ vật lí
- Địa chỉ logic – địa chỉ tương đối: địa chỉ được gán cho các lệnh và dữ liệu
không phụ thuộc vào vị trí cụ thể của tiến trình trong bộ nhớ. Toàn bộ địa chỉ
logic của chương trình tạo thành không gian nhớ logic của chương trình. Nếu
sử dụng bộ nhớ ảo, địa chỉ logic được gọi là địa chỉ ảo.
- Địa chỉ vật lý – địa chỉ tuyệt đối: là địa chỉ chính xác trong bộ nhớ, được cấp
phát cho các tiến trình khi thực hiện
- MMU (Memory Management Unit) – khối ánh xạ bộ nhớ: chịu trách nhiệm
ánh xạ địa chỉ logic sang địa chỉ vật lý.
2. MỘT SỐ DẠNG CẤU TRÚC CỦA CHƯƠNG TRÌNH
2.1. Cấu trúc tĩnh (cấu trúc tuyến tính)
- Sau khi biên dịch, các modul được tập hợp thành một chương trình hoàn
thiện, chứa đầy đủ mọi thông tin để có thể thực hiện (trừ dữ liệu vào);

M0 M1 M2 M3 M4 M5

-- Ưu điểm: đơn giản, thời gian thực hiện nhanh vì mọi công việc chuẩn bị
đều được thực hiện trước. Có tính lưu động cao, dễ dàng sao chép chương
trình tới các hệ thống khác có cùng tập mã lệnh mà vẫn duy trì khả năng
thực hiện
-- Nhược điểm: lãng phí bộ nhớ
2.2. Cấu trúc động
- Các modul chương trình được biên tập riêng biệt.
- Khi thực hiện chương trình, hệ thống chỉ cần tải modul gốc vào bộ nhớ.
Trong quá trình thực hiện, cần tới modul nào (đã đăng ký với hệ thống để thực
hiện) thì hệ thống cấp phát không gian nhớ và nạp tiếp modul đó. Khi hoạt
động xong thì giải phóng modul khỏi bộ nhớ, thu hồi không gian nhớ.
M0
M0 M1 M2
M0 M3 M4
M0 M5

- Ưu điểm: nếu quản lý bộ nhớ và tổ chức chương trình tốt sẽ tiết kiệm bộ nhớ;
- Nhược điểm: vì trách nhiệm nạp và xoá các modul là của người dùng nên các
câu lệnh nạp, xoá phải được nêu ngay trong chương trình nguồn => kích thước
chương trình nguồn lớn và người dụng cần phải nắm vững cấu trúc chương
trình và các công cụ điều khiển bộ nhớ của hệ điều hành.
2.3. Cấu trúc Overlay
Các modul chương trình sau khi biên dịch được chia thành các mức:
Mức 0: chứa modul gốc dùng để nạp chương trình
Mức 1: chứa các modul được gọi bởi mức 0
Mức 2: chứa các modul được gọi bởi mức 1
.....
Mức i: chứa các modul được gọi bởi mức i-1

Bộ nhớ cũng được chia thành các mức tương ứng

Mức 0: 80Kb M0
(80Kb)
Mức 1: 90Kb M1 M2
(50Kb) (90Kb)
Mức 2: 100Kb M3 M4 M5
(50Kb) (100Kb) (70 Kb)
- Chương trình nguồn được viết và biên dịch như các cấu trúc khác tạo thành các
modul chương trình.
- Người dùng cung cấp thông tin về các mức cho trình biên dịch thông qua sơ đồ
Overlay. Modul gốc được lưu trữ trong một file chương trình riêng. Khi thực
hiện, modul gốc được tải vào bộ nhớ như chương trình có cấu trúc tuyến tính,
sau đấy cần đến modul nào hệ thống sẽ tìm kiếm trong sơ đồ Overlay và nạp vào
bộ nhớ ở mức tương ứng.
- Cấu trúc Overlay, thông thường không xét tới các lời gọi đồng mức.
Ưu điểm: cấu trúc Overlay có tính chất tải động do đó cho phép sử dụng bộ
nhớ nhiều hơn phần bộ nhớ mà hệ thống dành cho chương trình.
- So với cấu trúc động, cấu trúc Overlay chỉ đòi hỏi người sử dụng cung cấp
những thông tin đơn giản và quan trong nhất là không gắn cố định cấu trúc vào
chương trình nguồn.
Nhược điểm: cấu trúc Overlay vẫn yêu cầu người sử dụng cung cấp thông tin
phụ (mặc dù chỉ là các thông tin đơn giản). Hiệu quả tiết kiệm bộ nhớ vẫn phụ
thuộc cách tổ chức, bố trí các modul của chương trình. Chỉ cần một vài modul
có kích thước lớn ở các mức overlay khác nhau thì hiệu quả sử dụng bộ nhớ sẽ
giảm hẳn
2.4. Tải trong quá trình thực hiện
Kỹ thuật tải động: không tải toàn bộ chương trình vào bộ nhớ cùng lần. Khi có
lời gọi hàm, chương trình sẽ kiểm tra xem hàm có trong bộ nhớ chưa, nếu chưa
chương trình tải sẽ được gọi để tải hàm vào bộ nhớ, ánh xạ địa chỉ hàm vào
không gian nhớ chung của chương trình và thay đổi bảng địa chỉ ghi lại các ánh
xạ đó
Việc kiểm tra và tải các hàm do chương trình người dùng đảm nhiệm. Hệ điều
hành không kiểm soát quá trình tải mà chỉ cung cấp các hàm phục vụ việc tải
các mô đun.
2.5. Liên kết động và thư viện dùng chung
Hàm thư viện: là các hàm được dùng chung cho nhiều chương trình.
Trong liên kết truyền thống (liên kết tĩnh), các hàm thư viện được liên kết luôn
vào chương trình chính => tăng không gian chiếm dụng bộ nhớ của chương
trình.
Kỹ thuật liên kết động: chỉ liên kết thư viện vào chương trình trong thời gian
thực hiện bằng cách chèn một đoạn mã nhỏ vào vị trí của hàm thư viện. Đoạn
mã này chứa thông tin về mô đun thư viện như: trong thư viện nào, vị trí (địa
chỉ) mà mô đun đó chiếm trong không gian địa chỉ của chương trình.
3. PHÂN CHƯƠNG BỘ NHỚ (PARTITIONING)
- Hệ điều hành chia bộ nhớ thành các phần liên tục gọi là chương (partition)
- Mỗi tiến trình được cấp 1 chương bộ nhớ
- Quá trình phân chia bộ nhớ thành chương gọi là phân chương bộ nhớ hay
cấp phát vùng nhớ liên tục.
3.1. Phân chương cố định
- Bộ nhớ được phân thành những chương có kích thước cố định ở những vị
trí cố định, mỗi chương chứa được 1 tiến trình.
- Kích thước chương:
Kích thước chương bằng nhau: không mềm dẻo, gây nhiều bất cập trong sử
dụng bộ nhớ. Dẫn đến hiện tượng phân mảnh trong (internal fragmentation).

Kích thước chương không bằng nhau: Các tiến trình được sắp xếp trong
hàng đợi chờ đến lượt được cấp chương bộ nhớ.
2 cách phân chương:
Phân chương nhỏ nhất có thể chứa tiến trình Mỗi chương có một hàng đợi
riêng. Tiến trình có kích thước phù hợp với chương nào sẽ nằm trong hàng đợi
của chương đó.
Ưu điểm: cho phép giảm tối thiểu phân mảnh trong và do đó tiết kiệm được bộ
nhớ
Nhược điểm: có thể có những thời điểm hàng đợi ở 1 chương lớn trống, và ở
chương nhỏ có nhiều tiến trình đang đợi, trong khi đó có thể tải các tiến trình
nhỏ này vào chương lớn hơn và chạy.
Sử dụng một hàng đợi cho tất cả các tiến trình:
- Tất cả các tiến trình được xếp vào chung 1 hàng đợi
- Khi xuất hiện 1 chương trống, tiến trình nằm gần nhất và có kích thước phù
hợp với chương sẽ được tải vào
- Khi một tiến trình bị “chen hàng” vì kích thước không phù hợp, nó sẽ được
cộng thêm 1 điểm ưu tiên. Nếu tiến trình bị bỏ qua số lần tối đa theo quy định,
OS sẽ tìm khả năng tải tiến trình vào bộ nhớ sớm nhất có thể.
=> Phương pháp phân chương cố định mặc dù đơn giản nhưng gây ra vấn đề
phân mảnh và số lượng tiến trình trong bộ nhớ bị hạn chế bởi số lượng chương.
Hiện nay, phương pháp này hầu như không còn được sử dụng.
3.2. Phân chương động
- Kích thước và số lượng chương không cố định, có thể thay đổi.
- Khi được tải vào, tiến trình được cấp không gian bộ nhớ đúng bằng tiến trình
- Sau khi kết thúc tiến trình giải phóng bộ nhớ, trả lại vùng nhớ trống cho OS
- Hệ điều hành sử dụng một bảng quản lý không gian nhớ còn trống
Vấn đề phân mảnh ngoài (external fragmentation)
- Các vùng nhớ trống nhỏ nằm rải rác không ghép lại được với nhau, không đủ
kích thước để cấp phát cho tiến trình.

- Kỹ thuật dồn bộ nhớ: di chuyển các chương đang được cấp phát cho tiến trình
lại gần nhau, dồn các vùng nhớ trống thành vùng trống duy nhất. Kỹ thuật này
đòi hỏi một thời gian nhất định và làm thay đổi địa chỉ của các tiến trình trong
bộ nhớ.

- Kỹ thuật cấp phát bộ nhớ không liên tục:


- Vùng thích hợp đầu tiên (first fit): chọn vùng trống đầu tiên có kích thước bằng
hoặc lớn hơn => đơn giản, thực hiện nhanh nhất.
- Vùng thích hợp nhất (best fit): chọn vùng trống nhỏ nhất có kích có kích thước
bằng hoặc lớn hơn => các vùng trống sau khi cấp phát bé nhất
- Vùng không thích hợp nhất (worst fit): vùng trống lớn nhất so với kích thước
cần sẽ được cấp phát => vùng trống sau khi cấp phát có thể cấp được cho tiến
trình khác.
3.3. Phương pháp kề cận (buddy systems).
OS quản lý và cấp phát các vùng nhớ có kích thước là lũy thừa của 2.
Ví dụ
3.4. Trao đổi giữa bộ nhớ và đĩa (swapping)
Một chương trình ở trạng thái chờ trong một khoảng thời gian tương đối dài sẽ
được tạm thời chuyển ra bộ nhớ ngoài (swap out) để giải phóng cho chương
trình khác. Khi chương trình kết thúc trạng thái chờ, nó sẽ được nạp trở lại bộ
nhớ (swap in) từ vị trí tạm dừng để tiếp tục thực hiện.
- Khi bị trao đổi ra đĩa, hệ thống sẽ sao ra đĩa toàn bộ tiến trình ở trạng thái hiện
thời với giá trị dữ liệu, nội dung ngăn xếp, lưu lại con trỏ lệnh. Vì thế, khi được
nạp lại vào bộ nhớ, tiến trình có thể thực hiện tiếp từ vị trí bị dừng.
- Việc trao đổi thường được thực hiện khi một tiến trình đang ở trạng thái chờ
được cấp phát CPU.
- Nhờ kỹ thuật này, tổng không gian nhớ của tất cả tiến trình có thể lớn hơn so
với không gian nhớ vật lý do một số tiến trình được giữ tạm trên đĩa.
- Trong các hệ swapping, cần phải quan tâm tới thời gian chuyển đổi giữa các
tác vụ. Mỗi chương trình cần được cấp phát giờ CPU đủ lớn để không thấy rõ
sự chậm trễ do các thao tác swap gây ra. Nếu không, hệ thống sẽ dùng phần lớn
thời gian để chuyển đổi các chương trình vào/ ra bộ nhớ trong, như vậy giờ
CPU được sử dụng không hiệu quả
4. PHÂN ĐOẠN (SEGMENTATION) BỘ NHỚ
- Các modul chương trình được biên dịch riêng biệt.
- Thông tin về các modul chương trình được chứa trong bảng quản lý đoạn -
SCB (Segment Control Block)
- Mỗi phần tử trong SCB tương ứng với một modul của chương trình
- Ưu điểm: sơ đồ này không đòi hỏi công cụ tổ chức đặc biệt do đó có thể áp
dụng trên mọi hệ thống.

- Nhược điểm: hiệu quả sử dụng bộ nhớ phụ thuộc vào cấu trúc chương trình
của người sử dụng. Ngoài ra, sau một thời gian hoạt động, bộ nhớ bị phân
đoạn do đó cần phải tổ chức lại bộ nhớ bằng cách đưa bớt một số modul ra
ngoài.
5. PHÂN TRANG BỘ NHỚ (PAGING)
- Tương đồng với phân chương cố định.
- Bộ nhớ được chia thành các khối nhỏ kích thước cố định và bằng nhau gọi là
khung trang (page frame) được đánh số 0,1,2,3 … Không gian địa chỉ lôgic của tiến
trình cũng được chia thành các trang (page) có kích thước bằng kích thước của
khung. Tiến trình có thể được cấp các khung nằm tách rời nhau.
- Khi thực hiện chương trình, OS xây dựng một bảng quản lý trang (Page Control
Block - PCB) để xác lập mối quan hệ giữa trang vật lý và trang logic

 giảm phân mảnh trong, không có phân mảnh ngoài do mỗi khung trang đều
được sử dụng
5.1. Ánh xạ địa chỉ
-Bảng trang (page table) bao gồm các ô, mỗi ô tương ứng với một trang và
chứa số thứ tự hay địa chỉ cơ sở của khung chứa trang đó trong bộ nhớ.
- Mỗi tiến trình có 1 bảng trang riêng của mình.

Địa chỉ. Địa chỉ lô gic khi phân trang gồm hai phần: số thứ tự trang (p) và độ
dịch (o) của địa chỉ tính từ đầu trang đó. Số thứ tự trang được dùng để tìm ra ô
tương ứng trong bảng trang, từ bảng tìm được địa chỉ cơ sở của khung tương
ứng. Địa chỉ này được cộng vào độ dịch trong trang để tạo ra địa chỉ vật lý và
được chuyển cho mạch điều khiển bộ nhớ để truy cập.
Ưu điểm: sơ đồ phân trang làm tăng tốc độ truy nhập bộ nhớ, không bị
hiện tượng phân mảnh bộ nhớ (vì kích thước trang logic và vật lý bằng
nhau). Nếu còn bộ nhớ tự do thì kích thước phải chẵn trang do đó bao
giờ cũng đủ chỗ để đưa các trang mới vào. Tình trạng thiếu bộ nhớ chỉ
thực sự xảy ra khi tất cả các trang vật lý đã được sử dụng hết.
Nhược điểm: sơ đồ phân trang cần có thiết bị vật lý hỗ trợ công việc
định vị trang vì mỗi trang chương trình không phải là một modul hoàn
chỉnh nên không thể biến đổi địa chỉ và tự định vị theo địa chỉ đầu. Do
đó việc định vị trang phải được sự hỗ trợ của các công cụ ngoài
KẾT HỢP PHÂN ĐOẠN VÀ PHÂN TRANG
- Để kết hợp các ưu điểm của phân đoạn với các ưu điểm của phân trang, các
hệ thống tính toán hiện đại thường kết hợp cả hai phương pháp tổ chức bộ nhớ
này. Tiến trình bao gồm nhiều đoạn. Mỗi đoạn lại được phân trang. Mỗi tiến
trình có một bảng phân đoạn riêng và mỗi đoạn lại có bảng phân trang riêng
của mình.
- Để định vị ô nhớ trong phương pháp này, địa chỉ phải gồm ba phần (s,p,o).
Phần thứ nhất s là số thứ tự đoạn. s cho phép xác định khoản mục ứng với đoạn
trong bảng chia đoạn.
Khoản mục chứa con trỏ tới bảng chia trang cho đoạn đó. Số thứ tự trang p cho
phép xác định khung trang tương ứng. Độ dịch o sẽ được cộng vào địa chỉ
khung để tính ra địa chỉ vật lý.
6. BỘ NHỚ ẢO (Virtual Memory)
6.1 Khái niệm
- Bộ nhớ thực là bộ nhớ vật lý của máy tính, lệnh và dữ liệu chỉ được xử lý khi
nằm trong bộ nhớ thực.
- Bộ nhớ ảo là kỹ thuật cho phép sử dụng không gian nhớ lớn hơn không gian
nhớ thực, bằng cách không tải ngay toàn bộ chương trình vào bộ nhớ thực.
- Bộ nhớ ảo được sử dụng trong hầu hết các hệ điều hành hiện đại.
- Bộ nhớ ảo thường được xây dựng dựa trên phương pháp phân trang trong đó
các trang là đơn vị để nạp từ đĩa vào khi cần. Trong phương pháp kết hợp phân
đoạn với phân trang, trang cũng được sử dụng như đơn vị để xây dựng bộ nhớ
ảo. Phương pháp phân đoạn tương đối ít được sử dụng làm cơ sở cho bộ nhớ
ảo do các thuật toán đổi đoạn phức tạp hơn đổi trang, nguyên nhân chính do
kích thước đoạn không cố định.
6.2. Nạp trang
6.2.1 Nạp trang theo nhu cầu (demand paging)
- Phân trang theo yêu cầu là sự kết hợp giữa kỹ thuật phân trang và kỹ
thuật swapping
- Một chương trình được xem như một tập hợp các trang thường trú trên
bộ nhớ ngoài (thường là đĩa từ). Khi cần xử lý, chương trình sẽ được nạp
vào bộ nhớ trong nhưng thay vì nạp toàn bộ chương trình, hệ thống chỉ
nạp các trang cần thiết trong thời điểm hiện tại.
- Cơ chế phần cứng phân biệt các trang đang ở bộ nhớ trong và các trang ở
bộ nhớ ngoài:
Thêm 1 bít chứa giá trị 1 (0) vào bảng phân trang (1-đã tải vào bộ nhớ
trong; 0 – đang ở bộ nhớ ngoài). Khi tiến truy cập trang, bít này sẽ được
kiểm tra. Nếu giá trị của bit = 1, tiến trình hoạt động bình thường, nếu =0,
xảy ra hiện tượng lỗi trang (page fault).
Phần cứng làm nhiệm vụ ánh xạ địa chỉ trang sinh ra một ngắt và được
chuyển cho hệ điều hành để xử lý.
Xử lý lỗi trang:
Bước 1: Kiểm tra việc truy xuất tới bộ nhớ có hợp lệ hay không.
Nếu có, chuyển sang Bước 2
Ngược lại, kết thúc chương trình.
Bước 2: Tìm vị trí chứa trang cần truy xuất trên đĩa từ
Bước 3: Tìm một trang vật lý trống trong bộ nhớ chính
Nếu tìm thấy, chuyển sang Bước 4
Nếu không, chọn một trang đang sử dụng và chuyển nội dung trang này ra bộ
nhớ ngoài (lưu nội dung trang này vào đĩa từ), cập nhật bảng quản lý trang
tương ứng.
Bước 4: Chuyển trang muốn truy xuất từ bộ nhớ ngoài vào bộ nhớ
trong: nạp trang cần truy xuất vào trang vật lý trống, cập nhật nội dung bảng
quản lý trang.
Bước 5: Tái kích hoạt chương trình.
Nạp trang hoàn toàn theo nhu cầu
6.2.2 Nạp trang trước ((prepage): các trang chưa cần đến cũng được nạp vào
bộ nhớ
6.3. Đổi trang
Khi tiến trình có nhu cầu nạp trang nhưng trong bộ nhớ vật lý không còn
trang trống nữa, có thể có 3 lựa chọn:
- kết thúc tiến trình do không thoả mãn được nhu cầu bộ nhớ
- tạm trao đổi tiến trình ra đĩa, giải phóng toàn bộ không gian mà tiến trình
chiếm trong bộ nhớ và chờ tới khi thuận lợi (nhiều bộ nhớ trống hơn) mới
nạp
lại tiến trình vào bộ nhớ để thực hiện tiếp.
- Đổi trang.
Kỹ thuật đổi trang
Khi tiến trình cần nạp một trang mới, hệ điều hành kiểm tra các trang
trống. Nếu không còn trang trống trong bộ nhớ trong, OS sẽ thực hiện việc
thay thế trang tức là chọn một trang đang tồn tại ở bộ nhớ trong (không
được sử dụng tại thời điểm hiện tại) và đưa nó ra không gian swapping trên
đĩa từ để giải phóng một trang vật lý, dành chỗ nạp trang cần nạp vào bộ
nhớ.
Các bước đổi trang
Bước 1: Xác định trang cần nạp vào trên đĩa
Bước 2: Nếu có khung trống trống thì chuyển sang bước 4.
Bước 3:
a) Lựa chọn một khung để giải phóng. Khung được lựa chọn theo một
thuật toán hay chiến lược đổi trang nào đó.
b) Ghi nội dung khung bị đổi ra đĩa (nếu cần); cập nhật bảng trang và
bảng khung.
Bước 4: Tải trang cần nạp vào khung vừa giải phóng; cập nhật bảng
trang và bảng khung để thể hiện thay đổi này.
Bước 5: Thực hiện tiếp tiến trình từ điểm bị dừng trước khi đổi trang.
Các chiến lược (thuật toán) đổi trang
- Đổi trang tối ưu (OPT): hệ điều hành chọn trang nhớ sẽ không được dùng tới
trong khoảng thời gian lâu nhất để trao đổi. Nói cách khác, trang bị đổi là trang
có lần truy cập tiếp theo cách xa thời điểm hiện tại nhất.
- Vào trước, ra trước (FIFO): Trang được đọc vào bộ nhớ trước sẽ bị đổi ra
trước khi có yêu cầu đổi trang. Chiến lược này sử dụng hàng đợi FIFO: Khi
trang được nạp vào bộ nhớ, số thứ tự trang được thêm vào cuối hàng đợi. Khi
cần đổi trang, trang có số thứ tự ở đầu hàng đợi sẽ bị đổi
- Thay thế trang có lần sử dụng cuối cùng cách thời điểm hiện tại lâu nhất
(LRU): trang bị đổi là trang mà thời gian từ lần truy cập cuối cùng đến thời
điểm hiện tại là lâu nhất. Nói cách khác, đó là trang ít được truy cập trong thời
gian cuối nhất trong số các trang đang nằm trong bộ nhớ.
- Thuật toán đồng hồ (CLOCK): còn gọi là thuật toán cơ hội thứ hai (second
chance), là một cải tiến của thuật toán FIFO nhằm tránh thay thế những trang
mặc dù đã được nạp vào lâu nhưng hiện vẫn có khả năng được sử dụng. Khi
chọn trang, thuật toán đồng hồ dựa trên hai thông tin. Thứ nhất, đó là thứ tự nạp
trang vào bộ nhớ. Thứ hai, thông tin về việc gần đây trang có được truy cập hay
không.
CÂU HỎI ÔN TẬP CHƯƠNG

1. Phân biệt địa chỉ logic và địa chỉ vật lí


2. Hãy nêu các kiểu cấu trúc chương trình cùng với đặc điểm, ưu, nhược điểm
của chúng
3. Phân chương cố định và phân chương động? Ưu, nhược điểm?
4. Phân đoạn bộ nhớ là gì? Ưu, nhược điểm? Ví dụ
5. Phân trang bộ nhớ là gì? Ưu, nhược điểm? Ví dụ
6. Khái niệm bộ nhớ ảo và các kỹ thuật nạp trang?
7. Đổi trang là gì? Các bước thực hiện đổi trang?
8. Hãy nêu các thuật toán đổi trang và ý nghĩa của chúng.
CHƯƠNG IV: HỆ THỐNG FILE

1. KHÁI NIỆM
2. FILE
3. THƯ MỤC
4. CẤP PHÁT KHÔNG GIAN NHỚ CHO FILE
5. QUẢN LÝ KHÔNG GIAN TRÊN ĐĨA
6. TỔ CHỨC BÊN TRONG CỦA THƯ MỤC
7. ĐỘ TIN CẬY CỦA HỆ THỐNG FILE
8. BẢO MẬT CHO HỆ THỐNG FILE
1. KHÁI NIỆM
1.1. Hệ thống file:
- Từ phía người dùng, hệ thống file là tập hợp các file chứa dữ liệu hoặc chương
trình và hệ thống thư mục cho phép tổ chức và lưu trữ thông tin về các file đó.
- Từ phía hệ điều hành, với vai trò quản lý file và thư mục, các vấn đề được quan
tâm là phương pháp ánh xạ file lên các đĩa, tổ chức bên trong của file và thư mục,
cấu trúc dữ liệu dùng cho biểu diễn file.
- Hệ thống file gồm có các file, các thư mục và cấu trúc dữ liệu đặc thù cho hệ
thống file đó, cũng như phần mềm (mô đun của hệ điệu hành) quản lý các file và
cấu trúc dữ liệu đó.
- File là tập hợp các thông tin liên quan đến nhau được đặt tên và lưu trữ trên
thiết bị nhớ.
- Thuộc tính của file (attribute): thông tin mô tả file
Ví dụ: Tên file, dạng file, kích thước, địa chỉ, người tạo, người sở hữu, thời gian
truy cập, chỉnh sửa lần cuối, quyền truy cập …
Tên file: Tên tự do . Đuôi mở rộng
2. FILE
2.1. Truy cập file
2.1.1 Truy cập tuần tự
- Đa số các hệ điều hành cổ điển chỉ hỗ trợ cách truy cập này. Là phương pháp trong
đó thông tin chứa trong file được đọc hoặc ghi lần lượt từ đầu file, ví dụ theo từng
byte hay từng bản ghi.
- Một con trỏ được sử dụng để định vị ví trí hiện hành trong file. Thao tác đọc trả về
nội dung byte hoặc bản ghi ở vị trí hiện hành
- Phù hợp với thông tin lưu trên băng từ.
- Mặc dù các hệ điều hành ngày nay hỗ trợ những kiểu truy cập phức tạp và ưu việt
hơn song rất nhiều chương trình ứng dụng vẫn sử dụng cách truy cập này.
2.2.2 Truy cập trực tiếp
-Sử dụng phương pháp truy cập trực tiếp (direct access) hay truy cập tương đối: file
được xem như gồm các khối hay các bản ghi được đánh số. Việc đọc ghi các khối
được tiến hành theo thứ tự tùy ý.
Có hai cách để đọc ghi trực tiếp khối:
+ Cách 1: ví dụ lệnh READ n: n là số thứ tự của khối hay bản ghi cần đọc.
+ Cách 2: dùng lệnh định vị SEEK để nhảy tới vị trí cần đọc, sau đó tiến hành đọc
bản ghi, n có thể là số thứ tự tuyệt đối tính từ đầu file hoặc cuối file, hoặc cũng có
thể là khoảng cách tương đối tính từ vị trí hiện thời về phía đầu file hoặc cuối file.
2.2.3 Truy cập dựa trên chỉ số
-Truy cập tới bản ghi trong file không theo số thứ tự hoặc vị trí mà theo một
khoá ứng với bản ghi đó.
-Mỗi file có chứa một chỉ số riêng của mình gồm các khoá và con trỏ chỉ tới các
bản ghi trong file.
-Để truy cập tới bản ghi, ta tìm khoá tương ứng trong chỉ số, sau đó theo con trỏ
chỉ số để xác định bản ghi và tiến hành truy cập.
- Thường dùng cho các file cơ sở dữ liệu.
2.2. Thao tác với file
Tạo file: tạo 1 file trống chưa có dữ liệu, cấp cho file một vị trí kèm theo các
thông tin thuộc tính
Xóa file: giải phóng không gian của file trên đĩa, chỗ của file trong thư mục
Mở file: Thực chất là đọc các thuộc tính và vị trí của file trên đĩa vào bộ nhớ để
tăng tốc độ cho các thao tác đọc ghi tiếp theo.
Thao tác mở file bao gồm:
- Tìm file trong thư mục
- Đọc một phần thông tin file vào bảng chứa thông tin về các file đang mở (tên
file, quyền truy cập, chủ sở hữu file và vị trí các khối chứa nội dung file trên
đĩa …)
- Trả về chỉ số ứng với file trong bảng (số thứ tự của file trong bảng hoặc con
trỏ tới dòng chứa thông tin về file).
Với các hệ điều hành cho phép nhiều người dùng cùng sử dụng, nếu có nhiều
tiến trình cùng lúc yêu cầu mở file, OS sẽ xây dựng một bảng lưu trữ các thông
tin chung về file như tên, vị trí.v.v. và xây dựng riêng cho mỗi tiến trình một
bảng chứa thông tin riêng liên quan đến việc sử dụng file của tiến trình.
Đóng file
Khi đóng file, tất cả các thông số về file trong bảng nói trên sẽ bị xóa.
Ghi vào file:
Vị trí của file trên đĩa được xác định từ thông tin ghi trong thuộc tính của file.
Dữ liệu được ghi vào vị trí hiện hành, nếu vị trí hiện hành là cuối file, thông tin
sẽ được thêm vào và kích thước file tăng lên. Nếu không phải cuối file, thông
tin ở vị trí đó sẽ bị ghi đè lên. Lệnh ghi file cần cung cấp thông tin cần ghi.
Đọc từ file:
Thông tin đọc từ vị trí hiện hành. Lệnh đọc file cần cung cấp thông tin
về số lượng byte hoặc bản ghi cần đọc và nơi chứa dữ liệu được đọc từ file.
Định vị (seek)
Cho phép xác định vị trí hiện hành của file.
Đọc thuộc tính của file
Một số chương trình cần đến thao tác này trong quá trình làm việc.
Thay đổi thuộc tính của file
Một số thuộc tính của file cho phép đặt lại giá trị
Khóa file (lock):
- Một số OS cho phép tiến trình khóa file khi đang truy cập (không cho phép
tiến trình khác đồng thời truy cập
- Có thể khóa file theo từng loại thao tác.
3. THƯ MỤC (directory hay folder)

3.1. Khái niệm


- Đĩa logic
- Thư mục
- Khoản mục (entry)

3.2. Các thao tác với thư mục


- Tìm kiếm file:
- Tạo file
- Xóa file
- Đổi tên file
- Duyệt thư mục
3.3. Cấu trúc hệ thống thư mục
3.3.1 Thư mục một mức và hai mức
- Thư mục một mức là cách tổ chức đơn giản nhất, cả hệ thống có 1 thư mục
và tất cả các file nằm trong thư mục đấy.
Kiểu tổ chức này dẫn đến số lượng file trong thư mục rất lớn => có thể mắc lỗi
trùng tên file; thời gian tìm kiếm file lớn.
- Thư mục 2 mức: cấp cho mỗi người dùng 1 thư mục (quản trị hệ thống). Cách
phân chia file độc lập như vậy rất thuận tiện khi người sử dụng làm việc độc lập
với nhau. Hệ thống có thể cho phép hoặc không cho phép người dùng truy cập
đến thư mục khác.
Nếu cho phép: người dùng khi truy cấp thư mục của người khác cần cung cấp
tên file và địa chỉ (đường dẫn);
Ngoài ra, có 1 số file các file dùng chung như file hệ thống, file tiện ích …
Trong cấu trúc này OS sao các file này vào từng thư mục người dùng => chiếm
dụng bộ nhớ.
3.3.2 Cấu trúc cây

- Để phân biệt khoản mục của file với khoản mục chỉ tới thư mục con, thường
sử dụng một bit đặc biệt, nếu bit này bằng 1, thì đó là khoản mục của thư mục
mức dưới, nếu bằng 0, đó là khoản mục của file.
- Thư mục (thư mục con) được lưu trên đĩa như 1 file thông thường, nhưng lời
gọi hệ thống đối với thư mục khác đối với file.
3.3.3 Cấu trúc đồ thị không tuần hoàn
- Acyclic graph
- Thư mục và file có thể đồng thời
Thuộc về các thư mục
- Cách triển khai: tạo liên kết đến
File hoặc thư mục dùng chung
hoặc tạo bản sao của thư mục (file)
cần chia sẻ và lưu vào các thư mục
hác nhau (OS cần đảm bảo tính
đồng bô và nhất quán của chúng)
 mềm dẻo hơn nhưng phức tạp hơn

cấu trúc dạng cây nhiều


4. CẤP PHÁT KHÔNG GIAN NHỚ CHO FILE
- Sector – khối nhớ: đơn vị thông tin nhỏ nhất mà chương trình điều khiển đĩa
(disk driver) cho phép đọc hoặc ghi.
- Khối vật lý - khối nhớ do chương trình điều khiển đĩa xác định
- Khối logic: kết hợp 1 hoặc nhiều khối vật lí. Là đơn vị đơn vị thông tin nhỏ
nhất mà hệ điều hành cấp phát cho file và là đơn vị nhỏ nhất cho phép đọc từ
đĩa hoặc ghi ra đĩa.
4.1. Cấp phát liên tục
- Mỗi file được cấp một số khối liên tục
- Vị trí của file được xác định bởi vị trí của
khối đầu tiên và độ dài hoặc số khối của
File đó.
=> Ưu điểm: Truy cập đơn giản, tiết kiệm time
 Nhược điểm: khó tìm không gian nhớ đảm
bảo để cấp phát cho file;
Gây phân mảnh ngoài.
Cần biết kích thước của file trước khi tạo file.
4.2. Sử dụng danh sách kết nối (linked list)
Các khối của một file được kết nối thành 1 danh sách. Mỗi khối chứa con trỏ
đến khối tiếp theo bằng cách sử dụng một số byte ở đầu khối.
Vị trí của file được xác định bởi con trỏ thư mục đến khối đầu tiên của file.
Khi mới tạo file, con trỏ này có giá trị nil (dấu hiệu kết thúc file và có thể có
các giá trị khác nhau tuỳ vào hệ thống cụ thể), các khối mới cấp được thêm
vào cuối danh sách.
=> Giải quyết được các vấn đề của cấp phát liên tiếp (không tạo ra phân
mảnh ngoài, không cần biết trước kích thước của file)
=> Nhược điểm:
- Chỉ cho phép truy cập tuần tự
- Tốc độ truy cập thấp (các khối nằm rải rác
nên cần di chuyển nhiều khi truy câp)
- Kết nối giữa các khối không đảm bảo tính
toàn vẹn và độ tin cậy
4.2. Sử dụng danh sách kết nối trên bảng chỉ số
- Trong bảng chỉ số mỗi ô ứng với một khối của đĩa. Con trỏ tới khối tiếp theo
của file không chứa ngay trong khối nữa mà được chứa trong ô tương ứng của
bảng. Mỗi đĩa logic có 1 bảng chỉ số lưu ở vị trí xác định, thường ở đầu đĩa.
- Cho phép truy cập trực tiếp: thay vì đọc tất cả các khối nằm trước khối cần
truy cập, chỉ cần đi theo chuỗi con trỏ chứa trong bảng.
4.2. Sử dụng khối chỉ số (Index block hay Index node)
- Mỗi file có một mảng riêng của mình chứa trong khối chỉ số (I-node).
I-node chứa thuộc tính của file và vị trí các khối của file trên đĩa. Ô thứ i của
mảng chứa con trỏ tới khối thứ i của file. Khi mới tạo file, tất cả các ô này có
giá trị nil. Để thêm khối mới vào file, khối được lấy từ danh sách các khối
trống, sau đó địa chỉ khối được thêm vào ô tương ứng trong chỉ số
- Để xác định khối chỉ số ứng với file, khoản mục của file trong thư mục chứa
con trỏ tới khối chỉ số này. Sau khi xác định được khối chỉ số tương ứng, khối
này có thể được đọc vào và cache trong bộ nhớ (ví dụ khi mở file) để giảm thời
gian cho thao tác đọc ghi file tiếp theo.
=> ưu, nhược điểm cũng như danh sách kết nối trên bảng chỉ số.
5. QUẢN LÝ KHÔNG GIAN ĐĨA
- Lựa chọn kích thước khối:
Kích thước khối lớn dễ gây phân mảnh trong;
Kích thước khối nhỏ tiết kiệm không gian nhờ giảm thiểu phân mảnh trong
nhưng mỗi file sẽ gồm nhiều khối, nếu chúng nằm rải rác thì tốc độ truy cập sẽ
giảm.
- Quản lý khối trống:
+ bảng bit (bit map) là một mảng một chiều. Mỗi ô của mảng có kích thước 1
bit và ứng với 1 khối nhớ trên đĩa. Khối đã được cấp phát có bit tương ứng là 0,
khối chưa được cấp phát có bit tương ứng là 1 (hoặc ngược lại).
+ danh sách kết nối: các khối trống được liên kết với nhau thành danh sách.
Mỗi khối trống chứa địa chỉ của khối trống tiếp theo. Địa chỉ khối trống đầu
tiên trong danh sách được lưu trữ ở một vị trí đặc biệt trên đĩa và được hệ điều
hành giữ trong bộ nhớ khi cần làm việc với các file.
+ danh sách vùng trống: căn cứ vào việc sau khi kết thúc tiến trình, một vùng
các khối trống liền nhau được giải phóng, OS lưu địa chỉ khối đầu tiên và số
lượng các khối sau đấy.
+ Một số hệ thống file không sử dụng các cấu trúc nói trên mà kết hợp luôn vào
cấu trúc quản lý không gian chung trên đĩa.
6. TỔ CHỨC BÊN TRONG CỦA THƯ MỤC
6.1. Danh sách
- Tổ chức thư mục dưới dạng danh sách các khoản mục
- Thao tác tìm kiếm trong thư mục thực hiện bằng cách duyệt lần lượt theo danh
sách
=> thời gian duyệt danh sách có thể rất lâu nếu thư mục chứa nhiều file
6.2. Cây nhị phân
- Cấu trúc dữ liệu có sắp xếp
- Khi thêm khoản mục mới vào thư mục, OS tạo khoản mục vào nhánh tương
ứng của cây
- Việc tìm kiếm theo nhánh cũng nhanh hơn nhiều so với theo danh sách
6.3. Bảng băm (hash table)
- Cấu trúc dữ liệu cho phép dùng hàm băm để tính vị trí của khoản mục trong thư
mục theo tên file.
- Thời gian tìm kiếm trong thư mục giảm xuống rất nhiều so với các cấu trúc
trên. Việc tạo và xoá file cũng được thực hiện đơn giản bằng cách tính vị trí của
khoản mục cần tạo hay xoá trong bảng băm.
=> Nhược điểm: hàm băm phụ thuộc vào kích thước của bảng băm do đó bảng
phải có kích thước cố định. Nếu số lượng khoản mục vượt quá kích thước chọn
cho bảng băm thì phải xây dựng lại hàm băm.
7. ĐỘ TIN CẬY CỦA HỆ THỐNG FILE
7.1. Phát hiện và loại trừ các khối hỏng
- Các khối hỏng trên đĩa cứng thường xuất hiện khi sản xuất, trên đĩa mềm xuất
hiện trong quá trình sử dụng => tránh ghi thông tin lên các khối này
2 cách xử lý:
+ OS tập trung tất cả các khối hỏng vào 1 file
+ OS dành riêng một số khối dự trữ để thay thế các khối hỏng
7.2. Sao lưu dự phòng (backup)
- Sao lưu toàn bộ
- Sao lưu bổ sung: lưu trữ thông tin về các lần lưu trữ file. Nếu sau lần lưu trữ
cuối file bị thay đổi thì file sẽ được sao lưu lại. Hệ điều hành quản lý việc sao
lưu bằng cách kiểm tra thời gian sao lưu cuối.
7.3. Tính toàn vẹn của hệ thống file
Hệ thống file chứa nhiều cấu trúc dữ liệu có liên kết với nhau, nếu các liên kết
này bị phá vỡ sẽ dẫn đến phá hỏng tính toàn vẹn.
Ví dụ: - 1 khối không có mặt trong danh sách khối trống, cũng không có trong
ds file
- 1 khối vừa có trong ds khối trống lại vừa có trong ds file.
-Kiểm tra tính toàn vẹn của khối.
Xây dựng 2 danh sách:
+ Danh sách khối trống
+ Danh sách file

- Đảm bảo tính toàn vẹn bằng giao tác (transaction)


Tập hợp các thao tác cần phải được thực hiện trọn vẹn cùng với nhau – mọi
thay đổi liên kết phải được thực hiện cùng nhau.
Toàn bộ trạng thái hệ thống file được OS ghi lại trong một file log (dạng file
nhật ký ghi lại thông tin về hệ thống theo thời gian). Mỗi khi thực hiện giao
tác OS kiểm tra xem giao tác có được thực hiện trọn vẹn không. Nếu giao tác
không được thực hiện trọn vẹn do sự cố, OS sẽ sử dụng thông tin từ log để
khôi phục hệ thống file về trạng thái không lỗi, trước khi bắt đầu thực hiện
giao tác.
8. BẢO MẬT CHO HỆ THỐNG FILE
8.1. Sử dụng mật khẩu
- Mỗi file có 1 mật khẩu riêng cho các thao tác truy cập:
- Nhược điểm: lưu mật khẩu chiếm không gian nhớ và thời gian nếu số lượng
file và thư mục lớn, việc đòi hỏi cung cấp mật khẩu cũng bất tiện và mất thời
gian.
8.2. Danh sách quản lý truy cập
- Mỗi file sẽ được gắn một danh sách đi kèm gọi là danh sách quản lý truy cập
ACL (Access Control List): chứa thông tin định danh người dùng và các quyền
người dùng đó được thực hiện với file. Danh này thường được lưu trữ như một
thuộc tính của file hoặc thư mục.
- ACL thường được sử dụng cùng với cơ chế đăng nhập
Các quyền thông dụng: đọc, ghi, thay đổi, xóa, thay đổi quyền sở hữu …
CÂU HỎI ÔN TẬP CHƯƠNG

1. Hệ thống file là gì? Hãy nêu các phương pháp truy cập file và đặc điểm của
chúng.
2. Các cấu trúc thư mục thông dụng và đặc điểm của chúng.
3. Trình bày khái niệm cấp phát không gian nhớ cho file.
4. Các phương pháp cấp phát không gian nhớ cho file.
5. Trình bày các phương pháp xây dựng thư mục

You might also like