TRƯỜNG ĐẠI HỌC ĐỒNG THÁP KHOA SƢ PHẠM TOÁN – TIN

BÀI GIẢNG

HỆ ĐIỀU HÀNH

Biên soạn : Ths. Nguyễn Thị Thùy Linh

LƢU HÀNH NỘI BỘ

ĐỒNG THÁP 11/2013

LỜI NÓI ĐẦU

Tài liệu đƣợc biên soạn chủ yếu dựa trên kiến thức tích lũy trong giảng dạy nhiều

năm về môn học của tác giả và cũng đƣợc tham khảo từ các nguồn về lý thuyết hệ điều

hành và nguyên lý hệ điều hành của các trƣờng Đại học Huế, Đại học Cần Thơ…

Tổng quan:

Bài giảng giới thiệu về các thế hệ hệ điều hành, các thành phần của hệ điều hành,

chức năng của hệ điều hành, các dịch vụ mà hệ điều hành cung cấp. Sau đó nghiên cứu

chi tiết chức năng các thành phần bên trong hệ điều hành: Quản lý tiến trình, Quản lý

bộ nhớ, Đồng bộ hóa tiến trình, Quản lý Deadlock, Quản lý và cài đặt hệ thống tập tin,

Quản lý đĩa.

Mục tiêu:

Kiến thức:

- Hiểu đƣợc vai trò của hệ điều hành và cơ chế hoạt động của hệ điều hành

- Hiểu các kiến trúc thiết kế hệ điều hành.

- Hiểu các chiến lƣợc trong việc thiết kế các hệ điều hành hiện đại.

- Biết những vấn đề phát sinh trong quá trình thiết kế hệ điều hành cũng nhƣ

những tiếp cận khác nhau đƣợc dùng để phân tích và giải quyết những vấn đề

đó.

- Xem xét những chiến lƣợc hệ điều hành phổ biến và cách chúng tác động đến

những dịch vụ của các hệ điều hành hiện đại.

- Vận dụng các chiến lƣợc trong việc thiết kế hệ điều hành để mô phỏng lại trên

máy tính.

Kỹ năng:

- Rèn luyện kỹ năng phân tích và giải quyết các bài toán về chiến lƣợc trong việc

thiết kế các thành phần bên trong hệ điều hành.

- Rèn luyện tƣ duy giải thuật, kỹ năng lập trình kỹ thuật mô phỏng.

1

- Kỹ năng làm việc nhóm, tự học, tự nghiên cứu.

Thái độ:

- Nhận thức đúng đắn về phía ngƣời thiết kế hệ điều hành trong hệ thống máy tính.

- Nâng cao ý thức tự học, tự nghiên cứu để mở rộng kiến thức.

Đối tượng:

Tài liệu dành cho ngƣời học cao đẳng và đại học chuyên ngành công nghệ thông

tin.

Yêu cầu:

Ngƣời học cần phải hiểu cấu trúc dữ liệu và giải thuật kèm theo ngôn ngữ lập

trình Pascal hoặc một trong các ngôn ngữ C/C++, Java, C#. Ngƣời học cũng cần biết

cấu trúc logic của một máy tính nói riêng cũng nhƣ mạng máy tính nói chung.

Nội dung: Tài liệu bao gồm có 5 chƣơng:

Chƣơng 1: Tổng quan về hệ điều hanh

Chƣơng 2: Quản lý tiến trình

Chƣơng 3: Quản lý bộ nhớ

Chƣơng 4: Quản lý tập tin và đĩa

2

Chƣơng 5: Quản lý hệ thống nhập/xuất

MỤC LỤC LỜI NÓI ĐẦU ............................................................................................................................. 1 MỤC LỤC ................................................................................................................................... 3 DANH MỤC THUẬT NGỮ VIẾT TẮT .................................................................................... 6 CHƯ NG 1: TỔNG QU N VỀ HỆ ĐIỀU HÀNH ................................................................ 8 1.1. MỤC TIÊU ....................................................................................................................... 8 1.2. KHÁI NI M VỀ H ĐIỀU HÀNH ................................................................................. 8 1.3. CHỨC N NG H ĐIỀU HÀNH ................................................................................... 10 1.4. PH N LOẠI H ĐIỀU HÀNH ..................................................................................... 12 1.4.1. Hệ điều hành xử lý theo lô đơn chƣơng .................................................................. 12 1.4.2. Hệ thống xử lý theo lô đa chƣơng ........................................................................... 14 1.4.3. Hệ thống chia s thời gian ....................................................................................... 15 1.4.4. Hệ thống đa xử lý hệ thống song song .................................................................. 15 1.4.5. Hệ thống phân tán .................................................................................................... 17 1.4.6. Hệ thống xử lý thời gian thực .................................................................................. 18 1.4.7. Hệ xách tay .............................................................................................................. 18 1.5. L CH S PHÁT TRIỂN CỦA H ĐIỀU HÀNH ......................................................... 19 1.5.1. Thế hệ 1 1945 – 1955)............................................................................................ 19 1.5.2 Thế hệ 2 1955 – 1965)............................................................................................. 20 1.5.3. Thế hệ 3 1965 – 1980)............................................................................................ 20 1.5.4. Thế hệ 4 1980-nay ) ............................................................................................... 21 1.6. CẤU TR C CỦA H ĐIỀU HÀNH ............................................................................. 21 1.6.1. Các thành phần bên trong hệ điều hành ................................................................... 21 1.6.2. Các dịch vụ của hệ điều hành .................................................................................. 26 1.6.3. Lời gọi hệ thống ...................................................................................................... 27 1.6.4. Cấu trúc hệ điều hành .............................................................................................. 28 1.7. MỘT S H ĐIỀU HÀNH HI N ĐẠI ......................................................................... 38 1.7.1. Hệ điều hành Windows95........................................................................................ 38 1.7.2. Hệ điều hành Windows 2000................................................................................... 39 1.7.3. Hệ điều hành Linux ................................................................................................. 40 1.7.4. Hệ điều hành Windows 7......................................................................................... 41 1.7.5. Hệ điều hành Windows 8......................................................................................... 42 1.7.6. Hệ điều hành Android ............................................................................................. 42 1.8. TÓM TẮT ...................................................................................................................... 43 Câu hỏi ôn tập ........................................................................................................................ 44 TÀI LI U THAM KHẢO ..................................................................................................... 44 CHƯ NG 2: QUẢN L TIẾN TR NH ................................................................................ 45 2.1. MỤC TIÊU ..................................................................................................................... 45 2.2. TỔNG QUAN VỀ TIẾN TRÌNH ................................................................................... 45 2.2.1. Nhu cầu xử lý đồng hành ......................................................................................... 45 2.2.2. Khái niệm tiến trình ................................................................................................. 46 2.2.3. Phân loại tiến trình ................................................................................................... 49 2.2.4. Tiểu trình Thread và mô hình đa tiểu trình Multithread .................................... 51 2.3. TỔ CHỨC QUẢN LÝ TIẾN TRÌNH ............................................................................ 54 2.3.1. Các trạng thái của tiến trình ..................................................................................... 54 2.3.2. Chế độ xử lý của tiến trình ...................................................................................... 60

3

2.3.3. Cấu trúc dữ liệu khối quản lý tiến trình ................................................................... 61 2.4. THAO TÁC TRÊN TIẾN TRÌNH ................................................................................. 62 2.4.1. Tạo lập tiến trình ..................................................................................................... 63 2.4.2. Kết thúc tiến trình .................................................................................................... 64 2.4.3. Khi tiến trình thay đổi trạng thái ............................................................................. 64 2.5. CẤP PHÁT TÀI NGUYÊN CHO TIẾN TRÌNH ........................................................... 65 2.6. Đ NH THỜI BIỂU CPU ................................................................................................ 66 2.6.1. Giới thiệu ................................................................................................................. 67 2.6.2. Tổ chức định thời biểu ............................................................................................. 70 2.6.3. Các chiến lƣợc định thời biểu CPU ......................................................................... 75 2.7. ĐỒNG BỘ HÓA TIẾN TRÌNH ..................................................................................... 87 2.7.1. Liên lạc giữa các tiến trình ...................................................................................... 87 2.7.2. Các cơ chế thông tin liên lạc.................................................................................... 88 2.7.3. Nhu cầu đồng bộ hóa synchronisation .................................................................. 95 2.7.4. Tài nguyên găng và đoạn găng ................................................................................ 96 2.7.5. Đồng bộ tiến trình qua đoạn găng ......................................................................... 102 2.8. TẮC NGHẼN VÀ CH NG TẮC NGHẼN ................................................................. 125 2.8.1. Khái niệm tắc nghẽn .............................................................................................. 125 2.8.2. Đặc điểm của Deadlock ......................................................................................... 128 2.8.3. Các phƣơng pháp xử lý deadlock .......................................................................... 134 2.9. TÓM TẮT .................................................................................................................... 151 Câu hỏi ôn tập ...................................................................................................................... 153 Bài tập .................................................................................................................................. 156 TÀI LI U THAM KHẢO ................................................................................................... 160 CHƯ NG 3: QUẢN L BỘ NHỚ ...................................................................................... 161 3.1. MỤC TIÊU ................................................................................................................... 161 3.2. NHI M VỤ QUẢN LÝ BỘ NHỚ ............................................................................... 161 3.3. KIẾN THỨC NỀN ....................................................................................................... 164 3.3.1. Một chƣơng trình qua nhiều bƣớc xử lý ................................................................ 164 3.3.2. Không gian địa chỉ luận lý và không gian địa chỉ vật lý ....................................... 166 3.3.3. Bộ quản lý bộ nhớ MMU .................................................................................... 167 3.3.4. Phủ lắp Overlay .................................................................................................. 167 3.3.5. Hoán vị .................................................................................................................. 168 3.4. QUẢN LÝ BỘ NHỚ CHÍNH ...................................................................................... 170 3.4.1. Bộ nhớ cấp phát liên tục ........................................................................................ 170 3.4.2. Cấp phát không liên tục ......................................................................................... 182 3.5. QUẢN LÝ BỘ NHỚ ẢO ............................................................................................. 202 3.5.1. Khái niệm bộ nhớ ảo.............................................................................................. 203 3.5.2. Cài đặt bộ nhớ ảo ................................................................................................... 204 3.5.3. Kỹ thuật bộ nhớ ảo ................................................................................................ 208 3.6. TÓM TẮT .................................................................................................................... 222 Câu hỏi ôn tập ...................................................................................................................... 224 Bài Tập ................................................................................................................................ 225 TÀI LI U THAM KHẢO ................................................................................................... 230 CHƯ NG 4: QUẢN L TẬP TIN VÀ ĐĨ ....................................................................... 231 4.1. MỤC TIÊU ............................................................................................................... 231 4.2. TỔNG QUAN VỀ QUẢN LÝ TẬP TIN VÀ ĐĨA ...................................................... 232 4.2.1. Tập tin và hệ thống quản lý tập tin ........................................................................ 232

4

4.2.2. Bảng danh mục và tập tin chia s .......................................................................... 235 4.2.3. Quản lý không gian đĩa .......................................................................................... 238 4.2.4. Quản lý các block chứa tập tin trên đĩa ................................................................. 241 4.2.5. An toàn trong quản lý tập tin ................................................................................. 246 4.2.6. Hiệu suất hệ thống tập tin ...................................................................................... 251 4.3. MỘT S KHÁI NI M DÙNG TRONG QUẢN LÝ ĐĨA ........................................... 252 4.4. CÁC ĐIỀU KHIỂN H TH NG TẬP TIN ................................................................ 255 4.5. CÁC H TH NG TẬP TIN ĐƢỢC S DỤNG TRÊN CÁC H ĐIỀU HÀNH HI N NAY 257

4.5.1. FAT12, FAT16, FAT32 ........................................................................................ 257 4.5.2. NTFS ..................................................................................................................... 258 4.5.3. CDFS ..................................................................................................................... 259 4.5.4. UDF ....................................................................................................................... 259 4.6. TỔ CHỨC ĐĨA CỦA MS-DOS ................................................................................... 259 4.6.1. FDISK .................................................................................................................... 259 4.6.2. Tổ chức logic của đĩa ............................................................................................. 261 4.7. QUẢN LÝ TẬP TIN TRÊN ĐĨA CỦA MS-DOS ....................................................... 265 4.7.1. Boot sector ............................................................................................................. 266 4.7.2. File Allocation Table (FAT) .................................................................................. 268 4.7.3. Root Directory Bảng thƣ mục gốc ...................................................................... 274 4.7.4. Thƣ mục con Subdirectory .................................................................................. 279 4.8. TỔ CHỨC LƢU TRỮ TẬP TIN TRÊN ĐĨA CD_ROM ............................................ 281 4.8.1. Hệ thống tập tin ISO 9660 ..................................................................................... 282 4.8.2. Mở rộng Rock Ridge ............................................................................................. 283 4.8.3. Mở rộng Joliet ....................................................................................................... 283 4.9. TÓM TẮT .................................................................................................................... 284 Câu hỏi ôn tập ...................................................................................................................... 286 Bài tập .................................................................................................................................. 286 TÀI LI U THAM KHẢO ................................................................................................... 287 CHƯ NG 5: QUẢN L HỆ THỐNG NHẬP/XUẤT ....................................................... 291 5.1. MỤC TIÊU ................................................................................................................... 291 5.2. CÁC KHÁI NI M CƠ BẢN ........................................................................................ 291 5.3. PHẦN CỨNG NHẬP/XUẤT ....................................................................................... 292 5.3.1. Thiết bị I/O ............................................................................................................ 292 5.3.2. Tổ chức của chức năng I/O .................................................................................... 293 5.4. GIAO DI N NHẬP/XUẤT ỨNG DỤNG ................................................................... 299 5.5. H TH NG CON NHẬP/XUẤT CỦA NH N KERNEL I/O SUBSYTEM .......... 302 5.5.1. Định thời biểu nhập/xuất ....................................................................................... 302 5.5.2. Vùng đệm .............................................................................................................. 303 5.5.3. Vùng lƣu trữ .......................................................................................................... 303 5.5.4. Vùng chứa .............................................................................................................. 304 5.5.5. Quản lý lỗi ............................................................................................................. 304 5.5.6. Cấu trúc dữ liệu nhân ............................................................................................. 305 5.6. CHUYỂN NHẬP/XUẤT TỚI HOẠT ĐỘNG PHẦN CỨNG ..................................... 305 5.7. N NG LỰC ................................................................................................................. 308 5.8. TÓM TẮT .................................................................................................................... 310 Câu hỏi ôn tập ...................................................................................................................... 311 Câu hỏi trắc nghiệm ............................................................................................................. 311

5

TÀI LI U THAM KHẢO ................................................................................................... 311

D NH MỤC THUẬT NGỮ VIẾT TẮT

K HIỆU NGHĨ

API CDFS THUẬT NGỮ Application Programming Interface CD-ROM File System

CLI CPU CRT CS CSDL DMA FAT FCFS FDD FIFO FSD HDD I/O device IC ISO Là hệ thống tập tin đƣợc đƣa ra để quản lý các tập tin, thƣ mục trên các đĩa CD_ROM. Cấm ngắt Bộ xử lý ng phóng điện tử chân không Miền găng, đoạn găng Truy xuất bộ nhớ trực tiếp Bảng cấp phát tập tin Đến trƣớc đƣợc phục vụ trƣớc Đĩa mềm Vào trƣớc ra trƣớc Điều khiển hệ thống tập tin Đĩa cứng Thiết bị nhập/xuất Mạch tích hợp Tổ chức tiêu chuẩn hoá quốc tế

KTCN LCNs LFU LRU LWP Clean Interrupt Processor Cathode-Ray Tube Critical Section Cơ sở dữ liệu Direct Memory Access File Allocation Table First-Come, First-Served Floppy Disk First In First Out File System Driver Hard disk Input/Output device Integrated(cid:13)C(cid:13)rcuit International Organization for Standardization Logical Cluster Numbers The Least Frequently Used Least-Recently-Used Lightweight Process

6

MEM MFT MFU MMU MS-DOS NRU NTFS OPT OS P PC Kiểm tra cập nhật Số hiệu Cluster logic Ít đƣợc dùng thƣờng xuyên nhất. Lâu nhất chƣa sử dụng Liên kết các tiểu trình của cùng một tiến trình Bộ nhớ Memory Master File Table Trang đƣợc sử dụng nhiều nhất The Most Frequently Used Memory Management Unit Đơn vị quản lý bộ nhớ Microsoft Disk Operrating System Hệ điều hành MS-DOS Không sử dụng gần đây Not Recently Used Hệ thống tập tin NTFS New Technology File System Tối ƣu hóa Optimal Hệ điều hành Operating System Tiến trình, quá trình Process Máy tính cá nhân Personal Computer

PCB PCT PDA PTBR RID Program Counter Process Control Block Page Control Table Personal Digital Assistant Page Table Base Register Resource Identification

ROM RR SCT SJF STBR Read Only Memory Round Robin Segment Control Table Shortest Job First Segment Table Base Register

STI STLR Setting Interrupt Segment Table Length Register Nghĩa khác: Bộ đếm chƣơng trình Khối điều khiển tiến trình Bảng trang Thiết bị kỹ thuật số hỗ trợ cá nhân Thanh ghi nền bảng trang Định danh của khối quản lý tài nguyên Bộ nhớ chỉ đọc Bảng phân đoạn Công việc ngắn nhất trƣớc Thanh ghi nền của bảng phân đoạn Mở ngắt Thanh ghi giới hạn của bảng phân đoạn

THE TLBs TSL UDF Technische Hogeschool Eindhoven Hệ điều hành THE Translation Look-aside Buffers Test and Set

7

UMA USER VCNs Bộ nhớ kết hợp Kiểm tra khóa Là hệ thống tập tin đƣợc đƣa ra để quản lý các đĩa từ/quang, chủ yếu là các đĩa DVD_ROM Truy xuất bộ nhớ đồng nhất Ngƣời dùng Số hiệu Cluster ảo Uniform Memory Access USER Virtual Cluster Numbers

CHƯ NG 1: TỔNG QU N VỀ HỆ ĐIỀU HÀNH

1.1. MỤC TIÊU

Sau khi học xong chƣơng này, ngƣời học nắm đƣợc các kiến thức sau:

- Hiểu chức năng của hệ điều hành trong hệ thống máy tính

- Biết phân loại hệ điều hành

- Biết hệ điều hành phát triển qua nhiều giai đoạn

- Các thành phần bên trong hệ điều hành

- Các dịch vụ mà hệ điều hành cung cấp

- Biết đƣợc cấu trúc các hệ điều hành

Bài học này cung cấp cho chúng ta một cái nhìn tổng quát về những nguyên lý cơ

bản của hệ điều hành. Chúng ta bắt đầu với việc xem x t mục tiêu và các chức năng

của hệ điều hành, sau đó phân loại chúng và tìm hiểu quá trình phát triển hệ điều hành

qua từng giai đoạn. Phân biệt các thành phần hệ thống và các thành phần bên trong hệ

điều hành. Thông qua các giai đoạn khác nhau chúng ta sẽ thấy cách thức mà những

thành phần của hệ điều hành đƣợc cải tiến cũng nhƣ các dịch vụ mà hệ điều hành cung

cấp, cuối cùng là khảo sát các cấu trúc khác nhau của các hệ điều hành.

1.2. KHÁI NIỆM VỀ HỆ ĐIỀU HÀNH

Hệ điều hành là một chƣơng trình hệ thống hay một hệ chƣơng trình đóng vai tr

trung gian giữa ngƣời dùng máy tính và phần cứng máy tính. Mục tiêu của hệ điều

hành là cung cấp một môi trƣờng thuận lợi để ngƣời dùng d dàng thực hiện các

chƣơng trình ứng dụng của họ trên máy tính và khai thác triệt để các chức năng phần

cứng máy tính.

Hệ điều hành là một phần quan trọng của hầu hết các hệ thống máy tính. Một hệ

thống máy tính thƣờng đƣợc chia làm bốn phần chính: phần cứng, hệ điều hành, các

chƣơng trình ứng dụng và ngƣời dùng (user).

Phần cứng bao gồm bộ xử lý, bộ nhớ, các thiết bị nhập xuất, đây là những tài

nguyên cơ bản của máy tính. Chương trình ứng dụng nhƣ các chƣơng trình dịch trong

8

ngôn ngữ lập trình Pascal, C,… , hệ thống cơ sở dữ liệu (Access, SQL), các chƣơng

trình tr chơi, và các chƣơng trình thƣơng mại. Các chƣơng trình này sử dụng tài

nguyên của máy tính để giải quyết các yêu cầu của ngƣời dùng. Hệ điều hành làm

nhiệm vụ điều khiển và phối hợp việc sử dụng phần cứng cho những ứng dụng khác

nhau của nhiều người dùng khác nhau bao gồm cả thiết bị đầu cuối, hệ thống máy tính

khác). Hệ điều hành cung cấp một môi trƣờng mà các chƣơng trình có thể làm việc hữu

Ngƣời dùng 1

Ngƣời dùng 2

Ngƣời dùng 3

Ngƣời dùng 4

hiệu trên đó.

Chƣơng trình Hợp ngữ Soạn thảo văn CSDL

dịch bản

Chƣơng trình ứng dụng

Hệ điều hành

Phần cứng

Hình 1.1. Mô hình trừu tượng của hệ thống máy tính

Hệ điều hành có thể đƣợc coi nhƣ là bộ phân phối tài nguyên của máy tính. Nhiều

tài nguyên của máy tính nhƣ thời gian sử dụng CPU, không gian bộ nhớ, vùng lƣu trữ

tập tin, thiết bị nhập xuất v.v… đƣợc các chƣơng trình yêu cầu để giải quyết vấn đề. Hệ

điều hành hoạt động nhƣ một bộ quản lý các tài nguyên và phân phối chúng cho các

chƣơng trình và ngƣời dùng khi cần thiết. Do có rất nhiều yêu cầu, hệ điều hành phải

giải quyết vấn đề tranh chấp và phải quyết định cấp phát tài nguyên cho những yêu cầu

theo thứ tự nào để hoạt động của máy tính là hiệu quả nhất. Một hệ điều hành cũng có

thể đƣợc coi nhƣ là một chƣơng trình kiểm soát việc sử dụng máy tính, đặc biệt khi

ngƣời dùng sử dụng các thiết bị nhập xuất.

Tuy nhiên, nhìn chung chƣa có định nghĩa nào là hoàn hảo về hệ điều hành. Hệ

điều hành tồn tại để giải quyết các vấn đề sử dụng hệ thống máy tính. Mục tiêu cơ bản

9

của nó là giúp cho việc thi hành các chƣơng trình d dàng hơn. Mục tiêu thứ hai là hỗ

trợ cho các thao tác trên hệ thống máy tính hiệu quả hơn. Mục tiêu này đặc biệt quan

trọng trong những hệ thống nhiều ngƣời dùng và trong những hệ thống lớn. Tuy nhiên

hai mục tiêu này cũng có phần tƣơng phản vì vậy thuyết về hệ điều hành à đứng về

phía người thiết ế ra hệ điều hành n n t p trung vào việc tối ưu h a việc s dụng tài

nguy n của máy tính à quan trọng nh t

1.3. CHỨC N NG HỆ ĐIỀU HÀNH

Để đạt mục tiêu trên hệ điều hành thực hiện hai chức năng chính nhƣ sau:

- Gi p một máy tính m rộng: Máy tính là một thiết bị vi điện tử, nó đƣợc cấu

thành từ các bộ phận nhƣ: Bộ xử lý, bộ nhớ, thiết bị nhập/xuất, BUS, ... Do đó, để

làm việc với máy tính ngƣời dùng phải hiểu đƣợc cơ chế hoạt động của các bộ phận

này và phải tác động trực tiếp vào nó, tất nhiên là dùng m máy ký số 0,1 . Điều

này là quá khó đối với ngƣời dùng. Để đơn giản hơn, hệ điều hành phải che dấu hết

các chi tiết phức tạp của phần cứng máy tính bởi một một máy tính m rộng. Máy

tính mở rộng này có đầy đủ các chức năng của một máy tính thực nhƣng đơn giản

và d sử dụng. Theo đó khi cần tác động vào máy tính thực ngƣời sử dụng chỉ cần

tác động vào máy tính mở rộng, mọi sự chuyển đổi thông tin điều khiển từ máy tính

mở rộng sang máy tính thực hoặc ngƣợc lại điều do hệ điều hành thực hiện. Mục

đích của chức năng này là: giúp ngƣời sử dụng khai thác các chức năng phần cứng

máy tính d dàng và hiệu quả hơn.

- Qu n tài nguy n hệ thống gồm Bộ xử lý, bộ nhớ, thiết bị nhập/xuất, tập tin,...

Đây là những tài nguyên cơ bản mà hệ điều hành cấp phát cho các tiến trình trong

khi điều khiển sự hoạt động của hệ thống.

Khi ngƣời dùng cần thực hiện một chƣơng trình hay khi một chƣơng trình cần

nạp thêm một tiến trình mới vào bộ nhớ thì hệ điều hành phải cấp phát không gian nhớ

cho chƣơng trình, tiến trình đó để chƣơng trình, tiến trình đó nạp đƣợc vào bộ nhớ và

hoạt động đƣợc. Trong môi trƣờng hệ điều hành đa nhiệm có thể có nhiều chƣơng

trình, tiến trình đồng thời cần đƣợc nạp vào bộ nhớ, nhƣng không gian lƣu trữ của bộ

nhớ có giới hạn, do đó hệ điều hành phải tổ chức cấp phát bộ nhớ sao cho hợp lý để

đảm bảo tất cả các chƣơng trình, tiến trình khi cần đều đƣợc nạp vào bộ nhớ để hoạt

động. Ngoài ra hệ điều hành c n phải tổ chức bảo vệ các không gian nhớ đ cấp cho

10

các chƣơng trình, tiến trình để tránh sự truy cập bất hợp lệ và sự tranh chấp bộ nhớ

giữa các chƣơng trình, tiến trình, đặc biệt là các tiến trình đồng thời hoạt động trên hệ

thống. Đây là một trong những nhiệm vụ quan trọng của hệ điều hành.

Trong quá trình hoạt động của hệ thống, đặc biệt là các hệ thống đa ngƣời dùng,

đa chƣơng trình, đa tiến trình, c n xuất hiện một hiện tƣợng khác, đó là nhiều chƣơng

trình, tiến trình đồng thời sử dụng một không gian nhớ hay một tập tin dữ liệu, chƣơng

trình nào đó. Trong trƣờng hợp này hệ điều hành phải tổ chức việc chia s và giám sát

việc truy xuất đồng thời trên các tài nguyên nói trên sao cho việc sử dụng tài nguyên có

hiệu quả nhƣng tránh đƣợc sự mất mát dữ liệu và làm hỏng các tập tin.

Trên đây là hai dẫn chứng điển hình để chúng ta thấy vai tr của hệ điều hành

trong việc quản lý tài nguyên hệ thống, sau này chúng ta sẽ thấy việc cấp phát, chia s ,

bảo vệ tài nguyên của hệ điều hành là một trong những công việc khó khăn và phức tạp

nhất. Hệ điều hành đ tốn nhiều chi phí cho công việc nói trên để đạt đƣợc mục tiêu:

Trong mọi trƣờng hợp tất cả các chƣơng trình, tiến trình nếu cần đƣợc cấp phát tài

nguyên để hoạt động thì sớm hay muộn nó đều đƣợc cấp phát và đƣợc đƣa vào trạng

thái hoạt động.

Các nhà thiết kế hệ điều hành luôn hƣớng tới việc phát triển một hệ điều hành

ngày càng thân thiện d sử dụng, c c u n n t c n c c c c n n sau1:

- Hệ điều hành cho phép thực hiện nhiều chương trình đồng thời trong môi

trường đa tác vụ (đa nhiệm). Hệ điều hành đa nhiệm bao gồm: Windows NT,

Windows 2000, Linux và OS/2. Trong hệ thống đa nhiệm, hệ điều hành phải xác

định khi nào thì một ứng dụng đƣợc chạy và mỗi ứng dụng đƣợc chạy trong

khoản thời gian bao lâu thì phải dừng lại để cho các ứng dụng khác đƣợc chạy.

- Hệ điều hành tự nạp n vào bộ nhớ: Quá trình nạp hệ điều hành vào bộ nhớ

đƣợc gọi là quá trình Booting. Chỉ khi nào hệ điều hành đ đƣợc nạp vào bộ nhớ

thì nó mới cho ph p ngƣời dùng giao tiếp với phần cứng. Trong các hệ thống có

nhiều ứng dụng đồng thời hoạt động trên bộ nhớ thì hệ điều hành phải chịu trách

nhiệm chia s không gian bộ nhớ RAM và bộ nhớ cache cho các ứng dụng này.

- Hệ điều hành và API (Application Programming Interface): là một tập các

1 Nguy n Kim Tuấn, Giáo trình lý thuyết hệ điều hành, ĐH Huế, 2004,Tr.3.

11

hàm/thủ tục đƣợc xây dựng sẵn bên trong hệ thống, nó có thể thực hiện đƣợc

nhiều chức năng khác nhau nhƣ shutdown hệ thống, đảo ngƣợc hiệu ứng màn

hình, khởi động các ứng dụng,… Hệ điều hành giúp cho chƣơng trình của ngƣời

dùng giao tiếp với API hay thực hiện một lời gọi đến các hàm/thủ tục của API.

- Nạp dữ iệu cần thiết vào bộ nhớ: Dữ liệu do ngƣời dùng cung cấp đƣợc đƣa

vào bộ nhớ để xử lý. Khi nạp dữ liệu vào bộ nhớ hệ điều hành phải lƣu lại địa

chỉ của bộ nhớ nơi mà dữ liệu đƣợc lƣu ở đó. Hệ điều hành phải luôn theo dõi

bản đồ cấp phát bộ nhớ, nơi dữ liệu và chƣơng trình đƣợc lƣu trữ ở đó. Khi một

chƣơng trình cần đọc dữ liệu, hệ điều hành sẽ đến các địa chỉ bộ nhớ nơi đang

lƣu trữ dữ liệu mà chƣơng trình cần đọc để đọc lại nó.

- Hệ điều hành bi n dịch các chỉ thị chương trình: Hệ điều hành phải đọc và giải

m các thao tác cần đƣợc thực hiện, nó đƣợc viết trong chƣơng trình của ngƣời

dùng. Hệ điều hành cũng chịu trách nhiệm sinh ra thông báo lỗi khi hệ thống

gặp lỗi trong khi đang hoạt động.

- Hệ điều hành qu n tài nguy n: Nó đảm bảo việc sử dụng thích hợp tất cả các

tài nguyên của hệ thống nhƣ là: bộ nhớ, đĩa cứng, máy in, …

1.4. PH N LOẠI HỆ ĐIỀU HÀNH

Có nhiều cách khác nhau để phân loại hệ điều hành, ở đây chúng tôi dựa vào cách

mà hệ điều hành thực hiện các công việc, các tác vụ, các tiến trình của ngƣời dùng để

phân loại hệ điều hành.

1.4.1. Hệ điều hành xử lý theo lô đơn chương

Hệ điều hành loại này thực hiện các tác vụ ần ượt theo những chỉ thị đ đƣợc

xác định trƣớc. Khi một tác vụ chấm dứt thì hệ thống sẽ tự động thực hiện tác vụ tiếp

theo mà không cần sự can thiệp từ bên ngoài, do đó hệ thống đạt tốc độ thực hiện cao.

Để thực hiện đƣợc điều này hệ điều hành phải có bộ giám sát thƣờng trực.

Bộ giám sát thường trực: Khi một công việc chấm dứt, hệ thống sẽ thực hiện

công việc kế tiếp mà không cần sự can thiệp của ngƣời lập trình, do đó thời gian thực

hiện sẽ mau hơn. Một chƣơng trình, c n gọi là bộ giám sát thƣờng trực đƣợc thiết kế để

giám sát việc thực hiện d y các công việc một cách tự động, chƣơng trình này luôn

12

luôn thƣờng trú trong bộ nhớ chính.

Hệ điều hành

Vùng chƣơng

trình ngƣời

dùng

Bản 1.1. S p xếp bộ nhớ của hệ thống x theo ô đơn chương

Nhập công việc

Môi trƣờng máy tính

Hàng đợi công việc

Kết quả

Môi trƣờng sử dụng

n 2. Cài đ t hàng đợi các công việc người d ng

Trong hệ điều hành này khi hệ thống cần thực hiện một công việc thì nó phải lƣu

chƣơng trình và dữ liệu của các công việc vào hàng đợi các công việc, sau đó sẽ thực

hiện lần lƣợt từng bộ chƣơng trình và dữ liệu của công việc tƣơng ứng trong hàng đợi

và cho ra lần lƣợt các kết quả. B ng 1 1 ở trên minh họa cho sự hoạt động của hệ thống

theo lô đơn chƣơng.

Với cách tổ chức hàng đợi công việc, thì hệ thống không thể thay đổi chƣơng

trình và dữ liệu của các công việc ngay cả khi chúng c n nằm trong hàng đợi, đây là

một hạn chế. Mặt khác trong quá trình thực hiện công việc nếu công việc chuyển sang

truy xuất trên thiết bị vào/ra thì CPU rơi vào trạng thái chờ điều này gây l ng phí thời

gian xử lý của CPU. Các thao tác khác của hệ điều hành xử lý theo lô đơn chƣơng:

- CPU và thao tác nh p xu t: CPU thƣờng hay nhàn rỗi do tốc độ làm việc của

các thiết bị nhập xuất thƣờng là thiết bị cơ chậm hơn rất nhiều lần so với các

thiết bị điện tử CPU . Cho dù là một CPU chậm nhất, nó cũng nhanh hơn rất

nhiều lần so với thiết bị nhập xuất. Do đó phải có các phƣơng pháp để đồng bộ

13

hóa việc hoạt động của CPU và thao tác nhập xuất.

- X off_ ine: Thay vì CPU phải đọc trực tiếp từ thiết bị nhập và xuất ra thiết bị

xuất, hệ thống dùng một bộ lƣu trữ trung gian. CPU chỉ thao thác với bộ phận

lƣu trữ trung gian này.

- Spool (simultaneous peripheral operation online : là đồng bộ hóa các thao tác

bên ngoài online. Cơ chế này cho ph p xử lý của CPU là online, sử dụng đĩa để

lƣu các dữ liệu nhập/xuất.

1.4.2. Hệ thống xử lý theo lô đa chương

Một trong những hạn chế của hệ điều hành xử lý theo lô đơn giản là l ng phí thời

gian xử lý của CPU khi công việc hiện tại truy xuất đến thiết bị vào/ra. Hệ điều hành

xử lý theo lô đa chƣơng sẽ khắc phục hạn chế này.

Hệ điều hành

Công việc 1

Công việc 2

Công việc 3

Công việc 4

Bản 2. S p xếp bộ nhớ của hệ thống x theo ô đa chương

Khi có nhiều công việc cùng truy xuất lên thiết bị, vấn đề lập lịch cho các công

việc là cần thiết. Khía cạnh quan trọng nhất trong việc lập lịch là khả năng đa chƣơng

(multiprogram). Mục ti u của n à gia tăng hiệu su t s dụng CPU b ng cách t chức

các công việc sao cho CPU uôn uôn ph i trong trạng thái àm việc.

Hệ điều hành loại này có khả năng thực hiện nhiều công việc, nhiều chƣơng trình

đồng thời. Khi cần thực hiện nhiều công việc đồng thời hệ điều hành sẽ nạp một phần

m lệnh và dữ liệu vào bộ nhớ các phần c n lại sẽ đƣợc nạp sau tại thời điểm thích

hợp và tất cả đều ở trạng thái sẵn sàng thực hiện. Sau đó hệ điều hành dùng bộ định

thời CPU chọn ra một công việc nào đó và cho nó thực thi trong CPU, nhƣng khi công

việc đang thực hiện cần truy xuất thiết bị vào/ra thì CPU sẽ đƣợc chuyển sang thực

14

hiện các công việc khác, và cứ nhƣ thế hệ điều hành tổ chức chuyển hƣớng CPU để

thực hiện hết các phần công việc trong bộ nhớ cũng nhƣ các công việc mà hệ thống yêu

cầu.

Hệ điều hành loại này mang lại hai ƣu điểm đó là tiết iệm được bộ nhớ, vì hông

nạp hết mã ệnh và dữ iệu của các công việc vào bộ nhớ, và hạn chế thời gian rỗi của

CPU. Tuy nhiên nó phải trả chi phí cao cho việc lập lịch CPU, tức là khi CPU r nh hệ

điều hành phải xem x t nên chuyển nó cho công việc nào trong số các công việc đang

đợi ở trạng thái sẵn sàng. Ngoài ra hệ điều hành c n phải giải quyết việc chia s bộ nhớ

chính cho các công việc khác nhau. Hệ điều hành MS-DOS là hệ điều hành đơn nhiệm,

đa chƣơng.

Với hệ đa chƣơng hệ điều hành ra quyết định cho ngƣời dùng. Vì vậy, hệ điều

hành đa chƣơng rất tinh vi. Hệ phải xử lý các vấn đề lập lịch cho công việc, lập lịch

cho bộ nhớ và cho cả CPU.

1.4.3. Hệ thống chia s thời gian

Hệ thống chia s thời gian là một mở rộng logic của hệ đa chƣơng. Hệ thống này

c n đƣợc gọi là hệ thống đa nhiệm nhƣ Windows 9x/NT. Chia sẻ thời gian đây chính

à chia sẻ thời gian x của CPU cho các công việc, các tiến trình đang ở trong trạng

thái sẵn sàng thực hiện. Mục ti u của n à cung c p cơ chế cho phép người d ng giao

tiếp với mỗi chương trình trong hi chạy.

Nguyên tắc của hệ điều hành chia s thời gian tƣơng tự nhƣ trong hệ điều hành xử

lý theo lô đa chƣơng nhƣng việc chuyển CPU từ tác vụ, tiến trình này sang tác vụ, tiến

trình khác không phụ thuộc vào việc tác vụ, tiến trình hiện tại có truy xuất đến thiết bị

vào/ra hay không mà chỉ phụ thuộc vào sự điều phối CPU của hệ điều hành. Công việc

điều phối CPU của hệ điều hành rất phức tạp phụ thuộc vào nhiều yếu tố khác nhau,

chúng ta sẽ đề cập đến vấn đề này trong chƣơng sau của tài liệu này.

Hệ điều hành chia s phức tạp hơn hệ điều hành đa chƣơng. Nó phải có các chức

năng: quản trị và bảo vệ bộ nhớ, sử dụng bộ nhớ ảo. Nó cũng cung cấp hệ thống tập tin

truy xuất online…Hệ điều hành chia s là kiểu của các hệ điều hành hiện đại ngày nay.

15

1.4.4. Hệ thống đa xử lý hệ thống song song)

Ngoài hệ thống một bộ xử lý c n có các hệ thống c nhiều bộ x c ng chia sẻ

hệ thống đường truyền dữ iệu, đồng hồ, bộ nhớ và các thiết bị ngoại vi. Các bộ xử lý

này liên lạc bên trong với nhau.

n 3. Hệ thống đa x

Có n u n uyên n ân xây d n t ốn d n n y:

- Thông ượng được gia tăng: Với sự gia tăng số lƣợng bộ xử lý, công việc đƣợc

thực hiện nhanh chóng hơn, Nhƣng không phải theo đúng tỉ lệ thời gian, nghĩa

là có n bộ xử lý không có nghĩa là sẽ thực hiện nhanh hơn n lần. Vì trong khi

nhiều bộ xử lý cộng tác trên một công việc, một lƣợng chi phí phải chịu trong

việc giữ các thành phần làm việc phù hợp. Chi phí này cộng với chi phí cạnh

tranh tài nguyên đƣợc chia s , làm giảm kết quả đƣợc mong đợi từ những bộ xử

lý bổ sung. Tƣơng tự nhƣ một nhóm gồm N lập trình viên làm việc với nhau

không dẫn đến kết quả công việc đang đạt đƣợc tăng N lần.

- Tính inh tế của việc mở rộng: hệ thống đa xử lý có thể tiết kiệm nhiều chi phí

hơn hệ thống đơn bộ xử lý, bởi vì chúng có thể chia s ngoại vi, thiết bị lƣu trữ

và điện. Nếu nhiều chƣơng trình điều hành trên cùng tập hợp dữ liệu thì lƣu trữ

dữ liệu đó trên một đĩa và tất cả bộ xử lý chia s chúng sẽ r hơn là có nhiều

máy tính với đĩa cục bộ và nhiều bản sao dữ liệu.

- Kh năng tin c y được gia tăng: nếu các chức năng đƣợc phân bổ hợp lý

giữa các bộ xử lý thì lỗi trên một bộ xử lý sẽ không dừng hệ thống, chỉ năng lực

bị giảm. Nếu chúng ta có 10 bộ xử lý và có 1 bộ xử lý bị sự cố thì mỗi bộ xử lý

trong 9 bộ xử lý c n lại phải chia s của công việc của bộ xử lý bị lỗi. Do đó,

2 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005,tr.8

16

toàn bộ hệ thống chỉ giảm 10% năng lực hơn là dừng hoạt động. Các hệ thống đƣợc thiết kế nhƣ thế đƣợc gọi là hệ thống có khả năng chịu lỗi fault tolerant 2.

Hệ thống đa xử lý thông thƣờng sử dụng cách đa x đối xứng, trong cách này

mỗi bộ xử lý chạy với một bản sao của hệ điều hành, những bản sao này liên lạc với

nhau khi cần thiết. Một ví dụ về hệ thống xử lý đối xứng là phiên bản Encore của

UNIX cho máy tính Multimax. Hệ thống này có hàng chục bộ xử lý. Ƣu điểm của nó là

nhiều tiến trình có thể thực hiện cùng lúc. Một hệ thống đa xử lý cho ph p nhiều công

việc và tài nguyên đƣợc chia s tự động trong những bộ xử lý khác nhau.

Hầu nhƣ tất cả hệ điều hành hiện đại - gồm Windows NT, Solaris, Digital UNIX,

OS/2 và LINUX - hiện nay cung cấp sự hỗ trợ đa xử lý đối xứng.

Một số hệ thống sử dụng đa x b t đối xứng, trong đó mỗi bộ xử lý đƣợc giao

một công việc riêng biệt. Một bộ xử lý chính kiểm soát toàn bộ hệ thống, các bộ xử lý

khác thực hiện theo lệnh của bộ xử lý chính hoặc theo những chỉ thị đ đƣợc định

nghĩa trƣớc. Mô hình này theo dạng quan hệ chủ tớ. Bộ xử lý chính sẽ lập lịch cho các

bộ xử lý khác.

1.4.5. Hệ thống phân tán

Hệ thống này cũng tƣơng tự nhƣ hệ thống chia s thời gian nhƣng các bộ xử lý

không chia s bộ nhớ và đồng hồ, thay vào đó mỗi bộ xử lý có bộ nhớ cục bộ riêng.

Các bộ x thông tin với nhau thông qua các đường truyền thông như những bus tốc

độ cao hay đường dây điện thoại.

Các bộ xử lý trong hệ phân tán thƣờng khác nhau về kích thƣớc và chức năng. Nó

có thể bao gồm máy vi tính, trạm làm việc, máy mini, và những hệ thống máy lớn. Các

bộ xử lý thƣờng đƣợc tham khảo với nhiều tên khác nhau nhƣ Site, Node, Computer

v.v.... tùy thuộc vào trạng thái làm việc của chúng.

C c n uyên n ân p ả xây d n t ốn p ân t n l :

- Chia sẻ tài nguy n: Một ngƣời dùng A có thể sử dụng máy in của ngƣời dùng B

và ngƣời dùng B có thể truy xuất những tập tin của A. Tổng quát, chia s tài

nguyên trong hệ thống phân tán cung cấp một cơ chế để chia s tập tin ở vị trí

xa, xử lý thông tin trong một cơ sở dữ liệu phân tán, in ấn tại một vị trí xa, sử

17

dụng những thiết bị ở xa để thực hiện các thao tác.

- Tăng tốc độ tính toán: Một thao tác tính toán đƣợc chia làm nhiều phần nhỏ

cùng thực hiện một lúc. Hệ thống phân tán cho ph p phân chia việc tính toán

trên nhiều vị trí khác nhau để tính toán song song.

- An toàn: Nếu một vị trí trong hệ thống phân tán bị hỏng, các vị trí khác vẫn tiếp

tục làm việc.

- Thông tin i n ạc với nhau: Có nhiều lúc, chƣơng trình cần chuyển đổi dữ liệu

từ vị trí này sang vị trí khác. Ví dụ trong hệ thống Windows, thƣờng có sự chia

s và chuyển dữ liệu giữa các cửa sổ. Khi các vị trí đƣợc nối kết với nhau trong

một hệ thống mạng, việc trao đổi dữ liệu di n ra rất d . Ngƣời dùng có thể

chuyển tập tin hay các Email cho nhau từ cùng vị trí hay những vị trí khác.

1.4.6. Hệ thống xử lý thời gian thực

Hệ thống x thời gian thực được s dụng hi c những đòi hỏi h t he về thời

gian tr n các thao tác của bộ x ho c dòng dữ iệu, nó thƣờng đƣợc dùng điều khiển

các thiết bị trong các ứng dụng tận hiến. Máy tính phân tích dữ liệu và có thể chỉnh các

điều khiển giải quyết cho dữ liệu nhập.

Một hệ điều hành xử lý thời gian thực phải đƣợc định nghĩa tốt, thời gian xử lý

nhanh. Hệ thống phải cho kết quả chính xác trong khoảng thời gian bị thúc p nhanh

nhất. Có hai hệ thống xử lý thời gian thực là hệ thống thời gian thực cứng và hệ thống

thời gian thực mềm..

Hệ thống thời gian thực cứng là công việc đƣợc hoàn tất đúng lúc. Lúc đó dữ liệu

thƣờng đƣợc lƣu trong bộ nhớ ngắn hạn hay trong ROM. Việc xử lý theo thời gian thực

sẽ xung đột với tất cả hệ thống liệt kê ở trên.

Dạng thứ hai là hệ thống thời gian thực mềm, mỗi công việc có một độ ƣu tiên

riêng và sẽ đƣợc thi hành theo độ ƣu tiên đó. Có một số lĩnh vực áp dụng hữu hiệu

phƣơng pháp này là các ứng dụng đa phƣơng tiện.

1.4.7. Hệ xách tay

Hệ xách tay gồm các máy ỹ thu t số hỗ trợ cá nhân (personal digital assistants-

PDAs nhƣ Palm hay điện thoại di động với nối kết Internet. Những ngƣời phát triển hệ

xách tay và ứng dụng gặp phải nhiều thử thách, nhất là sự giới hạn về ích thƣớc của

18

thiết bị. Thí dụ, một PDA điển hình cao khoảng 12,7cm và rộng khoảng 7,62cm và

trọng lƣợng của nó ít hơn 225g. Do sự giới hạn về kích thƣớc này, hầu hết các thiết bị

xách tay có bộ nhớ nhỏ gồm các bộ xử lý thấp và màn hình hiển thị nhỏ. Bây giờ chúng

ta sẽ xem x t mỗi sự giới hạn này.

Nhiều thiết bị xách tay có dung lƣợng bộ nhớ 512KB và 8MB ngƣợc lại, các

máy PC hay trạm làm việc có hàng trăm MB bộ nhớ . Do đó, hệ điều hành và các ứng

dụng phải quản lý bộ nhớ hiệu quả. Hiện nay, nhiều thiết bị xách tay không dùng kỹ

thuật bộ nhớ ảo do đó buộc ngƣời phát triển chƣơng trình làm việc trong phạm vi giới

hạn của bộ nhớ vật lý.

Vấn đề thứ hai mà ngƣời phát triển cần quan tâm đến là tốc độ của bộ xử lý đƣợc

dùng trong thiết bị. Các bộ xử lý nhanh hơn yêu cầu điện năng nhiều hơn. Để chứa một

bộ xử lý nhanh hơn bên trong thiết bị xách tay yêu cầu nhiều pin hơn và phải đƣợc nạp

lại thƣờng xuyên. Để tối thiểu hoá kích thƣớc của các thiết bị xách tay đ i hỏi bộ xử lý

nhỏ hơn, chậm hơn tiêu thụ ít điện năng hơn. Do đó, hệ điều hành và các ứng dụng

phải đƣợc thiết kế không đ i hỏi sử dụng nhiều bộ xử lý.

Vấn đề cuối cùng gây khó khăn cho ngƣời thiết kế chƣơng trình cho các thiết bị

xách tay là màn hình hiển thị nhỏ. Màn hình cho thiết bị xách tay thƣờng có diện tích

không quá 7,62cm. Những tác vụ quen thuộc nhƣ đọc email hay hiển thị các trang web,

phải đƣợc cô đọng vào màn hình nhỏ hơn. Một phƣơng pháp để hiển thị nội dung các

trang web là cắt xén web, ở đó chỉ một tập hợp nhỏ trang web đƣợc phân phát và hiển

thị trên thiết bị xách tay.

1.5. L CH S PHÁT TRIỂN CỦ HỆ ĐIỀU HÀNH

1.5.1. Thế hệ 1 1945 – 1955)

Vào khoảng giữa thập niên 1940, Howard Aiken ở Havard và John Von Neumann

ở Princeton, đ thành công trong việc xây dựng máy tính dùng ống chân không. Những

máy này rất lớn với hơn 10000 ống chân không nhƣng chậm hơn nhiều so với máy r nhất ngày nay3.

Mỗi máy đƣợc một nhóm ngƣời thực hiện tất cả các khâu từ thiết kế, xây dựng

3 Nguy n Hạnh Nhi, Bài giảng điện tử hệ điều hành nâng cao, Trƣờng Đại học Khoa học Tự nhiên

19

lập trình, thao tác đến quản lý. Lập trình bằng ngôn ngữ máy tuyệt đối, thƣờng là bằng

cách dùng bảng điều khiển để thực hiện các chức năng cơ bản. Ngôn ngữ lập trình chƣa

đƣợc biết đến và hệ điều hành cũng chưa nghe đến.

Vào đầu thập niên 1950, phiếu đục lổ ra đời và có thể viết chƣơng trình trên phiếu

thay cho dùng bảng điều khiển.

1.5.2 Thế hệ 2 1955 – 1965)

Sự ra đời của thiết bị bán dẫn vào giữa thập niên 1950 làm thay đổi bức tranh

tổng thể. Máy tính trở nên đủ tin cậy hơn. Nó đƣợc sản xuất và cung cấp cho các khách

hàng. Lần đầu tiên có sự phân chia rõ ràng giữa ngƣời thiết kế, ngƣời xây dựng, ngƣời

vận hành, ngƣời lập trình, và ngƣời bảo trì.

Để thực hiện một công việc một chƣơng trình hay một tập hợp các chƣơng

trình , lập trình viên trƣớc hết viết chƣơng trình trên giấy bằng hợp ngữ hay

FORTRAN sau đó đục lỗ trên phiếu và cuối cùng đƣa phiếu vào máy. Sau khi thực

hiện xong nó sẽ xuất kết quả ra máy in.

Hệ thống x theo ô ra đời, nó lƣu các yêu cầu cần thực hiện lên băng từ, và hệ

thống sẽ đọc và thi hành lần lƣợt. Sau đó, nó sẽ ghi kết quả lên băng từ xuất và cuối

cùng ngƣời dùng sẽ đem băng từ xuất đi in.

Hệ thống xử lý theo lô hoạt động dƣới sự điều khiển của một chƣơng trình đặc

biệt là tiền thân của hệ điều hành sau này. Ngôn ngữ lập trình sử dụng trong giai đoạn

này chủ yếu là FORTRAN và hợp ngữ.

1.5.3. Thế hệ 3 1965 – 1980)

Trong giai đoạn này, máy tính đƣợc sử dụng rộng r i trong khoa học cũng nhƣ

trong thƣơng mại. Máy IBM 360 là máy tính đầu tiên sử dụng mạch tích hợp IC . Từ

đó kích thƣớc và giá cả của các hệ thống máy tính giảm đáng kể. Các thiết bị ngoại vi

dành cho máy xuất hiện ngày càng nhiều và thao tác điều khiển bắt đầu phức tạp.

Hệ điều hành ra đời nhằm điều phối, kiểm soát hoạt động và giải quyết các yêu

cầu tranh chấp thiết bị. Chƣơng trình hệ điều hành dài cả triệu d ng hợp ngữ và do

hàng ngàn lập trình viên thực hiện.

Sau đó, hệ điều hành đa chương ra đời, có nhiều công việc cùng xuất hiện trong

bộ nhớ. CPU không bao giờ r nh. Bộ nhớ đƣợc chia làm nhiều phần để lƣu các công

20

việc khác nhau, khi một công việc chờ thực hiện nhập xuất, CPU sẽ xử lý các công

việc khác. Tuy nhiên khi có nhiều công việc cùng tồn tại trong bộ nhớ, vấn đề là phải

có một cơ chế bảo vệ tránh các công việc ảnh hƣởng đến nhau.

Giai đoạn này cũng đánh dấu sự ra đời của hệ điều hành chia sẻ thời gian nhƣ CTSS4 của MIT5. Đồng thời các hệ điều hành lớn ra đời nhƣ MULTICS, UNIX và hệ thống các máy mini cũng xuất hiện nhƣ DEC PDP-1.

1.5.4. Thế hệ 4 1980-nay )

Giai đoạn này đánh dấu sự ra đời của máy tính cá nhân, đặc biệt là hệ thống IBM

PC với hệ điều hành MS-DOS và Windows sau này. Bên cạnh đó là sự phát triển mạnh

của các hệ điều hành tựa Unix trên nhiều hệ máy khác nhau nhƣ Linux. Ngoài ra, từ

đầu thập niên 90 cũng đánh dấu sự phát triển mạnh mẽ của hệ điều hành mạng và hệ

điều hành phân tán.

Các chuyên gia về kiến trúc máy tính cũng dự đoán thế hệ thứ 5 dành cho các

máy tính xử lý song song. Thế hệ của những máy tính thông minh, dựa trên các ngôn

ngữ trí tuệ nhân tạo nhƣ LISP và PROLOG,... và các giao diện ngƣời – máy. Năm

2004, Robot thông minh gần giống con ngƣời nhất là ASIMO Advanced Step

Innovative Mobility: Bƣớc chân tiên tiến của đổi mới và chuyển động .

1.6. CẤU TR C CỦ HỆ ĐIỀU HÀNH

1.6.1. Các thành phần ên trong hệ điều hành

1.6.1.1. Quản lý tiến trình

Một chƣơng trình không thực hiện đƣợc gì cả nếu nhƣ nó không đƣợc CPU thi

hành. Một t ến tr n à một chương trình đang được thực thi, nhƣng ý nghĩa của nó

c n rộng hơn. Một công việc theo lô là một tiến trình. Một chƣơng trình ngƣời dùng

chia s thời gian là một tiến trình, một công việc của hệ thống nhƣ soopling xuất ra

máy in cũng là một tiến trình. Một tiến trình ph i s dụng tài nguy n như thời gian s

dụng CPU, hông gian bộ nhớ, t p tin, các thiết bị nh p xu t, đ hoàn t t công việc

của mình. Các tài nguyên này đƣợc cung cấp khi tiến trình đƣợc tạo hay trong quá trình

thi hành. Khi tiến trình đƣợc tạo, nó sử dụng rất nhiều tài nguyên vật lý và luận lý. Ví

4 Bộ máy tính chia s thời gian thực khổng lồ đƣợc gọi là CTSS 5 Viện công nghệ Massachusetts MIT vào giữa những năm 1960

21

dụ, khảo sát tiến trình hiển thị trạng thái của tập tin lên màn hình. Đầu vào của tiến

trình là tên tập tin, và tiến trình sẽ thực hiện những chỉ thị thích hợp, thực hiện lời gọi

hệ thống để nhận đƣợc những thông tin mong muốn và hiển thị nó lên màn hình. Khi

tiến trình kết thúc, hệ điều hành sẽ thu hồi các tài nguyên trƣớc đây đ cấp phát cho

tiến trình.

Một tiến trình đƣợc coi là một đơn vị làm việc của hệ thống. Một hệ thống có thể

có nhiều tiến trình cùng lúc, trong đó một số tiến trình là của hệ điều hành, một số tiến

trình là của ngƣời dùng. các tiến trình này có thể di n ra đồng thời.

Va trò của u n tron v c quản lý t ến tr n l :

- Tạo và hủy các tiến trình của ngƣời dùng và của hệ thống.

- Ngƣng và kích hoạt lại một tiến trình.

- Cung cấp cơ chế đồng bộ tiến trình.

- Cung cấp các thông tin liên lạc giữa các tiến trình.

- Cung cấp cơ chế quản lý deadlock xem chƣơng2 .

1.6.1.2. Quản lý ộ nhớ chính

Trong hệ thống máy tính hiện đại, bộ n ớ c ín (Physical Memory) là trung tâm

của các thao tác, xử lý. Bộ nhớ chính có thể xem nhƣ một mảng kiểu Byte hay kiểu

word. Mỗi phần tử đều có địa chỉ. Đó là nơi lƣu dữ liệu đƣợc CPU truy xuất một cách

nhanh chóng so với các thiết bị nhập/xuất. CPU đọc những chỉ thị từ bộ nhớ chính. Các

thiết bị nhập/xuất cài đặt cơ chế DMA xem chƣơng 4 cũng đọc và ghi dữ liệu trong

bộ nhớ chính. Thông thƣờng bộ nhớ chính chứa các thiết bị mà CPU có thể định vị trực

tiếp. Ví dụ CPU truy xuất dữ liệu từ đĩa, những dữ liệu này đƣợc chuyển vào bộ nhớ

qua lời gọi hệ thống nhập/xuất.

Một chƣơng trình muốn thi hành trƣớc hết phải đƣợc ánh xạ thành địa chỉ tuyệt

đối và nạp vào bộ nhớ chính. Khi chƣơng trình thi hành, hệ thống truy xuất các chỉ thị

và dữ liệu của chƣơng trình trong bộ nhớ chính. Ngay cả khi tiến trình kết thúc, dữ liệu

vẫn c n trong bộ nhớ chính cho đến khi một tiến trình khác đƣợc ghi chồng lên.

Để tối ƣu hóa quá trình hoạt động của CPU và tốc độ của máy tính, một số tiến

trình đƣợc lƣu giữ trong bộ nhớ. Có rất nhiều kế hoạch quản trị bộ nhớ do có nhiều ứng

22

dụng bộ nhớ khác nhau và hiệu quả của các thuật toán phụ thuộc tùy vào tình huống cụ

thể. Lựa chọn một thuật toán cho một hệ thống đƣợc mô tả trƣớc phụ thuộc vào nhiều

yếu tố, đặc biệt là phần cứng của hệ thống.

u n có n ữn va trò n ư sau tron v c quản lý bộ n ớ c ính:

- Lƣu giữ thông tin về các vị trí trong bộ nhớ đ đƣợc sử dụng và tiến trình nào sử

dụng.

- Quản lý không gian bộ nhớ trống

- Quyết định tiến trình nào đƣợc nạp vào bộ nhớ chính, khi bộ nhớ đ sẳn dùng.

- Cấp phát và thu hồi bộ nhớ khi cần thiết.

- Lập lịch cho vấn đề đọc/ghi thông tin trên đĩa của đầu từ.

1.6.1.3. Quản lý ộ nhớ phụ

Mục tiêu chính của hệ thống máy tính là thực hiện chƣơng trình. Những chƣơng

trình với dữ liệu cần truy xuất của chúng phải đƣợc đặt trong bộ nhớ chính trong suốt

quá trình thi hành. Nhƣng bộ nhớ chính quá nhỏ để có thể lƣu giữ mọi dữ liệu và

chƣơng trình, ngoài ra dữ liệu sẽ mất khi không c n đƣợc cung cấp năng lƣợng. Hệ

thống máy tính ngày nay cung cấp hệ thống ưu trữ phụ backing store nằm trên

không gian c n trống của đĩa từ. Đa số các máy tính đều dùng đĩa để lƣu trữ cả chƣơng

trình và dữ liệu. Hầu nhƣ tất cả chƣơng trình: chƣơng trình dịch, hợp ngữ, thủ tục, trình

soạn thảo, định dạng... đều đƣợc lƣu trữ trên đĩa cho tới khi nó đƣợc thực hiện, nạp vào

trong bộ nhớ chính và cũng sử dụng đĩa để chứa dữ liệu và kết quả xử lý. Vì vậy một

bộ quản lý hệ thống đĩa rất quan trọng cho hệ thống máy tính.

Va trò của u n tron v c quản lý ĩa:

- Quản lý không gian trống trên đĩa.

- Định vị lƣu trữ.

- Lập lịch cho đĩa.

Vì hệ thống đĩa đƣợc sử dụng thƣờng xuyên, nên nó phải đƣợc dùng hiệu quả.

Tốc độ của toàn bộ hệ thống tuỳ thuộc rất nhiều vào tốc độ truy xuất đĩa.

23

1.6.1.4. Quản lý hệ thống nhập/xuất

Mỗi thiết bị nhập/xuất có trình điều khiển thiết bị riêng. Chỉ có device driver mới

hiểu đến cấu trúc đặc thù của thiết bị mà nó mô tả.

Một trong những mục tiêu của hệ điều hành là giúp ngƣời dùng khai thác hệ

thống máy tính d dàng và hiệu quả, do đó các thao tác trao đổi thông tin trên thiết bị

nhập/xuất phải trong suốt đối với ngƣời dùng.

Để thực hiện đƣợc điều này hệ điều hành phải tồn tại một bộ phận điều khiển

thiết bị, bộ phận này phối hợp cùng CPU để quản lý sự hoạt động và trao đổi thông tin

giữa hệ thống, chƣơng trình ứng dụng và ngƣời dùng với các thiết bị xuất/nhập. Bộ

ph n điều hi n thiết bị thực hiện những nhiệm vụ sau:

- G i mã ệnh điều hi n đến thiết bị: Hệ điều hành điều khiển các thiết bị bằng

các m điều khiển, do đó trƣớc khi bắt đầu một quá trình trao đổi dữ liệu với

thiết bị thì hệ điều hành phải gởi m điều khiển đến thiết bị.

- Tiếp nh n y u cầu ng t từ các thiết bị: Các thiết bị khi cần trao đổi với hệ thống

thì nó phát ra một tín hiệu yêu cầu ngắt, hệ điều hành tiếp nhận yêu cầu ngắt từ

các thiết bị, xem x t và thực hiện một thủ tục để đáp ứng yêu cầu từ các thiết bị.

- Phát hiện và x ỗi: quá trình trao đổi dữ liệu thƣờng xảy ra các lỗi nhƣ: thiết

bị vào ra chƣa sẵn sàng, đƣờng truyền hỏng, ... do đó hệ điều hành phải tạo ra

các cơ chế thích hợp để phát hiện lỗi sớm nhất và khắc phục các lỗi vừa xảy ra

nếu có thể.

Một t ốn n ập/xuất bao ồm:

- Hệ thống buffer caching.

- Giao tiếp điều khiển thiết bị tổng quát.

- Bộ điều khiển cho các thiết bị phần cứng.

1.6.1.5. Quản lý hệ thống tập tin

Máy tính có thể lƣu trữ thông tin trên nhiều loại thiết bị lƣu trữ khác nhau, mỗi

thiết bị lại có tính chất và cơ chế tổ chức lƣu trữ thông tin khác nhau, điều này gây khó

khăn cho ngƣời dùng. Để khắc phục điều này hệ điều hành đƣa ra khái niệm đồng nhất

24

cho tất cả các thiết bị lƣu trữ vật lý, đó là tập tin.

Tập tin là đơn vị lƣu trữ cơ bản nhất, mỗi tập tin có một tên riêng. Hệ điều hành

phải thiết lập mối quan hệ tƣơng ứng giữa tên tập tin và thiết bị lƣu trữ chứa tập tin.

Theo đó khi cần truy xuất đến thông tin đang lƣu trữ trên bất kỳ thiết bị lƣu trữ nào

ngƣời dùng chỉ cần truy xuất đến tập tin tƣơng ứng thông qua tên của nó, tất cả mọi

việc c n lại đều do hệ điều hành thực hiện.

Trong hệ thống có nhiều tiến trình đồng thời truy xuất tập tin, hệ điều hành phải

tạo ra những cơ chế thích hợp để bảo vệ tập tin tránh việc đọc/ghi bất hợp lệ trên tập

tin.

Như vậy bộ p ận quản lý tập t n của u n t c n n ữn n m vụ

sau:

- Tạo/xoá một tập tin/thƣ mục.

- Bảo vệ tập tin khi có hiện tƣợng truy xuất đồng thời.

- Cung cấp các thao tác xử lý và bảo vệ tập tin/thƣ mục.

- Tạo mối quan hệ giữa tập tin và bộ nhớ phụ chứa tập tin.

- Tạo cơ chế truy xuất tập tin thông qua tên tập tin.

- Ánh xạ tập tin trên hệ thống lƣu trữ phụ.

- Backup tập tin trên các thiết bị lƣu trữ.

1.6.1.6. Hệ thống ảo vệ

Trong một hệ thống nhiều ngƣời dùng và cho ph p nhiều tiến trình di n ra đồng

thời, các tiến trình phải đƣợc bảo vệ đối với những hoạt động khác. Do đó, hệ thống

cung cấp cơ chế để đảm bảo rằng tập tin, bộ nhớ, CPU, và những tài nguyên khác chỉ

đƣợc truy xuất bởi những tiến trình có quyền. Ví dụ, bộ nhớ đảm bảo rằng tiến trình chỉ

đƣợc thi hành trong phạm vi địa chỉ của nó. Bộ thời gian đảm bảo rằng không có tiến

trình nào độc chiếm CPU. Cuối cùng các thiết bị ngoại vi cũng đƣợc bảo vệ.

Hệ thống b o vệ là một cơ chế kiểm soát quá trình truy xuất của chƣơng trình,

tiến trình, hoặc ngƣời dùng với tài nguyên của hệ thống. Cơ chế này cũng cung cấp

cách thức để mô tả lại mức độ kiểm soát.

Hệ thống bảo vệ cũng làm tăng độ an toàn khi kiểm tra lỗi trong giao tiếp giữa

25

những hệ thống nhỏ bên trong.

1.6.1.7. Hệ thống cơ chế dòng lệnh

Một trong những phần quan trọng của chƣơng trình hệ thống trong một hệ điều

hành là cơ chế dòng ệnh đƣợc biết đến nhƣ bộ thông dịch lệnh thành phần chính là bộ

xử lý shell, đó là giao tiếp giữa ngƣời dùng và hệ điều hành. Bộ x she àm nhiệm

vụ: nhận lệnh, phân tích lệnh, đáp ứng yêu cầu của lệnh.

Một số hệ điều hành đặt cơ chế d ng lệnh bên trong hạt nhân, số khác nhƣ MS-

DOS và UNIX thì xem hệ điều hành nhƣ là một chƣơng trình đặc biệt, đƣợc thi hành

khi các công việc bắt đầu hoặc khi ngƣời dùng login lần đầu tiên.

Các lệnh đƣa vào hệ điều hành thông qua bộ điều hi n ệnh. Trong các hệ thống

chia s thời gian một chƣơng trình có thể đọc và thông dịch các lệnh điều khiển đƣợc

thực hiện một cách tự động. Chƣơng trình này thƣờng đƣợc gọi là bộ thông dịch điều

khiển, cơ chế d ng lệnh hoặc Shell. Chức năng của nó rất đơn giản đó là lấy lệnh kế

tiếp và thi hành.

Mỗi hệ điều hành sẽ có những giao tiếp khác nhau, dạng đơn giản theo cơ chế

d ng lệnh, dạng thân thiện với ngƣời dùng nhƣ giao diện của Macintosh có các biểu

tƣợng, cửa sổ thao tác dùng chuột.

Các lệnh có quan hệ với việc tạo và quản lý các tiến trình, kiểm soát nhập xuất,

quản lý bộ lƣu trữ phụ, quản lý bộ nhớ chính, truy xuất hệ thống tập tin và cơ chế bảo

vệ.

1.6.2. Các dịch vụ của hệ điều hành

Hệ điều hành cung cấp một môi trƣờng để thi hành các chƣơng trình, bằng cách

cung cấp các dịch vụ cho chƣơng trình và cho ngƣời dùng. Các dịch vụ này trên mỗi hệ

thống là khác nhau nhƣng cũng có những lớp chung. Các dịch vụ này giúp cho các lập

trình viên thuận tiện hơn và việc lập trình d dàng hơn.

- Thi hành chương trình: hệ điều hành phải có nhiệm vụ nạp chƣơng trình của

ngƣời dùng vào bộ nhớ, chuẩn bị đầy đủ các điều kiện về tài nguyên để chƣơng

trình có thể chạy đƣợc và kết thúc đƣợc, có thể kết thúc bình thƣờng hoặc kết

thúc do bị lỗi. Khi chƣơng trình kết thúc hệ điều hành phải thu hồi tài nguyên đ

cấp cho chƣơng trình và ghi lại các thông tin mà chƣơng trình đ thay đổi trong

26

quá trình chạy nếu có .

- Thao tác nh p xu t: Một chƣơng trình thi hành có thể yêu cầu nhập xuất. Nhập

xuất này có thể là tập tin hay thiết bị. Đối với thiết bị có một hàm đặc biệt đƣợc

thi hành. Để tăng hiệu quả, ngƣời dùng không truy xuất trực tiếp các thiết bị

nhập xuất mà thông qua cách thức do hệ điều hành cung cấp chẳng hạn, phải

nạp đƣợc dữ liệu mà chƣơng trình cần vào bộ nhớ.

- Thao tác tr n hệ thống t p tin: Hệ điều hành cần cung cấp các công cụ để

chƣơng trình d dàng thực hiện các thao tác đọc ghi trên các tập tin, các thao tác

này phải thực sự an toàn, đặc biệt là trong môi trƣờng đa nhiệm.

- Trao đ i thông tin giữa các tiến trình: có nhiều tình huống một tiến trình cần

trao đổi thông tin với một tiến trình khác. Có hai cách thực hiện: Một là thực

hiện thay thế tiến trình trên cùng máy tính, hai là thay thế tiến trình trên hệ

thống khác trong hệ thống mạng. Thông tin có thể đƣợc cài đặt qua chia s bộ

nhớ, hoặc bằng kỹ thuật chuyển thông điệp. Việc chuyển thông tin đƣợc thực

hiện bởi hệ điều hành.

- Phát hiện và x ỗi: Hệ điều hành phải có các công cụ để chính hệ điều hành

và để hệ điều hành giúp chƣơng trình của ngƣời dùng phát hiện các lỗi do hệ

thống CPU, Memory, I/O device, Program phát sinh. Hệ điều hành cũng phải

đƣa ra các dịch vụ để xử lý các lỗi sao cho hiệu quả nhất.

1.6.3. Lời gọi hệ thống

Lời gọi hệ thống cung cấp một giao tiếp giữa tiến trình và hệ điều hành. Lời gọi

này cũng nhƣ các lệnh hợp ngữ.

Một số hệ thống cho ph p lời gọi hệ thống đƣợc thực hiện từ cấp lập trình ngôn

ngữ cấp cao, nhƣ các hàm và lời gọi hàm. Nó có thể phát sinh lời gọi từ các thủ tục hay

gọi trực tiếp trong cửa sổ lệnh.

Để hiểu quá trình hoạt động của lời gọi hệ thống chúng ta cùng khảo sát một

chƣơng trình nhỏ dùng để đọc dữ liệu từ một tập tin ch p qua tập tin khác. Dữ liệu

nhập đầu tiên của của chƣơng trình là tên của hai tập tin: tập tin nhập và tập tin xuất.

Tên này đƣợc mô tả bằng nhiều cách tùy thuộc vào thiết kế hệ điều hành nhƣ: chƣơng

trình yêu cầu ngƣời dùng cho biết tên của hai tập tin, họ cũng có thể cung cấp bằng

cách lựa chọn với chuột. Khi có tên của hai tập tin, chƣơng trình mở tập tin nhập và tạo

27

tập tin xuất. Mỗi thao tác này đƣợc thực hiện bởi những lời gọi hệ thống khác nhau.

Cũng có những trƣờng hợp phát sinh lỗi: Khi chƣơng trình mở tập tin nhập, có thể xảy

ra trƣờng hợp không có tập tin có tên nhƣ mô tả hoặc tập tin bị cấm truy cập. Trong

trƣờng hợp này chƣơng trình phải xuất thông điệp lên màn hình. Nếu tập tin nhập tồn

tại, phải tạo tập tin mới. Hệ thống phải kiểm tra tiếp xem đ có tập tin xuất tồn tại

không và sẽ có những lời gọi hệ thống tƣơng ứng để giải quyết hoặc là hủy tiến trình,

hai là xóa tập tin đ tồn tại và tạo tập tin mới. Sau khi đ thiết lập xong tập tin, hệ

thống tiếp tục tạo v ng lặp đọc dữ liệu từ tập tin nhận và ghi lên tập tin xuất. Mỗi bƣớc

đều có kiểm tra lỗi. Sau khi ch p xong, chƣơng trình sẽ đóng hai tập tin lại dùng một

lời gọi hệ thống khác , xuất thông báo lên màn hình dùng lời gọi hệ thống cuối cùng

chấm dứt chƣơng trình lời gọi hệ thống cuối cùng .

Trong các ngôn ngữ lập trình cấp cao, ngƣời dùng không cần quan tâm đến chi

tiết mà chỉ cần thông qua các hàm hay các lệnh để thực hiện. Lời gọi hệ thống có thể

di n ra theo một cách khác. Kiểu và khối lƣợng thông tin tùy thuộc vào hệ thống và lúc

gọi.

Có ba phương pháp được s dụng đ chuy n tham số cho hệ điều hành Cách đơn

gi n nh t à chuy n tham số vào thanh ghi Nếu c nhiều tham số, n sẽ được ưu trữ trong hối ho c b ng trong bộ nhớ Cách cuối c ng à d ng cơ chế stac 6.

Lời gọi hệ thống có thể đƣợc chia thành các loại: kiểm soát tiến trình, thao tác tập

tin, thao tác thiết bị, thông tin liên lạc.

1.6.4. Cấu tr c hệ điều hành

1.6.4.1. Cấu tr c đơn giản

Cấu trúc này trong một số hệ thống thƣơng mại và không có cấu trúc đƣợc định

nghĩa tốt. thông thƣờng hệ điều hành bắt đầu là một hệ thống nhỏ, đơn giản và có giới

hạn. MS-DOS là một hệ điều hành có cấu trúc đơn giản, nó cung cấp những chức năng

cần thiết nhất trong một không gian nhỏ nhất do sự giới hạn của phần cứng mà nó chạy

6 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005,tr.25

28

trên đó và không chia thành những đơn thể rõ rệt.

Chƣơng trình ứng dụng

Chƣơng trình hệ thống thƣờng trú

MS-DOS device driver

ROM BIOS device driver

Hình 1.4. C u trúc của MS-DOS

Mặc dù MS-DOS có cấu trúc nhƣng giữa giao diện và chức năng không có sự

phân chia rõ rệt. Các chƣơng trình ứng dụng có thể truy xuất trực tiếp các thủ tục nhập

xuất cơ bản và ghi trực tiếp lên màn hình hay bộ điều khiển đĩa.

Một hệ điều hành cũng có cấu trúc đơn giản là UNIX với những phiên bản đầu

tiên. Cấu trúc của nó chỉ bao gồm hai phần: hạt nhân và các chương trình hệ thống.

Hạt nhân đƣợc chia thành một chuỗi giao tiếp và device driver (xem chƣơng 5, bộ điều

khiển thiết bị).

Ngƣời dùng Shell và lệnh Biên dịch và thông dịch Thƣ viện hệ thống Giao tiếp ời gọi hệ thống với nhân

Tín hiệu kiểm soát hệ thống nhập xuất tuần tự của bộ điều khiển Thiết bị đầu cuối Hệ thống tập tin chuyển đổi giữa hệ thống nhập xuất khối và bộ điều khiển đĩa Lập lịch CPU, thay thế phân trang, yêu cầu phân trang trong bộ nhớ ảo

Giao tiếp giữ hạt nhân và hạt nhân

Bộ kiểm soát đĩa Bộ kiểm soát bộ Bộ kiểm soát Thiết bị đầu cuối nhớ

Bản 1.3. C u trúc của hệ điều hành UNIX

Những gì dƣới lời gọi hệ thống và trên phần cứng là hạt nhân. Hạt nhân cung cấp

29

hệ thống tập tin, lập lịch CPU, quản trị bộ nhớ và những chức năng khác của hệ điều

hành thông qua lời gọi hệ thống. Tóm lại là toàn bộ chức năng của hệ thống đƣợc kết

hợp trong một lớp. Những chƣơng trình hệ thống dùng những lời gọi hệ thống đƣợc hỗ

trợ bởi hạt nhân để cung cấp những chức năng hữu ích nhƣ biên dịch và thao tác tập

tin. Lời gọi hệ thống định nghĩa một giao tiếp lập trình cho UNIX, đó là tập hợp những

chƣơng trình hệ thống thông thƣờng trong đó có định nghĩa giao tiếp với ngƣời dùng.

1.6.4.2. Cấu tr c phân lớp

Những phiên bản mới của UNIX đƣợc thiết kế để sử dụng phần cứng phức tạp

hơn, do đó hệ điều hành đƣợc chia thành nhiều phần nhỏ hơn.

Bằng cách sử dụng kỹ thuật topdown, những chức năng và đặc tính của hệ thống

đƣợc chia làm nhiều thành phần nhỏ. Che dấu thông tin, không cho chƣơng trình của

ngƣời dùng có thể cài đặt những hàm truy xuất cấp thấp, thay vào đó là những lớp giao

tiếp bên trong.

Hệ điều hành đƣợc chia thành nhiều lớp: Lớp dƣới cùng là phần cứng, lớp trên

cùng là giao tiếp với ngƣời dùng. Lớp hệ điều hành đƣợc cài đặt thành những đối

tƣợng trừu tƣợng. Thông thƣờng một lớp của hệ điều hành bao gồm một số cấu trúc dữ

liệu và các hàm có thể đƣợc gọi bởi lớp ở trên và bản thân nó gọi những chức năng của

lớp bên dƣới. Mỗi lớp cài đặt chỉ sử dụng những thao tác do lớp dƣới cung cấp. Một

lớp cũng không cần biết hệ điều hành đƣợc cài đặt nhƣ thế nào, nó chỉ cần biết những

thao tác này làm gì thôi.

Cấu trúc lớp này lần đầu tiên đƣợc thiết kế và áp dụng cho hệ điều hành THE

(Technische Hogeschool Eindhoven). Hệ thống này được chia thành sáu ớp như hình

sau:

Lớp 5: Chƣơng trình của ngƣời dùng

Lớp 4: Quản lý bộ đệm cho thiết bị nhập xuất

Lớp 3: Điều khiển thiết bị nhập xuất

Lớp 2: Quản lý bộ nhớ / bộ nhớ ảo

Lớp 1: Quản lý tiến trình

Lớp 0: Phần cứng hệ thống

30

Ví dụ hác như c u trúc ớp của hệ điều hành VENUS và OS/2:

Lớp 6 Chƣơng trình ngƣời dùng

Lớp 5 Trình điều khiển thiết bị và bộ lập lịch

Lớp 4 Bộ nhớ ảo

Lớp 3 Kênh nhập/xuất

Lớp 2 Lập lịch CPU

Lớp 1 Thông dịch các chỉ thị

Lớp 0 Phần cứng

Giao tiếp với CTUD

Ứng dụng Ứng dụng Ứng dụng

Hệ thống con Hệ thống con Hệ thống con

Mở rộng API

Divice driver

Divice driver

Divice driver

Hạt nhân Hệ thống Quản lý bộ nhớ Gửi các tác vụ Quản lý thiết bị

Divice driver

31

Hình 1.5. C u trúc phân ớp của OS/2

n 6. C u trúc phân ớp của hệ điều hành UNIX

1.6.4.3. Máy ảo Virtual Machine)

Thông thƣờng, một hệ thống máy tính bao gồm nhiều lớp. Phần cứng ở lớp thấp

nhất. Hạt nhân ở lớp kế dùng các chỉ thị của phần cứng để tạo một tập hợp các lời gọi

hệ thống. Các chƣơng trình hệ thống có thể sử dụng hoặc là các lời gọi hệ thống hoặc

là các chỉ thị của phần cứng. Vì vậy nó xem phần cứng và lời gọi hệ thống nhƣ cùng

lớp.

Một số hệ thống có tổ chức sao cho các chƣơng trình ứng dụng có thể gọi d dàng

các chƣơng trình hệ thống. Mặc dù chƣơng trình hệ thống ở lớp cao hơn các phần khác

nhƣng chƣơng trình ứng dụng có thể xem mọi phần dƣới nó là một phần của máy. Lớp

ứng dụng này s dụng một hái niệm à máy o. Ví dụ hệ điều hành máy ảo của IBM.

Bằng cách sử dụng lập lịch cho CPU và kỹ thuật bộ nhớ ảo, hệ điều hành có thể

tạo nhiều tiến trình ảo, mỗi tiến trình sẽ thực hiện trên một bộ xử lý và bộ nhớ riêng.

Những tiến trình này có những đặc điểm riêng nhƣ lời gọi hệ thống và hệ thống tập tin

không đƣợc cung cấp phần cứng trực tiếp.

Tài nguyên của hệ thống cũng đƣợc chia s để tạo những máy ảo. Lập lịch CPU,

32

chia s CPU cho ngƣời dùng. Spooling và hệ thống tập tin đƣợc chia thành những th

(card) đọc ảo và máy in ảo. Một thiết bị đầu cuối terminal cũng cung cấp các chức

năng tạo các thao tác màn hình ảo.

Vấn đề phức tạp nhất của máy ảo là hệ thống đĩa. Giả sử hệ thống chỉ có ba bộ

điều khiển đĩa nhƣng có tới bảy máy ảo. Nhƣ vậy không thể gán cho mỗi máy ảo một

bộ điều khiển đĩa và giải pháp là xây dựng hệ thống đĩa ảo.

Mặc dù khái niệm máy ảo rất hữu ích nhƣng khó cài đặt. Máy ảo phải thực hiện ở

hai dạng: dạng giám sát Monitor và dạng ngƣời dùng. Ngoài ra máy ảo c n phải giải

quyết các vấn đề về vận chuyển dữ liệu và thời gian.

n . So sánh giữa máy thực và máy o

C hai ợi đi m chính trong việc s dụng máy o. Thứ nh t, bằng cách bảo vệ

hoàn toàn các tài nguyên hệ thống, máy ảo cung cấp mức độ bảo mật cao Thứ hai,

máy ảo cho ph p phát triển hệ thống đƣợc thực hiện mà không cần phá vỡ hoạt động hệ

thống thông thƣờng.

Mỗi máy ảo hoàn toàn bị cô lập từ các máy ảo khác, vì thế chúng ta không gặp

phải bất kỳ vấn đề bảo mật nào nhƣ tài nguyên hệ thống khác hoàn toàn đƣợc bảo vệ.

Thí dụ, các ứng dụng không đƣợc tin cậy đƣợc tải về từ Internet có thể đƣợc chạy trong

một máy ảo riêng. Một bất lợi của môi trƣờng này là không có sự chia s tài nguyên

33

trực tiếp. Hai tiếp cận cung cấp sự chia s đƣợc cài đặt. Thứ nh t, có thể chia s một

đĩa nhỏ. Cơ chế này đƣợc làm mẫu sau một đĩa đƣợc chia s vật lý. Thứ hai, có thể

định nghĩa một mạng của các máy ảo, mỗi máy ảo có thể gửi thông tin qua các mạng

giao tiếp này nhƣng nó đƣợc cài đặt bằng phần mềm.

Những hệ thống máy ảo nhƣ thế là một phƣơng tiện truyền thông hữu hiệu cho

việc nghiên cứu và phát triển hệ điều hành. Thông thƣờng, thay đổi một hệ điều hành là

một công việc khó. Vì các hệ điều hành là các chƣơng trình lớn và phức tạp, sự thay

đổi trên một phần này có thể gây một lỗi khó hiểu trong những phần khác. Sức mạnh

của hệ điều hành làm cho trƣờng hợp này là cực kỳ nguy hiểm. Vì hệ điều hành thực

thi trong chế độ kiểm soát, một thay đổi sai trong một con trỏ có thể gây lỗi và có thể

phá hủy toàn hệ thống tập tin. Do đó, cần phải kiểm tra tất cả thay đổi của hệ điều hành

một cách cẩn thận.

Tuy nhiên, hệ điều hành chạy trên máy và điều khiển hoàn toàn máy đó. Do đó,

hệ thống hiện hành phải bị dừng và ngừng việc sử dụng trong khi những thay đổi đƣợc

thực hiện và kiểm tra. Thời điểm này thƣờng đƣợc gọi là thời gian phát triển hệ thống.

Vì nó làm cho hệ thống không sẵn dùng đối với ngƣời dùng nên thời gian phát triển hệ

thống thƣờng đƣợc lập thời biểu vào buổi tối hay cuối tuần, khi tải hệ thống thấp.

Một hệ thống máy ảo có thể loại trừ nhiều vấn đề này. Ngƣời lập trình hệ thống

đƣợc cung cấp chính máy ảo của họ, và phát triển hệ thống đƣợc thực hiện trên máy ảo

thay vì trên máy vật lý thật sự. Một hệ điều hành thông thƣờng ít khi bị phá vỡ vìphát

triển hệ thống. Đƣơng nhiên, muốn cài đặt phần mềm máy ảo đ i hỏi cấu hình phần

cứng phải mạnh.

1.6.4.4. Mô hình Client-Server

Các hệ điều hành hiện đại thƣờng chuyển dần các công việc của hệ điều hành ra

các lớp bên ngoài nhằm thu nhỏ phần cốt lõi của hệ điều hành thành hạt nhân cực tiểu

kernel sao cho chỉ phần hạt nhân này phụ thuộc vào phần cứng. Để thực hiện đƣợc

điều này hệ điều hành xây dựng theo mô hình Client-Server , theo mô hình này hệ điều

hành bao gồm nhiều tiến trình đ ng vai trò Server c các chức năng chuy n biệt như

qu n tiến trình, qu n bộ nhớ, , phần hạt nhân của hệ điều hành chỉ thực hiện

nhiệm vụ tạo cơ chế thông tin i n ạc giữa các tiến trình C ient và Server

Trong mô hình này, chức năng của hạt nhân chỉ là kiểm soát quá trình thông tin

34

giữa Client và Server. Bằng cách chia hệ điều hành thành những phần nhỏ, mỗi phần

chỉ kiểm soát một mặt của hệ thống nhƣ các dịch vụ về tập tin, tiến trình, thiết bị đầu

cuối, bộ nhớ, mỗi phần sẽ gọn hơn và d quản lý hơn. Hơn nữa, tất cả Server thực hiện

nhƣ những tiến trình ở mức độ ngƣời dùng user-mode không phải ở mức độ hạt nhân

(kernel-mode , nên nó không truy xuất trực tiếp phần cứng. Do đó, nếu hệ thống tập tin

bị lỗi, các dịch vụ về tập tin có thể bị hỏng nhƣng nó thƣờng không gây ảnh hƣởng đến

toàn bộ hệ thống.

Một ƣu điểm khác của mô hình Client-Server là nó có thể tƣơng thích d dàng

với mô hình hệ thống phân tán. Nếu một Client giao tiếp với một Server bằng cách gửi

những thông điệp, họ không biết là khi nào thông điệp đó đang đƣợc xử lý cục bộ tại

máy hay đƣợc gửi vào mạng đến Server trên một máy từ xa. Khi Client quan tâm đến,

một yêu cầu đƣợc gửi đi và một trả lời đáp ứng di n ra nhƣ nhau.

N ư vậy c c t ến tr n tron t ốn ược c a t n hai lo :

- Tiến trình bên ngoài hay tiến trình của chƣơng trình ngƣời dùng đƣợc gọi là các

tiến trình Client.

- Tiến trình của hệ điều hành đƣợc gọi là tiến trình Server.

Khi cần thực hiện một chức năng hệ thống các tiến trình Client sẽ gởi yêu cầu tới

tiến trình Server tƣơng ứng, tiến trình Server sẽ xử lý và trả lời kết quả cho tiến trình

Client.

N ận xét:

- Hệ thống này d thay đổi và d mở rộng hệ điều hành. Để thay đổi các chức

năng của hệ điều hành chỉ cần thay đổi ở Server tƣơng ứng, để mở rộng hệ điều

hành chỉ cần thêm các dịch vụ phía Server.

- Các tiến trình Server của hệ điều hành hoạt động trong chế độ không đặc quyền

nên không thể truy cập trực tiếp đến phần cứng, điều này giúp hệ thống đƣợc

35

bảo vệ tốt hơn.

Hình 1.8. Mô hình C ient - Server

Trong mô hình này, chức năng của hạt nhân chỉ là kiểm soát quá trình thông tin

giữa Client và Server. Bằng cách chia hệ điều hành thành những phần nhỏ, mỗi phần

chỉ kiểm soát một mặt của hệ thống nhƣ các dịch vụ về tập tin, tiến trình, thiết bị đầu

cuối, bộ nhớ, mỗi phần sẽ gọn hơn và d quản lý hơn. Hơn nữa, tất cả Server thực hiện

nhƣ những tiến trình ở mức độ ngƣời dùng user-mode không phải ở mức độ hạt nhân

(kernel-mode), nên nó không truy xuất trực tiếp phần cứng. Do đó, nếu Server tập tin

bị lỗi, các dịch vụ về tập tin có thể bị hỏng nhƣng nó thƣờng không gây ảnh hƣởng đến

toàn bộ hệ thống.

Một ƣu điểm khác của mô hình Client-Server là nó có thể tƣơng thích d dàng

với mô hình hệ thống phân tán. Nếu một Client giao tiếp với một Server bằng cách gửi

những thông điệp, họ không biết là khi nào thông điệp đó đang đƣợc xử lý cục bộ tại

máy hay đƣợc gửi vào mạng đến Server trên một máy từ xa. Khi Client quan tâm đến,

một yêu cầu đƣợc gửi đi và một trả lời đáp ứng di n ra nhƣ nhau.

36

n . Mô hình Client-Server trong hệ thông phân tán

Hình vẽ sau đây cho thấy cấu trúc của hệ điều hành Windows NT. Đây là một cấu

trúc phức tạp với nhiều thành phần khác nhau và nó đƣợc xây dựng dựa trên mô hình

hệ điều hành Client/ Server.

n . C u trúc hệ điều hành Windows NT

Tron cấu trúc n y c ún ta t ấy nổ rõ a ểm sau ây:

- Cấu trúc của Windows NT đƣợc chia thành hai mode: Kernel mode và User

mode. Các chƣơng trình ứng dụng của ngƣời dùng chỉ chạy trong User mode,

các dịch vụ của hệ điều hành chỉ chạy trong Kernel mode. Nhờ vậy mà việc bảo

vệ các chƣơng trình của ngƣời dùng cũng nhƣ các thành phần của hệ điều hành,

trên bộ nhớ, đƣợc thực hiện d dàng hơn.

- Trong User mode của Windows NT có chứa các hệ thống con môi trƣờng nhƣ:

OS/2 subsystem và POSIX subsystem, nhờ có các hệ thống con môi trƣờng này

37

mà các ứng dụng đƣợc thiết kế trên các hệ điều hành khác vẫn chạy đƣợc trên hệ

điều hành Windows NT. Đây là điểm mạnh của các hệ điều hành Microsoft của

từ Windows NT.

Chúng tôi sẽ giải thích rõ hơn về hai khái niệm Kernel mode và User mode, và các

thành phần trong cấu trúc của hệ điều hành Windows NT ở phần sau, thông qua việc

giới thiệu về hệ điều hành Windows 2000.

1.7. MỘT SỐ HỆ ĐIỀU HÀNH HIỆN ĐẠI

1.7.1. Hệ điều hành Windows95

Windows95 là kết quả của một sự phát triển lớn từ Windows3.1. Microsoft không

chọn giải pháp nâng cấp Windows3.1 mà nó thực hiện việc kiến trúc lại Windows để

nó đủ mạnh để nó có thể thực hiện đƣợc các ứng dụng 32 bit trong một môi trƣờng ổn

định. Kết quả là Microsoft có đƣợc một phiên bản hệ điều hành Windows95 đủ mạnh,

có độ tin cậy và độ ổn định cao, và đặc biệt là cho ph p các ứng dụng 16 bit và DOS

chạy trên môi Windows95 giữ lại các thành phần hệ thống của Windows3.1 để đảm

bảo tƣơng thích với Win16, USER16 và các thành phần Kernel 16 bit.

Một trong những thành phần quan trọng của Windows95 là thành phần Thunking.

Nhờ có Thunking mà các module 16 bit có thể giao tiếp với các bản sao 32 bit của

chúng và ngƣợc lại. Thunking là một tập các thƣờng trình, mà nó ánh xạ các địa chỉ để

cho ph p các ứng dụng phân đoạn 16 bit chia s hoàn toàn bộ nhớ phẳng với các ứng

dụng 32 bit. Hình vẽ sau đây cho thấy vai tr và vị trí của lớp Thunking trong

Windows95.

Hình 1.11. Lớp Thun ing trong Windows95

H ng Intel đƣa ra vi xử lý 32 bit 80386 đầu tiên năm 1995, nhƣng đến khi hệ

38

điều hành Windows95 ra đời thì những điểm mạnh trong kiến trúc của nó mới đƣợc

phát huy, vì Windows95 đ tận dụng đƣợc các điểm mạnh trong kiến trúc của Intel 32

bit để xây dựng thành một hệ điều hành 32 bit đủ mạnh. Các hệ điều hành 32 bit có thể

truy xuất bộ nhớ theo mô hình bộ nhớ phẳng, trong mô hình này hệ điều hành có thể

đánh địa chỉ bộ nhớ theo kiểu tuyến tính lên đến 4Gb, tức là nó loại trừ đƣợc sự phân

đoạn bộ nhớ mà chúng ta đ thấy trong các hệ điều hành 16 bit. Khi chạy trên vi xử lý

80386 hệ điều hành Windows95 khai thác tối đa các điểm mạnh trong chế độ ảo của vi

xử lý này, vi xử lý 80386 có thể hoạt động ở các chế độ: thực real mode , bảo vệ

protected mode và ảo virtual mode . Chế độ ảo của 80386 c n đƣợc gọi là chế độ

8086 ảo, trong chế độ 8086 ảo ngoài việc cung cấp không gian bộ nhớ ảo cho các ứng

dụng, 80386 c n cho ph p các ứng dụng chế độ 8086 ảo thực thi trong chế độ 8086 ảo,

thực tế thực thi trong chế độ bảo vệ. Các ứng dụng chạy trong chế độ bảo vệ đƣợc hệ

điều hành bảo vệ trên bộ nhớ và đƣợc truy xuất một không gian bộ nhớ lớn hơn đến

4Gb bộ nhớ RAM . Nhờ có chế độ 8086 ảo mà Windows95 có thể cho chạy nhiều ứng

dụng đồng thời, kể cả các ứng dụng 16 bit của DOS và các ứng dụng 32 bit của

Windows, trên bộ nhớ và các ứng dụng này đƣợc hệ điều hành bảo vệ để các ứng dụng

không truy xuất bất hợp lệ lên các vùng nhớ của nhau, nếu có một ứng dụng bị hỏng thì

các ứng dụng c n lại vẫn hoạt động bình thƣờng. Windows95 xây dựng các máy ảo

DOS để chạy các ứng dụng 16 bit của DOS.

Intel 80386 là một vi xử lý 32 bit, nhƣng nếu sử dụng với hệ điều hành 16 bit thì

các hệ điều hành này xem nó nhƣ là các vi xử lý 80286 16 bit, nên khả năng quản lý bộ

nhớ của nó sẽ bị giới hạn. Việc xử lý dữ liệu trong môi trƣờng 32 bit cũng có nhiều

điểm lợi hơn trong môi trƣờng 16 bit. Cùng một ứng dụng đó nhƣng nếu chạy trong

môi trƣờng 16 bit thì nó phải chia thành các phân đoạn 16 bit và chỉ có thể truy xuất dữ

liệu trong không gian 64Kb, nhƣng khi chạy trong môi trƣờng 32 bit thì nó không cần

chia nhỏ và có thể truy xuất dữ liệu trong không gian bộ nhớ 4Gb, trong trƣờng hợp

này dữ liệu đƣợc tham chiếu theo kiểu tuyến tính nên tốc độ truy xuất đƣợc cải thiện

hơn.

1.7.2. Hệ điều hành Windows 2000

Windows 2000 đƣợc thiết kế để chạy trên các kiến trúc phần cứng khác nhau nhƣ:

Các hệ thống dựa trên nền Intel CISC và RISC, Alpha AXP, Motorola PowerPC,.... Nó

đƣợc viết bởi C và C++, ngôn ngữ assembly chỉ đƣợc sử dụng để viết các thành phần

39

giao tiếp trực tiếp với phần cứng, m ngôn ngữ assembly không chỉ tồn tại trong kernel

và HAL mà nó c n tồn tại trong phần kernel mode của hệ thống con Win32, và trong

một vài thƣ viện của user mode.

Windows 2000 là hệ điều hành đa xử lý 32 bit, đƣợc xây dựng để quản lý các hệ

thống mạng máy tính, nó hỗ trợ cả hai mô hình mạng: Client-Server (server-based) và

peer-to-peer. Windows 2000 đƣợc xây dựng dựa trên Windows NT 4.0, nó cung cấp

nhiều công cụ tốt hơn để quản lý Internet và các dịch vụ trên Internet.

Windows 2000 là một họ gồm có 4 sản phẩm, một cho Client và ba cho server

chẳng hạn Client: Windows 2000 Professional; Server: Windows 2000 Server,

Windows 2000 Advanced Server, Windows 2000 datacenter Server.

C c sản p ẩm trên k c n au ở c c ểm sau:

Số các CPU đƣợc hỗ trợ.

Số lƣợng bộ nhớ vật lý đƣợc hỗ trợ.

Số các kết nối mạng hiện tại đƣợc hỗ trợ.

Các dịch vụ có trong các sản phẩm server không có trong sản phẩm Client.

Một số đặc tính của Windows 2000 so với các Windows trước:

- Windows 2000 hỗ trợ các hệ thống đa xử lý trong khi các Windows trƣớc không

hỗ trợ điều này.

- Windows 2000 hỗ trợ hệ thống tập tin an toàn các Windows khác không có hệ

thống tập tin an toàn.

- Windows 2000 là hệ điều hành 32 bit đầy đủ, nó không chứa các m 16 bit, nó

hỗ trợ các m khác để chạy các ứng dụng Windows 16 bit. Các Windows khác

chứa một lƣợng lớn các m 16 bit cũ từ các phiên bản trƣớc.

1.7.3. Hệ điều hành Linux

Linux là hệ điều hành mi n phí đƣợc xây dựng từ hệ điều hành Unix. Nó đƣợc

phát triển bởi Linus Torvalds, một sinh viên của trƣờng Đại học Hensinki. Linus chỉ

chịu trách nhiệm tạo ra hệ thống kernel. Kernel là phần lõi của hệ điều hành, nó chịu

trách nhiệm thực hiện các công việc của hệ thống. Linux bây giờ nhƣ một tập các phần

40

mềm mà trong đó bao gồm kernel và các thành phần khác để nó trở thành một hệ điều

hành hoàn chỉnh. Một trong những nguyên nhân làm cho Linux đƣợc nhiều ngƣời biết

đến là nó đƣợc cung cấp mi n phí với m nguồn mở.

1.7.4. Hệ điều hành Windows 7

Khi phiên bản Windows 7 vừa ra mắt, nhiều ngƣời lựa chọn ngay phiên bản 64

bit để cài đặt cho máy tính cá nhân mà không có lấy chút kiến thức về nó. Tuy nhiên,

đây đúng là sự lựa chọn đúng đắn bởi những ƣu điểm vƣợt trội của Windows 7 (64 bit).

Thứ nh t, nếu với Windows 32 bit, bạn chỉ có thể sử dụng tối đa 4GB RAM.

Trong khi đó, Windows 64 bit cho ph p bạn chạy với thanh RAM 4GB, sau đó có thể

nâng cấp lên 8 hay 16GB.

Thứ hai, về mặt lý thuyết, hệ điều hành 32 bit sử dụng đƣợc 4GB RAM, tuy

nhiên, phiên bản 32 bit của Windows Vista và Win7 chỉ sử dụng tối đa là 3,12GB.

Trong khi với 64 bit, bạn có thể sử dụng toàn bộ 4GB.

Thứ ba, vấn đề bảo mật của Windows 64 bit tốt hơn 32 bit. Nhiều cải tiến trong

nhân đƣợc Microsoft giới thiệu rộng r i cùng với Vista chỉ đƣợc dùng cho phiên bản

64 bit, bao gồm công cụ Data Execution Prevention và PatchGuard hỗ trợ phần cứng.

Ngoài ra, phiên bản Vista và Windows 7 (64 bit) yêu cầu các chƣơng trình điều

khiển phải đƣợc các nhà cung cấp m hóa bằng kí tự số để ngăn chặn tin tặc và những k phát tán Rootkit7 và đặt các công cụ khai thác nhƣ những chƣơng trình điều khiển của nhân.

Thứ tư, do hệ điều hành 64 bit xử lý nhiều thông tin hơn cũng nhƣ hỗ trợ RAM

lớn hơn, máy tính của bạn sẽ đảm bảo chạy ổn định khi sử dụng các ứng dụng lớn,

phức tạp cùng lúc. Nếu bạn thƣờng xuyên làm việc với các ứng dụng đồ họa nhƣ

Photoshop, biên tập Video, tr chơi, sử dụng AutoCAD, thì 64 bit là lựa chọn tốt hơn.

Thứ năm, đó là việc các ứng dụng 32 bit đều làm việc đƣợc trong hệ điều hành 64

bit. Làm đƣợc nhƣ vậy là nhờ có một công cụ đƣợc biết đến dƣới tên Win32 on Win64

hay WOW giúp chuyển các Call lệnh đƣợc các ứng dụng sử dụng để yêu cầu dịch

vụ API - 32 bit từ một ứng dụng Win32 di sản thành Call API - 64 bit có thể đƣợc các

hệ thống phụ riêng của bản Windows 7 (64 bit) hỗ trợ.

7 Phần mềm dùng để chiếm quyền kiểm soát máy tính

41

Khi đó các ứng dụng 32 bit sẽ vận hành ổn định trên hệ điều hành Windows 64 bit, và hiện nay một số d ng CPU của AMD8 và Intel c n có khả năng tối ƣu hóa tới tốc độ cực đại. Một số ngoại lệ với khả năng tƣơng thích của WOW thƣờng xảy ra với

các ứng dụng sử dụng một hay nhiều chƣơng trình điều khiển của các thiết bị 32 bit di

sản riêng không phù hợp với các phiên bản 64 bit. Nếu có vài chƣơng trình không làm

việc, bạn cũng có thể hy vọng nhà phát triển sẽ sớm sửa các lỗi này.

1.7.5. Hệ điều hành Windows 8

Windows 7 ra mắt chính thức 2009, không đƣợc bao lâu thì những thông tin về

phiên bản tiếp theo là Windows 8 đ bị r rỉ từ nhóm nghiên cứu và phát triển.

Theo tin từ chuyên gia cao cấp Robert Morgan, Windows 8 thậm chí là cả

Windows 9 sẽ sử dụng cấu trúc 128 bit, đồng thời Microsoft sẽ mời các nhà sản

xuất máy tính lớn nhƣ Intel, AMD, HP và IBM xây dựng các thông số phần cứng để có

thể tƣơng thích với hệ điều hành mới này.

Về lý thuyết, các máy tính trên nền 64 bit sẽ nhận nhiều RAM hơn do đó tốc độ

xử lý sẽ nhanh hơn so với bản 32 bit. Nhƣ thế, với các phiên bản 128 bit ngƣời dùng sẽ

trải nghiệm một hệ thống đạt tốc độ xử lý ƣu việt hơn. Nếu theo đúng nhƣ những gì

Robert Morgan tiết lộ và theo lộ trình phát hành các bản Windows của Microsoft,

phiên bản 128 bit dành cho máy tính để bàn sẽ xuất hiện vào năm 2012. Theo

PcAdvisor).

1.7.6. Hệ điều hành Android9

Android là một hệ điều hành dựa trên nền tảng Linux đƣợc thiết kế dành cho các

thiết bị di động có màn hình cảm ứng nhƣ điện thoại thông minh và máy tính bảng.

Ban đầu, Android đƣợc phát triển bởi Tổng công ty Android, với sự hỗ trợ tài chính

từ Google và sau này đƣợc chính Google mua lại vào năm 2005. Android ra mắt vào

năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội

gồm các công ty phần cứng, phần mềm, và vi n thông với mục tiêu đẩy mạnh các tiêu

chuẩn mở cho các thiết bị di động. Chiếc điện thoại đầu tiên chạy Android đƣợc bán

8 AMD là nhà sản xuất bộ vi xử lý (CPU) x86 lớn thứ hai thế giới sau Intel 9 http://vi.wikipedia.org/wiki/Android

42

vào tháng 10 năm 2008.

Android có m nguồn mở và Google phát hành m nguồn theo Giấy ph p

Apache. Chính m nguồn mở cùng với một giấy ph p không có nhiều rang buộc đ cho

ph p các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết đƣợc

điều chỉnh và phân phối Android một cách tự do. Ngoài ra, Android c n có một cộng

đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết

bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi. Vào tháng 10 năm 2012, có

khoảng 700.000 ứng dụng trên Android, và số lƣợt tải ứng dụng từ Google Play, cửa

hàng ứng dụng chính của Android, ƣớc tính khoảng 25 tỷ lƣợt.

1.8. TÓM TẮT

Hệ điều hành thực hiện tất cả các chức năng đáp ứng yêu cầu ngƣời dùng. Hệ

điều hành phải cung cấp một số dịch vụ. Tại cấp thấp nhất, lời gọi hệ thống cho phép

một chƣơng trình đang chạy thực hiện yêu cầu trực tiếp từ hệ thống. Tại cấp cao hơn,

trình thông dịch cung cấp cơ chế cho ngƣời dùng đƣa ra yêu cầu mà không viết chƣơng

trình. Các lệnh có thể xuất phát từ tập tin trong suốt thời gian thực thi theo chế độ xử lý

theo lô, hay trực tiếp từ bàn phím trong chế độ tƣơng tác hay chia s thời gian. Các

chƣơng trình hệ thống đƣợc cung cấp để thoả m n nhiều yêu cầu thông thƣờng của

ngƣời dùng.

Các loại yêu cầu khác nhau dựa theo cấp yêu cầu. Cấp gọi hệ thống phải cung cấp

các chức năng cơ bản, nhƣ điều khiển quá trình, quản lý tập tin và thiết bị. Các yêu cầu

cấp cao hơn đƣợc thoả m n bởi trình thông dịch lệnh và chƣơng trình hệ thống đƣợc

dịch thành một chuỗi các lời gọi hệ thống. Các dịch vụ hệ thống có thể đƣợc phân cấp

thành nhiều loại: điều khiển chƣơng trình, yêu cầu trạng thái, yêu cầu nhập/xuất. Một

khi dịch vụ hệ thống đƣợc định nghĩa, cấu trúc của hệ điều hành đƣợc phát triển. Thiết

kế một hệ điều hành mới là công việc rất quan trọng.

Khái niệm máy ảo thực hiện tiếp cận phân tầng và xem nhân của hệ điều hành và

phần cứng nhƣ là phần cứng của nó. Các hệ điều hành khác có thể đƣợc nạp trên đỉnh

của máy ảo.

Các hệ điều hành đƣợc sử dụng ngày nay trên các máy tính đa chức năng

nhƣ máy tính cá nhân chủ yếu gồm hai chủng loại: hệ điều hành họ Unix và hệ điều

43

hành họ Microsoft Windows. Các máy tính mẹ (Mainframe computer) và các hệ thống

nhúng dùng nhiều loại hệ điều hành khác nhau, không phải là Unix hay Windows,

nhƣng cũng tƣơng tự nhƣ Unix hay Windows.

Các hệ điều hành hiện đại:

 Hệ điều hành thuộc họ Unix: Linux, Ubuntu, Android, Sailfish, Fedora, Firefox

OS … đƣợc coi là hệ điều hành nguồn mở.

 Hệ điều hành thuộc họ Windows: WinXP, Win7, Win8, Windows Phone, …

Câu hỏi ôn tập

1. Chức năng hệ điều hành là gì?

2. Thiết kế hệ điều hành đáp ứng mục tiêu gì?

3. Các thành phần hệ thống máy tính?

4. Phân biệt hệ điều hành đơn chƣơng và đa chƣơng?

5. Phân biệt hệ điều hành đơn nhiệm và đa nhiệm?

6. Phân biệt bộ nhớ chính và bộ nhớ thứ cấp?

7. Giải thích đa nhiệm, đa chƣơng, đa xử lý?

8. CPU ảo là gì? Cho ví dụ trong hệ điều hành?

9. Hệ đa xử lý có ƣu điểm gì?

10. Liệt kê các kiến trúc của hệ điều hành?

11. Hệ điều hành Windows đƣợc thiết kế theo kiến trúc nào?

12. Lý do hệ điều hành linux không đƣợc sử dụng rộng r i trong sinh viên

Việt Nam?

13. Ƣu điểm của Windows 8 so với các phiên bản trƣớc đó là gì?

TÀI LIỆU TH M KHẢO

[1] Nguyễn Kim Tuấn, Giáo trình Hệ điều hành, ĐH Huế, 2004.

44

[2] Nguyễn Ph Trường, Hệ điều hành , Khoa CNTT, Đại học Cần Thơ, 2005

CHƯ NG 2: QUẢN L TIẾN TR NH

2.1. MỤC TIÊU

Sau khi học xong chƣơng này, ngƣời học nắm đƣợc những kiến thức sau:

- Hiểu các khái niệm liên quan đến tiến trình quá trình - Process)

- Hiểu cách lập thời biểu CPU cho các tiến trình

- Hiểu cơ chế đồng bộ hóa các quá trình

- Hiểu cơ chế tắc nghẽn và chống tắc nghẽn

Tất cả các hệ điều hành từ đơn chƣơng đến đa chƣơng, từ đơn nhiệm đến đa

nhiệm đều phải đƣợc xây dụng dựa trên khái niệm về tiến trình. Vì thế, một yêu cầu

quan trọng trong thiết kế hệ điều hành là thành phần quản lý tiến trình của hệ điều hành

phải đáp ứng tất cả những gì liên quan đến tiến trình:

- Hệ điều hành phải cho ph p thực hiện nhiều tiến trình đồng thời để khai thác tối

đa thời gian xử lý của CPU nhƣng cũng cung cấp đƣợc thời gian hồi đáp hợp lý.

- Hệ điều hành phải cấp phát tài nguyên để tiến trình hoạt động một cách hiệu quả

với một chính sách hợp lý nhƣng không xảy ra tình trạng tắc nghẽn trong hệ

thống.

- Hệ điều hành phải có cơ chế đồng bộ hóa yêu cầu các tiến trình hợp tác lẫn nhau

tránh việc mất mát dữ liệu.

2.2. TỔNG QU N VỀ TIẾN TR NH

2.2.1. Nhu cầu xử lý đồng hành

Hầu hết các hệ điều hành hiện đại đều cho phép người d ng thi hành nhiều công

việc đồng thời tr n c ng một máy tính Nhu cầu x đồng hành (concurrency) này

xu t phát từ đâu, và hệ điều hành cần ph i t chức hỗ trợ như thế nào cho các môi

trường đa nhiệm như thế? Đ à nội dung chúng ta sẽ tìm hi u trong bài này

Có hai động lực chính khiến cho các hệ điều hành hiện đại thƣờng hỗ trợ môi

trƣờng đa nhiệm trong đó chấp nhận nhiều công việc thực hiện đồng thời trên cùng một

45

máy tính:

- Tăng hiệu suất sử dụng CPU:

Phần lớn các công việc khi thi hành đều trải qua nhiều chu kỳ xử lý Chu kỳ

CPU, sử dụng CPU và chu kỳ nhập xuất Chu kỳ IO, sử dụng các thiết bị nhập xuất

xen kẽ nhƣ sau :

CPU IO CPU IO CPU

Bản 2 Chu ỳ CPU và chu ỳ I/O

Nếu chỉ có một tiến trình duy nhất trong hệ thống, thì vào các chu kỳ I/O của

công việc, CPU sẽ hoàn toàn nhàn rỗi. Ý tƣởng tăng cƣờng số lƣợng công việc trong

hệ thống là để tận dụng CPU: nếu công việc 1 yêu cầu I/O, thì có thể tận dụng CPU để

thực hiện công việc 2...

Công việc 1 CPU IO CPU IO CPU

Công việc 2 CPU IO CPU IO

Bản 2 2. Tăng hiệu su t s dụng CPU

- Tăng tốc độ xử lý:

Một số bài toán có bản chất xử lý song song nếu đƣợc xây dựng thành nhiều

module hoạt động đồng thời thì sẽ tiết kiệm đƣợc thời gian xử lý.

Ví dụ : X t bài toán tính giá trị biểu thức kq = a*b + c*d . Nếu tiến hành tính

đồng thời a*b và c*d thì thời gian xử lý sẽ ngắn hơn là thực hiện tuần tự.

Trong các trƣờng hợp đó, cần có một mô hình xử lý đồng hành thích hợp. Trên

máy tính có cấu hình nhiều CPU, hỗ trợ xử lý song song thật sự, điều này sẽ giúp tăng

hiệu quả thi hành của hệ thống đáng kể.

2.2.2. Khái niệm tiến trình

Những hệ điều hành ban đầu cho ph p chỉ một chƣơng trình đƣợc thực thi tại một

thời điểm. Chƣơng trình này có toàn quyền điều khiển hệ thống và có thể truy xuất tới

46

tất cả tài nguyên của hệ thống. Những hệ điều hành hiện đại cho ph p nhiều chƣơng

trình đƣợc nạp vào bộ nhớ và đƣợc thực thi đồng hành. Sự phát triển này yêu cầu sự

điều khiển mạnh mẽ hơn và phân chia tài nguyên nhiều hơn giữa các tiến trình sao cho

cân bằng và hiệu quả. Yêu cầu này dẫn đến khái niệm tiến trình Process .

Hình 2.1. (a) đa chương với 4 chương trình

(b)Mô hình hái niệm với 4 chương trình độc p

(c)Tại một thời đi m chỉ c 1 chương trình hoạt động

Tiến trình à một chương trình đang x , s hữu một con trỏ ệnh, t p các thanh

10 Trần Hạnh Nhi, Giáo trình điện tử hệ điều hành nâng cao, Trƣờng Đại học Khoa học Tự nhiên TP.HCM.

47

ghi và các biến Đ hoàn thành công việc của mình, một tiến trình c th cần đến một số tài nguy n như CPU, bộ nhớ chính, các t p tin và thiết bị nh p/xu t10.

Hình 2.2. Tiến trình (Process)

Cần phân biệt hai hái niệm chương trình và tiến trình Một chương trình à một

thực th thụ động, chứa đựng các chỉ thị điều hi n máy tính đ tiến hành một công

việc nàođ ; hi cho thực hiện các chỉ thị này, chương trình chuy n thành tiến trình, à

một thực th hoạt động, với con trỏ ệnh xác định chỉ thị ế tiếp sẽ thi hành, èm theo

t p các tài nguy n phục vụ cho hoạt động của tiến trình

Về mặt ý niệm, có thể xem nhƣ mỗi tiến trình sở hữu một bộ xử lý ảo cho riêng

nó, nhƣng trong thực tế, chỉ có một bộ xử lý thật sự đƣợc chuyển đổi qua lại giữa các

tiến trình. Sự chuyển đổi nhanh chóng này đƣợc gọi là sự đa chương

(multiprogramming). Hệ điều hành chịu trách nhiệm sử dụng một thuật toán định thời

CPU để quyết định thời điểm cần dừng hoạt động của tiến trình đang xử lý để phục vụ

một tiến trình khác, và lựa chọn tiến trình tiếp theo sẽ đƣợc phục vụ. Bộ phận thực hiện

chức năng này của hệ điều hành đƣợc gọi là bộ định thời (scheduler).

Một hệ điều hành phức tạp hơn đƣợc mong đợi nhiều hơn trong việc thực hiện

các hành vi của ngƣời dùng. Mặc dù quan tâm chủ yếu của hệ điều hành là thực thi

chƣơng trình ngƣời dùng, nhƣng nó cũng quan tâm đến các công việc khác nhau bên

ngoài nhân. Do đó, một hệ thống chứa tập hợp các quá trình: quá trình hệ điều hành

thực thi m hệ thống, quá trình ngƣời dùng thực thi m ngƣời dùng. Tất cả quá trình

này có tiềm năng thực thi đồng hành, với một CPU hay nhiều CPU đƣợc đa hợp giữa

chúng. Bằng cách chuyển đổi CPU giữa các quá trình, hệ điều hành có thể làm cho

48

máy tính hoạt động với năng suất cao hơn.

2.2.3. Phân loại tiến trình

Các tiến trình trong hệ thống có thể chia thành hai loại: tiến trình tuần tự và tiến

trình song song. Tiến trình tuần tự là các tiến trình mà điểm khởi tạo của nó là điểm kết

thúc của tiến trình trƣớc đó. Tiến trình song song là các tiến trình mà điểm khởi tạo của

tiến trình này mằn ở thân của các tiến trình khác, tức là có thể khởi tạo một tiến trình

mới khi các tiến trình trƣớc đó chƣa kết thúc. Tiến trình song song đƣợc chia thành

nhiều loại:

- Tiến trình song song độc p: là các tiến trình hoạt động song song nhƣng không có

quan hệ thông tin với nhau, trong trƣờng hợp này hệ điều hành phải thiết lập cơ chế

bảo vệ dữ liệu của các tiến trình, và cấp phát tài nguyên cho các tiến trình một cách

hợp lý.

- Tiến trình song song c quan hệ thông tin: trong quá trình hoạt động các tiến trình

thƣờng trao đổi thông tin với nhau, trong một số trƣờng hợp tiến trình gởi thông

báo cần phải nhận đƣợc tín hiệu từ tiến trình nhận để tiếp tục, điều này d dẫn đến

bế tắc khi tiến trình nhận tín hiệu không ở trong trạng thái nhận hay tiến trình gởi

không ở trong trạng thái nhận thông báo trả lời.

- Tiến trình song song phân c p: Trong quá trình hoạt động một tiến trình có thể khởi

tạo các tiến trình khác hoạt động song song với nó, tiến trình khởi tạo đƣợc gọi là

tiến trình cha, tiến trình đƣợc tạo gọi là tiến trình con. Trong mô hình này hệ điều

hành phải giải quyết vấn đề cấp phát tài nguyên cho các tiến trình con. Tiến trình

con nhận tài nguyên ở đâu, từ tiến trình cha hay từ hệ thống. Để giải quyết vấn đề

này hệ điều hành đƣa ra hai mô hình quản lý tài nguyên: Thứ nhất, mô hình tập

trung, trong mô hình này hệ điều hành chịu trách nhiệm phân phối tài nguyên cho

tất cả các tiến trình trong hệ thống. Thứ hai, mô hình phân tán, trong mô hình này

hệ điều hành cho ph p tiến trình con nhận tài nguyên từ tiến trình cha, tức là tiến

trình khởi tạo có nhiệm vụ nhận tài nguyên từ hệ điều hành để cấp phát cho các tiến

trình mà nó tạo ra, và nó có nhiệm vụ thu hồi lại tài nguyên đ cấp phát trả về cho

hệ điều hành trƣớc khi kết thúc.

- Tiến trình song song đồng mức: là các tiến trình hoạt động song song sử dụng

chung tài nguyên theo nguyên tắc lần lƣợt, mỗi tiến trình sau một khoảng thời gian

49

chiếm giữ tài nguyên phải tự động trả lại tài nguyên cho tiến trình kia.

Các tiến trình tuần tự chỉ xuất hiện trong các hệ điều hành đơn nhiệm đa chƣơng,

nhƣ hệ điều hành MS-DOS, loại tiến trình này tồn tại nhiều hạn chế, điển hình nhất là

không khai thác tối đa thời gian xử lý của CPU. Các tiến trình song song xuất hiện

trong các hệ điều hành đa nhiệm đa chƣơng, trên cả hệ thống đơn xử lý và đa xử lý.

Nhƣng sự song song thực, chỉ có ở các hệ thống đa xử lý, trong hệ thống này mỗi CPU

chịu trách nhiệm thực hiện một tiến trình. Sự song song trên các hệ thống đơn xử lý là

sự song song giả, các tiến trình song song trên hệ thống này thực chất là các tiến trình

thay nhau sử dụng CPU, tiến trình này đang chạy thì có thể dừng lại để nhƣờng CPU

cho tiến trình khác chạy và sẽ tiếp tục lại sau đó khi có đƣợc CPU. Đây là trƣờng hợp

mà ở trên ta cho rằng: điểm khởi tạo của tiến trình này nằm ở thân của tiến trình khác.

Hình vẽ sau đây minh họa sự khác nhau, về mặt thực hiện, giữa các tiến trình

song song/đồng thời trong hệ thống đơn xử lý với các tiến trình song song/đồng thời

trong hệ thống đa xử lý.

Hình 2.3. Sự thực hiện đồng thời của các tiến trình trong hệ thống đơn x

Hình 2.4. Sự thực hiện đồng thời của các tiến trình trong hệ thống đa x

Trong tài iệu này chúng ta chỉ h o sát sự hoạt động của các tiến trình song

song (hay đồng thời) tr n các hệ thống đơn x .

Đối với ngƣời dùng thì trong hệ thống chỉ có hai nhóm tiến trình. Thứ nhất, là các

tiến trình của hệ điều hành. Thứ hai, là các tiến trình của chƣơng trình ngƣời dùng. Các

tiến trình của hệ điều hành hoạt động trong chế độ đặc quyền, nhờ đó mà nó có thể truy

xuất vào các vùng dữ liệu đƣợc bảo vệ của hệ thống. Trong khi đó các tiến trình của

50

chƣơng trình ngƣời dùng hoạt động trong chế độ không đặc quyền user mode , nên nó

không thể truy xuất vào hệ thống, nhờ đó mà hệ điều hành đƣợc bảo vệ. Các tiến trình

của chƣơng trình ngƣời dùng có thể truy xuất vào hệ thống thông qua các tiến trình của

hệ điều hành bằng cách thực hiện một lời gọi hệ thống.

2.2.4. Tiểu trình Thread) và mô hình đa tiểu trình Multithread)

2.2.4.1. Khái niệm tiểu trình

Trong hầu hết các hệ điều hành, mỗi tiến trình có một không gian địa chỉ và chỉ

có một d ng xử lý. Tuy nhiên, có nhiều tình huống ngƣời dùng mong muốn có nhiều

d ng xử lý cùng chia s một không gian địa chỉ, và các d ng xử lý này hoạt động song

song tƣơng tự nhƣ các tiến trình phân biệt ngoại trừ việc chia s không gian địa chỉ .

Ví dụ : Một server quản lý tập tin thỉnh thoảng phải tự khóa để chờ các thao tác

truy xuất đĩa hoàn tất. Nếu server có nhiều d ng xử lý, hệ thống có thể xử lý các yêu

cầu mới trong khi một d ng xử lý bị khoá. Nhƣ vậy việc thực hiện chƣơng trình sẽ có

hiệu quả hơn. Điều này không thể đạt đƣợc bằng cách tạo hai tiến trình server riêng

biệt vì cần phải chia s cùng một vùng đệm, do vậy bắt buộc phải chia s không gian

địa chỉ.

Chính vì các tình huống tƣơng tự, ngƣời ta cần có một cơ chế xử lý mới cho ph p

có nhiều d ng xử lý trong cùng một tiến trình.

Ngày nay đ có nhiều hệ điều hành cung cấp một cơ chế nhƣ thế và gọi là ti u

trình (threads).

Hình 2.5. Ti u trình (Thread)

Một ti u trình à một đơn vị x cơ b n trong hệ thống Mỗi ti u trình x tuần

51

tự đoạn mã ệnh của n , s hữu một con trỏ ệnh, t p các thanh ghi và một v ng nhớ

stac ri ng Các ti u trình chia sẻ CPU với nhau giống như cách chia sẻ giữa các tiến

trình: một ti u trình x trong hi các ti u trình hác chờ đến ượt Một ti u trình

cũng c th tạo p các tiến trình con, và nh n các trạng thái hác nhau như một tiến

trình th t sự Một tiến trình c th s hữu nhiều ti u trình

2.2.4.2. Phân iệt tiến trình và tiểu trình

Process có code segment, data segment, stack

Tiến trình Process) Tiểu trình Thread)

segment, heap & một số phần I/O nữa

Thread không có data segment & heap

Mỗi process có ít nhất một thread Thread tồn tại trong process

Thread trong cùng một process dùng chung Có thể có nhiều thread trong một

nhau code/data/heap và I/O; nhƣng chúng process, và main là một trong số đó

có stack segment, registers riêng.

Tạo ra một process mất nhiều thời gian Tạo ra một thread mất ít thời gian

Chuyển đổi chậm Chuyển đổi nhanh

Khi process kết thúc hoạt động, tất cả các Khi thread kết thúc hoạt động vùng bộ

thread kết thúc theo. nhớ stack của nó đƣợc giải phóng

Bản 2 3. So sánh tiến trình và ti u trình

Các tiến trình tạo thành những thực thể độc lập. Mỗi tiến trình có một tập tài

nguyên và một môi trƣờng riêng một con trỏ lệnh, một Stack, các thanh ghi và không

gian địa chỉ . Các tiến trình hoàn toàn độc lập với nhau, chỉ có thể liên lạc thông qua

các cơ chế thông tin giữa các tiến trình mà hệ điều hành cung cấp. Ngƣợc lại, các tiểu

trình trong cùng một tiến trình lại chia s một không gian địa chỉ chung, điều này có

nghĩa là các tiểu trình có thể chia s các biến toàn cục của tiến trình. Một tiểu trình có

thể truy xuất đến cả các stack của những tiểu trình khác trong cùng tiến trình. Cấu trúc

này không đề nghị một cơ chế bảo vệ nào, và điều này cũng không thật cần thiết vì các

tiểu trình trong cùng một tiến trình thuộc về cùng một sở hữu chủ đ tạo ra chúng trong

52

ý định cho ph p chúng hợp tác với nhau.

Hình 2.6. Các ti u trình trong c ng một tiến trình

Phân bổ thông tin lƣu trữ cấu trúc mô tả tiến trình và tiểu trình:

Tiến trình Tiểu trình

Không gian địa chỉ Con trỏ lệnh+các thanh ghi

Tài nguyên toàn cục Stack

Các thông tin thống kê Tài nguyên cục bộ

2.2.4.3. Kernel thread và user thread

Khái niệm tiểu trình có thể đƣợc cài đặt trong kernel của Hệ điều hành, khi đó

đơn vị cơ sở sử dụng CPU để xử lý là tiểu trình, Hệ điều hành sẽ phân phối CPU cho

các tiểu trình trong hệ thống. Tuy nhiên đối với một số hệ điều hành, khái niệm tiểu

trình chỉ đƣợc hỗ trợ nhƣ một đối tƣợng ngƣời dùng, các thao tác tiểu trình đƣợc cung

cấp kèm theo do một bộ thƣ viện xử lý trong chế độ ngƣời dùng không đặc quyền user

mode . Lúc này Hệ điều hành sẽ chỉ biết đến khái niệm tiến trình, do vậy cần có cơ chế

để liên kết các tiểu trình cùng một tiến trình với tiến trình cha trong kernel đối tƣợng

53

này đôi lúc đƣợc gọi là LWP lightweight process .

Hình 2.7. chế độ người d ng hông đ c quyền (user mode)

2.3. TỔ CHỨC QUẢN L TIẾN TR NH

2.3.1. 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ột thời điểm đƣợc xác định bởi hoạt động hiện thời

của tiến trình tại thời điểm đó. Trong quá trình sống, một tiến trình thay đổi trạng thái

do nhiều nguyên nhân nhƣ: phải chờ một sự kiện nào đó xảy ra, hay đợi một thao tác

nhập/xuất hoàn tất, buộc phải dừng hoạt động do đ hết thời gian xử lý …

 Xét tiến trình hai trạng thái

Một số ít hệ điều hành chỉ cho ph p tiến trình tồn tại ở một trong hai trạng thái:

Not Running và Running. Khi hệ điều hành tạo ra một tiến trình mới, hệ điều hành đƣa

tiến trình đó vào hệ thống ở trạng thái Not Running, tiến trình ở trạng thái này để chờ

đƣợc chuyển sang trạng thái Running. Vì một lý do nào đó, tiến trình đang thực hiện bị

ngắt thì bộ phân phát dispatcher sẽ thu hồi lại CPU của tiến trình này và chọn một

tiến trình ở trạng thái Not running để cấp CPU cho nó và chuyển nó sang trạng thái

Running. Tiến trình bị thu hồi CPU sẽ đƣợc chuyển về lại trạng thái Not running.

54

Hình 2.8. Sơ đồ tiến trình hai trạng thái

Tại một thời điểm xác định chỉ có duy nhất một tiến trình ở trạng thái Runnig,

nhƣng có thể có nhiều tiến trình ở trạng thái Not running, các tiến trình ở trạng thái Not

running đƣợc chứa trong một hàng đợi Queue . Tiến trình đang ở trạng thái Running

bị chuyển sang trạng thái Not running sẽ đƣợc đƣa vào hàng đợi. Hình vẽ sau đây mô

tả việc chuyển tiến trình vào hàng đợi.

Hình 2.9. Sơ đồ chuy n tiến trình vào hàng đợi

 Xét tiến trình ba trạng thái

Đa số hệ điều hành đều cho ph p tiến trình tồn tại ở một trong ba trạng thái, đó là:

ready, running, blocked:

Hình 2.10. Sơ đồ tiến trình 3 trạng thái

 Trạng thái sẵn sàng Ready: Ngay sau khi khởi tạo tiến trình, đƣa tiến trình vào

hệ thống và cấp phát đầy đủ tài nguyên trừ CPU cho tiến trình, hệ điều hành

đƣa tiến trình vào trạng thái ready. Hay nói cách khác, trạng thái ready là trạng

thái của một tiến trình trong hệ thống đang chờ đƣợc cấp CPU để bắt đầu thực

hiện.

 Trạng thái thực thi (Running): Là trạng thái mà tiến trình đang đƣợc sở hữu

CPU để hoạt động, hay nói cách khác là các chỉ thị của tiến trình đang đƣợc

55

thực hiện/ xử lý bởi CPU.

 Trạng thái khoá (Blocked): Là trạng thái mà tiến trình đang chờ để đƣợc cấp

phát thêm tài nguyên, để một sự kiện nào đó xảy ra, hay một quá trình vào/ra kết

thúc.

Quá trình chuyển trạng thái trong sơ đồ Hình 2.10 nhƣ sau:

1. Admit Tiến trình đƣợc khởi tạo, đƣợc đƣa vào hệ thống, đƣợc cấp phát đầy đủ

tài nguyên chỉ thiếu CPU.

2. Dispatch Tiến trình đƣợc cấp CPU để bắt đầu thực hiện/ xử lý.

3. Release Tiến trình hoàn thành xử lý và kết thúc.

4. Time_out Tiến trình bị bộ phân phát thu hồi CPU, do hết thời gian đƣợc quyền

sử dụng CPU, để cấp phát cho tiến trình khác.

5. (Event Wait Tiến trình đang chờ một sự kiện nào đó xảy ra hay đang chờ một

thao vào/ra kết thúc hay tài nguyên mà tiến trình yêu cầu chƣa đƣợc hệ điều hành đáp

ứng.

6. (Event Occurs Sự kiện mà tiến trình chờ đ xảy ra, thao tác vào/ra mà tiến trình

đợi đ kết thúc, hay tài nguyên mà tiến trình yêu cầu đ đƣợc hệ điều hành đáp ứng,

Bộ phận phân phát thu hồi CPU từ một tiến trình đang thực hiện trong các trƣờng

hợp sau:

(1) Tiến trình đang thực hiện hết thời gian time-out đƣợc quyền sử dụng CPU mà

bộ phận phân phát dành cho nó.

(2) Có một tiến trình mới phát sinh và tiến trình mới này có độ ƣu tiên cao hơn tiến

trình hiện tại.

(3) Có một tiến trình mới phát sinh và tiến trình mới cần một khoảng thời gian của

CPU nhỏ hơn nhiều so với khoảng thời gian c n lại của tiến trình hiện tại.

Tại một thời điểm xác định trong hệ thống có thể có nhiều tiến trình đang ở trạng

thái Ready hoặc Blocked nhƣng chỉ có một tiến trình ở trạng thái Running. Các tiến

56

trình ở trạng thái Ready và Blocked đƣợc chứa trong các hàng đợi Queue riêng.

Hình 2.11. Sơ đồ chuy n tiến trình vào các hàng đợi

Có nhiều lý do để một tiến trình đang ở trạng thái running chuyển sang trạng thái

blocked, do đó đa số các hệ điều hành đều thiết kế một hệ thống hàng đợi gồm nhiều

hàng đợi, mỗi hàng đợi dùng để chứa những tiến trình đang đợi cùng một sự kiện nào

đó.

 Xét tiến trình ốn trạng thái

Trong môi trƣờng hệ điều hành đa nhiệm thì việc tổ chức các Queue để lƣu các

tiến trình chƣa thể hoạt động là cần thiết, nhƣng nếu tồn tại quá nhiều tiến trình trong

Queue, hay chính xác hơn trong bộ nhớ chính, sẽ dẫn đến trình trạng l ng phí bộ nhớ,

không c n đủ bộ nhớ để nạp các tiến trình khác khi cần thiết. Mặt khác nếu các tiến

trình trong Queue đang chiếm giữ tài nguyên của hệ thống, mà những tài nguyên này

lại là những tài nguyên các tiến trình khác đang cần, điều này dẫn đến tình trạng sử

dụng tài nguyên không hợp lý, làm cho hệ thống thiếu tài nguyên thực chất là thừa

trầm trọng và có thể làm cho hệ thống tắc nghẽn. Với những lý do trên các hệ điều

hành đa nhiệm thiết kế thêm một trạng thái tiến trình mới, đ à trạng thái Suspend

(tạm dừng). Trạng thái này rất cần thiết cho các hệ thống sử dụng kỹ thuật Swap trong

việc cấp phát bộ nhớ cho các tiến trình. Khái niệm Swap sẽ đƣợc đề cập đến trong

chƣơng Quản lý bộ nhớ của tài liệu này.

57

Hình 2.12. Sơ đồ tiến trình 4 trạng thái

Trạng thái Suspend là trạng thái của một tiến trình khi nó đang đƣợc lƣu trữ trên

bộ nhớ phụ, hay chính xác hơn đây là các tiến trình đang ở trong trạng thái blocked

và/hoặc ready bị hệ điều hành chuyển ra đĩa để thu hồi lại không gian nhớ đ cấp cho

tiến trình hoặc thu hồi lại tài nguyên đ cấp cho tiến trình để cấp cho một tiến trình

khác đang rất cần đƣợc nạp vào bộ nhớ tại thời điểm hiện tại.

 Tiến trình năm trạng thái

Trong thực tế hệ điều hành thiết kế hai trạng thái suspend: một trạng thái suspend

dành cho các tiến trình từ blocked chuyển đến, trạng thái này đƣợc gọi là blocked-

suspend và một trạng thái suspend dành cho các tiến trình từ ready chuyển đến, trạng

thái này đƣợc gọi là ready-suspend.

Tới đây ta c th hi u các trạng thái tiến trình như sau:

- New: tiến trình mới tạo ra đƣợc đƣa vào hệ thống

- Ready: tiến trình đƣợc định vị trong bộ nhớ chính và đang chờ đƣợc cấp CPU để

thực hiện.

- Running: tiến trình đang đƣợc thực thi đang sở hữu CPU

- Blocked: tiến trình đƣợc định vị trong bộ nhớ chính và đang đợi một sự kiện hay

một quá trình I/O nào đó.

- Blocked-suspend: tiến trình đang bị chứa trên bộ nhớ phụ đĩa và đang đợi một sự

kiện nào đó.

- Ready-suspend: tiến trình đang bị chứa trên bộ nhớ phụ nhƣng sẵn sàng thực hiện

ngay sau khi đƣợc nạp vào bộ nhớ chính.

58

Sau đây chúng ta xem x t sự chuyển trạng thái tiến trình trong sơ đồ Hình 2.13:

Hình 2.13. Sơ đồ chuy n tiến trình năm trạng thái

 Blocked sang Blocked-suspend: nếu không c n tiến trình ready trong bộ nhớ chính

và bộ nhớ chính không c n không gian nhớ trống thì phải có ít nhất một tiến trình

blocked bị chuyển ra ngoài, blocked-suspend, để dành bộ nhớ cho một tiến trình

không bị khoá khác.

 Blocked-suspend sang Ready-suspend: một tiến trình đang ở trạng thái blocked-

suspend đƣợc chuyển sang trạng thái ready-suspend khi sự kiện mà nó đợi đ xảy

ra.

 Ready-suspend sang Ready: có hai lý do để hệ điều hành chọn khi chuyển một tiến

trình ở trạng thái ready-suspend sang trạng thái ready:

o Không c n tiến trình ready trong bộ nhớ chính, hệ điều hành phải nạp một tiến

trình mới vào để nó tiếp tục thực hiện.

o Nếu có tiến trình ready-suspend có độ ƣu tiên cao hơn so với các tiến trình

ready hiện tại thì hệ điều hành có thể chuyển nó sang trạng thái ready để nó

nhiều cơ hội để đƣợc thực hiện hơn.

 Ready sang Ready suspend: Hệ điều hành thƣờng chuyển các tiến trình blocked

sang suspend hơn là các tiến trình ready, vì các tiến trình ở trạng thái blocked

không thể thực hiện ngay lập tức nhƣng lại chiếm nhiều không gian bộ nhớ chính

hơn so với các tiến trình ở trạng thái ready. Tuy nhiên, nếu việc chọn tiến trình để

chuyển sang suspend dựa vào hai điều kiện: chiếm ít không gian bộ nhớ hơn và có

độ ƣu tiên thấp hơn thì hệ điều hành có thể chuyển một tiến trình ready sang trạng

59

thái suspend.

Nhƣ vậy với việc chuyển tiến trình sang trạng thái suspend hệ điều hành sẽ chủ

động hơn trong việc cấp phát bộ nhớ và ngăn chặn các tình huống tắc nghẽn có thể xảy

ra do sự tranh chấp về tài nguyên, nhờ vậy mà hệ điều hành tiết kiệm đƣợc bộ nhớ, chia

s đƣợc tài nguyên cho nhiều tiến trình và tăng đƣợc mức độ đa chƣơng của hệ thống.

Tuy nhiên, để có đƣợc những lợi ích trên hệ điều hành đ phải chi phí rất nhiều cho

việc tạm dừng tiến trình. Hệ điều hành phải xem x t tiến trình nào đƣợc chọn để

suspend, khi suspend một tiến trình hệ điều hành phải lƣu lại tất cả các thông tin liên

quan đến tiến trình đó con trỏ lệnh, tài nguyên mà tiến trình đ đƣợc cấp, ... , hệ điều

hành phải lựa chọn thời điển thích hợp để đƣa tiến trình ra bộ nhớ ngoài, ... những thao

tác đó sẽ làm chậm tốc độ thực hiện của toàn bộ hệ thống. Nhƣng dầu sao đi nữa thì hệ

điều hành vẫn phải sử dụng trạng thái suspend vì tăng mức độ đa chƣơng của hệ thống

là một trong những mục tiêu lớn của hệ điều hành.

2.3.2. Chế độ xử lý của tiến trình

Để đảm bảo hệ thống hoạt động đúng đắn, hệ điều hành cần phải đƣợc bảo vệ

khỏi sự xâm phạm của các tiến trình. Bản thân các tiến trình và dữ liệu cũng cần đƣợc

bảo vệđể tránh các ảnh hƣởng sai lạc lẫn nhau. Một cách tiếp cận để giải quyết vấn đề

là phân biệt hai chế độ xử lý cho các tiến trình: chế độ hông đ c quyền và chế độ đ c

quyền nhờ vào sự trợ giúp của cơ chế phần cứng. Tập lệnh của CPU đƣợc phân chia

thành các lệnh đặc quyền và lệnh không đặc quyền. Cơ chế phần cứng chỉ cho ph p các

lệnh đặc quyền đƣợc thực hiện trong chế độ đặc quyền. Thông thƣờng chỉ có hệ điều

hành hoạt động trong chế độ đặc quyền, các tiến trình của ngƣời dùng hoạt động trong

chế độ không đặc quyền, không thực hiện đƣợc các lệnh đặc quyền có nguy cơ ảnh

hƣởng đến hệ thống. Nhƣ vậy hệ điều hành đƣợc bảo vệ. Khi một tiến trình ngƣời dùng

gọi đến một lời gọi hệ thống, tiến trình của hệ điều hành xử lý lời gọi này sẽ hoạt động

trong chế độ đặc quyền, sau khi hoàn tất thì trả quyền điều khiển về cho tiến trình

60

ngƣời dùng trong chế độ không đặc quyền.

Ngƣời dùng

Chế độ không đặc quyền

Shell, editor,compiler,...

Hệ điều hành

Chế độ đặc quyền

Hardware

Hình 2.14. Hai chế độ x đ c quyền và hông đ c quyền

2.3.3. Cấu tr c dữ liệu khối quản lý tiến trình

Hệ điều hành quản lý các tiến trình trong hệ thống thông qua hối qu n tiến

trình (process control block -PCB . PCB là một vùng nhớ lƣu trữ các thông tin mô tả

cho tiến trình, với các thành phần chủ yếu bao gồm:

Hình 2.15. Khối mô t tiến trình

 Định danh của tiến trình (1 : giúp phân biệt các tiến trình

61

 Trạng thái tiến trình 2 : xác định hoạt động hiện hành của tiến trình.

 Ngữ c nh của tiến trình 3 : mô tả các tài nguyên tiến trình đang trong quá trình,

hoặc để phục vụ cho hoạt động hiện tại, hoặc để làm cơ sở phục hồi hoạt động cho

tiến trình, bao gồm các thông tin về:

 Trạng thái CPU: bao gồm nội dung các thanh ghi, quan trọng nhất là con trỏ

lệnh IP lƣu trữ địa chỉ câu lệnh kế tiếp tiến trình sẽ xử lý. Các thông tin này cần

đƣợc lƣu trữ khi xảy ra một ngắt, nhằm có thể cho ph p phục hồi hoạt động

của tiến trình đúng nhƣ trƣớc khi bị ngắt.

 Bộ x : dùng cho máy có cấu hình nhiều CPU, xác định số hiệu CPU mà tiến

trình đang sử dụng.

 Bộ nhớ chính: danh sách các khối nhớ đƣợc cấp cho tiến trình.

 Tài nguy n s dụng: danh sách các tài mguyên hệ thống mà tiến trình đang sử

dụng.

 Tài nguy n tạo p: danh sách các tài nguyên đƣợc tiến trình tạo lập.

 Thông tin giao tiếp 4 : phản ánh các thông tin về quan hệ của tiến trình với các

tiến trình khác trong hệ thống :

 Tiến trình cha: tiến trình tạo lập tiến trình này.

 Tiến trình con: các tiến trình do tiến trình này tạo lập.

 Độ ưu ti n: giúp bộ định thời biểu CPU có thông tin để lựa chọn tiến trình nào

đƣợc cấp CPU.

 Thông tin thống (5): đây là những thông tin thống kê về hoạt động của tiến trình,

nhƣ thời gian đ sử dụng CPU, thời gian chờ. Các thông tin này có thể có ích cho

công việc đánh giá tình hình hệ thống và dự đoán các tình huống tƣơng lai.

2.4. TH O TÁC TRÊN TIẾN TR NH

Hệ điều hành cung cấp các thao tác chủ yếu sau đây trên một tiến trình :

 Tạo lập tiến trình create

 Kết thúc tiến trình destroy

 Tạm dừng tiến trình suspend

62

 Tái kích hoạt tiến trình resume

 Thay đổi độ ƣu tiên tiến trình

2.4.1. Tạo lập tiến trình

Trong quá trình xử lý, một tiến trình có thể tạo lập nhiều tiến trình mới bằng cách

sử dụng một lời gọi hệ thống tƣơng ứng. Tiến trình gọi lời gọi hệ thống để tạo tiến

trình mới sẽ đƣợc gọi là tiến trình cha, tiến trình đƣợc tạo gọi là tiến trình con. Mỗi tiến

trình con đến lƣợt nó lại có thể tạo các tiến trình mới…quá trình này tiếp tục sẽ tạo ra

một cây tiến trình.

http://www.dthu.edu.vn

Khoa SP Toán - Tin Khoa TNMT Khoa VH-DL

CNTT TOÁN

Hình 2.16. Một cây tiến trình trong hệ thống UNIX

C c côn v c u n cần t c n k t o lập t ến tr n bao ồm:

 Định danh cho tiến trình mới phát sinh

 Đƣa tiến trình vào danh sách quản lý của hệ thống

 Xác định độ ƣu tiên cho tiến trình

 Tạo PCB cho tiến trình

 Cấp phát các tài nguyên ban đầu cho tiến trình

 Khi một tiến trình tạo lập một tiến trình con, tiến trình con có thể sẽ đƣợc hệ

điều hành trực tiếp cấp phát tài nguyên hoặc đƣợc tiến trình cha cho thừa

hƣởng một số tài nguyên ban đầu.

 Khi một tiến trình tạo tiến trình mới, tiến trình ban đầu có thể xử lý theo một

63

trong hai khả năng sau :

- Tiến trình cha tiếp tục xử lý đồng hành với tiến trình con.

- Tiến trình cha chờ đến khi một tiến trình con nào đó, hoặc tất cả các tiến

trình con kết thúc xử lý.

Các hệ điều hành khác nhau có thể chọn lựa các cài đặt khác nhau để thực hiện

thao tác tạo lập một tiến trình.

2.4.2. Kết th c tiến trình

Một tiến trình kết thúc xử lý khi nó hoàn tất chỉ thị cuối cùng và sử dụng một lời

gọi hệ thống để yêu cầu hệ điều hành hủy bỏ nó. Đôi khi một tiến trình có thể yêu cầu

hệ điều hành kết thúc xử lý của một tiến trình khác. Khi một tiến trình ết thúc, hệ điều

hành thực hiện các công việc:

 Thu hồi các tài nguyên hệ thống đ cấp phát cho tiến trình

 Hủy tiến trình khỏi tất cả các danh sách quản lý của hệ thống

 Hủy bỏ PCB của tiến trình

Hầu hết các hệ điều hành không cho ph p các tiến trình con tiếp tục tồn tại nếu

tiến trình cha đ kết thúc. Trong những hệ thống nhƣ thế, hệ điều hành sẽ tự động phát

sinh một loạt các thao tác kết thúc tiến trình con.

2.4.3. Khi tiến trình thay đổi trạng thái

Khi một tiến trình đang ở trạng thái running bị chuyển sang trạng thái khác

(ready, blocked, … thì hệ điều hành phải tạo ra sự thay đổi trong môi trƣờng làm việc

của nó. Sau đây là các bƣớc mà hệ điều hành phải thực hiện đầy đủ khi thay đổi trạng

thái tiến trình:

 Lƣu ngữ cảnh của CPU, bao gồm thanh ghi bộ đếm chƣơng trình PC (program

counter) và các thanh ghi khác.

 Cập nhật PCB của tiến trình, sao cho phù hợp với trạng thái mới của tiến

trình, bao gồm trạng thái mới của tiến trình, các thông tin tính toán, vv.

 Di chuyển PCB của tiến trình đến một hàng đợi thích hợp, để đáp ứng đƣợc

các yêu cầu của công tác điều phối tiến trình.

64

 Chọn một tiến trình khác để cho ph p nó thực hiện.

 Cập nhật PCB của tiến trình vừa đƣợc chọn thực hiện ở trên, chủ yếu là thay

đổi trạng thái của tiến trình đến trạng thái running.

 Cập nhật các thông tin liên quan đến quản lý bộ nhớ. Bƣớc này phụ thuộc vào

các yêu cầu chuyển đổi địa chỉ bộ nhớ đang đƣợc sử dụng.

 Khôi phục lại ngữ cảnh của CPU và thay đổi giá trị của bộ đếm chƣơng trình

và các thanh ghi khác sao cho phù hợp với tiến trình đƣợc chọn ở trên, để tiến

trình này có thể bắt đầu hoạt động đƣợc.

Nhƣ vậy, khi hệ điều hành chuyển một tiến trình từ trạng thái running đang

chạy sang một trạng thái nào đó tạm dừng thì hệ điều hành phải lƣu trữ các thông tin

cần thiết, nhất là bộ đếm chƣơng trình, để sau này hệ điều hành có thể cho tiến trình

tiếp tục hoạt động trở lại đƣợc tái kích hoạt . Đồng thời hệ điều hành phải chọn một

tiến trình nào đó đang ở trạng thái ready để cho tiến trình này chạy chuyển tiến trình

sang trạng thái running . Tại đây, trong các thao tác phải thực hiện, hệ điều hành phải

thực hiện việc thay đổi giá trị của PC, thay đổi ngữ cảnh CPU, để PC chỉ đến địa chỉ

của chỉ thị đầu tiên của tiến trình running mới này trong bộ nhớ. Đây cũng chính là bản

chất của việc thực hiện các tiến trình trong các hệ thống đơn xử lý.

2.5. CẤP PHÁT TÀI NGUYÊN CHO TIẾN TR NH

Khi có nhiều ngƣời dùng đồng thời làm việc trong hệ thống, hệ điều hành cần

phải cấp phát các tài nguyên theo yêu cầu cho mỗi ngƣời dùng. Do tài nguyên hệ thống

thƣờng rất giới hạn và có khi không thể chia s , nên hiếm khi tất cả các yêu cầu tài

nguyên đồng thời đều đƣợc thỏa m n. Vì thế cần phải nghiên cứu một phƣơng pháp để

chia s một số tài nguyên hữu hạn giữa nhiều tiến trình ngƣời dùng đồng thời. Hệ điều

hành quản lý nhiều loại tài nguyên khác nhau CPU, bộ nhớ chính, các thiết bị ngoại vi

… , với mỗi loại cần có một cơ chế cấp phát và các chiến lƣợc cấp phát hiệu quả. Mỗi

tài nguyên đƣợc biểu di n thông qua một cấu trúc dữ liệu, khác nhau về chi tiết cho

từng loại tài nguyên, nhƣng cơ bản chứa đựng các thông tin sau:

 Định danh tài nguy n

 Trạng thái tài nguy n: đây là các thông tin mô tả chi tiết trạng thái tài nguyên :

phần nào của tài nguyên đ cấp phát cho tiến trình, phần nào c n có thể sử

65

dụng?

 Hàng đợi tr n một tài nguy n: danh sách các tiến trình đang chờ đƣợc cấp phát

tài nguyên tƣơng ứng.

 Bộ c p phát: là đoạn m lệnh đảm nhiệm việc cấp phát một tài nguyên đặc thù.

Một số tài nguyên đ i hỏi các giải thuật đặc biệt nhƣ CPU, bộ nhớ chính, hệ

thống tập tin , trong khi những tài nguyên khác nhƣ các thiết bị nhập/xuất) có

thể cần các giải thuật cấp phát và giải phóng tổng quát hơn.

Ví dụ k ố quản lý t n uyên:

Định danh RID

Trạng thái tài Danh sách các phần có thể

nguyên sử dụng

Hàng đợi Danh sách các tiến trình

đang đợi tài nguyên

Bộ cấp phát Con trỏ đến đoạn m lệnh

cấp phát tài nguyên

Bản 2 4 Khối qu n tài nguy n

C c mục t êu của kỹ t uật cấp p t:

 Bảo đảm một số lƣợng hợp lệ các tiến trình truy xuất đồng thời đến các tài

nguyên không chia s đƣợc.

 Cấp phát tài nguyên cho tiến trình có yêu cầu trong một khoảng thời gian trì

ho n có thể chấp nhận đƣợc.

 Tối ƣu hóa việc sử dụng tài nguyên.

Để có thể thỏa m n các mục tiêu kể trên, cần phải giải quyết các vấn đề nảy sinh

khi có nhiều tiến trình đồng thời yêu cầu một tài nguyên không thể chia s .

2.6. Đ NH THỜI BIỂU CPU

Trong môi trƣờng đa chƣơng, có thể xảy ra tình huống nhiều tiến trình đồng thời

66

sẵn sàng để xử lý. Mục ti u của các hệ phân chia thời gian (time-sharing) à chuy n

đ i CPU qua ại giữa các tiến trình một cách thường xuy n đ nhiều người dùng c th

tương tác c ng úc với từng chương trình trong quá trình x .

Để thực hiện đƣợc mục tiêu này, hệ điều hành phải lựa chọn tiến trình đƣợc xử lý

tiếp theo. Bộ định thời biểu sẽ sử dụng một giải thuật định thời thích hợp để thực hiện

nhiệm vụ này. Một thành phần khác của hệ điều hành cũng tiềm ẩn trong công tác định

thời là bộ phân phát dispatcher . Bộ phân phát sẽ chịu trách nhiệm chuyển đổi ngữ

cảnh và trao CPU cho tiến trình đƣợc chọn bởi bộ định thời biểu CPU để xử lý.

2.6.1. Giới thiệu

2.6.1.1. Mục tiêu định thời iểu CPU

Bộ định thời không cung cấp cơ chế, mà đƣa ra các quyết định. Các hệ điều hành

xây dựng nhiều chiến lƣợc khác nhau để thực hiện việc điều phối, nhƣng tiêu chí chung

cần đạt đƣợc các mục tiêu sau:

a) Sự công ằng Fairness):

Các tiến trình chia s CPU một cách công bằng, không có tiến trình nào phải

chờ đợi vô hạn để đƣợc cấp phát CPU.

b) Tính hiệu quả (Efficiency):

Hệ thống phải tận dụng đƣợc 100% thời gian CPU.

c) Thời gian đáp ứng hợp lý Response time):

Cực tiểu hoá thời gian hồi đáp cho các tƣơng tác của ngƣời dùng

d) Thời gian lưu lại trong hệ thống Turnaround Time) :

Cực tiểu hóa thời gian hoàn tất các công việc xử lý theo lô.

e) Thông lượng tối đa Throughput):

Cực đại hóa số lƣợng công việc đƣợc xử lý trong một đơn vị thời gian.

Tuy nhiên thƣờng không thể thỏa m n tất cả các mục tiêu kể trên vì bản thân

chúng có sự mâu thuẫn với nhau mà chỉ có thể dung h a chúng ở mức độ nào đó.

67

2.6.1.2. Các đặc điểm của tiến trình

Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đ i hỏi hệ điều

hành khi giải quyết phải xem x t nhiều yếu tố khác nhau để có thể đạt đƣợc những mục

tiêu đề ra. Một số đặc tính của tiến trình cần đƣợc quan tâm nhƣ tiêu chuẩn định thời:

 Tính hướng xu t / nh p của tiến trình ( I/O-boundedness):

Khi một tiến trình nhận đƣợc CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát

sinh một yêu cầu nhập xuất? Hoạt động của các tiến trình nhƣ thế thƣờng bao

gồm nhiều lƣợt sử dụng CPU, mỗi lƣợt trong một thời gian khá ngắn.

 Tính hướng x của tiến trình (CPU-boundedness):

Khi một tiến trình nhận đƣợc CPU, nó có khuynh hƣớng sử dụng CPU đến khi

hết thời gian dành cho nó? Hoạt động của các tiến trình nhƣ thế thƣờng bao gồm

một số ít lƣợt sử dụng CPU, nhƣng mỗi lƣợt trong một thời gian đủ dài.

 Tiến trình tương tác hay x lý theo lô:

Ngƣời dùng theo kiểu tƣơng tác thƣờng yêu cần đƣợc hồi đáp tức thời đối với

các yêu cầu của họ, trong khi các tiến trình của công việc đƣợc xử lý theo lô nói

chung có thể trì ho n trong một thời gian chấp nhận đƣợc.

 Độ ưu ti n của tiến trình:

Các tiến trình có thể đƣợc phân cấp theo một số tiêu chuẩn đánh giá nào đó, một

cách hợp lý, các tiến trình quan trọng hơn có độ ƣu tiên cao hơn cần đƣợc ƣu

tiên hơn.

 Thời gian đã s dụng CPU của tiến trình:

Một số quan điểm ƣu tiên chọn những tiến trình đ sử dụng CPU nhiều thời gian

nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống.

Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận đƣợc CPU trong ít

thời gian là những tiến trình đ phải chờ lâu nhất, do vậy ƣu tiên chọn chúng.

 Thời gian còn ại tiến trình cần đ hoàn t t:

Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách cho

các tiến trình cần ít thời gian nhất để hoàn tất đƣợc thực hiện trƣớc. Tuy nhiên

đáng tiếc là rất hiếm khi biết đƣợc tiến trình cần bao nhiêu thời gian nữa để kết

68

thúc xử lý.

2.6.1.3. Định thời iểu không độc quyền và định thời iểu độc quyền preemptive /

nopreemptive)

Thuật toán định thời biểu cần xem x t và quyết định thời điểm chuyển đổi CPU

giữa các tiến trình. Hệ điều hành có thể thực hiện cơ chế định thời biểu theo nguyên lý

độc quyền hoặc không độc quyền.

- Định thời iểu độc quyền không trưng dụng): Nguyên lý định thời biểu độc

quyền cho ph p một tiến trình khi nhận đƣợc CPU sẽ có quyền độc chiếm CPU

đến khi hoàn tất xử lý hoặc tự nguyện giải phóng CPU. Khi đó quyết định định

thời biểu CPU sẽ xảy ra trong các tình huống sau:

 Khi tiến trình chuyển từ trạng thái running sang trạng thái blocked (ví dụ

chờ một thao tác nhập xuất hay chờ một tiến trình con kết thúc… .

 Khi tiến trình kết thúc.

Các giải thuật độc quyền thƣờng đơn giản và d cài đặt. Tuy nhiên chúng thƣờng

không thích hợp với các hệ thống tổng quát nhiều ngƣời dùng, vì nếu cho ph p một

tiến trình có quyền xử lý bao lâu tùy ý, có nghĩa là tiến trình này có thể giữ CPU một

thời gian không xác định, có thể ngăn cản những tiến trình c n lại trong hệ thống có

một cơ hội để xử lý.

- Định thời iểu không độc quyền trưng dụng): Ngƣợc với nguyên lý độc quyền,

định thời biểu theo nguyên lý không độc quyền cho ph p tạm dừng hoạt động của

một tiến trình đang xử lý. Khi một tiến trình nhận đƣợc CPU, nó vẫn đƣợc sử dụng

CPU đến khi hoàn tất hoặc tự nguyện giải phóng CPU, nhƣng một tiến trình khác

có độ ƣu tiên cao hơn có thể giành quyền sử dụng CPU của tiến trình đang xử lý.

Nhƣ vậy là tiến trình có thể bị tạm dừng hoạt động bất cứ lúc nào mà không đƣợc

báo trƣớc, để tiến trình khác đƣợc xử lý. Các quyết định định thời biểu xảy ra khi:

 Khi tiến trình chuyển từ trạng thái running sang trạng thái blocked ví dụ

chờ một thao tác nhập xuất hay chờ một tiến trình con kết thúc… .

 Khi tiến trình chuyển từ trạng thái running sang trạng thái ready ví dụ xảy

ra một ngắt .

 Khi tiến trình chuyển từ trạng thái chờ blocked sang trạng thái ready ví dụ

69

một thao tác nhập/xuất hoàn tất .

 Khi tiến trình kết thúc.

Các thuật toán định thời biểu theo nguyên tắc không độc quyền ngăn cản đƣợc

tình trạng một tiến trình độc chiếm CPU, nhƣng việc tạm dừng một tiến trình có thể

dẫn đến các mâu thuẫn trong truy xuất, đ i hỏi phải sử dụng một phƣơng pháp đồng bộ

hóa thích hợp để giải quyết.

Trong các hệ thống sử dụng nguyên lý định thời biểu độc quyền có thể xảy ra tình

trạng các công việc cần thời gian xử lý ngắn phải chờ công việc xử lý với thời gian quá

dài hoàn tất! Nguyên lý định thời biểu độc quyền thƣờng chỉ thích hợp với các hệ xử lý

theo lô.

Đối với các hệ thống tƣơng tác time sharing , các hệ thời gian thực real time ,

cần phải sử dụng nguyên lý định thời biểu không độc quyền để các tiến trình quan

trọng có cơ hội hồi đáp kịp thời. Tuy nhiên thực hiện định thời biểu theo nguyên lý

không độc quyền đ i hỏi những cơ chế phức tạp trong việc phân định độ ƣu tiên, và

phát sinh thêm chi phí khi chuyển đổi CPU qua lại giữa các tiến trình.

2.6.2. Tổ chức định thời iểu

2.6.2.1. Các danh sách sử dụng trong quá trình định thời iểu.

Hệ điều hành sử dụng hai loại danh sách để thực hiện định thời biểu các tiến trình

là danh sách sẵn sàng (ready list) và danh sách chờ đợi (waiting list).

Khi một tiến trình bắt đầu đi vào hệ thống, nó đƣợc chèn vào danh sách các công

việc job list . Danh sách này bao gồm tất cả các tiến trình của hệ thống. Nhƣng chỉ các

tiến trình đang thƣờng trú trong bộ nhớ chính và ở trạng thái sẵn sàng tiếp nhận CPU

để hoạt động mới đƣợc đƣa vào danh sách sẵn sàng.

Bộ định thời biểu sẽ chọn một tiến trình trong danh sách sẵn sàng và cấp CPU

cho tiến trình đó. Tiến trình đƣợc cấp CPU sẽ thực hiện xử lý, và có thể chuyển sang

trạng thái chờ khi xảy ra các sự kiện nhƣ đợi một thao tác nhập/xuất hoàn tất, yêu cầu

tài nguyên chƣa đƣợc thỏa m n, đƣợc yêu cầu tạm dừng... Khi đó tiến trình sẽ đƣợc

chuyển sang một danh sách chờ đợi.

Hệ điều hành chỉ s dụng một danh sách sẵn sàng cho toàn hệ thống, nhưng mỗi

một tài nguy n (thiết bị ngoại vi) c một danh sách chờ đợi ri ng bao gồm các tiến

70

trình đang chờ được c p phát tài nguy n đ

Hình 2.17. Các danh sách điều phối

Quá trình xử lý của một tiến trình trải qua những chu kỳ chuyển đổi qua lại giữa

danh sách sẵn sàng và danh sách chờ đợi. Sơ đồ dƣới đây mô tả sự định thời biểu các

tiến trình dựa trên các danh sách của hệ thống.

Thoạt đầu tiến trình mới đƣợc đặt trong danh sách các tiến trình sẵn sàng, nó sẽ

đợi trong danh sách này cho đến khi đƣợc chọn để cấp phát CPU và bắt đầu xử lý. Sau

đó có thể xảy ra một trong các tình huống sau:

 Tiến trình phát sinh một yêu cầu một tài nguyên mà hệ thống chƣa thể đáp ứng,

khi đó tiến trình sẽ đƣợc chuyển sang danh sách các tiến trình đang chờ tài

nguyên tƣơng ứng.

 Tiến trình có thể bị bắt buộc tạm dừng xử lý do một ngắt xảy ra, khi đó tiến

trình đƣợc đƣa trở lại vào danh sách sẵn sàng để chờ đƣợc cấp CPU cho lƣợt

71

tiếp theo.

Hàng đợi sẳn sàng

CPU

CPU

Hàng đợi nhập/xuất

Yêu cầu nhập/xuất

Hết thời hạn

Gọi chƣơng trình con

Thực hiện chƣơng trình con

Ngắt ƣu tiên hơn

Ngắt xảy ra trình con

Hình 2.18. Sơ đồ chuy n đ i giữa các danh sách định thời bi u

Trong trƣờng hợp đầu tiên, tiến trình cuối cùng sẽ chuyển từ trạng thái blocked

sang trạng thái ready và lại đƣợc đƣa trở vào danh sách sẵn sàng. Tiến trình lặp lại chu

kỳ này cho đến khi hoàn tất công việc thì đƣợc hệ thống hủy bỏ khỏi mọi danh sách

định thời biểu.

2.6.2.2. Các cấp độ định thời iểu

Thực ra công việc định thời biểu đƣợc hệ điều hành thực hiện ở hai mức độ: định

thời bi u công việc (job scheduling) và định thời bi u tiến trình (process scheduling).

2.6.2.2.1. Định thời iểu công việc

Quyết định lựa chọn công việc nào đƣợc đƣa vào hệ thống, và nạp những tiến

trình của công việc đó vào bộ nhớ chính để thực hiện. Chức năng định thời biểu công

việc quyết định mức độ đa chƣơng của hệ thống số lƣợng tiến trình trong bộ nhớ

chính . Khi hệ thống tạo lập một tiến trình, hay có một tiến trình kết thúc xử lý thì chức

năng định thời biểu công việc mới đƣợc kích hoạt. Vì mức độ đa chƣơng tƣơng đối ổn

định nên chức năng định thời biểu công việc có tần suất hoạt động thấp .

Để hệ thống hoạt động tốt, bộ định thời biểu công việc cần biệt tính chất của tiến

trình là hƣớng nhập xuất I/O bounded hay hƣớng xử lý CPU bounded . Một tiến

trình đƣợc gọi là hƣớng nhập xuất nếu nó chủ yếu nó chỉ sử dụng CPU để thực hiện các

72

thao tác nhập xuất. Ngƣợc lại một tiến trình đƣợc gọi là hƣớng xử lý nếu nó chủ yếu nó

chỉ sử dụng CPU để thực hiện các thao tác tính toán. Để cân bằng hoạt động của CPU

và các thiết bị ngoại vi, bộ định thời biểu công việc nên lựa chọn các tiến trình để nạp

vào bộ nhớ sao cho hệ thống là sự pha trộn hợp lý giữa các tiến trình hƣớng nhập xuất

và các tiến trình hƣớng xử lý

2.6.2.2.2. Định thời iểu tiến trình

Bộ định thời biểu chọn một tiến trình ở trạng thái sẵn sàng đ đƣợc nạp vào bộ

nhớ chính, và có đủ tài nguyên để hoạt động và cấp phát CPU cho tiến trình đó thực

hiện.

Một thành phần khác liên quan đến chức năng định thời biểu tiến trình là bộ phân

phát (dispatcher . Bộ phân phát là một module có nhiệm vụ trao điều khiển CPU tới

quá trình đƣợc chọn bởi bộ định thời biểu tiến trình. Chức năng này có liên quan đến:

 Chuyển ngữ cảnh

 Chuyển chế độ ngƣời dùng

 Nhảy tới vị trí hợp lý trong chƣơng trình ngƣời dùng để khởi động lại quá trình

Bộ định thời biểu tiến trình có tần suất hoạt động cao, sau mỗi lần xảy ra ngắt do

đồng hồ báo giờ, do các thiết bị ngoại vi... , thƣờng là 1 lần trong khoảng 100ms. Do

vậy để nâng cao hiệu suất của hệ thống, cần phải tăng tốc độ xử lý của bộ định thời

biểu tiến trình. Chức năng định thời biểu tiến trình là một trong chức năng cơ bản, quan

trọng nhất của hệ điều hành.

Một số hệ thống nhƣ hệ chia thời, có thể không có bộ định thời biểu công việc

hoặc tách biệt rất ít đối với bộ định thời biểu tiến trình. Một vài hệ điều hành lại đƣa ra

một cấp độ định thời biểu trung gian kết hợp cả hai cấp độ định thời biểu công việc và

tiến trình.

Hàng đợi sẳn sàng

CPU

I/O

Danh sách chờ trên tài nguyên

Tiến trình trong bộ nhớ phụ đƣợc nạp từng phần để xử lý

73

Hình 2.19. C p độ định thời bi u trung gian

Định thời biểu trung gian có nhiệm vụ xóa các quá trình ra khỏi bộ nhớ từ sự

canh tranh CPU và do đó giảm mức độ đa chƣơng. Tại thời điểm sau đó, quá trình có

thể đƣợc đƣa trở lại bộ nhớ và việc thực thi của nó có thể đƣợc tiếp tục nơi nó bị đƣa

ra. Cơ chế này đƣợc gọi là hoán vị swapping . Quá trình đƣợc hoán vị ra và sau đó

đƣợc hoán vị vào bởi bộ định thời biểu trung gian. Hoán vị là cần thiết để cải tiến sự

trộn lẫn quá trình giữa các quá trình hƣớng nhập/xuất và hƣớng CPU , hay vì một thay

đổi trong yêu cầu bộ nhớ vƣợt quá kích thƣớc bộ nhớ sẵn dùng.

2.6.2.2.3. Chuyển ngữ cảnh

Chuyển CPU tới một tiến trình khác yêu cầu lƣu trạng thái tiến trình cũ và nạp

trạng thái đƣợc lƣu cho tiến trình mới. Công việc này đƣợc xem nhƣ chuyển ngữ cảnh.

Hình 2.20. Chuy n đ i ngữ c nh từ P0 sang P1

Ngữ cảnh của tiến trình đƣợc hiện diện trong PCB của tiến trình; Nó chứa giá trị

74

các thanh ghi, trạng thái tiến trình và thông tin quản lý bộ nhớ. Khi chuyển ngữ cảnh

ngữ cảnh xảy ra, nhân lƣu ngữ cảnh của tiến trình cũ trong PCB của nó và nạp ngữ

cảnh đƣợc lƣu của tiến trình mới đƣợc định thời để chạy. Thời gian chuyển ngữ cảnh là

chi phí thuần vì hệ thống không thực hiện công việc có ích trong khi chuyển. Tốc độ

của nó khác từ máy này tới máy khác phụ thuộc vào tốc độ bộ nhớ, số ượng thanh ghi

phải đƣợc ch p và sự tồn tại của các chỉ thị đặc biệt nhƣ chỉ thị để nạp và lƣu tất cả

thanh ghi . Điển hình d y tốc độ từ 1 tới 1000 ms.

Những lần chuyển đổi ngữ cảnh phụ thuộc nhiều vào hỗ trợ phần cứng. Thí dụ,

vài bộ xử lý nhƣ Sun UltraSPARC cung cấp nhiều tập thanh ghi. Một chuyển ngữ

cảnh đơn giản chứa chuyển đổi con trỏ tới tập thanh ghi hiện hành. Dĩ nhiên, nếu tiến

trình hoạt động vƣợt quá tập thanh ghi thì hệ thống sắp xếp lại dữ liệu thanh ghi tới và

từ bộ nhớ. Cũng vì thế mà hệ điều hành phức tạp hơn và nhiều công việc đƣợc làm hơn

trong khi chuyển ngữ cảnh. Kỹ thuật quản lý bộ nhớ nâng cao có thể yêu cầu dữ liệu bổ

sung để đƣợc chuyển với mỗi ngữ cảnh. Thí dụ, không gian địa chỉ của tiến trình hiện

hành phải đƣợc lƣu khi không gian của công việc kế tiếp đƣợc chuẩn bị dùng. Không

gian địa chỉ đƣợc lƣu nhƣ thế nào và lƣợng công việc đƣợc yêu cầu để lƣu nó phụ

thuộc vào phƣơng pháp quản lý bộ nhớ của hệ điều hành. Chuyển ngữ cảnh có thể dẫn

đến thắt cổ chai năng lực thực hiện vì thế các lập trình viên đang sử dụng các cấu trúc

mới để tránh nó bất cứ khi nào có thể.

2.6.3. Các chiến lược định thời iểu CPU

Các chiến lƣợc định thời biểu giải quyết vấn đề quyết định tiến trình nào trong

hàng đợi sẵn sàng đƣợc cấp phát CPU. Trong phần này chúng ta mô tả nhiều giải thuật

định thời biểu đang có.

2.6.3.1. Chiến lược FCFS first-come, first-served-FCFS)

Giải thuật đơn giản nhất là đến trƣớc, đƣợc phục vụ trƣớc. Với cơ chế này, quá

trình yêu cầu CPU trƣớc đƣợc cấp phát CPU trƣớc. Việc cài đặt chính sách FCFS đƣợc

quản lý d dàng với hàng đợi FIFO. Khi một quá trình đi vào hàng đợi sẵn sàng, PCB

của nó đƣợc liên kết tới đuôi của hàng đợi. Khi CPU rảnh, nó đƣợc cấp phát tới một

quá trình tại đầu hàng đợi. Sau đó, quá trình đang chạy đƣợc lấy ra khỏi hàng đợi. M

của giải thuật FCFS đơn giản để viết và hiểu. Tuy nhiên, thời gian chờ đợi trung bình

75

dƣới chính sách FCFS thƣờng là dài.

Hình 2.21. Định thời bi u FCFS

X t tập hợp các quá trình sau đến tại thời điểm 0, với chiều dài thời gian chu kỳ

CPU đƣợc tính bằng mini giây.

Trường hợp 1: Giả sử các quá trình đến theo thứ tự P1, P2, P3

Tiến trình Thời điểm vào Ready List Thời gian xử lý

0 24 P1

1 3 P2

2 3 P3

Bản 2 5. Ví dụ 1 về chiến ược FCFS

P1, P2, P3 đƣợc phục vụ theo thứ tự FCFS, thứ tự cấp phát CPU cho các tiến

trình nhƣ sau:

P1 P2 P3

24 27 30 0

Bản 2 6. Bi u đồ Gannt ví dụ 1 về chiến ược FCFS

Tính thời gian chờ để đƣợc xử lý: P1 (0ms), P2 (23ms), P3 (25ms)

Thời gian chờ trung bình = 0+23+25 /3=16ms

Số lần chuyển đổi ngữ cảnh =2

Trường hợp 2: Giả sử các quá trình đến theo thứ tự P2, P3, P1

Tiến trình Thời điểm vào Ready List Thời gian xử lý

P2 3 0

P3 3 1

P1 24 2

76

Bản 2 7. Ví dụ 2 về chiến ược FCFS

P2, P3, P1 đƣợc phục vụ theo thứ tự FCFS, thứ tự cấp phát CPU cho các tiến

trình nhƣ sau:

P2 P3 P1

0 3 6 30

Bản 2 8. Bi u đồ Gannt ví dụ 2 về chiến ược FCFS

Tính thời gian chờ để đƣợc xử lý: P1 (4ms), P2 (0ms), P3 (2ms)

Thời gian chờ trung bình = 4+0+2 /3=2ms

Số lần chuyển đổi ngữ cảnh =2

- N ận xét: Trong trƣờng hợp 1 thời gian chờ trung bình không đạt cực tiểu, vì có

sự biến đổi đáng kể đối với các giá trị về thời gian xử lý và thứ tự khác nhau của

các tiến trình đến trong danh sách sẵn sàng. Có thể xảy ra hiện tƣợng tích lũy thời

gian chờ khi các tiến trình P2, P3 yêu cầu thời gian xử lý ngắn phải chờ đợi một

tiến trình P1 yêu cầu thời gian xử lý dài kết thúc xử lý. Giải thuật này đặc biệt

không phù hợp với các hệ điều hành phân chia thời gian, trong các hệ này, cần cho

ph p mỗi tiến trình đƣợc cấp phát CPU đều đặn trong từng khoảng thời gian.

2.6.3.2. Chiến lược phân phối xoay vòng RR - Round Robin)

Danh sách sẵn sàng đƣợc xử lý nhƣ một danh sách v ng, bộ định thời biểu lần

lƣợt cấp phát cho từng tiến trình trong danh sách một khoảng thời gian sử dụng CPU

gọi là định mức q quantum . Đây là một giải thuật định thời biểu hông độc quyền: khi

một tiến trình sử dụng CPU đến hết thời gian q dành cho nó, hệ điều hành thu hồi CPU

và cấp cho tiến trình kế tiếp trong danh sách. Nếu tiến trình bị khóa hay kết thúc trƣớc

khi sử dụng hết thời gian q, hệ điều hành cũng lập tức cấp phát CPU cho tiến trình kế

tiếp trong danh sách. Khi tiến trình tiêu thụ hết thời gian q dành cho nó mà chƣa hoàn

tất, tiến trình đƣợc đƣa trở lại vào cuối danh sách sẵn sàng để đợi đƣợc cấp CPU trong

77

lƣợt kế tiếp.

Hình 2.22. Định thời bi u Round Robin

X t các tiến trình P1, P2, P3 đến theo thứ tự:

Tiến trình Thời điểm vào Ready List Thời gian xử lý ms

P1 24 0

P2 3 1

P3 3 2

Bản 2 9. Ví dụ về chiến ược Round Robin

Nếu sử dụng q là 4ms, thứ tự cấp phát CPU sẽ là :

P1 P2 P3 P1 P1 P1 P1 P1

0 4 7 10 14 18 22 26 30

Bản 2 10. Bi u đồ Gannt ví dụ về chiến ược Round Robin

Thời gian chờ trung bình là (6+3+5)/3 = 4.66 ms.

Nếu có n tiến trình trong danh sách sẵn sàng và sử dụng q, thì mỗi tiến trình sẽ

đƣợc cấp phát CPU 1/n trong từng khoảng thời gian q. Mỗi tiến trình sẽ không phải đợi

quá (n-1)q đơn vị thời gian trƣớc khi nhận đƣợc CPU cho lƣợt kế tiếp.

- Nhận xét: Vấn đề đáng quan tâm đối với giải thuật RR là độ dài của q. Nếu thời

lƣợng q quá nhỏ sẽ phát sinh quá nhiều sự chuyển đổi giữa các tiến trình và khiến

cho việc sử dụng CPU k m hiệu qủa. Nhƣng nếu sử dụng q quá lớn sẽ làm tăng

thời gian hồi đáp, thời gian chờ trung bình cũng tăng và giảm khả năng tƣơng tác

của hệ thống.

2.6.3.3. Định thời iểu với độ ưu tiên

Mỗi tiến trình đƣợc gán cho một độ ƣu tiên tƣơng ứng, tiến trình có độ ƣu tiên

78

cao nhất sẽ đƣợc chọn để cấp phát CPU đầu tiên. Độ ƣu tiên có thể đƣợc định nghĩa nội

tại hay nhờ vào các yếu tố bên ngoài. Độ ƣu tiên nội tại sử dụng các đại lƣợng có thể

đo lƣờng để tính toán độ ƣu tiên của tiến trình, ví dụ các giới hạn thời gian, nhu cầu bộ

nhớ… Độ ƣu tiên cũng có thể đƣợc gán từ bên ngoài dựa vào các tiêu chuẩn do hệ điều

hành nhƣ tầm quan trọng của tiến trình, loại ngƣời dùng sở hữu tiến trình…

Giải thuật định thời biểu với độ ƣu tiên có thể theo nguyên tắc độc quyền hay

hông độc quyền. Khi một tiến trình đƣợc đƣa vào danh sách các tiến trình sẵn sàng, độ

ƣu tiên của nó đƣợc so sánh với độ ƣu tiên của tiến trình hiện hành đang xử lý. Giải

thuật định thời biểu với độ ƣu tiên và không độc quyền sẽ thu hồi CPU từ tiến trình

hiện hành để cấp phát cho tiến trình mới nếu độ ƣu tiên của tiến trình này cao hơn tiến

trình hiện hành. Một giải thuật độc quyền sẽ chỉ đơn giản chèn tiến trình mới vào danh

sách sẵn sàng, và tiến trình hiện hành vẫn tiếp tục xử lý hết thời gian dành cho nó.

X t các tiến trình P1, P2, P3 đến theo thứ tự:

Tiến trình Thời điểm vào RL Độ ƣu tiên Thời gian xử lý

chỉ số 1 là cao nhất (ms)

P1 0 3 24

P2 1 1 3

P3 2 2 3

Bản 2 11. Ví dụ về định thời bi u với độ ưu ti n

Sử dụng giải thuật ƣu tiên độc quyền, thứ tự cấp phát CPU nhƣ sau :

P1 P2 P3

0 24 27 30

Bản 2 12. Bi u đồ Gannt ví dụ về định thời bi u với độ ưu ti n độc quyền

Thời gian chờ trung bình là (0+23+25)/3 = 16 ms.

Sử dụng giải thuật ƣu tiên không độc quyền, thứ tự cấp phát CPU nhƣ sau:

P1 P2 P3 P1

0 1 4 7 30

Bản 2 13. Bi u đồ Gannt ví dụ về định thời bi u với độ ưu ti n hông độc quyền

79

Thời gian chờ trung bình là (6+0+2)/3 = 2.66 ms.

- Nhận xét: Một giải thuật không độc quyền bao giờ cũng tối ƣu hơn giải thuật độc

quyền. Tình trạng “đói CPU” starvation là một vấn đề chính yếu của các giải

thuật sử dụng độ ƣu tiên. Các giải thuật này có thể để các tiến trình có độ ƣu tiên

thấp chờ đợi CPU vô hạn! Để ngăn cản các tiến trình có độ ƣu tiên cao chiếm dụng

CPU vô thời hạn, bộ định thời biểu sẽ giảm dần chỉ số độ ƣu tiên của các tiến trình

chờ sau mỗi ngắt đồng hồ. Nếu chỉ số độ ƣu tiên của tiến trình này giảm xuống

thấp hơn tiến trình có chỉ số độ ƣu tiên cao thứ nhì, sẽ xảy ra sự chuyển đổi quyền

sử dụng CPU. Quá trình này gọi là sự “l o hóa” (aging) tiến trình.

2.6.3.4. Chiến lược công việc ngắn nhất trước Shortest-job-first- SJF)

Đây là một trƣờng hợp đặc biệt của giải thuật định thời biểu với độ ƣu tiên. Trong

giải thuật này, độ ƣu tiên p đƣợc gán cho mỗi tiến trình là nghịch đảo của thời gian xử

lý t mà tiến trình yêu cầu : p = 1/t. Khi CPU đƣợc tự do, nó sẽ đƣợc cấp phát cho tiến

trình yêu cầu ít thời gian xử lý nhất để kết thúc- tiến trình ngắn nhất trƣớc. Giải thuật

này cũng có thể độc quyền hay hông độc quyền. Sự chọn lựa xảy ra khi có một tiến

trình mới đƣợc đƣa vào danh sách sẵn sàng trong khi một tiến trình khác đang xử lý.

 SJF độc quyền: một CPU khi đƣợc giao cho một tiến trình, tiến trình sẽ chiếm

dụng CPU cho đến hết thời gian xử lý của nó.

 SJF hông độc quyền: nếu một tiến trình mới đến có thời gian sử dụng CPU ngắn

hơn thời gian thực hiện c n lại của tiến trình đang xử lý thì giao CPU cho tiến trình

mới đến.

X t các tiến trình đến theo thứ tự:

Tiến trình Thời điểm vào RL Thời gian xử lý ms

P1 6 0

P2 8 1

P3 4 2

P4 2 3

Bản 2 14. Ví dụ về định thời bi u SJF

80

Sử dụng giải thuật SJF độc quyền, thứ tự cấp phát CPU nhƣ sau:

P1 P4 P3 P2

0 6 8 12 20

Bản 2 15. Bi u đồ Gannt ví dụ về định thời bi u SJF độc quyền

Thời gian chờ trung bình = (0+11+6+3)/4 = 5,0 ms.

Số lần chuyển đổi ngữ cảnh : 3

Sử dụng giải thuật SJF không độc quyền, thứ tự cấp phát CPU nhƣ sau:

P1 P4 P1 P3 P2

0 3 5 8 12 20

Bản 2 16. Bi u đồ Gannt ví dụ về định thời bi u SJF hông độc quyền

Thời gian chờ trung bình = (2+11+6+0)/4 = 4,75 ms.

Số lần chuyển đổi ngữ cảnh : 4

- Nhận xét: Giải thuật SJF không độc quyền cho phép đạt đƣợc thời gian chờ trung

bình cực tiểu. Khó khăn thực sự của giải thuật SJF là không thể biết đƣợc thời gian

yêu cầu xử lý c n lại của tiến trình? Chỉ có thể dự đoán giá trị này theo cách tiếp

cận sau: gọi tn là độ dài của thời gian xử lý lần thứ n,  n+1 là giá trị dự đoán cho lần xử lý tiếp theo. Với hy vọng giá trị dự đoán sẽ gần giống với các giá trị trƣớc

đó, có thể sử dụng công thức:

 n+1 =  tn + (1- ) n

Trong công thức này,tn chứa đựng thông tin gần nhất ;  n chứa đựng các thông tin quá khứ đƣợc tích lũy. Tham số  (0    1 kiểm soát trọng số của hiện tại gần

hay quá khứ ảnh hƣởng đến công thức dự đoán.

2.6.3.5. Chiến lược định thời iểu với hàng đợi đa cấp nhiều cấp độ ưu tiên)

Ý tƣởng chính của giải thuật là phân lớp các tiến trình tùy theo độ ƣu tiên của

chúng để có cách thức định thời biểu thích hợp cho từng nhóm. Danh sách sẵn sàng

đƣợc phân tách thành các danh sách riêng biệt theo cấp độ ƣu tiên, mỗi danh sách bao

gồm các tiến trình có cùng độ ƣu tiên và đƣợc áp dụng một giải thuật định thời biểu

thích hợp để định thời biểu. Ngoài ra, c n có một giải thuật định thời biểu giữa các

81

nhóm, thƣờng giải thuật này là giải thuật không độc quyền và sử dụng độ ƣu tiên cố

định. Một tiến trình thuộc về danh sách ở cấp ƣu tiên i sẽ chỉ đƣợc cấp phát CPU khi

Độ ƣu tiên cao nhất

Tiến trình hệ thống

Tiến trình tƣơng tác

Tiến trình không tƣơng tác

Tác vụ xử lý theo lô

Tiến trình thực tập

Độ ƣu tiên thấp nhất

các danh sách ở cấp ƣu tiên lớn hơn i đ trống.

Hình 2.23. Định thời bi u nhiều c p độ ưu ti n

- Nhận xét: Thông thƣờng, một tiến trình sẽ đƣợc gán vĩnh vi n với một danh sách

ở cấp ƣu tiên i khi nó đƣợc đƣa vào hệ thống. Các tiến trình không di chuyển giữa

các danh sách. Cách tổ chức này sẽ làm giảm chi phí định thời biểu, nhƣng lại

thiếu linh động và có thể dẫn đến tình trạng “đói CPU” cho các tiến trình thuộc về

những danh sách có độ ƣu tiên thấp. Do vậy có thể xây dựng giải thuật định thời

biểu với hàng đợi ph n hồi đa c p. Giải thuật này sẽ chuyển dần một tiến trình từ

danh sách có độ ƣu tiên cao xuống danh sách có độ ƣu tiên thấp hơn sau mỗi lần sử

dụng CPU. Cũng vậy, một tiến trình chờ quá lâu trong các danh sách có độ ƣu tiên

thấp cũng có thể đƣợc chuyển dần lên các danh sách có độ ƣu tiên cao hơn.

2.6.3.6. Chiến lược định thời iểu với hàng đợi phản hồi đa cấp

Thông thƣờng, trong giải thuật hàng đợi đa cấp, các quá trình đƣợc gán vĩnh vi n

tới hàng đợi khi đƣợc đƣa vào hệ thống. Các quá trình không di chuyển giữa các hàng

đợi. Nếu có các hàng đợi riêng cho các quá trình giao tiếp và các quá trình nền thì các

quá trình không di chuyển từ một hàng đợi này tới hàng đợi khác vì các quá trình

không thay đổi tính tự nhiên giữa giao tiếp và nền. Cách tổ chức này có ích vì chi phí

82

định thời thấp nhƣng thiếu linh động và có thể dẫn đến tình trạng “đói CPU”.

Tuy nhiên, định thời hàng đợi phản hồi đa cấp cho ph p một quá trình di chuyển

giữa các hàng đợi. Ý tƣởng là tách riêng các quá trình với các đặc điểm chu kỳ CPU

khác nhau. Nếu một quá trình dùng quá nhiều thời gian CPU thì nó sẽ đƣợc di chuyển

tới hàng đợi có độ ƣu tiên thấp. Cơ chế này để lại các quá trình hƣớng nhập/xuất và các

quá trình giao tiếp trong các hàng đợi có độ ƣu tiên cao hơn. Tƣơng tự, một quá trình

chờ quá lâu trong hàng đợi có độ ƣu tiên thấp hơn có thể đƣợc di chuyển tới hàng đợi

Q0

Q1

Q2

có độ ƣu tiên cao hơn. Đây là hình thức của sự l o hóa nhằm ngăn chặn sự đói CPU.

Hình 2.24. Hàng đợi ph n hồi đa c p

Ví dụ, x t một bộ định thời hàng đợi phản hồi đa cấp với ba hàng đợi đƣợc đánh

số từ Q0 tới Q2 hình 2.24 . Bộ định thời trƣớc tiên thực thi tất cả quá trình chứa trong

hàng đợi Q0. Chỉ khi hàng đợi Q0 rỗng nó sẽ thực thi các quá trình trong hàng đợi Q1.

Tƣơng tự, các quá trình trong hàng đợi Q2 sẽ đƣợc thực thi chỉ nếu hàng đợi Q0 và Q1

rỗng. Một quá trình đến hàng đợi Q1 sẽ ƣu tiên hơn quá trình đến hàng đợi Q2. Tƣơng

tự, một quá trình đến hàng đợi Q0 sẽ ƣu tiên hơn một quá trình vào hàng đợi Q1.

Một quá trình đƣa vào hàng đợi sẵn sàng đƣợc đặt trong hàng đợi Q0. Một quá

trình trong hàng đợi Q0 đƣợc cho một định mức thời gian là 8 ms. Nếu nó không kết

thúc trong thời gian này thì nó sẽ di chuyển vào đuôi của hàng đợi Q1. Nếu hàng đợi

Q0 rỗng thì quá trình tại đầu của hàng đợi Q1 đƣợc cho định mức thời gian là 16ms.

Nếu nó không hoàn thành thì nó bị tƣớc CPU và đƣợc đặt vào hàng đợi Q2. Các quá

83

trình trong hàng đợi Q2 đƣợc chạy trên cơ sở FCFS chỉ khi hàng đợi Q0 và Q1 rỗng.

Giải thuật định thời này cho độ ƣu tiên cao nhất tới bất cứ quá trình nào với chu

kỳ CPU 8 ms hay ít hơn. Một quá trình nhƣ thế sẽ nhanh chóng nhận CPU, kết thúc

chu kỳ CPU của nó và bỏ đi chu kỳ I/O kế tiếp của nó. Các quá trình cần hơn 8ms

nhƣng ít hơn 24ms đƣợc phục vụ nhanh chóng mặc dù với độ ƣu tiên thấp hơn các quá

trình ngắn hơn. Các quá trình dài tự động rơi xuống hàng đợi Q2 và đƣợc phục vụ

trong thứ tự FCFS với bất cứ chu kỳ CPU c n lại từ hàng đợi Q0 và Q1.

Giả sử có 5 tiến trình đến theo thứ tự:

Tiến trình Thời điểm vào RL Thời gian xử lý ms

P1 0 40

P2 5 10

P3 10 15

P4 12 20

P5 55 10

Bản 2 17. Ví dụ về định thời bi u hàng đợi ph n hồi đa c p

Sử dụng giải thuật hàng đợi phản hồi đa cấp trong Hình 2.24, thứ tự cấp phát

CPU nhƣ sau:

P1 P2 P3 P4 P1 P2 P3 P5 P4 P5 P1

0 8 16 24 32 48 50 57 65 77 79 95

Bản 2 18. Bi u đồ Gannt ví dụ về định thời bi u hàng đợi ph n hồi đa c p

Thời gian chờ trung bình = (55+35+32+45+14)/5 = 36,2 ms.

Số lần chuyển đổi ngữ cảnh : 10

- Khi xây dựng một giải thuật định thời biểu với hàng đợi ph n hồi đa c p cần quyết

định các tham số:

o Số lƣợng các cấp ƣu tiên

o Giải thuật định thời biểu cho từng danh sách ứng với một cấp ƣu tiên.

o Phƣơng pháp xác định thời điểm di chuyển một tiến trình lên danh sách

có độ ƣu tiên cao hơn.

o Phƣơng pháp xác định thời điểm di chuyển một tiến trình xuống danh

84

sách có độ ƣu tiên thấp hơn.

o Phƣơng pháp sử dụng để xác định một tiến trình mới đƣợc đƣa vào hệ

thống sẽ thuộc danh sách ứng với độ tiên nào.

2.6.3.7. Chiến lược định thời iểu xổ số Lottery)

Ý tƣởng chính của giải thuật là phát hành một số v số và phân phối cho các tiến

trình trong hệ thống. Khi đến thời điểm ra quyết định định thời biểu, sẽ tiến hành chọn

1 v "trúng giải", tiến trình nào sở hữu v này sẽ đƣợc nhận CPU.

- Nhận xét: Giải thuật Lottery cung cấp một giải pháp đơn giản nhƣng bảo đảm tính

công bằng cho thuật toán định thời biểu với chi phí thấp để cập nhật độ ƣu tiên cho

các tiến trình.

2.6.3.8. Định thời iểu đa ộ xử lý

Phần trên đây chúng ta tập trung vào các chiến lƣợc định thời biểu tiến trình trong

một hệ thống với một bộ vi xử lý đơn. Nếu có nhiều CPU, vấn đề định thời biểu tƣơng

ứng sẽ phức tạp hơn. Nhiều khả năng đ đƣợc thử nghiệm và nhƣ chúng ta đ thấy với

định thời biểu trong hệ thống đơn bộ xử lý, không có giải pháp tốt nhất. Trong phần

sau đây, chúng ta sẽ thảo luận vắn tắt một số vấn đề tập trung về định thời biểu đa bộ

xử lý. Chúng ta tập trung vào những hệ thống mà các bộ xử lý của nó đƣợc xác định

hay đồng nhất trong thuật ngữ chức năng của chúng; bất cứ bộ xử lý nào sẵn có thì có

thể đƣợc dùng để chạy bất kỳ quá trình nào trong hàng đợi. Chúng ta cũng cho rằng

truy xuất bộ nhớ đồng nhất uniform memory access-UMA . Chỉ những chƣơng trình

đƣợc biên dịch đối với tập hợp chỉ thị của bộ xử lý đƣợc cho mới có thể đƣợc chạy trên

chính bộ xử lý đó.

Ngay cả trong một bộ đa xử lý đồng nhất đôi khi có một số giới hạn cho việc định

thời biểu. X t một hệ thống với một thiết bị nhập/xuất đƣợc gán tới một đƣờng bus

riêng của một bộ xử lý. Các quá trình muốn dùng thiết bị đó phải đƣợc định thời biểu

để chạy trên bộ xử lý đó, ngƣợc lại thiết bị đó là không sẵn dùng.

Nếu nhiều bộ xử lý xác định sẵn dùng thì chia s tải có thể xảy ra. Nó có thể cung

cấp một hàng đợi riêng cho mỗi bộ xử lý. Tuy nhiên, trong trƣờng hợp này, một bộ xử

lý có thể rảnh với hàng đợi rỗng, trong khi bộ xử lý khác rất bận. Để ngăn chặn trƣờng

hợp này, chúng ta dùng một hàng đợi sẵn sàng chung. Tất cả quá trình đi vào một hàng

85

đợi và đƣợc định thời biểu trên bất cứ bộ xử lý sẵn dùng nào.

Trong một cơ chế nhƣ thế, một trong hai tiếp cận định thời biểu có thể đƣợc

dùng. Trong tiếp cận thứ nhất, mỗi bộ xử lý định thời biểu chính nó. Mỗi bộ xử lý xem

x t hàng đợi sẵn sàng chung và chọn một quá trình để thực thi. Nếu chúng ta có nhiều

bộ xử lý cố gắng truy xuất và cập nhật một cấu trúc dữ liệu chung thì mỗi bộ xử lý phải

đƣợc lập trình rất cẩn thận. Chúng ta phải đảm bảo rằng hai bộ xử lý không chọn cùng

quá trình và quá trình đó không bị mất từ hàng đợi. Tiếp cận thứ hai tránh vấn đề này

bằng cách đề cử một bộ xử lý nhƣ bộ định thời biểu cho các quá trình khác, do đó tạo

ra cấu trúc chủ-tớ master-slave).

vài hệ thống thực hiện cấu trúc này từng bƣớc bằng cách tất cả quyết định định

thời biểu, xử lý nhập/xuất và các hoạt động hệ thống khác đƣợc quản lý bởi một bộ xử

lý đơn-một server chủ. Các bộ xử lý khác chỉ thực thi m ngƣời dùng. Đa xử lý không

đối xứng asymmetric multiprocessing đơn giản hơn đa xử lý đối xứng symmetric

multiprocessing vì chỉ một quá trình truy xuất các cấu trúc dữ liệu hệ thống, làm giảm

đi yêu cầu chia s dữ liệu. Tuy nhiên, nó cũng không hiệu quả. Các quá trình giới hạn

nhập/xuất có thể gây thắt cổ chai bottleneck trên một CPU đang thực hiện tất cả các

hoạt động. Điển hình, đa xử lý không đối xứng đƣợc cài đặt trƣớc trong một hệ điều

hành và sau đó đƣợc nâng cấp tới đa xử lý đối xứng khi hệ thống tiến triển.

2.6.3.9. Định thời iểu thời gian thực

Trong chƣơng đầu chúng ta đ tìm hiểu tổng quan về hệ điều hành thời thực và

thảo luận tầm quan trọng của nó. Ở đây, chúng ta tiếp tục thảo luận bằng cách mô tả

các điều kiện thuận lợi định thời biểu cần để hỗ trợ tính toán thời thực trong hệ thống

máy tính đa mục đích.

Tính toán thời thực đƣợc chia thành hai loại: hệ thống thời thực cứng đƣợc yêu

cầu để hoàn thành một công việc tới hạn trong lƣợng thời gian đƣợc đảm bảo. Thông

thƣờng, một quá trình đƣợc đƣa ra xem x t cùng với khai báo lƣợng thời gian nó cần

để hoàn thành hay thực hiện nhập/xuất. Sau đó, bộ định thời biểu nhận đƣợc quá trình,

đảm bảo rằng quá trình sẽ hoàn thành đúng giờ hay từ chối yêu cầu khi không thể.

Điều này đƣợc gọi là đặt trƣớc tài nguyên. Để đảm bảo nhƣ thế đ i hỏi bộ định thời

biểu biết chính xác bao lâu mỗi loại chức năng hệ điều hành mất để thực hiện và do đó

mỗi thao tác phải đƣợc đảm bảo để mất lƣợng thời gian tối đa. Một đảm bảo nhƣ thế là

không thể trong hệ thống với lƣu trữ phụ và bộ nhớ ảo vì các hệ thống con này gây ra

86

sự biến đổi không thể tránh hay không thể thấy trƣớc trong lƣợng thời gian thực thi

một quá trình xác định. Do đó, hệ thống thời thực cứng đƣợc hình thành từ nhiều phần

mềm có mục đích đặc biệt chạy trên phần cứng tận hiến cho các quá trình tới hạn, và

thiếu chức năng đầy đủ của các máy tính và các hệ điều hành hiện đại. Tính toán thời

gian thực mềm ít nghiêm khắc hơn. Nó yêu cầu các quá trình tới hạn nhận độ ƣu tiên

cao hơn các quá trình khác. Mặc dù, thêm chức năng thời thực mềm tới hệ chia s thời

gian có thể gây ra việc cấp phát tài nguyên không công bằng và có thể dẫn tới việc trì

ho n lâu hơn hay thậm chí đói tài nguyên đối với một số quá trình, nhƣng nó ít có thể

đạt đƣợc. Kết quả là hệ thống mục đích chung cũng có thể hỗ trợ đa phƣơng tiện, đồ

họa giao tiếp tốc độ cao, và nhiều công việc khác nhƣng không hỗ trợ tính toán thời

thực mềm.

2.7. ĐỒNG BỘ HÓ TIẾN TR NH

2.7.1. Liên lạc giữa các tiến trình

2.7.1.1 Nhu cầu liên lạc giữa các tiến trình

Trong môi trƣờng đa chƣơng, một tiến trình không độc lập trong hệ thống, mà nó

có thể ảnh hƣởng đến các tiến trình khác, hoặc bị các tiến trình khác tác động. Nói cách

khác, các tiến trình là những thực thể độc lập, nhƣng chúng vẫn có nhu cầu liên lạc với

nhau để:

 Chia s thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó,

do vậy hệ điều hành cần cung cấp một môi trƣờng cho ph p sự truy cập đồng thời

đến các dữ liệu chung.

 Hợp tác hoàn thành công việc: đôi khi để đạt đƣợc một sự xử lý nhanh chóng,

ngƣời ta phân chia một công việc thành các công việc nhỏ có thể tiến hành song

song. Thƣờng thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành

công việc ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho

tiến trình khác… Trong các trƣờng hợp đó, hệ điều hành cần cung cấp cơ chế để

các tiến trình có thể trao đổi thông tin với nhau.

2.7.1.2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình

Do mỗi tiến trình sở hữu một không gian địa chỉ riêng biệt, nên các tiến trình

87

không thể liên lạc trực tiếp d dàng mà phải nhờ vào các cơ chế do hệ điều hành cung

cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thƣờng phải tìm giải

pháp cho các vấn đề chủ yếu sau:

 Li n ết tường minh hay tiềm ẩn: tiến trình có cần phải biết tiến trình nào đang trao

đổi hay chia s thông tin với nó? Mối liên kết đƣợc gọi là tƣờng minh khi đƣợc

thiết lập rõ ràng, trực tiếp giữa các tiến trình; và là tiềm ẩn khi các tiến trình liên

lạc với nhau thông qua một qui ƣớc ngầm nào đó.

 Li n ạc theo chế độ đồng bộ hay hông đồng bộ: khi một tiến trình trao đổi thông

tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn

tất rồi mới tiếp tục các xử lý khác? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ

chờ nhau hoàn tất việc liên lạc, c n các tiến trình liên lạc theo cơ chế nonblocking

thì không.

 Li n ạc giữa các tiến trình trong hệ thống t p trung và hệ thống phân tán: cơ chế

liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc

giữa các tiến trình giữa những máy tính khác nhau?

Hầu hết các hệ điều hành đƣa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế có

những đặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.

2.7.2. Các cơ chế thông tin liên lạc

2.7.2.1. Tín hiệu Signal)

Tín hiệu là một cơ chế phần mềm tƣơng tự nhƣ các ngắt cứng tác động đến các

tiến trình. Một tín hiệu đƣợc sử dụng để thông báo cho tiến trình về một sự kiện nào đó

xảy ra. Có nhiều tín hiệu đƣợc định nghĩa, mỗi một tín hiệu có một ý nghĩa tƣơng ứng

88

với một sự kiện đặc trƣng.

Ví dụ : Một số tín hiệu của UNIX

Tín hiệu Mô tả

SIGINT Ngƣời dùng nhấn phím DEL để ngắt xử lý tiến trình

SIGQUIT Yêu cầu thoát xử lý

SIGILL Tiến trình xử lý một chỉ thị bất hợp lệ

SIGKILL Yêu cầu kết thúc một tiến trình

SIGFPT Lỗi floating – point xảy ra chia cho 0)

SIGPIPE Tiến trình ghi dữ liệu vào ống dẫn mà không có reader

SIGSEGV Tiến trình truy xuất đến một địa chỉ bất hợp lệ

SIGCLD Tiến trình con kết thúc

SIGUSR1 Tín hiệu 1 do ngƣời dùng định nghĩa

SIGUSR2 Tín hiệu 2 do ngƣời dùng định nghĩa

Bản 2 19. Một số tín hiệu của UNIX

Mỗi tiến trình sở hữu một bảng biểu di n các tín hiệu khác nhau. Với mỗi tín hiệu

sẽ có tƣơng ứng một trình xử lý tín hiệu qui định các xử lý của tiến trình khi nhận đƣợc

tín hiệu tƣơng ứng.

Các tín hiệu đƣợc gởi đi bởi :

 Phần cứng ví dụ lỗi do các ph p tính số học

 Hạt nhân hệ điều hành gởi đến một tiến trình ví dụ lƣu ý tiến trình khi có một

thiết bị nhập/xuất tự do .

 Một tiến trình gởi đến một tiến trình khác ví dụ tiến trình cha yêu cầu một tiến

trình con kết thúc

 Ngƣời dùng ví dụ nhấn phím Ctl-C để ngắt xử lý của tiến trình

Khi một tiến trình nhận một tín hiệu, nó có thể xử sự theo một trong các cách

sau :

 Bỏ qua tín hiệu

 Xử lý tín hiệu theo kiểu mặc định

89

 Tiếp nhận tín hiệu và xử lý theo cách đặc biệt của tiến trình.

Hình 2.25. Li n ạc b ng tín hiệu

- Nhận xét: Liên lạc bằng tín hiệu mang tính chất không đồng bộ, nghĩa là một tiến

trình nhận tín hiệu không thể xác định trƣớc thời điểm nhận tính hiệu. Hơn nữa các

tiến trình không thể kiểm tra đƣợc sự kiện tƣơng ứng với tín hiệu có thật sự xảy ra?

Cuối cùng, các tiến trình chỉ có thể thông báo cho nhau về một biến cố nào đó, mà

không trao đổi dữ liệu theo cơ chế này đƣợc.

2.7.2.2. Ống dẫn Pipe)

ng dẫn là một kênh liên lạc trực tiếp giữa hai tiến trình: dữ liệu xuất của tiến

trình này đƣợc chuyển đến làm dữ liệu nhập cho tiến trình kia dƣới dạng một d ng các

Byte.

Khi ống dẫn đƣợc thiết lập giữa hai tiến trình, một trong chúng sẽ ghi dữ liệu vào

ống dẫn và tiến trình kia sẽ đọc dữ liệu từ ống dẫn. Thứ tự dữ liệu truyền qua ống dẫn

đƣợc bảo toàn theo nguyên tắc FIFO. Một ống dẫn có kích thƣớc giới hạn thƣờng là

ng dẫn

P1

P2

c b …. a

4096 ký tự

Hình 2.26. Li n ạc qua ống dẫn

Một tiến trình chỉ có thể sử dụng một ống dẫn do nó tạo ra hay kế thừa từ tiến

90

trình cha. Hệ điều hành cung cấp các lời gọi hệ thống read/write cho các tiến trình thực

hiện thao tác đọc/ghi dữ liệu trong ống dẫn. Hệ điều hành cũng chịu trách nhiệm đồng

bộ hóa việc truy xuất ống dẫn trong các tình huống:

- Tiến trình đọc ống dẫn sẽ bị khóa nếu ống dẫn trống, nó sẽ phải đợi đến khi ống

dẫn có dữ liệu để truy xuất.

- Tiến trình ghi ống dẫn sẽ bị khóa nếu ống dẫn đầy, nó sẽ phải đợi đến khi ống dẫn

có chỗ trống để chứa dữ liệu.

- Nhận xét: Liên lạc bằng ống dẫn là một cơ chế liên lạc một chiều (unidirectiona ),

nghĩa là một tiến trình kết nối với một ống dẫn chỉ có thể thực hiện một trong hai

thao tác đọc hoặc ghi, nhƣng không thể thực hiện cả hai. Một số hệ điều hành cho

ph p thiết lập hai ống dẫn giữa một cặp tiến trình để tạo liên lạc hai chiều. Trong

những hệ thống đó, có nguy cơ xảy ra tình trạng t c nghẽn deadlock : một ống

dẫn bị giới hạn về kích thƣớc, do vậy nếu cả hai ống dẫn nối kết hai tiến trình đều

đầy hoặc đều trống và cả hai tiến trình đều muốn ghi hay đọc dữ liệu vào ống

dẫn mỗi tiến trình ghi dữ liệu vào một ống dẫn , chúng sẽ cùng bị khóa và chờ lẫn

nhau mãi mãi!

Cơ chế này cho ph p truyền dữ liệu với cách thức không cấu trúc.

Ngoài ra, một giới hạn của hình thức liên lạc này là chỉ cho ph p kết nối hai tiến

trình có quan hệ cha-con, và trên cùng một máy tính.

2.7.2.3. Vùng nhớ chia s

Cách tiếp cận của cơ chế này là cho nhiều tiến trình cùng truy xuất đến một vùng

nhớ chung gọi là v ng nhớ chia sẻ (shared memory). Không có bất kỳ hành vi truyền

dữ liệu nào cần phải thực hiện ở đây, dữ liệu chỉ đơn giản đƣợc đặt vào một vùng nhớ

mà nhiều tiến trình có thể cùng truy cập đƣợc.

Với phƣơng thức này, các tiến trình chia s một vùng nhớ vật lý thông qua trung

gian không gian địa chỉ của chúng. Một vùng nhớ chia s tồn tại độc lập với các tiến

trình, và khi một tiến trình muốn truy xuất đến vùng nhớ này, tiến trình phải kết gắn

vùng nhớ chung đó vào không gian địa chỉ riêng của từng tiến trình, và thao tác trên đó

91

nhƣ một vùng nhớ riêng của mình.

P1

P2

Vùng nhớ chia s

Hình 2.27. Li n ạc qua v ng nhớ chia sẻ

- Nhận xét:. Đây là phƣơng pháp nhanh nhất để trao đổi dữ liệu giữa các tiến trình.

Nhƣng phƣơng thức này cũng làm phát sinh các khó khăn trong việc bảo đảm sự

toàn vẹn dữ liệu, ví dụ : làm sao biết đƣợc dữ liệu mà một tiến trình truy xuất là dữ

liệu mới nhất mà tiến trình khác đ ghi ? Làm thế nào ngăn cản hai tiến trình cùng

đồng thời ghi dữ liệu vào vùng nhớ chung ?…Rõ ràng vùng nhớ chia s cần đƣợc

bảo vệ bằng những cơ chế đồng bộ hóa thích hợp..

Một khuyết điểm của phƣơng pháp liên lạc này là không thể áp dụng hiệu quả

trong các hệ phân tán, để trao đổi thông tin giữa các máy tính khác nhau.

2.7.2.4. Trao đổi thông điệp Message)

Hệ điều hành c n cung cấp một cơ chế liên lạc giữa các tiến trình không thông

qua việc chia s một tài nguyên chung , mà thông qua việc gởi thông điệp. Để hỗ trợ cơ

chế liên lạc bằng thông điệp, hệ điều hành cung cấp các hàm IPC chuẩn Interprocess

communication , cơ bản là hai hàm:

Send(message) : gởi một thông điệp

Receive(message) : nhận một thông điệp

Nếu hai tiến trình P và Q muốn liên lạc với nhau, cần phải thiết lập một mối liên

kết giữa hai tiến trình, sau đó P, Q sử dụng các hàm IPC thích hợp để trao đổi thông

điệp, cuối cùng khi sự liên lạc chấm dứt mối liên kết giữa hai tiến trình sẽ bị hủy. Có

nhiều cách thức để thực hiện sự liên kết giữa hai tiến trình và cài đặt các theo tác

Send/Receive tƣơng ứng: liên lạc trực tiếp hay gián tiếp, liên lạc đồng bộ hoặc không

đồng bộ, kích thƣớc thông điệp là cố định hay không… Nếu các tiến trình liên lạc theo

kiểu liên kết tƣờng minh, các hàm Send và Receive sẽ đƣợc cài đặt với tham số:

Send destination, message : gởi một thông điệp đến destination

92

Receive source,message : nhận một thông điệp từ source

- Nhận xét: Đơn vị truyền thông tin trong cơ chế trao đổi thông điệp là một

thông điệp, do đó các tiến trình có thể trao đổi dữ liệu ở dạng có cấu trúc.

2.7.2.5. Sockets

Một socket là một thiết bị truyền thông hai chiều tƣơng tự nhƣ tập tin, chúng ta có

thể đọc hay ghi lên nó, tuy nhiên mỗi socket là một thành phần trong một mối nối

nào đó giữa các máy trên mạng máy tính và các thao tác đọc/ghi chính là sự trao đổi dữ

liệu giữa các ứng dụng trên nhiều máy khác nhau.

Sử dụng socket có thể mô phỏng hai phƣơng thức liên lạc trong thực tế: liên lạc

thƣ tín socket đóng vai tr bƣu cục và liên lạc điện thoại socket đóng vai trò

tổng đài .

Các thuộc tính của socket:

 Domaine: định nghĩa dạng thức địa chỉ và các nghi thức sử dụng. Có nhiều

domaines, ví dụ UNIX, INTERNET, XEROX_NS, ...

 Type: định nghĩa các đặc điểm liên lạc:

 Sự tin cậy

 Sự bảo toàn thứ tự dữ liệu

 Lặp lại dữ liệu

 Chế độ nối kết

 Bảo toàn giới hạn thông điệp

 Khả năng gởi thông điệp khẩn

Để thực hiện liên lạc bằng socket, cần tiến hành các thao tác:

 Tạo lập hay mở một socket

 Gắn kết một socket với một địa chỉ

 Liên lạc: Có hai kiểu liên lạc tùy thuộc vào chế độ nối kết:

 Li n ạc trong chế độ hông i n ết : liên lạc theo hình thức hộp thƣ

o Hai tiến trình liên lạc với nhau không kết nối trực tiếp

93

o Mỗi thông điệp phải kèm theo địa chỉ ngƣời nhận.

Hình thức liên lạc này có đặc điểm:

o Ngƣời gởi không chắc chắn thông điệp của họ đƣợc gởi đến ngƣời

nhận.

o Một thông điệp có thể đƣợc gởi nhiều lần

o Hai thông điệp đƣợc gởi theo một thứ tự nào đó có thể đến tay ngƣời

nhận theo một thứ tự khác.

Một tiến trình sau khi đ mở một socket có thể sử dụng nó để liên lạc với

nhiều tiến trình khác nhau nhờ sử dụng hai primitive send và receive.

 Li n ạc trong chế độ nối ết:

Một liên kết đƣợc thành lập giữa hai tiến trình. Trƣớc khi mối liên kết này đƣợc

thiết lập, một trong hai tiến trình phải đợi có một tiến trình khác yêu cầu kết nối. Có thể

sử dụng socket để liên lạc theo mô hình Client-Server . Trong mô hình này, server sử

dụng lời gọi hệ thống listen và accept để nối kết với Client, sau đó Client và server có

thể trao đổi thông tin bằng cách sử dụng các primitive send và receive.

- Hủy một socket

Ví dụ: Trong nghi thức truyền thông TCP, mỗi mối nối giữa hai máy tính đƣợc

xác định bởi một port, khái niệm port ở đây không phải là một cổng giao tiếp trên thiết

bị vật lý mà chỉ là một khái niệm logic trong cách nhìn của ngƣời lập trình, mỗi

port đƣợc tƣơng ứng với một số nguyên dƣơng.

Hình 2.28. Các soc et và port trong mối nối TCP11.

Hình 2.28 minh họa một cách giao tiếp giữa hai máy tính trong nghi thức truyền

11 Trần Hạnh Nhi, Bài giảng điện tử hệ điều hành, ĐH Khoa học tự nhiên TP.HCM

94

thông TCP. Máy A tạo ra một socket và kết buộc bind socket này với một port X tức

là một số nguyên dƣơng có ý nghĩa cục bộ trong máy A , trong khi đó máy B tạo một

socket khác và móc vào (connect) port X trong máy A.

- Nhận xét: Cơ chế socket có thể sử dụng để chuẩn hoá mối liên lạc giữa các tiến

trình vốn không liên hệ với nhau, và có thể hoạt động trong những hệ thống khác

nhau.

2.7.3. Nhu cầu đồng ộ hóa synchronisation)

Trong một hệ thống cho ph p các tiến trình liên lạc với nhau, bao giờ hệ điều

hành cũng cần cung cấp kèm theo những cơ chế đồng bộ hóa để bảo đảm hoạt động

của các tiến trình đồng hành không tác động sai lệch đến nhau vì các lý do sau đây:

2.7.3.1. Yêu cầu độc quyền truy xuất Mutual exclusion)

Các tài nguyên trong hệ thống đƣợc phân thành hai loại: tài nguyên có thể chia sẻ

cho ph p nhiều tiến trình đồng thời truy xuất, và tài nguyên hông th chia sẻ chỉ chấp

nhận một hay một số lƣợng hạn chế tiến trình sử dụng tại một thời điểm. Tính không

thể chia s của tài nguyên thƣờng có nguồn gốc từ một trong hai nguyên nhân sau đây:

 Đặc tính cấu tạo phần cứng của tài nguyên không cho ph p chia s .

 Nếu nhiều tiến trình sử dụng tài nguyên đồng thời, có nguy cơ xảy ra các kết

quả không dự đoán đƣợc do hoạt động của các tiến trình trên tài nguyên ảnh

hƣởng lẫn nhau.

Để giải quyết vấn đề, cần bảo đảm tiến trình độc quyền truy xuất tài nguyên,

nghĩa là hệ thống phải kiểm soát sao cho tại một thời điểm, chỉ có một tiến

trình đƣợc quyền truy xuất một tài nguyên không thể chia s .

2.7.3.2. Yêu cầu phối hợp Synchronization)

Nhìn chung, mối tƣơng quan về tốc độ thực hiện của hai tiến trình trong hệ thống

là không thể biết trƣớc, vì điều này phụ thuộc vào nhiều yếu tố động nhƣ tần suất xảy

ra các ngắt của từng tiến trình, thời gian tiến trình đƣợc cấp phát bộ xử lý … Có thể nói

rằng các tiến trình hoạt động không đồng bộ với nhau. Nhƣng có những tình huống các

tiến trình cần hợp tác trong việc hoàn thành công việc, khi đó cần phải đồng bộ hóa

hoạt động của các tiến trình, ví dụ một tiến trình chỉ có thể xử lý nếu một tiến trình

95

khác đ kết thúc một công việc nào đó …

2.7.4. Tài nguyên găng và đoạn găng

2.7.4.1. Tài nguyên găng Critical Resource)

Trong môi trƣờng hệ điều hành đa nhiệm - đa chƣơng – đa ngƣời dùng, việc chia

s tài nguyên cho các tiến trình của ngƣời dùng, dùng chung là cần thiết, nhƣng nếu hệ

điều hành không tổ chức tốt việc sử dụng tài nguyên dùng chung của các tiến trình hoạt

động đồng thời, thì không những không mang lại hiệu quả khai thác tài nguyên của hệ

thống mà c n làm hỏng dữ liệu của các ứng dụng. Và nguy hiểm hơn là việc hỏng dữ

liệu này có thể hệ điều hành và ứng dụng không thể phát hiện đƣợc. Việc hỏng dữ liệu

của ứng dụng có thể làm sai lệch ý nghĩa thiết kế của nó. Đây là điều mà cả hệ điều

hành và ngƣời lập trình đều không mong muốn.

Các tiến trình hoạt động đồng thời thƣờng cạnh tranh với nhau trong việc sử dụng

tài nguyên dùng chung. Hai tiến trình hoạt động đồng thời cùng ghi vào một không

gian nhớ chung một biến chung trên bộ nhớ hay hai tiến trình đồng thời cùng ghi dữ

liệu vào một tập tin chia s , đó là những biểu hiện của sự cạnh tranh về việc sử dụng tài

nguyên dùng chung của các tiến trình. Để các tiến trình hoạt động đồng thời không

cạnh tranh hay xung đột với nhau khi sử dụng tài nguyên dùng chung hệ điều hành

phải tổ chức cho các tiến trình này đƣợc độc quyền truy xuất/sử dụng trên các tài

nguyên dùng chung này.

Những tài nguy n được hệ điều hành chia sẻ cho nhiều tiến trình hoạt động đồng

thời, mà c nguy cơ dẫn đến sự tranh ch p giữa các tiến trình này hi s dụng chúng,

được gọi à tài nguy n găng. Tài nguyên găng có thể là tài nguyên phần cứng hoặc tài

nguyên phần mềm, có thể là tài nguyên phân chia đƣợc hoặc không phân chia đƣợc,

nhƣng đa số thƣờng là tài nguyên phân chia đƣợc nhƣ là: các biến chung, các t p tin

chia sẻ, t p tin cơ s dữ iệu

Các ví dụ sau đây cho thấy hậu quả của việc sử dụng tài nguyên găng trong các

chƣơng trình có các tiến trình hoạt động đồng thời:

Ví dụ 1: Giả sử có một chƣơng trình, trong đó có hai tiến trình P1 và P2 hoạt

động đồng thời với nhau. Tiến trình P1 phải tăng biến Count lên 1 đơn vị, tiến trình P2

phải tăng biến Count lên 1 đơn vị, với mục đích tăng Count lên đƣợc 2 đơn vị.

96

Chƣơng trình có thể thực hiện nhƣ sau:

1. Tiến trình P1 ghi nội dung biến toàn cục Count vào biến cục bộ L1

2. Tiến trình P2 ghi nội dung biến toàn cục Count vào biến cục bộ L2

3. Tiến trình P1 thực hiện L1:= L1 + 1 và Count := L1

4. Tiến trình P2 thực hiện L2:= L2 + 1 và Count := L2

Nhƣ vậy thoạt nhìn ta thấy rằng chắc chắn Count đ tăng đƣợc 2 đơn vị, nhƣng

trong thực tế có thể Count chỉ tăng đƣợc 1 đơn vị. Bởi vì, nếu P1 và P2 đồng thời nhận

giá trị của Count giả sử ban đầu Count = 4 vào L1 và L2, sau đó P1 tăng L1 lên 1 và

P2 tăng L2 lên 1 L1 = 5, L2 = 5 , rồi sau đó cả P1 và P2 đồng thời ghi giá trị biến L

của nó vào lại Count, thì Count chỉ tăng đƣợc 1 đơn vị, Count= 5. Đây là điều mà

chƣơng trình không mong muốn nhƣng cả chƣơng trình và hệ điều hành đều khó có thể

phát hiện đƣợc.

Nguyên nhân ở trên là do hai tiến trình P1 và P2 đồng thời truy xuất biến Count,

cả khi nhận giá trị của count, lẫn khi ghi giá trị vào Count. Trong trƣờng hợp này nếu

hệ điều hành không cho ph p hai tiến trình P1 và P2 đồng thời truy xuất Count, hoặc

hệ điều hành cho ph p mỗi tiến trình đƣợc độc quyền truy xu t Count trong đoạn mã

lệnh sau, thì lỗi trên sẽ không xảy ra.

P1 P2

Begin Begin

L1 := Count; L2 := Count;

L1 := L1 + 1; L2 := L2 + 1;

Count := L1; Count := L2;

End; End;

Trong trƣờng hợp này tài nguy n găng là biến Count.

Ví dụ 2: Giả sử có hai tiến trình P1 và P2 đồng hành thực hiện công việc của các kế toán, và cùng chia s một vùng nhớ chung lƣu trữ biến taikhoan phản ánh thông tin

về tài khoản. Mỗi tiến trình muốn rút một khoản tiền tienrut từ tài khoản:

if (taikhoan - tienrut >=0)

taikhoan = taikhoan - tienrut;

else

97

error(« khong the rut tien ! »);

Giả sử trong tài khoản hiện c n 800, P1 muốn rút 500 và P2 muốn rút 400.

P1 rút 500 P2 rút 400

if (taikhoan - tienrut >=0) if (taikhoan - tienrut >=0)

taikhoan = taikhoan - tienrut; taikhoan = taikhoan - tienrut;

else else

error(« khong the rut tien ! »); error(« khong the rut tien ! »);

Tiến trình P1 và P2 đồng thời rút tiền. Theo nguyên tắc điều trên không thể xảy ra, vì tổng số tiền mà hai tiến trình cần rút lớn hơn số tiền c n lại trong tài khoản 500 +

400 > 800 . Nhƣng trong môi trƣờng đa nhiệm, đa ngƣời dùng nếu hệ điều hành không

giám sát tốt việc sử dụng tài nguyên dùng chung của các tiến trình hoạt động đồng thời

thì điều trên vẫn có thể xảy ra. tức là, cả hai tiến trình P1 và P2 đều thành công trong thao tác rút tiền, mà ứng dụng cũng nhƣ hệ điều hành không hề phát hiện. Bởi vì, quá trình rút tiền của các tiến trình P1 và P2 có thể di n ra nhƣ sau:

 P1 Sau khi đ kiểm tra điều kiện (taikhoan - tienrut >=0) và nhận kết quả là 300, P1 hết thời gian xử lý mà hệ thống cho ph p, hệ điều hành cấp phát CPU cho P2.

 P2 kiểm tra cùng điều kiện trên, nhận đƣợc kết quả là 400 (do P1 vẫn chƣa rút

tiền và rút 400. Giá trị của taikhoan đƣợc cập nhật lại là 400.

 Khi P1 đƣợc tái kích hoạt và tiếp tục xử lý, nó sẽ không kiểm tra lại điều kiện (taikhoan - tienrut >=0)-vì đã kiểm tra trong lượt xử lý trước- mà thực

hiện rút tiền. Giá trị của taikhoan sẽ lại đƣợc cập nhật thành -100. Tình huống

lỗi xảy ra!

Nhƣ vậy cả 2 tiến trình P1 và P2 đều hoàn thành việc rút tiền, không thông báo lỗi, mà không gặp bất kỳ một lỗi hay một trở ngại nào. Nhƣng đây là một lỗi nghiêm trọng

đối với ứng dụng, vì không thể rút một khoảng tiền lớn hơn số tiền c n lại trong tài

khoản, hay Tài khoản không thể nhận giá trị âm.

98

Nguyên nhân của lỗi này không phải là do hai tiến trình P1 và P2 đồng thời truy xuất biến Tài khoản, mà do hai thao tác: kiểm tra tài khoản và thực hiện rút tiền, của

các tiến trình này bị tách rời nhau. Nếu hệ điều hành làm cho hai thao tác này không

tách rời nhau thì lỗi này sẽ không xảy ra. Trong trƣờng hợp này tài nguy n găng là

biến taikhoan.

Các tình huống tƣơng tự nhƣ thế - có thể xảy ra khi có nhiều hơn hai tiến

trình đọc và ghi dữ liệu trên cùng một vùng nhớ chung nhƣ taikhoan, và kết quả phụ

thuộc vào sự điều phối của hệ thống- đƣợc gọi là các tình huống tranh đoạt điều

hi n (race condition) gọi t t à cạnh tranh

2.7.4.2. Đoạn găng CS-critical section)

Đoạn găng (miền găng): Đoạn mã ệnh dùng chung trong các tiến trình đồng

thời, đoạn này c hành động truy c p (đọc/ghi) đến các tài nguy n găng được gọi à

đoạn găng hay miền găng. Tức là, các đoạn m lệnh dùng chung trong các chƣơng

trình dùng để truy cập đến các vùng nhớ chia s biến Count, biến taikhoan , các tập

tin chia s đƣợc gọi là các đoạn găng.

Trong ví dụ 1 ở trên có hai đoạn găng là:

{ L1 := Count và Count := L1}

Trong ví dụ 2 ở trên, đoạn m lệnh sau đây là đoạn găng:

{ IF Tài khoản - Tiền rút >= 0 Tài khoản := Tài khoản - Tiền rút }

Để hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành phải

điều khiển các tiến trình sao cho, tại một thời điểm chỉ có một tiến trình nằm trong

đoạn găng, nếu có nhiều tiến trình cùng muốn vào thực hiện đoạn găng thì chỉ có một

tiến trình đƣợc vào, các tiến trình khác phải chờ, một tiến trình khi ra khỏi kết thúc

đoạn găng phải báo cho hệ điều hành và/hoặc các tiến trình khác biết để các tiến trình

này vào đoạn găng, vv. Các công tác điều khiển tiến trình thực hiện trên đoạn găng của

hệ điều hành đƣợc gọi là đồng bộ tiến trình qua đoạn găng. Để công tác đồng bộ tiến

trình qua đoạn găng đƣợc thành công, thì cần phải có sự phối hợp giữa vi xử lý, hệ điều

hành và ngƣời lập trình. Vi xử lý đƣa ra các chỉ thị, hệ điều hành cung cấp các công cụ

để ngƣời lập trình xây dựng các sơ đồ đồng bộ hợp lý, để đảm bảo sự độc quyền trong

99

việc sử dụng tài nguyên găng của các tiến trình.

Trong phần sau đây chúng ta sẽ tìm hiểu về các phƣơng pháp và các sơ đồ đồng

bộ tiến trình qua đoạn găng. Nhƣng trƣớc hết ở đây chúng ta chấp nhận một mẫu

chương trình được sử dụng trong các sơ đồ đồng bộ tiến trình. Mẫu chƣơng trình này

mang tính chất trừu tƣợng, dùng để minh hoạ cho các ý tƣởng đồng bộ.

Rất ít ngôn ngữ lập trình hỗ trợ cú phát viết chƣơng trình đồng bộ này. Mặc dầu

đ cung cấp đầy đủ các công cụ đồng bộ tiến trình cho ngƣời lập trình, nhƣng các hệ

điều hành hiện nay đều tổ chức đồng bộ tiến trình ngay trong lõi kernel của nó nên

ngƣời lập trình ít quan tâm đến tổ chức đồng bộ tiến trình khi lập trình. Sau đây là sơ

đồ đồng bộ minh hoạ:

Program MultualExclution; Const N = ….. /*số lượng tiến trình */ {--------------------------------------------------} Procedure P(i: integer); Begin Repeat EnterCritical(R); //kiểm tra và xác lập quyền vào đoạn găng <Đoạn găng của P>; ExitCritical(R); //xác lập khi rời đoạn găng <Đoạn không găng của>; Until .F. End; {---------------------------------------------------}

//chương trình chính chứa các tiến trình đồng thời

BEGIN PerBegin P(1); P(2); ….. P(n); ParEnd; END. {---------------------------------------------------}

Sơ đồ trên tổ chức đồng bộ cho n tiến trình P, n tiến trình này hoạt động đồng thời

với nhau và chia s tài nguyên dùng chung R. Mỗi tiến trình trong trƣờng hợp này có

một đoạn găng với tài nguyên R. Để tổ chức truy xuất độc quyền trên tài nguyên găng,

mỗi tiến trình trƣớc khi vào đoạn găng tiến trình phải gọi thủ tục EnterCritical() để

thiết lập quyền vào đoạn găng, để báo cho các tiến trình biết là tiến trình hiện tại đang

ở trong đoạn găng. Để ra khỏi đoạn găng mỗi tiến trình phải gọi thủ tục ExitCritical(),

100

để báo cho các tiến trình khác biết là tiến trình hiện tại đ ra khỏi đoạn găng.

2.7.4.3. Điều kiện của công tác đồng ộ qua đoạn găng

Trƣớc hết chúng ta lƣu ý lại rằng, nhiệm vụ đồng bộ tiến trình phải là sự phối hợp

giữ phần cứng vi xử lý, hệ điều hành, ngôn ngữ lập trình và ngƣời lập trình, trong đó

nhiệm vụ chính là của hệ điều hành và ngƣời lập trình. Vi xử lý, hệ điều hành và ngôn

ngữ lập trình cung cấp các công cụ để hệ điều hành và/hoặc ngƣời lập trình tổ chức sơ

đồ đồng bộ. Hệ điều hành sẽ giám sát và tổ chức thực hiện các sơ đồ đồng bộ này. Cho

dù nhiệm vụ đồng bộ là của thành phần nào, thì tất cả phải đạt đƣợc các yêu cầu sau:

(1) Tại một thời điểm không thể có hai tiến trình nằm trong đoạn găng. Nếu có

nhiều tiến trình đồng thời cùng xin đƣợc vào đoạn găng thì chỉ có một tiến

trình đƣợc ph p vào đoạn găng, các tiến trình khác phải xếp hàng chờ trong

hàng đợi.

(2) Tiến trình chờ ngoài đoạn găng không đƣợc ngăn cản các tiến trình khác vào

đoạn găng.

(3) Không có tiến trình nào đƣợc ph p ở lâu vô hạn trong đoạn găng và không

có tiến trình phải chờ lâu mới đƣợc vào đoạn găng chờ trong hàng đợi .

(4) Nếu tài nguyên găng đƣợc giải phóng thì hệ điều hành có nhiệm vụ đánh

thức các tiến trình trong hàng đợi ra để tạo điều kiện cho nó vào đoạn găng.

(5) Không có giả thiết nào đặt ra cho sự liên hệ về tốc độ của các tiến trình, cũng

nhƣ về số lƣợng bộ xử lý trong hệ thống.

Trƣớc khi tìm hiểu về các giải pháp đồng bộ tiến trình qua đoạn găng chúng ta

cần lƣu ý một lần nữa rằng: nguyên lý cơ bản của đồng bộ là tổ chức truy xuất độc

quyền trên tài nguyên găng, nhƣng sự bắt buộc độc quyền này c n tồn tại hai hạn chế

lớn:

 Các tiến trình c th dẫn đến t c nghẽn (Dead oc ) trong hệ thống. Chúng ta

sẽ tìm hiểu về tắc nghẽn sau, bây gời chúng ta h y xem một ví dụ về tắc

nghẽn: Giả nhƣ có hai tiến trình P1 và P2, và hai tài nguyên găng R1 và R2,

mỗi tiến trình đều cần truy xuất đến hai tài nguyên này. Và trƣờng hợp sau

đây hoàn toàn có thể xảy ra: R1 đang đƣợc giao cho P2, R2 đƣợc giao cho P1.

Mỗi tiến trình đều chờ đợi đƣợc sử dụng tài nguyên thứ hai. Không một tiến

101

trình nào giải phóng tài nguyên mà nó đang sở hữu cho đến khi có nhận đƣợc

tài nguyên c n lại để thực hiện đoạn găng của nó. Cả hai tiến trình đó đều bị

t c nghẽn – t t c các thread đều rơi vào trạng thái chờ vô hạn

 Các tiến trình c th bị đ i (Starvation) tài nguy n: Ví dụ sau đây cho thấy sự

đói tài nguyên của các tiến trình trên hệ thống: Giả sử rằng có 3 tiến trình P1,

P2, P3, mỗi tiến trình đều cần truy xuất định kỳ đến tài nguyên R. X t trƣờng

hợp P1 đang sở hữu tài nguyên c n hai tiến trình P2, P3 phải chờ đợi tài

nguyên đó. Khi mà P1 thoát khỏi đoạn găng của nó, cả P2 lẫn P3 đều có thể

đƣợc chấp nhận truy xuất đến R. Giả sử rằng P3 đƣợc truy xuất R, sau đó

trƣớc khi P3 kết thúc đoạn găng của nó P1 lại một lần nữa cần truy xuất, và

giả sử P1 đƣợc đáp ứng. Sau đó đến lƣợt P3 truy xuất. Nhƣ vậy P1, P3 thay

nhau nhận đƣợc quyền truy xuất tài nguyên R thì P2 hầu nhƣ không thể truy

cập đến tài nguyên, cho dù không có sự tắc nghẽn nào xảy ra. Trƣờng hợp này

P2 bị đ i tài nguy n – chỉ một vài thread ph i chờ đợi vô hạn định

2.7.5. Đồng ộ tiến trình qua đoạn găng

2.7.5.1. Các giải pháp phần cứng

2.7.5.1.1. Dùng cặp chỉ thị STI & CLI

Một số vi xử lý cung cấp cặp chỉ thị CLI và STI để ngƣời lập trình thực hiện các

thao tác mở ngắt STI: Setting Interrupt và cấm ngắt CLI: Clean Interrupt của hệ

thống trong lập trình. Ngƣời lập trình có thể dùng cặp chỉ thị này để tổ chức đồng bộ

cho các tiến trình nhƣ sau: Trƣớc khi vào đoạn găng tiến trình thực hiện chỉ thị CLI, để

yêu cầu cấm các ngắt trong hệ thống, khi đó ngắt đồng hồ không thể phát sinh, nghĩa là

không có một tiến trình nào khác có thể phát sinh, nhờ đó mà tiến trình trong đoạn

găng toàn quyền sử dụng tài nguyên găng cho đến hết thời gian xử lý của nó. Khi kết

thúc truy xuất tài nguyên găng, tiến trình ra khỏi đoạn găng, tiến trình thực hiện chỉ thị

STI để cho ph p ngắt trở lại. Khi đó các tiến trình khác có thể tiếp tục hoạt động và có thể vào đoạn găng12.

Trong sơ đồ đồng bộ này tiến trình Pi đƣợc viết nhƣ sau:

Procedure P(i: integer); Begin

; //cấm ngắt trước khi vào đoạn găng

Repeat CLI 12 Nguy n Kim Tuấn, Giáo trình hệ điều hành, ĐH Huế, 2004,tr.60

102

; // mở ngắt khi ra khỏi đoạn găng

<Đoạn găng của P>; STI <Đoạn không găng>;

Until .F.

End; {-----------------------------------------------}

Sơ đồ trên cho thấy, khi tiến trình ở trong đoạn găng nó không hề bị ngắt, do đ

cấm ngắt phát sinh, nên nó đƣợc độc quyền sử dụng tài nguyên găng cho đến khi ra

khỏi đoạn găng.

Sơ đồ đồng bộ này đơn giản, d cài đặt. Tuy nhiên, cần phải có sự hỗ trợ của vi

xử lý và d gây ra hiện tƣợng treo toàn bộ hệ thống, khi tiến trình trong đoạn găng

không có khả năng ra khỏi đoạn găng. Tiến trình không ra khỏi đoạn găng nên nó

không thể thực hiện chỉ thị STI để mở ngắt cho hệ thống, nên hệ thống bị treo hoàn

toàn.

Giải pháp này không thể sử dụng trên các hệ thống đa xử lý, vì CLI chỉ cấm ngắt

trên vi xử lý hiện tại chứ không thể cấm ngắt các vi xử lý khác. Tức là, sau khi đ cấm

ngắt, tiến trình trong đoạn găng vẫn có thể bị tranh chấp tài nguyên găng bởi các tiến

trình trên các vi xử lý khác trong hệ thống.

2.7.5.1.2. Dùng chỉ thị TSL Test and set)

Trong ví dụ 2 ở trên ta đ thấy, nguyên nhân của lỗi là do hai thao tác kiểm tra tài

khoản và rút tiền, bị tách rời nhau. Để tổ chức đồng bộ cho những trƣờng hợp nhƣ vậy,

một số vi xử lý cung cấp một chỉ thị đặc biệt cho ph p kiểm tra và cập nhật nội dung

;// hai lệnh này không ;// thể tách rời

một vùng nhớ trong một thao tác không thể phân chia đƣơc, gọi là Test and Set lock TSL . TSL đƣợc định nghĩa nhƣ sau13:

Function TestAndSetLock(Var I:Integer):Boolean; Begin IF I = 0 Then Begin I := 1 TestAndSetLock:=True End Else TestAndSetLock := False End; {-------------------------------------------------}

13 Nguy n Kim Tuấn, Giáo trình hệ điều hành, ĐH Huế, 2004,tr.61

103

Để tổ chức đồng bộ tiến trình với TSL chƣơng trình phải sử dụng biến chia s

Lock, khởi gán bằng 0. Theo đó, mỗi tiến trình trƣớc khi vào đoạn găng phải kiểm tra

giá trị của Lock. Nếu Lock = 0 thì vào đoạn găng. Nếu Lock = 1 thì phải đợi cho đến

khi Lock = 0. Nhƣ vậy, trƣớc khi vào đoạn găng tiến trình phải gọi hàm

TestAndSetLock, để kiểm tra giá trị trả về của hàm này:

 Nếu bằng False, là đang có một tiến trình trong đoạn găng, thì phải chờ cho đến

khi hàm trả về True, có một tiến trình vừa ra khỏi đoạn găng.

 Nếu bằng True, thì tiến trình s vào đoạn găng để sử dụng tài nguyên găng. Khi

kết thúc sử dụng tài nguyên găng ra khỏi đoạn găng thì tiến trình phải đặt lại gía

trị của Lock, Lock = 0, để các tiến trình khác có thể vào đoạn găng.

Nên nhớ rằng TestAndSetLock là chỉ thị của CPU, nên hệ thống đ tổ chức thực

hiện độc quyền cho nó. Tức là, các thao tác mà hệ thống phải thực hiện trong chỉ thị

này là không thể tách rời nhau.

Trong sơ đồ đồng bộ này tiến trình P đƣợc viết nhƣ sau:

Procedure P(Lock: integer); Begin Repeat

<Đoạn găng của P>;

While (TestAndSetlock(lock)) DO; Lock:= 0;

<Đoạn không găng>;

Until .F. End; {---------------------------------------------}

Sơ đồ này đơn giản, d cài đặt nhƣng cần phải có sự hỗ trợ của vi xử lý. Ngoài ra

nó c n một hạn chế lớn là gây l ng phí thời gian xử lý của CPU do tồn tại hiện tƣợng

chờ đợi tích cực trong sơ đồ While TestAndSetlock lock DO; . Hiện tƣợng chờ đợi

tích cực là hiện tƣợng CPU chỉ chờ một sự kiện nào đó xảy ra mà không làm gì cả.

T m ại: Việc sử dụng các chỉ thị phần cứng đặc biệt để tổ chức đồng bộ tiến trình

qua đoạn găng, hay c n gọi là tổ chức truy xuất độc quyền trên tài nguyên găng, có

những thuận lợi và bất lợi sau đây:

Thu n ợi:

 Nó thích hợp với một số lƣợng bất kỳ các tiến trình cả trên hệ hệ thống Đơn xử

104

lý và hệ thống Đa xử lý.

 Nó khá đơn giản cho nên d xác định độ chính xác.

 Nó có thể đƣợc sử dụng để hỗ trợ cho nhiều đoạn găng; mỗi đoạn găng có thể

định nghĩa cho nó một biến riêng.

B t ợi:

 Trong khi một tiến trình đang chờ đợi đƣợc vào đoạn găng thì nó tiếp tục làm

tốn thời gian xử lý của CPU, mà ta gọi là chờ đợi tích cực.

 Sự đói tài nguyên có thể xảy ra. Khi một tiến trình rời khỏi một đoạn găng, bộ

phận đồng bộ tiến trình phải chọn một tiến trình trong số nhiều tiến trình ngoài

đoạn găng để cho nó vào đoạn găng. Việc chọn này có thể dẫn đến hiện tƣợng

có một tiến trình đợi m i mà không thể vào đoạn găng đƣợc.

 Sự tắc nghẽn có thể xảy ra. H y x t một tình huống trên một hệ thống đơn xử

lý. Tiến trình P1 thực thi chỉ thị đặc biệt TesAndSetLock, Exchange và vào

đoạn găng của nó. P1 sau đó bị ngắt để nhƣờng CPU cho P2, P2 là tiến trình có

độ ƣu tiên cao hơn. Nếu nhƣ P2 cũng định sử dụng tài nguyên nhƣ P1, P2 sẽ bị

từ chối truy xuất bởi vì cơ chế độc quyền. Do đó P2 sẽ đi vào v ng lặp busy -

Waitting. Tuy nhiên, P1 sẽ không bao giờ đƣợc cấp CPU để tiếp tục vì nó có độ

ƣu tiên thấp hơn so với P2.

2.7.5.2. Các giải pháp dùng iến khoá

2.7.5.2.1. Dùng iến khoá chung

Xuất phát từ nguyên tắc cơ bản của tổ chức độc quyền là, tại mỗi thời điểm chỉ có

duy nhất một tiến trình có thể truy xuất đến một vùng nhớ chia s , các hệ điều hành sử

dụng biến khoá chung để tổ chức truy xuất độc quyền trên tài nguyên găng. Phƣơng

pháp này c n gọi là phƣơng pháp Busy and Waitting bận và đợi , nó đƣợc nhà toán

học ngƣời Hà Lan tên là Dekker đề xuất.

Với mỗi tài nguyên găng, hệ điều hành dùng một biến chung để điều khiển việc

sử dụng tài nguyên này của các tiến trình đồng thời. Tạm gọi là biến chung này là

Lock, Lock đƣợc chia s cho nhiều tiến trình và đƣợc khởi gán = 0.

105

Theo đó, mỗi tiến trình trƣớc khi vào đoạn găng phải kiểm tra giá trị của Lock:

 Nếu Lock = 1, tức là đ có tiến trình nào đó trong đoạn găng, thì tiến trình phải

chờ cho đến khi Lock = 0 có thể chuyển sang trạng thái blocked để chờ .

 Nếu Lock = 0, tức là không có tiến trình nào trong đoạn găng, thì tiến trình thiết

lập quyền vào đoạn găng, đặt Lock = 1, và vào đoạn găng. Tiến trình vừa ra

khỏi đoạn găng phải đặt Lock = 0, để các tiến trình khác có thể vào đoạn găng.

Trong sơ đồ đồng bộ này tiến trình P đƣợc viết nhƣ sau:

Procedure P(Lock: integer);

// đợi cho đến khi Lock = 0 // thiết lập quyền vào đoạn găng // vào đoạn găng // thông báo là đã rời đoạn găng

Begin Repeat Lock :=1; Lock:= 0;

While Lock = 1 DO ; <Đoạn găng của P>; <Đoạn không găng>;

Until .F.

End; {------------------------------------------------}

Sơ đồ đồng bộ dùng biến khoá chung này đơn giản, d xây dựng nhƣng vẫn xuất

hiện hiện tƣợng chờ đợi tích cực, khi chờ cho đến khi Lock = 0 While Lock =1 DO;

//Không làm gì cả . Hiện tƣợng chờ đợi tích cực gây l ng phí thời gian của CPU. Mặt

khác, nếu một tiến trình trong đoạn găng không thể ra khỏi đoạn găng, thì các tiến trình

chờ ngoài đoạn găng có thể chờ đợi vô hạn vì Lock không đƣợc đặt lại = 0 .

2.7.5.2.2. Dùng iến khoá riêng

Để khắc phục hạn chế của phƣơng pháp dùng biến chung, các hệ điều hành có thể

dùng giải pháp biến riêng để tổ chức đồng bộ tiến trình. Mỗi tiến trình sử dụng một

biến khoá Lock riêng, tƣơng ứng với một tài nguyên găng trong hệ thống. Biến khoá

riêng của tất cả các tiến trình đều đƣợc khởi gán bằng 0, tức là chƣa vào đoạn găng.

Theo đó, mỗi tiến trình trƣớc khi vào đoạn găng ứng với một tài nguyên găng nào

đó thì trƣớc hết phải kiểm tra biến khoá riêng, tƣơng ứng với tài nguyên găng mà tiến

trình muốn truy xuất, của tất cả các tiến trình c n lại:

 Nếu tồn tại một biến khoá riêng của một tiến trình nào đó bằng 1, Lock= 1, tức

là đ có một tiến trình nào đó ở trong đoạn găng, thì tiến trình phải chờ ngoài

106

đoạn găng cho đến khi tất cả biến khoá riêng = 0.

 Nếu tất cả các biến khóa riêng của các tiến trình đều = 0, Lock = 0, tức là không

có tiến trình nào trong đoạn găng, thì tiến trình thiết lập quyền vào đoạn găng,

đặt Lock = 1, và vào đoạn găng. Tiến trình vừa ra khỏi đoạn găng phải đặt

Lock=0, để các tiến trình khác có thể vào đoạn găng.

Sau đây là sơ đồ đồng bộ dùng biến khoá riêng cho hai tiến trình đồng thời P1 và

P2. Hai tiến trình này dùng hai biến khoá riêng là Lock1 và Lock2:

Program MultualExclution;

Const N:2; Var

Lock1, Lock2: byte;

BEGIN

Lock1 = 0; Lock2 = 0;

ParBegin

P1: Repeat

// tiến trình P1

While Lock2 = 1 Do ; // P2 đang ở trong đoạn găng

// P1 thiết lập quyền vào đoạn găng

Lock1 := 1;

<Đoạn găng của P1>;

;

// P1 ra khỏi đoạn găng

<Đoạn không găng của P1>;

Lock1 := 0 Until .F. P2: Repeat

// tiến trình P2

While Lock1 = 1 Do; // P1 đang ở trong đoạn găng

// P2 thiết lập quyền vào đoạn găng

<Đoạn găng của P2>;

// P2 ra khỏi đoạn găng

<Đoạn không găng của P2>;

Lock2 := 1; Lock2 := 0; Until .F.

ParEnd END.

{--------------------------------------------------------}

Sơ đồ này đơn giản d cài đặt. Một tiến trình nào đó ở ngoài đoạn găng bị

blocked sẽ không ngăn cản đƣợc các tiến trình khác vào đoạn găng, nhƣng nếu tiến

trình trong đoạn găng bị lỗi không thể ra khỏi đoạn găng , Lock luôn luôn = 1, thì các

tiến trình khác sẽ không đƣợc quyền vào đoạn găng.

Phƣơng pháp này vẫn c n tồn tại hiện tƣợng chờ đợi tích cực và sơ đồ đồng bộ sẽ

trở nên phức tạp khi có nhiều hơn hai tiến trình muốn vào đoạn găng.

Sơ đồ này có thể xảy ra một lỗi nghiêm trọng đó là: Có thể có hai tiến trình cùng

nằm trong đoạn găng. Nguyên nhân của lỗi này là do việc kiểm tra quyền vào đoạn

găng và và việc xác lập quyền vào đoạn găng của tiến trình bị tách rời khi thực hiện.

107

Tức là, P1 và P2 có thể bị định thời biểu thực hiện theo thứ tự sau:

(1) P1 đƣợc cấp CPU: P1 thực thi v ng lặp While và tìm xem thử Lock2 = 1

không. Khi P1 vừa nhìn thấy Lock2 = 0 đáng l P1 đƣợc ph p vào đoạn găng ,

thì bị thu hồi CPU.

(2) P2 đƣợc cấp CPU: P2 thực thi v ng lặp While và tìm xem thử Lock1 = 1

không. Khi P2 vừa nhìn thấy Lock1 = 0, thì bị thu hồi CPU.

(3) P1 đƣợc cấp CPU trở lại: P1 không kiểm tra lại Lock2 mà chỉ đặt Lock1 = 1 và

vào đoạn găng của nó. Khi vừa vào đoạn găng thì bị thu hồi CPU.

(4) P2 đƣợc cấp CPU trở lại: P2 không kiểm tra lại Lock1 mà chỉ đặt Lock2 = 1 và

vào đoạn găng của nó.

Rõ ràng với thực tế này thì cả P1 và P2 đều nằm trong đoạn găng. Và chúng ta đ

biết điều gì sẽ xảy ra khi hai tiến trình đồng thời truy xuất tài nguyên găng trong các ví

dụ về tài nguyên găng ở trên.

2.7.5.3. Các giải pháp được hỗ trợ ởi hệ điều hành và ngôn ngữ lập trình

Các giải pháp trên tồn tại hiện tƣợng chờ đợi tích cực, gây l ng phí thời gian xử

lý của CPU. Điều này có thể khắc phục bằng một nguyên tắc rất cơ bản: nếu một tiến

trình khi chƣa đủ điều kiện vào đoạn găng thì đƣợc chuyển ngay sang trạng thái

blocked, trả lại CPU cho hệ thống cấp cho tiến trình khác. Để thực hiện đƣợc điều này

cần phải có sự hỗ trợ của hệ điều hành và các ngôn ngữ lập trình để các tiến trình có

thể chuyển trạng thái của nó. Hai thủ tục Sleep và Wakeup là các lời gọi hệ thống đƣợc

hệ điều hành cung cấp để sử dụng cho mục đích này:

 Khi tiến trình chƣa đủ điều kiện vào đoạn găng nó sẽ thực hiện một lời gọi hệ

thống Sleep, tiến trình này chuyển sang trạng thái blocked và đƣợc đƣa vào

hàng đợi để chờ cho đến khi có một tiến trình khác đánh thức Wakeup để giải

phóng nó ra khỏi hàng đợi cho tiến trình này một cơ hội vào đoạn găng.

 Một tiến trình khi ra khỏi đoạn găng phải gọi Wakeup để đánh thức một tiến

trình trong hàng đợi blocked để tạo điều khiện cho tiến trình này vào đoạn găng.

Nhƣ vậy giải pháp này đƣợc áp dụng trên nhóm các tiến trình hoạt động đồng

thời có trao đổi thông tin với nhau, và các tiến trình phải hợp thác với nhau để hoàn

108

thành nhiệm vụ. Các tiến trình này liên lạc với nhau bằng cách gởi tín hiệu cho nhau.

Một tiến trình trong hệ thống này có thể bị buộc phải dừng bị blocked cho đến khi

nhận đƣợc một tín hiệu nào đó từ tiến trình bên kia, đó là tiến trình hợp tác với nó.

Thực tế đ chỉ ra đƣợc rằng, nếu chỉ dùng hai thủ tục trên thì sơ đồ đồng bộ sẽ

không đáp ứng đƣợc các yêu cầu của công tác đồng bộ, do đó khi cài đặt các hệ điều

hành chỉ nên sử dụng ý tƣởng của Sleep và Wakeup mà thôi. Sau đây là các giải pháp

sử dụng ý tƣởng của Sleep và Wakeup.

2.7.5.3.1. Giải pháp dùng Semaphore đèn áo)

Giải pháp này đƣợc Dijkstra đề xuất vào năm 1965. Semaphore đƣợc định nghĩa

để sử dụng trong các sơ đồ đồng bộ nhƣ sau:

 Semaphore S là một biến nguyên, khởi gán bằng một giá trị không âm, đó là

khả năng phục vụ của tài nguyên găng tƣơng ứng với nó.

 Ứng với S có một hàng đợi F s để lƣu các tiến trình đang bị blocked trên S.

 Chỉ có hai thao tác Down và Up đƣợc tác động đến semaphore S. Down S

là giảm S xuống một đơn vị, Up S là tăng S lên một đơn vị.

 Mỗi tiến trình trƣớc khi vào đoạn găng thì phải gọi Down để kiểm tra và xác

lập quyền vào đoạn găng. Khi tiến trình gọi Down S thì hệ thống sẽ thực

hiện nhƣ sau: S := S -1, nếu S ≥ 0 thì tiến trình tiếp tục xử lý và vào đoạn

găng, nếu S < 0 thì tiến trình phải vào hàng đợi để chờ cho đến khi S ≥ 0.

Down đƣợc cài đặt nhƣ sau:

Procedure Down(s);

Begin

S := S -1; If S < 0 Then

// S >= 0 thì tiếp tục

Status(p)= blocked; //chuyển tiến trình sang blocked Enter(p, F(s)); //đưa tiến trình vào hàng đợi F(S)

Begin end;

End; {----------------------------------------------------------------}

 Mỗi tiến trình ngay sau khi ra khỏi đoạn găng phải gọi Up để kiểm tra xem

có tiến trình nào đang đợi trong hàng đợi hay không, nếu có thì đƣa tiến trình

trong hàng đợi vào đoạn găng. Khi tiến trình gọi Up thì hệ thống sẽ thực hiện

nhƣ sau: S:= S + 1, nếu S ≤ 0 đƣa một tiến trình trong F s vào đoạn găng.

109

Up đƣợc cài đặt nhƣ sau:

Procedure Up(s);

Begin

// đưa tiến trình ra khỏi F(S)

S := S + 1; If S <= 0 Then Begin Exit(Q,F(s) ); Status(Q) = ready ; // chuyển tiến trình sang ready Enter(Q, ready-list ); // đưa tiến trình vào ready list End;

End;

Sau đây là sơ đồ đồng bộ dùng Semaphore cho 2 tiến trình P1 và P2, hai tiến trình

này hoạt động đồng thời cùng truy xuất đến tài nguyên găng tƣơng ứng với semaphore

S. Tài nguyên găng này chỉ có thể đáp ứng cho một tiến trình tại một thời điểm nên S

đƣợc khởi gán bằng 1.

Program MultualExclution; Const n = 2; Var s: semaphore; {-------------------------------------} Procedure P(i:Integer);

Begin

// kiểm tra và xác lập quyền vào đoạn găng

//rời đoạn găng và kích hoạt tiến trình khác

Repeat Down(s); <Đoạn găng>; Up(s); <Đoạn không găng>; Until .F.;

End;

{------------------------------------------} BEGIN

S := 1;

ParBegin P(1); P(2); ParEnd; END. {-------------------------------------------}

Ở đây chúng ta cần lƣu ý rằng: Down và Up là các thủ tục của hệ điều hành, nên

hệ điều hành đ cài đặt cơ chế độc quyền cho nó, tức là các lệnh bên trong nó không

thể tách rời nhau. Nếu điều này không đƣợc thực hiện thì sơ đồ này trở nên vô nghĩa.

Hai thủ tục Down S và Up S mà chúng tôi đƣa ra ở trên chỉ để minh họa cho nguyên

lý hoạt động của Down và Up.

110

Sử dụng semaphore để đồng bộ tiến trình, mang lại những thuận lợi sau:

 Mỗi tiến trình chỉ kiểm tra quyền vào đoạn găng một lần, khi chờ nó không

làm gì cả, tiến trình ra khỏi đoạn găng phải đánh thức nó.

 Không xuất hiện hiện tƣợng chờ đợi tích cực, nên khai thác tối đa thời gian

xử lý của CPU.

 Nhờ cơ chế hàng đợi mà hệ điều hành có thể thực hiện gán độ ƣu tiên cho

các tiến trình khi chúng ở trong hàng đợi.

 Trị tuyệt đối của S cho biết số lƣợng các tiến trình đang đợi trên F S .

Nên nhớ rằng, Down và Up là các thủ tục của hệ điều hành nên sơ đồ đồng bộ sẽ

bị thay đổi khi thay đổi hệ điều hành. Đây là một trở ngại của việc sử dụng semaphore

để tổ chức đồng bộ tiến trình.

Các ví dụ sau đây thay cho sự giải thích về sơ đồ đồng bộ ở trên:

Ví dụ 1: Sự thực hiện của hai tiến trình P1 và P2 trong sơ đồ đồng bộ trên:

Thời gian Tiến trình Thủ tục Tài nguyên Trạng thái

1 2 3 4 5 P1 P2 P1 P1 P2 Down Down Up Down Up S=1 0 -1 0 -1 0 P1 đang chạy P2 chờ P2 đang chạy P1 chờ P1 đang chạy

Bản 2 20. Sơ đồ đồng bộ hai tiến trình

Ví dụ 2: Nếu trong hệ thống có 6 tiến trình hoạt động đồng thời, cùng sử dụng tài

nguyên găng, tài nguyên găng này chỉ cho ph p một tiến trình truy xuất đến nó tại một

thời điểm. Tức là hệ điều hành phải tổ chức truy xuất độc quyền trên tài nguyên găng

này. Thứ tự yêu cầu sử dụng tài nguyên găng của các tiến trình đƣợc mô tả nhƣ sau:

Thời gian đến Tiến trình 1 2 3 4 6 8 A B C D E F Thời gian xử lý Độ ưu tiên 1 cao nhất) 4 2 2 2 1 1 5 5 4 2 4 1

111

Bản 2 2 Ví dụ c c t ến tr n yêu cầu sử dụn t n uyên n

Đồng bộ 6 tiến trình trên sử dụng tài nguyên S theo cơ chế độc quyền nhƣ sau:

Thời gian Thủ tục Running Hàng đợi Tiến trình

1 2 3 4 5 6 7 8 9 10 11 12 A B C D A E D F C F E B Down Down Down Down Up Down Up Down Up Up Up Up Tài nguyên S=1 0 -1 -2 -3 -2 -3 -2 -3 -2 -1 0 1 A A A A D D C C F E B - - B CB DCB CB CEB EB F EB EB B - -

Bản 2 22. Sơ đồ đồng bộ 6 tiến trình

Bảng trên lƣu ý với chúng ta hai điều. Thứ nhất, trị tuyệt đối của S cho biết số

lƣợng các tiến trình trong hàng đợi F S . Thứ hai, tiến trình chƣa đƣợc vào đoạn găng

thì đƣợc đƣa vào hàng đợi và tiến trình ra khỏi đoạn găng sẽ đánh thức tiến trình có độ

ƣu tiên cao nhất trong hàng đợi để đƣa nó vào đoạn găng. Tiến trình đƣợc đƣa vào

hàng đợi sau nhƣng có độ ƣu tiên cao hơn sẽ đƣợc đứng trƣớc trong hàng đợi.

2.7.5.3.2. Giải pháp dùng Monitors

Giải pháp này đƣợc Hoar đề xuất năm 1974 sau đó vào năm 1975 đƣợc Brinch &

Hansnen đề xuất lại. Monitor là cấu trúc phần mềm đặc biệt đƣợc cung cấp bởi ngôn

ngữ lập trình đùng để đồng bộ hóa cấp cao, nó bao gồm các thủ tục, các biến và các

cấu trúc dữ liệu đƣợc định nghĩa bởi Monitor. Monitor đƣợc định nghĩa trong các ngôn

ngữ lập trình nhƣ Pascal+, Modula–2, Modula-3. Monitor của Hoar có các tính chất

sau đây:

1. 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 đƣợc định nghĩa bên trong Monitor đó.

2. Một tiến trình muốn vào Monitor phải gọi một thủ tục của Monitor đó.

3. Tại một thời điểm, chỉ có một tiến trình duy nhất đƣợc hoạt động bên trong

112

Monitor. Các tiến trình khác đ gọi Monitor phải ho n lại để chờ Monitor rảnh.

Hai tính chất 1 và 2 tƣơng tự nhƣ các tính chất của các đối tƣợng trong lập trình

hƣớng đối tƣợng. Nhƣ vậy một hệ điều hành hoặc một ngôn ngữ lập trình hƣớng đối

tƣợng có thể cài đặt Monitor nhƣ là một đối tƣợng có các tính chất đặc biệt. Với tính

chất thứ 3 Monitor có khả năng thực hiện các cơ chế độc quyền, các biến trong

Monitor có thể đƣợc truy xuất chỉ bởi một tiến trình tại một thời điểm.

Nhƣ vậy các cấu trúc dữ liệu dùng chung bởi các tiến trình có thể đƣợc bảo vệ

bằng cách đặt chúng bên trong Monitor. Nếu dữ liệu bên trong Monitor là tài nguyên

găng thì Monitor cung cấp sự độc quyền trong việc truy xuất đến tài nguyên găng đó.

Monitor cung cấp các công cụ đồng bộ hoá để ngƣời lập trình sử dụng trong các

sơ đồ đồng bộ. Công cụ đồng bộ hoá đƣợc định nghĩa để sử dụng trong các sơ đồ đồng

bộ nhƣ sau: 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, chỉ có Wait và Signal đƣợc tác động đến các biến điều

kiện.

 Giả sử c là biến điều kiện đƣợc định nghĩa trong Monitor.

 Wait(c): khi một tiến trình gọi Wait, thì Wait sẽ chuyển tiến trình gọi sang

trạng thái blocked, và đặt tiến trình này vào hàng đợi trên biến điều kiện c. Wait

đƣợc cài đặt nhƣ sau:

Procedure Wait(c); Begin Status(p) = blocked; Enter(p,f(c)); End;

 Signal(c): khi một tiến trình gọi Signal, thì Signal sẽ kiểm tra trong hàng đợi

của c có tiến trình nào hay không, nếu có thì tái kích hoạt tiến trình đó, và tiến

trình gọi Signal sẽ rời khỏi Monitor. Signal đƣợc cài đặt nhƣ sau:

Procedure Signal(c); Begin If f(c) <> Null Then Begin

Exit(Q,f(c)); // Q là tiến trình chờ trên C

Status(Q) = ready; Enter(Q,ready-lits); end; End;

113

Trình biên dịch chịu trách nhiệm thực hiện việc truy xuất độc quyền đến dữ liệu

trong Monitor. Để thực hiện điều này, hệ điều hành dùng một semaphore nhị phân.

Mỗi Monitor có một hàng đợi toàn cục lƣu các tiến trình đang chờ đƣợc vào Monitor,

ngoài ra mỗi biến điều kiện c cũng gắn với một hàng đợi F c .

Với mỗi nhóm tài nguyên găng, có thể định nghĩa một Monitor trong đó đặc tả tất

cả các thao tác trên tài nguyên này với một số điều kiện nào đó. Sau đây là cấu trúc

một Monitor:

Monitor Condition; {------------------------------------------------------}

Procdure Action1(); //thao tác i

//thao tác n();

Begin ...... End; {---------------------------} Procedure Actionn Begin ...... End;

{---------------------------}

End Monitor;

Mỗi tiến trình muốn sử dụng tài nguyên găng chỉ có thể thao tác thông qua các

thủ tục bên trong Monitor.

Sau đây là sơ đồ đồng bộ sử dụng Monitor cho 2 tiến trình P1 và P2.

Program MultualExclution; Monitor ……. EndMonitor;{Monitor được định nghĩa như trên} BEGIN ParBegin P1: Repeat <Đoạn không găng của P1>;

// Đoạn găng của P1

.Actioni;

<Đoạn không găng của P1>;

Until .F.

P2: Repeat

<Đoạn không găng của P2>;

//Đoạn găng của P2

.Actionj ;

<Đoạn không găng của P2>;

Until .F.

Parend

END. {----------------------------------------------------------------}

114

Với Monitor, việc tổ chức truy xuất độc quyền đƣợc trình biên dịch thực hiện,

nên nó đơn giản hơn cho ngƣời lập trình. Tuy nhiên hiện nay rất ít ngôn ngữ lập trình

hỗ trợ cấu trúc Monitor cho lập trình.

2.7.5.3.3. Giải pháp trao đổi thông điệp Message)

Khi các tiến trình có sự tƣơng tác với tiến trình khác, hai yêu cầu cơ bản cần phải

đƣợc thỏa m n đó là: sự đồng bộ hoá synchronization và sự truyền thông

(communication . Các tiến trình phải đƣợc đồng bộ để thực hiện độc quyền. Các tiến

trình hợp tác có thể cần phải trao đổi thông tin. Một hƣớng tiếp cận để cung cấp cả hai

chức năng đó là sự truyền thông điệp message passing . Truyền thông điệp có ƣu điểm

là có thể thực hiện đƣợc trên cả hai hệ thống đơn xử lý và đa xử lý, khi các hệ thống

này hoạt động trên mô hình bộ nhớ chia s .

Các hệ thống truyền thông điệp có thể có nhiều dạng. Trong phần này chúng tôi

giới thiệu một dạng chung nhất mà trong đó đề cập đến các đặc trƣng có trong nhiều hệ

thống khác nhau. Các hàm của truyền thông điệp trên thực tế có dạng tƣơng tự nhƣ hai

hàm sau:

 Send destination, message : gởi thông điệp đến tiến trình đích destination.

 Receive source, message : nhận thông điệp từ tiến trình nguồn source.

Một tiến trình gởi thông tin dƣới dạng một thông điệp đến một tiến trình khác,

bằng hàm Send, đƣợc nhận biết bởi tham số destination. Một tiến trình nhận thông

điệp, bằng hàm Receive, từ một tiến trình đƣợc nhận biết bởi tham số source. Tiến

trình gọi Receive phải chờ cho đến khi nhận đƣợc message từ tiến trình source thì mới

có thể tiếp tục đƣợc.

Việc sử dụng Send và Receive để tổ chức đồng bộ đƣợc thực hiện nhƣ sau:

 Có một tiến trình kiểm soát việc sử dụng tài nguyên găng.

 Có nhiều tiến trình khác yêu cầu sử dụng tài nguyên găng này.

 Tiến trình có yêu cầu tài nguyên găng 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

115

găng.

 Khi sử dụng xong tài nguyên găng, tiến trình vừa sử dụng tài nguyên găng

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 găng, nó

sẽ chờ cho đến khi tài nguyên găng sẵn sàng để cấp phát thì gởi một thông

điệp đến tiến trình đang bị khoá trên tài ngyên đó để đánh thức tiến trình

này.

Trong sơ đồ đồng bộ dùng message tiến trình P đƣợc viết nhƣ sau:

Procedure P(i: Integer);

Begin Repeat Send(process controler, request message); Receive(process controler, accept message ); <Đoạn găng của P>; Send(process controler ,end message); <Đoạn không găng của P>;

Until .F.

End;

{----------------------------------------------------------------------}

Giải pháp này thƣờng đƣợc cài đặt trên các hệ thống mạng máy tính, đặc biệt là

trên các hệ thống mạng phân tán. Đây là lợi thế mà semaphore và Monitor không có

đƣợc.

Sơ đồ đồng bộ dùng message phải chú ý sự đồng bộ giữa các tiến trình nhận và

gởi message, nếu không các tiến trình này sẽ không thoát khỏi trạng thái blocked để

tiếp tục đƣợc. Điều này cũng có nghĩa là công tác đồng bộ có thể không thành công

mặc dù sơ đồ đồng bộ đ đƣợc tổ chức rất tốt. Sau đây chúng ta sẽ xem x t về sự đồng

bộ giữ tiến trình send và tiến trình receive trong trƣờng hợp này.

2.7.5.4. Các ài toán về đồng ộ hóa

Bài toán 1: Bài toán nhà sản xuất và nhà tiêu thụ Producer/Consumer . Trong hệ

thống đa nhiệm – đa ngƣời dùng. Ứng dụng này có hai tiến trình chính đó là, tiến trình

ngƣời sản xuất Producer và tiến trình ngƣời tiêu thụ Consumer , hai tiến trình này

hoạt động đồng thời với nhau và c ng chia sẻ một bộ đệm (Buffer) c ích thước giới

hạn, chỉ có 3 phần tử. Tiến trình Producer tạo ra dữ liệu và đặt vào Buffer, tiến trình

Consumor nhận dữ liệu từ Buffer ra để xử lý. Rõ ràng hệ thống này cần phải có các

116

ràng buộc sau:

(1) Hai tiến trình Producer và Consumer không đƣợc đồng thời truy xuất

Buffer vì Buffer là tài nguyên găng).

(2) Tiến trình Producer không đƣợc ghi dữ liệu vào Buffer khi Buffer đ bị

đầy.

(3) Tiến trình Consumer không đƣợc đọc dữ liệu từ Buffer khi Buffer rỗng.

H y dùng các giải pháp Semafore, Monitor, Message để tổ chức đồng bộ cho các

tiến trình Producer và Consumer trong bài toán trên.

2.7.5.4.1. Giải pháp dùng Semaphore

Với giải pháp này sơ đồ đồng bộ phải sử dụng 3 Semaphore:

 Full: dùng để theo dõi số chỗ đ có dữ liệu trong bộ đệm, nó đƣợc khởi gán

bằng 0. Tức là, ban đầu Buffer rỗng.

 Empty: dùng để theo dõi số chỗ c n trống trên bộ đệm, nó đƣợc khởi gán bằng

3. Tức là, ban đầu Buffer không chứa một phần tử dữ liệu nào.

 Mutex: dùng để kiểm tra truy xuất đồng thời trên bộ đệm, nó đƣợc khởi gán

bằng 1. Tức là, chỉ có 1 tiến trình đƣợc ph p truy xuất Buffer.

Sơ đồ đồng bộ sẽ nhƣ sau:

Program Producer/Consumer;

Var

Full, Empty, Mutex: Semaphore;

{----------------------------------------------} Procedure Producer();

Begin Repeat

//kiểm tra xem buffer còn chỗ trống ? //kiểm tra và xác lập quyền truy xuất

<Đặt dữ liệu vào Buffer>;

//kết thúc truy xuất buffer //đã có 1 phần tử dữ liệu trong Buffer

< Tạo dữ liệu>; Down(empty); Down(mutex); Buffer Up(mutex); Up(Full);

Until .F.

End;

{----------------------------------} Procedure Consumer();

Begin Repeat

Down(full); //còn phần tử dữ liệu trong Buffer?

//kiểm tra và xác lập quyền truy xuất

Down(mutex); Buffer}

117

;

Up(mutex); //kết thúc truy xuất buffer

//đã lấy 1 phần tử dữ liệu trong

Up(empty); Buffer Until .F.

End;

{---------------------------------------------} BEGIN Full = 0; Empty = 3; Mutex = 1; Producer(); Consumer(); END. {----------------------------------------------}

2.7.5.4.2. Giải pháp dùng Monitor

Với giải pháp này ngƣời lập trình phải định nghĩa một Monitor, có tên là

Producer/Consumer, trong đó có hai thủ tục Enter và Remove, dùng để thao tác trên

Buffer. Xử lý của các thủ tục này phụ thuộc vào các biến điều kiện full và empty. Full

và Emtry đƣợc quy định sử dụng nhƣ trong giải pháp semaphore.

Sơ đồ đồng bộ sẽ nhƣ sau:

Program Producer/Consumer; Monitor ProducerConsumer; Condition Full, Empty; Var

Count: Integer; //để đếm số phần tử đữ liệu được đưa vào

Buffer

N

: Interger; //số phần tử của Buffer

{ ---------------------------------} Procedure Enter();

Begin

If Count = N Then Wait(Full); //nếu Buffer đầy thì đợi Buffer rỗng <Đặt dữ liệu vào đệm>; Count := Count + 1; If Count = 1 Then Signal(Empty); //nếu Buffer không rỗng End;

//thì báo cho consumer biết

{---------------------------------------------------} Procedure Remove();

Begin

If Count = 0 Then Wait(Empty); //nếu Buffer rỗng thì đợi đầy ; Count := Count - 1; If Count = N - 1 Then Signal(Full); //nếu Buffer không đầy thì

// báo cho producer biết

End;

EndMonitor; {------------------------------------------------------} BEGIN

118

Count = 0; N = 3;

ParBegin

Procedure Producer();

; Producer/Consumer.Enter;

Repeat Until .F.

Begin End;

{----------------------------------------}

Procedure Consumor();

Producer/Consumer.Remove; ;

Repeat Until .F.

Begin End;

Parend

END. {--------------------------------------}

2.7.5.4.3. Giải pháp dùng Message

Với giải pháp này chƣơng trình dùng thông điệp Empty. Empty hàm ý có một chỗ

trống trong Buffer. Khi khởi tạo tiến trình Consumer gởi ngay N thông điệp Empty đến

tiến trình Producer. Tiến trình Producer tạo ra một dữ liệu mới và chờ đến khi nhận

đƣợc một thông điệp Empty từ Consumer thì gởi ngƣợc lại cho Consumer một thông

điệp có chứa dữ liệu mà nó tạo ra. Sau khi gởi đi thông điệp Empty, tiến trình

Consumer sẽ chờ để nhận thông điệp chứa dữ liệu từ tiến trình Producer. Sau khi xử lý

xong dữ liệu thì Consumer gởi lại một thông điệp Empty đến tiến trình Producer.

Buffersize: integer; //kích thước Buffer

Sơ đồ đồng bộ sẽ nhƣ sau:

Program Producer/Consumer; Var M, m’: Message; { -------------------------------------} BEGIN

Buffersize = N; ParBegin

Repeat

Procedure Producer(); Begin

; Receive(Consumer,m); Send(Consumer,m)

119

Until .F.

End;

{ ----------------------------------------}

Procedure

Consumer ()

Var I:integer; Begin

For I := 0 to N Do Send(Producer ,m); Repeat

Receive(Producer ,m); Send (Producer,m);

Until .F.

End.

Parend

END. {--------------------------------------------------------}

Bài toán 2: Bài toán bộ đọc-bộ ghi

Trong môi trƣờng hệ điều hành đa nhiệm, có thể tồn tại các tập tin chia s , có thể

là các tập tin cơ sở dữ liệu. Nhiều tiến trình hoạt động đồng thời trong hệ thống có thể

truy xuất cùng lúc đến một tập tin cơ sở dữ liệu chia s này. Tiến trình cần đọc nội

dung của tập tin cơ sở dữ liệu đƣợc gọi là tiến trình Reader. Tiến trình cần cập nhật

thông tin vào tập tin cơ sở dữ liệu đƣợc gọi là tiến trình Writer. Trong hệ thống này,

công tác đồng bộ tiến trình cần phải thực hiện các ràng buộc sau:

(1) Có thể có nhiều tiến trình Reader đồng thời đọc tập tin cơ sở dữ liệu.

(2) Không cho ph p một tiến trình Writer ghi vào cơ sở dữ liệu khi các tiến

trình Reader khác đang đọc cơ sở dữ liệu.

(3) Chỉ có duy nhất một tiến trình Writer đƣợc ph p ghi vào tập tin cơ sở dữ liệu tại

một thời điểm.

H y dùng các giải pháp Semafore, Monitor, Message để tổ chức đồng bộ cho các

tiến trình Reader và Writer trong bài toán ở trên.

2.7.5.4.4. Giải pháp dùng Semaphore

Giải pháp này sử dụng một biến chung RC và hai semaphore là Mutex và DB.

 RC readcount dùng để ghi nhận số lƣợng các tiến trình Reader muốn truy

xuất tập tin cơ sở dữ liệu, khởi gán bằng 0.

120

 Mutex: dùng để kiểm soát truy xuất đến RC, khởi gán bằng 1.

 DB:dùng để kiểm tra sự truy xuất độc quyền đến cơ sở dữ liệu, khởi gán

bằng 1.

Db: Seamafore = 1;

Sau đây là sơ đồ đồng bộ:

Program Producer/Consumer; Const Mutex: Seamafore = 1; Rc: byte = 0; {------------------------------------} BEGIN

ParBegin

Procedure Reader();

//chấm dứt truy xuất Rc

Begin Repeat

Down(mutex); Rc = Rc+1; If Rc = 1 then Down(db); Up(mutex); <Đọc dữ liệu >; Down(mutex) Rc = Rc-1 If Rc = 0 then Up(db); Up(mutex); < Xử lý dữ liệu đọc được>

Until .F.

End;

{--------------------------------------------}

Procedure Writer();

; Down(Db); Up(db);

Repeat Until .F.

Begin End;

ParEnd

END. {--------------------------------------------}

2.7.5.4.5. Giải pháp dùng Monitor

Giải pháp này sử dụng một biến chung RC, để ghi nhận số lƣợng các tiến trình

reader muốn truy xuất cơ sở dữ liệu. Tiến trình Writer phải chuyển sang trạng thái khoá

nếu RC > 0. Khi ra khỏi đoạn găng tiến trình Reader cuối cùng sẽ đánh thức tiến trình

Write đang bị khoá.

121

Sau đây là sơ dồ đồng bộ:

Program Producer/Consumer; Monitor Readerwriter Condition Okwrite,Okread Var Rc: integer; Busy: boolean = False; {-------------------------------------} Procedure Beginread()

Begin

If (busy) then Wait(okread); Rc = Rc+1; Signal(okread);

End;

Procedure Finishread()

Begin

Rc = Rc - 1; If Rc = 0 Then Wait(okwrite);

End;

Procedure Beginwrite();

Begin

Rc = Rc - 1; If (busy) or (Rc <> 0) Then Wait(okwrite); Busy = True;

End;

Procedure FinishWrite()

Begin

Busy = False; If (Okread) Then Signal(okread) Else Signal(okwrite);

End; EndMonitor. {------------------------------------------------------------} BEGIN

ParBegin

Procedure Reader ();

Begin

Repeat

ReaderWriter.BeginRead(); <đọc dữ liệu> ReaderWriter.FinishRead(); Until .F.

End;

Procedure Writer ();

Begin

Repeat

ReaderWriter.BeginWrite(); <đọc dữ liệu> ReaderWriter.FinishWrite();

Until .F.

End;

Parend

122

END. {------------------------------------------------}

2.7.5.4.6. Giải pháp dùng Message

Giải pháp này cần phải có một tiến trình Sever điều khiển việc truy xuất cơ sở dữ

liệu. Các tiến trình Writer và Reader gửi các thông điệp yêu cầu truy xuất đến Server

và nhận từ Sever các thông điệp hồi đáp tƣơng ứng.

Sơ đồ đồng bộ sẽ nhƣ sau:

Program Producer/Consumer; Begin

ParBegin

Procedure Reader();

Repeat

Send (Sever,Requesread); Receive(sever,value); Print(value); Until .F.

Begin End;

Procedure Writer();

Repeat ; Send (Sever, Requeswrite,value); Receive(sever, okwrite); Until .F.

Begin End;

ParEnd

End. {--------------------------------------------------}

Bài toán 3: Năm nhà triết gia ăn tối

Có năm nhà triết gia, vừa suy nghĩ vừa ăn tối. Các triết gia ngồi trên cùng một

bàn tr n xung quanh có năm chiếc ghế, mỗi chiếc ghế đƣợc ngồi bởi một triết gia.

123

Chính giữa bàn là năm bát cơm và năm chiếc đũa đƣợc hiển thị nhƣ hình sau:

Hình 2.29. Tình huống các triết gia ăn tối

Khi một triết gia suy nghĩ, ông ta không giao tiếp với các triết gia khác. Thỉnh

thoảng, một triết gia cảm thấy đói và cố gắng chọn hai chiếc đũa gần nhất hai chiếc

đũa nằm bên trái và phải của ông ta . Một triết gia có thể lấy chỉ một chiếc đũa tại một

thời điểm. Chú ý, ông ta không thể lấy chiếc đũa mà nó đang đƣợc dùng bởi ngƣời láng

giềng. Khi một triết gia đói và có hai chiếc đũa cùng một lúc, ông ta ăn mà không đặt

đũa xuống. Khi triết gia ăn xong, ông ta đặt đũa xuống và bắt đầu suy nghĩ tiếp.

Bài toán các triết gia ăn tối đƣợc xem nhƣ một bài toán đồng bộ hoá kinh điển.

Nó trình bày yêu cầu cấp phát nhiều tài nguyên giữa các quá trình trong cách tránh việc

khoá chết deadlock và đói tài nguyên starvation .

Một giải pháp đơn giản là thể hiện mỗi chiếc đũa bởi một biến Semaphore. Một

triết gia cố gắng chiếm lấy một chiếc đũa bằng cách thực thi thao tác Down trên biến

semaphore đó; triết gia đặt hai chiếc đũa xuống bằng cách thực thi thao tác Up trên các

biến Semaphore tƣơng ứng. Do đó, dữ liệu đƣợc chia s là:

Semaphore chopstick[5];

ở đây tất cả các phần tử của chopstick đƣợc khởi tạo 1. Cấu trúc m lệnh của

Procedure philosopher (var i:integer);

Begin

124

philosopher i đƣợc hiển thị nhƣ sau:

while (1) do

Begin

think ();

//suy nghĩ

Down(chopstick[ i ]);

//kiểm tra để nhặt đũa bên trái

Down(chopstick[ ( i + 1 ) % 5 ]); //kiểm tra để nhặt đũa bên trái

Eat();

//ăn

Up(chopstick[ i ]);

//trả đũa bên trái

Up(chopstick[ ( i + 1 ) % 5 ]);//trả đũa bên phải

End;

End;

Mặc dù giải pháp này đảm bảo rằng không có hai láng giềng nào đang ăn cùng

một lúc nhƣng nó có khả năng gây ra khoá chết. Giả sử rằng năm triết gia bị đói cùng

một lúc và mỗi triết gia chiếm lấy chiếc đũa bên trái của ông ta. Bây giờ tất cả các phần

tử chopstick sẽ là 0. Khi mỗi triết gia cố gắng dành lấy chiếc đũa bên phải, triết gia sẽ

bị chờ m i m i xảy ra deadlock .

Giải pháp cho vấn đề các triết gia ăn tối mà nó đảm bảo không bị deadlock.

- Cho ph p nhiều nhất bốn triết gia đang ngồi cùng một lúc trên bàn

- Cho ph p một triết gia lấy chiếc đũa của ông ta chỉ nếu cả hai chiếc đũa là sẵn

dùng để làm điều này ông ta phải lấy chúng trong miền găng .

- Dùng một giải pháp bất đối xứng; nghĩa là một triết gia lẽ chọn đũa bên trái

đầu tiên của ông ta và sau đó đũa bên phải, trái lại một triết gia chẳn chọn

chiếc đũa bên phải và sau đó chiếc đũa bên trái của ông ta.

Tóm lại, bất cứ một giải pháp nào thoả m n đối với bài toán các triết gia ăn tối

phải đảm bảo dựa trên khả năng một trong những triết gia sẽ đói chết. Giải pháp giải

quyết việc khoá chết không cần thiết xoá đi khả năng đói tài nguyên.

2.8. TẮC NGHẼN VÀ CHỐNG TẮC NGHẼN

2.8.1. Khái niệm tắc nghẽn

Trong môi truờng đa chƣơng, nhiều quá trình có thể cạnh tranh một số giới hạn

125

tài nguyên. Một quá trình yêu cầu tài nguyên, nếu tài nguyên không sẵn dùng tại thời

điểm đó, quá trình đi vào trạng thái chờ. Quá trình chờ có thể tới vô hạn vì tài nguyên

chúng yêu cầu bị giữ bởi những quá trình đang chờ khác. Trƣờng hợp này đƣợc gọi là

deadlock khoá chết hay tắc nghẽn .

Ví dụ 1: hai ô-tô qua cầu hẹp

Hình 2.30. Hai ô-tô qua cầu

Các tiến trình bây giờ là các ôtô, mỗi lƣợt chỉ một ôtô qua cầu. Đoạn cầu có thể

xem là đoạn găng. Vậy điều kiện qua đoạn găng là tại một thời điểm chỉ một ôtô đƣợc

ph p qua cầu. Nếu cả hai ôtô từ hai phía qua cầu cùng lúc thì tắc nghẽn xảy ra.

Ví dụ 2: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống.

Tiến trình P1 đang giữ tài nguyên R1 và xin đƣợc cấp R2 để tiếp tục hoạt động, trong

khi đó tiến trình P2 đang giữ tài nguyên R2 và xin đƣợc cấp R1 để tiếp tục hoạt động.

Trong trƣờng hợp này cả P1 và P2 sẽ không tiếp tục hoạt động đƣợc. Nhƣ vậy P1 và

P2 rơi vào trạng thái tắc nghẽn xem hình 2.31)

Hình 2.31 Chờ đợi v ng tr n

Tắc nghẽn thƣờng xảy ra do xung đột về tài nguyên thuộc loại không phân chia

đƣợc I/O, đĩa từ , một số ít trƣờng hợp xảy ra với tài nguyên phân chia đƣợc CPU,

126

Memory).

Ví dụ 3: Giả sử không gian bộ nhớ c n trống là 200Kb, và trong hệ thống có hai

tiến trình P1 và P2 hoạt động đồng thời. P1 và P2 yêu cầu đƣợc sử dụng bộ nhớ nhƣ

sau:

Thời điểm P1 P2

….. …. ….

T1 Request1 80Kb Request1 70Kb

….. ….. …..

T2 Request1 30Kb Request2 40Kb

….. …. …..

Bản 2 23. Hai quá trình đồng hành y u cầu bộ nhớ

Tắc nghẽn xảy ra khi cả hai tiến trình cùng yêu cầu thêm bộ nhớ lần thứ hai. Tại

thời điểm này không gian bộ nhớ c n trống là 50Kb, lớn hơn lƣợng bộ nhớ mà mỗi tiến

trình yêu cầu 30Kb và 40Kb , nhƣng vì cả hai tiến trình đồng thời yêu cầu thêm bộ

nhớ, nên hệ thống không để đáp ứng đƣợc, và tắc nghẽn xảy ra.

Ví dụ 4: Trong các ứng dụng cơ sở dữ liệu, một chƣơng trình có thể khoá một vài

record mà nó sử dụng, để dành quyền điều khiển về cho nó. Nếu tiến trình P1 khoá

record R1, tiến trình P2 khoá record R2, và rồi sau đó mỗi tiến trình lại cố gắng khoá

record của một tiến trình khác. Tắc nghẽn sẽ xảy ra.

T c nghẽn: Một t p hợp các quá trình, mỗi quá trình đang giữ một tài nguy n và

cũng đang chờ đ xin một tài nguy n hác, mà tài nguy n này ại đang bị giữ b i một

quá trình hác trong t p hợp tr n

Trong trƣờng hợp của ví dụ 2 ở trên: hai tiến trình P1 và P2 sẽ rơi vào trạng thái

tắc nghẽn, nếu không có sự can thiệp của hệ điều hành. Để phá bỏ tắc nghẽn này hệ

điều hành có thể cho tạm dừng tiến trình P1 để thu hồi lại tài nguyên R1, lấy R1 cấp

cho tiến trình P2 để P2 hoạt động và kết thúc, sau đó thu hồi cả R1 và R2 từ tiến trình

P2 để cấp cho P1 và tái kích hoạt P1 để P1 hoạt động trở lại. Nhƣ vậy sau một khoảng

thời gian cả P1 và P2 đều ra khỏi tình trạng tắc nghẽn.

Trong trƣờng hợp của ví dụ 3 ở trên: nếu hai tiến trình này không đồng thời yêu

cầu thêm bộ nhớ thì tắc nghẽn không thể xảy ra, hoặc khi cả hai tiến trình đồng thời

yêu cầu thêm bộ nhớ thì hệ điều hành phải kiểm tra lƣợng bộ nhớ c n trống của hệ

127

thống, nếu không đáp ứng cho cả hai tiến trình thì hệ điều hành phải có cơ chế ngăn

chặn từ chối một tiến trình và chỉ cho một tiến trình đƣợc quyền sử dụng bộ nhớ đáp

ứng thì tắc nghẽn cũng không thể xảy ra. Tuy nhiên để giải quyết vấn đề tắc nghẽn do

thiếu bộ nhớ, các hệ điều hành thƣờng sử dụng cơ chế bộ nhớ ảo. Bộ nhớ ảo là một

phần quan trọng của hệ điều hành mà chúng ta sẽ khảo sát ở Chƣơng Quản lý bộ nhớ

của tài liệu này.

Khi hệ thống xảy ra tắc nghẽn nếu hệ điều hành không kịp thời phá bỏ tắc nghẽn

thì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống. Nhƣ trong trƣờng hợp tắc

nghẽn ở ví dụ 2, nếu sau đó có tiến trình P3, đang giữ tài nguyên R3, cần R2 để tiếp tục

thì P3 cũng sẽ rơi vào tập tiến trình bị tắc nghẽn, rồi sau đó nếu có tiến trình P4 cần tài

nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập các tiến trình bị tắc nghẽn nhƣ P3,

… cứ thế dần dần có thể dẫn đến một thời điểm tất cả các tiến trình trong hệ thống đều

rơi vào tập tiến trình tắc nghẽn. Và nhƣ vậy hệ thống sẽ bị treo hoàn toàn.

Vấn đề deadlock đ trở thành vấn đề phổ biến, đối với một hệ điều hành hiện đại

không thể chấp nhận tình trạng treo máy xảy ra. Trong phần này chúng ta sẽ mô tả các

phƣơng pháp mà hệ điều hành có thể dùng để ngăn chặn hay giải quyết deadlock. Xu

hƣớng hiện hành, một hệ thống gồm số lƣợng lớn quá trình, chƣơng trình đa luồng,

nhiều tài nguyên trong hệ thống và đặc biệt các tập tin có đời sống dài và những máy

phục vụ cơ sở dữ liệu hơn là các hệ thống bó.

2.8.2. Đặc điểm của Deadlock

2.8.2.1. Mô hình hệ thống

Một hệ thống chứa số tài nguyên hữu hạn đƣợc phân bổ giữa nhiều quá trình cạnh

tranh. Các tài nguyên có thể là tài nguyên vật lý thí dụ, thiết bị nhập xuất máy in, đĩa

từ , không gian bộ nhớ và chu kỳ CPU hay tài nguyên luận lý thí dụ tập tin,

semaphores, Monitors). Các tài nguyên này đƣợc phân chia thành nhiều loại, mỗi loại

chứa một số thể hiện xác định. Nếu hệ thống có hai CPU, thì loại tài nguyên CPU có

128

hai thể hiện. Tƣơng tự, hệ thống có bốn đĩa từ thì tài nguyên đĩa từ có bốn thể hiện.

Hình 2.32. Mô hình hệ thống

Nếu một quá trình yêu cầu một thể hiện của loại tài nguyên thì việc cấp phát bất

cứ thể hiện nào của loại tài nguyên này sẽ thoả m n yêu cầu. Nếu nó không có thì các

thể hiện là không xác định và các lớp loại tài nguyên sẽ không đƣợc định nghĩa hợp lý.

Thí dụ, một hệ thống có thể có hai máy in. Hai loại máy in này có thể đƣợc định nghĩa

trong cùng lớp loại tài nguyên nếu không có quá trình nào quan tâm máy nào in ra dữ

liệu. Tuy nhiên, nếu một máy in ở tầng 9 và máy in khác ở tầng trệt thì ngƣời dùng ở

tầng 9 không thể xem hai máy in là tƣơng tự nhau và lớp tài nguyên riêng r cần đƣợc

định nghĩa cho mỗi máy in.

Một quá trình phải yêu cầu một tài nguyên trƣớc khi sử dụng nó, và phải giải

phóng nó sau khi sử dụng xong. Một quá trình có thể yêu cầu nhiều tài nguyên nhƣ nó

đƣợc yêu cầu để thực hiện công việc đƣợc gán của nó. Chú ý, số tài nguyên đƣợc yêu

cầu không vƣợt quá số lƣợng tổng cộng tài nguyên sẵn có trong hệ thống. Nói cách

khác, một quá trình không thể yêu cầu ba máy in nếu hệ thống chỉ có hai. Dƣới chế độ

điều hành thông thƣờng, một quá trình có thể sử dụng một tài nguyên chỉ trong thứ tự

sau:

 Y u cầu: nếu yêu cầu không thể đƣợc gán tức thì thí dụ tài nguyên đang

đƣợc dùng bởi quá trình khác thì quá trình đang yêu cầu phải chờ cho tới

khi nó có thể nhận đƣợc tài nguyên.

 S dụng: quá trình có thể điều hành tài nguyên thí dụ nếu tài nguyên là máy

129

in, quá trình có thể in ra máy in .

 Gi i ph ng: quá trình tự nguyện giải phóng tài nguyên sau khi đ dùng xong.

Yêu cầu và giải phóng tài nguyên là các lời gọi hệ thống. Thí dụ nhƣ yêu cầu và

giải phóng thiết bị, mở và đóng tập tin, cấp phát và giải phóng bộ nhớ cũng là các lời

gọi hệ thống. Yêu cầu và giải phóng các tài nguyên khác nhƣ CPU, Memory có thể đạt

đƣợc thông qua thao tác chờ Wait và báo hiệu Signal. Do đó, cho mỗi trƣờng hợp sử

dụng, hệ điều hành kiểm tra để đảm bảo rằng quá trình sử dụng yêu cầu và đƣợc cấp

phát tài nguyên. Hệ điều hành dùng một bảng ghi nhận tài nguyên nào đang tự do và tài

nguyên nào đang đƣợc cấp phát và cấp phát cho quá trình nào . Nếu một quá trình yêu

cầu tài nguyên mà tài nguyên đó hiện đƣợc cấp phát cho một quá trình khác, quá trình

có thể đƣợc thêm vào hàng đợi để chờ tài nguyên này.

Để minh hoạ trạng thái deadlock, chúng ta x t hệ thống với ba ổ đĩa từ. Giả sử

mỗi quá trình đang giữ một ổ đĩa từ. Bây giờ, nếu mỗi quá trình yêu cầu thêm một ổ

đĩa từ khác thì ba quá trình sẽ ở trong trạng thái deadlock. Mỗi quá trình đang chờ một

sự kiện “ổ đĩa từ đƣợc giải phóng” mà có thể đƣợc gây ra chỉ bởi một trong những quá

trình đang chờ. Thí dụ này minh hoạ dead oc i n quan đến c ng oại tài nguy n.

Deadlock cũng liên quan nhiều loại tài nguyên khác nhau. Thí dụ, x t một hệ thống với

một máy in và một ổ đĩa từ. Giả sử, quá trình Pi đang giữ ổ đĩa từ và quá trình Pj đang

giữ máy in. Nếu Pi yêu cầu thêm máy in và Pj yêu cầu thêm ổ đĩa từ thì deadlock xảy

ra.

Một ngƣời lập trình đang phát triển những ứng dụng đa luồng phải quan tâm đặc

biệt tới vấn đề này: Các chƣơng trình đa luồng là ứng cử viên cho vấn đề deadlock vì

nhiều luồng có thể cạnh tranh trên tài nguyên đƣợc chia s .

2.8.2.2. Điều kiện hình thành tắc nghẽn

Năm 1971, E.G Coffman, JR đ đƣa ra và chứng tỏ đƣợc rằng, nếu hệ thống tồn

tại đồng thời bốn điều kiện sau đây thì hệ thống sẽ xảy ra tắc nghẽn:

- Loại trừ ẫn nhau (mutua excution) hay độc quyền s dụng: Đối với các

tài nguyên không phân chia đƣợc thì tại mỗi thời điểm chỉ có một tiến trình sử

dụng đƣợc tài nguyên.

- Giữ và chờ (hold and Wait : Một tiến trình hiện đang chiếm giữ tài nguyên, lại

130

yêu cầu thêm tài nguyên mới.

- Không ưu ti n No preemption : Không có tài nguyên nào có thể đƣợc giải

phóng từ một tiến trình đang chiếm giữ nó. Tức là tài nguyên chỉ có thể tự

nguyện giải phóng khi quá trình sử dụng xong.

Trong nhiều trƣờng hợp các điều kiện trên là rất cần thiết đối với hệ thống. Sự

thực hiện độc quyền là cần thiết để bảo đảm tính đúng đắn của kết quả và tính toàn vẹn

của dữ liệu chúng ta đ thấy điều này ở phần tài nguyên găng trên đây .

Tƣơng tự, sự ƣu tiên không thể thực hiện một cách tuỳ tiện, đặt biệt đối với các

tài nguyên có liên quan với nhau, việc giải phóng tài nguyên từ một tiến trình này có

thể ảnh hƣởng đên kết quả xử lý của các tiến trình khác.

Sự tắc nghẽn có thể tồn tại với ba điều kiện trên, nhƣng cũng có thể không xảy ra

chỉ với 3 điều kiện đó. Để chắc chắn tắc nghẽn xảy ra cần phải có điều kiện thứ tƣ

- Đợi vòng tròn (Circular Wait : Đây là trƣờng hợp của ví dụ 2 mà chúng ta đ

nêu ở trên. Tức là, mỗi tiến trình đang chiếm giữ tài nguyên mà tiến trình khác

đang cần.

Ba điều kiện đầu là điều kiện cần chứ không phải là điều kiện đủ để xảy ra tắc

nghẽn. Điều kiện thứ tƣ là kết quả tất yếu từ ba điều kiện đầu.

2.8.2.3. Đồ thị cấp phát tài nguyên

Deadlock có thể mô tả chính xác hơn bằng cách hiển thị đồ thị có hƣớng gọi là đồ

thị cấp phát tài nguyên hệ thống. Đồ thị này chứa một tập các đỉnh V và tập hợp các

cạnh E. Một tập các đỉnh V đƣợc chia làm hai loại nút P = {P1, P2,…,Pn} là tập hợp

các quá trình hoạt động trong hệ thống, và R = {R1, R2, ..., Rm} là tập hợp chứa tất cả

các loại tài nguyên trong hệ thống.

Một cạnh có hƣớng từ quá trình Pi tới loại tài nguyên Rj đƣợc ký hiệu Pi → Rj;

nó biểu thị rằng quá trình Pi đ yêu cầu loại tài nguyên Rj và hiện đang chờ loại tài

nguyên đó. Một cạnh có hƣớng từ loại tài nguyên Rj tới quá trình Pi đƣợc hiển thị bởi

Rj → Pi; nó hiển thị rằng một thể hiện của loại tài nguyên Rj đ đƣợc cấp phát tới quá

trình Pi. Một cạnh có hƣớng Pi → Rj đƣợc gọi là cạnh yêu cầu; một cạnh có hƣớng

Rj→ Pi đƣợc gọi là cạnh gán.

Bằng hình tƣợng, chúng ta hiển thị mỗi quá trình Pi là một hình tr n, và mỗi loại

131

tài nguyên Rj là hình chữ nhật. Vì loại tài nguyên Rj có thể có nhiều hơn một thể hiện,

chúng ta hiển thị mỗi thể hiện là một chấm nằm trong hình vuông. Chú ý rằng một

cạnh yêu cầu trỏ tới chỉ một hình vuông Rj, trái lại một cạnh gán cũng phải gán tới một

trong các dấu chấm trong hình vuông.

Khi quá trình Pi yêu cầu một thể hiện của loại tài nguyên Rj, một cạnh yêu cầu

đƣợc chèn vào đồ thị cấp phát tài nguyên. Khi yêu cầu này có thể đƣợc đáp ứng, cạnh

yêu cầu lập tức đƣợc truyền tới cạnh gán. Khi quá trình không c n cần truy xuất tới tài

nguyên, nó giải phóng tài nguyên, và khi đó dẫn đến cạnh gán bị xoá.

Hình 2.33. Đồ thị c p phát tài nguyên14

Đồ thị cấp phát tài nguyên trong hình 2.33:

Các tập P, R là tập hợp đỉnh và E là tập hợp cạnh:

 P = {P1, P2, P3}

 R = {R1, R2, R3, R4}

 E = {P1→R1, P2 →R3, R1 →P2, R2→P2, R3→P3}

Các thể hiện của tài nguyên:

 Tài nguyên loại R1 có một thể hiện

 Tài nguyên loại R2 có hai thể hiện

 Tài nguyên loại R3 có một thể hiện

14 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, tr.116

132

 Tài nguyên loại R4 có ba thể hiện

Trạng thái quá trình:

 Quá trình P1 đang giữ một thể hiện của loại tài nguyên R2 và đang chờ

yêu cầu thêm một thể hiện của loại tài nguyên R1.

 Quá trình P2 đang giữ một thể hiện của loại tài nguyên R1 và một thể

hiện của loại tài nguyên R2 và đang chờ một thể hiện của loại tài nguyên

R3.

 Quá trình P3 đang giữ một thể hiện của R3

Nhận x t thấy không có quá trình nào trong hệ thống bị deadlock vì không tồn tại

chu trình đợi v ng tr n. Nếu đồ thị có chứa chu trình, thì deadlock có thể xảy ra.

Nếu mỗi loại tài nguyên có chính xác một thể hiện, thì một chu trình ngụ ý rằng

một deadlock xảy ra. Nếu một chu trình bao gồm chỉ một tập hợp các loại tài nguyên,

mỗi loại tài nguyên chỉ có một thể hiện thì deadlock xảy ra. Deadlock xảy ra đối với tất

cả các quá trình trong chu trình đó. Trong trƣờng hợp này, một chu trình trong đồ thị là

điều kiện cần và đủ để tồn tại deadlock.

Nếu mỗi loại tài nguyên có nhiều thể hiện thì chu trình không ngụ ý deadlock xảy

ra. Trong trƣờng hợp này, một chu trình trong đồ thị là điều kiện cần nhƣng chƣa đủ để

tồn tại deadlock.

Giả sử quá trình P3 yêu cầu một thể hiện của loại tài nguyên R2. Một cạnh yêu

cầu P3 → R2 đƣợc thêm vào đồ thị Hình 2.34

133

Hình 2.34. Đồ thị c p phát tài nguy n xu t hiện Dead oc

Vì tài nguyên R2 không có sẵn một thể hiện. Tại thời điểm này, hai chu trình nhỏ

tồn tại trong hệ thống:

P1 → R1 → P2 → R3 → P3 → R2 → P1

P2 → R3 → P3 → R2 → P2

Quá trình P1, P2, và P3 bị deadlock. Quá trình P3 đang chờ tài nguyên R2, hiện

đƣợc giữ bởi quá trình P2. Hay nói cách khác, quá trình P3 đang chờ quá trình P1 hay

P2 giải phóng tài nguyên R2. Ngoài ra, quá trình P1 đang chờ quá trình P2 giải phóng

tài nguyên R1.

Hình 2.35. Đồ thị c p phát tài nguy n c chu trình nhưng hông bị dead oc

Bây giờ xem x t đồ thị cấp phát tài nguyên trong hình 2.35. Trong đồ thị này, tồn

tại một chu trình:

P1 → R1 → P3 → R2 → P1

Tuy nhiên, không có deadlock. Chú ý rằng quá trình P4 có thể giải phóng một thể

hiện của loại tài nguyên R2. Tài nguyên đó có thể đƣợc cấp phát tới P3 sau đó, chu

trình sẽ không c n.

Tóm lại, nếu đồ thị cấp phát tài nguyên không có chu trình thì hệ thống không có

trạng thái deadlock. Ngoài ra, nếu có chu trình thì có thể có hoặc không trạng thái

deadlock. Nhận x t này là quan trọng khi chúng ta giải quyết vấn đề deadlock.

2.8.3. Các phương pháp xử lý deadlock

134

Phần lớn, chúng ta có thể giải quyết vấn đề deadlock theo một trong hai cách:

 Chúng ta có thể sử dụng một giao thức để ngăn ch n hay tránh dead oc s,

đảm bảo rằng hệ thống sẽ không bao giờ đi vào trạng thái deadlock.

 Chúng ta có thể cho ph p hệ thống đi vào trạng thái deadlock, phát hiện nó

và phục hồi.

Chúng ta sẽ tìm hiểu vắn tắt mỗi phƣơng pháp. Sau đó, chúng ta sẽ trình bày các

giải thuật một cách chi tiết trong các phần sau đây.

Để đảm bảo deadlock không bao giờ xảy ra, hệ thống có thể dùng kế hoạch ngăn

ch n hay tránh deadlock. Ngăn chặn deadlock là một tập hợp các phƣơng pháp để đảm

bảo rằng ít nhất một điều kiện cần (trong 2.8.2.2.) không thể xảy ra. Ngƣợc lại, tránh

deadlock yêu cầu hệ điều hành cung cấp những thông tin bổ sung tập trung vào loại tài

nguyên nào một quá trình sẽ yêu cầu và sử dụng trong thời gian sống của nó. Để quyết

định yêu cầu hiện tại có thể đƣợc thoả m n hay phải bị trì ho n, hệ thống phải xem x t

tài nguyên hiện có, tài nguyên hiện cấp phát cho mỗi quá trình, và các yêu cầu tài

nguyên và giải phóng tài nguyên tƣơng lai của mỗi quá trình.

Nếu một hệ thống không dùng giải thuật ngăn chặn hay tránh deadlock thì trƣờng

hợp deadlock có thể xảy ra. Trong môi trƣờng này, hệ thống có thể cung cấp một giải

thuật để xem x t trạng thái của hệ thống để xác định deadlock có xảy ra hay không và

giải thuật phục hồi từ deadlock.

Nếu hệ thống không đảm bảo rằng deadlock sẽ không bao giờ xảy ra và cũng

không cung cấp một cơ chế để phát hiện và phục hồi deadlock thì có thể dẫn đến

trƣờng hợp hệ thống ở trong trạng thái deadlock. Trong trƣờng hợp này, deadlock

không đƣợc phát hiện sẽ làm giảm năng lực hệ thống vì tài nguyên đang đƣợc giữ bởi

những quá trình mà chúng không thể thực thi, đi vào trạng thái deadlock. Cuối cùng, hệ

thống sẽ dừng các chức năng và cần đƣợc khởi động lại bằng thủ công.

2.8.3.1. Ngăn chặn deadlock

Để deadlock xảy ra, một trong bốn điều kiện cần phải xảy ra. Bằng cách đảm bảo

ít nhất một trong bốn điều kiện này không thể xảy ra, chúng ta có thể ngăn chặn việc

xảy ra của deadlock.

 Đối với điều iện độc quyền: Điều kiện này gần nhƣ không tránh khỏi, vì sự độc

135

quyền là cần thiết đối với tài nguyên thuộc loại phân chia đƣợc nhƣ các biến chung,

các tập tin chia s , hệ điều hành cần phải hỗ trợ sự độc quyền trên các tài nguyên

này. Tuy nhiên, với những tài nguyên thuộc loại không phân chia đƣợc máy in hệ

điều hành có thể sử dụng kỹ thuật SPOOL Smulataneous Peripheral Operation

Online để tạo ra nhiều tài nguyên ảo cung cấp cho các tiến trình đồng thời. Ví dụ,

một máy in không thể đƣợc chia s cùng lúc bởi nhiều quá trình. Ngƣợc lại, các tài

nguyên có thể chia s tập tin chỉ đọc không đ i hỏi truy xuất độc quyền và do đó

không thể liên quan đến deadlock. Nếu nhiều quá trình cố gắng mở một tập tin chỉ

 Đối với điều iện giữ và đợi: Để đảm bảo điều kiện giữ-và-chờ cấp thêm tài nguyên

đọc tại cùng một thời điểm thì chúng có thể đƣợc gán truy xuất cùng lúc đến tập tin.

không bao giờ xảy ra trong hệ thống, chúng ta phải đảm bảo rằng bất cứ khi nào

một quá trình yêu cầu tài nguyên, nó không giữ bất cứ tài nguyên nào khác. Điều

kiện này có thể ngăn chặn bằng cách cho tiến trình yêu cầu tất cả tài nguyên mà nó

cần tại một thời điểm và tiến trình sẽ bị khoá blocked cho đến khi yêu cầu tài

nguyên của nó đƣợc hệ điều hành đáp ứng. Phƣơng pháp này không hiệu quả. Thứ

nh t, tiến trình phải đợi trong một khoảng thời gian dài để có đủ tài nguyên mới có

th chuyển sang hoạt động đƣợc, trong khi tiến trình chỉ cần một số ít tài nguyên

trong số đó là có thể hoạt động đƣợc, sau đó yêu cầu tiếp. Thứ hai, lãng phí tài

nguyên, vì có thể tiến trình giữa nhiều tài nguyên mà chỉ đến khi sắp kết thúc tiến

trình mới sử dụng, và có thể đây là những tài nguyên mà các tiến trình khác đang

rất cần. Ở đây hệ điều hành có thể tổ chức phân lớp tài nguyên hệ thống. Theo đó

tiến trình phải trả tài nguyên ở mức thấp mới đƣợc cấp phát tài nguyên ở cấp cao

hơn. Ví dụ, chúng ta x t một quá trình ch p dữ liệu từ băng từ tới tập tin đĩa, sắp

xếp tập tin đĩa và sau đó in kết quả ra máy in. Nếu tất cả tài nguyên phải đƣợc yêu

cầu cùng một lúc thì khởi đầu quá trình phải yêu cầu băng từ, tập tin đĩa và máy in.

Nó sẽ giữ máy in trong toàn thời gian thực thi của nó mặc dù nó cần máy in chỉ ở

giai đoạn cuối.

 Đối với điều iện hông ưu ti n: không đ i lại tài nguyên từ quá trình đang giữ

chúng để đảm bảo điều kiện này không xảy ra, chúng ta có thể dùng giao thức sau.

Nếu một quá trình đang giữ một số tài nguyên và yêu cầu tài nguyên khác mà

không đƣợc cấp phát tức thì tới nó nghĩa là quá trình phải chờ thì tất cả tài nguyên

hiện đang giữ đƣợc đ i lại. Điều kiện này có thể ngăn chặn bằng cách, khi tiến trình

136

bị rơi vào trạng thái khoá, hệ điều hành có thể thu hồi tài nguyên của tiến trình bị

khoá để cấp phát cho tiến trình khác và cấp lại đầy đủ tài nguyên cho tiến trình khi

tiến trình đƣợc đƣa ra khỏi trạng thái khoá.

 Đối với điều iện chờ đợi vòng tròn: Điều kiện này có thể ngăn chặn bằng cách

phân lớp tài nguyên của hệ thống. Theo đó, nếu một tiến trình đƣợc cấp phát tài

nguyên ở lớp L, thì sau đó nó chỉ có thể yêu cầu các tài nguyên ở lớp thấp hơn lớp

L.

2.8.3.2. Tránh deadlock

Các giải thuật ngăn chặn deadlock, đƣợc nghiên cứu ở trên, ngăn chặn deadlock

bằng cách hạn chế cách các yêu cầu có thể đƣợc thực hiện. Các ngăn chặn đảm bảo

rằng ít nhất một trong những điều kiện cần cho deadlock không thể xảy ra. Do đó,

deadlock không thể xảy ra. Tuy nhiên, các tác dụng phụ có thể ngăn chặn deadlock bởi

phƣơng pháp này là việc sử dụng thiết bị chậm và thông lƣợng hệ thống bị giảm.

Một phƣơng pháp khác để tránh deadlock là yêu cầu thông tin bổ sung về cách tài

nguyên đƣợc yêu cầu. Ví dụ, trong một hệ thống với một ổ băng từ và một máy in,

chúng ta có thể bảo rằng quá trình P sẽ yêu cầu ổ băng từ trƣớc và sau đó máy in trƣớc

khi giải phóng cả hai tài nguyên. Trái lại, quá trình Q sẽ yêu cầu máy in trƣớc và sau

đó ổ băng từ. Với kiến thức về thứ tự hoàn thành của yêu cầu và giải phóng cho mỗi

quá trình, chúng ta có thể quyết định cho mỗi yêu cầu của quá trình sẽ chờ hay không.

Mỗi yêu cầu đ i hỏi hệ thống xem tài nguyên hiện có, tài nguyên hiện đƣợc cấp tới mỗi

quá trình, và các yêu cầu và giải phóng tƣơng lai của mỗi quá trình, để yêu cầu của quá

trình hiện tại có thể đƣợc thoả m n hay phải chờ để tránh khả năng xảy ra deadlock.

Các giải thuật khác nhau có sự khác nhau về lƣợng và loại thông tin đƣợc yêu

cầu. Mô hình đơn giản và hữu ích nhất yêu cầu mỗi quá trình khai báo số lớn nhất tài

nguyên của mỗi loại mà nó cần. Thông tin trƣớc về số lƣợng tối đa tài nguyên của mỗi

loại đƣợc yêu cầu cho mỗi quá trình, có thể xây dựng một giải thuật đảm bảo hệ thống

sẽ không bao giờ đi vào trạng thái deadlock. Đây là giải thuật định nghĩa tiếp cận tránh

deadlock. Giải thuật tránh deadlock tự xem x t trạng thái cấp phát tài nguyên để đảm

bảo điều kiện tồn tại chu trình trong đồ thị cấp phát tài nguyên có thể không bao giờ

xảy ra. Trạng thái cấp phát tài nguyên đƣợc định nghĩa bởi số tài nguyên sẵn dùng và

tài nguyên đƣợc cấp phát và số yêu cầu tối đa của các quá trình.

137

2.8.3.2.1 Trạng thái an toàn

Một trạng thái là an toàn nếu hệ thống có thể cấp phát các tài nguyên tới mỗi quá

trình trong một vài thứ tự và vẫn tránh deadlock. Hay nói cách khác, một hệ thống ở

trong trạng thái an toàn chỉ nếu ở đó tồn tại một thứ tự an toàn. Thứ tự của các quá

trình là một thứ tự an toàn cho trạng thái cấp phát hiện hành nếu đối

với mỗi thứ tự Pi, các tài nguyên mà Pi yêu cầu vẫn có thể đƣợc thoả m n bởi tài

nguyên hiện có cộng với các tài nguyên đƣợc giữ bởi tất cả Pj, với j

hợp này, nếu những tài nguyên mà quá trình Pi yêu cầu không sẵn dùng tức thì thì Pi

có thể chờ cho đến khi tất cả Pj hoàn thành. Khi chúng hoàn thành, Pi có thể đạt đƣợc

tất cả những tài nguyên nó cần, hoàn thành các công việc đƣợc gán, trả về những tài

nguyên đƣợc cấp phát cho nó và kết thúc. Khi Pi kết thúc, Pi+1 có thể đạt đƣợc các tài

nguyên nó cần, ... Nếu không có thứ tự nhƣ thế tồn tại thì trạng thái hệ thống là không

an toàn.

Một trạng thái an toàn không là trạng thái deadlock. Do đó, trạng thái deadlock là

trạng thái không an toàn. Tuy nhiên, không phải tất cả trạng thái không an toàn là

deadlock. Một trạng thái không an toàn có thể dẫn đến deadlock.

Hình 2.36. Không gian trạng thái an toàn, hông an toàn, dead oc

Ví dụ 1: Để minh hoạ, chúng ta x t một hệ thống với 12 ổ băng từ và 3 quá trình:

P0,P1, P2.

 Quá trình P0 yêu cầu 10 ổ băng từ

 Quá trình P1 có thể cần 4 ổ băng từ

 Quá trình P2 có thể cần tới 9 ổ băng từ.

Giả sử rằng tại thời điểm T0, quá trình P0 giữ 5 ổ băng từ, quá trình P1 giữ 2 và

138

quá trình P2 giữ 2 ổ băng từ. Do đó, có 3 ổ băng từ c n rảnh .

Hệ thống c n tự 3

Thứ cấp phát P1 P0 P2

Quá trình P0 P1 P2 Đang sử dụng 5 2 2 Nhu cầu tối đa 10 4 9 Nhu cầu tiếp theo có thể yêu cầu 5 2 7 5-5+5+5=10 3-2+2+2 =5 10-7+2+7 =12

Bản 2 24. Ví dụ 1a về tránh deadlock

Tại thời điểm T0, hệ thống ở trạng thái an toàn. Thứ tự thoả điều

kiện an toàn vì quá trình P1 có thể đƣợc cấp phát tức thì 2 ổ băng từ và sau đó trả lại

chúng sau đó hệ thống cập nhật 3+2= 5 ổ băng từ sẵn dùng , tiếp theo cấp cho quá

trình P0 nhận tất cả 5 ổ băng từ và trả lại chúng sau đó hệ thống sẽ có 10 ổ băng từ sẵn

dùng , và cuối cùng cấp cho quá trình P2 có thể nhận tất cả 7 ổ băng từ nó yêu cầu và

trả lại chúng sau đó hệ thống sẽ có tất cả 12 ổ băng từ sẵn dùng).

Quá trình Đang sử dụng Nhu cầu tối đa Nhu cầu tiếp theo có thể Hệ thống còn 3-1 Thứ tự cấp phát

P1

P0 P1 P2 5 2 2+1 10 4 9 5 2 7-1 2-2+2+2 =4

Bản 2.25. Ví dụ 1b về tránh deadlock

Một hệ thống có thể đi từ trạng thái an toàn tới một trạng thái không an toàn. Giả

sử rằng tại thời điểm T1, quá trình P2 yêu cầu và đƣợc cấp 1 ổ băng từ nữa. Hệ thống

không c n trong trạng thái an toàn. Tại điểm này, chỉ quá trình P1 có thể đƣợc cấp tất

cả 2 ổ băng từ của nó. Khi nó trả lại chúng, hệ thống đƣợc cập nhật 4 ổ băng từ sẵn có.

Tiếp theo, quá trình P0 yêu cầu 5 ổ băng từ hệ thống chỉ có 4 nên P0 phải chờ.

Tƣơng tự, quá trình P2 có thể yêu cầu thêm 6 ổ băng từ hệ thống chỉ có 4 và P2 phải

chờ dẫn đến P0, P2 bị deadlock.

Lỗi của chúng ta là gán yêu cầu từ quá trình P2 cho 1 ổ băng từ nữa. Nếu chúng

ta làm cho P2 phải chờ cho đến khi các quá trình khác kết thúc và giải phóng tài

nguyên của nó thì chúng ta có thể tránh deadlock.

Với khái niệm trạng thái an toàn đƣợc cho, chúng ta có thể định nghĩa các giải

thuật tránh deadlock. Ý tƣởng đơn giản là đảm bảo hệ thống sẽ luôn c n trong trạng

thái an toàn. Khởi đầu, hệ thống ở trong trạng thái an toàn. Bất cứ khi nào một quá

139

trình yêu cầu một tài nguyên hiện có, hệ thống phải quyết định cấp phát tài nguyêncho

quá trình ngay lập tức hoặc quá trình phải chờ. Yêu cầu đƣợc chấp nhận chỉ nếu việc

cấp phát để lại hệ thống trong trạng thái an toàn.

Trong mô hình này, nếu quá trình yêu cầu tài nguyên đang có, nó có thể vẫn phải

chờ. Do đó, việc sử dụng tài nguyên có thể chậm hơn mà không có giải thuật tránh

deadlock.

2.8.3.2.2. Giải thuật đồ thị cấp phát tài nguyên

Nếu chúng ta có một hệ thống cấp phát tài nguyên với một thể hiện của mỗi loại.

Ngoài các cạnh yêu cầu và gán, chúng ta giới thiệu một loại cạnh mới đƣợc gọi là cạnh

thỉnh cầu claim edge . Một cạnh thỉnh cầu Pi → Rj hiển thị quá trình Pi có thể yêu cầu

tài nguyên Rj vào một thời điểm trong tƣơng lai. Cạnh này tƣơng tự cạnh yêu cầu về

phƣơng hƣớng nhƣng đƣợc hiện diện bởi n t đứt. Khi quá trình Pi yêu cầu tài nguyên

Rj, cạnh thỉnh cầu Pi → Rj chuyển tới cạnh yêu cầu. Tƣơng tự, khi một tài nguyên Rj

đƣợc giải phóng bởi Pi, cạnh gán Rj → Pi đƣợc chuyển trở lại thành cạnh thỉnh cầu Pi

→ Rj. Chúng ta chú ý rằng các tài nguyên phải đƣợc yêu cầu trƣớc trong hệ thống.

Nghĩa là, trƣớc khi Pi bắt đầu thực thi, tất cả các cạnh thỉnh cầu của nó phải xuất hiện

trong đồ thị cấp phát tài nguyên. Chúng ta có thể giảm nhẹ điều kiện này bằng cách cho

ph p một cạnh Pi → Rj để đƣợc thêm tới đồ thị chỉ nếu tất cả các cạnh gắn liền với quá

trình Pi là các cạnh thỉnh cầu.

Giả sử rằng Pi yêu cầu tài nguyên Rj. Yêu cầu có thể đƣợc gán chỉ nếu chuyển

cạnh yêu cầu Pi → Rj tới cạnh gán Rj→Pi không dẫn đến việc hình thành chu trình

trong đồ thị cấp phát tài nguyên. Chú ý rằng chúng ta kiểm tra tính an toàn bằng cách

dùng giải thuật phát hiện chu trình. Một giải thuật để phát hiện một chu trình trong đồ thị này yêu cầu một thứ tự của n2 thao tác, ở đây n là số quá trình trong hệ thống.

140

Hình 2.37. Đồ thị c p phát tài nguy n đ tránh dead oc

Nếu không có chu trình tồn tại, thì việc cấp phát tài nguyên sẽ để lại hệ thống

trong trạng thái an toàn. Nếu chu trình đƣợc tìm thấy thì việc cấp phát sẽ đặt hệ thống

trong trạng thái không an toàn. Do đó, quá trình Pi sẽ phải chờ yêu cầu của nó đƣợc

thoả.

Để minh hoạ giải thuật này, chúng ta x t đồ thị cấp phát tài nguyên của hình

Hình 2.37. Giả sử rằng P2 yêu cầu R2. Mặc dù R2 hiện rảnh nhƣng chúng ta không thể

cấp phát nó tới P2 vì hoạt động này sẽ tạo ra chu trình trong đồ thị Hình 2.38 . Một

chu trình hiển thị rằng hệ thống ở trong trạng thái không an toàn. Nếu P1 yêu cầu R2

và P2 yêu cầu R1 thì deadlock sẽ xảy ra.

Hình 2.38. Trạng thái hông an toàn trong đồ thị c p phát tài nguyên

2.8.3.2.3. Giải thuật của Banker

Giải thuật đồ thị cấp phát tài nguyên không thể áp dụng tới hệ thống cấp phát tài

nguyên với nhiều thể hiện của mỗi loại tài nguyên. Giải thuật tránh deadlock mà chúng

ta mô tả tiếp theo có thể áp dụng tới một hệ thống nhƣng ít hiệu quả hơn cơ chế đồ thị

cấp phát tài nguyên. Giải thuật này thƣờng đƣợc gọi là giải thuật của Banker. Tên giải

thuật đƣợc lấy từ ý tƣởng hệ thống ngân hàng để đảm bảo ngân hàng không bao giờ

cấp phát tiền mặt đang có của nó khi nó không thể thoả m n các yêu cầu của tất cả

khách hàng.

Khi một quá trình mới đƣa vào hệ thống, nó phải khai báo số tối đa các thể hiện

của mỗi loại tài nguyên mà nó cần. Số này có thể không vƣợt quá tổng số tài nguyên

trong hệ thống. Khi một ngƣời dùng yêu cầu tập hợp các tài nguyên, hệ thống phải xác

định việc cấp phát của các tài nguyên này sẽ để lại hệ thống ở trạng thái an toàn hay

không. Nếu trạng thái hệ thống sẽ là an toàn, tài nguyên sẽ đƣợc cấp; ngƣợc lại quá

141

trình phải chờ cho tới khi một vài quá trình giải phóng đủ tài nguyên.

Cấu trúc dữ liệu để cài đặt giải thuật Banker.

Gọi n là số quá trình trong hệ thống và m là số loại tài nguyên trong hệ thống.

 Available: một vector có chiều dài m hiển thị số lƣợng tài nguyên sẵn dùng của

mỗi loại. Nếu Available[j]= k, có k thể hiện của loại tài nguyên Rj sẵn dùng.

 Max: một ma trận n x m định nghĩa số lƣợng tối đa yêu cầu của mỗi quá trình. Nếu

Max[ i , j ] = k, thì quá trình Pi có thể yêu cầu nhiều nhất k thể hiện của loại tài

nguyên Rj.

 Allocation: một ma trận n x m định nghĩa số lƣợng tài nguyên của mỗi loại hiện

đƣợc cấp tới mỗi quá trình. Nếu Allocation[ i, j ] = k, thì quá trình Pi hiện đƣợc cấp

k thể hiện của loại tài nguyên Rj.

 Need: một ma trận n x m hiển thị yêu cầu tài nguyên c n lại của mỗi quá trình. Nếu

Need[ i, j ] = k, thì quá trình Pi có thể cần thêm k thể hiện của loại tài nguyên Rj để

hoàn thành công việc của nó. Chú ý rằng, Need[ i, j ] = Max[ i, j ] – Allocation [i,j].

Cấu trúc dữ liệu này biến đổi theo thời gian về kích thƣớc và giá trị. Để đơn giản

việc trình bày của giải thuật Banker, chúng ta thiết lập vài ký hiệu.

Gọi X và Y là các vector có chiều dài n. Chúng ta nói rằng:

 X ≤ Y nếu và chỉ nếu X[i] ≤ Y[i] cho tất cả i = 1, 2, …, n.

Ví dụ, nếu X = 1, 7, 3, 2 và Y = 0, 3, 2, 1 thì Y ≤ X

 Y < X nếu Y ≤ X và Y ≠ X.

 Giải thuật an toàn

Giải thuật này để xác định hệ thống ở trạng thái an toàn hay không.

 Bước 1: Gọi Work và Finish là các vector có chiều dài m và n tƣơng ứng.

Khởi tạo Work:=Available và Finish[i]:=false với i = 1, 2, …,n)

 Bước 2: Tìm i thỏa 2 điều kiện sau với 1= 1,2,3,…n :

Finish[i] = false

Need i ≤ Work.

142

Nếu không có i nào thỏa, di chuyển tới bƣớc 4

 Bước 3: Work:=Work + Allocation i

Finish[i] := true

Di chuyển về bƣớc 2.

 Bước 4: Nếu Finish[i] = true cho tất cả i, thì hệ thống đang ở trạng thái an toàn.

D y các quá trình Pi theo thứ tự đó là d y an toàn.

Giải thuật này có thể yêu cầu độ phức tạp mxn2 thao tác để quyết định hệ thống

đang ở trạng thái an toàn hay không.

 Giải thuật yêu cầu tài nguyên

Cho Requesti là vector yêu cầu cho quá trình Pi. Nếu Request[i,j] = k, thì quá

trình Pi muốn k thể hiện của loại tài nguyên Rj. Khi một yêu cầu tài nguyên đƣợc thực

hiện bởi quá trình Pi, thì các hoạt động sau đƣợc thực hiện:

(1) Nếu Requesti ≤ Needi, di chuyển tới bƣớc 2. Ngƣợc lại, phát sinh một điều

kiện lỗi vì quá trình vƣợt quá yêu cầu tối đa của nó.

(2) Nếu Requesti ≤ Available, di chuyển tới bƣớc 3. Ngƣợc lại, Pi phải chờ vì tài

nguyên không sẵn có.

(3) Giả sử hệ thống cấp phát các tài nguyên đƣợc yêu cầu tới quá trình Pi bằng

cách thay đổi trạng thái sau:

Available := Available – Requesti;

Allocationi := Allocationi + Requesti;

Needi := Needi – Requesti;

Kiểm tra lại trạng thái an toàn hệ thống. Nếu kết quả trạng thái hệ thống vẫn an

toàn thì giao dịch đƣợc hoàn thành và quá trình Pi đƣợc cấp phát tài nguyên ngay lập

tức. Ngƣợc lại, nếu trạng thái mới là không an toàn, thì Pi phải chờ Requesti và trạng

thái cấp phát tài nguyên cũ đƣợc phục hồi.

 Thí dụ minh họa

143

X t một hệ thống với 5 quá trình từ P0,P1,P2,P3,P4, và 3 loại tài nguyên A, B, C. Loại tài nguyên A có 10 thể hiện, loại tài nguyên B có 5 thể hiện và loại tài nguyên C có 7 thể hiện. Giả sử rằng tại thời điểm T0 trạng thái hiện tại của hệ thống nhƣ sau:

Need = Max - Allocation

Process Allocation Max Need Available Maximum Resource Vector

10 5 7

Available = MRV - ∑ Allocation

A B C A B C A B C A B C A B C 0 2 3 2 0 0 7 0 3 2 9 1 2 2 4 5 2 0 2 3 3 2 2 2 3 1 0 0 1 0 P0 P1 P2 P3 P4

Bản 2.26. Ví dụ 2a về tránh deadlock

Chúng ta khẳng định rằng hệ thống hiện ở trong trạng thái an toàn. Thật vậy, thứ

tự là an toàn. Và hệ thống có đủ tài nguyên để cấp phát cho các

Need = Max - Allocation

quá trình theo thứ tự an toàn sẽ tránh đƣợc deadlock.

Process Allocation Max Need Available Work Maximum Resource Vector

10 5 7 3 3 2

Available = MRV - ∑ Allocation

A B C A B C A B C A B C A B C A B C 0 10 5 7 5 3 2 2 10 4 7 3 7 4 3 2 7 4 5 0 0 7 5 0 3 2 2 9 0 1 2 2 2 4 3 3 7 4 2 1 2 2 6 0 2 0 1 3 4 3 3 2 0 1 1 1 0 0 1 0 P0 P1 P2 P3 P4

Bản 2.27. Ví dụ 2b về tránh deadlock

144

Giả sử bây giờ tại thời điểm T1, tiến trình P1 yêu cầu thêm một thể hiện loại A và hai thể hiện loại C, vì thế Request1 = 1, 0, 2 . Để quyết định yêu cầu này có thể đƣợc

cấp tức thì hay không, trƣớc tiên chúng ta phải kiểm tra thông qua giải thuật yêu cầu tài

nguyên:

Request1 ≤ Need1 nghĩa là , 1, 0, 2 ≤ 1, 2, 2 là đúng

Request1 ≤ Available nghĩa là, 1, 0, 2) ≤ 3, 3, 2 là đúng.

Need = Max - Allocation

Tài nguyên hệ thống đƣợc cập nhật nhƣ sau:

Process Allocation Max Need Available Work Maximum Resource Vector

10 5 7 2 3 0

Available = MRV - ∑ Allocation

A B C A B C A B C A B C A B C A B C 0 10 5 7 5 3 2 3 10 4 7 3 7 4 3 2 7 4 5 0 0 7 5 2 3 2 2 9 0 1 2 2 2 4 3 3 7 4 2 0 2 2 6 0 2 0 1 3 4 3 3 0 0 1 1 1 0 0 1 0 P0 P1 P2 P3 P4

Bản 2.28. Ví dụ 2c về tránh deadlock

Chúng ta phải xác định trạng thái mới này là an toàn hay không? Để thực hiện điều này, chúng ta thực thi giải thuật an toàn và tìm đƣợc thứ tự vẫn thỏa tiêu chuẩn an toàn. Do đó, câu trả lời là có thể cấp phát ngay lập tức yêu cầu của

quá trình P1 (1, 0, 2). Ngƣợc lại, thứ tự không an toàn thì cần tìm thứ tự khác an toàn và cấp phát cho Requesti theo thứ tự mới. Nếu không tồn tại bất kỳ

thứ tự nào an toàn thì câu trả lời là Requesti phải đợi.

Tuy nhiên, chúng ta cũng thấy rằng, khi hệ thống ở trong trạng thái T0, giả sử tại thời điểm T1, tiến trình P4 yêu cầu Request4 3, 3, 0 không thể đƣợc gán vì các tài nguyên là không sẵn dùng.

145

Giả sử tiến trình P0 yêu cầu Request0 0, 2, 0 không thể đƣợc cấp theo thứ tự mặc dù tài nguyên là sẵn dùng vì trạng thái kết quả là không an

toàn. Tuy nhiên có thể cấp phát theo thứ tự mới hoặc

,….

2.8.3.3. Phát hiện Deadlock

Nếu một hệ thống không thực hiện giải thuật ngăn chặn deadlock hay tránh

deadlock thì trƣờng hợp deadlock có thể xảy ra. Trong môi trƣờng này, hệ thống phải

cung cấp giải thuật xem x t trạng thái của hệ thống để quyết định deadlock có xảy ra

hay không. Nếu có thì xác định xem các quá trình nào đang bị deadlock sau đó tìm

cách khắc phục deadlock.

Trong thảo luận dƣới đây, chúng ta thảo luận chi tiết về hai yêu cầu khi chúng

liên quan đến những hệ thống với chỉ một thể hiện của mỗi loại tài nguyên cũng nhƣ

đối với hệ thống có nhiều thể hiện cho mỗi loại tài nguyên. Tuy nhiên, tại thời điểm

này chúng ta chú ý lƣợc đồ phát hiện và phục hồi yêu cầu chi phí bao gồm không chỉ

chi phí tại thời điểm thực thi cho việc duy trì thông tin cần thiết và thực thi giải thuật

phát hiện mà c n các l ng phí có thể phát sinh trong việc phát hiện deadlock.

2.8.3.3.1. Một thể hiện của mỗi loại tài nguyên

Nếu tất cả tài nguyên chỉ có một thể hiện thì chúng ta có thể định nghĩa giải thuật

phát hiện deadlock dùng một biến dạng của đồ thị cấp phát tài nguyên, đƣợc gọi là đồ

thị chờ Wait-for . Chúng ta đạt đƣợc đồ thị này từ đồ thị cấp phát tài nguyên bằng

cách gỡ bỏ các nút của loại tài nguyên và xóa các cạnh tƣơng ứng.

15 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.127

146

Hình 2.39. a Đồ thị cấp phát tài nguyên. b Đồ thị chờ tƣơng ứng15

Chính xác hơn, một cạnh từ Pi tới Pj trong đồ thị chờ hiển thị rằng quá trình Pi

đang chờ một quá trình Pj để giải phóng tài nguyên mà Pi cần. Cạnh Pi → Pj tồn tại

trong đồ thị chờ nếu và chỉ nếu đồ thị cấp phát tài nguyên tƣơng ứng chứa hai cạnh

Pi→ Rq và Rq → Pj đối với một số tài nguyên Rq.

Nhƣ đ đề cập trƣớc đó, deadlock tồn tại trong hệ thống nếu và chỉ nếu đồ thị chờ

chứa chu trình. Để phát hiện deadlock, hệ thống cần duy trì đồ thị chờ và định kỳ gọi

giải thuật để tìm kiếm chu trình trong đồ thị.

Một giải thuật phát hiện chu trình trong đồ thị chờ yêu cầu độ phức tạp n2 thao

tác, ở đây n là số cạnh của đồ thị.

2.8.3.3.2. Nhiều thể hiện của một loại tài nguyên

Lƣợc đồ đồ thị chờ không thể áp dụng đối với hệ thống cấp phát tài nguyên với

nhiều thể hiện cho mỗi loại tài nguyên. Giải thuật phát hiện deadlock mà chúng ta mô

tả sau đây có thể áp dụng cho hệ thống này. Giải thuật thực hiện nhiều cấu trúc dữ liệu

thay đổi theo thời gian mà chúng tƣơng tự nhƣ đƣợc dùng trong giải thuật Banker.

 Available: một vector có chiều dài m hiển thị số lƣợng tài nguyên sẵn có của

mỗi loại.

 Allocation: ma trận nxm định nghĩa số lƣợng tài nguyên của mỗi loại hiện đƣợc

cấp phát tới mỗi quá trình.

 Request: ma trận nxm hiển thị yêu cầu hiện tại của mỗi quá trình. Nếu

Request[i,j] = k, thì quá trình Pi đang yêu cầu k thể hiện nữa của loại tài nguyên

Rj.

Bước 1: Gọi Work và Finish là các vector có chiều dài m và n tƣơng ứng.

Khởi tạo Work:=Available.

For i := 1, 2, …,n

nếu Allocationi ≠ 0, thì Finish[i]:= false; ngƣợc lại Finish[i]:= true.

Bước 2: Tìm chỉ số i thỏa:

(a) Finish[i] = false

147

b Request i ≤ Work.

Nếu không có i nào thỏa, di chuyển tới bƣớc 4

Bước 3: Work:=Work + Allocation i

Finish[i] := true

Di chuyển về bƣớc 2.

Bước 4: Nếu Finish[i] = false cho một vài i, 1 ≤ i ≤ n thì hệ thống đang ở trạng thái

deadlock. Ngoài ra, nếu Finish[i] = false thì quá trình Pi bị deadlock.

Giải thuật này yêu cầu độ phức tạp mxn2 để phát hiện hệ thống có ở trong trạng

thái deadlock hay không.

Câu hỏi đặt ra là tại sao chúng ta trả lại tài nguyên của quá trình Pi trong bƣớc 3

ngay sau khi chúng ta xác định rằng Requesti ≤ Work trong bƣớc 2b . Chúng ta biết

rằng Pi hiện tại không liên quan deadlock vì Requesti ≤ Work . Do đó, chúng ta lạc

quan và khẳng định rằng Pi sẽ không yêu cầu thêm tài nguyên nữa để hoàn thành công

việc của nó; do đó nó sẽ trả về tất cả tài nguyên hiện đƣợc cấp phát tới hệ thống. Nếu

giả định của chúng ta không đúng, deadlock có thể xảy ra sao đó. Deadlock sẽ đƣợc

phát hiện tại thời điểm kế tiếp mà giải thuật phát hiện deadlock đƣợc nạp.

Để minh hoạ giải thuật này, chúng ta x t hệ thống với 5 quá trình P0, P1, P2, P3, P4 và 3 loại tài nguyên A, B, C. Loại tài nguyên A có 7 thể hiện, loại tài nguyên B có 2

thể hiện và loại tài nguyên C có 6 thể hiện. Giả sử rằng tại thời điểm T0, chúng ta có trạng thái cấp phát tài nguyên sau:

Process Allocation Request Available Work

0 2 6 0 0 7

Available = MRV - ∑ Allocation

Maximum Resource Vector A B C A B C A B C A B C A B C 0 2 3 2 0 0 0 0 0 2 0 3 0 0 1 1 0 2 0 0 0 2 0 0 2 1 0 0 1 0 P0 P1 P2 P3 P4

148

Bản 2.29. Ví dụ về phát hiện deadlock

Chúng ta khẳng định rằng hệ thống không ở trong trạng thái deadlock. Thật vậy,

nếu chúng ta thực thi giải thuật an toàn, chúng ta sẽ tìm ra thứ tự sẽ dẫn đến trong Finish[i] = true cho tất cả i. Tức là hệ thống không ở trạng thái deadlock.

Bây giờ giả sử rằng quá trình P2 thực hiện yêu cầu thêm một thể hiện loại C. Ma

trận yêu cầu đƣợc hiệu chỉnh nhƣ sau:

Process

Request A B C 0 0 0 2 2 0 1 0 0 0 1 0 2 0 0 P0 P1 P2 P3 P4

Bản 2.30. Ma tr n Request

Chúng ta khẳng định rằng hệ thống bây giờ bị deadlock. Mặc dù chúng ta có thể

đ i lại tài nguyên đƣợc giữ bởi quá trình P0, số lƣợng tài nguyên sẵn dùng không đủ để

hoàn thành các yêu cầu của các quá trình c n lại. Do đó, deadlock tồn tại và bao gồm

các quá trình P1, P2, P3, P4.

Khi nào thì chúng ta nên nạp giải thuật phát hiện deadlock? Câu trả lời phụ thuộc

vào hai yếu tố:

 Deadlock có khả năng xảy ra thƣờng xuyên nhƣ thế nào?

 Bao nhiêu quá trình sẽ bị ảnh hƣởng bởi deadlock khi nó sẽ ra?

Nếu deadlock xảy ra thƣờng xuyên thì giải thuật phát hiện nên đƣợc nạp lên

thƣờng xuyên. Những tài nguyên đƣợc cấp phát để các quá trình bị deadlock sẽ rảnh

cho đến khi deadlock có thể bị phá vỡ. Ngoài ra, số lƣợng quá trình liên quan trong chu

trình deadlock có thể tăng lên. Deadlock xảy ra chỉ khi một số quá trình thực hiện yêu

cầu mà không đƣợc cấp tài nguyên tức thì. Yêu cầu này có thể là yêu cầu cuối hoàn

thành một chuỗi các quá trình đang yêu cầu. Ngoài ra, chúng ta có thể nạp giải thuật

phát hiện mọi khi một yêu cầu cho việc cấp phát không thể đƣợc cấp tức thì. Dĩ nhiên,

nạp giải thuật phát hiện deadlock cho mỗi yêu cầu có thể gây ra một chi phí có thể xem

x t trong thời gian tính toán. Một thay đổi ít đắt hơn là nạp giải thuật tại thời điểm ít

thƣờng xuyên hơn - ví dụ, một lần một giờ hay bất cứ khi nào việc sử dụng CPU rơi

149

xuống thấp hơn 40%.

Mỗi khi deadlock đƣợc phát hiện, hệ điều hành thực hiện một vài giải pháp để thoát

khỏi deadlock. Sau đây là một vài giải pháp có thể:

(1) Thoát tất cả các tiến trình bị deadlock. Đây là một giải pháp đơn giản nhất,

thƣờng đƣợc các hệ điều hành sử dụng nhất.

(2) Sao lƣu lại mỗi tiến trình bị deadlock tại một vài điểm kiểm tra đƣợc định nghĩa

trƣớc, sau đó khởi động lại tất cả các tiến trình. Giải pháp này yêu cầu hệ điều

hành phải lƣu lại các thông tin cần thiết tại điểm dừng của tiến trình, đặc biệt là

con trỏ lệnh và các tài nguyên tiến trình đang sử dụng, để có thể khởi động lại

tiến trình đƣợc. Giải pháp này có nguy cơ xuất hiện deadlock trở lại là rất cao,

vì khi tất cả các tiến trình đều đƣợc reset trở lại thì việc tranh chấp tài nguyên là

khó tránh khỏi. Ngoài ra hệ điều hành thƣờng phải chi phí rất cao cho việc tạm

dừng và tái kích hoạt tiến trình.

(3) Chỉ kết thúc một tiến trình trong tập tiến trình bị deadlock, thu hồi tài nguyên

của tiến trình này, để cấp phát cho một tiến trình nào đó trong tập tiến trình

deadlock để giúp tiến trình này ra khỏi deadlock, rồi gọi lại thuật toán kiểm tra

deadlock để xem hệ thống đ ra khỏi deadlock hay chƣa, nếu rồi thì dừng, nếu

chƣa thì tiếp tục giải phóng thêm tiến trình khác. Và lần lƣợt nhƣ thế cho đến

khi tất cả các tiến trình trong tập tiến trình deadlock đều ra khỏi tình trạng

deadlock. Trong giả pháp này vấn đề đặt ra đối với hệ điều hành là nên chọn

tiến trình nào để giải phóng đầu tiên và dựa vào tiêu chuẩn nào để chọn lựa sao

cho chi phí để giải phóng deadlock là thấp nhất.

(4) Tập trung toàn bộ quyền ƣu tiên sử dụng tài nguyên cho một tiến trình, để tiến

trình này ra khỏi deadlock, và rồi kiểm tra xem hệ thống đ ra khỏi deadlock

hay chƣa, nếu rồi thì dừng lại, nếu chƣa thì tiếp tục. Lần lƣợt nhƣ thế cho đến

khi hệ thống ra khỏi deadlock. Trong giải pháp này hệ điều hành phải tính đến

chuyện tái kích hoạt lại tiến trình sau khi hẹ thống ra khỏi deadlock.

Đối với các giải pháp 3 và 4 , hệ điều hành dựa vào các tiêu chuẩn sau đây để

chọn lựa tiến trình giải phóng hay ƣu tiên tài nguyên: Thời gian xử lý ít nhất; Thời gian

cần CPU c n lại ít nhất; Tài nguyên cần cấp phát là ít nhất; Quyền ƣu tiên là thấp nhất.

Nếu phƣơng pháp kết thúc đƣợc dùng thì với một tập hợp các quá trình deadlock

150

đƣợc cho, chúng ta phải xác định quá trình nào nên đƣợc kết thúc trƣớc trong sự cố

gắng để phá vỡ deadlock. Quyết định này dựa vào chính sách kinh tế mà chúng ta nên

hủy bỏ quá trình nào thì sự kết thúc của quá trình đó sẽ chịu chi phí tối thiểu. Tuy

nhiên, thuật ngữ chi phí tối thiểu là không chính xác. Nhiều yếu tố có thể xác định quá

trình nào đƣợc chọn bao gồm:

 Độ ƣu tiên của quá trình là gì.

 Quá trình đ đƣợc tính toán bao lâu và bao lâu nữa quá trình sẽ tính toán trƣớc

khi hoàn thành công việc đƣợc chỉ định của nó.

 Bao nhiêu và loại tài nguyên gì quá trình đang sử dụng.

 Bao nhiêu tài nguyên nữa quá trình cần để hoàn thành

 Bao nhiêu quá trình sẽ cần đƣợc kết thúc.

 Quá trình là giao tiếp hay dạng bó.

2.9. TÓM TẮT

Trong suốt chu trình sống, tiến trình chuyển đổi qua lại giữa các trạng thái ready,

running và blocked. Bộ định thời biểu của hệ điều hành chịu trách nhiệm áp dụng một

gỉai thuật định thời thích hợp để chọn tiến trình phù hợp đƣợc sử dụng CPU, và bộ

phân phát sẽ chuyển giao CPU cho tiến trình này. Các giải thuật định thời biểu thông

dụng: FCFS, Round Robin, định thời biểu với độ ƣu tiên, SJF, định thời biểu phản hồi

đa cấp.

Một số tiến trình trong hệ thống có nhu cầu trao đổi thông tin để phối hợp hoạt

động, do mỗi tiến trình có một không gian địa chỉ độc lập nên việc liên lạc chỉ có thể

thực hiện thông qua các cơ chế do hệ điều hành cung cấp.

Khi các tiến trình trao đổi thông tin, chia s tài nguyên chung, cần phải đồng bộ

hoá hoạt động của chúng chủ yếu do yêu cầu độc quyền truy xuất hoặc phối hợp hoạt

động. Miền găng là đoạn lệnh trong chƣơng trình có khả năng phát sinh mâu thuẫn truy

xuất. Để không xảy ra mâu thuẫn truy xuất, cần đảm bảo tại một thời điểm chỉ có một

tiến trình đƣợc vào miền găng.

Trạng thái deadlock xảy ra khi hai hay nhiều quá trình đang chờ không xác định

một sự kiện mà có thể đƣợc gây ra chỉ bởi một trong những quá trình đang chờ. Về

151

nguyên tắc, có ba phƣơng pháp giải quyết deadlock:

 Sử dụng một số giao thức để ngăn chặn hay tránh deadlock, đảm bảo rằng hệ

thống sẽ không bao giờ đi vào trạng thái deadlock.

 Cho ph p hệ thống đi vào trạng thái deadlock, phát hiện và sau đó phục hồi.

 Bỏ qua vấn đề deadlock và giả vờ deadlock chƣa bao giờ xảy ra trong hệ

thống. Giải pháp này là một giải pháp đƣợc dùng bởi hầu hết các hệ điều hành

bao gồm UNIX.

Trƣờng hợp deadlock có thể xảy ra nếu và chỉ nếu bốn điều kiện cần xảy ra cùng

một lúc trong hệ thống: loại trừ lẫn nhau, giữ và chờ cấp thêm tài nguyên, không ƣu

tiên, và tồn tại chu trình trong đồ thị cấp phát tài nguyên. Để ngăn chặn deadlock,

chúng ta đảm bảo rằng ít nhất một điều kiện cần không bao giờ xảy ra.

Một phƣơng pháp để tránh deadlock mà ít nghiêm ngặt hơn giải thuật ngăn chặn

deadlock là có thông tin trƣớc về mỗi quá trình sẽ đang dùng tài nguyên nhƣ thế nào.

Ví dụ, giải thuật Banker cần biết số lƣợng tối đa của mỗi lớp tài nguyên có thể đƣợc

yêu cầu bởi mỗi quá trình. Sử dụng thông tin này chúng ta có thể định nghĩa giải thuật

tránh deadlock.

Nếu hệ thống không thực hiện một giao thức để đảm bảo rằng deadlock sẽ không

bao giờ xảy ra thì lƣợc đồ phát hiện và phục hồi phải đƣợc thực hiện. Giải thuật phát

hiện deadlock phải đƣợc nạp lên để xác định deadlock có thể xảy ra hay không. Nếu

deadlock đƣợc phát hiện hệ thống phải phục hồi bằng cách kết thúc một số quá trình bị

deadlock hay đ i lại tài nguyên từ một số quá trình bị deadlock.

Trong một hệ thống mà nó chọn các nạn nhân để phục hồi về trạng thái trƣớc đó

chủ yếu dựa trên cơ sở yếu tố chi phí, việc đói tài nguyên có thể xảy ra. Kết quả là quá

152

trình đƣợc chọn không bao giờ hoàn thành công việc đƣợc chỉ định của nó.

Câu hỏi ôn tập

1. Phân biệt tiến trình và tiểu trình?

2. Phân biệt chƣơng trình và tiến trình?

3. Tiến trình có thể có bao nhiêu trạng thái?

4. Chƣơng trình có phải là tiến trình không? Tại sao?

5. Thuật ngữ PCB có nghĩa là gì?Chức năng của nó?

6. Kể ra các tiêu chí điều phối tiến trình nhƣ thế nào thì tối ƣu?

7. Định nghĩa thời gian hoàn thành, thông lƣợng, thời gian chờ ?

8. Nhận x t về thời gian chuyển ngữ cảnh của CPU? Thời gian CPU bỏ ra để

chuyển từ việc phục vụ cho quá trình này sang quá trình khác, lúc này CPU làm

gì? Tại sao những lần chuyển ngữ cảnh phụ thuộc nhiều vào hỗ trợ phần cứng?

9. Nêu ý nghĩa các chiến lƣợc định thời biểu tiến trình? Phân tích ƣu, khuyết của

các chiến lƣợc định thời biểu? Chiến lƣợc nào tối ƣu nhất?

10. Phân biệt chiến lƣợc định thời biểu độc quyền không trƣng dụng và không độc

quyền trƣng dụng ?Chiến lƣợc nào tối ƣu hơn?

11. Ý tƣởng của giải thuật SJF trƣng dụng và không trƣng dụng, Ƣu điểm và

khuyết điểm của giải thuật SJF, khó khăn thật sự của giải thuật này là gì?

12. Nêu giải pháp giải quyết vấn đề chết đói Starvation trong giải thuật lập lịch

biểu theo kiểu ƣu tiên trƣng dụng không độc quyền .

13. Tại sao phổ thời gian q trong giải thuật Round Robin phải đƣợc chọn là đủ lớn?

14. Kể tên các chiến lƣợc phân công công việc của hệ điều hành?

15. Thế nào là miền găng hay đoạn găng Critical Section ?cho ví dụ?

16. Phân biệt tài nguyên găng Critical Resouce và đoạn găng (CS)?cho ví dụ để

phân biệt? điều kiện cho các tiến trình muốn sử dụng đoạn găng là gì?

17. Tại sao phải đồng bộ hóa quá trình? Các giải pháp để đồng bộ hóa?Thế nào là

chờ đợi tích cực?Giải pháp đƣợc hổ trợ bởi hệ điều hành là giải pháp gì?nó có

153

ƣu điểm gì?

18. Phân biệt Deadlock và Starvation?Cho ví dụ trong hệ điều hành?

R1

P1

P2

R2

19. Đồ thị cấp phát tài nguyên sau có xảy ra deadlock không? Tại sao?

20. Phƣơng pháp quản lý deadlock?có thể đ i lại tài nguyên từ quá trình đạng bị

deadlock hay không?Nếu có đ i lại bằng cách nào?

21. Tại sao phải xử lý song song?Nêu một số phƣơng pháp lập trình xử lý song

song?

22. Thuật ngữ Monitor trong hệ điều hành là gì?dùng Monitor để làm gì?

23. Thuật ngữ Semaphore là gì?dùng semaphore để làm gì? định nghĩa 2 thao thác

truy cập semaphore?

24. Thuật ngữ race condition là gì?Lấy ví dụ trong hệ điều hành?

25. Hiện tƣợng “dùng đúp” dữ liệu và “mất dữ liệu” ở bài toán Producer và

Cunsumer di n ra khi nào? Biện pháp khắc phục?

26. Nêu giải pháp tránh tắc nghẽn cho bài toán 5 nhà triết gia ăn tối?

27. Nêu Ý nghĩa 3 bài toán nguyên thủy trong hệ điều hành?

28. Vấn đề bỏ qua hoàn toàn deadlock và xem nhƣ nó không xảy ra trong hệ thống

có gây ảnh hƣởng gì đến hệ thống không? Tại sao?

154

29. Tìm hiểu tiến trình trong Windows NT?

30. Giả sử một hệ thống ở trong trạng thái không an toàn nhƣng không bị deadlock.

Hệ thống có nhất thiết đi vào trạng thái deadlock hay không? Giải thích?

31. X t một hệ thống gồm 4 loại tài nguyên cùng loại. Hệ thống có 3 quá trình, mỗi

quá trình cần tối đa 2 tài nguyên. Chứng tỏ hệ thống không bị deadlocked.

R1

R2

P2

P1

P3

R5

P4

R3

R4

32. Ý nghĩa đồ thị chờ?Vẽ đồ thị chờ biết rằng đồ thị cấp phát tài nguyên nhƣ sau?

33. Xác định thời lƣợng q là một nhiệm vụ khó khăn. Giả sử chi phí trung bình cho

một lần chuyển đổi ngữ cảnh là s, và thời gian trung bình một tiến trình hƣớng

nhập xuất sử dụng CPU trƣớc khi phát sinh một yêu cầu nhập xuất là t ( t>>s).

Thảo luận các tác động đến sự thực hiện của hệ thống khi chọn q theo các quy

tắc sau :

a) q = s

b) s < q < t

c) q = t

d) q > t

34. Giả sử một hệ điều hành áp dụng giải thuật định thời biểu multilevel feedback

với 5 mức ƣu tiên giảm dần . Thời lƣợng q dành cho hàng đợi cấp 1 là 0,5s.

Mỗi hàng đợi cấp thấp hơn sẽ có thời lƣợng q dài gấp đôi hàng đợi ứng với mức

ƣu tiên cao hơn nó. Một tiến trình khi vào hệ thống sẽ đƣợc đƣa vào hàng đợi

mức cao nhất, và chuyển dần xuống các hàng đợi bên dƣới sau mỗi lƣợt sử

155

dụng CPU. Một tiến trình chỉ có thể bị thu hồi CPU khi đ sử dụng hết thời

lƣợng q dành cho nó. Hệ thống có thể thực hiện các công việc xử lý theo lô

hoặc tƣơng tác, và mỗi công việc lại có thể hƣớng xử lý hay hƣớng nhập xuất.

a) Giải thích tại sao hệ thống này hoạt động không hiệu quả?

b) Cần phải thay đổi tối thiểu nhƣ thế nào để hệ thống điều phối các công

việc với những bản chất khác biệt nhƣ thế tốt hơn?

Bài tập

Bài 1. Xét tập các tiến trình sau với thời gian yêu cầu CPU và độ ƣu tiên kèm theo

Tiến trình Thời điểm vào RL Thời gian CPU Độ ƣu tiên

0 10 3 P1

1 1 1 P2

2 2 3 P3

3 1 4 P4

4 5 2 P5

Giả sử các tiến trình cùng đƣợc đƣa vào hệ thống tại thời điểm 0

a) Cho biết kết quả định thời biểu hoạt động của các tiến trình trên theo giải thuật

FCFS; SJF độc quyền và không độc quyền; định thời biểu theo độ ƣu tiên độc

quyền độ ƣu tiên 1 cao nhất ; và RR q=2).

b) Cho biết thời gian lƣu lại trong hệ thống Turnaround Time của từng tiến trình

trong từng giải thuật định thời biểu ở câu a.

c) Cho biết thời gian chờ trong hệ thống Waiting time của từng tiến trình trong

từng giải thuật định thời biểu ở câu a.

d) Cho biết thời gian chờ trung bình trong hệ thống đối với mỗi giải thuật định thời

biểu ở câu a.

e) Giải thuật định thời biểu nào trong các giải thuật ở câu a cho thời gian chờ trung

156

bình là cực tiểu?

Bài 2. Giả sử có các tiến trình sau trong hệ thống :

Tiến trình Thời điểm vào RL Thời gian CPU

0.0 8

0.4 4

1.0 1 P1 P2 P3

Sử dụng chiến lƣợc định thời biểu độc quyền và các thông tin có đƣợc tại thời điểm ra

quyết định để trả lời các câu hỏi sau đây:

a) Cho biết thời gian lƣu lại trung bình trong hệ thống Turnaround Time của các

tiến trình trong giải thuật định thời biểu FCFS.

b) Cho biết thời gian lƣu lại trung bình trong hệ thống Turnaround Time của các

tiến trình trong giải thuật định thời biểu SJF không độc quyền.

c) Giải thuật SJF dự định cải tiến sự thực hiện của hệ thống, nhƣng lƣu ý chúng ta

phải chọn định thời biểu P1 tại thời điểm 0 vì không biết rằng sẽ có hai tiến trình ngắn hơn vào hệ thống sau đó. Thử tính thời gian lƣu lại trung bình trong hệ

thống nếu để CPU nhàn rỗi trong 1 đơn vị thời gian đầu tiên và sau đó sử dụng

SJF để định thời biểu. Lƣu ý P1 và P2 sẽ phải chờ trong suốt thời gian nhàn rỗi này, do vậy thời gian chờ của chúng tăng lên. Giải thuật định thời biểu này đƣợc

biết đến nhƣ định thời biểu dựa trên thông tin về tƣơng lai.

Bài 3. Cho tập hợp các tiến trình nhƣ trong bảng. Có 4 hàng đợi: Q0, Q1, Q2, Q3 với

phổ thời gian phục vụ nhƣ trong hình dƣới. H y lập biểu đồ Gannt để minh họa sự thực

thi của các tiến trình với giải thuật: hàng đợi phản hồi đa cấp. Tính thời gian chờ trung

bình và tổng số lần chuyển đổi ngữ cảnh?

Tiến trình Thời điểm vào RL Thời gian CPU ms

0 100

10 75

20 15

25 8

30 20

40 50

157

P1 P2 P3 P4 P5 P6

Q0

Q1

Q2

Q3

Bài 4. Cho tập hợp các quá trình, ma trận max, allocation và 3 loại tài nguyên A có 10

thể hiện , B có 7 thể hiện , C có 6 thể hiện .

Available ? A B C

Allocation A 5 2 1 1 B 2 1 0 2 C 4 0 0 1 Max A 5 6 4 2 B 3 4 2 4 C 5 4 2 3 Need ? B A C P0 P1 P2 P3

a) Hệ thống có ở trạng thái an toàn không? D y có phải là một d y an toàn hay không? Tại sao? Nếu quá trình P0 yêu cầu thêm 1 tài nguyên loại B và 1 tài nguyên loại C thì thứ tự có an toàn không? Và P0 có đƣợc cấp phát ngay lập tức hay không?Nếu không, P0 có thể cấp phát theo tứ tự nào?

b) Có tất cả bao nhiêu thứ tự an toàn và không an toàn? Liệt kê tất cả các thứ tự

an toàn?Liệt kê tất cả các thứ tự không an toàn?

Bài 5: H y nêu cách xử lý song song cho các biểu thức sau trong một máy tính có hổ

trợ xử lý song song.

a. (-a + (b * (c/2) + (d * d * 4 * c))) / (2 * a)

b. (-b + sqrt(b * b – 4 * a * c)) / (2 * a)

c. sqrt(p * (p - a) * (p - b) * (p - c vớp p = a + b + c * 0.5

Lập trình

Chương trình 1. Viết chƣơng trình đa luồng thực hiện tính tổng n số nguyên đầu tiên

158

n nhập từ bàn phím

Chương trình 2. Viết chƣơng trình đa luồng thực hiện tính tích phân từ a đến b của

hàm f(x).

Chương trình 3. Chƣơng trình tính tích của 2 ma trận A và B kích thƣớc nxm và giá

trị các phần tử trong ma trận đƣợc khởi tạo là các số nguyên ngẫu nhiên từ 1 đến 100.

Chương trình 4. Chƣơng trình sắp xếp giá trị các phần tử trong ma trận tăng dần

giảm dần , giá trị các phần tử trong ma trận đƣợc khởi tạo là các số nguyên ngẫu nhiên

từ 1 đến 100.

Chương trình 5. Chƣơng trình mô phỏng bài toán 5 nhà triết gia ăn tối. và giải quyết

tình trạng deadlocked cho bài toán này.

Chương trình 6. Một ph ng máy tính gồm 40 máy, số lƣợng sinh viên cần sử dụng là

nhiều hơn số máy. H y viết chƣơng trình xử lý việc sử dụng máy tính sao cho mỗi máy

chỉ có một sinh viên đƣợc sử dụng.

Chương trình 7. Trong giảng đƣờng có n ghế, sinh viên đăng ký vào học thông

thƣờng lớn hơn số ghế 10%. H y viết chƣơng trình mô phỏng sinh viên vào lớp học,

nếu có ghế thì vào học, ngƣợc lại nghỉ.

159

Ghi chú: Học viên có thể tự chọn bài toán có tính chất song song để lập trình.

TÀI LIỆU TH M KHẢO

[3] Trần Hạnh Nhi, Giáo trình hệ điều hành nâng cao, Đại học Khoa học Tự

nhiên TP.HCM, 2003.

[4] [Lê Khắc Nhiên n, Hoàng Kiếm], Giáo trình Nh p môn hệ điều hành, Đại

học Khoa học Tự nhiên TP.HCM, 2003.

[5] Nguyễn Kim Tuấn, Giáo trình Hệ điều hành, Đại học Huế, 2004.

160

[6] Nguyễn Ph Trường, Giáo trình Hệ điều hành, Đại học Cần Thơ,2005.

CHƯ NG 3: QUẢN L BỘ NHỚ

3.1. MỤC TIÊU

Bài học này sẽ giúp các bạn hình dung những vấn đề cần quan tâm khi thiết kế

thành phần quản lý bộ nhớ của hệ điều hành.

Sau khi học xong chƣơng này, ngƣời học nắm đƣợc những kiến thức sau:

 Hi u các cách hác nhau đ qu n bộ nhớ

 Hi u tiếp c n qu n bộ d ng ỹ thu t phân trang và phân đoạn

 V n dụng một tiếp c n qu n bộ nhớ ph hợp với hệ thống xác định

Bộ nhớ chính là thiết bị lƣu trữ duy nhất thông qua đó CPU có thể trao đổi thông

tin với môi trƣờng ngoài, do vậy nhu cầu tổ chức, quản lý bộ nhớ là một trong những

nhiệm vụ trọng tâm hàng đầu của hệ điều hành. Bộ nhớ chính đƣợc tổ chức nhƣ một

mảng một chiều các từ nhớ word , mỗi từ nhớ có một địa chỉ. Việc trao đổi thông tin

với môi trƣờng ngoài đƣợc thực hiện thông qua các thao tác đọc hoặc ghi dữ liệu vào

một địa chỉ cụ thể nào đó trong bộ nhớ.

3.2. NHIỆM VỤ QUẢN L BỘ NHỚ

Trong các hệ thống đơn chƣơng trình uniprogramming , trên bộ nhớ chính ngoài

hệ điều hành, chỉ có một chƣơng trình đang thực hiện. Trong các hệ thống đa chƣơng

multiprogramming trên bộ nhớ chính ngoài hệ điều hành, có thể có nhiều tiến trình

đang hoạt động. Do đó nhiệm vụ quản lý bộ nhớ của hệ điều hành trong hệ thống đa

chƣơng trình sẽ phức tạp hơn nhiều so với trong hệ thống đơn chƣơng trình. Trong hệ

thống đa chƣơng bộ phận quản lý bộ nhớ phải có nhiệm vụ đƣa bất kỳ một tiến trình

vào bộ nhớ khi có yêu cầu, kể cả khi trên bộ nhớ chính không c n không gian trống,

ngoài ra nó phải bảo vệ chính hệ điều hành và các tiến trình trên bộ nhớ tránh các

trƣờng hợp truy xuất bất hợp lệ xảy ra. Nhƣ vậy việc quản lý bộ nhớ trong các hệ thống

đa chƣơng là quan trọng và cần thiết. Khi thiết ế thành phần qu n bộ nhớ ph i thực

Sự tương ứng giữa địa chỉ logic và địa chỉ v t : làm cách nào để chuyển đổi một

hiện các nhiệm vụ sau đây:

địa chỉ dạng danh biểu tƣợng trƣng symbolic trong chƣơng trình ngƣời dùng

161

thành một địa chỉ thực trong bộ nhớ chính? Nhiệm vụ này đƣợc thực hiện bởi đơn

vị quản lý bộ nhớ MMU Memory Management Unit đƣợc định nghĩa trong phần

sau.

Sự tái định vị (Relocation): Trong các hệ thống đa chƣơng, không gian bộ nhớ

chính thƣờng đƣợc chia s cho nhiều tiến trình khác nhau và yêu cầu bộ nhớ của

các tiến trình luôn lớn hơn không gian bộ nhớ vật lý mà hệ thống có đƣợc. Vấn đề

là không gian bộ nhớ là có hạn trong khi yêu cầu bộ nhớ của tiến trình là vô hạn.

Do dó, một chƣơng trình đang hoạt động trên bộ nhớ cũng có thể bị đƣa ra đĩa

(swap out) và nó sẽ đƣợc đƣa vào lại (swap in) bộ nhớ tại một thời điểm thích hợp

sau đó. Đây là cơ chế hoán vị (Swap).

B o vệ bộ nhớ (Protection): làm thế nào để ngăn chặn các tiến trình xâm phạm đến

vùng nhớ đƣợc cấp phát cho tiến trình khác?

Mỗi tiến trình phải đƣợc bảo vệ để chống lại sự truy xuất bất hợp lệ vô tình hay có

chủ ý của các tiến trình khác. Để thực hiện điều này hệ thống quản lý bộ nhớ phải

biết đƣợc không gian địa chỉ của các tiến trình khác trên bộ nhớ và phải kiểm tra tất

cả các yêu cầu truy xuất bộ nhớ của mỗi tiến trình khi tiến trình đƣa ra địa chỉ truy

xuất. Điều này khó thực hiện vì không thể xác định địa chỉ của các chƣơng trình

trong bộ nhớ chính trong quá trình biên dịch mà phải thực hiện việc tính toán địa

chỉ tại thời điểm chạy chƣơng trình. Hệ điều hành có nhiều chiến lƣợc khác nhau để

thực hiện điều này. Điều quan trọng nhất mà hệ thống quản lý bộ nhớ phải thực

hiện là không cho ph p các tiến trình của ngƣời dùng truy cập đến bất kỳ một vị trí

nào của chính hệ điều hành, ngoại trừ vùng dữ liệu và các rountine mà hệ điều hành

cung cấp cho chƣơng trình ngƣời dùng.

Chia sẻ thông tin: làm thế nào để cho ph p hai tiến trình có thể chia s thông tin

trong bộ nhớ?

162

Bất kỳ một chiến lƣợc nào đƣợc cài đặt đều phải có tính mềm d o để cho phép nhiều tiến trình có thể truy cập đến cùng một địa chỉ trên bộ nhớ chính. Ví dụ, khi có nhiều tiến trình cùng thực hiện một chƣơng trình thì việc cho phép mỗi tiến trình cùng truy cập đến một bản copy của chƣơng trình sẽ thuận lợi hơn khi cho phép mỗi tiến trình truy cập đến một bản copy sở hữu riêng. Các tiến trình đồng thực hiện trên một vài công việc có thể cần để chia s truy cập đến cùng một cấu trúc dữ liệu. Hệ thống quản lý bộ nhớ phải điều khiển việc truy cập đến không gian bộ nhớ đƣợc chia s mà không vi phạm đến các yêu cầu bảo vệ bộ nhớ. Ngoài ra, trong môi

trƣờng hệ điều hành đa nhiệm hệ điều hành phải chia s không gian nhớ cho các

tiến trình để hệ điều hành có thể nạp đƣợc nhiều tiến trình vào bộ nhớ để các tiến trình này có thể hoạt động đồng thời với nhau.

T chức bộ nhớ logic: Bộ nhớ chính của hệ thống máy tính đƣợc tổ chức nhƣ là

một d ng hoặc một mảng, không gian địa chỉ bao gồm một d y có thứ tự các Byte

hoặc các word. Bộ nhớ phụ cũng đƣợc tổ chức tƣơng tự. Mặc dù việc tổ chức này

có sự kết hợp chặt chẽ với phần cứng thực tế của máy nhƣng nó không phù hợp với

các chƣơng trình. Đa số các chƣơng trình đều đƣợc chia thành các module, một vài

trong số đó là không thể thay đổi read only, execute only và một vài trong số đó

chứa dữ liệu là có thể thay đổi. Và không gian địa chỉ logic của chƣơng trình này sẽ

do CPU sinh ra tại thời điểm biên dịch. Nếu hệ điều hành và phần cứng máy tính có

thể giao dịch một cách hiệu quả với các chƣơng trình của ngƣời dùng và dữ liệu

trong các module thì một số thuận lợi có thể thấy rõ sau đây:

 Các module có thể đƣợc viết và biên dịch độc lập, với tất cả các tham chiếu

từ một module này đến module khác đƣợc giải quyết bởi hệ thống tại thời điểm

chạy.

 Các mức độ khác nhau của sự bảo vệ, read-only, execute-only, có thể cho ra

các module khác nhau.

 Nó có thể đƣa ra các cơ chế để các module có thể đƣợc chia s giữa các tiến

trình.

Kỹ thuật đáp ứng cho yêu cầu này là sự phân đoạn segmentation , đây là một trong

những kỹ thuật quản lý bộ nhớ đƣợc trình bày trong chƣơng này.

Qu n bộ nhớ v t : làm cách nào để mở rộng bộ nhớ có sẵn nhằm lƣu trữ đƣợc

nhiều tiến trình đồng thời?

Tổ chức bộ nhớ vật lý Physical organization : Nhƣ chúng ta đ biết bộ nhớ

máy tính đƣợc tổ chức theo hai cấp: bộ nhớ chính và bộ nhớ phụ. Bộ nhớ chính

cung cấp một tốc độ truy cập dữ liệu cao, nhƣng dữ liệu trên nó phải đƣợc làm tƣơi

thƣờng xuyên và không thể tồn tại lâu dài trên nó. Bộ nhớ phụ có tốc độ truy xuất

chậm và r tiền hơn so với bộ nhớ chính nhƣng nó không cần làm tƣơi thƣờng

xuyên. Vì thế bộ nhớ phụ có khả năng lƣu trữ lớn và cho ph p lƣu trữ dữ liệu và

chƣơng trình trong một khoảng thời gian dài, trong khi đó bộ nhớ chính chỉ để giữ

163

(hold) một khối lƣợng nhỏ các chƣơng trình và dữ liệu đang đƣợc sử dụng tại thời

điểm hiện tại. Trong giản đồ hai cấp này, việc tổ chức luồng thông tin giữa bộ nhớ

chính và bộ nhớ phụ là một nhiệm vụ quan trọng của hệ thống. Sự chịu trách nhiệm

cho luồng này có thể đƣợc gán cho từng ngƣời lập trình riêng, nhƣng điều này là

không hợp lý và có thể gây rắc rối, là do hai nguyên nhân:

 Không gian bộ nhớ chính dành cho các chƣơng trình cùng với dữ liệu của nó

thƣờng là không đủ, trong trƣờng hợp này, ngƣời lập trình phải tiến hành một

thao tác phủ lắp Overlaying , theo đó chƣơng trình và dữ liệu đƣợc tổ chức

thành các module khác nhau có thể đƣợc gán trong cùng một vùng của bộ nhớ,

trong đó có một chƣơng trình chính chịu trách nhiệm chuyển các module vào

và ra khi cần.

 Trong môi trƣờng đa chƣơng trình, ngƣời lập trình không thể biết tại một thời

điểm xác định có bao nhiêu không gian nhớ còn trống hoặc khi nào thì không

gian nhớ sẽ trống.

Nhƣ vậy nhiệm vụ di chuyển thông tin giữa hai cấp bộ nhớ phải do hệ thống

thực hiện. Đây cũng là nhiệm vụ cơ bản của thành phần quản lý bộ nhớ.

Các giải pháp quản lý bộ nhớ phụ thuộc rất nhiều vào đặc tính phần cứng và

trải qua nhiều giai đoạn cải tiến để trở thành những giảp pháp khá thỏa đáng nhƣ

hiện nay.

3.3. KIẾN THỨC NỀN

3.3.1. Một chương trình qua nhiều ước xử lý

Thông thƣờng, một chƣơng trình đƣợc lƣu trữ trên đĩa đĩa từ nhƣ một tập tin nhị

phân có thể xử lý. Để thực hiện chƣơng trình, cần nạp chƣơng trình vào bộ nhớ chính,

tạo lập tiến trình tƣơng ứng để xử lý. Trong quá trình thực thi, tiến trình có thể đƣợc di

chuyển giữa đĩa và bộ nhớ. Tập hợp các chƣơng trình trên đĩa đang chờ đƣợc nạp vào

bộ nhớ để tiến hành xử lý đƣợc gọi là hàng đợi nh p (input queue).

Các địa chỉ trong chƣơng trình nguồn là địa chỉ danh biểu tƣợng trƣng, vì thế, một

chƣơng trình phải trải qua nhiều giai đoạn xử lý để chuyển đổi các địa chỉ này thành

các địa chỉ tuyệt đối trong bộ nhớ chính. Thủ tục thông thƣờng là chọn một trong

những quá trình trong hàng đợi nhập và nạp quá trình đó vào bộ nhớ. Khi một quá trình

đƣợc thực thi, nó truy xuất các chỉ thị và dữ liệu từ bộ nhớ. Cuối cùng, một quá trình

164

kết thúc và không gian bộ nhớ của nó đƣợc giải phóng.

Hình 3.1. X nhiều bước của chương trình người d ng16

Hầu hết các hệ thống cho ph p một quá trình ngƣời dùng nằm ở bất cứ phần nào

của bộ nhớ vật lý. Do đó, mặc dù không gian địa chỉ của máy tính bắt đầu tại 00000,

nhƣng địa chỉ đầu tiên của quá trình ngƣời dùng không cần tại 00000. Sắp xếp này ảnh

hƣởng đến địa chỉ mà chƣơng trình ngƣời dùng có thể dùng. Trong hầu hết các trƣờng

hợp, một chƣơng trình ngƣời dùng sẽ đi qua một số bƣớc-một vài trong chúng có thể là

165

tuỳ chọn-trƣớc khi đƣợc thực thi hình 3.1 . Các địa chỉ có thể đƣợc hiện diện trong 16 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.138

những cách khác trong những bƣớc này. Các địa chỉ trong chƣơng trình nguồn thƣờng

là những danh biểu. Một trình biên dịch sẽ gắn kết các địa chỉ danh biểu tới các địa chỉ

có thể tái định vị chẳng hạn nhƣ 14 Bytes từ vị trí bắt đầu của module này . Bộ soạn

thảo liên kết hay bộ nạp sẽ liên kết các địa chỉ có thể tái định vị tới địa chỉ tuyệt đối

chẳng hạn 74014 . Mỗi liên kết là một ánh xạ từ một không gian địa chỉ này tới một

không gian địa chỉ khác.

Có thể thực hiện gắn kết các chỉ thị và dữ liệu tới các địa chỉ bộ nhớ có thể đƣợc

thực hiện tại bất cứ bƣớc nào theo cách sau đây:

 Thời đi m bi n dịch: nếu tại thời điểm biên dịch, có thể biết vị trí mà tiến trình sẽ

thƣờng trú trong bộ nhớ, trình biên dịch có thể phát sinh ngay m với các địa chỉ

tuyệt đối. Tuy nhiên, nếu về sau có sự thay đổi vị trí thƣờng trú lúc đầu của chƣơng

trình, cần phải biên dịch lại chƣơng trình.

 Thời đi m nạp: nếu tại thời điểm biên dịch, chƣa thể biết vị trí mà tiến trình sẽ

thƣờng trú trong bộ nhớ, trình biên dịch cần phát sinh m tƣơng đối. Sự liên kết địa

chỉ đƣợc trì ho n đến thời điểm chƣơng trình đƣợc nạp vào bộ nhớ, lúc này các địa

chỉ tƣơng đối sẽ đƣợc chuyển thành địa chỉ tuyệt đối do đ biết vị trí bắt đầu lƣu trữ

tiến trình. Khi có sự thay đổi vị trí lƣu trữ, chỉ cần nạp lại chƣơng trình để tính toán

lại các địa chỉ tuyệt đối, mà không cần biên dịch lại.

 Thời đi m x : nếu có nhu cầu di chuyển tiến trình từ vùng nhớ này sang vùng

nhớ khác trong quá trình tiến trình xử lý, thì thời điểm gắn kết địa chỉ phải trì

hoãn đến tận thời điểm xử lý. Để thực hiện gắn kết địa chỉ vào thời điểm xử lý, cần

sử dụng cơ chế phần cứng đặc biệt.

3.3.2. Không gian địa chỉ luận lý và không gian địa chỉ vật lý

Một trong những hƣớng tiếp cận trung tâm nhằm tổ chức quản lý bộ nhớ một

cách hiệu qủa là đƣa ra khái niệm không gian địa chỉ đƣợc xây dựng trên không gian

nhớ vật lý, việc tách rời hai không gian này giúp hệ điều hành d dàng xây dựng các cơ

chế và chiến lƣợc quản lý bộ nhớ hiệu quả:

 Địa chỉ ogic : c n gọi là luận lý hay địa chỉ ảo, là tất cả các địa chỉ do bộ xử lý tạo

ra.

 Địa chỉ v t : là địa chỉ thực tế của bộ nhớ chính mà trình quản lý bộ nhớ nhìn

166

thấy và thao tác.

 Không gian địa chỉ u n : là tập hợp tất cả các địa chỉ ảo phát sinh bởi một

chƣơng trình.

 Không gian v t : là tập hợp tất cả các địa chỉ vật lý tƣơng ứng với các địa chỉ ảo.

Địa chỉ ảo và địa chỉ vật lý là nhƣ nhau trong phƣơng thức gắn kết địa chỉ tại thời điểm

biên dịch cũng nhƣ thời điểm nạp. Nhƣng có sự khác biệt giữa địa chỉ ảo và địa chỉ vật

lý trong phƣơng thức gắn kết tại thời điểm thực thi.

3.3.3. Bộ quản lý ộ nhớ MMU)

MMU (memory-management unit) à một cơ chế phần cứng được s dụng đ thực

hiện chuy n đ i địa chỉ o thành địa chỉ v t tại thời đi m thực thi

Chƣơng trình của ngƣời dùng chỉ thao tác trên các địa chỉ ảo, không bao giờ nhìn

thấy các địa chỉ vật lý. Địa chỉ thật sự ứng với vị trí của dữ liệu trong bộ nhớ chỉ đƣợc

xác định khi thực hiện truy xuất đến dữ liệu.

3.3.4. Phủ lắp Overlay)

Để cho ph p một quá trình có kích thƣớc lớn hơn không gian bộ nhớ đƣợc cấp

phát cho nó, ngƣời lập trình sử dụng cơ chế phủ lắp Ý tư ng phủ p à giữ trong bộ

nhớ những chỉ thị và dữ iệu được y u cầu tại b t ỳ thời đi m nào được cho Khi

những chỉ thị đ được y u cầu, chúng được nạp vào hông gian được chiếm trước đ

b i các chỉ thị mà chúng hông còn cần nữa

Ví dụ, x t trình dịch hợp ngữ hai lần two-pass assembler . Trong suốt lần thứ 1,

nó xây dựng bảng danh biểu; sau đó, trong lần thứ 2, nó tạo ra m máy. Chúng ta có

thể phân chia trình dịch hợp ngữ thành m lần 1, m lần 2, bảng danh biểu, và những

thủ tục hỗ trợ chung đƣợc dùng bởi lần 1 và lần 2. Giả sử kích thƣớc của các thành

phần này nhƣ sau:

Lần 1: 70 KB

Lần 2: 80 KB

Bảng danh biểu: 20 KB

Các thủ tục chung: 30 KB

Để nạp mọi thứ một lần, chúng ta cần 200KB bộ nhớ. Nếu bộ nhớ chỉ c n trống

167

150KB, đáng l chúng ta không thể chạy quá trình này. Tuy nhiên, chú ý rằng lần 1 và

lần 2 không cần ở trong bộ nhớ cùng một lúc. Do đó, chúng ta định nghĩa hai phủ lắp.

Phủ lắp A là bảng danh biểu, các thủ tục chung, lần 1, và phủ lắp B là bảng danh biểu,

các thủ tục chung, lần 2.

Chúng ta bổ sung trình điều khiển phủ lắp 10 KB và bắt đầu với phủ lắp A trong

bộ nhớ. Khi chúng ta kết thúc lần 1, chúng ta nhảy tới trình điều khiển phủ lắp, trình

điều khiển này sẽ đọc phủ lắp B vào trong bộ nhớ, viết chồng lên phủ lắp A và sau đó

chuyển điều khiển tới lần 2. Phủ lắp A chỉ cần 120KB, ngƣợc lại phủ lắp B cần 130KB

(Hình 3.2 . Bây giờ chúng ta có thể chạy trình hợp ngữ trong 150KB bộ nhớ. Nó sẽ nạp

nhanh hơn vì rất ít dữ liệu cần đƣợc chuyển trƣớc khi việc thực thi bắt đầu. Tuy nhiên,

nó sẽ chạy chậm hơn do nhập/xuất phụ đọc m cho phủ lắp A qua m cho phủ lắp B.

Hình 3.2. Các phủ p cho một bộ hợp ngữ dịch hai ần

M cho phủ lắp A và m cho phủ lắp B đƣợc giữ trên đĩa nhƣ những hình ảnh bộ

nhớ tuyệt đối, và đƣợc đọc bởi trình điều khiển phủ lắp khi cần. Tái định vị đặc biệt và

các giải thuật liên kết đƣợc yêu cầu để xây dựng các phủ lắp.

3.3.5. Hoán vị

Một quá trình cần trong bộ nhớ đ được thực thi Tuy nhi n, một quá trình c

th được hoán vị (swapped) tạm thời hỏi bộ nhớ tới v ng ưu trữ phụ (bac ing store)

168

Sau đ mang tr ại bộ nhớ đ việc thực thi được tiếp tục. Ví dụ, một môi trƣờng đa

chƣơng với giải thuật điều phối RR Round Robin . Khi định mức thời gian hết hạn, bộ

quản lý bộ nhớ sẽ bắt đầu hoán vị ra swap out vùng lƣu trữ phụ quá trình vừa bị hết

hạn và hoán vị vào swap in một quá trình khác tới không gian bộ nhớ đƣợc trống

(Hình 3.3).

Hình 3.3. Hoán vị hai quá trình s dụng đĩa như à bac ing store

Hoán vị yêu cầu một vùng lƣu trữ phụ backing store V ng ưu trữ phụ này

thường à một đĩa tốc độ cao. Nó phải đủ lớn để chứa các bản sao của tất cả hình ảnh

bộ nhớ cho tất cả ngƣời dùng, và nó phải cung cấp truy xuất trực tiếp tới các hình ảnh

bộ nhớ này. Hệ thống này duy trì một hàng đợi sẵn sàng chứa tất cả quá trình mà các

hình ảnh bộ nhớ của nó ở trong vùng lƣu trữ phụ hay trong bộ nhớ và sẵn sàng để thực

thi. Bất cứ khi nào bộ định thời CPU quyết định thực thi một quá trình, nó gọi bộ phân

phát dispatcher . Bộ phân phát kiểm tra để thấy quá trình tiếp theo trong hàng đợi ở

trong bộ nhớ không. Nếu không, và không có vùng bộ nhớ trống, bộ phân phát hoán vị

ra một quá trình hiện hành trong bộ nhớ và hoán vị vào một quá trình mong muốn. Sau

đó, nó nạp lại các thanh ghi và chuyển điều khiển tới quá trình đƣợc chọn.

Trong các hệ hoán vị, thời gian chuyển đổi giữa các công việc cần đƣợc quan

tâm. Mỗi quá trình cần đƣợc phân chia một khoảng thời gian sử dụng CPU đủ lớn để

không thấy rõ sự chậm tr do các thao tác hoán vị gây ra. Nếu không, hệ thống sẽ dùng

phần lớn thời gian để hoán vị các quá trình vào ra bộ nhớ chính, CPU nhƣ vậy sẽ

169

không sử dụng hiệu quả.

3.4. QUẢN L BỘ NHỚ CHÍNH

3.4.1. Bộ nhớ cấp phát liên tục

3.4.1.1. Kỹ thuật phân vùng cố định

Trong kỹ thuật này không gian địa chỉ của bộ nhớ chính đƣợc chia thành 2 phần

cố định, phần nằm ở vùng địa chỉ thấp dùng để chứa chính hệ điều hành, phần c n lại,

tạm gọi là phần user program, là sẵn sàng cho việc sử dụng của các tiến trình khi các

tiến trình đƣợc nạp vào bộ nhớ chính.

Hình 3.4. Hệ thống đơn chương với phân v ng cố định

Trong các hệ thống đơn chƣơng, phần user program đƣợc dùng để cấp cho chỉ

một chƣơng trình duy nhất, do đó nhiệm vụ quản lý bộ nhớ của hệ điều hành trong

trƣờng hợp này sẽ đơn giản hơn, hệ điều hành chỉ kiểm soát sự truy xuất bộ nhớ của

chƣơng trình ngƣời dùng, không cho nó truy xuất lên vùng nhớ của hệ điều hành. Để

thực hiện việc này hệ điều hành sử dụng một thanh ghi giới hạn để ghi địa chỉ ranh giới

giữa hệ điều hành và chƣơng trình của ngƣời dùng, theo đó khi chƣơng trình ngƣời

dùng cần truy xuất một địa chỉ nào đó thì hệ điều hành sẽ so sánh địa chỉ này với giá trị

địa chỉ đƣợc ghi trong thành ghi giới hạn, nếu nhỏ hơn thì từ chối không cho truy xuất,

ngƣợc lại thì cho ph p truy xuất. Việc so sánh địa chỉ này cần phải có sự hỗ trợ của

phần cứng và có thể làm giảm tốc độ truy xuất bộ nhớ của hệ thống nhƣng bảo vệ đƣợc

hệ điều hành tránh việc chƣơng trình của ngƣời dùng làm hỏng hệ điều hành dẫn đến

làm hỏng hệ thống.

Trong các hệ thống đa chƣơng, chƣơng trình ngƣời dùng lại lại đƣợc phân ra

thành nhiều phân vùng partition có kích thƣớc bằng hoặc khác nhau. Việc phân phân

chia bộ nhớ thành những phần cố định đƣợc thực hiện bởi một bộ thao tác lúc khở

170

động máy. Trong trƣờng hợp này một tiến trình có thể đƣợc nạp vào bất kỳ phân vùng

nào nếu kích thƣớc của nó nhỏ hơn hoặc bằng kích thƣớc của phân vùng và phân vùng

này c n trống.

Hình 3.5. Hệ thống đa chương với phân v ng c ích thước cố định

Khi có một tiến trình cần đƣợc nạp vào bộ nhớ nhƣng tất cả các phân vùng đều đ

chứa các tiến trình khác thì hệ điều hành có thể chuyển một tiến trình nào đó, mà hệ

điều hành cho là hợp lệ kích thƣớc vừa đủ, không đang ở trạng thái ready hoặc

running, không có quan hệ với các tiến trình running khác, ... , ra ngoài swap out , để

lấy phân vùng trống đó nạp tiến trình vừa có yêu cầu. Đây là nhiệm vụ phức tạp của hệ

điều hành, hệ điều hành phải tốn chi phí cao cho công việc này.

Có hai trở ngại trong việc sử dụng các phân vùng cố định với kích thƣớc bằng

nhau:

 Thứ nh t, khi kích thƣớc của một chƣơng trình là quá lớn so với kích thƣớc của một

phân vùng thì ngƣời lập trình phải thiết kế chƣơng trình theo cấu trúc phủ lắp, theo

đó chỉ những phần chia cần thiết của chƣơng trình mới đƣợc nạp vào bộ nhớ chính

khi khởi tạo chƣơng trình, sau đó ngƣời lập trình phải nạp tiếp các module cần thiết

khác vào đúng phân vùng của chƣơng trình và sẽ ghi đè lên bất kỳ chƣơng trình

hoặc dữ liệu ở trong đó. Cấu trúc chƣơng trình phủ lắp tiết kiệm đƣợc bộ nhớ

nhƣng yêu cầu trình độ ở ngƣời lập trình.

 Thứ hai, khi kích thƣớc của một chƣơng trình quá nhỏ so với kích thƣớc của một

phân vùng nhƣng không phải là bội số của kích thƣớc một phân vùng thì d xảy ra

hiện tƣợng phân mảnh bên trong internal fragmentation bộ nhớ, gây l ng phí bộ

nhớ. Ví dụ, nếu có 2 không gian trống kích thƣớc bằng nhau 20K nằm r i rác trên

171

bộ nhớ, quá trình A đến yêu cầu 11K, B đến yêu cầu 23K, thì cũng sẽ không nạp

đƣợc quá trình B cùng lúc với quá trình A, hiện tƣợng này đƣợc gọi là hiện tƣợng

phân m nh b n trong. Phân mảnh trong là phần không gian bộ nhớ đ cấp thừa cho

quá trình A nhƣng không thể lấy lại để cấp cho quá trình B tại thời điểm đó.

Cả hai vấn đề trên có thể đƣợc khắc phục bằng cách sử dụng các phân vùng có

kích thƣớc không bằng nhau. Việc đƣa một tiến trình vào phân vùng trong hệ thống đa

chƣơng với phân vùng cố định kích thƣớc không bằng nhau sẽ phức tạp hơn nhiều so

với trƣờng hợp các phân vùng có kích thƣớc bằng nhau. Với các phân vùng có kích

thƣớc không bằng nhau thì có hai cách để cài đặt khi đƣa một tiến trình vào phân vùng:

 Mỗi phân vùng có một hàng đợi tƣơng ứng, theo đó mỗi tiến trình khi cần đƣợc nạp

vào bộ nhớ nó sẽ đƣợc đƣa đến hàng đợi của phân vùng có kích thƣớc vừa đủ để

chứa nó. Mỗi khi phân vùng trống, tiến trình đợi sẽ đƣợc đƣa vào phân vùng đó để

thực thi. Tuy nhiên cách tiếp cận này k m linh động vì có thể có một phân vùng

đang trống với hàng đợi rỗng, trong khi đó có phân vùng khác đang bận với hàng

đợi đầy, điều này gây l ng phí trong việc sử dụng bộ nhớ. Hơn nữa, tạo ra sự phân

m nh bên trong của các phân vùng: vì kích thƣớc của các phân vùng là cố định nên

cấp phát thừa cho quá trình gây l ng phí bộ nhớ. Cách khắc phục là nên chọn một

hàng đợi chung.

172

Hình 3.6. Mỗi Phân vùng c hàng đợi tương ứng

 Hệ thống dùng một hàng đợi chung cho tất cả các phân vùng, theo đó tất cả các tiến

trình muốn đƣợc nạp vào phân vùng nhƣng chƣa đƣợc vào sẽ đƣợc đƣa vào hàng

đợi chung này. Sau đó nếu có một phân vùng trống thì hệ thống sẽ xem x t để đƣa

một tiến trình có kích thƣớc vừa đủ vào phân vùng trống đó. Cách tiếp cận này linh

động hơn so với việc sử dụng nhiều hàng đợi nhƣ ở trên, nhƣng việc chọn một tiến

trình trong hàng đợi để đƣa vào phân vùng là một việc làm khá phức tạp của hệ

điều hành vì nó phải dựa vào nhiều yếu tố khác nhau nhƣ: độ ƣu tiên của tiến trình,

trạng thái hiện tại của tiến trình, các mối quan hệ của tiến trình,...

Hình 3.7. Một hàng đợi chung cho t t c phân vùng

3.4.1.2. Kỹ thuật phân vùng động Dynamic Partitioning)

Kỹ thuật phân vùng động khắc phục đƣợc một vài hạn chế của kỹ thuật phân

vùng cố định. Kỹ thuật này thƣờng đƣợc sử dụng phổ biến trong hệ điều hành

mainframe của IBM, hệ điều hành OS/MVT, ... Trong kỹ thuật phân vùng động, số

lƣợng các phân vùng trên bộ nhớ và kích thƣớc của mỗi phân vùng là có thể thay đổi.

Tức là phần user program trên bộ nhớ không đƣợc phân chia trƣớc. Ban đầu khi chƣa

có quá trình nào trong bộ nhớ phần chƣơng trình ngƣời dùng chỉ có một phân vùng mà

kích thƣớc của nó sẽ thay đổi mỗi khi có một tiến trình đƣợc nạp vào bộ nhớ chính.

Khi có một tiến trình đƣợc nạp vào bộ nhớ, hệ điều hành cấp cho nó không gian vừa đủ

để chứa tiến trình, phần c n lại để sẵn sàng cấp cho tiến trình khác sau này. Khi một

tiến trình kết thúc, không gian bộ nhớ tƣơng ứng đƣợc giải phóng sẽ đƣợc hệ điều hành

173

cấp cho tiến trình khác có có yêu cầu kích thƣớc nhỏ hơn.

Hình 3.8. Kỹ thu t phân v ng động trong hệ thống đa chương

3.4.1.2.1. Các vấn đề kỹ thuật phân vùng động trong hệ thống đa chương

Kỹ thuật phân vùng động trong hệ thống đa chƣơng có ƣu điểm là sử dụng bộ nhớ

có hiệu quả, tránh đƣợc sự phân m nh bên trong. Tuy nhiên, phức tạp trong các giải

thuật cấp phát và thu hồi bộ nhớ, cũng nhƣ khó theo dõi các phần không gian trống.

Bên cạnh đó, kỹ thuật này để lại bộ nhớ có nhiều không gian trống có kích thƣớc nhỏ

nằm rải rác, mỗi không gian không đủ để cấp phát cho quá trình đến. Hiện tƣợng này

đƣợc gọi là hiện thƣợng phân m nh b n ngoài external fragmentation . Để chống lại

sự l ng phí bộ nhớ do phân mảnh ngoài, thỉnh thoảng hệ điều hành phải thực hiện việc

sắp xếp lại bộ nhớ c n gọi là phƣơng pháp cô đ c bộ nhớ Memory compaction , bằng

cách di chuyển các tiến trình về một phía và các không gian trống về một phía khác tạo

thành một khối nhớ có kích thƣớc đủ lớn để chứa đƣợc một tiến trình mới. Công việc

này làm chậm tốc độ của hệ thống, hệ điều hành phải tốn chi phí cao cho việc này, đặc

biệt là việc tái định vị các tiến trình khi một tiến trình bị đƣa ra khỏi bộ nhớ và đƣợc

nạp vào lại bộ nhớ để tiếp tục hoạt động.

174

Hình 3.9. Phân mãnh ngoài

Trong trƣờng hợp quá trình có đoạn dữ liệu/stack phát triển trong khi thực thi,

làm sao mở rộng không gian bộ nhớ đ cấp phát cho quá trình? Có hai cách giải quyết

vấn đề này:

Hình 3.10. M rộng hông gian cho quá trình

 Nếu, có sẵn một không gian trống liền kề với quá trình thì không gian đó sẽ đƣợc

cấp phát cho quá trình phát triển. Ngƣợc lại, quá trình sẽ phải di dời đến một không

gian trống lớn hơn đủ cho quá trình phát triển, hoặc một hay nhiều quá trình khác sẽ

phải hoán vị ra đĩa để tạo ra một không gian trống đủ lớn cho quá trình phát triển.

 Nếu không có không gian trống đủ lớn và vùng đĩa hoán vị cũng đầy thì quá trình

sẽ phải chờ đợi hoặc chấm dứt.

3.4.1.2.2. Phương pháp quản lý ộ nhớ với kỹ thuật phân vùng động trong hệ

thống đa chương

Trong kỹ thuật phân vùng động này hệ điều hành phải đƣa ra các cơ chế thích hợp

để quản lý các khối nhớ đ cấp phát hay c n trống trên bộ nhớ. Hệ điều hành sử dụng

hai cơ chế: B n đồ bit và danh sách i n ết. Trong cả hai cơ chế này hệ điều hành đều

chia không gian nhớ thành các đơn vị cấp phát có kích thƣớc bằng nhau, các đơn vị cấp

phát liên tiếp nhau tạo thành một khối nhớ block , hệ điều hành cấp phát các block này

cho các tiến trình khi nạp tiến trình vào bộ nhớ.

175

3.4.1.2.2.1. Quản lý ằng ản đồ it

Bộ nhớ đƣợc chia thành các đơn vị cấp phát, kích thƣớc từ vài Words đến vài

Kbytes. Mỗi đơn vị đƣợc ánh xạ tới một bit trong bản đồ bit Hình 3.11 . Giá trị bit này

xác định trạng thái của đơn vị bộ nhớ đó: bit 0 đang tự do, bit 1 đ đƣợc cấp phát cho

tiến trình. Khi cần nạp một quá trình có kích thƣớc k đơn vị, hệ thống sẽ tìm trong bản

đồ bit một d y k bit có giá trị 0.

a) Hiện trạng bộ nhớ có 4 quá trình A, B, C, D đ đƣợc cấp phát và 5 khối tự do

b) Bản đồ bit tƣơng ứng

Hình 3.11. Qu n bộ nhớ b ng b n đồ bit

Kích thƣớc của đơn vị cấp phát là vấn đề lớn trong thiết kế. Nếu kích thƣớc đơn

vị cấp phát nhỏ sẽ làm tăng kích thƣớc của bản đồ bit. Ngƣợc lại, nếu kích thƣớc đơn

vị cấp phát lớn có thể gây hao phí cho đơn vị cấp phát sau cùng. Đây là giải pháp đơn

giản nhƣng thực hiện chậm nên ít đƣợc dùng.

3.4.1.2.2.2. Quản lý ằng danh sách liên kết

Một danh sách liên kết để quản lý các khối Block bộ nhớ đ cấp phát và các

khối tự do. Mỗi khối tƣơng ứng một phần tử trong danh sách liên kết. Phần tử có thể là

một quá trình hay một vùng nhớ trống giữa hai quá trình. Mỗi phần tử gồm 1 bit đầu để

xác định khối đó là lỗ trống H hay một quá trình P , sau đó là 3 từ word để chỉ địa

chỉ bắt đầu, chiều dài và con trỏ chỉ tới phần tử kế tiếp. Việc sắp xếp các khối theo địa

chỉ hay theo kích thƣớc tuỳ thuộc vào giải thuật quản lý bộ nhớ. Sơ đồ quản lý bằng

danh sách liên kết tƣơng ứng với sơ đồ quản lý bằng bản đồ bit đƣợc minh họa trong

176

Hình 3.12.

a) Hiện trạng bộ nhớ gồm 4 quá trình và 5 khối trống

H 0 2 P 2 3 H 5 3 P 8 2 H 10 4

P 14 3 H 17 1 P 18 2 H 20 2

b) Quản lý bộ nhớ bằng danh sách liên kết

Hình 3.12. Qu n bộ nhớ b ng danh sách i n ết

Các chiến lƣợc first-fit, best-fit, worst-fit và next-fit là những chiến lƣợc phổ biến

nhất đƣợc dùng để chọn một khối trống thích hợp từ tập hợp các khối trống trong bộ

nhớ để cấp phát cho quá trình. Việc lựa chọn này sao cho dẫn đến việc sử dụng bộ nhớ

chính là hiệu quả nhất.

 First-fit: trong trƣờng hợp này hệ điều hành sẽ bắt đầu qu t qua các khối nhớ trống

bắt đầu từ khối nhớ trống đầu tiên trong bộ nhớ, và sẽ chọn hối nhớ trống đầu ti n

c ích thước đủ ớn để nạp tiến trình.

 Best-fit: chọn hối nhớ trống c ích thước nhỏ nh t đủ ớn để cấp phát cho tiến

trình. Hệ điều hành sẽ qu t toàn bộ danh sách khối trống. Ngoại trừ danh sách khối

trống đƣợc xếp theo thứ tự kích thƣớc tăng dần.

 Worst-fit: chọn hối nhớ trống c ích thước ớn nh t để cấp phát cho tiến trình. Hệ

điều hành sẽ qu t toàn bộ danh sách khối trống. Ngoại trừ danh sách khối trống

đƣợc xếp theo thứ tự kích thƣớc giảm dần.

 Next-fit: tƣơng tự nhƣ First-fit nhƣng ở đây hệ điều hành bắt đầu qu t từ khối nhớ

trống kế sau khối nhớ vừa đƣợc cấp phát trƣớc đó và chọn hối nhớ trống ế tiếp

đầu ti n đủ ớn để nạp tiến trình.

Khi một tiến trình kết thúc, một khối trống đƣợc tạo ra có thể kết hợp với các

khối trống kế bên của nó nếu có để tạo ra khối trống lớn hơn. Một khối có hai láng

177

giềng, trừ khối đầu tiên và cuối cùng chỉ có một láng giềng.

Ví dụ: Hiện trạng bộ nhớ có sẵn tập hợp các khối trống có kích thƣớc lần lƣợt 8k,

12k, 22k, 18k, 8k, 6k, 14k, 36k. Giả sử tiến trình đến yêu cầu 16k cần đƣợc nạp vào bộ

nhớ, thì hệ điều hành sẽ nạp nó vào:

 Khối nhớ 22k nếu theo thuật toán First-fit, lãng phí 6k do phân mãnh trong

và tốc độ cấp phát nhanh nhất.

 Khối nhớ 18k nếu theo thuật toán Best-fit, lãng phí 2k do phân mãnh trong,

phải d tìm toàn bộ danh sách và tốc độ chậm nhất.

 Khối nhớ 36k nếu theo giải thuật worst-fit, phải d tìm toàn bộ danh sách

nên tốc độ chấp phát chậm, phƣơng án này đƣợc xem là hiệu quả vì để lại

khối nhớ trống 20k không thể gọi là phân m nh nhƣng nếu cứ tiếp tục nhƣ

thế sẽ gây ra phân m nh lớn ở cuối bộ nhớ.

Các hệ điều hành thƣờng không cài đặt cố định trƣớc một thuật toán nào, tuỳ vào

trƣờng hợp cụ thể mà nó chọn cấp phát theo một thuật toán nào đó, sao cho chi phí về

việc cấp phát là thấp nhất và hạn chế đƣợc sự phân mảnh bộ nhớ sau này. Việc chọn

thuật toán nào thƣờng phụ thuộc vào thứ tự swap và kích thƣớc của tiến trình. Thuật

toán First-fit đƣợc đánh giá là đơn giản, d cài đặt và mang lại hiệu quả cao nhất đặc

biệt là về tốc độ cấp phát. Về hiệu quả thuật toán Next-fit không bằng First-fit, nhƣng

nó thƣờng xuyên sử dụng đƣợc các khối nhớ trống ở cuối vùng nhớ, các khối nhớ ở

vùng này thƣờng có kích thƣớc lớn nên có thể hạn chế đƣợc sự phân mảnh. Thuật toán

Best-fit, không nhƣ tên gọi của nó, đây là một thuật toán có hiệu suất thấp nhất, trong

trƣờng hợp này hệ điều hành phải duyệt qua tất các các khối nhớ trống để tìm ra một

khối nhớ có kích thƣớc vừa đủ lớn để chứa tiến trình yêu cầu, điều này làm giảm tốc độ

cấp phát của hệ điều hành. Mặt khác với việc chọn kích thƣớc vừa đủ lớn có thể dẫn

đến sự phân mảnh lớn trên bộ nhớ, tức là có quá nhiều khối nhớ có kích thƣớc quá nhỏ

trên bộ nhớ, nhƣng nếu x t về mặt l ng phí bộ nhớ tại thời điểm cấp phát thì thuật toán

này làm l ng phí ít nhất. Tóm lại, khó có thể đánh giá về hiệu quả sử dụng của các

thuật toán này, vì hiệu quả của nó đƣợc x t trong “tƣơng lai” và trên nhiều khía cạnh

khác nhau chứ không phải chỉ x t tại thời điểm cấp phát. Và hơn nữa trong bản thân

các thuật toán này đ có các mâu thuẫn với nhau về hiệu quả sử dụng của nó.

Nhƣ vậy khi cần nạp một tiến trình vào bộ nhớ thì hệ điều hành phải dựa vào bản

đồ bit hoặc danh sách liên kết để tìm ra một khối thích hợp để nạp tiến trình. Sau khi

178

thực hiện một thao tác cấp phát hoặc sau khi đƣa một tiến trình ra khỏi bộ nhớ thì hệ

điều hành phải cập nhật lại bản đồ bit hoặc danh sách liên kết, điều này có thể làm

giảm tốc độ thực hiện của hệ thống.

Danh sách liên kết có thể đƣợc sắp xếp theo thứ tự tăng dần hoặc giảm dần của

kích thƣớc hoặc địa chỉ, điều này giúp cho việc tìm khối nhớ trống có kích thƣớc vừa

đủ để nạp các tiến trình theo các thuật toán dƣới đây sẽ đạt tốc độ nhanh hơn và hiệu

quả cao hơn. Một số hệ điều hành tổ chức 2 danh sách liên kết riêng để theo dõi các

đơn vị cấp phát trên bộ nhớ, một danh sách để theo dõi các block đ cấp phát và một

danh dách để theo dõi các block c n trống. Cách này giúp việc tìm các khối nhớ trống

nhanh hơn, chỉ tìm trên danh sách các khối nhớ trống, nhƣng tốn thời gian nhiều hơn

cho việc cập nhật danh sách sau mỗi thao tác cấp phát, vì phải thực hiện trên cả hai

danh sách.

3.4.1.2.2.3. Quản lý ằng hệ thống ạn thân (Buddy System)

Việc quản lý danh sách các không gian trống đƣợc sắp xếp theo kích thƣớc làm

cho cấp phát bộ nhớ rất nhanh, nhƣng lại làm chậm cho việc thu hồi bộ nhớ bởi vì ta

phải chú ý đến các láng giềng. Hệ thống bạn thân Buddy System là một giải thuật

quản lý bộ nhớ tận dụng thuận lợi của việc máy tính dùng những số nhị phân cho việc

đánh địa chỉ để tăng tốc độ kết hợp những không gian trống sát nhau khi một quá trình

kết thúc. Với phương pháp này, bộ qu n bộ nhớ sẽ c một b ng iệt những hối còn tự do c ích thước 1, 2, 4, 16 Bytes, tức à c ích thước b ng 2n Khi c một quá trình cần c p phát bộ nhớ, một hông gian trống c ích thước b ng 2n nhỏ nh t đủ ớn sẽ được c p phát cho quá trình Nếu hông gian trống quá ớn sẽ được phân đôi

cho đến hi c được hông gian trống cần thiết

Khi một quá trình chấm dứt, các hối trống ế nhau c ích thước b ng nhau sẽ

đƣợc nhập lại để tạo thành khối trống lớn hơn. Do đó, giải thuật này đƣợc gọi là hệ

thống bạn thân.

179

Ví dụ: với bộ nhớ 1M, cần phải có 21 bảng liệt kê sắp xếp từ 1 Byte (20 đến 20Bytes (220 . Khởi đầu toàn bộ nhớ c n tự do và bảng liệt kê chỉ có một mục từ chứa một khối trống kích thƣớc 1M, tất cả các bảng liệt kê khác đều rỗng.

Quá trình đến 1M = 1024 KBytes 1 lỗ trống

yêu cầu

A yêu cầu 70K A 128 256 512 3

B yêu cầu 35K A B 64 256 512 3

C yêu cầu 80K A B 64 C 128 512 3

A kết thúc 128 B 64 C 128 512 4

D yêu cầu 60K 128 B D C 128 512 3

B kết thúc 128 64 D C 128 512 4

D kết thúc 256 C 128 512 3

C kết thúc 1024 1

Bản 3 . Qu n bộ nhớ b ng hệ thống bạn thân

Hệ thống bạn thân có sự thuận lợi so với những giải thuật cùng sắp xếp theo kích

thƣớc của khối. Sự thuận lợi này là khi có một khối 2k Bytes tự do, bộ quản lý bộ nhớ

chỉ cần tìm trong bảng liệt kê khối trống có kích thƣớc 2k để xem chúng có khả năng

kết hợp đƣợc hay không. Với những giải thuật khác mà trong đó cho ph p các khối bộ

nhớ đƣợc phân chia một cách tùy ý, việc tìm kiếm phải di n ra trên tất cả các bảng liệt

kê. Do dó, hệ thống bạn thân làm việc nhanh hơn. Đáng tiếc, nó lại cực kỳ k m hiệu

quả trong việc sử dụng bộ nhớ. Một quá trình 35K phải đƣợc cấp phát đến 64K, hao

phí đến 29K. Sự hao phí này đƣợc gọi là sự phân mảnh trong internal fragmentation),

bởi vì phần bộ nhớ hao phí nằm bên trong đoạn đƣợc cấp phát.

3.4.1.3. Tái định vị ộ nhớ và ảo vệ ộ nhớ

Khi bộ nhớ trở nên khan hiếm, một tiến trình đang ở trên bộ nhớ có thể bị đƣa ra

ngoài (swap out để dành chỗ nạp một tiến trình mới có yêu cầu, và tiến trình này sẽ

đƣợc nạp vào lại swap in bộ nhớ tại một thời điểm thích hợp sau này. Vấn đề đáng

180

quan tâm ở đây là tiến trình có thể đƣợc nạp vào lại phân vùng khác với phân vùng mà

nó đƣợc nạp vào lần đầu tiên. Có một lý do khác khiến các tiến trình phải thay đổi vị trí

nạp so với ban đầu là khi có sự liên kết giữa các module tiến trình của một chƣơng

trình thì các tiến trình phải dịch chuyển ngay cả khi chúng đ nằm trên bộ nhớ chính.

Sự thay đổi vị trị/địa chỉ nạp này sẽ ảnh hƣởng đến các thao tác truy xuất dữ liệu của

chƣơng trình vì nó sẽ khác với các địa chỉ tƣơng đối mà ngƣời lập trình đ sử dụng

trong m lệnh của chƣơng trình. Ngoài ra khi một tiến trình đƣợc nạp vào bộ nhớ lần

đầu tiên thì tất cả các địa chỉ tƣơng đối đƣợc tham chiếu trong m lệnh chƣơng trình

đƣợc thay thế bằng địa chỉ tuyệt đối trong bộ nhớ chính. Ví dụ trong chƣơng trình có

m lệnh truy xuất đến địa chỉ tƣơng đối 100k, nếu chƣơng trình này đƣợc nạp vào phân

vùng 1 có địa chỉ bắt đầu là 100k thì địa chỉ truy xuất là 200k, nhƣng nếu chƣơng trình

đƣợc nạp vào phân vùng 2 có địa chỉ bắt đầu là 200k, thì địa chỉ truy xuất sẽ là 300k.

Để giải quyết vấn đề này hệ điều hành phải thực hiện các yêu cầu cần thiết của công

tác tái định vị một tiến trình vào lại bộ nhớ. Ngoài ra ở đây hệ điều hành cũng phải tính

đến việc b o vệ các tiến trình trên bộ nhớ tránh tình trạng một tiến trình truy xuất đến

vùng nhớ của tiến trình khác. Giải pháp chung cho vấn đề tái định vị và bảo vệ bộ nhớ

là hệ điều hành sử dụng hai thanh ghi đặc biệt:

 Thanh ghi nền (base): lƣu địa chỉ bắt đầu của phân vùng chứa tiến trình

 Thanh ghi giới hạn ( imit): lƣu chiều dài của phân vùng chứa tiến trình

181

Hình 3.13. Phần cứng hỗ trợ tái định vị và b o vệ

Khi một tiến trình đƣợc nạp vào bộ nhớ thì hệ điều hành sẽ ghi địa chỉ bắt đầu của

phân vùng đƣợc cấp phát cho tiến trình vào thanh ghi nền và địa chỉ cuối cùng của tiến

trình vào thanh ghi giới hạn. Việc thiết lập giá trị của các thanh ghi này đƣợc thực hiện

cả khi tiến trình lần đầu tiên đƣợc nạp vào bộ nhớ và khi tiến trình đƣợc swap in vào lại

bộ nhớ. Theo đó mỗi khi tiến trình thực hiện một thao tác truy xuất bộ nhớ thì hệ thống

phải thực hiện hai bƣớc: Thứ nh t, cộng địa chỉ logic với giá trị địa chỉ trong thanh ghi

nền để có đƣợc địa chỉ tuyệt đối của ô nhớ cần truy xuất sẽ giải quyết đƣợc vấn đề tái

định vị. Thứ hai, địa chỉ kết quả ở trên sẽ đƣợc so sánh với giá trị địa chỉ trong thành

ghi giới hạn để giải quyết vấn đề bảo vệ. Nếu địa chỉ nằm trong phạm vi giới hạn thì hệ

điều hành cho ph p tiến trình truy xuất bộ nhớ, ngƣợc lại thì có một ngắt về lỗi truy

xuất bộ nhớ đƣợc phát sinh và hệ điều hành sẽ cấm tiến trình truy xuất vào địa chỉ này.

Giải pháp này có nhiều thuận lợi là d dàng di dời tiến trình trong bộ nhớ – vì chỉ cần

thay đổi giá trị của hai thanh ghi nền và giới hạn.

Trong hệ thống đa chƣơng sử dụng sự phân vùng động, nếu có một tiến trình mới

cần đƣợc nạp vào bộ nhớ, trong khi bộ nhớ không c n chỗ trống và tất cả các tiến trình

phải đợi trên bộ nhớ ở trạng thái khoá blocked nhƣng vẫn chiếm dụng bộ nhớ. Việc

đợi này cho đến khi có một tiến trình kết thúc, bị đƣa ra khỏi bộ nhớ chính tạo điều

kiện cho hệ thống nạp tiến trình vừa có yêu cầu. Sự chờ đợi này làm l ng phí thời gian

xử lý của CPU. Để tiết kiệm thời gian xử lý của CPU trong trƣờng hợp này hệ điều

hành chọn ngay một tiến trình đang ở trạng thái khoá để đƣa ra ngoài cơ chế suspend

lấy không gian nhớ trống đó cấp cho tiến trình vừa có yêu cầu mà không phải đợi nhƣ

ở trên. Hệ điều hành sử dụng nhiều thuật toán khác nhau cho việc chọn một tiến trình

để thay thế trong trƣờng hợp này, tất cả các thuật toán này đều hƣớng tới mục đích: tiết

kiệm thời gian xử lý của CPU, tốc độ thay thế cao, sử dụng bộ nhớ hiệu quả nhất và

đặc biệt là không để dẫn đến sự trì trệ hệ thống. Chúng ta sẽ thảo luận rõ hơn về vấn đề

này ở phần kế tiếp của chƣơng này. Một nhƣợc điểm lớn của các kỹ thuật ở trên là dẫn

đến hiện tƣợng phân mảnh trong và phân mảnh ngoài gây l ng phí bộ nhớ nên hiệu quả

sử dụng bộ nhớ k m. Để khắc phục hệ điều hành sử dụng các kỹ thuật phân trang hoặc

phân đoạn bộ nhớ.

3.4.2. Cấp phát không liên tục

182

3.4.2.1. Phân trang (Paging)

Bộ nhớ v t được chia thành các hối (b oc ) c ích thước cố định và b ng

nhau, gọi à khung trang (page frame). Không gian địa chỉ u n cũng được chia

thành các hối c c ng ích thước với hung trang, và được gọi à trang (page). Khi

cần nạp một tiến trình để xử lý, các trang của tiến trình sẽ đƣợc nạp vào những khung

trang c n trống. Một tiến trình kích thƣớc N trang sẽ yêu cầu N khung trang tự do.

Hình 3.14. Mô hình bộ nhớ phân trang

Kích thƣớc của trang do phần cứng qui định. Để d phân tích địa chỉ ảo thành số

hiệu trang và địa chỉ tƣơng đối, kích thƣớc của một trang thông thƣờng là một lũy thừa

của 2 biến đổi trong phạm vi 512 Bytes và 8192 Bytes . Mỗi tiến trình đƣợc nạp vào

bộ nhớ sẽ sở hữu một số khung trang nhất định. Nếu kích thƣớc của tiến trình không

phải là bội số của kích thƣớc một khung trang thì sẽ xảy ra hiện tƣợng phân mảnh nội ở

khung trang chứa trang cuối cùng của tiến trình. Ở đây không xảy ra hiện tƣợng phân

mảnh ngoài. Trên bộ nhớ có thể tồn tại các trang của nhiều tiến trình khác nhau. Khi

một tiến trình bị swap out thì các khung trang mà tiến trình này chiếm giữ sẽ đƣợc giải

phóng để hệ điều hành có thể nạp các trang của tiến trình khác.

Trong kỹ thuật này hệ điều hành phải đƣa ra các cơ chế thích hợp để theo dõi

trạng thái của các khung trang c n trống hay đ cấp phát trên bộ nhớ và các khung

trang đang chứa các trang của các tiến trình khác nhau trên bộ nhớ. Hệ điều hành sử

dụng một danh sách để ghi số hiệu của các khung trang c n trống trên bộ nhớ, hệ điều

183

hành dựa vào danh sách này để tìm các khung trang trống trƣớc khi quyết định nạp một

tiến trình vào bộ nhớ, danh sách này đƣợc cập nhật ngay sau khi hệ điều hành nạp một

tiến trình vào bộ nhớ, đƣợc kết thúc hoặc bị swap out ra bên ngoài.

Hệ điều hành sử dụng các b ng trang PCT: page control table để theo dõi vị trí

các trang tiến trình trên bộ nhớ, mỗi tiến trình có một bảng trang riêng. Bảng trang bao

gồm nhiều phần tử, thƣờng là bằng số lƣợng trang của một tiến trình mà bảng trang này

theo dõi, các phần tử đƣợc đánh số bắt đầu từ 0. Phần tử 0 chứa số hiệu của khung

trang đang chứa trang 0 của tiến trình, phần tử 1 chứa số hiệu của khung trang đang

a Các trang của các tiến trình trên bộ nhớ luận lý

b ánh xạ vào các khung trang trong bộ nhớ vật lý và cập nhật bảng trang, cập nhật danh sách khung trống

chứa trang 1 của tiến trình, …

Hình 3.15. Ánh xạ các trang vào các hung trang

3.4.2.1.1. Cơ chế quản lý ộ nhớ trong kỹ thuật phân trang

Cơ chế phần cứng hỗ trợ thực hiện chuyển đổi địa chỉ trong cơ chế phân trang là

b ng trang (pages table . Mỗi phần tử trong bảng trang cho biết các địa chỉ bắt đầu của

vị trí lƣu trữ trang tƣơng ứng trong bộ nhớ vật lý tức số hiệu khung trang trong bộ nhớ

184

vật lý đang chứa trang .

3.4.2.1.2. Chuyển đổi địa chỉ luận lý sang địa chỉ vật lý

Mỗi tiến trình có một không gian địa chỉ riêng. Không gian này gọi là không gian

địa chỉ luận lý, gồm tập hợp các địa chỉ luận lý địa chỉ ảo do CPU sinh ra tại thời

điểm biên dịch. Mỗi địa chỉ u n đƣợc phát sinh bởi CPU đƣợc chia thành hai phần:

P: d

 P (Page): số hiệu trang, số thứ tự trang cần truy xuất

 d (offset) : địa chỉ tương đối trong trang hay độ dời trong trang đƣợc xác

định từ địa chỉ bắt đầu của trang đến vị trí ô nhớ cần tìm trong trang.

Số hiệu trang p sẽ đƣợc tra trong bảng trang để xác định số thứ tự khung trang

f . f kết hợp với độ dời d sẽ xác định đƣợc địa chỉ vật lý.

Nói cách khác, địa chỉ v t có dạng f:d. Địa chỉ này cũng đƣợc tính bằng số thứ

tự khung trang nhân với kích thƣớc trang và cộng thêm độ dời.

Hình 3.16. Chuy n đ i địa chỉ u n sang địa chỉ v t

Nếu kích thƣớc của không gian địa chỉ luận lý là 2m và kích thƣớc trang là 2 n, thì m-n bits cao của địa chỉ ảo sẽ biểu di n số hiệu trang P , và n bits thấp cho biết địa

185

chỉ tƣơng đối trong trang d .

Ví dụ: Nếu một địa chỉ logic gồm 16 bit, kích thƣớc của mỗi trang là 1K = 1024Byte (210), thì có 6 bit dành cho số hiệu trang, nhƣ vậy một chƣơng trình có thể có tối đa 26 = 64 trang mỗi trang 1KB. Một quá trình A yêu cầu 3500Bytes sẽ cấp phát tƣơng ứng 4 trang. Trong trƣờng hợp này nếu CPU phát ra một giá trị địa chỉ 16 bit là:

0000010111011110 = 1502, thì thành phần số hiệu trang là 000001 = 1, thành phần

offset là 0111011110 = 478.

Free list

5

6

25

7

19

….

186

Hình 3.17. xác định địa chỉ v t

3.4.2.1.3. Cài đặt ảng trang

Trong trƣờng hợp đơn giản nhất, một tập hợp các thanh ghi đƣợc sử dụng để

cài đặt bảng trang. Tuy nhiên việc sử dụng thanh ghi chỉ phù hợp với các bảng trang có

kích thƣớc nhỏ, nếu bảng trang có kích thƣớc lớn, nó phải đƣợc lƣu trữ trong bộ nhớ

chính, và sử dụng một thanh ghi để lƣu trữ địa chỉ bắt đầu nơi lƣu trữ bảng trang, thanh

ghi này đƣợc gọi là thanh ghi PTBR page table base register . Theo cách tổ chức này,

mỗi truy xuất đến dữ liệu hay chỉ thị đều đ i hỏi hai lần truy xuất bộ nhớ: một cho truy

xuất đến bảng trang và một cho bản thân dữ liệu.

Hình 3.18. S dụng thanh ghi nền trỏ đến b ng trang

Có thể n tránh bớt việc truy xuất bộ nhớ hai lần bằng cách sử dụng thêm một

vùng nhớ đặc biệt, với tốc độ truy xuất nhanh và cho ph p tìm kiếm song song, vùng

nhớ cache nhỏ này thƣờng đƣợc gọi là bộ nhớ kết hợp TLBs Translation Look-aside

Buffers . Mỗi thanh ghi trong bộ nhớ kết hợp gồm một từ khóa và một giá trị,

khi đƣa đến bộ nhớ kết hợp một đối tƣợng cần tìm, đối tƣợng này sẽ đƣợc so sánh cùng

lúc với các từ khóa trong bộ nhớ kết hợp để tìm ra phần tử tƣơng ứng. Nhờ đặc tính

này mà việc tìm kiếm trên bộ nhớ kết hợp đƣợc thực hiện rất nhanh, nhƣng chi phí

187

phần cứng lại cao.

Hình 3.19. Phần cứng hỗ trợ phân trang với TLBs

Trong kỹ thuật phân trang TLBs đƣợc sử dụng để lƣu trữ các trang bộ nhớ đƣợc

truy cập gần hiện tại nhất. Khi CPU phát sinh một địa chỉ, số hiệu trang của địa chỉ sẽ

đƣợc so sánh với các phần tử trong TLBs, nếu có trang tƣơng ứng trong TLBs, thì sẽ

xác định đƣợc ngay số hiệu khung trang tƣơng ứng, nếu không mới cần thực hiện thao

tác tìm kiếm trong bảng trang.

3.4.2.1.4. Tổ chức ảng trang

Mỗi hệ điều hành có một phƣơng pháp riêng để tổ chức lƣu trữ bảng trang. Đa số

các hệ điều hành cấp cho mỗi tiến trình một bảng trang. Tuy nhiên phƣơng pháp này

188

không thể chấp nhận đƣợc nếu hệ điều hành cho ph p quản lý một không gian địa chỉ có dung lƣợng quá 232, 264 : trong các hệ thống nhƣ thế, bản thân bảng trang đ i hỏi một vùng nhớ qúa lớn! Có hai giải pháp cho vấn đề này:

Hình 3.20. B ng trang hai c p

189

Hình 3.21. Sơ đồ dịch địa chỉ b ng trang hai c p

 Phân trang đa c p: phân chia bảng trang thành các phần nhỏ, bản thân bảng trang

cũng sẽ đƣợc phân trang.

 B ng trang nghịch đ o: sử dụng duy nhất một b ng trang nghịch đ o cho tất cả

các tiến trình. Mỗi phần tử trong b ng trang nghịch đ o phản ánh một khung

trang trong bộ nhớ bao gồm địa chỉ logic của một trang đang đƣợc lƣu trữ trong

bộ nhớ vật lý tại khung trang này, cùng với thông tin về tiến trình đang đƣợc sở

hữu trang. Mỗi địa chỉ ảo khi đó là một bộ ba

Trong đó : idp : là định danh của tiến trình

p : là số hiệu trang

d : là địa chỉ tƣơng đối trong trang

Mỗi phần tử trong bảng trang nghịch đảo là một cặp . Khi một tham

khảo đến bộ nhớ đƣợc phát sinh, một phần địa chỉ ảo là đƣợc đƣa đến cho

trình quản lý bộ nhớ để tìm phần tử tƣơng ứng trong bảng trang nghịch đảo, nếu tìm

thấy, địa chỉ vật lý sẽ đƣợc phát sinh. Trong các trƣờng hợp khác, xem nhƣ tham

khảo bộ nhớ đ truy xuất một địa chỉ bất hợp lệ.

190

Hình 3.22. B ng trang đ o

3.4.2.1.5. Bảo vệ

Cơ chế bảo vệ trong hệ thống phân trang đƣợc thực hiện với các bit bảo vệ đƣợc

gắn với mỗi khung trang. Thông thƣờng, các bit này đƣợc lƣu trong bảng trang, vì mỗi

truy xuất đến bộ nhớ đều phải tham khảo đến bảng trang để phát sinh địa chỉ vật lý.

Khi đó, hệ thống có thể kiểm tra các thao tác truy xuất trên khung trang tƣơng ứng có

hợp lệ với thuộc tính bảo vệ của nó không. Ngoài ra, một bit phụ trội đƣợc thêm vào

trong cấu trúc một phần tử của bảng trang: bit hợp lệ - không hợp lệ.

 Hợp ệ (valid) : trang tƣơng ứng thuộc về không gian địa chỉ của tiến trình.

 Không hợp ệ (invalid): trang tƣơng ứng không nằm trong không gian địa chỉ của

tiến trình, điều này có nghĩa tiến trình đ truy xuất đến một địa chỉ không đƣợc

phép.

Hình 3.23. Cơ chế b o vệ trang

191

3.4.2.1.6. Chia s ộ nhớ trong cơ chế phân trang

Một ƣu điểm của cơ chế phân trang là cho ph p chia s các trang giữa các tiến

trình. Trong trƣờng hợp này, sự chia s đƣợc thực hiện bằng cách ánh xạ nhiều địa chỉ

logic vào một địa chỉ vật lý duy nhất. Có thể áp dụng kỹ thuật này để cho ph p có tiến

trình chia s một vùng m lệnh chung: nếu có nhiều tiến trình của cùng một chƣơng

trình, chỉ cần lƣu trữ một đoạn m lệnh của chƣơng trình này trong bộ nhớ, các tiến

trình sẽ có thể cùng truy xuất đến các trang chứa m lệnh chung này. Lƣu ý để có thể

chia s một đoạn m lệnh, đoạn m lệnh này phải có thuộc tính reenterable (cho phép

một bản sao của chƣơng trình đƣợc sử dụng đồng thời bởi nhiều công việc).

Hình 3.24. Cơ chế chia sẻ trang17

 Nhận xét:

 Kỹ thuật phân trang loại bỏ đƣợc hiện tƣợng phân mảnh ngoài. Tuy nhiên

17 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.165

192

hiện tƣợng phân mảnh trong vẫn có thể xảy ra khi kích thƣớc của tiến trình

không đúng bằng bội số của kích thƣớc một trang. khi đó, trang cuối cùng sẽ

không đƣợc sử dụng hết.

 Khi cần truy xuất đến dữ liệu hay chỉ thị trên bộ nhớ thì hệ thống phải cần

một lần truy xuất đến bảng trang, điều này có thể làm giảm tốc độ truy xuất

bộ nhớ. Để khắc phục hệ điều hành sử dụng thêm một bảng trang cache, để

lƣu trữ các trang bộ nhớ vừa đƣợc truy cập gần đây nhất. Bảng trang cache

này sẽ đƣợc sử dụng mỗi khi CPU phát ra một địa chỉ cần truy xuất.

 Mỗi hệ điều hành có một cơ chế tổ chức bảng trang riêng, đa số các hệ điều hành đều tạo cho mỗi tiến trình một bảng trang riêng khi nó đƣợc nạp vào bộ

nhớ chính. Bảng trang lớn sẽ tốn bộ nhớ để chứa nó.

 Để bảo vệ các khung trang hệ điều hành đƣa thêm một bit bảo vệ vào bảng

trang. Theo đó mỗi khi tham khảo vào bảng trang để truy xuất bộ nhớ hệ

thống sẽ kiểm tra các thao tác truy xuất trên khung trang tƣơng ứng có hợp lệ

với thuộc tính bảo vệ của nó hay không.

 Một khía cạnh tích cực rất quan trọng khác của kỹ thuật phân trang là sự

phân biệt rạch r i góc nhìn của ngƣời dùng và của bộ phận quản lý bộ nhớ

vật lý:

 G c nhìn của người d ng: một tiến trình của ngƣời dùng nhìn thấy bộ

nhớ nhƣ là một không gian liên tục, đồng nhất và chỉ chứa duy nhất bản

thân tiến trình này.

 G c nhìn của bộ nhớ v t : một tiến trình của ngƣời dùng đƣợc lƣu trữ

phân tán khắp bộ nhớ vật lý, trong bộ nhớ vật lý đồng thời cũng chứa

những tiến trình khác.

 Phần cứng đảm nhiệm việc chuyển đổi địa chỉ logic thành địa chỉ vật lý. Sự

chuyển đổi này là trong suốt đối với ngƣời dùng.

 Để lƣu trữ các thông tin chi tiết về quá trình cấp phát bộ nhớ, hệ điều hành

sử dụng một bảng khung trang, mà mỗi phần tử mô tả tình trạng của một

khung trang vật lý: tự do hay đƣợc cấp phát cho một tiến trình nào đó .

Sự phân trang không phản ánh đúng cách thức ngƣời dùng cảm nhận về bộ nhớ.

Ngƣời dùng nhìn thấy bộ nhớ nhƣ một tập các đối tƣợng của chƣơng trình segments,

các thƣ viện... và một tập các đối tƣợng dữ liệu biến toàn cục, stack, vùng nhớ chia

193

s ... . Vấn đề đặt ra là tìm một cách thức biểu di n bộ nhớ sao cho nó gần với cách

nhìn nhận của ngƣời dùng hơn. Kỹ thuật phân đoạn bộ nhớ có thể thực hiện đƣợc mục

tiêu này.

3.4.2.2. Phân đoạn Segmentation)

Trong kỹ thuật này không gian địa chỉ bộ nhớ vật lý đƣợc chia thành các phần cố

định có kích thƣớc không bằng nhau, đƣợc đánh số bắt đầu từ 0, đƣợc gọi là các phân

đoạn segment . Mỗi phân đoạn bao gồm số hiệu phân đoạn và kích thƣớc của nó.

Mỗi tiến trình có một không gian địa chỉ riêng gọi là không gian địa chỉ luận lý

gồm tập hợp các địa chỉ luận lý địa chỉ ảo do CPU sinh ra tại thời điểm biên dịch.

Không gian địa chỉ của các tiến trình kể cả các dữ liệu liên quan cũng đƣợc chia thành

các đoạn khác nhau và không nhất thiết phải có kích thƣớc bằng nhau, thông thƣờng

mỗi thành phần của một chƣơng trình/tiến trình nhƣ: code, data, stack, subprogram, ...,

là các đoạn riêng và chúng c i n hệ ogic với nhau

Hình 3.25. Tầm nhìn người d ng về chương trình

Khi một tiến trình đƣợc nạp vào bộ nhớ thì tất cả các đoạn của nó sẽ đƣợc nạp

vào các phân đoạn c n trống khác nhau trên bộ nhớ vật lý. Các phân đoạn này có thể

194

không liên tiếp nhau hình 3.26 .

Hình 3.26. Mô hình bộ nhớ phân đoạn

3.4.2.2.1. Cơ chế quản lý ộ nhớ trong kỹ thuật phân đoạn

Để theo dõi các đoạn của các tiến trình khác nhau trên bộ nhớ, hệ điều hành sử

dụng các b ng phân đoạn SCT: Segment control Table tiến trình, thông thƣờng một

tiến trình có một bảng phân đoạn riêng. Mỗi phần tử trong bảng phân đoạn gồm tối

thiểu 2 trƣờng: trƣờng thứ nhất cho biết địa chỉ nền địa chỉ cơ sở -base của phân đoạn

mà đoạn chƣơng trình tƣơng ứng đƣợc nạp, trƣờng thứ hai cho biết độ dài/giới hạn

(length/limit) của phân đoạn, trƣờng này c n có tác dụng dùng để kiểm soát sự truy

xuất bất hợp lệ của các tiến trình.

3.4.2.2.2. Chuyển đổi địa chỉ luận lý sang địa chỉ vật lý

Mỗi địa chỉ ảo là một bộ

 s (segment): số hiệu phân đoạn cho biết số hiệu đoạn tƣơng ứng cần truy xuất.

 d (offset): độ dời có giá trị trong khoảng từ 0 đến giới hạn chiều dài của

phân đoạn.

Nếu có một địa chỉ logic gồm n + m bit, thì n bit trái nhất là số hiệu phân đoạn, m

195

bit phải nhất c n lại là độ dời. Trong ví dụ minh hoạ sau đây thì n = 4 và m = 12, nhƣ

vậy kích thƣớc tối đa của một đoạn là 212 = 4096 Byte. Sau đây là các bƣớc cần thiết của việc chuyển đổi địa chỉ:

 Trích ra n bit trái nhất của địa chỉ logic để xác định số hiệu của phân đoạn

cần truy xuất.

 Sử dụng số hiệu phân đoạn ở trên để tham chiếu đến phần tử trong bảng

phân đoạn của tiến trình, để tìm địa chỉ vật lý bắt đầu của phân đoạn.

 So sánh thành phần offset của địa chỉ logic, đƣợc trích ra từ m bit phải nhất

của địa chỉ logic, với thành phần length của phân đoạn. Nếu offset > length

thì địa chỉ truy xuất là không hợp lệ.

 Địa chỉ vật lý mong muốn là địa chỉ vật lý bắt đầu của phân đoạn cộng với

giá trị offset.

Ví dụ 1: Ta có địa chỉ logic là: 0001001011110000, Với n=4, m=12. Vậy số hiệu

segment là 1, offset là 752, giả định segment này thƣờng trú trong bộ nhớ chính tại địa

chỉ vật lý là 0010000000100000, thì địa chỉ vật lý tƣơng ứng với địa chỉ logic ở trên là:

0010001100010000

Địa chỉ bắt đầu của đoạn 1 là 0010000000100000

Độ dời 752 = 001011110000

Địa chỉ vật lý = 0010000000100000 + 001011110000 = 0010001100010000

196

Hình 3.27. Cơ chế phần cứng hỗ trợ ĩ thu t phân đoạn

Ví dụ 2: Địa chỉ logic có dạng 2,300. Địa chỉ vật lý là 4300 + 300 = 4600. Địa

chỉ này hợp lệ vì d=300 nhỏ hơn chiều dài giới hạn của đoạn 2 là limit = 400.

Hình 3.28. Hệ thống phân đoạn

3.4.2.2.3. Cài đặt ảng phân đoạn

Các bảng phân đoạn có thể đƣợc chứa trong các thanh ghi nếu có kích thƣớc nhỏ,

nếu kích thƣớc bảng phân đoạn lớn thì nó đƣợc chứa trong bộ nhớ chính, khi đó hệ

điều hành sẽ dùng một thanh ghi để lƣu trữ địa chỉ bắt đầu nơi lƣu trữ bảng phân đoạn,

thanh ghi này đƣợc gọi là thanh ghi STBR: Segment table base register. Ngoài ra vì số

lƣợng các đoạn của một chƣơng trình/tiến trình có thể thay đổi nên hệ điều hành dùng

thêm thanh ghi STLR:Segment table length register, để ghi kích thƣớc hiện tại của

bảng phân đoạn. Hệ điều hành cũng tổ chức một danh sách riêng để theo dõi các

197

segment c n trống trên bộ nhớ.

Với một địa chỉ logic , trƣớc tiên số hiệu phân đoạn s đƣợc kiểm tra tính hợp lệ (s

bảng phân đoạn STBR+s). Điạ chỉ vật lý cuối cùng là STBR+s + d).

Hình 3.29. S dụng STBR, STLR và b ng phân đoạn

3.4.2.2.4. Bảo vệ

Một ƣu điểm đặc biệt của cơ chế phân đoạn là khả năng đặc tả thuộc tính bảo vệ

cho mỗi phân đoạn. Vì mỗi phân đoạn biểu di n cho một phần của chƣơng trình với

ngữ nghĩa đƣợc ngƣời dùng xác định, ngƣời dùng có thể biết đƣợc một phân đoạn chứa

đựng những gì bên trong. Do vậy họ có thể đặc tả các thuộc tính bảo vệ thích hợp cho

từng phân đoạn.

Cơ chế phần cứng phụ trách chuyển đổi địa chỉ bộ nhớ sẽ kiểm tra các bit bảo vệ

đƣợc gán với mỗi phần tử trong bảng phân đoạn để ngăn chặn các thao tác truy xuất bất

hợp lệ đến phân đoạn tƣơng ứng.

3.4.2.2.5. Chia s phân đoạn

Một ƣu điểm khác của kỹ thuật phân đoạn là khả năng chia s ở mức độ phân

đoạn. Nhờ khả năng này, các tiến trình có thể chia s với nhau từng phần chƣơng trình

198

thủ tục, hàm không nhất thiết phải chia s toàn bộ chƣơng trình nhƣ trƣờng hợp phân

trang. Mỗi tiến trình có một bảng phân đoạn riêng, một phân đoạn đƣợc chia s khi các

phần tử trong bảng phân đoạn của hai tiến trình khác nhau cùng chỉ đến một vị trí vật

lý duy nhất.

Hình 3.30. Chia sẻ segment 0

 Nhận xét

 Tƣơng tự nhƣ trong kỹ thuật phân vùng động, kỹ thuật này cũng phải giải

quyết vấn đề cấp phát động: làm thế nào để thỏa m n một yêu cầu vùng nhớ

kích thƣớc N? Cần phải chọn vùng nhớ nào trong danh sách vùng nhớ tự

do để cấp phát? Nhƣ vậy cần phải ghi nhớ hiện trạng bộ nhớ để có thể cấp

phát đúng. Ở đây hệ điều hành thƣờng dùng thuật toán best-fit hay first-fit.

 Vì các đoạn có kích thƣớc không bằng nhau nên sự phân đoạn tƣơng tự nhƣ

sự phân vùng động. Sự khác nhau là với sự phân đoạn một chƣơng trình có

thể chiếm giữ hơn một phân vùng, và các phân vùng này có thể không liền

kề với nhau. Sự phân vùng loại trừ đƣợc sự phân mảnh nội vi, nhƣng nhƣ sự

phân vùng động nó vẫn xuất hiện hiện tƣợng phân mảnh ngoại vi.

 Sự phân trang là không tƣờng minh đối với ngƣời lập trình, trong khi đó sự

phân đoạn là tƣờng minh đối với ngƣời lập trình, và nó cung cấp một sự

199

thuận lợi để ngƣời lập trình tổ chức chƣơng trình và dữ liệu. Ngƣời lập trình

hoặc trình biên dịch có thể gán các chƣơng trình và dữ liệu đến các đoạn nhớ

khác nhau.

 Trong hệ thống sử dụng kỹ thuật phân đoạn, hiện tƣợng phân mảnh ngoài lại

xuất hiện khi các khối nhớ tự do đều quá nhỏ, không đủ để chứa một phân

đoạn.

Kỹ thuật phân đoạn thể hiện đƣợc cấu trúc logic của chƣơng trình, nhƣng nó phải

cấp phát các khối nhớ có kích thƣớc khác nhau cho các phân đoạn của chƣơng trình

trên bộ nhớ vật lý, điều này phức tạp hơn nhiều so với việc cấp phát các khung trang.

Để dung h a vấn đề này các hệ điều hành có thể kết hợp cả phân trang và phân đoạn.

3.4.2.3. Phân đoạn kết hợp phân trang Paged segmentation)

Cả hai kỹ thuật phân trang và phân đoạn đều có những thế mạnh của nó. Sự phân

trang, là trong suốt đối với ngƣời lập trình, loại bỏ đƣợc hiện tƣợng phân mảnh trong.

Sự phân đoạn, là thấy đƣợc đối với ngƣời lập trình, có khả năng điều khiển các cấu trúc

dữ liệu lớn dần và hỗ trợ chia s và bảo vệ bộ nhớ. Để kết hợp những thuận lợi của cả

hai kỹ thuật phân trang và phân đoạn, một số hệ thống đƣợc trang bị sự hỗ trợ của cả

phần cứng CPU và phần mềm hệ điều hành để cài đặt kết hợp cả hai kỹ thuật này.

Trong các hệ thống kết hợp phân trang và phân đoạn, không gian địa chỉ bộ nhớ

của ngƣời dùng đƣợc chia thành các đoạn theo ý muốn của ngƣời lập trình, sau đó mỗi

đoạn lại đƣợc chia thành các trang có kích thƣớc cố định bằng nhau. Theo cách nhìn

của ngƣời lập trình thì địa chỉ logic bao gồm một segment number và một segment

offset. Theo cách nhìn của hệ thống thì segment offset đƣợc xem nhƣ một page number

và page offser cho một trang trong phạm vi một segment đƣợc chỉ ra.

Không gian địa chỉ luận lý là một tập các phân đoạn, mỗi phân đoạn đƣợc chia

thành nhiều trang. Khi một tiến trình đƣợc đƣa vào hệ thống, hệ điều hành sẽ c p phát

cho tiến trình các trang cần thiết đ chứa đủ các phân đoạn của tiến trình.

 Cơ chế MMU trong kỹ thuật phân đoạn kết hợp phân trang

Để hỗ trợ kỹ thuật phân đoạn, cần có một b ng phân đoạn, nhƣng giờ đây mỗi

200

phân đoạn cần có một b ng trang phân biệt.

Hình 3.31. Mô hình phân đoạn ế hợp phân trang

 Chuyển đổi địa chỉ:

Mỗi địa chỉ logic là một bộ ba:

 số hiệu phân đoạn (s): sử dụng nhƣ chỉ mục đến phần tử tƣơng ứng trong

bảng phân đoạn.

 số hiệu trang (p): sử dụng nhƣ chỉ mục đến phần tử tƣơng ứng trong bảng

trang của phân đoạn.

 địa chỉ tương đối trong trang (d): ết hợp với địa chỉ b t đầu của trang đ

201

tạo ra địa chỉ vật lý mà trình quản lý bộ nhớ sử dụng.

Hình 3.32. Hỗ trợ phần cứng của phân đoạn ết hợp phân trang

Tất cả các mô hình tổ chức bộ nhớ trên đây đều có khuynh hƣớng cấp phát cho

tiến trình toàn bộ các trang yêu cầu trƣớc khi thật sự xử lý. Vì bộ nhớ vật lý có kích

thƣớc rất giới hạn, điều này dẫn đến hai khuyết điểm:

 Kích thƣớc tiến trình bị giới hạn bởi kích thƣớc của bộ nhớ vật lý.

 Khó có thể bảo trì nhiều tiến trình cùng lúc trong bộ nhớ, và nhƣ vậy khó

nâng cao mức độ đa chƣơng của hệ thống.

3.5. QUẢN L BỘ NHỚ ẢO

Nếu đặt toàn bộ không gian địa chỉ luận lý vào bộ nhớ vật lý, thì kích thƣớc của

chƣơng trình bị giới hạn bởi kích thƣớc bộ nhớ vật lý.

Thực tế, trong nhiều trƣờng hợp, chúng ta không cần phải nạp toàn bộ chƣơng

trình vào bộ nhớ vật lý cùng một lúc, vì tại một thời điểm chỉ có một chỉ thị của tiến

trình đƣợc xử lý. Ví dụ, các chƣơng trình đều có một đoạn m lệnh xử lý lỗi,

nhƣng đoạn m lệnh này hầu nhƣ rất ít khi đƣợc sử dụng vì hiếm khi xảy ra lỗi, trong

trƣờng hợp này, không cần thiết phải nạp đoạn m lệnh xử lý lỗi từ đầu.

Từ nhận x t trên, một giải pháp đƣợc đề xuất là cho ph p thực hiện một chƣơng

202

trình chỉ đƣợc nạp từng phần vào bộ nhớ vật lý. Ý tư ng chính của gi i pháp này à tại

mỗi thời đi m chỉ ưu trữ trong bộ nhớ v t các chỉ thị và dữ iệu của chương trình

cần thiết cho việc thi hành tại thời đi m đ Khi cần đến các chỉ thị hác, những chỉ thị

mới sẽ được nạp vào bộ nhớ, tại vị trí trước đ bị chiếm giữ b i các chỉ thị nay hông

còn cần đến nữa Với gi i pháp này, một chương trình c th ớn hơn ích thước của

v ng nhớ c p phát cho n

Một cách để thực hiện ý tƣởng của giải pháp trên đây là sử dụng kỹ thuật phủ lắp.

Kỹ thuật phủ lắp không đ i hỏi bất kỳ sự trợ giúp đặc biệt nào của hệ điều hành, nhƣng

trái lại, lập trình viên phải biết cách lập trình theo cấu trúc phủ lắp, và điều này đ i hỏi

khá nhiều công sức.

Để giải phóng lập trình viên khỏi các suy nghỉ về giới hạn của bộ nhớ, mà cũng

không tăng thêm khó khăn cho công việc lập trình của họ, ngƣời ta nghĩ đến các kỹ

thuật tự động, cho ph p xử lý một chƣơng trình có kích thƣớc lớn chỉ với một vùng

nhớ có kích thƣớc nhỏ. Giải pháp đƣợc tìm thấy với khái niệm bộ nhớ o (Virtual

Memory).

3.5.1. Khái niệm ộ nhớ ảo

Bộ nhớ o à một ỹ thu t cho phép x một tiến trình hông được nạp toàn bộ

vào bộ nhớ v t . Bộ nhớ ảo mô hình hóa bộ nhớ chính nhƣ một bảng lƣu trữ rất lớn

và đồng nhất, tách biệt hẳn khái niệm không gian địa chỉ luận lý và không gian địa chỉ

vật lý. Ngƣời dùng chỉ nhìn thấy và làm việc trong không gian địa chỉ ảo luận lý , việc

chuyển đổi sang không gian địa chỉ vật lý đƣợc thực hiện tự động tại thời điểm thực thi

chƣơng trình.

 Ưu điểm:

 Nhờ việc tách biệt bộ nhớ ảo và bộ nhớ vật lý, có thể tổ chức một bộ nhớ ảo có

kích thƣớc lớn hơn bộ nhớ vật lý.

 Bộ nhớ ảo cho ph p giảm nhẹ công việc của lập trình viên vì họ không cần bận

tâm đến giới hạn của vùng nhớ vật lý, cũng nhƣ không cần tổ chức chƣơng

trình theo cấu trúc phủ lắp. Ngƣời dùng có thể viết chƣơng trình có không gian

địa chỉ ảo rất lớn, đơn giản hoá công việc lập trình.

 Vì mỗi chƣơng trình ngƣời dùng có thể lấy ít hơn bộ nhớ vật lý nên nhiều

chƣơng trình hơn có thể đƣợc thực thi tại một thời điểm. Điều này giúp gia

203

tăng việc sử dụng CPU và thông lƣợng nhƣng không tăng thời gian đáp ứng.

 Yêu cầu ít nhập/xuất hơn để nạp hay hoán vị mỗi chƣơng trình ngƣời dùng

trong bộ nhớ vì thế mỗi chƣơng trình ngƣời dùng sẽ chạy nhanh hơn.

 Các quá trình d dàng chia s tập tin và không gian địa chỉ, cung cấp cơ chế

hữu hiệu cho việc tạo lập quá trình.

Do đó, chạy một chƣơng trình mà nó không nằm hoàn toàn nằm trong bộ nhớ có

lợi cho cả ngƣời dùng và hệ thống.

 Khuyết điểm:

 Cần kết hợp kỹ thuật hoán vị để chuyển các phần của chƣơng trình vào/ra giữa

bộ nhớ chính và bộ nhớ phụ khi cần thiết.

 Bộ nhớ ảo không d cài đặt và về thực chất có thể giảm năng lực nếu nó đƣợc

dùng thiếu thận trọng.

Trong chƣơng này, chúng ta thảo luận bộ nhớ ảo đƣợc quản lý theo ỹ thu t phân

trang theo y u cầu và xem xét độ phức tạp và chi phí.

Hình 3.33. Mô hình bộ nhớ o

3.5.2. Cài đặt ộ nhớ ảo

Nguyên lý cơ bản của bộ nhớ ảo là vẫn dựa trên 2 kỹ thuật phân trang và phân

đoạn, nhƣng trong kỹ thuật bộ nhớ ảo:

 Bộ phận quản lý bộ nhớ không nạp tất cả các trang/đoạn của một tiến trình

vào bộ nhớ để nó hoạt động, mà chỉ nạp các trang/đoạn cần thiết tại thời điểm

khởi tạo. Sau đó, khi cần bộ phận quản lý bộ nhớ sẽ dựa vào PCT hoặc SCT

204

của mỗi tiến trình để nạp các trang/đoạn tiếp theo.

 Nếu có một trang/đoạn của một tiến trình cần đƣợc nạp vào bộ nhớ trong tình

trạng trên bộ nhớ không c n khung trang/phân đoạn trống thì bộ phận quản lý

bộ nhớ sẽ đƣa một trang/đoạn không cần thiết tại thời điểm hiện tại ra bộ bộ

nhớ ngoài (swap out , để lấy không gian nhớ trống đó nạp trang/đoạn vừa có

yêu cầu. Trang/đoạn bị swap out sẽ đƣợc đƣa vào tại thời điểm thích hợp hoặc

cần thiết sau này swap in). Cơ chế này gọi là kỹ thuật phân trang/đoạn theo

yêu cầu.

Vì vậy hệ điều hành có thể cài đặt bộ nhớ ảo theo 2 kỹ thuật:

 Phân trang theo y u cầu: Tức à phân trang ết hợp với swap

 Phân đoạn theo y u cầu: Tức à phân đoạn ết hợp với swap

Cả hai kỹ thuật trên đều phải có sự hỗ trợ của phần cứng máy tính, cụ thể là CPU.

Đa số các hệ điều hành đều chọn kỹ thuật phân trang theo yêu cầu, vì nó đơn giản, d

cài đặt và chi phí thấp hơn.

Hình 3.34. Phân biệt phân trang đơn và phân trang trang theo y u cầu

Trƣờng hợp a, là trƣờng hợp phân trang đơn: trong trƣờng hợp này nếu bộ nhớ

205

chỉ c n 3 frame trống thì tiến trình cũng sẽ không nạp vào bộ nhớ đƣợc. Vì phân trang

đơn đ i hỏi tất cả 4 page của tiến trình đều đƣợc nạp vào bộ nhớ. Rõ ràng sẽ là l ng phí

bộ nhớ nếu biết rằng tiến trình này chỉ cần nạp vào bộ nhớ 2 trang P0, P2 là tiến trình có thể khởi tạo và bắt đầu hoạt động đƣợc.

Trƣờng hợp b, là trƣờng hợp bộ nhớ ảo sử dụng kỹ thuật phân trang theo yêu cầu:

trong trƣờng hợp này hệ điều hành không nạp tất cả các page của tiến trình vào bộ nhớ

mà chỉ nạp 2 page cần thiết ban đầu để tiến trình có thể khởi tạo và bắt đầu hoạt động

đƣợc, mặc dầu trên bộ nhớ chính c n một vài frame c n trống. Rõ ràng trong trƣờng

hợp này hệ điều hành đ tiết kiệm đƣợc không gian bộ nhớ chính và nhờ đó mà hệ điều

hành có thể nạp vào bộ nhớ nhiều tiến trình hơn và cho ph p các tiến trình này hoạt

động đồng thời với nhau.

Bộ nhớ ảo là một kỹ thuật cho ph p xử lý một tiến trình mà không cần nạp tất cả

tiến trình vào bộ nhớ. Các trang/đoạn của một tiến trình, đang ở trên bộ nhớ phụ, mà

chƣa đƣợc nạp vào bộ nhớ chính sẽ đƣợc định vị tại một không gian nhớ đặc biệt trên

bộ nhớ phụ đĩa HDD , có thể gọi không gian nhớ này là bộ nhớ o của tiến trình. Với

sự hỗ trợ của phần cứng hệ điều hành đ đƣa ra các cơ chế thích hợp để nhận biết một

trang/đoạn của tiến trình đang thực hiện là đang ở trên bộ nhớ chính hay trên bộ nhớ

phụ. Nhƣ vậy bộ nhớ ảo đ mở rộng ảo đƣợc không gian bộ nhớ vật lý của hệ thống.

Chƣơng trình của ngƣời dùng chỉ nhìn thấy và làm việc trên không gian địa chỉ ảo, việc

chuyển đổi từ địa chỉ ảo sang địa chỉ vật lý do bộ phận quản lý bộ nhớ MMU của hệ

điều hành và CPU thực hiện.

Đ cài đ t được bộ nhớ o hệ điều hành cần ph i c :

 Một lƣợng không gian bộ nhớ phụ đĩa HDD cần thiết đủ để chứa các

trang/đoạn bị swap out, không gian đĩa này đƣợc gọi là không gian hoán vị.

 Có cơ chế để theo dõi các trang/đoạn của tất cả các tiến trình đang hoạt động

trên bộ nhớ chính, là đang ở trên bộ nhớ chính hay ở trên bộ nhớ phụ. Trong

trƣờng hợp này hệ điều hành thƣờng đƣa thêm một bit trạng thái (bit present)

vào các phần tử trong PCT hoặc SCT.

 Dựa vào các tiêu chuẩn cụ thể để chọn một trang nào đó trong số các trang

đang ở trên bộ nhớ chính để swap out trong trƣờng hợp cần thiết. Các hệ

điều hành đ đƣa ra các thuật toán cụ thể Thuật toán thay thế trang ở cuối

206

chƣơng để phục vụ cho mục đích này.

Sự khác biệt giữa các kỹ thuật phân trang, phân đoạn trong các kỹ thuật bộ nhớ ảo

thông qua bảng sau đây:

Phân trang đơn Phân đoạn đơn Phân trang theo Phân đoạn theo yêu

yêu cầu cầu

Bộ nhớ chính đƣợc Bộ nhớ chính không Bộ nhớ chính đƣợc Bộ nhớ chính không

đƣợc phân vùng chia thành các phần đƣợc phân vùng chia thành các phần trƣớc. nhỏ có kích thƣớc cố trƣớc nhỏ có kích thƣớc định, đƣợc gọi là các

cố định, đƣợc gọi khung trang

là các khung trang.

Chƣơng trình của Các đoạn của Chƣơng trình của Các đoạn của

ngƣời dùng đƣợc chia chƣơng trình đƣợc ngƣời dùng đƣợc chƣơng trình đƣợc

thành các trang bởi chỉ ra bởi ngƣời lập chia thành các trang chỉ ra bởi ngƣời lập

trình biên dịch hoặc trình và đƣợc gởi bởi trình biên dịch trình và đƣợc gởi

hệ thống quản lý bộ đến cho trình biên hoặc hệ thống quản đến cho trình biên

nhớ. dịch. lý bộ nhớ. dịch.

Có thể xảy ra phân Không xảy ra phân Có thể xảy ra phân Không xảy ra phân

mảnh trong, nhƣng mảnh trong trong mảnh trong, nhƣng mảnh trong trong có thể xảy ra phân phạm vi các frame . có thể xảy ra phân phạm vi các frame . mảnh ngoài. Không xảy ra phân mảnh ngoài. Không xảy ra phân mảnh ngoài. mảnh ngoài.

Hệ điều hành phải Hệ điều hành phải Hệ điều hành phải Hệ điều hành phải

duy trì một bảng duy trì một bảng duy trì một bảng duy trì một bảng

trang cho mỗi tiến đoạn cho mỗi tiến trang cho mỗi tiến đoạn cho mỗi tiến

trình để theo dõi các trình để theo dõi các trình để theo dõi các trình để theo dõi các

trang đƣợc nạp vào đoạn của tiến trình trang của tiến trình đoạn của tiến trình

các khung trang trên bộ nhớ đƣợc trên bộ nhớ đƣợc trên bộ nhớ đƣợc

nạp vào địa chỉ nào nạp vào các khung nạp vào địa chỉ nào

207

và độ dài của đoạn trang nào) và độ dài của đoạn

Hệ điều hành phải Hệ điều hành phải Hệ điều hành phải Hệ điều hành phải

duy trì một danh sách duy trì một danh duy trì một danh duy trì một danh

để theo dõi các khung sách để theo dõi các sách để theo dõi các sách để theo dõi các

trang c n trống trên phần c n trống trên khung trang còn phần c n trống trên

bộ nhớ chính. bộ nhớ chính. trống trên bộ nhớ bộ nhớ chính.

chính.

CPU sử dụng CPU sử dụng CPU sử dụng CPU sử dụng

(page number và (segment number (page number và (segment number và

offset để tính địa offset để tính địa và offset để tính offset để tính địa chỉ tuyệt đối. chỉ tuyệt đối. địa chỉ tuyệt đối. chỉ tuyệt đối.

Tất cả các trang Tất cả các đoạn Không phải nạp tất Không phải nạp tất

cả các đoạn của tiến của tiến trình phải của tiến trình phải cả các trang của tiến trình vào các khung trình vào các khung đƣợc nạp vào bộ đƣợc nạp vào bộ trang trên bộ nhớ trang trên bộ nhớ nhớ chính để chạy nhớ chính để chạy chính khi tiến trình chính khi tiến trình chạy. Các trang có trừ khi khi sử dụng trừ khi khi sử chạy. Các trang có thể đƣợc đọc khi thể đƣợc đọc khi các kỹthuật phủ lắp. dụng các kỹ thuật cần. cần. phủ lắp.

Đọc một trang vào Đọc một trang vào

bộ nhớ chính có thể bộ nhớ chính có thể

cần phải đƣa một cần phải đƣa một

hoặc đoạn ra đĩa. trang ra đĩa.

Bản 3.2. Phân biệt giữa ỹ thu t phân trang và phân đoạn trong ỹ thu t bộ nhớ o

3.5.3. Kỹ thuật ộ nhớ ảo

208

3.5.3.1. Phân trang theo yêu cầu Demand Paging)

Một hệ thống phân trang theo y u cầu à hệ thống s dụng ỹ thu t phân trang

ết hợp với ỹ thu t hoán vị. Một tiến trình đƣợc xem nhƣ một tập các trang, thƣờng trú

trên bộ nhớ phụ thƣờng là đĩa . Khi cần xử lý, tiến trình sẽ đƣợc nạp vào bộ nhớ

chính. Nhƣng thay vì nạp toàn bộ chƣơng trình, chỉ những trang cần thiết trong

thời điểm hiện tại mới đƣợc nạp vào bộ nhớ. Nhƣ vậy một trang chỉ được nạp vào bộ

nhớ chính hi c y u cầu. Với mô hình này, cần cung cấp một cơ chế phần cứng giúp

phân biệt các trang đang ở trong bộ nhớ chính và các trang trên đĩa. Có thể sử dụng lại

bit valid-invalid nhƣng với ngữ nghĩa mới:

 valid : trang tƣơng ứng là hợp lệ và đang ở trong bộ nhớ chính.

 invalid : hoặc trang không hợp lệ không thuộc về không gian địa chỉ của tiến

trình hoặc trang hợp lệ nhƣng đang đƣợc lƣu trên bộ nhớ phụ.

Một phần tử trong bảng trang mô tả cho một trang không nằm trong bộ nhớ

209

chính, sẽ đƣợc đánh dấu invalid và chứa địa chỉ của trang trên bộ nhớ phụ.

Hình 3.35. B ng trang với một số trang tr n bộ nhớ phụ

3.5.3.2. Cấu tr c ảng trang

Cấu trúc bảng trang phải cho ph p phản ánh tình trạng của một trang là đang nằm

trong bộ nhớ chính hay bộ nhớ phụ. Bộ nhớ phụ lƣu trữ những trang không đƣợc nạp

vào bộ nhớ chính. Bộ nhớ phụ thƣờng đƣợc sử dụng là đĩa, và vùng không gian đĩa

dùng để lƣu trữ tạm các trang trong kỹ thuật hoán vị đƣợc gọi là không gian hoán vị.

Một bảng trang có nhiều mục từ. Mỗi mục từ là một phần tử trong bảng trang.

Trong kỹ thuật bộ nhớ ảo một phần tử trong bảng trang sẽ chứa nhiều thông tin phức

210

tạp hơn nhƣ sau:

Hình 3.36. C u trúc một phần t của b ng trang

 Page frame number - chỉ số khung trang là trƣờng quan trọng nhất cho biết

số thứ tự khung trang nơi mà trang này đƣợc định vị trong bộ nhớ vật lý.

 Referenced: Khi một quá trình đƣợc nạp vào bộ nhớ bit này = 0. Khi có sự

tham chiếu trên trang này thì bit Referenced đƣợc đặt lại =1.

 Modified: Khi một quá trình đƣợc nạp vào bộ nhớ bit này = 0. Khi có sửa

đổi nội dung trên trang này thì bit Modified đƣợc đặt lại =1.

 Protection: chỉ ra kiểu truy xuất cho phép, Protection = 1: chỉ đọc ;

Protection = 0: đọc/viết.

 Present/absent: giá trị 1thì mục từ hợp lệ và có thể dùng; giá trị 0 thì trang

không hợp lệ vì đây là trang ảo tức là mục từ này hiện không có trong bộ

nhớ vật lý. Nếu CPU cố gắng truy xuất đến mục từ này sẽ gây ỗi về trang.

Dựa vào 2 bit Modified và Referenced sẽ giúp hệ điều hành quyết định lựa chọn

trang nào sẽ hoán vị ra hông gian hoán vị và dành không gian bộ nhớ vật lý nạp cho

một yêu cầu khác.

Ngoài ra kích thƣớc của trang c n ảnh hƣởng đến tỉ lệ xảy ra lỗi trang. Ví dụ: khi

kích thƣớc của trang là rất nhỏ thì sẽ có một lƣợng lớn các trang của tiến trình trên bộ

nhớ chính, sau một thời gian thì tất cả các trang của bộ nhớ sẽ chứa các tiến trình đƣợc

tham chiếu gần đây, vì thế tốc độ xảy ra lỗi trang đƣợc giảm xuống.

3.5.3.3. Lỗi trang

Mỗi một truy cập của CPU đến dữ liệu/chỉ thị phải thực hiện hai truy cập bộ nhớ:

một truy cập đến bảng trang và một truy cập đến dữ liệu/chỉ thị trong bộ nhớ. Khi Truy

xuất đến một trang đƣợc đánh dấu không hợp lệ trong bảng trang sẽ làm phát sinh

một ỗi trang (page fault). Cơ chế phần cứng sẽ phát sinh một ngắt để báo (trap) cho hệ

211

điều hành biết. Hệ điều hành sẽ xử lý lỗi trang nhƣ sau:

Hình 3.37. Các giai đoạn x ỗi trang

 Bước 1: Kiểm tra truy xuất đến bộ nhớ là hợp lệ hay không hợp lệ đúng là

không gian địa chỉ của tiến trình không?

 Bước 2: Nếu truy xuất không hợp lệ truy xuất trái ph p : sẽ kết thúc tiến trình

Ngƣợc lại : đến bƣớc 3 xử lý lỗi trang

 Bước 3 : Tìm vị trí chứa trang muốn truy xuất trên đĩa không gian hoán vị

 Bước 4 : Tìm một khung trang trống trong bộ nhớ chính:

 Nếu tìm thấy : đến bƣớc 5.

 Nếu không c n khung trang trống, chọn một khung trang « nạn nhân » và

chuyển trang « nạn nhân » ra bộ nhớ phụ swap out , cập nhật bảng trang

tƣơng ứng trang vừa hoán vị ra sẽ trở nên không hợp lệ rồi đến bƣớc 5.

 Bước 5: Chuyển trang muốn truy xuất từ bộ nhớ phụ vào bộ nhớ chính: nạp

trang cần truy xuất vào khung trang trống đ chọn (swap in); cập nhật nội dung

212

bảng trang tƣơng ứng trang vừa hoán vị vào là hợp lệ .

 Bước 6: Tái kích hoạt tiến trình ngƣời dùng.

3.5.3.4. Thay thế trang

Khi xảy ra một lỗi trang, cần phải mang trang vắng mặt vào bộ nhớ. Nếu không

có một khung trang nào trống, hệ điều hành cần thực hiện công việc thay thế trang –

chọn một trang đang nằm trong bộ nhớ mà không đƣợc sử dụng tại thời điểm hiện tại

và chuyển nó ra không gian hoán vị trên đĩa để giải phóng một khung trang dành chỗ

nạp trang cần truy xuất vào bộ nhớ.

Nhƣ vậy nếu không có khung trang trống, thì mỗi khi xảy ra lỗi trang cần phải

thực hiện hai thao tác chuyển trang: chuyển một trang từ bộ nhớ chính ra bộ nhớ phụ

(swap out) và nạp một trang khác từ bộ nhớ phụ vào bộ nhớ chính (swap in). Có thể

giảm bớt số lần chuyển trang bằng cách sử dụng bit M (Modified bit). Bit này đƣợc gắn

với mỗi trang để phản ánh tình trạng trang có bị cập nhật hay không: giá trị của

bit đƣợc cơ chế phần cứng đặt là 1 mỗi lần có một từ đƣợc ghi vào trang, để ghi nhận

nội dung trang có bị sửa đổi. Khi cần thay thế một trang, nếu bit cập nhật có giá trị là 1

thì trang cần đƣợc lƣu lại trên đĩa, ngƣợc lại, nếu bit cập nhật là 0, nghĩa là trang không

bị thay đổi, thì không cần lƣu trữ trang trở lại đĩa bỏ qua thao tác swap out .

Sự thay thế trang là cần thiết cho kỹ thuật phân trang theo yêu cầu. Nhờ cơ chế

này, hệ thống có thể hoàn toàn tách rời bộ nhớ ảo và bộ nhớ vật lý, cung cấp cho lập

trình viên một bộ nhớ ảo rất lớn so với bộ nhớ vật lý có kích thƣớc nhỏ hơn rất nhiều.

3.5.3.4.1. Sự thi hành phân trang theo yêu cầu

Việc áp dụng kỹ thuật phân trang theo yêu cầu có thể ảnh hƣởng mạnh đến tình

hình hoạt động của hệ thống.

Gỉa sử p là xác suất xảy ra một lỗi trang 0 ≤ p ≤ 1):

p = 0 : không có lỗi trang nào

p = 1 : mỗi truy xuất sẽ phát sinh một lỗi trang

Thời gian thật sự cần để thực hiện một truy xuất bộ nhớ TEA là:

213

TEA = (1-p)ma + p tdp [+ swap out ] + swap in + tái kích hoạt

Trong công thức này, ma là thời gian truy xuất bộ nhớ, tdp thời gian xử lý lỗi trang. Có thể thấy rằng, để duy trì ở một mức độ chấp nhận đƣợc sự chậm tr trong

hoạt động của hệ thống do phân trang, cần phải duy trì tỷ ệ phát sinh ỗi trang thấp.

Hơn nữa, để cài đặt kỹ thuật phân trang theo yêu cầu, cần phải giải quyết hai

vấn đề chủ yếu: xây dựng một thu t toán c p phát hung trang, và thu t toán thay thế

trang.

3.5.3.4.2. Các thuật toán thay thế trang

Vấn đề chính khi thay thế trang là chọn lựa một trang «nạn nhân» để chuyển ra bộ

nhớ phụ. Có nhiều thuật toán thay thế trang khác nhau, nhƣng tất cả cùng chung một

mục tiêu: chọn trang «nạn nhân» là trang mà sau khi thay thế sẽ gây ra ít ỗi trang

nh t. Có thể đánh giá hiệu qủa của một thuật toán bằng cách xử lý trên cùng một chuỗi

các địa chỉ cần truy xu t và tính toán số lƣợng lỗi trang phát sinh.

Ví dụ: Xét chuỗi các trang cần truy xuất là :

7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

Để xác định số các lỗi trang xảy ra khi sử dụng một thuật toán thay thế trang

nào đó trên cùng một chuỗi truy xuất cụ thể, cần phải biết số lƣợng khung trang còn

trống đang sử dụng trong hệ thống là bao nhiêu.

3.5.3.4.2.1. Thuật toán FIFO

tưởng: Ghi nhận thời điểm một trang đƣợc mang vào bộ nhớ chính. Khi cần

chọn trang để thay thế trang, trang vào bộ nhớ trƣớc nhất sẽ đƣợc chọn.

Ví dụ : sử dụng 3 khung trang , ban đầu cả 3 khung đều trống :

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0 7 7 7

0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0 0

1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2 1

* * * * * * * * * * * * * * *

Ghi chú : * : có lỗi trang

214

Tổng số lỗi trang : 15 lỗi

 Nhận xét:

 Để áp dụng thuật toán FIFO, thực tế không nhất thiết phải ghi nhận thời điểm

mỗi trang đƣợc nạp vào bộ nhớ, mà chỉ cần tổ chức quản lý các trang trong

bộ nhớ dạng một danh sách FIFO, khi đó trang đầu danh sách sẽ đƣợc

chọn để thay thế.

 Thuật toán thay thế trang FIFO d hiểu, d cài đặt. Tuy nhiên thuật toán

không lƣờng trƣớc trƣờng hợp: trang đƣợc chọn để thay thế có thể là trang

mà CPU đang cần. Vì vậy sau khi thay thế sẽ tiếp tục gây ra lỗi trang.

 Số lƣợng lỗi trang xảy ra sẽ tăng lên khi số lƣợng khung trang sử dụng tăng.

Hiện tƣợng này gọi là nghịch Be ady.

Ví dụ: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5

Sử dụng 3 khung trang, sẽ có 9 lỗi trang phát sinh

1 2 3 4 1 2 5 1 2 3 4 5

1 1 1 4 4 4 5 5 5 5 5 5

2 2 2 1 1 1 1 1 3 3 3

3 3 3 2 2 2 2 2 4 4

* * * * * * * * *

Sử dụng 4 khung trang , sẽ có 10 lỗi trang phát sinh

1 2 3 4 1 2 5 1 2 3 4 5

1 1 1 1 1 1 5 5 5 5 4 4

2 2 2 2 2 2 1 1 1 1 5

3 3 3 3 3 3 2 2 2 2

4 4 4 4 4 4 3 3 3

* * * * * * * * * *

3.5.3.4.2 2 T uật to n tố ưu (OPTIMAL)

tưởng: Thay thế trang sẽ lâu đƣợc sử dụng nhất trong tƣơng lai.

215

Ví dụ: sử dụng 3 khung trang, khởi đầu đều trống:

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7

0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0

1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1

* * * * * * * * *

Tổng số lỗi trang : 9 lỗi

 Nhận xét:

Thuật toán này bảo đảm số lƣợng lỗi trang phát sinh là thấp nhất , nó cũng không

gánh chịu nghịch lý Belady. Tuy nhiên, khó khăn ở chổ hệ thống không thể biết trƣớc

chuỗi truy xuất của tiến trình trong tƣơng lai.

3.5.3.4.2.3. T uật to n «Lâu n ất c ưa sử dụn » (Least-recently-used LRU)

tưởng: Với mỗi trang, ghi nhận thời điểm cuối cùng trang đƣợc truy cập,

trang đƣợc chọn để thay thế sẽ là trang lâu nhất chƣa đƣợc truy xuất.

Ví dụ: sử dụng 3 khung trang, khởi đầu đều trống:

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 7 7 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0

1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 7 7 7

* * * * * * * * * * * *

Tổng số lỗi trang: 12 lỗi

 Nhận xét:

Thuật toán này đ i hỏi phải đƣợc cơ chế phần cứng hỗ trợ để xác định một thứ tự

cho các trang theo thời điểm truy xuất cuối cùng. Có thể cài đặt theo một trong hai

cách:

 S dụng bộ đếm: thêm vào cấu trúc của mỗi phần tử trong bảng trang một

trƣờng ghi nhận thời điểm truy xuất mới nhất, và thêm vào cấu trúc của CPU

216

một bộ đếm. Mỗi lần có sự truy xuất bộ nhớ, giá trị của bộ đếm tƣơng ứng

tăng lên 1. Mỗi lần thực hiện truy xuất đến một trang, giá trị của bộ đếm đƣợc

ghi nhận vào trƣờng thời điểm truy xuất mới nhất của phần tử tƣơng ứng với

trang trong bảng trang. Thay thế trang có giá trị trƣờng thời điểm truy xuất

mới nhất là nhỏ nhất.

 S dụng stac : Tổ chức một stack lƣu trữ các số hiệu trang. Mỗi khi thực hiện

một truy xuất đến một trang, số hiệu của trang sẽ đƣợc xóa khỏi vị trí hiện

hành trong stack và đƣa lên đầu stack. Trang ở đỉnh stack là trang đƣợc truy

xuất gần nhất, và trang ở đáy stack là trang lâu nhất chƣa đƣợc sử dụng.

3.5.3.4.2.4. Các thuật toán xấp xỉ LRU

Có ít hệ thống đƣợc cung cấp đầy đủ các hỗ trợ phần cứng để cài đặt đƣợc thuật

toán LRU thật sự. Tuy nhiên, nhiều hệ thống đƣợc trang bị thêm một bit tham

h o (Reference):

 Bit Reference, đƣợc khởi tạo là 0 cho mỗi phần tử trong bảng trang. Bit

Reference này có giá trị 1 mỗi lần trang tƣơng ứng đƣợc truy cập, và đƣợc

phần cứng gán trở về 0 sau từng chu kỳ qui định trƣớc.

 Sau từng chu kỳ qui định trƣớc, kiểm tra giá trị của các bit Reference, có thể

xác định đƣợc trang nào đ đƣợc truy xuất đến và trang nào không, sau khi đ

kiểm tra xong, các bit Reference đƣợc phần cứng gán trở về 0.

 Với bit Reference, có thể biết đƣợc trang nào đ đƣợc truy xuất, nhƣng không

biết đƣợc thứ tự truy xuất. Thông tin không đầy đủ này dẫn đến nhiều thuật

toán xấp xỉ LRU khác nhau.

 Thuật toán với các it tham khảo phụ

tưởng: Có thể thu thập thêm nhiều thông tin về thứ tự truy xuất hơn bằng cách

lƣu trữ các bit References sau từng khoảng thời gian đều đặn:

 Với mỗi trang, sử dụng thêm 8 bit lịch sử history trong bảng trang

 Sau từng khoảng thời gian nhất định thƣờng là100 millisecondes , một

ngắt đồng hồ đƣợc phát sinh, và quyền điều khiển đƣợc chuyển cho hệ điều

hành. Hệ điều hành đặt bit Reference của mỗi trang vào bit cao nhất trong 8

bit phụ trợ của trang đó bằng cách đẩy các bit khác sang phải 1 vị trí, bỏ luôn

217

bit thấp nhất.

 Nhƣ vậy 8 bit thêm vào này sẽ lƣu trữ tình hình truy xuất đến trang trong 8

chu kỳ cuối cùng.

 Nếu gía trị của 8 bit là 00000000, thì trang tƣơng ứng đ không đƣợc

dùng đến suốt 8 chu kỳ cuối cùng, ngƣợc lại nếu nó đƣợc dùng đến ít nhất 1

lần trong mỗi chu kỳ, thì 8 bit phụ trợ sẽ là 11111111. Một trang mà 8 bit phụ

trợ có giá trị 11000100 sẽ đƣợc truy xuất gần thời điểm hiện tại hơn trang có

8 bit phụ trợ là 01110111.

 Nếu x t 8 bit phụ trợ này nhƣ một số nguyên không dấu, thì trang LRU là

trang có số phụ trợ nhỏ nhất.

 Nhận xét: Số lƣợng các bit lịch sử có thể thay đổi tùy theo phần cứng, và

phải đƣợc chọn sao cho việc cập nhật là nhanh nhất có thể.

 Thuật toán «cơ hội thứ hai »

tưởng: Sử dụng một bit Reference duy nhất. Thuật toán cơ sở vẫn là FIFO, tuy

nhiên khi chọn đƣợc một trang theo tiêu chuẩn FIFO, kiểm tra bit Reference của

trang đó:

 Nếu giá trị của bit Reference là 0, thay thế trang này.

 Ngƣợc lại, cho trang này một cơ hội thứ hai, và chọn trang FIFO tiếp theo.

 Khi một trang đƣợc cho cơ hội thứ hai, giá trị của bit Reference đƣợc đặt lại

là 0, và thời điểm vào Ready List đƣợc cập nhật lại là thời điểm hiện tại.

 Một trang đ đƣợc cho cơ hội thứ hai sẽ không bị thay thế trƣớc khi hệ

thống đ thay thế hết những trang khác. Hơn nữa, nếu trang thƣờng

xuyên đƣợc sử dụng, bit Reference của nó sẽ duy trì đƣợc giá trị 1, và trang

hầu nhƣ không bao giờ bị thay thế.

218

 Nhận x t: Có thể cài đặt thuật toán «cơ hội thứ hai » với một xâu vòng.

Hình 3.38. Thu t toán thay thế trang cơ hội thứ hai

 Thuật toán «cơ hội thứ hai» nâng cao Not Recently Used - NRU)

tưởng : xem các bit Reference và bit Modified nhƣ một cặp có thứ tự . Với hai

bit này, có thể có 4 tổ hợp tƣơng đƣơng 4 lớp sau:

Lớp 1: 0,0 không truy xuất, không sửa đổi: đây là trang tốt nhất để thay thế.

Lớp 2: 0,1 không truy xuất gần đây, nhƣng đ bị sửa đổi: trƣờng hợp này không

thật tốt, vì trang cần đƣợc lƣu trữ lại trƣớc khi thay thế.

Lớp 3: (1,0) đƣợc truy xuất gần đây, nhƣng không bị sửa đổi: trang có thể nhanh

219

chóng đƣợc tiếp tục đƣợc sử dụng.

Lớp 4: (1,1) đƣợc truy xuất gần đây, và bị sửa đổi: trang có thể nhanh chóng

đƣợc tiếp tục đƣợc sử dụng, và trƣớc khi thay thế cần phải đƣợc lƣu trữ lại.

Lớp 1 có độ ƣu tiên thấp nhất, và lớp 4 có độ ƣu tiên cao nhất. Một trang sẽ thuộc

về một trong bốn lớp trên, tùy vào bit Reference và bit Modified của trang đó.

Trang đƣợc chọn để thay thế là trang đầu tiên tìm thấy trong lớp có độ ƣu tiên thấp

nhất và khác rỗng.

 Các thuật toán thống kê

tưởng: sử dụng một biến đếm lƣu trữ số lần truy xuất đến một trang, và phát triển

hai thuật toán sau:

 Thu t toán LFU (The Least Frequent y Used): thay thế trang có giá trị

biến đếm nhỏ nhất, nghĩa là trang ít đƣợc dùng thƣờng xuyên nhất.

 Thu t toán MFU (The Most Frequently Used): thay thế trang có giá trị

biến đếm lớn nhất, nghĩa là trang đƣợc sử dụng nhiều nhất.

3.5.3.4.3. Các giải thuật cấp phát khung trang

Có 2 chiến lƣợc

 Cấp phát cố định:

 C p phát công b ng: nếu có m khung trang và n quá trình, mỗi quá trình

đƣợc cấp m/n khung trang.

 C p phát tương xứng: dựa vào kích thƣớc của tiến trình để cấp phát số

khung trang tƣơng xứng:

Bƣớc 1: Gọi si = kích thƣớc của bộ nhớ ảo cho quá trình pi

Bƣớc 2: S = ∑ si

Bƣớc 3: m = tổng số khung trang có thể sử dụng

Bƣớc 4: Cấp phát ai khung trang tới quá trình pi : ai = (si / S) m

 Cấp phát theo độ ưu tiên

Sử dụng ý tƣởng cấp phát tƣơng xứng, nhƣng thay vì sử dụng kích cỡ của quá

trình, ta dùng độ ƣu tiên. Nếu quá trình pi phát sinh lỗi trang, chọn một trong các khung trang của nó để thay thế, hoặc chọn một khung trang của quá trình khác với độ ƣu tiên

220

thấp hơn để thay thế.

K xử lý lỗ tran , tron trườn ợp t ốn k ôn còn k un trốn u

n p ả c ú ý ến c c vấn sau:

 N n chọn trang nào trong số các trang tr n bộ nhớ chính đ swap out: Về vấn đề

này chúng ta đ biết hệ điều hành sẽ áp dụng một thuật toán thay thay thế cụ thể

nào đó, nhƣng ở đây cần chú ý thêm rằng đối tƣợng của các thuật toán thay thế

trang là chỉ các trang của tiến trình xảy ra lỗi trang, hay tất cả các trang của các tiến

trình đang có trên bộ nhớ chính. Tức là, nên chọn trang của tiến trình xảy ra lỗi

trang để thay thế thay thế cục bộ , hay chọn một trang của tiến trình khác để thay

thế thay thế toàn cục . Nếu chọn trang của tiến trình xảy ra lỗi trang thì sẽ đơn giản

hơn với hệ điều hành và không ảnh hƣởng đến các tiến trình khác, nhƣng cách này

có thể làm cho tiến trình hiện tại lại tiếp tục xảy ra lỗi trang ngay sau khi hệ điều

hành vừa xử lý lỗi trang cho nó, vì trang mà hệ điều hành vừa chọn để đƣa ra swap

out lại là trang cần truy xuất ở thời điểm tiếp theo. Nếu chọn trang của tiến trình

khác thì tiến trình hiện tại sẽ ít có nguy cơ xảy ra lỗi trang ngay sau đó hơn, nhƣng

cách này sẽ phức tạp hơn cho hệ điều hành, vì hệ điều hành phải kiểm soát lỗi trang

của nhiều tiến trình khác trong hệ thống, và hệ điều hành khó có thể dự đoán đƣợc

nguy cơ xảy ra lỗi trang của các tiến trình trong hệ thống. Trong trƣờng hợp này có

thể lỗi trang sẽ lan truyền đến nhiều tiến trình khác trong hệ thống, khi đó việc xử

lý lỗi trang của hệ điều hành sẽ phức tạp hơn rất nhiều. Đa số các hệ điều hành đều

chọn cách thứ nhất vì nó đơn giản và không ảnh hƣởng đến các tiến trình khác

trong hệ thống.

 “Neo” một số trang: Trên bộ nhớ chính tồn tại các trang của các tiến trình đặc biệt

quan trọng đối với hệ thống, nếu các tiến trình này bị tạm dừng thì sẽ ảnh hƣởng rất

lớn đến hệ thống và có thể làm cho hệ thống ngừng hoạt động, nên hệ điều hành

không đƣợc đƣa các trang này ra đĩa trong bất kỳ trƣờng hợp nào. Để tránh các

thuật toán thay thế trang chọn các trang này hệ điều hành tổ chức đánh dấu các

trang này, bằng cách đƣa thêm một bit mới vào các phần tử trong các PCT, bit này

đƣợc gọi là bit neo. Nhƣ vậy, các thuật toán thay thế trang sẽ không xem x t đến

các trang đƣợc đánh dấu neo khi cần phải đƣa một trang nào đó ra đĩa.

 Phải tránh đƣợc trƣờng hợp hệ thống xảy ra hiện tƣợng “trì trệ hệ thống”: Trì trệ

221

hệ thống là hiện tƣợng lỗi trang xảy ra liên tục làm cho hệ thống luôn ở trong tình

trạng xử lý lỗi trang, tức là đa phần thời gian xử lý của CPU đều dành cho việc xử

lý lỗi trang của hệ điều hành.

 Đánh d u các trang bị thay đ i: Khi xử lý lỗi trang, ta thấy hệ điều hành thƣờng

phải thực hiện thao tác swap out. Tức là, hệ điều hành phải tốn thời gian cho thao

tác swap out, điều này sẽ làm giảm tốc độ của hệ thống và có thể gây l ng phí thời

gian xử lý của CPU. Hệ điều hành có thể hạn chế đƣợc điều này bằng cách: hệ điều

hành chỉ thực sự swap out một trang hi trang đ đã bị thay đ i từ ần n được

nạp vào bộ nhớ gần đây nh t. Khi quyết định swap out một trang để lấy khung

trang trống để nạp một trang mới vào bộ nhớ, mà trang cần swap này không bị thay

đổi kể từ lần nạp gần đây nhất, hệ điều hành sẽ không swap out nó mà hệ điều hành

chỉ nạp trang mới vào bộ nhớ và ghi đè lên nó, điều này có nghĩa là hệ điều hành đ

tiết kiện đƣợc thời gian swap out một trang ra đĩa. Để làm đƣợc điều này hệ điều

hành phải giải quyết hai vấn đề sau: Thứ nhất, làm thế nào để xác định đƣợc một

trang là đ bị thay đổi hay chƣa kể từ lần nạp vào bộ nhớ gần đây nhất. Thứ hai,

nếu không swap out một trang thì khi cần hệ điều hành sẽ swap in nó từ đâu. Đối

với v n đề thứ nh t: hệ điều hành chỉ cần x t bit modified của trang này trong bảng

trang bằng 1thì nội dung của trang này đ bị thay đổi so với lần nạp vào bộ nhớ gần

đây nhất. Đối với v n đề thứ hai: hệ điều hành có thể swap in một trang mà ví trí

ban đầu của nó trên đĩa, hoặc tại không gian hoán vị của nó. Trong một số hệ điều

hành khi một tiến trình đƣợc tạo thì lập tức hệ điều hành sẽ cấp cho nó một không

gian hoán vị trên đĩa, bất kỳ khi nào tiến trình bị swap out nó đều đƣợc chuyển nó

đến không gian hoán vị của nó, khi tiến trình kết thúc thì không gian hoán vị của nó

sẽ đƣợc giải phóng. Nhƣ vậy để chuẩn bị cho việc swap in sau này, khi nạp một

trang của tiến trình vào bộ nhớ hệ điều hành sẽ ghi nội dung của trang này vào

không gian hoán vị của nó.

3.6. TÓM TẮT

Có nhiều cách tiếp cận khác nhau để tổ chức quản lý bộ nhớ, nhƣng nhìn chung

đều đạt đến các mục tiêu sau :

 Cấp phát kịp thời và đầy đủ đáp ứng yêu cầu của quá tiến trình.

 Quá trình chuyển đổi địa chỉ, tổ chức cấp phát bộ nhớ là trong suốt với ngƣời

 Tận dụng hiệu quả bộ nhớ ít có vùng nhớ không sử dụng đƣợc

222

dùng, và có khả năng tái định vị.

 Bộ nhớ đƣợc bảo vệ tốt

 Có khả năng chia s bộ nhớ giữa các tiến trình

Tổ chức bộ nhớ chính có thể cấp phát liên tục hoặc cấp phát không liên tục. Khi

không gian bộ nhớ chính cạn kiệt ngƣời dùng vẫn có thể chạy chƣơng trình của mình

với kích thƣớc lớn vì nhờ sự có mặt của bộ nhớ ảo. Bộ nhớ ảo là một kỹ thuật cho ph p

không gian địa chỉ luận lý đƣợc ánh xạ vào bộ nhớ vật lý nhỏ hơn. Bộ nhớ ảo cũng cho

ph p cấp độ đa chƣơng đƣợc gia tăng, tăng khả năng sử dụng CPU. Ngoài ra, ngƣời lập

223

trình không phải bận tâm về không gian giới hạn của bộ nhớ.

Câu hỏi ôn tập

1. Chức năng bộ quản lý bộ nhớ là gì?

2. Quản lý bộ nhớ thực hiện nhiệm vụ gì? Giai đoạn nào do hệ điều hành thực

hiện, giai đoạn nào cần sự trợ giúp của phần cứng?

3. Phân biệt địa chỉ luận lý và địa chỉ vật lý?

4. Phân biệt phân mảnh trong, phân mảnh ngoài. Các giải thuật cấp phát bộ nhớ

nào thì gặp phải các vấn đề này? Cho ví dụ?

5. Phân tích ƣu điểm, khuyết điểm của tổ chức bộ nhớ theo cơ chế phân trang và

phân đoạn?

6. Tìm hiểu bộ nhớ Ram của MS-DOS.

7. Tìm hiểu sự phân trang/đoạn trong Windows NT.

8. Tìm hiểu quản lý bộ nhớ trong Windows 2000. 9. X t một hệ thống trong đó một chƣơng trình khi đƣợc nạp vào bộ nhớ sẽ phân

biệt hoàn toàn phân đoạn m lệnh và phân đoạn dữ liệu. Giả sử CPU sẽ xác

định đƣợc khi nào cần truy xuất lệnh hay dữ liệu, và phải truy xuất ở đâu. Khi

đó mỗi chƣơng trình sẽ đƣợc cung cấp 2 bộ thanh ghi base-limit: một cho

phân đoạn m lệnh, và một cho phân đoạn dữ liệu. Bộ thanh ghi base-limit của

phân đoạn m lệnh tự động đƣợc đặt thuộc tính read-only. Thảo luận các ƣu và

khuyết điểm của hệ thống này.

10. Tại sao kích thƣớc trang luôn là lũy thừa của 2 ?

11. Tại sao trong hệ thống sử dụng kỹ thuật phân trang, một tiến trình không thể

truy xuất đến vùng nhớ không đƣợc cấp cho nó? Làm cách nào hệ điều hành có

thể cho ph p sự truy xuất này xảy ra? Hệ điều hành có nên cho phép điều đó

không ? Tại sao?

12. Nếu cho ph p hai phần tử trong bảng trang cùng lƣu trữ một số hiệu khung

trang trong bộ nhớ thì sẽ có hiệu quả gì ?Giải thích làm cách nào hiệu quả này

có thể đƣợc sử dụng để giảm thời gian cần khi sao ch p một khối lƣợng lớn

vùng nhớ từ vị trí này sang vị trí khác. Khi đó nếu sửa nội dung một trang thì

sẽ tác động đến trang c n lại thế nào?

224

13. Vì sao đôi lúc ngƣời ta kết hợp hai kỹ thuật phân trang và phân đoạn?

14. Mô tả cơ chế cho ph p một phân đoạn có thể thuộc về không gian điạ chỉ của

hai tiến trình.

15. Giải thích vì sao chia s một module trong kỹ thuật phân đoạn lại d hơn trong

kỹ thuật phân trang?

Bài Tập

Bài 1: Hệ thống bộ nhớ dùng cơ chế phân khu động, kích thƣớc ban đầu 1024M. Các

tiến trình đến lần lƣợc theo thứ tự sau. H y cấp phát bộ nhớ cho các tiến trình?

Request A 130K

Request B 100K

Return A

Request C 50K

Return B

Request D 80K

Return C

Request E 60K

Returrn D

Request F 80K

Retrun E

Request G 80K

Retrun F

Retrun G

Bài 2: Cho hiện trạng các tiến trình nằm trong bộ nhớ chính nhƣ sau:

a) Giả sử tiến trình mới F yêu cầu 3 đơn vị cấp phát. H y vẽ lại hiện trạng bộ nhớ

sau khi dùng giải thuật Best – fit để cấp phát bộ nhớ cho tiến trình F trên.

b) Vẽ lại hiện trạng bộ nhớ dùng bảng đồ bit sau khi thực hiện câu a và tiến trình

E kết thúc.

Bài 3: Giả sử bộ nhớ chính gồm các phân vùng trống có kích thƣớc theo thứ tự là

225

600K, 500K, 200K, 300K. Các tiến trình đến theo thứ tự yêu cầu kích thƣớc tƣơng ứng

P1(250K) , P2(400K) , P3(150K) và P4(250K sẽ đƣợc cấp phát bộ nhớ nhƣ thế nào,

nếu sử dụng:

a Thuật toán First fit

b Thuật toán Best fit

c Thuật toán Worst fit

Thuật toán nào cho ph p sử dụng bộ nhớ hiệu quả nhất trong các trƣờng hợp trên?

Bài 4: Bộ nhớ chính kích thƣớc 2M. H y cấp phát bộ nhớ theo hệ thống bạn thân cho

các tiến trình đến theo thứ tự sau: P1 100K , P2 60K , P3 120K , P4 76K ,

RETURN (P3) , P5 (50K) , RETURN (P1), RETURN (P2) , RETURN (P4) ,

RETURN (P5).

Bài 5: Bộ nhớ gồm 4 quá trình và 4 lỗ trống nhƣ sau. Mỗi đvcp là 4KB.

Qúa trình A B C D

Địa chỉ 0 3 7 12 15 18 20 24

Tổng số đvcp 3 4 5 3 3 2 4 10

a) Vẽ bản đồ bit để quản lý hiện trạng bộ nhớ trên.

b) Vẽ lại hiện trạng bộ nhớ sau khi thực hiện các yêu cầu sau các câu sau là độc

lập nhau :

 Quá trình A yêu cầu 2 đvcp theo giải thuật First-fit

 Quá trình F yêu cầu 5KB theo giải thuật Best-fit và D kết thúc.

 G yêu cầu 7KB theo giải thuật worst-fit và C kết thúc.

 H yêu cầu 10KB theo First-fit. Và yêu cầu của I(2KB), J(5KB), K(1KB) theo

Next-fit.

Bài 6: X t một không gian địa chỉ có 8 trang, mỗi trang có kích thƣớc 1K. ánh xạ vào

bộ nhớ vật lý có 32 khung trang.

a) Địa chỉ ảo gồm bao nhiêu bit?

b) Địa chỉ thật gồm bao nhiêu bit?

226

c) Địa chỉ độ dời bao nhiêu bit?

Bài 7: Một hệ thống bộ nhớ dùng cơ chế phân trang theo yêu cầu, sử dụng địa chỉ luận

lý 8bit, dung lƣợng bộ nhớ chính 64M, hệ điều hành sử dụng 4bit để làm địa chỉ độ

dời.

a) Tính tổng số trang luận lý, tổng số trang vật lý?

b) Tính kích thƣớc trang?

c) Dùng bao nhiêu bit để đánh địa chỉ cho bộ nhớ thật, bao nhiêu bit để

đánh địa chỉ cho trang và bao nhiêu bit để đánh địa chỉ cho khung trang?

Bài 8: X t một hệ thống sử dụng kỹ thuật phân trang, với bảng trang đƣợc lƣu trữ

trong bộ nhớ chính.

a) Nếu thời gian cho một lần truy xuất bộ nhớ bình thƣờng là 200 nanoseconds,

thì mất bao nhiêu thời gian cho một thao tác truy xuất bộ nhớ trong hệ thống

này?

b) Nếu sử dụng TLBs với hit-ratio (tỉ lệ tìm thấy là 75%, thời gian để tìm trong

TLBs xem nhƣ bằng 0, tính thời gian truy xuất bộ nhớ trong hệ thống?

Bài 9: Giả sử bộ nhớ chính có 4 khung trang trống. Tƣơng ứng mỗi giải thuật sau đây,

hãy tính tổng số lỗi trang và vẽ lại khung trang ở từng trƣờng hợp phát sinh lỗi ứng với

chuỗi tham khảo sau:

9 1 4 5 2 8 1 3 2 1 8 9 4 3 3 6 5

a) Giải thuật thay thế trang FIFO.

b) Giải thuật thay thế trang OPT.

c) Giải thuật thay thế trang LRU.

Giải thuật nào đƣợc xem là tối ƣu nhất trong các trƣờng hợp trên?

Bài 10: Hệ thống bộ nhớ theo cơ chế phân trang gồm bộ nhớ chính 32KB, bộ nhớ ảo

64KB, kích thƣớc trang và khung trang là 4KB, bảng trang đƣợc cho nhƣ sau. Xác định

địa chỉ vật lý khi biết các địa chỉ luận lý sau:

227

a. 2798 b. 3:300 c. 2,5 d. 16A0H e. 0011 0000 0000 1011

Bài 11: Các tiến trình P1,P2,P3 cùng tồn tại trong bộ nhớ, tại thời điểm biên dịch các

tiến trình đƣợc cấp phát các trang nhƣ sau:

page P1 0 1 2 Symbol table common routines data1 P2 Symbol table common routines data2 P3 Symbol table common routines data2

Với danh sách các khung trang trống sau. H y định vị các trang vào các khung

trang trống trong bộ nhớ vật lý và vẽ bảng trang PCT)?

12 20 18 16 4 15 5 2 30 11 7

228

Danh sách khung trang trống

Bài 12: Một tiến trình đƣợc nạp vào bộ nhớ theo mô hình phân trang với kích thƣớc

trang là 1024 byte. Bảng trang nhƣ sau. H y chuyển các địa chỉ logic sau thành địa chỉ

vật lý?

a) 1225 1

b) 3255

5 c) 3:1000

3 d) 96721

6

Bài 13: Một bộ nhớ quản lý theo cơ chế phân đoạn, có bảng phân đoạn sau đây:

Segment Base Length

600 0 219

14 1 2300

100 2 90

580 3 1327

96 4 1952

Hãy tìm địa chỉ vật lý tƣơng ứng với các địa chỉ logic sau đây và vẽ hình minh họa.

d. 3,400 a. 0,430

e. 4,112 b. 1,10

229

f. 1,15 c. 2,500

TÀI LIỆU TH M KHẢO

[1] Trần Hạnh Nhi, Giáo trình hệ điều hành nâng cao, Đại học Khoa học Tự

nhiên TP.HCM, 2004.

[2] [Lê Khắc Nhiên n, Hoàng Kiếm], Giáo trình Nh p môn hệ điều hành, Đại

học Khoa học Tự nhiên, TP.HCM 2004.

[3] Nguyễn Kim Tuấn, Giáo trình Hệ điều hành, Đại học Huế, 2004.

230

[4] Nguyễn Ph Trường, Giáo trình Hệ điều hành, Đại học Cần Thơ, 2005

CHƯ NG 4: QUẢN L TẬP TIN VÀ ĐĨ

4.1. MỤC TIÊU

Trong hầu hết các ứng dụng, tập tin là thành phần chủ yếu. Cho dù mục tiêu của

ứng dụng là gì nó cũng phải bao gồm phát sinh và sử dụng thông tin. Thông

thƣờng đầu vào của các ứng dụng là tập tin và đầu ra cũng là tập tin cho việc truy xuất

của ngƣời dùng và các chƣơng trình khác sau này.

Bài học này này xoay quanh các vấn đề:

 Hiểu đƣợc khái niệm về tập tin?

 Hiểu cách thức tổ chức và quản lý tập tin nhƣ thế nào?

 Hiểu các cơ chế cài đặt hệ thống tập tin trên các hệ điều hành.

 Biết các thao tác với tập tin, một số tính chất của tập tin.

 Biết cấu trúc và tổ chức lƣu trữ của đĩa.

 Vận dụng cấu trúc dữ liệu và kiến trúc máy tính để cài đặt hệ thống tập

tin.

Trong khi một tiến trình đang chạy nó có thể lƣu trữ một lƣợng giới hạn thông tin

trong phạm vị không gian địa chỉ sở hữu của nó. Tuy nhiên khả năng lƣu trữ này bị

giới hạn bởi kích thƣớc không gian địa chỉ ảo của hệ thống. Đối với một vài ứng dụng

thì không gian này là vừa đủ, nhƣng đối với một số ứng dụng khác thì nó là quá nhỏ.

M t hác, nếu lƣu giữ thông tin trong không gian địa chỉ của tiến trình thì thông tin này

sẽ bị mất khi tiến trình kết thúc. Vấn đề thứ ba là phải đáp ứng việc truy cập thông tin

đồng thời giữa các tiến trình trong môi trƣờng hệ điều hành đa nhiệm. Những vấn đề

trên chúng ta đ biết trong các chƣơng Quản lý tiến trình và Quản lý bộ nhớ của tài liệu

này. Để giải quyết những vấn đề trên hệ điều hành phải thiết kế một hệ thống lƣu trữ

thông tin sao cho: Thứ nh t à ph i ưu trữ được một hối ượng ớn thông tin Thứ hai

à thông tin ph i được b o toàn hi tiến trình s dụng n ết thúc Và cuối cùng là có

th c nhiều tiến trình truy xu t thông tin đồng thời.

Giải pháp cho tất cả vấn đề trên là lƣu trữ thông tin trên đĩa và các thiết bị media

231

khác trong các đơn vị dữ liệu, đƣợc gọi là các tập tin (file). Các tiến trình có thể đọc

thông tin của tập tin và rồi ghi mới thông tin vào tập tin nếu cần thiết. Thông tin đƣợc

lƣu trữ trong tập tin phải không bị tác động bởi việc tạo và kết thúc tiến trình. Các tập

tin đƣợc quản lý bởi hệ điều hành. Thành phần hệ điều hành tham gia trực tiếp vào quá

trình quản lý các tập tin trên đĩa đƣợc gọi là hệ thống t p tin. Hệ điều hành phải xây

dựng cấu trúc và tổ chức hoạt động của hệ thống tập tin. Một trong những nhiệm vụ

quan trọng của hệ thống tập tin là theo dõi việc lƣu trữ tập tin trên đĩa, theo dõi và điều

hành việc truy cập tập tin của các tiến trình, bảo vệ tập tin và nội dung của tập tin,

…Cấu trúc, tổ chức hoạt động và những nhiệm vụ của hệ thống tập tin của hệ điều

hành, của các hệ điều hành cụ thể, sẽ đƣợc chúng ta xem x t trong chƣơng này.

4.2. TỔNG QU N VỀ QUẢN L TẬP TIN VÀ ĐĨ

4.2.1. Tập tin và hệ thống quản lý tập tin

4.2.1.1. Tập tin file)

- Tập tin: là đơn vị logic đƣợc lƣu trữ và xử lý bởi thành phần quản lý tập tin của hệ

điều hành.

- Nội dung của tập tin: có thể là một chƣơng trình, một tập các thủ tục hoặc một khối

dữ liệu. Nó có thể là một d y tuần tự các Byte không cấu trúc, hệ điều hành không biết

nội dung của tập tin. Một d y các record có chiều dài cố định. Hay là một cấu trúc cây,

gồm cây của những record có thể không có cùng độ dài, mỗi record có một trƣờng

khoá để giúp cho việc tìm kiếm nó đƣợc nhanh hơn.

- Các kiểu tập tin:

 T p tin thường: là tập tin văn bản hay tập tin nhị phân chứa thông tin của ngƣời

dùng.

 T p tin thư mục: là những tập tin hệ thống dùng để lƣu giữ cấu trúc của hệ thống

tập tin.

 T p tin c tự đ c biệt: liên quan đến nhập xuất thông qua các thiết bị nhập

xuất tuần tự nhƣ màn hình, máy in, mạng.

 T p tin hối: dùng để truy xuất trên các thiết bị lƣu trữ khối đĩa là thiết bị lƣu

232

trữ khối .

- Thiết ị lưu trữ tập tin: thƣờng đƣợc chia thành các block có kích thƣớc cố định

bằng nhau, các block đƣợc đánh địa chỉ để phân biệt. Thành phần quản lý tập tin của hệ

điều hành có nhiệm vụ cấp phát và thu hồi các block cho các tập tin khi cần thiết. Vì

kích thƣớc tập tin có thể thay đổi, nên các hệ điều hành thƣờng tổ chức cấp phát động

các block cho các tập tin. Hệ điều hành có thể tổ chức cấp phát tĩnh block cho các tập

tin có kích thƣớc không thay đổi nhƣ các tập tin thực thi, các tập tin thƣ viện, … Cấp

phát tĩnh sẽ nhanh và đơn giản hơn nhiều so với cấp phát động.

- Các hệ điều hành cho phép truy xuất tập tin theo 2 cách tuần tự và ngẫu nhiên:

 Truy xu t tuần tự: Các tiến trình có thể đọc tất cả các Byte hoặc các record

trong tập tin, theo thứ tự, từ một vị trí bắt đầu nào đó mà không thể bỏ qua một

Byte hay một record nào.

 Truy c p ngẫu nhi n: Thì ngƣợc lại, các tiến trình có thể truy xuất tại bất kỳ một

Byte hay một record nào đó trong tập tin.

Trong cả hai cách trên đều phải chỉ ra vị trí bắt đầu đọc. Trong cách thứ nh t, mỗi

thao tác đọc cần phải xác định ví trí bắt đầu đọc trong tập tin. Trong cách thứ 2, trƣớc

khi đọc hệ thống phải tìm đến SEEK vị trí bắt đầu đọc, sau đó tiến hành đọc tuần tự

nhƣ cách thứ nhất.

4.2.1.2. Hệ thống quản lý tập tin (File management System)

Hệ thống quản lý tập tin, hay gọi ngắn gọn là hệ thống tập tin, là một tập các dịch

vụ mà hệ điều hành cung cấp cho ngƣời dùng và chƣơng trình ngƣời dùng để các đối

tƣợng này sử dụng các tập tin trên hệ thống. Ngƣời dùng và chƣơng trình của ngƣời

dùng chỉ có thể truy xuất các tập tin thông qua hệ thống tập tin. Hệ thống quản lý tập

tin của hệ điều hành phải đáp ứng các mục tiêu cơ bản sau đây:

Đáp ứng các yêu cầu về lưu trữ dữ liệu của người dùng, ao gồm:

 Khả năng lƣu trữ, độ tin cậy và hiệu suất.

 Cực tiểu hay loại bỏ các nguy cơ có thể dẫn đến hỏng hoặc mất dữ liệu.

 Cung cấp sự hỗ trợ vào/ra cho nhiều loại thiết bị lƣu trữ khác nhau.

 Cung cấp sự hỗ trợ vào/ra cho nhiều ngƣời dùng trong các hệ thống đa ngƣời

dùng.

233

 Cung cấp một tập chuẩn các thủ tục giao diện vào/ra.

Đối với người dùng thì hệ thống quản lý tập tin của một hệ điều hành phải

đáp ứng các yêu cầu tối thiểu sau đây:

 Mỗi ngƣời dùng phải có thể tạo create , xoá delete và thay đổi change

các tập tin.

 Mỗi ngƣời dùng có thể đƣợc điều khiển để truy cập đến các tập tin của ngƣời

dùng khác.

 Mỗi ngƣời dùng phải có thể di chuyển dữ liệu giữa các tập tin.

 Mỗi ngƣời dùng phải có thể truy cập đến các tập tin của họ thông qua tên

tƣợng trƣng của tập tin.

 Mỗi ngƣời dùng phải có thể dự ph ng và khôi phục lại các tập tin của họ

trong trƣờng hợp hệ thống bị hỏng.

4.2.1.3. Kiến tr c hệ thống tập tin (File System Architecture):

Các hệ điều hành khác nhau có cách tổ chức hay kiến trúc của hệ thống tập tin

khác nhau. Hình vẽ sau đây trình bày một kiến trúc hệ thống tập tin chung nhất mà các

hệ điều hành thƣờng sử dụng.

Hình 4.1. Kiến trúc hệ thống qu n t p tin

 Cấp thấp nhất: device driver à các điều hi n thiết bị truyền thông trực tiếp

với các thiết bị ngoại vi. Device driver chịu trách nhiệm khởi tạo một thao tác

vào/ra trên thiết bị và xử lý các yêu cầu vào/ra. Các device driver trong hệ

234

thống tập tin thƣờng là các điều khiển đĩa.

 Basic file system: hệ thống tập tin cơ sở hoặc cấp vào/ra vật lý, đó là giao

diện chính giữa môi trƣờng bên ngoài với hệ thống máy tính. Nó giao tiếp với

các block dữ liệu trao đổi giữa các đĩa với hệ thống. Vì thế nó đƣợc kết nối với

các block trên đĩa và các buffer trên bộ nhớ chính. Nó không hiểu các dữ liệu

cũng nhƣ các cấu trúc tập tin phức tạp.

 Basic I/O supervisor: chịu trách nhiệm khởi tạo và kết thúc tất cả các thao tác

vào/ra tập tin. Tại cấp này, các cấu trúc điều khiển đƣợc duy trì, các cấu trúc

điều khiển này giao tiếp với thiết bị vào/ra, bộ phận lập lịch đọc đĩa và bộ phận

quản lý trạng thái tập tin. Basic I/O supervisor kết hợp với các bộ phận lập lịch

đọc đĩa để tối ƣu các thao tác đọc đĩa, nhằm góp phần tăng tốc độ truy xuất tập

tin của các chƣơng trình ngƣời dùng.

 Logical I/O: Cấp vào/ra logic là thành phần quan trọng của hệ thống tập tin,

nó cho phép ngƣời dùng và chƣơng trình ngƣời dùng truy cập đến các record.

Trong khi hệ thống tập tin cơ sở giao tiếp với các block dữ liệu, thì logical I/O

giao tiếp với các record file. Logical I/O cung cấp các công cụ chung nhất để

thực hiện các thao tác vào/ra tập tin dựa trên record.

 Cấp trên cùng của kiến trúc hệ thống tập tin kết hợp chặt chẽ với ngƣời dùng.

Nó cung cấp một giao diên chuẩn giữa chƣơng trình ngƣời dùng, hệ thống tập

tin và thiết bị lƣu trữ dữ liệu. Các phƣơng pháp truy cập dữ liệu khác nhau

phản ánh các cấu trúc tập tin khác nhau và các cách khác nhau để truy cập và

xử lý dữ liệu. Các phƣơng pháp truy cập đó là: Pile, Sequential file, Indexed-

sequential file, Indexed file, Hashed, vv.

4.2.2. Bảng danh mục và tập tin chia s

4.2.2.1. Bảng danh mục (Directory Table):

Các hệ điều hành phải tổ chức bảng danh mục, để lƣu trữ các thông tin liên quan

đến các tập tin và các thƣ mục đang tồn tại trên đĩa hoặc thiết bị lƣu trữ khác , đặc biệt

là thông tin cho biết vị trí lƣu trữ nội dung của một tập tin trên đĩa. Để truy xuất đến

một tập tin hệ điều hành cần phải thông qua bảng danh mục này.

Bảng danh mục gồm nhiều Entry phần tử/mục vào , mỗi phần tử dùng để chứa

thông tin của một tập tin hay thƣ mục trên đĩa. Khi có một tập tin/ thƣ mục đƣợc tạo ra

235

thì hệ điều hành sẽ dùng một phần tử trong bảng danh mục để chứa các thông tin của

nó. Khi một tập tin/ thƣ mục bị xoá khỏi đĩa thì hệ điều hành sẽ giải phóng phần tử của

nó trong bảng danh mục. Có thể xem một phần tử trong bảng danh mục là một sự

tƣơng ứng giữa tập tin và vị trí lƣu trữ của tập tin tên đĩa. Số lƣợng phần tử trong bảng

danh mục có thể bị giới hạn cố định trƣớc hoặc không có giới hạn và có thể tăng/giảm

nếu cần. Bảng danh mục có thể đƣợc chứa tại một không gian đặc biệt nào đó trên đĩa,

hoặc có thể chứa trong một tập tin metadata (tập tin dạng dữ liệu đặc biệt dùng cho hệ

thống quản lý tập tin nào đó trên đĩa. Trong quá trình hoạt động của hệ thống bảng

danh mục thƣờng đƣợc hệ điều hành nạp từ đĩa vào bộ nhớ, để sẵn sàng cho việc truy

xuất tập tin của hệ điều hành sau này.

Một phần t trong danh mục phải chứa các thông tin tối thiểu sau đây:

 Tên của tập tin

 Kiểu của tập tin

 Địa chỉ vật lý của tập tin trên đĩa.

 Các thông tin kiểm tra truy nhập tập tin

 Các thông tin quản trị tập tin; vv.

Các hệ điều hành thƣờng thiết kế và sử dụng bảng danh mục hai mức:

 Mức 1: đƣợc gọi là bảng danh mục chủ, bao gồm các con trỏ trỏ tới bảng

danh mục ngƣời dùng.

 Mức 2: đƣợc gọi là bảng danh mục ngƣời dùng, bao gồm tên tập tin và

địa chỉ vật lý của tập tin trên đĩa,…

Tổ chức bảng thƣ mục gốc và bảng thƣ mục con là sự cài đặt cụ thể cấu trúc bảng

danh mục hai mức của hệ điều hành MS-DOS. Muốn truy xuất đến tập tin thì ngƣời

dùng và chƣơng trình của ngƣời dùng phải thông qua danh mục chủ và danh mục

ngƣời dùng hay thông qua thƣ mục gốc và thƣ mục con trong hệ điều hành MS-DOS.

Để thực hiện bất kỳ một thao tác nào trên nội dung của tập tin thì trƣớc hết tập tin

phải đƣợc mở. Khi nhận đƣợc yêu cầu mở tập tin thì hệ điều hành sử dụng đƣờng dẫn

đƣợc chỉ ra bởi ngƣời dùng hay chƣơng trình của ngƣời dùng để tìm đến một mục vào

tƣơng ứng với tập tin cần mở trong bảng danh mục. Phần tử trong bảng danh mục sẽ

cung cấp các thông tin cần thiết để hệ điều hành tìm đến các block đĩa chứa nội dung

của tập tin. Tùy vào từng hệ điều hành mà thông tin này có thể là địa chỉ của tất cả

236

block đĩa chứa nội dung tập tin trong chiến lƣợc cấp phát liên tục , địa chỉ của block

đĩa đầu tiên chứa nội dung tập tin trong chiến lƣợc danh sách liên kết và danh sách

kiên kết chỉ mục , hoặc số hiệu của I-node trong chiến lƣợc I-node . Các chiến lƣợc

này đƣợc trình bày trong phần quản lý các block chứa tập tin trên đĩa ngay sau đây.

Tổ chức bảng thƣ mục gốc của MS-DOS, Windows98 và MFT (Master File

Table của Windowsnt/2000 là các sự cài đặt cụ thể về cấu trúc của bảng danh mục của

các hệ điều hành. Tổ chức của bảng thƣ mục gốc của MS-DOS, Windows98,

Windowsnt/2000 sẽ đƣợc xem x t ở phần sau của chƣơng này.

4.2.2.2. Tập tin chia s (Shared File)

Tập tin chia s xuất hiện trong các môi trƣờng nhiều ngƣời dùng, đây là một kỹ

thuật của hệ điều hành, nhằm giúp nhiều ngƣời dùng trên hệ thống có thể cùng nhau sử

dụng một tập tin nào đó. Đối với ngƣời dùng, tập tin chia s là tập tin đƣợc xuất hiện

đồng thời trong các thƣ mục khác nhau của các ngƣời dùng khác nhau.

- Kỹ thuật chia s tập tin thƣờng đƣợc các hệ điều hành sử dụng nhất là, cho ph p các

phần tử trong các bảng danh mục ngƣời dùng khác nhau chứa thông tin của cùng một

tập tin chia s nào đó, đặc biệt là thông tin về địa chỉ của các block đĩa chứa nội dung

của tập tin chia s . Khi có một liên kết chia s mới đƣợc thiết lập đến một ngƣời dùng

nào đó, hệ điều hành chỉ cần sao ch p danh sách các block đĩa của tập tin chia s đến

phần tử tƣơng ứng trong bảng danh mục ngƣời dùng của ngƣời dùng đó.

+ Ưu đi m : Kỹ thuật này đơn giản d cài đặt

+ Khuyết đi m: nếu tập tin đƣợc cập nhật bởi một ngƣời dùng nào đó thì sự cập

nhật này sẽ không đƣợc nhìn thấy bởi các ngƣời dùng khác điều này sẽ vi phạm mục

đích của việc chia s tập tin . Vì khi tập tin đƣợc cập nhật thì hệ điều hành phải cung

cấp thêm một vài block đĩa cho nó, địa chỉ của các block đĩa mới này chỉ đƣợc liệt kê

thêm trong phần tử tƣơng ứng trong bảng danh mục của ngƣời dùng thực hiện sự cập

nhật tập tin mà không đƣợc liệt kê trong các bảng danh mục của ngƣời dùng khác.

+ Gi i pháp: danh sách địa chỉ các block đĩa chứa tập tin chia s không đƣợc liệt

kê trong phần tử bảng danh mục, mà đƣợc chứa trong một khối dữ liệu có cấu trúc nào

đó, tạm gọi là khối dữ liệu mô tả lƣu trữ tập tin hay nói gọn hơn là khối mô tả lƣu trữ.

Khối mô tả lƣu trữ này có thể đƣợc gắn vào chính tập tin chia s nếu kích thƣớc nhỏ,

hoặc đƣợc đặt ở một vị trí nào đó trên đĩa, nếu kích thƣớc lớn trƣờng hợp này có thể

237

dùng chung cho nhiều tập tin chia s . Mọi sƣ thay đổi về danh sách địa chỉ các block

đĩa chứa tập tin chia s đều đƣợc phản ánh ở khối mô tả lƣu trữ của nó. Các phần tử

trong bảng danh mục bây giờ chỉ đóng vai tr nhƣ một con trỏ trỏ đến khối mô tả lƣu

trữ của các tập tin chia s , nhờ vậy mà một sự thay đổi tập tin chia s từ bất kỳ một

ngƣời dùng nào trong số những ngƣời dùng đƣợc chia s tâp tin đều đƣợc nhìn thấy từ

tất cả những ngƣời dùng c n lại.

Trong môi trƣờng nhiều ngƣời dùng, việc chia s một tập tin cho nhiều ngƣời

dùng là rất cần thiết và nó đ mang lại nhiều thuận lợi. Nhƣng nó cũng phát sinh nhiều

lỗi trong quá trình sử dụng tập tin chia s giữa nhiều ngƣời dùng và chƣơng trình ngƣời

dùng, mà nếu hệ điều hành không tổ chức giám sát tốt thì có thể dẫn đến tình trạng

hỏng tập tin chia s hoặc nội dung của tâp tin chia s . Chúng ta đ biết hệ điều hành

giải quyết vấn đề này nhƣ thế nào trong chƣơng Quản lý tiến trình của tài liệu này. Đây

là một vấn đề lớn đối với các hệ điều hành đa nhiệm đặc biệt là các hệ điều hành mạng.

Các hệ điều hành này cung cấp đầy đủ các công cụ để ngƣời dùng và chƣơng trình của

ngƣời dùng kết hợp cùng với hệ điều hành khai thác, sử dụng tốt các tập tin chia s

nhƣng hạn chế thấp nhất các lỗi có thể xảy ra. Trong phần sau của chƣơng này chúng ta

sẽ xem x t những thao tác mà hệ điều hành phải thực hiện để đáp ứng yêu cầu mở tập

tin từ ngƣời dùng trong môi trƣờng nhiều ngƣời dùng.

4.2.3. Quản lý không gian đĩa

4.2.3.1. Kích thước lock

Đ t chức ưu trữ nội dung các t p tin tr n đĩa, các hệ điều hành đều chia hông

gian ưu trữ của đĩa thành các phần c ích thước b ng nhau được gọi à hối (b oc )

ưu trữ Nội dung của t p tin cũng được chia thành các b oc c ích thước b ng nhau,

trừ b oc cuối c ng, và b ng với ích thước các b oc đĩa Khi cần ưu trữ t p tin tr n

đĩa hệ điều hành c p cho mỗi t p tin một số ượng b oc vừa đủ đ chứa hết nội dung

của t p tin Kích thước của một b oc phụ thuộc vào qui định của vi x và hệ điều

hành, thường à 128 Byte, 256 Byte, ho c 512 Byte, vv.

Khi chọn kích thước của lock hệ điều hành phải xem xét các vấn đề sau:

 Nếu kích thƣớc block lớn thì d l ng phí đĩa, trong trƣờng hợp kích thƣớc của

tập tin không phải là bội số của kích thƣớc block.

 Nếu kích thƣớc block nhỏ thì đĩa đƣợc chia thành nhiều block, dẫn đến kích

238

thƣớc danh sách quản lý block của đĩa, danh sách quản lý block của một tập

tin, bảng các block, .v.v, sẽ tăng lên do đó dung lƣợng bộ nhớ chứa nó sẽ tăng

lên.

 Kích thƣớc của block phải là bội của kích thƣớc khối dữ liệu mà hệ thống

dùng khi thực hiện truyền dữ liệu giữa bộ nhớ chính và bộ nhớ phụ.

4.2.3.2. Theo dõi các lock tự do

Khi cần lƣu trữ nội dung của các tập tin lên đĩa, hệ điều hành cấp cho tập tin một

số lƣợng block đĩa nhất định để chứa hết nội dung của nó, các block đĩa này có thể nằm

tại các vị trí bất kỳ trên đĩa. Trong quá trình sử dụng tập tin kích thƣớc của tập tin có

thể thay đổi, tăng lên hay giảm xuống, do đó hệ điều hành phải tổ chức c p phát động

các block đĩa cho các tập tin. Khi kích thƣớc của tập tin tăng lên thì hệ điều hành phải

cấp phát thêm block cho nó, khi kích thƣớc tập tin giảm xuống hoặc khi tập tin bị xoá

khỏi đĩa thì hệ điều hành phải thu hồi lại các block đĩa đ cấp cho nó để có thể cấp cho

các tập tin khác sau này.

Để tổ chức cấp phát động các block đĩa cho tập tin hệ điều hành phải qu n

được trạng thái của các b oc , còn tự do hay đã c p phát, trên đĩa. Trong trƣờng hợp

này các hệ điều hành có thể sử dụng 2 kỹ thuật: D ng b ng bit và/ho c d ng danh sách

i n ết.

 Trong ảng bit: mỗi bit cho biết trạng thái của một block tƣơng ứng trên bộ

nhớ phụ, bit 0 thì block tƣơng ứng c n tự do, bit 1 thì block tƣơng ứng đ cấp

phát cho một tập tin nào đó. Nhƣ vậy, để tìm N block tự do hệ điều hành chỉ

cần tìm N bit 0 trong bảng bit, do đó tốc độ tìm và cấp phát block cho các tập

tin sẽ tăng lên rất nhiều.

 Trong danh sách liên kết: để quản lý các block c n tự do hệ điều hành dùng

một danh sách liên kết. Mỗi phần tử trong danh sách cho biết địa chỉ của một

block tự do trên đĩa. Nhƣ vậy khi cần cấp phát block cho cho một tập tin nào

đó thì hệ điều hành sẽ dựa vào danh sách các block tự do này.

Sau khi cấp phát hoặc thu hồi block hệ điều hành phải tiến hành cập nhật lại danh

sách liên kết hay bảng bit. Trong trƣờng hợp bảng bit hoặc danh sách liên kết lớn, hệ

điều hành sẽ chứa nó ở đĩa và chỉ nạp phần cần thiết vào bộ nhớ chính. Khi lựa chọn

239

các block trong tập các block tự do để cấp phát cho một tập tin hệ điều hành phải chọn

sao cho việc cấp phát đƣợc thực hiện nhanh và việc đọc sau này là tối ƣu với một thuật

toán đọc đĩa cụ thể nào đó.

4.2.3.3. Cấp hạn ngạch đĩa (Disk Quotas)

Để ngăn chặn ngƣời dùng sử dụng quá nhiều không gian đĩa, các hệ điều hành đa

ngƣời dùng thƣờng cung cấp một chiến lƣợc để ngƣời quản trị hệ thống giới hạn số

lƣợng không gian đĩa tối đa block mà mỗi ngƣời dùng đƣợc ph p sử dụng và hệ điều

hành phải đảm bảo rằng ngƣời dùng không thể sử dụng quá không gian đĩa mà hệ điều

hành cấp cho họ, chiến lƣợc này đƣợc gọi là c p hạn ngạch đĩa.

Khi ngƣời dùng mở tập tin, thì các thuộc tính và các địa chỉ block đĩa mà hệ điều

hành cấp cho tập tin đƣợc ghi vào b ng m t p tin trong bộ nhớ chính, trong đó có cả

thuộc tính cho biết ngƣời dùng nào sở hữu tập tin đƣợc mở. Bất kỳ một sự thay đổi nào về kích thƣớc tập tin cũng thay đổi đến hạn ngạch của ngƣời dùng sở hữu tập tin18.

Một bảng thứ hai chứa record quota, cho mỗi ngƣời dùng mở tập tin hiện tại,

thậm chí nếu tập tin đƣợc mở bởi một ngƣời nào đó, bảng này đƣợc trình bày ở hình

sau. Hình 4.2 cho thấy một phần của tập tin quota trên đĩa, cho biết tập tin của ngƣời

dùng nào là đang đƣợc mở. Khi tất cả các tập tin đều đƣợc đóng, record sẽ ghi trở lại

18 Nguy n Kim Tuấn, Giáo trình lý thuyết hệ điều hành, ĐH Huế, 2004,Tr.154

240

tập tin quota. Khi có một Entry mới đƣợc tạo ra trong bảng mở tập tin thì một con trỏ

(quota pointer trỏ tới record quota của ngƣời sở hữu tập tin, là đƣợc nhập vào nó. Mỗi

khi có một block đƣợc thêm vào một tập tin thì tổng số block của ngƣời dùng đƣợc

tăng lên và một check đƣợc gán đến cả Hard block limit và Soft block limit. Soft limit

có thể đƣợc vƣợt quá, nhƣng hard limit thì không thể. Một sự cố gắng thêm vào cuối

tập tin khi hard block limit bị vƣợt quá giới hạn sẽ trả về thông báo lỗi.

Khi một ngƣời dùng cố gắng login, hệ thống sẽ kiểm tra tập tin quota để xem

ngƣời dùng đ vƣợt quá soft limit của block hoặc tập tin hay chƣa soft block limit

hoặc soft file limit . Nếu cả hai limit đều bị vi phạm, thì một cảnh báo sẽ xuất hiện, và

bộ đếm count tƣơng ứng với cảnh báo sẽ giảm xuống một đơn vị. Nếu bộ đếm nhận

đƣợc giá trị zero thì ngƣời dùng sẽ không đƣợc ph p login.

4.2.4. Quản lý các lock chứa tập tin trên đĩa

Trong phần này chúng ta xem x t các phƣơng pháp khác nhau mà các hệ điều

hành sử dụng để theo dõi danh sách các block đĩa mà hệ điều hành đ cấp phát cho một

tập tin, để chứa hết các block của một tập tin, của tất cả các tập tin đang đƣợc lƣu trữ

tên đĩa.

4.2.4.1. Cấp phát liên tục (contiguous allocation)

- tưởng: Các block tập tin đƣợc lƣu trữ tại các block đĩa liên tục nhau.

- Ví dụ: Nếu 1 block đĩa là 1K thì một tập tin 50K sẽ đƣợc lƣu trữ tại 50 block

liên tiếp nhau trên đĩa.

- Ưu điểm: Đơn giản, d cài đặt, thời gian đọc tập tin giảm xuống đáng kể. Vì hệ

điều hành chỉ cần biết block đĩa đầu tiên chứa các block tập tin và tổng số block đĩa

chứa tập tin là có thể tiến hành đọc nội dung của tập tin mà không cần d tìm danh

sách các block đĩa chứa nội dung của tập tin nên thời gian đọc tập tin giảm xuống đáng

kể.

- Nhược điểm: L ng phí trong việc sử dụng block đĩa, xảy ra hiện tƣợng phân

mảnh trên đĩa.

Chiến lƣợc này chỉ có thể đƣợc sử dụng với các tập tin có kích thƣớc cố định,

không thay đổi so với thời điểm tạo ra tập tin, hoặc với các tập tin mà hệ điều hành biết

trƣớc đƣợc kích thƣớc tối đa của tập tin, trong trƣờng hợp này hệ điều hành phải dự trữ

241

block đĩa cho tập tin, điều này d dẫn đến tình trạng l ng phí trong việc sử dụng block

đĩa. Chiến lƣợc này có thể dẫn đến hiện tƣợng phân mảnh trên đĩa, tức là trên đĩa có

thể xuất hiện các đoạn block trống nhỏ, không đủ để chứa một tập tin có kích thƣớc tối

thiểu, nằm giữa các đoạn block chứa tập tin, các đoạn block trống này có thể là nơi lƣu

trữ của một tập tin nào đó mà tập tin này đ bị xoá khỏi đĩa. Hiện tƣợng phân mảnh đĩa

sẽ làm chậm tốc độ đọc tập tin của hệ điều hành.

- Giải pháp: Các block tập tin đƣợc lƣu trữ tại block đĩa rời rạc nhau.

Với việc cải tiến này, hệ điều hành có thể đọc tập tin nhanh hơn, ít xảy ra phân

mảnh hơn nhƣng việc tổ chức lƣu trữ sẽ phức tạp hơn. Chúng ta sẽ thấy cách tổ chức

này trong hệ thống tập tin của hệ điều hành WindowsNT/2000 trong phần sau của

chƣơng này.

4.2.4.2. Cấp phát theo danh sách liên kết linked list allocation)

- tưởng: Các block tập tin đƣợc lƣu trữ tại một danh sách liên kết các block

đĩa. Word đầu tiên của mỗi block đĩa đƣợc sử dụng nhƣ một con trỏ để trỏ đến block

kế tiếp, trừ word của block cuối cùng đƣợc sử dụng để chứa tín hiệu báo kết thúc danh

sách của một tập tin, phần c n lại của block đĩa dùng để chứa nội dung của tập tin.

Trong trƣờng hợp này kích thƣớc của block đĩa phải lớn hơn kích thƣớc của block tập

tin 1 word.

- Ví dụ: Tập tin A đƣợc chia thành 4 block: block 0, block 1, block 2, block 3

đƣợc lƣu trữ tại các block đĩa, lần lƣợt là 3, 7, 5, 10. Với tập tin B đƣợc chia thành 3

242

block: block 0, block 1, block 2, đƣợc lƣu trữ tại các block đĩa, lần lƣợt là 4, 8, 6.

Hình 4.3 C p phát b oc theo danh sách i n ết

- Ưu điểm: Không xảy ra hiện tƣợng phân mảnh đĩa và khai thác tối đa không

gian đĩa.

- Nhược điểm: Tốc độ đọc tập tin rất chậm và tốn một word để chứa con trỏ đến

block kế tiếp.

- Giải pháp: Cấp phát theo danh sách liên kết sử dụng chỉ mục.

 Cấp phát theo danh sách liên kết sử dụng chỉ mục (linked list allocation using an

index):

- tưởng: Lƣu các word con trỏ vào trong một bảng chỉ mục và nạp bảng chỉ mục

này vào bộ nhớ khi hệ điều hành cần đọc nội dung của tập tin trên đĩa.

Hình 4.4. C p phát b oc theo danh sách i n ết c chỉ mục

- Ví dụ: tập tin A đƣợc chia thành 4 block: A1, A2, A3, A4 đƣợc lƣu trữ tại các

block đĩa, lần lƣợt là 4, 10, 7, 14 cuối cùng . Với tập tin B đƣợc chia thành 4 block:

B1, B2, B3, B4 đƣợc lƣu trữ tại các block đĩa, lần lƣợt là 6, 9, 12, 15 cuối cùng .

- Ưu điểm: Tốc độ đọc tập tin nhanh và không tốn một word để chứa con trỏ

đến block kế tiếp.

- Nhược điểm: Tốn thời gian nạp bảng chỉ mục và làm l ng phí không gian bộ

243

nhớ.

- Giải pháp: Chỉ nạp phần bảng chỉ mục liên quan đến các tập tin đang mở trên

bộ nhớ tại một thời điểm cụ thể nào đó.

+ Với cách tổ chức này thì toàn bộ block đĩa đƣợc sử dụng để lƣu trữ tập tin và

việc truy cập ngẫu nhiên trong trƣờng hợp này sẽ d dàng hơn. Tuy nhiên cũng phải

tồn tại một móc xích để tìm ra tất cả các block đĩa chứa nội dung của một tập tin và

móc xích này phải đƣợc nạp vào bộ nhớ để hệ điều hành có thể tìm đọc tập tin khi cần.

Cũng nhƣ chiến lƣợc trên block đầu tiên của một tập tin phải đƣợc chứa trong phần tử

bảng danh mục tƣơng ứng với mỗi tập tin, trong trƣờng hợp này nó đƣợc xem nhƣ một

con trỏ trỏ đến bảng chỉ mục để bắt đầu d tìm d y các block đĩa chứa nội dung của tập

tin, mỗi khi hệ điều hành cần đọc tập tin.

+ Hệ điều hành MS-DOS tổ chức quản lý tập tin trên đĩa dựa theo chiến lƣợc này.

+ Khái niệm cửa sổ bảng FAT trong hệ thống tập tin của hệ điều hành

Windows98 là một ví dụ của trƣờng hợp này. Chúng ta sẽ đƣợc nhắc đến điều này

trong phần sau của chƣơng này.

 I-nodes (index-node):

- tưởng: hệ điều hành thiết kế một bảng nhỏ để theo dõi các blocks của một tập

tin, đƣợc gọi là I-node. I-node liệt kê các thuộc tính và các địa chỉ đĩa của các block

244

của tập tin. Hình sau đây minh hoạ cho chiến lƣợc này.

Đầu tiên một phần địa chỉ đĩa các block đĩa đƣợc lƣu trữ trong chính I-node.

Sau đó, đối với các tập tin nhỏ thì tất cả các thông tin cần thiết là phải chứa trong chính

I-node, đó là các thông tin đƣợc nhận từ đĩa vào bộ nhớ chính khi tập tin đƣợc mở. Đối

với các tập tin lớn, gồm nhiều block, thì một trong các địa chỉ trong I-node là địa chỉ

của một block đĩa, đƣợc gọi là block gián tiếp đơn. Block này chứa các địa chỉ đĩa

đƣợc thêm vào. Nếu vẫn c n không đủ thì một địa chỉ khác trong I-node, đƣợc gọi là

block gián tiếp đôi, sẽ chứa địa chỉ của một block mà nó chứa một danh sách các block

gián tiếp đơn. Mỗi block gián tiếp đơn trỏ đến khoảng 100 block dữ liệu. Nếu vẫn c n

không đủ thì có thể một block gián tiếp ba đƣợc sử dụng. Nhìn hình vẽ trên ta dẽ dàng

phân biệt đƣợc sự khác nhau giữa: block gián tiếp đơn, block gián tiếp đôi và block

gián tiếp ba.

Chiến lƣợc này đƣợc Windows 2000 cải tiến và sử dụng trong cấu trúc MFT

trong hệ thống tập tin của nó. Chúng ta sẽ thấy điều này khi tìm hiểu hệ thống tập tin

của Windows 2000 trong phần sau của chƣơng này.

 Cấp phát không liên tục với lock chỉ mục:

Cả hai chiến lƣợc cấp phát, theo danh sách liên kết và theo liên kết chỉ mục đều

tồn tại hạn chế là phải phân tích danh sách liên kết hay bảng chỉ mục để d tìm ra danh

sách các block đĩa chứa nội dung của tập tin cần đọc, khi đọc tập tin, dẫn đến làm chậm

tốc độ đọc tập tin trên đĩa.

19 Nguy n Kim Tuấn, Giáo trình lý thuyết hệ điều hành, ĐH Huế 2004, Tr.158

245

Hình 4.6. C p phát hông i n tục với b oc chỉ mục19

Để khắc phục điều này các hệ điều hành có thể cài đặt chiến lƣợc cấp phát không

liên tục với block chỉ số.

- Block chỉ mục: Là một block đĩa chứa danh sách các block đĩa chứa nội dung

của một tập tin nào đó.

- tưởng: Hệ điều hành chỉ cần thiết kế một con trỏ, tại phần tử trong bảng chỉ

mục, trỏ tới block chỉ mục của tập tin trên đĩa là hệ điều hành có thể quản lý đƣợc danh

sách các block đĩa chứa nội dung của một tập tin.

- Ví dụ:

File A đƣợc chia thành 4 block: A1, A2, A3, A4 đƣợc lƣu trữ tại các block đĩa lần

lƣợt là 4, 10, 7, 14 cuối cùng .

File B đƣợc chia thành 4 block: B1, B2, B3, B4 đƣợc lƣu trữ tại các block đĩa lần

lƣợt là 6, 9, 12, 15 cuối cùng .

- Ưu điểm: Tốc độ đọc tập tin nhanh đối với các tập tin nhỏ.

- Nhược điểm:

 Tập tin lớn thì một block có thể không chứa đủ danh sách các block đĩa chứa

nội dung của một tập tin.

 Nếu block chỉ mục của tập tin bị hỏng thì hệ điều hành không thể đọc đƣợc

tập tin, mặc dù nội dung của tập tin vẫn còn tồn tại trên các block đĩa.

Trong hình trên block 11 là chỉ mục của file A, block 8 là chỉ mục của file B. Nhƣ

vậy chỉ cần thiết kế một con trỏ, tại phần tử trong bảng chỉ mục, trỏ tới block chỉ mục

của tập tin trên đĩa là hệ điều hành có thể quản lý đƣợc danh sách các block đĩa chứa

nội dung của một tập tin.

4.2.5. n toàn trong quản lý tập tin

4.2.5.1. Bảo toàn dữ liệu tập tin

Một hệ quản trị tập tin phải cung cấp những cơ chế thích hợp để phục hồi nội

dung của tập tin trong trƣờng hợp hệ thống gặp sự cố về phần mềm hoặc phần cứng.

Để thực hiện đƣợc điều này hệ điều hành phải luôn tạo bản sao của các tập tin đang mở

trên hệ thống, để có thể phục hồi lại khi cần thiết. Có hai kỹ thuật đƣợc sử dụng trong

246

cơ chế này:

 DUMP c chu ỳ: Sau một khoảng thời gian nhất định nội dung của các tập tin

đang mở trên bộ nhớ chính sẽ đƣợc đổ Dum/backup ra lại đĩa. Nếu hệ thống gặp

sự cố thì tất cả các tập tin đang mở sẽ đƣợc tái tạo lại kể từ trạng thái mà chúng

đƣợc DUMP ra lần cuối cùng. Rõ ràng việc DUM này sẽ làm tốn thời gian thực

hiện của hệ thống.

 DUMP Incremental: Trong cách này, hệ thống chỉ lƣu trữ các thông tin đƣợc sửa

đổi kể từ lần Dump sau cùng, tức là chỉ có các tập tin đƣợc tạo lập hoặc sửa đổi so

với lần đổ ra cuối cùng mới đƣợc Dump ra. Với kỹ thuật này thông tin cần lƣu trữ ít

hơn do đó hệ thống có thể thực hiện Dump thƣờng xuyên hơn.

Để biết đƣợc trong số những tập tin đang mở tập tin nào có sự cập nhật dữ liệu

hoặc có sự thay đổi so với lần Dump ra trƣớc đó hệ thống đƣa thêm vào danh mục

ngƣời dùng một trƣờng mới, dài 2 bit, tạm gọi là trƣờng kiểm tra cập nhật KTCN .

 Nếu KTCN = 00: mở không cập nhật

 KTCN = 01: mở có cập nhật

 KTCN = 10: không có thay đổi so với lần Dump trƣớc

 KTCN = 11: có thay đổi so với lần Dump trƣớc.

Với cách này hệ thống phải luôn kiểm tra bảng danh mục và phải cập nhật lại

trƣờng KTCN sau mỗi lần Dump, dẫn đến làm chậm tốc độ thực hiện của hệ thống. Để

hệ thống không phải khảo sát tất cả các điểm vào của danh mục, hệ điều hành cài đặt

thêm một bảng danh mục mới để ghi nhận thông tin của các tập tin đang đƣợc truy xuất

ghi/đọc trên hệ thống và chỉ có Dump sử dụng bảng danh mục này, do đó hệ thống

Dump có thể hoạt động song song với các thao tác khác của hệ thống. Dump

Incremental là một tiến trình có độ ƣu tiên thấp, thƣờng trú trong bộ nhớ phân tích các

bảng danh mục để tìm ra các tập tin cần phải thực hiện Dump.

4.2.5.2. Danh sách các quyền truy cập ccess Right)

Trong phần tập tin chia s ở trên, chúng tôi đ trình bày về kỹ thuật tạo ra tập tin

chia s của hệ điều hành, kỹ thuật này hoàn toàn trong suốt với ngƣời dùng. Trong

phần này chúng tôi sẽ giới thiệu quyền truy c p, quyền truy c p và qu n truy c p

đồng thời là các công cụ cơ bản mà hệ điều hành dùng để quản lý và bảo vệ các tập tin

247

chia s trong các hệ thống nhiều ngƣời dùng (multiuser systems).

Quyền truy c p có thể đƣợc gán cho một ngƣời dùng User cụ thể, một nhóm

ngƣời dùng User Group hay tất cả ngƣời dùng All User có trong các hệ thống

multiuser. Một user group chứa nhiều user, khi một group đƣợc gán quyền nào đó thì

tất cả các uer thành viên trong group này cũng đều đƣợc gán quyền truy cập đó. Sau

đây là các quyền truy cập mà hệ điều hành thƣờng dùng để gán cho một ngƣời dùng cụ

thể đến một tập tin cụ thể nào đó:

 None: Ngƣời dùng không biết đƣợc là tập tin có tồn tại hay không. Với giới

hạn của quyền này, ngƣời dùng không đƣợc ph p đọc thƣ mục chứa tập tin

này.

 Knowledge: Ngƣời dùng có thể xác định đƣợc là tập tin đang tồn tại và ai là

ngƣời sở hữu tập tin.

 Excution: Ngƣời dùng có thể nạp và thực hiện một chƣơng trình nhƣng không

thể copy nó. Các chƣơng trình thuộc dạng độc quyền của một nhà sản xuất nào

đó thƣờng đƣợc tạo với sự giới hạn với quyền này.

 Reading: Ngƣời dùng có thể đọc tập tin cho bất kỳ mục đích nào, bao gồm cả

copy và execution. Một vài hệ thống cho ph p có sự khác nhau giữa xem và

copy tập tin. Trong trƣờng hợp này nội dung của tập tin có thể đƣợc hiển thị để

ngƣời dùng xem, nhƣng họ không đƣợc cung cấp công cụ để copy nội dung

này.

 Appending: Ngƣời dùng có thể thêm dữ liệu vào tập tin, thƣờng là ở cuối tập

tin, nhƣng không thể thay đổi hoặc xoá bất kỳ một nội dung nào trong tập tin.

 Updating: Ngƣời dùng có thể thay đổi, xoá và thêm dữ liệu vào tập tin.

 Changing protection: Ngƣời dùng có thể thay đổi các quyền truy cập đƣợc gán

đến ngƣời dùng khác. Quyền này thƣờng chỉ đƣợc gán cho ngƣời sở hữu tập

tin.

 Deletion: Ngƣời dùng có thể xoá đƣợc tập tin từ hệ thống tập tin.

Ví dụ: Người dùng A đƣợc gán quyền đọc read tập tin tailieu.doc, nhƣng

không đƣợc gán quyền xoá delete tập tin tailieu.doc thì ngƣời dùng A này chỉ

có thể thực hiện thao tác mở tập tin tailieu.doc ra để đọc nội dung của tập tin,

chứ không thể thay xóa hay thay đổi nội dung của tập tin vì không đƣợc gán

248

quyền thay đổi modify nội dung tập tin .

Ngƣời dùng có thể đƣợc gán nhiều quyền truy cập đến một tập tin, khi đó họ sẽ

có đầy đủ các sự cho ph p và sự giới hạn tƣơng ứng với các quyền đ đƣợc gán. Tuy

nhiên quyền truy cập có tính kế thừa, nên chỉ cần gán một quyền truy cập cao nhất thì

họ có đủ các sự cho ph p và sự giới hạn của các quyền khác.

Ví dụ: Nếu ngƣời dùng đƣợc gán quyền Updating với một tập tin nào đó, thì

xem nhƣ họ đ đƣợc gán các quyền Knowledge, execution, reading và

appending đối với tập tin này.

4.2.5.3. Mở và đóng tập tin

Hệ điều hành cho rằng các tập tin đƣợc lƣu trữ trên đĩa đều ở trạng thái đóng, để

thực hiện bất kỳ một thao tác đọc/ghi/thay đổi nội dung của tập tin thì trƣớc hết chƣơng

trình, tiến trình của ngƣời dùng phải thực hiện thao tác mở tập tin. Khi nhận đƣợc yêu

cầu mở tập tin bộ phận quản lý tập tin của hệ điều hành sẽ đọc nội dung của tập tin từ

đĩa và nạp nó vào bộ nhớ chính, sau đó trả về cho chƣơng trình, tiến trình của ngƣời

dùng một th tập tin file handle hoặc một biến tƣơng ứng với tập tin này để chƣơng

trình, tiến trình theo dõi và thao tác trên tập tin này. Sau khi thực hiện xong một thao

tác nào đó trên nội dung của tập tin thì chƣơng trình, tiến trình và cả ngƣời dùng phải

thực hiện thao tác đóng tập tin lại. Đối tƣợng yêu cầu đóng tập tin phải cung cấp đúng

th tập tin của tập tin cần đóng cho hệ điều hành.

Một số hệ điều hành cho ph p thực các thao tác trên tập tin mở/cập nhật/đóng

bằng chính tên của tập tin. Các hệ điều hành đều cung cấp hai thủ tục chính để chƣơng

trình của ngƣời dùng thực hiện các thao tác mở/đóng tập tin:

 Open (t n t p tin cần m , chế độ m : dùng để mở tập tin chế độ: Đọc/

Viết/Tạo lập

 Close (t n t p tin cần đ ng): dùng để đóng tập tin khi mở.

Thao tác mở/đóng tập tin sẽ đơn giảm trong môi trƣờng hệ điều hành đơn nhiệm

và sẽ phức tạp hơn trong môi trƣờng hệ điều hành đa nhiệm. Trong môi trƣờng đa

nhiệm, hệ điều hành chỉ thực sự đóng tập tin theo yêu cầu của một tiến trình từ một

ngƣời dùng nào đó khi tất cả các thao tác ghi/đọc tập tin này từ các tiến trình ngƣời

dùng khác đều đ kết thúc. Trong trƣờng hợp này hệ điều hành phải luôn theo dõi các

tiến trình ngƣời dùng tham gia vào việc mở tập tin này. Để đáp ứng yêu cầu mở tập tin

249

từ một chƣơng trình, tiến trình của ngƣời dùng trong môi trƣờng đa nhiệm hệ điều hành

phải thực hiện các bƣớc cơ bản sau đây để đảm bảo việc truy xuất tập tin sau này là

hợp lệ:

 Kiểm tra tên của tập tin cần mở, tại các Entry, trong bảng danh mục tập tin

của hệ thống đó là bảng thƣ mục trong hệ điều hành DOS và Windows9x).

 Kiểm tra tiến trình gọi tới từ một ngƣời dùng hay chƣơng trình ngƣời dùng

có đƣợc quyền truy cập tập tin ở chế độ đ đƣợc chỉ ra hay không.

 Kiểm tra nếu tập tin đ đƣợc mở để đọc bởi một tiến trình trƣớc đó thì tiến

trình hiện tại không thể mở để ghi vào tập tin, mặc dầu tiến trình này đƣợc

quyền ghi tập tin. Ngƣợc lại tiến trình hiện tại không thể mở tập tin để đọc

khi đ có một tiến trình nào đó đang ghi vào tập tin.

 Đảm bảo sự sẵn sàng của các thiết bị lƣu trữ, đĩa chẳng hạn, và vật mang

liên quan đến tập tin cần mở.

Để mô tả đầy đủ các thông tin về một tập tin thì một phần tử trong bảng danh mục

cần phải chứa các trƣờng sau: Tên tập tin; Mô tả của đơn vị của lƣu trữ tập tin; Địa chỉ

của Block đầu tiên trong d y các block trên đĩa chứa tập tin; Địa chỉ của các block kế

tiếp trong d y các block chứa tập tin; Chế độ truy cập tập tin; vv. Trong môi trƣờng hệ

điều hành đa nhiệm có thể có các tiến trình song song cùng đọc nội dung của một tập

tin, đối với các tập tin chia s , nhƣng không thể xảy ra trƣờng hợp có hai tiến trình

cùng ghi vào một tập tin hoặc có một tiến trình ghi vào tập tin trong khi có một hoặc

nhiều tiến trình khác đang đọc nội dung của tập tin. Hệ điều hành phải kiểm soát chặt

chẽ các trƣờng hợp này. Để tránh hiện tƣợng này hệ điều hành phải tạo một cơ chế

thích hợp để loại trừ lẫn nhau trong thao tác đọc/ghi tập tin giữa các tập tin đồng thời.

Để thực hiện loại trừ lẫn nhau này hệ điều hành đƣa thêm hai trƣờng vào các Entry

trong bảng danh mục ngƣời dùng: Trƣờng thứ nhất, Bit ghi = 1 đang có một tiến trình

ghi vào tập tin, Bit ghi = 0 không có tiến trình nào ghi vào tập tin. Trƣờng thứ hai, Bộ

đếm, = . Theo đó một tiến trình chỉ có thể

mở tập tin để đọc khi Bit ghi = 0, mở tập tin để ghi khi Bit ghi = 1 và Bộ đếm = 0. Nhƣ

vậy, ngay sau khi chấp nhận yêu cầu mở tập tin để ghi từ một tiến trình thì hệ điều

hành phải gán Bit ghi = 1, ngay sau khi chấp nhận yêu cầu mở tập tin để đọc từ một

tiến trình thì hệ điều hành phải tăng Bộ đếm lên 1 đơn vị, Bộ đếm = bộ đếm + 1. Khi

một tiến trình đọc tập tin đóng tập tin thì Bộ đếm = bộ đếm - 1, khi một tiến trình ghi

250

tập tin đóng tập tin thì Bit ghi đƣợc gán = 0. Rõ ràng kỹ thuật này có thể dẫn đến lỗi

khi hệ thống không giám sát tốt việc thay đổi giá trị trên các trƣờng Bit ghi và Bộ đếm,

điều này chúng ta đ thấy trong chƣơng Quản lý tiến trình của tài liệu này.

4.2.6. Hiệu suất hệ thống tập tin

Nhƣ đ biết, tốc độ truy xuất dữ liệu trên đĩa chậm hơn rất nhiều so với tốc độ

truy xuất dữ liệu trên bộ nhớ, tốc độ truy xuất dữ liệu trên đĩa tính bằng đơn vị

milliseconds, trong khi đó tốc độ truy xuất dữ liệu trên bộ nhớ chỉ tính bằng đơn vị

nanoseconds. Do đó, để tạo ra sự đồng bộ trong việc trao đổi dữ liệu trên bộ nhớ và

trên đĩa, cũng nhƣ tăng tốc độ truy xuất dữ liệu trên bộ nhớ, các hệ điều hành phải thiết

kế hệ thống tập tin của nó sao cho tốc độ đọc dữ liệu là nhanh nhất và giảm số lần truy

cập đĩa mỗi khi truy xuất tập tin xuống mức thấp nhất.

Một trong những kỹ thuật đƣợc hệ điều hành sử dụng ở đây là tạo ra các block

cache hoặc buffer cache. Trong ngữ cảnh này, cache là một tập các block logic trên đĩa,

nhƣng đƣợc tạo ra và đƣợc giữ trong bộ nhớ chỉ để phục vụ cho mục đích cải thiện

hiệu suất của hệ thống.

Có nhiều thuật toán khác nhau đƣợc sử dụng để quản lý cache, nhƣng tất cả đều

hƣớng tới mục đích của việc sử dụng cache và nguyên lý hoạt động của cache: Khi

nhận đƣợc một yêu cầu đọc dữ liệu từ tiến trình của ngƣời dùng thì bộ phận quản lý

cache sẽ kiểm tra block dữ liệu cần đọc đ có trong cache hay chƣa, nếu có trong cache

thì đọc trực tiếp trong cache mà không cần truy cập đĩa, nếu không có trong cache thì

dữ liệu cần đọc sẽ đƣợc đọc và ghi vào trong cache trƣớc rồi sau đó đƣợc ch p đến bất

cứ nơi nào cần thiết. Việc ghi vào cache này nhằm chuẩn bị cho các lần đọc dữ liệu sau

này. Tức là, nếu sau này có một yêu cầu đọc cùng một block dữ liệu nhƣ trên thì nó sẽ

đƣợc đọc trực tiếp từ cache mà không cần truy cập đĩa.

Khi cache bị đầy các block thì một vài block trong đó phải bị xoá hoặc bị xoá và

ghi trở lại về đĩa nếu block này có sự thay đổi kể từ khi nó đƣợc mang vào bộ nhớ kể từ

lần đƣợc mang vào gần đây nhất. Trong trƣờng hợp này hệ điều hành cũng sử dụng các

thuật toán thay trang trong quản lý bộ nhớ nhƣ FIFO, LRU, … để chọn một block

trong cache để đƣa ra đĩa. Tuy nhiên cache đƣợc truy xuất ít thƣờng xuyên hơn, nên hệ

điều hành có thể tổ chức một danh sách liên kết để theo dõi việc truy xuất các block

251

trong cache, danh sách liên kết này đƣợc sử dụng cho thuật toán thay block: LRU.

4.3. MỘT SỐ KHÁI NIỆM DÙNG TRONG QUẢN L ĐĨ

- Track: Là các v ng tr n đồng tâm đƣợc tạo ra trên bề mặt đĩa, đây sẽ là nơi

chứa dữ liệu sau này. Các track đƣợc đánh số bắt đầu từ 0. Số track trên mỗi mặt đĩa

phụ thuộc vào từng loại đĩa.

- Sector: Các track đƣợc chia thành các khối có kích thƣớc cố định bằng nhau và

đƣợc đánh địa chỉ, các khối này đƣợc gọi là các sector. Các sector đƣợc đánh địa chỉ

bắt đầu từ 1 trên mỗi track, nhƣ vậy trên đĩa sẽ tồn tại nhiều sector có cùng số hiệu địa

chỉ, cách đánh địa chỉ này gây khó khăn nhiều ngƣời lập trình. Kích thƣớc của sector,

số Byte dữ liệu có thể chứa trên một sector, phụ thuộc vào phần cứng. Trên các họ

CPU x86, kích thƣớc sector trên đĩa cứng thƣờng là 512 Byte, kích thƣớc sector trên

đĩa CD_ROM thƣờng là 2048 Byte.

 Các sector đƣợc đánh địa chỉ theo kiểu trên đƣợc gọi là sector vật lý. Trong

thực tế lập trình các hệ điều hành chỉ sử dụng sector logic, theo đó thì địa

chỉ các sector đƣợc đánh bắt đầu từ 0 kể từ track 0 của mặt 0 trên đĩa thứ

nhất. Nhƣ vậy trên đĩa không có các sector có cùng số hiệu địa chỉ. Bảng

sau đây cho thấy sự tƣơng ứng giữa các sector vật lý với sector logic trên

một đĩa mềm:

Bản 4 Tương ứng giữa sector v t và sector ogic tr n đĩa mềm

 Trên bề mặt đĩa tồn tại các sector mà hệ điều hành không thể ghi dữ liệu vào

đó hoặc không thể đọc dữ liệu từ đó. Các sector này đƣợc gọi là bad sector.

Trong quá trình định dạng đĩa hệ điều hành đánh dấu loại bỏ các bad sector

này.

- Cluster: Một nhóm gồm 2, 4 hoặc 6 sector liên tiếp nhau tạo thành một Cluster.

252

Kích thƣớc của Cluster thƣờng là bội số kích thƣớc của một sector. Các Cluster đƣợc

đánh địa chỉ bắt đầu từ 0. Số sector trên một Cluster phụ thuộc vào từng loại đĩa. Một

số hệ điều hành cho ph p ngƣời dùng quy định số sector trên một Cluster. Các hệ điều

hành thƣờng tổ chức lƣu trữ dữ liệu, nội dung các tập tin, trên đĩa theo từng Cluster.

Trên bề mặt đĩa cũng tồn tại các bad Cluster, đó là các Cluster có chứa bad sector.

Một số hệ điều hành có thể khôi phục lại đƣợc dữ liệu chứa trên các bad-sector

hay bad Cluster và ghi nó vào lại một Cluster mới. Hệ điều hành có thể chỉ khôi phục

và thay thế dữ liệu tại sector bị bad hoặc phải khôi phục và thay thế toàn bộ dữ liệu trên

Cluster có chứa bad-sector.

Hệ thống tập tin NTFS của WindowsNT/2000 tham chiếu đến các vị trí vật lý

trên đĩa bằng số hiệu Cluster logic (LCNs: logical Cluster numbers . LCN là kết quả

của việc đánh số tất cả các Cluster trên volume từ vị trí bắt đầu volume đến kết thúc

volume. Để chuyển một LCN thành địa chỉ vật lý trên đĩa, NTFS nhân LCN với thừa

số Cluster số sector trên một Cluster để có đƣợc Byte offset vật lý trên volume. NTFS

tham chiếu đến dữ liệu trong phạm vi một tập tin bằng số hiệu Cluster ảo VCNs:

Virtual Cluster numbers), VCN đánh số các Cluster dựa vào một tập tin cụ thể và đánh

số từ 0 đến m. Các VCN không cần phải liên tục về mặt vật lý, tuy nhiên nó có thể ánh

xạ đến bất kỳ một LCN nào trên volume.

- Cylinder: Các track có cùng số hiệu trên các mặt đĩa khác nhau của một hệ

thống đĩa tạo thành một cylinder. Nhƣ vậy mặt đĩa có bao nhiều track thì đĩa có bấy

nhiêu cylinder. Cylinder chỉ có trên các ổ đĩa cứng.

- Partition: phân vùng là một tập các sector liền kề trên một đĩa. Mỗi phân vùng

có một bảng phân vùng hoặc một cơ sở dữ liệu quản lý đĩa riêng, dùng để lƣu trữ sector

đầu tiên, kích thƣớc và các đặc tính khác của phân vùng.

- Volume: Một volume tƣơng tự một phân vùng logic trên một đĩa, và nó đƣợc

tạo khi ta định dạng một đĩa hoặc một phần của đĩa theo hệ thống tập tin NTFS. Trong

hệ điều hành WindowsNT/2000 ta có thể tạo ra một volume tr i dài trên nhiều đĩa vật

lý khác nhau. Một đĩa có thể có một hoặc nhiều volume. NTFS điều khiển mỗi volume

sao cho không phụ thuộc vào các volume khác. Một volume bao gồm một tập các tập

tin cùng với bất kỳ một không gian chƣa đƣợc cấp phát nào c n lại trên phân vùng đĩa.

Trong hệ thống tập tin FAT, một volume cũng chứa các vùng đặc biệt đƣợc định dạng

253

cho việc sử dụng của hệ thống tập tin. Trong các volume NTFS thì ngƣợc lại nó lƣu trữ

tất cả dữ liệu của hệ thống tập tin, nhƣ là bitmap, directory và cả system bootstrap, trên

các tập tin.

 Simple volume: là các đối tƣợng đại diện cho các sector từ một phân vùng

đơn, mà các trình điều khiển hệ thống tập tin, quản lý nó nhƣ một đơn vị đơn.

 Multipartition volume: là các đối tƣợng đại diện cho các sector từ nhiều

phân vùng khác nhau, mà các trình điều khiển hệ thống tập tin quản lý nó nhƣ

một đơn vị đơn. Các multipartition volume có các đặc tính mà các simple

volume không có đƣợc nhƣ: hiệu suất cao, độ tin cậy cao và khả năng mở rộng

kích thƣớc.

- Metadata: là một dạng dữ liệu đặc biệt, đƣợc lƣu trữ trên đĩa, nó hỗ trợ cho các

thành phần quản lý các dạng thức hệ thống tập tin khác nhau, dữ liệu của nó có thể là

vị trí của các tập tin/ thƣ mục trên các ổ đĩa. Metadata không đƣợc sử dụng trong các

ứng dụng.

- File system hệ thống tập tin): Các dạng thức hệ thống tập tin định nghĩa cách

mà dữ liệu tập tin đƣợc lƣu trữ trên thiết bị lƣu trữ và sự tác động của hệ thống tập tin

đến các tập tin. Một dạng thức hệ thống tập tin cũng có thể đƣa ra các giới hạn về kích

thƣớc của các tập tin và các thiết bị lƣu trữ mà hệ thống tập tin hỗ trợ. Một vài hệ thống

tập tin hỗ trợ cho cả các tập tin lớn hoặc nhỏ, hoặc cả các đĩa lớn và nhỏ.

Một hệ thống t p tin thường bao gồm các thành phần: Sector h i động (Boot

sector), b ng định vị t p tin (FAT: Fi e A ocation Tab e), b ng thư mục gốc (Root

Directory), một t p các t p tin các thư mục và các công cụ qu n các thành phần

này Các thành phần này c th c c u trúc ho c phương thức t chức hác nhau tr n

các dạng thức hệ thống t p tin hác nhau Người ta thường d ng t n của FAT trong hệ thống t p tin đ gọi t n của hệ thống t p tin đ 20.

Hệ điều hành MS-DOS sử dụng hệ thống tập tin FAT12 và FAT16, hệ điều hành

Windows9x sử dụng hệ thống tập tin FAT32 và CDFS, hệ điều hành Windows NT và

Windows 2000 sử dụng các hệ thống tập tin FAT12, FAT16, FAT32, CDFS

(CD_ROM File System, UDF (Universal Disk Format) và NTFS (New Technology

20 Nguy n Kim Tuấn, Giáo trình lý thuyết hệ điều hành, ĐH Huế, 2004,Tr.164

254

File System).

4.4. CÁC ĐIỀU KHIỂN HỆ THỐNG TẬP TIN

Các điều khiển hệ thống tập tin FSD: File system driver quản lý các dạng thức

hệ thống tập tin khác nhau. FSD chính thức xuất hiện từ WindowsNT/2000. Trong

Windows 2000 có 2 loại FSD: Local FSD và Network/ Remote FSD. Local FSD: quản

lý các volume đƣợc nối trực tiếp với máy tính. Network/ Remote FSD: cho ph p ngƣời

dùng và chƣơng trình của ngƣời dùng truy cập dữ liệu trên các volume đƣợc nối với

một máy tính ở xa.

 Local FSD FSD cục bộ : Các Local FSD bao gồm các tập tin: Ntfs.sys,

Fastfat.sys, Cdfs.sys và Raw FSD đƣợc tích hợp trong Ntoskrnl.exe . Hình

sau đây cho thấy cách local FSD tƣơng tác với quản lý I/O và các thiết bị lƣu

trữ. Các local FSD chịu trách nhiệm đăng ký với bộ phận quản lý I/O, khi FSD

đ đăng ký thì bộ phận quản lý I/O có thể gọi nó để thực hiện việc xác nhận

volume khi các ứng dụng hoặc các hệ thống khởi tạo truy cập đến volume.

Hình 4.7.a. FSD cục bộ

Việc xác nhận volume bao hàm việc kiểm tra boot sector của volume và các

thông tin hệ thống khác. Sector đầu tiên của mọi dạng thức hệ thống tập tin đƣợc hỗ trợ

bởi Windows 2000 đều đƣợc dành riêng cho boot sector của volume. Boot sector chứa

đầy đủ thông tin cần thiết để local FSD vừa nhận biết mà sector trên đó đang chứa một

dạng thức mà FSD quản lý và tìm kiếm bất kỳ một metadata khác đƣợc lƣu trữ trên đĩa.

Để cải tiến hiệu suất, các local FSD thƣờng sử dụng hệ thống quản lý cache để cache

255

dữ liệu của hệ thống tập tin bao gồm cả metadata.

 Các Network/Remote FSD FSD mạng/từ xa : Các Remote FSD bao gồm 2

thành phần: Một Client và một Server. Các client remote FSD cho ph p các

ứng dụng truy cập đến các tập tin và các thƣ mục ở xa. Client FSD chấp nhận

các yêu cầu I/O từ các ứng dụng và chuyển nó thành các lệnh trong các giao

thức về hệ thống tập tin của mạng để thông qua mạng nó đƣợc chuyển đến

server remote FSD. Server FSD lắng chờ các lệnh đƣợc đƣa đến từ kết nối

mạng và thực hiện chúng bằng cách đƣa ra yêu cầu I/O đến bộ phận quản lý

local FSD Local FSD manages của volume chứa các tập tin và các thƣ mục

mà lệnh có ý định xử lý nó. Hình dƣới đây cho thấy một tƣơng tác giữa Client

và server trong hệ thống remote FSD. Cũng giống nhƣ các local FSD, các

Client remote FSD thƣờng sử dụng những dịch vụ của bộ phận quản lý cache

để che dấu dữ liệu của các tập tin cục bộ và các thƣ mục ở xa. Các server

remote FSD tham gia vào việc duy trì các kết nối đến cache thông qua các

Client remote FSD.

256

Hình 4.7.b. FSD mạng

4.5. CÁC HỆ THỐNG TẬP TIN ĐƯỢC S DỤNG TRÊN CÁC HỆ ĐIỀU HÀNH HIỆN N Y

4.5.1. FAT12, FAT16, FAT32

Hệ thống tập tin FAT12 và FAT16 đƣợc Microsoft đƣa ra sử dụng từ hệ điều

hành DOS, hệ thống tập tin FAT32 đƣợc Microsoft đƣa ra sử dụng từ hệ điều hành

Windows98. Hệ điều hành WindowsNT/2000 vẫn sử dụng các hệ thống tập tin FAT

này nhƣng linh hoạt hơn.

Mỗi loại FAT có một con số để chỉ ra số lƣợng bit mà hệ thống tập tin sử dụng để

nhận dạng các Cluster trên đĩa. FAT12 sử dụng 12 bit để định danh các Cluster trên

đĩa, do đó với FAT12 hệ thống tập tin chỉ quản lý đƣợc 4096 212 = 4096) Cluster trên

đĩa. Hệ điều hành Windows 2000 cho phép các Cluster có kích thƣớc từ 512 Byte đến

8Kb, vậy với FAT12 Windows 2000 có thể quản lý đƣợc 32Mb đĩa, điều này có nghĩa

Windows 2000 chỉ dùng FAT12 để quản lý các đĩa mềm.

Bản 4 2. Kích thước Cluster phụ thuộc vào ích thước vo ume

Trên các hệ thống tập tin FAT16, Windows 2000 cho ph p kích thƣớc Cluster đi

từ 512 Byte đến 64Kb, nên với FAT16 Windows 2000 có thể quản lý một không gian

đĩa lên đến 4Gb. Khi ngƣời dùng format đĩa, tùy theo dung lƣợng đĩa mà Windows

257

2000 quyết định sử dụng hệ thống tập tin nào: FAT12, FAT16 hay FAT32.

Trong Windows 2000 kích thƣớc Cluster đƣợc chọn phụ thuộc vào dung lƣợng

của ổ đĩa. Bảng 4.2 cho thấy kích thƣớc Cluster đƣợc chọn, phụ thuộc vào dung lƣợng

volume, trên hệ thống tập tin FAT16.

Hệ thống tập tin FAT32 đƣợc định nghĩa dựa trên các hệ thống tập tin FAT.

Trong thực tế FAT32 sử dụng chỉ sử dụng 28 bit, thay vì 32 bit, để định danh các

Cluster trên đĩa, vì đ dành riêng 4 bit cao cho mục đích khác. Kích thƣớc của 1

Cluster trên hệ thống FAT32 có thể lên đến 32Kb, nên theo lý thuyết thì FAT32 có thể

quản lý đến 8Tb dung lƣợng phân vùng/đĩa. Nhƣng trong thực tế Windows 2000 chỉ

dùng FAT32 trên các phân vùng/đĩa có kích thƣớc nhỏ hơn 32Gb.

Sau đây là một số thuận lợi của F T32 so với F T12 và F T16:

 Số phần tử/ mục vào Entry trên thƣ mục gốc không có giới hạn.

 Thƣ mục gốc không cần lƣu trữ tại một vị trí xác định trƣớc.

 Kích thƣớc của một Cluster có thể lên đến 32Kb nên nó có thể quản lý đƣợc

8Tb, nhƣng trong thức tế Windows 2000 chỉ dùng FAT32 để quản lý có phân

vùng/đĩa có kích thƣớc nhỏ hơn 32Mb.

 Chỉ dùng 28 bit để định danh các Cluster, dùng 4 bit cao cho mục đích khác.

 Lƣu trữ một bản copy của boot sector.

 Có hai bảng FAT trên một Volume nhƣng cả hai đều có vai tr nhƣ nhau.

 Kích thƣớc của tập tin có thể lên đến 4Gb.

Hệ thống tập tin FAT32 không đƣợc các hệ điều hành sử dụng để định dạng đĩa

mềm.

4.5.2. NTFS

Là hệ thống tập tin dành riêng cho WindowsNT/2000. NTFS dùng 64 bit để định

danh các Cluster, nên nó có thể quản lý đƣợc các ổ đĩa có dung lƣơng lên đến 16

Exabyte 16 tỉ Gb . Trong thực tế WindowsNT/2000 chỉ sử dụng 32 bitđể định danh

Cluster, kích thƣớc Cluster là 64Kb, nên NTFS chỉ có thể quản lý đƣợc các ổ đĩa có

dung lƣợng lên đến 128TB. NTFS có một số tính năng cao cấp nhƣ bảo mật các

file/directory, cấp hạn ngạch cho đĩa, n n tập tin, mã hoá tập tin, … Một trong những

tính năng quan trọng của NTFS à khả năng phục hồi lỗi. Nếu hệ thống bị dừng một

258

cách đột ngột, thì metadata của ổ đĩa FAT sẽ rơi vào tình trạng xung khắc dẫn đến làm

sai lệch một lƣợng lớn dữ liệu tập tin và thƣ mục. Nhƣng trên NTFS thì điều này không

thể xảy ra, tức là cấu trúc của file/ Directory không bị thay đổi.

Tên tập tin trong NTFS có độ dài không quá 255 ký tự, đƣờng dẫn đầy đủ đến tập

tin dài không quá 32.567 ký tự. Tên tập tin sử dụng m UniCode. Tên tập tin trong

NTFS có sự phân biệt giữa chữ hoa và chữ thƣờng

4.5.3. CDFS

Là hệ thống tập tin đƣợc đƣa ra để quản lý các tập tin, thƣ mục trên các đĩa

CD_ROM. CDFS đƣợc ISO đƣa ra vào năm 1998 theo chuẩn ISO9660, sau đó

Microsoft phát triển theo đặc thù của nó để sử dụng trên Windows98 và sau đó là

WindowsNT/2000. Dạng thức hệ thống tập tin CDFS c n một số hạn chế nhƣ: Tên tập

tin và thƣ mục dài không quá 32 ký tự, cây thƣ mục không sâu quá 8 mức.

4.5.4. UDF

Đƣợc Windows 2000 phát triển dựa theo chuẩn ISO 13346 để thay thế cho

CDFS, và dùng để quản lý các đĩa từ-quang, chủ yếu là các đĩa DVD_ROM. UDF bao

gồm cả các đặc tả DVD và có các điểm tiêu biểu sau: Tên tập tin có thể dài đến 255 ký

tự, đƣờng dẫn có thể dài đến 1023 ký tự, tên tập tin có thể đƣợc viết hoa hay viết

thƣờng.

4.6. TỔ CHỨC ĐĨ CỦ MS-DOS

4.6.1. FDISK

Chƣơng trình FDISK của hệ điều hành cho ph p chia không gian lƣu trữ của đĩa

cứng đĩa cơ bản thành các phần khác nhau, có thể có kích thƣớc không bằng nhau,

đƣợc gọi là các phân vùng đĩa.

- Hệ điều hành DOS cho phép tạo ra 3 loại phân khu:

 Phân khu DOS chính (primary DOS)

 Phân khu DOS mở rộng Extended DOS

 Phân khu phi DOS (non DOS).

Muốn cài đặt nhiều hệ điều hành trên một máy tính, hay chính xác hơn là trên

một ổ đĩa cơ bản, thì trƣớc hết phải chia đĩa thành các phân khu, sau đó trên các phân

khu khác nhau sẽ cài đặt các hệ điều hành khác nhau, thƣờng là MS-DOS hoặc

259

Windows.

- Thông thường ổ đĩa cứng được chia thành 2 phân khu: DOS chính và DOS

m rộng, cũng có thể chỉ tạo thành một phân khu DOS chính.

 DOS chính: Theo quy định của hệ điều hành, đĩa C: đƣợc hình thành trên

phân khu DOS chính một cách tự động và chiếm toàn bộ kích thƣớc của

phân khu.

 DOS mở rộng: Ngƣời dùng phải thực hiện việc tạo ra các đĩa logic D:, E:,

… trên phân khu DOS mở rộng trong quá trình FDISK đĩa. Nếu không,

phân khu DOS mở rộng sẽ không đƣợc sử dụng sau này. Ta có thể tạo ra 1,

2, 3, … đĩa logic trên phân khu DOS mở rộng và có thể tổng kích thƣớc của

các đĩa logic trên phân khu mở rộng nhỏ hơn kích thƣớc của phân khu này

để lại một phần cho mục đích khác sau này . Hệ điều hành chịu trách nhiệm

boot hệ thống MS-DOS hoặc Windows thƣờng đƣợc cài đặt trên đĩa C:

(trên phân khu DOS chính).

Quá trình FDISK đĩa chỉ tạo ra các phân khu và các đĩa logic C:, D:, E:, vv, sau

đó ngƣời dùng phải thực hiện việc định dạng format các ổ đĩa này thì mới có thể sử

dụng đƣợc.

 Đĩa C: Primary Dos : lệnh định dạng là format/s . Sau

 Các ổ đĩa logic Extended Dos : lệnh định dạng là format

Sau đó cài đặt hệ điều hành boot chính vào đĩa C:. Hình sau đây cho thấy một ổ đĩa

cứng vật lý đƣợc chia thành 2 phân khu và các đĩa logic đƣợc tạo ra trên các phân khu:

260

Hình 4.8. HDD trước và sau FDISK

Trong số các phân vùng đ tạo phải có 1 chỉ 1) phân vùng đƣợc chọn là partition

active chủ động . Partition Active là phân vùng mà sau này đƣợc chọn là partition

boot hệ thống. Partition DOS chính thƣờng đƣợc chọn là partition active.

4.6.2. Tổ chức logic của đĩa

Các phân vùng khác nhau trên đĩa, có các thông tin sau đây khác nhau: Loại của

phân vùng; Phân vùng có phải là Active hay không; Kích thƣớc của phân vùng; Vị trí

bắt đầu và kết thúc của phân vùng; Hệ điều hành đƣợc cài đặt trên phân vùng nào; …

Để lƣu trữ thông tin khác nhau của các phân vùng, hệ điều hành DOS dùng một

khối dữ liệu đặc biệt, đƣợc gọi là sector phân khu/vùng (partition sector), sector này

nằm tại sector vật lý đầu tiên của đĩa cứng head 0, track 0, sector 1 và nó không thuộc

về bất kỳ một phân vùng nào trên đĩa. Sector này thƣờng đƣợc gọi là bảng phân vùng.

Hình vẽ sau đây minh hoạ cho điều này:

Hình 4.9. T chức ogic của FDD (a) và HDD (b)

 Nhận xét:

Hình trên cũng cho thấy sự tƣơng ứng về mặt logic giữa một đĩa mềm a với một

phân vùng/đĩa logic trên đĩa cứng b :

 Thứ nh t: chúng ta thấy là master boot record chỉ có trên đĩa cứng, nó đƣợc tạo ra

261

trong quá trình FDISK đĩa.

 Thứ hai: Boot sector của đĩa mềm đƣợc định vị tại sector 0 của đĩa, trong khi đó

boot sector của các đĩa logic trên các phân vùng đƣợc định vị tại sector đầu tiên của

phân vùng và số hiệu của sector này đƣợc tìm thấy trong các phần tử trong bảng

phân vùng của master boot record bởi boot code ở đầu master boot record.

 Thứ ba: Master boot record không thuộc bất kỳ một phân vùng nào và partition đầu

tiên là một vùng trống, có thể DOS dự trữ cho các mục đích khác sau này. Vùng

trống này là một kẽ hở của DOS, các đoạn m lệnh của Virus có thể đƣợc lƣu trữ ở

vùng này mà hệ điều hành không thể phát hiện đƣợc.

Khi master boot record trên đĩa cứng bị xoá hoặc bị nhi m virus thì máy tính

không thể khởi động đƣợc. Để khôi phục lỗi này ta chỉ có thể thực hiện nhƣ sau: Khởi

động máy từ đĩa mềm/USB, trên đĩa mềm/USB có chứa tập tin FDISK.EXE, rồi sau đó

thực hiện lại thao tác FDISK đĩa cứng với tham số MBR Tên ổ đĩa :\FDISK /MBR).

FDISK /MBR là làm mới lại master boot record mà không làm hỏng dữ liệu trên các

đĩa logic.

- Master oot record gồm có 3 thành phần: Boot code, bảng partition và chữ kí hệ

điều hành. Hình 4.8 sau đây cho thấy các thành phần trong master boot record.

 Boot code: là một đoạn chƣơng trình đặc biệt, đƣợc hệ điều hành ghi vào trong

quá trình FDISK đĩa. Đoạn chƣơng trình này có nhiệm vụ kiểm tra bảng

partition để xác định xem trên đĩa có partition active hay không, nếu có thì đó

là partition nào và bắt đầu tại sector nào, rồi sau đó nạp boot sector của đĩa trên

partition active vào RAM và chuyển quyền điều khiển về cho boot sector.

 Bảng partition (64 Byte: bắt đầu từ Byte 1BE h : gồm 4 phần tử, đánh số từ 1

đến 4, mỗi phần tử dài 16 Byte dùng để lƣu thông tin của một partition. Các

thông tin trong một phần tử trong bảng partition cho biết: Phân khu có phải là

active hay không; Vị trí bắt đầu phân khu head, sector, cylinder ; Vị trí kết

thúc phân khu head, sector, cylinder ; Có bao nhiêu sector nằm trong phần

khu; Kích thƣớc của một phân khu tính theo sector; Phân khu đƣợc định dạng

262

nhƣ thế nào và đƣợc cài đặt hệ điều hành nào?

Hình 4.10. Các thành phần trong master boot record

Vì bảng partition chỉ có 4 phần tử nên DOS chỉ cho ph p tạo ra tối đa là 4

partition. Đây là một hạn chế. Để khắc phục điều này hệ điều hành DOS cho ph p tạo

ra nhiều đĩa logic trên một partition mở rộng, tức là có thể tạo ra đƣợc nhiều đĩa logic

trên một ổ đĩa cơ sở. Hệ điều hành WindowsNT/2000 cho ph p tạo ra nhiều hơn 4

partition trên một ổ đĩa và số lƣợng các phần tử trong bảng partition có thể thay đổi.

 Chữ ký hệ điều hành (2 Byte: bắt đầu từ Byte 1FEh : thƣờng chứa giá trị

55AAh. Hệ điều hành DOS kiểm tra giá trị tại vùng này để biết đĩa này có phải

đƣợc định dạng bởi nó hay không.

Một phần tử trong bảng partition chứa các thông tin sau:

Offset Nội dung Kích thước

00 h 0: partition không phải là active 1Byte

80h: partition là active

01h số hiệu head bắt đầu phân khu 1Byte

02h sector và cylinde bắt đầu của boot sector 2Byte

04h m hệ thống: 0: Non Dos; 1: FAT_12; 1Byte

4: FAT_16; 5: phân khu Dos mở rộng;

6: phân khu Dos lớn hơn 32 Mb

263

05h số hiệu head kết thúc phân khu 1Byte

06 sector và cylinde kết thúc 2Byte

08h số hiệu sector tƣơng đối bắt đầu 4Byte

0Ch tổng số sector trong phân khu 4Byte

Bản 4 3. Các trường một phần t trong b ng partition

Ví dụ 1: Để kiểm tra partition nào là active ta thực hiện nhƣ sau:

 Đọc sector đầu tiên của đĩa cứng lƣu vào biến masterboot

 Kiểm tra offset 00 của 4 phân tử partition trong bảng partition

MOV CX, 4

MOV SI, 1BE h

Locate_active:

AL, masterboot[SI] MOV

AL, 80 h CMP

Active JE

SI, 16 ADD

Locate_active LOOP

No_active:

Active:

Ví dụ 2: Để đọc nội dụng boot sector của đĩa cứng C ghi vào biến BootDat ta

phải thực hiện lần lƣợt các bƣợc sau đây:

 Đọc sector đầu tiên của đĩa cứng lƣu vào biến masterboot

 Tìm partition active phần tử trong bảng partition có offset 00 bằng 80h

 Đọc Byte tại offset 01h và word tại offset 02 của phần tử partition tƣơng ứng ở

trên head, sector và cylinde , để xác định số hiệu sector bắt đầu của partition

active, đây chính là boot sector của đĩa cứng.

 Đọc nội dung của sector xác định đƣợc ở trên lƣu vào BootDat.

Active:

MOV AX, 0201H ; đọc 1 sector

264

MOV CX, WORD PTR MASTORBOOT [SI+2] ; sector & cylinder

DH, BYTE PTR MASTORBOOT[SI+1] ; head MOV

DL, 80H ; đĩa cứng MOV

ES,CS ; trỏ es:bx về MOV

BX, BOOTDAT ; đầu vùng bootdat lƣu LEA

INT 13H

Nếu PC đƣợc khởi động bằng đĩa mềm FDD khởi động thì sau quá trình POST

hệ thống sẽ nạp boot sector trên đĩa mềm vào bộ nhớ tại địa chỉ 0:7C00h sau đó quyền

điều khiển đƣợc trao cho cho boot sector, để nó tiếp tục điều khiển quá trình khởi

động. Nếu PC đƣợc khởi động bằng đĩa cứng khởi động HDD/C: thì sau quá trình

POST hệ thống sẽ nạp sector phân khu của đĩa cứng vào bộ nhớ tại địa chỉ 0:7C00h,

sau đó boot code trong sector phân khu thực hiện việc xác định partition active và nạp

boot sector trên partition active vào bộ nhớ cũng tại địa chỉ 0:7C00h, sau đó quyền

điều khiển đƣợc trao cho cho boot sector, để nó tiếp tục điều khiển quá trình khởi động

tƣơng tự nhƣ trong trƣờng hợp đĩa mềm. Chính vì vậy sector phân khu thƣờng đƣợc

gọi là Master Boot Record, nó cũng đƣợc gọi là bảng partition.

4.7. QUẢN L TẬP TIN TRÊN ĐĨ CỦ MS-DOS

Trong quá trình định dạng một đĩa mềm, hoặc một đĩa logic trên các phân khu

trên đĩa cứng, hệ điều hành chia không gian lƣu trữ của đĩa thành 2 vùng: v ng dữ iệu

(Data Area) và v ng hệ thống System Area , đồng thời ghi những thông tin cần thiết

vào vùng hệ thống để chuẩn bị cho việc quản lý lƣu trữ sau này.

 Vùng dữ liệu: bao gồm các bolck có kích thƣớc bằng nhau và đƣợc đánh địa

chỉ 12 bit hoặc 16 bit để phân biệt, đây chính là các Cluster trên đĩa mà

chúng ta đ nói đến ở trên. Nội dung của các tập tin cũng đƣợc chia thành các

bolck có kích thƣớc bằng kích thƣớc của một Cluster. Các Cluster trên đĩa

dùng để chứa nội dung của các tập tin trên đĩa. Các thông tin liên quan đến một

tập tin trên đĩa đƣợc chứa ở vùng hệ thống.

 Vùng hệ thống: bao gồm các đoạn chƣơng trình, các thông tin hệ thống, các

thông tin liên quan đến các tập tin/thƣ mục trên đĩa mà hệ điều hành dùng để

quản lý việc lƣu trữ tập tin/thƣ mục trên đĩa sau này. Cụ thể nó bao gồm các

265

thành phần sau đây: Boot sector, FAT1, FAT2 và Root Directory.

Sau đây chúng ta sẽ khảo sát các thành phần trong vùng hệ thống, để thấy đƣợc

cách mà DOS quản lý các tập tin và các thƣ mục đƣợc lƣu trữ trên đĩa.

Hình 4.11. Phân v ng tr n một đĩa ogic

4.7.1. Boot sector

C n đƣợc gọi là boot record bản ghi khởi động , dài 512 Byte (1 sector đƣợc đặt

tại sector logic 0 trên đĩa mềm hay sector logic đầu tiên của partition đĩa logic trên ổ

đĩa cứng. Tất cả các đĩa FDD và đĩa logic trên đĩa cứng sau khi đƣợc định dạng đều

có boot record và đều chứa các thông tin liên quan về đĩa trong đó, nhƣng chỉ có đĩa

đƣợc định dạng là đĩa khởi động mới có chứa một đọan m lệnh Bootstrap Loader.

Bootstrap Loader thực hiện việc nạp thành phần cốt lõi của DOS nhƣ io.sys, msdos.sys,

command.com vào bộ nhớ RAM chính xác hơn là chỉ nạp IO.SYS vào RAM sau đó

IO.SYS sẽ tìm nạp các tập tin tiếp theo trong quá trình khởi động máy tính. Chính vì

vậy bootstrap loader c n đƣợc gọi là chƣơng trình mồi khởi động. Bảng sau đây cho

thấy vị trí, độ lớn và nội dung của các trƣờng trong boot sector.

Offset Nội dung Size

00 h Lệnh JUMP, nhảy về Bootstrap Loader 3 Byte

03 h Tên nhà sản xuất và số phiên bản 8 Byte

0B h Số Byte trên một sector 2 Byte

0D h Số sector trên một Cluster 1 Byte

0E h Số sector dành cho boot sector 2 Byte

10 h Số bảng FAT 1 Byte

266

11 h Số phần tử Entry) trong Root directory 2 Byte

13 h Tổng số sector trên một tập đĩa (volume) 2 Byte

15 h M nhận diện đĩa 1 Byte

16 h Số sector dành cho bản FAT 2 Byte

18 h Số sector trên một track 2 Byte

1A h Số mặt đầu từ 2 Byte

1C h Số sector dữ trữ 4 Byte

1E h Số sector nếu kích thƣớc lơn hơn 32Mb 4 Byte

22 h Số hiệu ổ đĩa: 0:ổ mềm; 80h: ổ cứng 1 Byte

23 h Dự trữ 1 Byte

24 h Chữ ký boot sector mở rộng 1 Byte

25 h Số Serial của đĩa, đƣợc tạo ra lúc format 4 Byte

29 h Tên tập đĩa nh n đĩa 11 Byte

34 h Loại FAT: “FAT12” hoặc “FAT16” 8 Byte

3Ch- 200h M lệnh của chƣơng trình bootstrap loader 452 Byte

Bản 4 4 Các trường trong boot sector21

Nhƣ vậy, ngay sau khi quyền điều khiển đƣợc trả về cho boot sector thì hệ thống

sẽ thực hiện lệnh nhảy Jmp ở đầu boot sector offset 00 , để nhảy đến thực hiện đoạn

m lệnh bootstrap loader ở cuối boot sector từ offset 3Ch đến offset 200h . Và

bootstrap loader sẽ thực hiện nhiệm vụ của nó.

Dựa vào boot sector ta biết đƣợc nhiều thông tin về đĩa nhƣ: loại FAT, nh n đĩa,

số sector trên một Cluster, số Byte trên một sector, … Và từ đó ta cũng có thể tính

đƣợc dung lƣợng của đĩa tính theo Byte: Tổng số sector trên một tập đĩa * số Byte

trên một sector.

Ví dụ: Để in ra loại FAT đang sử dụng trên đĩa mềm hoặc trên một volume trên

đĩa cứng ta thực hiện nhƣ sau:

 Đọc nội dung của boot sector lƣu vào biến bootdat

 In ra 8 kí tự bắt đầu tại offset 34h của bootdat

MOV CX, 8

21 Nguy n Kim Tuấn, Giáo trình lý thuyết hệ điều hành, ĐH Huế, 2004,Tr.173

267

MOV SI, 34H

MOV AH, 02 ; hàm 02h/21h in kí tự trong dl

LOAI_FAT:

MOV DL, BYTE PTR BOOTDAT[SI]

INT 21H

LOOP LOAI_FAT

4.7.2. File Allocation Table (FAT)

Nội dung của một tập tin cần lƣu trữ trên đĩa đƣợc chia thành các phần có kích

thƣớc bằng nhau và bằng kích thƣớc của một Cluster, đƣợc gọi là các block tập tin. Các

block tập tin của các tập tin đƣợc lƣu trữ tại các Cluster xác định trên đĩa, các Cluster

chứa nội dung của một tập tin có thể không nằm kề nhau. Để theo dõi danh sách các

Cluster đang chứa nội dung của một tập tin của tất cả các tập tin đang lƣu trữ trên đĩa

hệ điều hành DOS dùng bảng FAT, hay c n gọi là bảng định vị tập tin. Bảng FAT còn

dùng để ghi nhận trạng thái của các Cluster trên đĩa: c n trống, đ cấp phát cho các tập

tin, bị bad không thể sử dụng hay dành riêng cho hệ điều hành. Trong quá trình khởi

động máy tính hệ điều hành nạp bảng FAT vào bộ nhớ để chuẩn bị cho việc đọc/ghi

các tập tin sau này.

Khi cần ghi nội dung của một tập tin vào đĩa hoặc khi cần đọc nội dung của một

tập tin trên đĩa hệ điều hành phải dựa vào bảng FAT, nếu bảng FAT bị hỏng thì hệ điều

hành không thể ghi/đọc các tập tin trên đĩa. Do đó, hệ điều hành DOS tạo ra hai bảng

FAT hoàn toàn giống nhau là FAT1 và FAT2, DOS sử dụng FAT1 và dự ph ng FAT2,

nếu FAT1 bị hỏng thì DOS sẽ sử dụng FAT2 để khôi phục lại FAT1. Điều không đúng

với hệ thống tập tin FAT32, FAT32 vẫn tạo ra 2 FAT nhƣ của DOS, nhƣng nếu FAT1

bị hỏng thì hệ điều hành sẽ chuyển sang sử dụng FAT2, sau đó mới khôi phục FAT1,

và ngƣợc lại.

Hệ điều hành DOS tổ chức cấp phát động các Cluster cho các tập tin trên đĩa, sau

mỗi thao tác cấp phát/ thu hồi Cluster thì hệ điều hành phải cập nhật lại nội dung cho

cả FAT1 và FAT2. Có thể hệ điều hành chỉ thực hiện cấp phát động Cluster cho các tập

tin dữ liệu có kích thƣớc thay đổi , c n đối với các tập tin chƣơng trình, tập tin thƣ

viện, tập tin liên kết động, … có kích thƣớc không thay đổi thì hệ điều hành sẽ thực

268

hiện cấp tĩnh Cluster cho nó.

Bảng FAT bao gồm nhiều phần tử điểm nhập/ mục vào , các phần tử đƣợc đánh

địa chỉ bắt đầu từ 0 để phân biệt, địa chỉ Cluster cũng có thể gọi là số hiệu của Cluster.

Giá trị dữ liệu tại một phần tử trong bảng FAT cho biết trạng thái của một Cluster

tƣơng ứng trên vùng dữ liệu. Ví dụ, phần tử thứ 7 trong bảng FAT chứa giá trị 000h,

giá trị này cho biết Cluster thứ 7 trên vùng dữ liệu c n trống, có thể dùng để cấp phát

cho một tập tin. Phần tử thứ 5 trong bảng FAT chứa giá trị FF7h, giá trị này cho biết

Cluster thứ 5 trên vùng dữ liệu bị bad, không thể cấp phát đƣợc, …

Hệ điều hành DOS có thể định dạng hệ thống tập tin theo một trong 2 loại FAT là

FAT12 và FAT16. Mỗi phần tử trong FAT12 rộng 12 bit(1.5 Byte , mỗi phần tử trong

FAT16 rộng 16 bit(2 Byte . Các đĩa hiện nay thƣờng đƣợc DOS định dạng theo hệ

thống tập tin với FAT16. Sau đây là danh sách các giá trị dữ liệu đƣợc chứa tại các

phần tử trong bảng FAT số trong ngoặc dùng trong FAT16 và ý nghĩa của nó.

 000h (0000h): Cluster tƣơng ứng c n để trống.

 FF7h (FFF7h): Cluster tƣơng ứng bị bad. Trong quá trình định dạng đĩa hệ

điều hành đánh dấu loại bỏ các Cluster bị bad bằng cách ghi giá trị này và

phần tử tƣơng ứng trong bảng FAT.

 FF0h (FFF0h) - FF6h (FFF6h): Cluster tƣơng ứng dành riêng cho hệ điều

hành.

 FF8h (FFF8h) - FFFh (FFFFh): Cluster tƣơng ứng là Cluster cuối cùng

trong dãy các Cluster chứa nội dung của một tập tin.

 002h (0002h) – FFEh (FFFEh): đây là số hiệu của Cluster trong bảng FAT,

nó cho biết Cluster tiếp theo trong d y các Cluster chứa nội dung của một tập

tin.

Trong bảng FAT, hai phần tử đầu tiên 00 và 01 không dùng cho việc theo dõi

trạng thái Cluster và ghi nhận bảng đồ cấp phát tập tin, mà nó đƣợc sử dụng để chứa

một giá trị nhận biết khuôn dạng đĩa, đƣợc gọi là Byte định danh Byte ID của đĩa, đây

là Byte đầu tiên của bảng FAT. Đối với đĩa cứng thì Byte ID = F8h.

Nhƣ vậy để đọc đƣợc nội dung của một tập tin trên đĩa thì trƣớc hết hệ điều hành

phải tìm đƣợc d y các Cluster chứa nội dung của một tập tin. Nhƣng bảng FAT chỉ cho

biết số hiệu các Cluster từ Cluster thứ hai đến Cluster cuối cùng trong d y nói trên.

Cluster đầu tiên trong dãy các Cluster chứa nội dung của một tập tin trên đĩa đƣợc tìm

269

thấy trong bảng thƣ mục gốc.

Để thấy đƣợc cách mà hệ điều hành DOS dùng bảng FAT để quản lý việc lƣu trữ

các tập tin trên đĩa cũng nhƣ theo dõi trạng thái các Cluster trên vùng dữ liệu, ta xem

hình minh hoạ sau đây.

Hình 4.12. Các t p tin Fi eA và Fi eB (a) được ưu tr n các Cluster của đĩa ogic (b)

và sơ đồ định vị của n tr n b ng FAT (c)

 Hình a ở trên cho thấy: có hai tập tin, FileA và FileB, FileA có kích thƣớc vừa đủ

4 Cluster và đƣợc chia thành 4 block, FileB có kích thƣớc nhỏ hơn 4 Cluster cũng

đƣợc chia thành 4 block, trong đó block B4 mặc dù chƣa đủ một Cluster nhƣng vẫn

đƣợc chứa vào một Cluster. Tức là, hệ điều hành cũng phải dùng đủ 8 Cluster để

270

lƣu trữ nội dung của hai tập tin FileA va FileB vào đĩa hình b .

 Bảng FAT trong hình c ở trên cho biết các thông tin sau đây:

 Các Cluster bị bad, không thể sử dụng: Cluster 11 và Cluster 13.

 Các Cluster c n trống, chƣa cấp phát: Cluster 2, Cluster 3, Cluster 5, Cluster 8.

 FileA đƣợc lƣu tại các Cluster: 4, 10, 7, 14 chứa block cuối cùng

 FileB đƣợc lƣu tại các Cluster: 6, 9, 12, 15 (chứa block cuối cùng

Nhƣ vậy bảng thƣ mục gốc cho biết Cluster đầu tiên chứa FileA là Cluster 4,

phần tử thứ 4 trong bảng FAT chứa giá trị 10, điều này chứng tỏ Cluster 10 là Cluster

tiếp theo chứa nội dụng FileA, phần tử thứ 10 trong bảng FAT chứa giá trị 7, điều này

chứng tỏ Cluster 7 là Cluster tiếp theo chứa nội dụng FileA, phần tử thứ 7 trong bảng

FAT chứa giá trị FFFh, điều này chứng tỏ Cluster 7 là Cluster chứa block cuối cùng

của FileA.

 Nhận xét:

Các Cluster chứa nội dung của một tập tin có thể không liên tiếp nhau, nhƣng nó

thƣờng nằm rải rác trong một phạm vi hẹp nào đó trên đĩa. Điều này giúp hệ điều hành

đọc tập tin đƣợc nhanh hơn nhờ tiết kiệm đƣợc thời gian duyệt và đọc qua các Byte từ

đầu đến cuối bảng FAT để d tìm d y các Cluster chứa nội dung của tập tin. Mặt khác,

việc phân bố tập trung các Cluster của một tập tin rất phù hợp với các thuật toán đọc

đĩa của hệ điều hành. Đối với các tập tin dữ liệu, sau một thời gian kích thƣớc của nó

có thể tăng lên, hệ điều hành phải cấp phát thêm các Cluster cho nó, các Cluster mới

này có thể nằm tại các vị trí tách xa các Cluster trƣớc đó, dẫn đến các Cluster chứa nội

dung của một tập tin phân bố rải rác khắp bề mặt đĩa, điều này sẽ làm chậm tốc độ đọc

tập tin của hệ điều hành.

Các tập tin dữ liệu bị mở, thay đổi, ghi và đóng lại nhiều lần cũng có thể dẫn đến

hiện tƣợng trên. Trên đĩa có thể xuất hiện hiện tƣợng có nhiều tập tin bị phân bố rải rác

khắc bề mặt đĩa, hiện tƣợng này đƣợc gọi là hiện tƣợng đĩa bị phân mảnh

fragmentary . Các đĩa bị phân mảnh sẽ làm cho tốc độ đọc tập tin trên nó chậm đi rất

nhiều. Trong trƣờng hợp này ngƣời dùng phải thực hiện việc sắp xếp lại các Cluster

trên đĩa, để các Cluster chứa nội dung của một tập tin của tất cả các tập tin trên đĩa

đƣợc phân bố tập trung hơn, thao tác này đƣợc gọi là chống phân mảnh cho đĩa. Hệ

điều hành DOS cung cấp nhiều công cụ để ngƣời dùng thực hiện việc chống phân

271

mảnh đĩa cả ở mức ứng dụng và mức lập trình.

 Để đọc nội dung của một tập tin trên đĩa dựa vào ảng thư mục gốc và ảng

F T, hệ điều hành thực hiện theo các ước sau đây:

 Tìm phần tử trong bảng thƣ mục gốc chứa thông tin của tập tin cần đọc.

 Tại phần tử này, xác định số hiệu của Cluster đầu tiên trong d y các Cluster

chứa nội dung của tập tin giả sử Cluster 4 , giá trị này đƣợc xem nhƣ con trỏ

trỏ tới bảng FAT để bắt đầu d tìm các Cluster từ thứ 2 đến cuối cùng trong

dãy các Cluster chứa nội dung của tập tin cần đọc. Sau đó đọc block dữ liệu

đầu tiên của tập tin tại Cluster 4 trên vùng dữ liệu của đĩa.

 Xác định Byte tƣơng ứng với phần tử 4 trong bảng FAT. Đọc giá trị dữ liệu

tại phần tử 4 này, giả sử giá trị đọc đƣợc là 10. Sau đó đọc block dữ liệu tiếp

theo của tập tin tại Cluster 10 trên vùng dữ liệu của đĩa.

 Xác định Byte tƣơng ứng với phần tử 4 trong bảng FAT. Đọc giá trị dữ liệu

tại phần tử 4 này, giả sử giá trị đọc đƣợc là 17. Sau đó đọc block dữ liệu tiếp

theo của tập tin tại Cluster 17 trên vùng dữ liệu của đĩa.

 Xác định Byte tƣơng ứng với phần tử 17 trong bảng FAT, sau đó thực hiện

hoàn toàn tƣơng tự nhƣ bƣớc 4 cho đến khi đọc đƣợc giá trị FFFh với

FAT12) hoặc FFFFh với FAT16 tại một phần tử nào đó giả sử phần tử 43

trong bảng FAT thì đọc block dữ liệu cuối cùng của tập tin tại Cluster 43 trên

vùng dữ liệu của đĩa, sau đó dừng lại. Tới đây kết thúc quá trình đọc tập tin.

Thao tác đọc tập tin của DOS nhƣ trên là k m hiệu quả, vì ngoài việc đọc nội

dung của tập tin tại các Cluster trên vùng dữ liệu của đĩa hệ điều hành c n phải đọc và

phân tích bảng FAT để d tìm ra d y các Cluster chứa nội dung của một tập tin. Hệ

thống tập tin NTFS trong WindowsNT/2000 khắc phục điều này bằng cách lƣu danh

sách các Cluster chứa nội dung của một tập tin vào một vị trí cố định nào đó, nên khi

đọc tập tin hệ điều hành chỉ cần đọc nội dung của các Cluster trên đĩa theo danh sách ở

trên, mà không phải tốn thời gian cho việc dò tìm dãy các Cluster chứa nội dung của

tập tin của hệ thống tập tin FAT trong DOS.

Ngoài ra, nếu DOS có một cơ chế nào đó ghi lại đƣợc danh sách các Cluster còn

trống trên đĩa, thì tốc độ ghi tập tin của hệ điều hành sẽ tăng lên vì hệ điều hành không

tốn thời gian cho việc đọc bảng FAT để xác định Cluster c n trống. Các hệ thống tập

tin của các hệ điều hành sau này nhƣ Windows98, WindowsNT/2000 đ thực hiện

272

đƣợc điều này.

Độ rộng của một phần tử trong bảng FAT 12 bit hay 16 bit , quyết định dung

lƣợng đĩa tối đa mà hệ điều hành có thể quản lý đƣợc. Nếu hệ điều hành sử dụng FAT12 thì mỗi phần tử trong FAT12 có thể chứa một giá trị lên đến 212, đa số trong số này là số hiệu các Cluster trên vùng dữ liệu của đĩa, điều này có nghĩa là trên vùng dữ liệu của đĩa có tối đa là 212 Cluster. Từ đây ta có thể tính đƣợc dung lƣợng đĩa tối đa (Byte mà hệ thống tập tin FAT12 có thể quản lý đƣợc là:

212 Cluster * 4 sector/1 Cluster * 512 Byte/1 sector (a)

Tƣơng tự, dung lƣợng đĩa tối đa Byte mà hệ thống tập tin FAT16 có thể quản lý

đƣợc là:

216 Cluster * 4 sector/1 Cluster * 512 Byte/1 sector (b)

Rõ ràng với hệ thống tập tin FAT16 thì DOS sẽ quản lý đƣợc một không gian đĩa

lớn hơn so với FAT12.

Windows98 sử dụng hệ thống tập tin FAT32 và nó cho ph p có tới 6 sector trên một Cluster, nên nó có thể quản lý đƣợc một không gian đĩa lớn hơn nhiều lần 232 Cluster * 6 sector/1 Cluster * 512 Byte/1 sector so với DOS. Nếu một tập tin có kích

thƣớc là 50 sector, thì trong DOS tập tin đƣợc chia thành 13 block có 4 sector trong 1

block ≡ Cluster) còn trong Windows98 tập tin đƣợc chia thành 9 block có 6 sector

trong 1 block ≡ Cluster . Tức là, trong DOS tập tin này đƣợc chứa ở 13 Cluster trên đĩa

(dãy các Cluster chứa tập tin gồm 13 phần tử c n trong Windows98 tập tin này đƣợc

chứa trong 9 Cluster (dãy các Cluster chứa tập tin gồm 9 phần tử . Điều này cho thấy

tập tin này sẽ đƣợc đọc nhanh hơn trong Windows98, vì chỉ cần đọc 9 lần thay vì phải

đọc 13 lần nhƣ trong DOS. Chƣa kể, để đọc tập tin các hệ điều hành phải phân tích

bảng FAT để d ra d y các Cluster chứa nội dung của tập tin. Nhƣ vậy, hệ thống tập tin

của Windows98 quản lý đƣợc một không gian đĩa lớn hơn và có tốc độ đọc tập tin

nhanh hơn, so với hệ thống tập tin của DOS.

 Để ghi một tập tin vào đĩa:

Hệ điều hành phải thực hiện việc đọc nội dung của các phần tử trong bảng FAT

để tìm phần tử chứa giá trị 0, để ghi một block tập tin vào Cluster tƣơng ứng trên vùng

dữ liệu. Trong khi đọc giá trị của các phần tử trong bảng FAT hệ điều hành có thể đọc

đƣợc giá trị FF7h hoặc FFF7h, dấu hiệu của bad Cluster, trong trƣờng hợp này hệ điều

273

hành sẽ không ghi tập tin vào Cluster tƣơng ứng với phần tử này, và hệ điều hành sẽ

tìm đọc một phần tử khác. Nhƣ vậy các bad Cluster trên đĩa sẽ làm chậm tốc độ ghi tập

tin của hệ điều hành. Đây là một trong các hạn chế của các hệ thống tập tin FAT. Các

hệ thống tập tin khác, NTFS chẳng hạn, khắc phục điều này bằng cách tạo ra một danh

sách riêng để theo dõi các Cluster bị bad và khi tìm Cluster trống để ghi tập tin hệ điều

hành sẽ không đọc các phần tử trong bảng FAT tƣơng ứng với các Cluster này.

Việc đọc nội dung của một phần tử trong FAT16 chỉ đơn giản là đọc nội dung của

2 Byte 1 word , trong khi đó việc đọc nội dung của một phần tử trong FAT12 sẽ phức

tạp hơn vì 1.5 Byte không phải là kiểu dữ liệu chuẩn của ngôn ngữ máy và DOS. Do

đó, DOS phải gộp 2 phần tử liên tiếp để có đƣợc 3 Byte sau đó đọc hết 3 Byte và phân

tích để có đƣợc nội dung của 2 phần tử liên tiếp trong FAT12.

 Để quản lý thông tin của các tập tin và các thư mục thƣ mục con của thƣ mục

gốc đang đƣợc lƣu trữ trên thƣ mục gốc của đĩa mềm hoặc đĩa logic trên đĩa

cứng, hệ điều hành DOS sử dụng bảng thƣ mục gốc Root Directory).

4.7.3. Root Directory Bảng thư mục gốc)

Bảng thƣ mục gốc gồm nhiều phần tử Entry/mục vào , số lƣợng phần tử trong

bảng thƣ mục gốc đƣợc DOS quy định trƣớc trong quá trình Format đĩa và đƣợc ghi tại

offset 11h trong boot sector, giá trị này không thể thay đổi. Do đó, tổng số tập tin và

thƣ mục con mà ngƣời dùng có thể chứa trên thƣ mục gốc của đĩa là có giới hạn. Đây

là một hạn chế của DOS. Trong hệ thống tập tin FAT32 và NTFS số phần tử trong

bảng thƣ mục gốc không bị giới hạn, có thể thay đổi đƣợc và có thể đƣợc định vi tại

một vị trí bất kỳ trên đĩa hoặc chứa trong một tập tin nào đó.

Mỗi phần tử trong bảng thƣ mục gốc dùng để chứa thông tin về một tập tin hay

thƣ mục nào đó đang đƣợc lƣu trên thƣ mục gốc của đĩa. Khi có một tập tin hoặc một

thƣ mục nào đó đƣợc tạo ra trên thƣ mục gốc của đĩa thì hệ điều hành dùng một phần

tử trong bảng thƣ mục gốc để chứa các thông tin liên quan của nó. Khi một tập tin hoặc

thƣ mục bị xoá/ di chuyển khỏi thƣ mục gốc thì hệ điều hành sẽ thu hồi lại phần tử này

để chuẩn bị cấp cho các tập tin thƣ mục khác sau này.

Một phần tử trong thƣ mục gốc dài 32 Byte, chứa các thông tin sau:

274

Offset Nội dung Độ lớn

Tên chính của tập tin filename 8 Byte 00h

Phần mở rộng của tên Tập tin .Ext 3 Byte 08h

Thuộc tính tập tin attribute 1 Byte 0Bh

Dự trữ, chưa được sử dụng Unused) 10 Byte 0Ch

Giờ thay đổi tập tin cuối cùng time 2 Byte 16h

Ngày thay đổi tập tin cuối cùng date 2 Byte 18h

Cluster đầu tiên của Flie start Cluster) 2 Byte 1Ah

Kích thƣớc của Tập tin filesize 4 Byte 1Ch

Bản 4 5 Các trường trong một Entry của b ng thư mục gốc22

Sở dĩ DOS qui định tên tập tin/tên thƣ mục dài không quá 8 kí tự và phần mở

rộng tên tập tin dài không quá 3 kí tự vì DOS chỉ dùng 8 Byte cho trƣờng tên tập tin

(filename) và 3 Byte cho trƣờng tên mở rộng .ext . Nếu ngƣời dùng tạo tập tin/ thƣ

mục với tên không đủ 8 kí tự thì DOS tự động thêm vào các kí tự trắng để cho đủ 8 kí

tự, ngƣợc lại DOS tự động bỏ bớt các kí tự cuối chỉ giữ lại 8 kí tự đầu. Điều này cũng

đúng cho phần mở rộng của tên tập tin.

Hình 4.13. Một phần t trong b ng thư mục gốc (a) và Byte thuộc tính (b)

 Byte đầu tiên offset 00 của một phần tử trong thƣ mục gốc c n đƣợc gọi là Byte

trạng thái, Byte này có thể chứa một trong các giá trị đặc biệt sau đây:

 0: cho biết phần tử này chƣa đƣợc sử dụng.

22 Nguy n Kim Tuấn, Giáo trình lý thuyết hệ điều hành, ĐH Huế, 2004,Tr.179

275

 E5h: cho biết phần tử này là của một tập tin đ đƣợc tạo nhƣng đ bị xóa.

 05h: cho biết kí tự đầu tiên của tên tập tin này thực tế là E5h. Nếu ngƣời

dùng cố tình tạo ra một tập tin có tên bắt đầu là kí tự có m ASCII là E5h thì

hệ điều hành sẽ tự động thay bằng kí tự có m là 05h, để phân biệt tập tin

này với các tập tin đ bị xoá.

 2Eh kí tự dấu chấm “.” : cho biết phần tử này chứa thông tin của một thƣ

mục con, nếu Byte thứ 2 cũng chứa giá trị 2Eh hai dấu chấm liên tiếp “..”

thì trƣờng start Cluster sẽ chứa số hiệu Cluster đầu tiên của thƣ mục cha, nếu

là thƣ mục gốc thì là 0000h.

Nếu bằng cách nào đó ngƣời lập trình đƣa đƣợc một giá trị 1 Byte không thuộc

một trong các giá trị trên và không phải là các chữ cái tên tập tin thông thƣờng, vào

Byte đầu tiên của phần tử trong bảng thƣ mục gốc đang cấp phát cho một tập tin/thƣ

mục nào đó, thì DOS và các tiện ích trên DOS không thể nhận biết các tập tin/thƣ mục

này, và không thể thực hiện các thao tác Dir, Del, vv trên nó. Đây là một cách để bảo

vệ các tập tin/thƣ mục của ngƣời dùng trên đĩa.

 filename: tên tâp tin (8Byte)

 .ext: phần mở rộng 3Byte)

 attribute: thuộc tính tập tin 1Byte). Tuy nhiên DOS chỉ dùng 6 bit từ 0 đến 5 của

Byte này để ghi 6 thuộc tính lần lƣợt là: chỉ đọc, ẩn, hệ thống, nh n đĩa, thƣ mục

con và lƣu trữ trong Hình 4.11 ở trên 2 bit chƣa sử dụng đƣợc đánh dấu x :

 Thuộc tính chỉ đọc (r: read on y): Nếu bit 0 của Byte thuộc tính bằng 1, thì tập

tin tƣơng ứng có thuộc tính chỉ đọc. Một tập tin có thuộc tính chỉ đọc sẽ không

bị thay đổi nội dung và không bị xóa.

 Thuộc tính ẩn (h: hidden): Nếu bit 1 của Byte thuộc tính bằng 1, thì tập tin

tƣơng ứng có thuộc tính ẩn. Một tập tin có thuộc tính ẩn thì các lệnh DOS

thông thƣờng nhƣ Edit, Del, Dir, Tree, … sẽ không tác động đƣợc đến nó.

 Thuộc tính hệ thống (s: system): Nếu bit 2 của Byte thuộc tính bằng 1, thì tập

tin tƣơng ứng có thuộc tính hệ thống. Một tập tin có thuộc tính hệ thống tƣơng

tự nhƣ tập tin có thuộc tính ẩn hoặc vừa ẩn vừa hệ thống. Thuộc tính hệ thống

chỉ có ý nghĩa kế thừa, nó không có ý nghĩa trong hệ điều hành DOS.

 Thuộc tính nhãn đĩa (v: vo ume): Nếu bit 3 của Byte thuộc tính bằng 1, thì

phần tử này chứa nh n nhận dạng đĩa, đƣợc lƣu tại trƣờng filename và trƣờng

276

ext. Phần tử này chỉ đƣợc DOS nhận biết nếu nó nằm trên thƣ mục gốc. Trong

trƣờng hợp này chỉ có trƣờng Date và Time là đƣợc sử dụng. Trƣờng start

Cluster và trƣờng filesize chứa giá trị 0.

 Thuộc tính thư mục con (d: subdirectory): Nếu bit 4 của Byte thuộc tính bằng

1, thì phần tử này chứa các thông tin về thƣ mục con của thƣ mục gốc trên đĩa.

Đối với DOS thƣ mục con là một tập tin chứa dữ liệu thông thƣờng, nó có một

thuộc tính đặc biệt, đó là thuộc tính d.

 Thuộc tính ưu trữ (a:archive): thuộc tính này dùng để trợ giúp cho việc tạo

backup của các tập tin trên đĩa cứng. Bit này = 0 đối với tất cả các tập tin chƣa

bị sửa đổi kể từ lần backup gần đây nhất. Nhƣ vậy trong lần tạo Backup sau

DOS chỉ cần cập nhật cho các tập tin có bit này bằng 1. Tóm lại, lúc đầu bit a =

0, sau đó nếu có bất kỳ sự thay đổi nào trong nội dung của tập tin thì bit này sẽ

đƣợc thay bằng 1.

 10 Byte bắt đầu từ offset 0Ch chƣa đƣợc DOS sử dụng, Microsoft dự trữ vùng này

cho các mục đích khác sau này. Hệ điều hành Windows98 sử dụng tất cả 10Byte

này. Việc dự trữ 10 Byte này tạo thành một kẽ hở của DOS, các đoạn m lệnh Virus

có thể định vị ở vùng này mà hệ điều hành không thể phát hiện đƣợc.

 Trƣờng Date và trƣờng Time kết hợp với nhau để lƣu chính xác ngày giờ tạo ra tập

tin/ thƣ mục hay ngày giờ tập tin/ thƣ mục đƣợc thay đổi gần đây nhất.

 Trƣờng Start Cluster quan trọng nhất của một phần tử trong bảng thƣ mục gốc, dài

2 Byte, bắt đầu tại Offset 1Ah. Nó chứa số hiệu của Cluster đầu tiên trong d y các

Cluster chứa nội dung của tập tin tƣơng ứng với phần tử này. Do đó trong các thao

tác đọc tập tin của hệ điều hành, trƣờng này đƣợc xem nhƣ một con trỏ trỏ tới bảng

FAT để d tìm d y các Cluster chứa nội dụng của một tập tin.

 Trƣờng Filesize cho biết kích thƣớc của tập tin tính theo Byte. Nếu một phần tử

trong bảng thƣ mục gốc đƣợc dùng cho một thƣ mục con nào đó thì trƣờng Filesize

này chứa giá trị 0. Kích thƣớc của thƣ mục con chỉ đƣợc biết nhờ lần theo chuỗi số

hiệu Cluster tƣơng ứng trong bảng FAT.

Khi người d ng x a một t p tin tr n đĩa hệ điều hành hông x a nội dung của t p

tin tại các Cluster trên vùng dữ iệu, không xóa dãy các Cluster chứa t p tin trong

b ng FAT, th m chí hông x a Cluster đầu ti n trong dãy các Cluster chứa t p tin tại

phần t tương ứng với t p tin trong b ng thư mục gốc mà hệ điều hành chỉ thay í tự

277

đầu ti n của t n t p tin tại phần t trong b ng thư mục gốc b ng giá trị E5h. Do đó,

sau khi đ xóa một tập tin thì hệ điều hành có thể khôi phục lại đƣợc tập tin này, bằng

các thay kí tự m E5h ở Byte đầu tiên của tên tập tin bằng một kí tự khác. Trƣờng hợp

không khôi phục đƣợc là do sau một thời gian, hệ điều hành đ sử dụng phần tử trong

thƣ mục gốc, các phần tử trong bảng FAT và các Cluster trên vùng dữ liệu của tập tin

đ bị xóa, cấp phát cho các tập tin mới sau này. Khi duyệt bảng thƣ mục gốc gặp các

phần tử có Byte đầu bàng E5h hệ điều hành biết đây là phần tử của tập tin đ bị xóa

nên không in ra màn hình. Điều vừa trình bày trên đây hoàn toàn đúng với trƣờng hợp

của các thƣ mục con trên đĩa logic.

 Để ghi một tập tin vào thư mục gốc của đĩa thông tin của tập tin chứa trong

một phần tử trong ảng thư mục gốc) hệ điều hành DOS thực hiện các ước

sau đây:

1. Tìm một phần tử trong bảng thƣ mục gốc chƣa sử dụng, đó là phần tử mà

Byte đầu tiên của nó chứa gia trị 00. Giả sử tìm đƣợc phần tử thứ 105.

2. Ghi tên tập tin, phần mở rộng, thuộc tính của tập tin, ngày giờ tạo tập tin

vào các trƣờng tƣơng ứng tại phần tử 105 trong bảng thƣ mục gốc

3. Tìm một Entry trong bảng FAT chứa giá trị 000h, giả sử tìm đƣợc Entry

207, điều này có nghĩa Cluster 207 trên vùng dữ liệu c n trống

4. Ghi số hiệu của Entry này, Entry 207, vào trƣờng start Cluster tại offset

1Ah của phần tử 107 trong bảng thƣ mục gốc.

5. Ghi block đầu tiên của tập tin vào Cluster 107 trên vùng dữ liệu. Nếu nội

dung của tập tin chứa vừa đủ trong 1 Cluster, thì DOS sẽ thực hiện bƣớc

cuối cùng bƣớc 9 , ngƣợc lại DOS tiếp tục thực hiện bƣớc 6.

6. Tiếp tục tìm một Entry trong bảng FAT chứa giá trị 000h, giả sử tìm đƣợc

Entry 215, điều này có nghĩa Cluster 215 trên vùng dữ liệu c n trống.

7. Ghi giá trị 215 vào Entry 207 trong bảng FAT và ghi block thứ hai của tập

tin vào Cluster 215 trên vùng dữ liệu.

8. Lặp lại các bƣớc 6 và 7 cho đến khi ghi hết các block của tập tin vào các

Cluster trên vùng dữ liệu. Giả sử block cuối cùng của tập tin đƣợc ghi vào

Cluster 302 trên vùng dữ liệu, tức là Entry cuối cùng đƣợc tìm thấy chứa

giá trị 00h là Entry 302.

278

9. Bƣớc cuối cùng: ghi giá trị FFFh vào Entry 107 hoặc vào Entry 302.

10. Tính kích thƣớc của tập tin và ghi vào trƣờng filesize của phần tử 105

trong bảng thƣ mục gốc.

4.7.4. Thư mục con Subdirectory)

Nhƣ đ biết, bảng thƣ mục gốc của DOS định vị tại một vị trí cố định trên đĩa

logic, sau 2 bảng FAT, số lƣợng phần tử trong bảng thƣ mục gốc là cố định, không thể

mở rộng đƣợc, và đƣợc DOS quy định trong quá trình định dạng đĩa. Đó là những hạn

chế về cấu trúc và tổ chức bảng thƣ mục gốc của DOS. Cụ thể là ngƣời dùng không thể

chứa quá nhiều tập tin, thƣ mục trên thƣ mục gốc và bảng thƣ mục gốc d bị Virus tấn

công. Hệ điều hành DOS đƣa ra khái niệm thƣ mục con để khắc phục một phần những

hạn chế trên.

Đối với ngƣời dùng, thƣ mục con là những thƣ mục nằm trên thƣ mục gốc của

đĩa, trên đĩa chỉ có một thƣ mục gốc nhƣng có thể có nhiều thƣ mục con, trong thƣ mục

con có thể chứa nhiều không giới hạn tập tin và thƣ mục con khác, gắn liền với thƣ

mục con là thƣ mục cha của nó, thƣ mục cha có thể là thƣ mục gốc hoặc một thƣ mục

con khác. Nhƣng đối với DOS, thƣ mục con là một tập tin đặc biệt, tập tin này có thuộc

tính thƣ mục con, Byte thuộc tính có giá trị 00010000 16 , và có trƣờng Filesize = 0.

Về mặt hệ thống, thư mục con có các điểm khác sau đây so với thư mục gốc:

 Hệ điều hành lƣu trữ nó giống nhƣ lƣu trữ các tập tin khác trên đĩa. Tức là, muốn

đọc đƣợc thƣ mục con hệ điều hành phải lần theo dấu vết của nó trong bảng FAT.

 Bảng thƣ mục của nó có số lƣợng phần tử không giới hạn, có thể tăng lên hay giảm

xuống tùy thuộc vào số lƣợng tập tin và thƣ mục chứa trong nó. Nhờ vậy mà ngƣời

dùng có thể chứa nhiều tập tin thƣ mục trong một thƣ mục con trên đĩa. Số lƣợng

phần tử trong bảng thƣ mục của các thƣ mục con chỉ bị giới hạn bởi dung lƣợng đĩa

và kích thƣớc các tập tin thƣ mục chứa trong nó.

 Bảng thƣ mục của nó có thể định vị tại một vị trí bất kỳ trên vùng dữ liệu của đĩa.

Có thể xem đây là một hạn chế của thƣ mục con, vì nếu tạo quá nhiều thƣ mục con

trên đĩa thì bảng thƣ mục của các thƣ muc con sẽ chiếm hết nhiều không gian đĩa

trên vùng dữ liệu. Do đó hệ điều hành không khuyến khích tạo quá nhiều thƣ mục

con trên các đĩa mềm. Virus khó có thể tấn công bảng thƣ mục của thƣ mục con vì

279

nó không cố định.

 Muốn biết đƣợc kích thƣớc của thƣ mục con hệ điều hành phải tính toán từ kích

thƣớc của tất cả các tập tin trong thƣ mục con, hệ điều hành dựa vào bảng thƣ mục

của thƣ mục con và bảng FAT để thực hiện việc tính toán này.

Cấu trúc của một phần tử trong bảng thƣ mục của thƣ mục con tƣơng tự cấu trúc

của một phần tử trong bảng thƣ mục gốc. Đa số các phần tử trong bảng thƣ mục gốc

của đĩa hay phần tử trong bảng thƣ mục của thƣ mục con, chứa thông tin của một thƣ

mục con , đều có trƣờng Filename là tên của thƣ mục con , trƣờng Attribute = 16,

trƣờng Start Cluster = Cluster đầu tiên của thƣ mục con , trƣờng Filesize = 0, … Chỉ

có hai phần tử đầu tiên trong bảng thƣ mục của các thƣ mục con là có chứa các giá trị

đặc biệt.

Ngay sau khi có một thƣ mục con đƣợc tạo ra, hệ điều hành tạo ngay bảng thƣ

mục cho nó và khởi tạo 2 phần tử đầu tiên trong bảng thƣ mục này:

 Phần t thứ nh t, chứa m ascii của kí tự dấu chấm . ở Byte đầu tiên của trƣờng

filename, phần tử này chỉ đến chính thƣ mục hiện hành. Trƣờng Start Cluster cho

biết Cluster bắt đầu của thƣ mục này.

 Phần t thứ hai, chứa 2 m ascii của 2 kí tự dấu chấm .. ở 2 Byte đầu tiên của

trƣờng filename, phần tử này chỉ đến thƣ mục cha của nó. Trƣờng Start Cluster cho

biết Cluster bắt đầu của thƣ mục cha của nó. Nhƣng nếu cha của nó là thƣ mục gốc

280

thì trƣờng này chứa giá trị 0.

Hình 4.14 B ng thư mục gốc và b ng thư mục con

Trong sơ đồ này ta giả sử: trên thƣ mục gốc có hai thƣ mục con là ASS và OS,

trong thƣ mục ASS có hai thƣ mục con LT và TH, trong OS có chứa tập tin tailieu.txt

và thƣ mục con LTOS, trong LT có chứa 2 tập tin ch1.txt và ch2.txt, trong TH có chứa

2 tập tin btap1.txt và btap2.txt.

Nếu một tập tin bị giảm kích thƣớc thì DOS sẽ giải phóng ngay các Cluster đĩa

mà tập tin không c n sử dụng nữa. Nhƣng các Cluster chứa thƣ mục con chỉ đƣợc giải

phóng khi tất cả các tập tin thƣ mục trong thƣ mục con này đ bị xóa hết ra khỏi đĩa.

4.8. TỔ CHỨC LƯU TRỮ TẬP TIN TRÊN ĐĨ CD_ROM

Về nguyên tắc hệ thống tập tin trên CD_ROM đơn giản hơn so với những hệ

281

thống tập tin khác, vì các đĩa CD_ROM chỉ đƣợc ghi một lần write-once media), do

đó các tập tin ghi trên nó không thể xóa bỏ hay thay đổi sau khi đĩa đ đƣợc chế tạo,

chính vì vậy thành phần quản lý File/đĩa của hệ điều hành sẽ không lo đến việc quản lý

các Block c n tự do trên đĩa cũng nhƣ việc cấp phát và thu hồi các Block cho các tập

tin, trong trƣờng hợp các tập tin đƣợc lƣu trữ trên đĩa CD_ROM.

Sau đây chúng ta xem x t hệ thống tập tin chính trên CD_ROM và 2 hệ thống mở

rộng của chúng:

4.8.1. Hệ thống tập tin ISO 9660

Đây là chuẩn phổ biến nhất đối với các hệ thống tập tin CD_ROM và đ đƣợc

chấp nhận nhƣ một chuẩn quốc tế vào năm 1988 với cái tên ISO 9660. Một trong

những mục đích của chuẩn này là làm cho tất cả các CD_ROM đều có thể đọc đƣợc

trên các máy tính khác nhau, nó không phụ thuộc vào thứ tự Byte cũng nhƣ hệ điều

hành đang sử dụng, kể cả hệ điều hành yếu nhất nhƣ MS-DOS.

Trên CD_ROM không có track, cylinder nhƣ trên các đĩa từ, nó chỉ có một đƣờng

xoắn ốc đi từ tâm đĩa ra bên ngoài, đƣờng xoắn ốc này đƣợc chia thành các khối

(block) logic có kích thƣớc bằng nhau và bằng 2352 Byte, đôi khi cũng đƣợc gọi là các

sector logic. Một vài Byte trong khối dành cho phần mở đầu, sửa chữa lỗi, và những

việc khác. Phần chính của mỗi khối logic c n lại khoảng 2048 Byte.

ISO 9660 hỗ trợ cho một tập đĩa CD_ROM với một tập gồm 216-1 đĩa, một

CD_ROM riêng lẽ có thể đƣợc chia thành nhiều partition. Trong phần này chúng ta chỉ

tìm hiểu chuẩn ISO 9660 với một CD_ROM và không đƣợc chia thành các Partition.

 Mỗi CD_ROM đều có phần đầu của đĩa, dài 16 block, chức năng của phần

này không đƣợc định nghĩa trong chuẩn ISO 9600. Các nhà sản xuất

CD_ROM có thể sử dụng phần đầu này để ghi vào đó chƣơng trình

BootStrap cho ph p máy tính có thể khởi động đƣợc từ đĩa CD_ROM, hoặc

dùng cho những mục đích khác.

 Phần tiếp theo là 1 block chứa bộ mô tả Volume chính, bộ mô tả này chứa một

số thông tin chung về CD_ROM, bao gồm: định danh hệ thống 32Byte , định

danh volume (32Byte , định danh nhà sản xuất 128Byte và định danh dữ liệu

(128Byte . Khi chế tạo có thể lấp đầy những trƣờng trên theo ý muốn. Trong

phần này c n chứa phần giới thiệu, bản quyền tác giả, thông tin thƣ mục, kích

282

thƣớc của một khối logic 2048, 4096, 8192, ... , số các block trên CD_ROM,

và thời gian tạo và kết thúc của CD_ROM. Cuối cùng, trong bộ mô tả Volume

chính c n chứa một tập các mục vào directory Entry cho thƣ mục gốc, tại

đây chứa địa chỉ của block bắt đầu của thƣ mục gốc trên CD_ROM. Trên

CD_ROM có 2 bộ mô tả volume chính, có nội dung hoàn toàn giống nhau, sử

dụng một bộ và một bộ để dự ph ng.

 Sau các phần trên là phần bắt đầu của CD_ROM dùng để chứa các tập tin

đang đƣợc ghi trên đĩa.

 Thƣ mục gốc và tất cả các thƣ mục khác, chỉ gồm một số mục vào, phần cuối

của chúng chứa một bit đánh dấu mark . Mỗi mục vào chứa từ 10 đến 12

trƣờng, trong đó có một số thuộc ASCII và số khác là những trƣờng số thuộc

số nhị phân.

4.8.2. Mở rộng Rock Ridge

Các chuyên viên thiết kế của UNIX nhận thấy ISO 9660 c n một vài hạn chế,

do đó họ đ mở rộng ISO 9660 với mục đích là cho nó có thể thay thế cho hệ thống tập

tin của UNIX trên các đĩa CD_ROM và các tập tin đƣợc tạo từ UNIX có thể đƣợc sao

ch p sang CD_ROM và ngƣợc lại, chuẩn mở rộng này đƣợc gọi là Rock Ridge.

Rock Ridge giữ lại tất cả các trƣờng của ISO 9660, và sử dụng trƣờng System

để đƣa thêm vào các trƣờng mới, các hệ thống tập tin khác không nhận biết các trƣờng

này và xem CD_ROM nhƣ một đĩa CD_ROM thông thƣờng. Rock Ridge bổ sung thêm

các trƣờng, theo thứ tự là: PX: Posix Attributes, PN: Major and miror device number,

SL:Symbolic link, NM: Alternative name, CL: Child location, PL: Parent location,

RE:Relocaltion, TF: Times stamps, trong đó trƣờng quan trọng nhất là NM, trƣờng này

cho ph p sử dụng 2 tên tập tin cho một tập tin, một tên tập tin trong mục vào của thƣ

mục và một tên tập tin kết hợp, tên này không phụ vào tập kí tự hoặc giới hạn chiều dài

của chuẩn ISO 9660.

4.8.3. Mở rộng Joliet

Cũng nhƣ các chuyên viên thiết kế của UNIX, các chuyên viên thiết kế của

Microsoft muốn mở rộng ISO 9660 sao cho các tập tin đƣợc tạo từ Windows có thể

đƣợc sao ch p sang CD_ROM và ngƣợc lại và họ đ thành công với mở rộng Joliet.

Mở rộng Joliet cho ph p: Tên tập tin dài đến 64 kí tự; Sử dụng tập kí tự Unicode nên

tên tập tin có thể dài đến 128 kí tự; Có nhiều hơn 8 cấp thƣ mục lồng nhau; Sử dụng

283

tên thƣ mục với phần mở rộng.

4.9. TÓM TẮT

Một tập tin là một kiểu dữ liệu trừu tƣợng đƣợc định nghĩa và đƣợc cài đặt bởi hệ

điều hành. Mỗi thiết bị trong một tập tin giữ một bảng volume nội dung hay thƣ mục

thiết bị liệt kê vị trí các tập tin trên thiết bị. Ngoài ra, nó có ích để tạo các thƣ mục cho

ph p các tập tin đƣợc tổ chức trong thƣ mục đó. Một thƣ mục đơn cấp trong hệ thống

đơn ngƣời dùng gây ra các vấn đề đặt tên vì mỗi tập tin phải có tên duy nhất. Thƣ mục

hai cấp giải quyết vấn đề này bằng cách tạo một thƣ mục riêng cho mỗi ngƣời dùng.

Mỗi ngƣời dùng có thƣ mục riêng, chứa tập tin riêng. Thƣ mục liệt kê các tập tin bằng

tên và chứa những thông tin nhƣ vị trí tập tin trên đĩa, chiều dài, kiểu, ngƣời sở hữu,

thời gian tạo, thời điểm dùng gần nhất,…

Tổng quát hóa tính tự nhiên của thƣ mục hai cấp là thƣ mục có cấu trúc cây. Thƣ

mục có cấu trúc cây cho ph p một ngƣời dùng tạo thƣ mục con để tổ chức các tập tin.

Cấu trúc thƣ mục đồ thị không chứa chu trình cho ph p các thƣ mục con và tập tin

đƣợc chia s nhƣng tìm kiếm và xóa phức tạp. Một cấu trúc đồ thị tổng quát linh động

hơn trong việc chia s tập tin và thƣ mục, nhƣng yêu cầu thu dọn rác để phục hồi

không gian đĩa không đƣợc dùng.

Chia s tập tin phụ thuộc vào ngữ nghĩa đƣợc cung cấp bởi hệ thống. Các tập tin

có nhiều ngƣời đọc, viết hay bị giới hạn việc chia s . Hệ thống tập tin phân tán cho

ph p máy khách hàng gắn các phân khu hay thƣ mục vào từ nhiều server. Với điều

kiện chúng có thể truy xuất nhau qua mạng. Các hệ thống tập tin ở xa có những thách

thức về khả năng tin cậy, năng lực và bảo mật.

Vì các tập tin là cơ chế lƣu trữ thông tin quan trọng trong hầu hết các hệ thống

máy tính nên bảo vệ tập tin là cần thiết. Truy xuất tới các tập tin đƣợc kiểm soát riêng

cho mỗi loại truy xuất -đọc, viết, thực thi, chèn cuối, xóa, liệt kê thƣ mục,.. Bảo vệ tập

tin có thể đƣợc cung cấp bởi mật khẩu, bởi danh sách truy xuất hay bởi những kỹ thuật

phức tạp.

Hệ thống tập tin định vị không đổi trên thiết bị lƣu trữ phụ đƣợc thiết kế để quản

lý một lƣợng lớn dữ liệu không đổi. Phƣơng tiện lƣu trữ phụ phổ biến nhất là đĩa.

Đĩa vật lý đƣợc phân chia thành một hay nhiều phân khu, mỗi phân khu chứa một

hệ thống tập tin. Hệ thống tập tin này đƣợc gán vào cấu trúc đặt tên của hệ thống để

284

làm cho chúng sẵn dùng. Cơ chế đặt tên khác nhau bởi các hệ điều hành khác nhau.

Một khi đƣợc gán vào, các tập tin trong phân khu là sẵn dùng. Các hệ thống tập tin có

thể đƣợc gỡ ra unmount để vô hiệu hóa truy xuất hay để bảo trì.

Những tập tin khác nhau có thể đƣợc cấp phát không gian trên đĩa trong 3 cách:

liên tục, liên kết hay chỉ mục. Cấp phát liên tục có thể gặp phải sự phân m nh ngoài.

Truy xuất trực tiếp là k m hiệu quả với cấp phát liên kết. Cấp phát chỉ mục yêu cầu chi

phí đáng kể cho khối chỉ mục của nó. Các giải thuật này có thể tối ƣu trong nhiều cách.

Không gian liên tục có thể lớn lên thông qua đoạn mở rộng để tăng khả năng linh hoạt

và giảm phân m nh ngoài. Cấp phát chỉ mục có thể đƣợc thực hiện trong việc nhóm

nhiều khối để tăng thông lƣợng và giảm số lƣợng các mục từ chỉ mục đƣợc yêu cầu.

285

Lập chỉ mục trong các nhóm là tƣơng tự nhƣ cấp phát liên tục với các đoạn mở rộng.

Câu hỏi ôn tập

1. Tập tin là gì? Thƣ mục là gì? Tại sao phải quản lý tập tin và thƣ mục?

2. Tập tin có những đặc tính gì? Những đặc tính nào là quan trọng? Tại sao?

3. Nêu các chức năng của tập tin và thƣ mục?

4. So sánh các chiến lƣợc cấp phát đĩa để lƣu trữ nội dung tập tin?

5. Vai tr của bảng thƣ mục gốc trong hệ điều hành DOS?

6. Tập tin chia s là gì?

7. Tổ chức đĩa của MS-DOS và Windows 2000?

8. Phân biệt đĩa luận lý và đĩa vật lý?

9. Tìm hiểu tổ chức bảng thƣ mục gốc của Windows98

10. Quản lý lƣu trữ tập tin trên đĩa của WindowsNT/2000

11. Một số kỹ thuật đƣợc hỗ trợ bởi hệ thống tập tin NTFS

Bài tập

1. Giả sử một đĩa mềm có 2 side, mỗi side có 128 track, mỗi track có 18 sector. Thƣ

mục gốc của đĩa có tối đa là 251 tập tin hoặc thƣ mục , mỗi Entry có kích thƣớc 32

Bytes. Một Cluster = 2 sector. Đĩa sử dụng phƣơng pháp định bằng bảng chỉ mục

mỗi phần tử trong bảng có kích thƣớc 12 bits. Hỏi muốn truy xuất Cluster 10 thì

phải đọc những sector nào?

2. Cho dãy Byte của FAT12 nhƣ sau bắt đầu từ đầu :

240 255 255 0 64 0 9 112 255 255 143 0 255 255 255

Cho biết những phần tử nào của FAT có giá trị đặc biệt, ý nghĩa của phần tử đó.

Nếu sửa lại phần tử 5 là FF0 thì d y Byte của FAT12 này có nội dung nhƣ thế nào ?

3. Biết giá trị dƣới dạng thập phân trong một buffer mỗi phần tử 1 Byte lƣu nội

dung của FAT12 nhƣ sau bắt đầu từ phần tử 0 :

240 255 255 255 79 0 5 240 255 247 255 255

286

Cho biết giá trị của từng phần tử trong FAT dƣới dạng số thập phân

4. Ch p 1 tập tin kích thƣớc là 3220 Bytes lên một đĩa 1.44Mb c n trống nhƣng bị

hỏng ở sector logic 33. Cho biết giá trị từng Byte của Fat thập phân từ Byte 0 đến

Byte 14 .

5. Hiện trạng của FAT12 và RDET mỗi Entry chỉ gồm tên tập tin và Cluster đầu tiên

của một đĩa nhƣ sau:

240 255 255 247 79 0 6 0 0 255 159 0 10 240 255 255 127 255

VD TXT 3 LT DOC 7 THO DAT 8

Cho biết hiện trạng của FAT12 và RDET sau khi xoá tập tin VD.TXT và ch p vào tập

tin BT.CPP có kích thƣớc 1025 Bytes (giả sử 1 Cluster = 1 sector)

6. Một tập tin đƣợc lƣu trên đĩa tại những khối theo thứ tự sau :

20, 32, 34, 39, 52, 63, 75, 29, 37, 38, 47, 49, 56, 68, 79, 81, 92, 106, 157, 159, 160,

162, 163, 267, 269, 271, 277, 278, 279, 380, 381, 482, 489, 490, 499.

Vẽ I_node của tập tin này, giả sử mỗi khối chỉ chứa đƣợc 3 phần tử.

7. Một ổ đĩa C: đƣợc định dạng dƣới dạng FAT16 gồm có 15 cluster. Kích thƣớc của

mỗi cluster là 512 byte, giả sử có bảng FAT sau:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

1 -1 0 5 6 8 7 -1 -1 -1 -1 12 -1 10 0

Thƣ mục gốc bắt đầu tại cluster 0, tại cluster 0 và cluster 9 xem đƣợc các entry nhƣ

sau:

attrib Start cluster

Filename Ext doc Hdh HinhAnh doc pascal D size 800 1200 11 9 4

attrib Start cluster

287

Filename Ext Jpg Hoguom Jpg Halong size 1200 700 3 13

H y vẽ cây thƣ mục và cho biết các số liệu cluster của từng file và thƣ mục?

8. Một ổ đĩa có 17 cluster, kích thƣớc của mỗi cluster là 1024 byte. Giả sử 17 phần tử

đầu của bảng FAT có giá trị cho ở bảng sau:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1 2 3 -1 0 0 13 8 9 -1 0 12 -1 14 16 0 -1

Và 3 entry đầu của Root Dir có giá trị sau:

Filename Ext attrib Start cluster size

music D 11

autoexec bat 6 4032

vidu txt R 7 3018

a) Cho biết các cluster dữ liệu của thƣ mục music, tập tin autoxec.bat và

vidu.txt

b) Cho biết nội dung 17 phần tử đầu bảng FAT và 3 entry đầu của Root dir nếu

tập tin autoexec.bat và thêm vào tập tin boot.ini có kích thƣớc 4318 byte.

9. Một ổ đĩa C: đƣợc đƣợc định dạng dƣới dạng FAT 16 gồm có 15 cluster. Kích

thƣớc của mỗi cluster là 512 byte. Giả sử có cây thƣ mục sau trong ngoặc là kích

thƣớc mới file):

\

Amnhac

Hanoi.cpp (1721)

Hello.cpp(824) )

Ntmien.mp3 (1320)

Tcson.mp3 (1489)

288

Một entry trong bảng thƣ mục chiếm 32 byte. H y lập một phƣơng án lƣu trữ cây

thƣ mục trên bằng cách:

a) Cho biết nội dung 15 phần tử của bảng FAT.

b) Cho biết nội dung 5 thuộc tính: filename, ext, attribute, start cluster, size của

entry trong thƣ mục gốc và thƣ mục Amnhac.

10. Một ổ đĩa C: đƣợc đƣợc định dạng dƣới dạng FAT 16 gồm có 15 cluster. Kích

thƣớc của mỗi cluster là 512 byte. Giả sử có cây thƣ mục sau trong ngoặc là kích

thƣớc mới file):

\

Hanoi.cpp (1421)

PhimAnh

Hello.cpp (1324)

Kkong.avi (900)

007.avi (1789)

Một entry trong bảng thƣ mục chiếm 32 byte. H y lập một phƣơng án lƣu trữ cây

thƣ mục trên bằng cách:

a) Cho biết nội dung 15 phần tử của bảng FAT trong phƣơng án của bạn

b) Cho biết nội dung 5 thuộc tính: filename, ext, attribute, start cluster, size của

289

entry trong thƣ mục gốc và thƣ mục PhimAnh.

TÀI LIỆU TH M KHẢO

[1] Nguyễn Kim Tuấn, Giáo trình Hệ điều hành, Đại học Huế, 2004

290

[2] Nguyễn Ph Trường, Giáo trình Hệ điều hành, Đại học Cần Thơ, 2005

CHƯ NG 5: QUẢN L HỆ THỐNG NHẬP/XUẤT

5.1. MỤC TIÊU

Vai tr của hệ điều hành đối với nhập/xuất trong hệ thống máy tính là quản lý và

điều khiển các thao tác nhập/xuất và các thiết bị nhập/xuất. Trong chƣơng này chúng ta

sẽ tìm hiểu các kiến thức sau:

 Hiểu các cơ sở của phần cứng nhập/xuất.

 Hiểu các dịch vụ nhập/xuất đƣợc cung cấp bởi hệ điều hành.

 Hiểu cách hệ điều hành làm cầu nối giữa giao diện phần cứng và giao diện ứng

dụng.

 Biết các khía cạnh năng lực của nhập/xuất và các nguyên lý thiết kế hệ điều

hành để cải tiến năng lực nhập/xuất.

5.2. CÁC KHÁI NIỆM C BẢN

Điều khiển các thiết bị đƣợc nối kết tới máy tính là mối quan tâm chủ yếu của

ngƣời thiết kế hệ điều hành. Vì các thiết bị nhập/xuất rất khác nhau về chức năng và

tốc độ chuột, đĩa cứng, và CD-ROM nên sự đa dạng về phƣơng pháp là cần thiết để

điều khiển chúng. Các phƣơng pháp này hình thành một hệ thống nhập/xuất con I/O

subsystem của nhân, tách rời phần c n lại của nhân từ sự phức tạp của việc quản lý

các thiết bị nhập/xuất.

Công nghệ thiết bị nhập/xuất thể hiện hai xu hƣớng trái ngƣợc nhau. Xu hƣớng

thứ nh t, chúng ta tăng sự chuẩn hoá phần mềm và giao diện phần cứng. Xu hƣớng này

giúp chúng ta hợp tác những thế hệ thiết bị đƣợc cải tiến vào các máy tính và hệ điều

hành đ có. Xu hƣớng thứ hai, chúng ta tăng sự đa dạng của các thiết bị nhập/xuất.

Thiết bị mới là rất khác với các thiết bị trƣớc đó đ tạo ra nên rất trở ngại để hợp nhất

chúng vào máy tính và hệ điều hành của chúng ta. Trở ngại này đƣợc giải quyết bởi sự

kết hợp kỹ thuật phần cứng và phần mềm. Các thành phần phần cứng nh p/xu t cơ

b n như c ng, bus và bộ điều hi n thiết bị chứa trong một dãy rộng các thiết bị

nh p/xu t Để đóng gói các chi tiết và sự khác biệt của các thiết bị khác nhau, nhân của

291

hệ điều hành đƣợc chỉ dẫn để dùng các modules trình điều khiển thiết bị.

Các trình điều khiển thiết bị device driver hiện diện một giao diện truy xuất

thiết bị đồng nhất tới hệ thống con nhập/xuất, nhƣ các lời gọi hệ thống cung cấp một

giao diện chuẩn giữa ứng dụng và hệ điều hành.

5.3. PHẦN CỨNG NHẬP/XUẤT

Có nhiều cách nhìn khác nhau về phần cứng nhập/xuất. Các kỹ sƣ điện tử thì nhìn

dƣới góc độ là các thiết bị nhƣ IC, dây dẫn, bộ nguồn, motor v.v….Các lập trình viên

thì nhìn chúng dƣới góc độ phần mềm - những lệnh nào thiết bị chấp nhận, chúng sẽ

thực hiện những chức năng nào, và thông báo lỗi của chúng bao gồm những gì, nghĩa

là chúng ta quan tâm đến p trình thiết bị chứ không phải các thiết bị này hoạt động

nhƣ thế nào mặc dù khía cạnh này có liên quan mật thiết với các thao tác bên trong của

chúng. Phần này chúng ta đề c p đến một số hái niệm về phần cứng I/O i n quan đến

hía cạnh p trình.

5.3.1. Thiết ị I/O

Các thiết ị nhập xuầt có thể chia tương đối thành hai loại là thiết ị khối và

thiết ị tuần tự.

Thiết bị hối là thiết bị mà thông tin đƣợc lƣu trữ trong những khối có kích thƣớc

cố định và đƣợc định vị bởi địa chỉ. Kích thƣớc thông thƣờng của một khối là khoảng

từ 128 Bytes đến 1024 Bytes. Đặc điểm của thiết bị khối là chúng có thể đƣợc truy xuất

đọc hoặc ghi từng khối riêng biệt, và chƣơng trình có thể truy xuất một khối bất kỳ

nào đó. Ví dụ đĩa từ là một loại thiết bị khối.

Thiết bị tuần tự, dạng thiết bị này, việc gửi và nhận thông tin dựa trên chuỗi các

bits, không có xác định địa chỉ và không thể thực hiện thao tác tìm kiếm đƣợc. Ví dụ:

màn hình, bàn phím, máy in, card mạng, chuột,… là thiết bị tuần tự.

Việc phân chia các lớp nhƣ trên không hoàn toàn tối ƣu, một số các thiết bị không

phù hợp với hai loại trên. Ví dụ: đồng hồ, bộ nhớ màn hình,... không thực hiện theo cơ

chế tuần tự các bits.

Ngoài ra, người ta còn phân loại các thiết ị I/O dưới một tiêu chuẩn khác:

 Thiết bị tương tác được với con người: dùng để giao tiếp giữa ngƣời và máy.

292

Ví dụ: màn hình, bàn phím, chuột, máy in ...

 Thiết bị tương tác trong hệ thống máy tính: là các thiết bị giao tiếp với nhau.

Ví dụ: đĩa, băng từ, card giao tiếp...

 Thiết bị truyền thồng: nhƣ modem...

Những điểm khác nhau giữa các thiết ị I/O gồm :

 Tốc độ truyền dữ liệu , ví dụ bàn phím : 0.01 KB/s, chuột 0.02 KB/s ...

 Công dụng.

 Đơn vị truyền dữ liệu khối hoặc ký tự .

 Biểu di n dữ liệu, điều này tùy thuộc vào từng thiết bị cụ thể.

 Tình trạng lỗi: nguyên nhân gây ra lỗi, cách mà chúng báo về...

5.3.2. Tổ chức của chức năng I/O

Một thiết bị giao tiếp với một hệ thống máy tính b ng cách g i các tín hiệu qua dây cáp hay th m chí qua hông hí23. Các thiết bị giao tiếp với máy bằng một điểm nối kết cổng-port nhƣ cổng tuần tự. Một hay nhiều thiết bị dùng một tập hợp dây

dẫn, nối kết đƣợc gọi là bus. Bus là một tập hợp các dây dẫn tín hiệu và giao thức đƣợc

định nghĩa chặt chẽ để xác định tập hợp thông điệp có thể đƣợc gởi qua dây. Khi thiết

bị A có một cáp gán vào thiết bị B, thiết bị B có một cáp gán vào thiết bị C và thiết bị

C gán vào một cổng máy tính, sự sắp xếp này đƣợc gọi là chuỗi nối tiếp. Một chuỗi nối

tiếp thƣờng điều hành nhƣ một bus.

Có ba phương pháp để thực hiện I/O ằng phần cứng:

 Thăm dò

 Ng t

 DMA

5.3.2.1. Thăm dò

Giao thức hoàn chỉnh cho việc giao tiếp giữa máy tính và bộ điều khiển rất phức

tạp nhƣng ký hiệu ắt tay handshaking) là đơn giản. Chúng ta giải thích bắt tay bằng

ví dụ sau. Chúng ta giả sử rằng 2 bits đƣợc dùng để hợp tác trong mối quan hệ ngƣời

sản xuất-ngƣời tiêu thụ giữa bộ điều khiển và máy chủ. Bộ điều khiển hiển thị trạng

thái của nó thông qua bit bận busy bit trong thanh ghi trạng thái. Bộ điều khiển đặt bit

23 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, tr.243

293

bận khi nó đang làm việc và xoá bit bận khi nó sẵn sàng nhận lệnh tiếp theo. Máy tính

ra tín hiệu mong muốn bằng bit sẵn sàng nhận lệnh command-ready bit) trong thanh

ghi lệnh. Máy tính thiết lập bit sẵn sàng nhận lệnh khi một lệnh sẵn dùng cho bộ điều

khiển thực thi. Ví dụ, máy tính viết dữ liệu xuất thông qua một cổng, hợp tác với bộ

điều khiển bằng cách bắt tay nhƣ sau:

 Máy tính lặp lại việc đọc bit bận cho tới khi bit này bị xoá

 Máy tính thiết lập bit viết trong thanh ghi lệnh và viết một Byte vào thanh ghi

dữ liệu xuất.

 Máy tính đặt bit sẵn sàng nhận lệnh

 Khi bộ điều khiển nhận thấy rằng bit sẵn sàng nhận lệnh đƣợc đặt, nó đặt bit

bận

 Bộ điều khiển đọc thanh ghi lệnh và thấy lệnh viết. Nó đọc thanh ghi xuất dữ

liệu để lấy một Byte và thực hiện nhập/xuất tới thiết bị.

 Bộ điều khiển xoá bit sẵn sàng nhận lệnh, xoá bit lỗi trong thanh ghi trạng thái

để hiển thị rằng thiết bị nhập/xuất thành công, và xoá bit bận để hiển thị rằng

nó đƣợc kết thúc.

Thao tác thăm d cơ bản là đủ. Nhƣng thăm d trở nên không đủ khi đƣợc lặp lại

nhiều lần, hiếm khi tìm một thiết bị sẵn sàng phục vụ trong lần thăm d đầu tiên, trong

khi cần dùng CPU để xử lý cho các công việc khác. Trong trƣờng hợp nhƣ thế, sẽ hiệu

quả hơn để sắp xếp bộ điều khiển phần cứng thông báo cho CPU khi nào thiết bị sẵn

sàng phục vụ hơn là yêu cầu CPU lặp lại việc thăm d cho việc hoàn thành nhập/xuất.

Cơ chế phần cứng cho ph p một thiết bị thông báo tới CPU đƣợc gọi là ngắt

(interrupt).

294

5.3.2.2. Ngắt

Hình 5.1. Chu ỳ nh p/xu t hướng ng t24

Ngắt là một tín hiệu đƣợc d ng yêu cầu ngắt interrup-request line) trong máy

tính gởi tới bộ xử lý yêu cầu chú ý ngay lập tức tới nó. Hình 5.2. mô tả chuỗi các sự

kiện trong quá trình xảy ra một ngắt: bộ xử lý dừng công việc đang làm và chạy một

chƣơng trình phụ có trong bộ nhớ gọi là chƣơng trình phục vụ ngắt Interrupt handler

hoặc Interrupt service routine . Sau khi thực hiện xong, bộ xử lý quay lại đúng điểm

24 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.244

295

mà nó tạm ngừng lúc nảy để tiếp tiếp tục thực hiện công việc của mình.

Hình 5.2. Các bước thực hiện hi c một ng t x y ra

Phƣơng pháp vào/ra theo ngắt mang tính không đồng bộ vì các ngoại vi đƣợc

phục vụ theo yêu cầu của chúng không theo trình tự định trƣớc . Nhờ đó ngắt là một

xử lý rất linh hoạt và đƣợc dùng trong nhiều trƣờng hợp đặc biệt nhƣ: trong hệ thống

báo động với các cảm biến, ngắt mạch, báo mất nguồn nuôi trong PC, trong hệ thống

console bàn phím, màn hình có cách thức truy cập ngẫu nhiên theo thời gian và

không gian, các thông báo lỗi nghiêm trọng về phần cứng...

Tuy nhiên, ngắt cũng có những hạn chế nhƣ việc phát hiện lỗi trong phần mềm

phức tạp hơn ngắt phần cứng, phải mất một thời gian nhất định để cất giữ các thanh ghi

và cờ trạng thái bằng các lệnh PUSH trƣớc khi phục vụ ngắt.

5.3.2.3 Truy xuất ộ nhớ trực tiếp Direct Memory ccess-DMA)

Đối với một thiết bị thực hiện việc truyền lớn nhƣ ổ đĩa, nó sẽ l ng phí khi dùng

bộ vi xử lý để theo dõi các bit trạng thái và đẩy dữ liệu vào thanh ghi điều khiển từng

Byte một. Nhiều máy tính muốn giảm đi gánh nặng cho CPU bằng cách chuyển một số

công việc này tới một bộ điều khiển có mục đích đặc biệt đƣợc gọi là bộ điều khiển

296

truy xuất bộ nhớ trực tiếp.

Hình 5.3. Các bước trong việc truyền dữ iệu của DMA25

Để khởi tạo một thao tác chuyển dữ liệu theo kiểu DMA, máy tính viết một khối

lệnh DMA vào bộ nhớ. Khối này chứa một con trỏ chỉ tới nguồn chuyển, một con trỏ

chỉ tới đích chuyển và đếm số lƣợng Byte đƣợc chuyển. CPU viết địa chỉ của khối lệnh

này tới bộ điều khiển DMA, sau đó CPU tiếp tục làm công việc khác. Bộ điều khiển

DMA xử lý để điều hành bus bộ nhớ trực tiếp, đặt các địa chỉ trên bus để thực hiện việc

chuyển mà không có sự trợ giúp của CPU. Một bộ điều khiển DMA đơn giản là một

thành phần chuẩn trong PCs, và bảng nhập/xuất bus chính để PC thƣờng chứa phần

cứng DMA tốc độ cao.

5.3.3. Bộ điều khiển thiết ị (Device Driver)

Một đơn vị bị nhập xuất thƣờng đƣợc chia làm hai thành phần chính là thành

phần cơ và thành phần điện t .

25 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.245

297

 Thành phần cơ: là bản thân thiết bị.

 Thành phần điện t : à bộ ph n điều hi n thiết bị hay bộ tương thích, trong

các máy vi tính thƣờng đƣợc gọi là card giao tiếp.

Một bộ phận điều khiển thƣờng có bộ phận kết nối trên chúng để có thể gắn thiết

bị lên đó. Một bộ phận điều khiển có thể quản lý đƣợc hai, bốn hay thậm chí tám thiết

bị khác nhau. Nếu giao tiếp giữa thiết bị và bộ phận điều khiển là các chuẩn nhƣ ANSI,

IEEE hay ISO thì nhà sản xuất thiết bị và bộ điều khiển phải tuân theo chuẩn đó, ví dụ :

bộ điều khiển đĩa đƣợc theo chuẩn giao tiếp của IBM.

Giao tiếp giữa bộ điều khiển và thiết bị là giao tiếp ở mức thấp.

Hình 5.4. Sự ết nối giữa CPU, bộ nhớ, bộ điều hi n với thiết bị nh p/xu t

Chức năng của bộ điều khiển là giao tiếp với hệ điều hành vì hệ điều hành không

thể truy xuất trực tiếp với thiết bị. Việc thông tin thông qua hệ thống đƣờng truyền gọi

là bus.

Công việc của bộ điều khiển là chuyển đổi d y các bit tuần tự trong một khối các

Byte và thực hiện sửa chửa nếu cần thiết. Thông thƣờng khối các Byte đƣợc tổ chức

thành từng bit và đặt trong buffer của bộ điều khiển. Sau khi thực hiện kiểm tra tổng

thể nội dung của buffer sẽ đƣợc chuyển vào bộ nhớ chính.

Ví dụ: bộ điều khiển cho màn hình đọc các Byte ký tự trong bộ nhớ và tổ chức

các tín hiệu để điều khiển các tia của CRT để xuất trên màn ảnh bằng cách qu t các tia

dọc và ngang. Nếu không có bộ điều khiển, lập trình viên phải tạo thêm chƣơng

298

trình điều khiển tín hiệu analog cho đèn hình. Với bộ điều khiển, hệ điều hành chỉ cần

khởi động chúng với một số tham số nhƣ số ký tự trên một d ng, số d ng trên màn

hình và bộ điều khiển sẽ thực hiện điều khiển các tia.

Mỗi bộ điều khiển có một số thanh ghi để liên lạc với CPU. Trên một số máy

tính, các thanh ghi này là một phần của bộ nhớ chính tại một địa chỉ xác định gọi là ánh

xạ bộ nhớ nhập/xuất. Hệ máy PC dành ra một vùng địa chỉ đặc biệt gọi là địa chỉ nhập

xuất và trong đó đƣợc chia làm nhiều đoạn, mỗi đoạn cho một loại thiết bị nhƣ sau :

Bộ điều khiển nhập/xuất Địa chỉ nhập/xuất Vectơ ngắt

Đồng hồ 040 - 043 8

Bàn phím 060 - 063 9

RS232 phụ 2F8 - 2FF 11

Đĩa cứng 320 - 32F 13

Máy in 378 - 37F 15

Màn hình mono 380 - 3BF -

Màn hình màu 3D0 - 3DF -

Đĩa mềm 3F0 - 3F7 14

RS232 chính 3F8 - 3FF 12

Bản 5.1. Địa chỉ nh p xu t của thiết bị trong máy tính PC

Hệ điều hành thực hiện nhập/xuất bằng cách ghi lệnh lên các thanh ghi của

bộ điều khiển. Ví dụ: bộ điều khiển đĩa mềm của IBM PC chấp nhận 15 lệnh khác nhau

nhƣ: READ, WRITE, SEEK, FORMAT, RECALIBRATE, một số lệnh có tham số và

các tham số cũng đƣợc nạp vào thanh ghi. Khi một lệnh đ đƣợc chấp nhận, CPU sẽ rời

bộ điều khiển để thực hiện công việc khác. Sau khi thực hiện xong, bộ điều khiển phát

sinh một ngắt để báo hiệu cho CPU biết và đến lấy kết quả đƣợc lƣu giữ trong các

thanh ghi.

5.4. GI O DIỆN NHẬP/XUẤT ỨNG DỤNG

Trong phần này, chúng ta thảo luận các kỹ thuật cấu trúc và các giao diện cho hệ

điều hành cho ph p các thiết bị nhập/xuất đƣợc đối xử trong cách chuẩn, không đổi. Ví

299

dụ, chúng ta giải thích một ứng dụng có thể mở một tập tin trên đĩa mà không biết loại

đĩa đó là gì và các đĩa mới và các thiết bị khác có thể đƣợc thêm tới máy tính nhƣ thế

nào mà không làm hệ điều hành bị gián đoạn.

Nhƣ những vấn đề công nghệ phần mềm phức tạp khác, tiếp cận ở đây liên quan

đến tính trừu tƣợng, bao gói và phân tầng phần mềm. Đặc biệt, chúng ta có thể trừu

tƣợng sự khác nhau chi tiết trong các thiết bị nhập/xuất bằng cách xác định một vài loại

thông dụng. Mỗi loại thông dụng đƣợc truy xuất thông qua một tập hợp hàm chuẩn-

một giao diện. Sự khác biệt này đƣợc bao gói trong module nhân đƣợc gọi là trình điều

hi n thiết bị device driver đƣợc qui định bên trong đƣợc áp đặt cho mỗi thiết bị,

nhƣng đƣợc nhập vào một trong những giao diện chuẩn. Hình 5.5 hiển thị cách các

thành phần liên quan nhập/xuất của nhân đƣợc cấu trúc trong các tầng phần mềm.

26 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.246

300

Hình 5.5 C u trúc của nhân nh p/xu t26

Mục đích của tầng chứa trình điều hi n thiết bị à che đ y sự hác biệt giữa các

bộ điều hi n thiết bị từ hệ con nh p/xu t của nhân, nhiều lời gọi hệ thống nhập/xuất

đóng gói các hành vi của thiết bị trong một vài lớp phát sinh để che đậy sự khác biệt từ

các ứng dụng. Thực hiện hệ thống con nhập/xuất độc lập với phần cứng đơn giản hóa

công việc của ngƣời phát triển hệ điều hành. Nó cũng đem lại sự thuận lợi cho các nhà

sản xuất phần cứng. Họ thiết kế các thiết bị mới tƣơng thích với giao diện bộ điều

khiển chủ đ có nhƣ SCSI-2 hoặc họ viết các trình điều hi n thiết bị đ giao tiếp

phần cứng mới đối với các hệ điều hành ph biến. Do đó, các thiết bị ngoại vi mới có

thể đƣợc gán tới một máy tính mà không phải chờ nhà cung cấp hệ điều hành phát triển

thêm mã.

Tuy nhiên, đối với một số nhà sản xuất thiết bị phần cứng, mỗi loại hệ điều hành

có chuẩn riêng của nó cho giao diện trình điều khiển thiết bị. Một thiết bị đƣợc cho có

thể mang nhiều trình điều khiển-thí dụ, trình điều khiển cho MS-DOS, Windows 95/98,

Windows NT/2000 và Solaris. Các thiết bị khác nhau trong nhiều hƣớng nhƣ đƣợc hiển

thị trong Bảng 5.2.

27 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.246

301

Bản 5 2 Các đ c đi m của các thiết bị nh p/xu t27

 Phương thức chuyển dữ liệu dòng ký tự hay khối Character/ lock): các

thiết bị d ng ký tự chuyển từng Byte một, ngƣợc lại một thiết bị khối chuyển

đơn vị là khối Byte.

 Truy xuất tuần tự hay ngẫu nhiên Sequential/random): thiết bị tuần tự

chuyển dữ liệu theo một thứ tự cố định đƣợc định nghĩa bởi thiết bị, ngƣợc lại

ngƣời dùng của một thiết bị truy xuất ngẫu nhiên có thể chỉ dẫn thiết bị để tìm

bất cứ vị trí lƣu trữ dữ liệu sẵn có.

 Đồng ộ và ất đồng ộ Synchronous/áynchronous): một thiết bị đồng bộ

là một thiết bị thực hiện việc chuyển dữ liệu với số lần đáp ứng có thể đoán

trƣớc. Một thiết bị bất đồng bộ hiển thị số lần đáp ứng không đều đặn hay

không thể đoán trƣớc.

 Có thể chia s hay tận hiến dedicated/shara le): một thiết bị có thể chia s

đƣợc dùng đồng hành bởi nhiều quá trình hay luồng; một thiết bị tận hiến thì

không thể.

 Tốc độ thao tác device speed): tốc độ thiết bị trải dài từ một vài Byte trên

giây tới một vài Gigabyte trên giây.

 Hướng nhập/xuất I/O direction): Đọc-viết, chỉ đọc, hay chỉ viết: một số

thiết bị thực hiện cả hai nhập/xuất, nhƣng một số thiết bị khác hỗ trợ chỉ một

hƣớng dữ liệu.

5.5. HỆ THỐNG CON NHẬP/XUẤT CỦ NH N KERNEL I/O SUBSYTEM)

Nhân cung cấp nhiều dịch vụ liên quan đến nhập/xuất. Một vài dịch vụ: định thời

biểu, vùng đệm buffering , vùng lƣu trữ cache , đặt trƣớc thiết bị, quản lý lỗi,…đƣợc

cung cấp bởi hệ thống con nhập/xuất của nhân và xây dựng trên phần cứng và cơ sở hạ

tầng trình điều khiển thiết bị.

5.5.1. Định thời iểu nhập/xuất

Định thời biểu cho tập hợp các yêu cầu nhập/xuất có nghĩa là xác định một thứ tự

tốt để thực thi chúng. Thứ tự các ứng dụng phát ra lời gọi hệ thống rất hiếm khi là một

chọn lựa tốt nhất. Định thời biểu có thể cải tiến năng toàn bộ lực hệ thống, có thể chia

s truy xuất thiết bị đồng đều giữa các quá trình và có thể giảm thời gian chờ đợitrung

302

bình cho nhập/xuất hoàn thành.

Ngƣời phát triển hệ điều hành cài đặt bộ định thời biểu bằng cách duy trì một

hàng đợi cho mỗi thiết bị. Khi một ứng dụng phát ra một lời gọi hệ thống nhập/xuất

nghẽn, yêu cầu đƣợc đặt vào hàng đợi cho thiết bị đó. Bộ định thời biểu nhập/xuất sắp

xếp lại thứ tự của hàng đợi để cải tiến toàn bộ tính hiệu quả hệ thống và thời gian đáp

ứng trung bình dựa theo kinh nghiệm bởi ứng dụng. Hệ điều hành cũng cố gắng giữ

bình đẳng để mà không ứng dụng nào nhận đƣợc dịch vụ nghèo nàn hay nó cho dịch vụ

ƣu tiên đối với các yêu cầu trì ho n nhạy cảm. Thí dụ, các yêu cầu từ hệ thống con bộ

nhớ ảo có thể lấy độ ƣu tiên qua các yêu cầu của ứng dụng.

Một cách mà hệ thống con nhập/xuất cải tiến tính hiệu quả của máy tính là bằng

cách định thời biểu các hoạt động nhập/xuất. Một cách khác là dùng không gian lƣu trữ

trong bộ nhớ chính hay trên đĩa, với các kỹ thuật đƣợc gọi là vùng đệm, vùng lƣu trữ

và vùng chứa.

5.5.2. Vùng đệm

Vùng đệm là một vùng bộ nhớ lƣu trữ dữ liệu trong khi chúng đƣợc chuyển giữa

hai thiết bị hay giữa thiết bị và ứng dụng. Vùng đệm đƣợc thực hiện với 3 lý do.

 Thứ nh t là đối phó với việc không tƣơng thích về tốc độ giữa ngƣời sản xuất

và ngƣời tiêu dùng của d ng dữ liệu.

 Thứ hai cho việc sử dụng vùng là làm thích ứng giữa các thiết bị có kích

thƣớc truyền dữ liệu khác nhau.

 Thứ ba cho việc dùng vùng đệm là hỗ trợ ngữ nghĩa sao ch p cho nhập/xuất

ứng dụng.

5.5.3. Vùng lưu trữ

Vùng lƣu trữ cache là một vùng bộ nhớ nhanh quản lý các bản sao dữ liệu. Truy

xuất tới một bản sao đƣợc lƣu trữ hiệu quả hơn truy xuất tới bản gốc. Ví dụ, các chỉ thị

của quá trình hiện đang chạy đƣợc lƣu trên đĩa, đƣợc lƣu trữ trong bộ nhớ vật lý và

đƣợc sao ch p một lần nữa trong vùng lƣu trữ phụ và chính. Sự khác nhau giữa vùng

đệm là vùng lƣu trữ là vùng đệm có thể giữ chỉ bản sao của thành phần dữ liệu đ có,

ngƣợc lại một vùng lƣu trữ giữ vừa đủ một bản sao trên thiết bị lƣu trữ nhanh hơn của

một thành phần nằm ở một nơi nào khác.Vùng lƣu trữ và vùng đệm có chức năng khác

303

nhau nhƣng đôi khi một vùng bộ nhớ có thể đƣợc dùng cho cả hai mục đích.

5.5.4. Vùng chứa

Một vùng chứa spool là một vùng đệm giữ dữ liệu xuất cho một thiết bị nhƣ

máy in mà không thể chấp nhận các d ng dữ liệu đan xen nhau. Mặc dù một máy in có

thể phục vụ chỉ một công việc tại một thời điểm, nhƣng nhiều ứng dụng muốn in đồng

thời mà không có dữ liệu xuất của chúng đan xen với nhau. Hệ điều hành giải quyết

vấn đề này bằng cách ngăn chặn tất cả dữ liệu xuất tới máy in. Dữ liệu xuất của mỗi

ứng dụng đƣợc chứa trong một tập tin riêng. Khi một ứng dụng kết thúc việc in, hệ

thống vùng chứa xếp tập tin chứa tƣơng ứng cho dữ liệu xuất tới máy in. Hệ thống

vùng chứa ch p các tập tin đƣợc xếp hàng tới máy in một tập tin tại một thời điểm.

Trong một hệ điều hành, vùng chứa đƣợc quản lý bởi một quá trình hệ thống chạy ở

chế độ nền. Trong một số hệ điều hành khác, nó đƣợc quản lý bởi luồng nhân. Trong

mỗi trƣờng hợp, hệ điều hành cung cấp một giao diện điều khiển cho ph p ngƣời dùng

và ngƣời quản trị hệ thống hiển thị hàng đợi để xóa các công việc không mong muốn

trƣớc khi các công việc đó in, để tạm dừng việc in trong khi máy in đƣợc phục vụ,..

5.5.5. Quản lý lỗi

Một hệ điều hành sử dụng bộ nhớ bảo vệ có thể chống lại nhiều lỗi phần cứng và

ứng dụng vì thế một lỗi toàn hệ thống không là kết quả của mỗi sự trục trặc cơ học thứ

yếu. Các thiết bị và truyền nhập/xuất có thể bị lỗi trong nhiều cách, có thể là các lý do

tạm thời nhƣ mạng trở nên quá tải, hay các lý do thƣờng xuyên nhƣ trình điều khiển đĩa

bị lỗi. Các hệ điều hành thƣờng trả giá cho tính hiệu quả vì các lỗi tạm thời.

Ví dụ, lỗi đọc đĩa read dẫn đến cố gắng làm lại read và lỗi gởi dữ liệu trên

mạng send dẫn tới việc gởi lại resend nếu giao thức đƣợc xác định rõ. Tuy nhiên,

nếu một thành phần quan trọng bị lỗi thƣờng xuyên thì hệ điều hành không nghĩ đến

việc phục hồi.

Nhƣ một qui tắc thông thƣờng, một lời gọi hệ thống nhập/xuất trả về 1 bit của

thông tin về trạng thái của lời gọi, biểu thị thành công hay thất bại. Trong hệ điều hành

UNIX, một biến nguyên có tên errno đƣợc dùng để trả về một m lỗi-một trong 100

giá trị-hiển thị tính tự nhiên của lỗi ví dụ: đối số vƣợt quá giới hạn, lỗi con trỏ, tập tin

không thể mở,.. . Ngƣợc lại, một số phần cứng cung cấp thông tin lỗi đƣợc mô tả chi

tiết mặc dù nhiều hệ điều hành hiện tại không đƣợc thiết kế để truyền đạt thông tin này

304

tới ứng dụng.

5.5.6. Cấu tr c dữ liệu nhân

Nhân cần giữ thông tin trạng thái về việc dùng các thành phần nhập/xuất. Nó thực

hiện nhƣ thế thông qua một d y các cấu trúc dữ liệu trong nhân nhƣ bảng tập tin đang

mở. Nhân dùng nhiều cấu trúc tƣơng tự để ghi vết các nối kết mạng, giao tiếp thiết bị

dạng ký tự và các hoạt động nhập/xuất khác.

Tóm lại, hệ thống con nhập/xuất điều phối tập hợp dịch vụ mở rộng sẵn có đối

với ứng dụng và những phần khác của nhân. Hệ thống con nhập/xuất điều khiển:

 Quản lý không gian tên cho các tập tin và các thiết bị

 Điều khiển truy xuất tới các tập tin và các thiết bị

 Điều khiển hoạt động ví dụ, một modem không thể tìm seek

 Cấp phát không gian hệ thống tập tin

 Cấp phát thiết bị

 Vùng đệm, vùng lƣu trữ và vùng chứa

 Định thời biểu nhập/xuất

 Điều khiển trạng thái thiết bị, quản lý lỗi, và phục hồi lỗi

 Cấu hình và khởi tạo trình điều khiển thiết bị

Cấp cao hơn của hệ thống con nhập/xuất truy xuất thiết bị qua giao diện đồng

nhất đƣợc cung cấp bởi các trình điều khiển thiết bị.

5.6. CHUYỂN NHẬP/XUẤT TỚI HOẠT ĐỘNG PHẦN CỨNG

Phần trƣớc chúng ta mô tả việc bắt tay giữa một trình điều khiển thiết bị và bộ

điều khiển thiết bị, nhƣng chúng ta không giải thích cách hệ điều hành nối kết yêu cầu

ứng dụng tới tập hợp dây mạng hay một sector đĩa xác định nhƣ thế nào.

Ví dụ: Một ứng dụng muốn đọc một tập tin từ đĩa. Nó tham chiếu tới dữ liệu bằng

tên tập tin. Trong một đĩa, hệ thống tập tin ánh xạ từ tên tập tin thông qua các thƣ mục

hệ thống tập tin để lấy không gian cấp phát của tập tin.

Các hệ điều hành hiện đại đạt đƣợc khả năng linh hoạt cao từ nhiều giai đoạn của

bảng tra cứu trong đƣờng dẫn giữa yêu cầu và bộ điều khiển thiết bị vật lý. Các cơ chế

truyền yêu cầu giữa ứng dụng và trình điều khiển là phổ biến. Do đó, chúng ta có thể

giới thiệu các thiết bị mới và trình điều khiển vào máy tính mà không biên dịch lại

nhân. Thật vậy, một số hệ điều hành có khả năng nạp trình điều khiển thiết bị theo yêu

305

cầu. Tại thời điểm khởi động, hệ thống đầu tiên thăm d các bus phần cứng để xác định

thiết bị nào hiện diện và sau đó hệ thống nạp các trình điều khiển cần thiết ngay lập tức

hay khi đƣợc yêu cầu bởi một yêu cầu nhập/xuất đầu tiên.

Bây giờ chúng ta mô tả chu trình sống điển hình của một yêu cầu đọc bị nghẽn,

nhƣ trong Hình 5.6. Hình này đề nghị rằng một thao tác nhập/xuất yêu cầu nhiều bƣớc

và tiêu tốn số lƣợng lớn chu kỳ CPU.

1) Một quá trình phát ra một lời gọi hệ thống read tới bộ mô tả tập tin đ đƣợc

mở trƣớc đó.

2) M lời gọi hệ thống trong nhân kiểm tra tính đúng đắn của các tham số. Trong

trƣờng hợp nhập, nếu dữ liệu đ có sẵn trong vùng đệm thì dữ liệu đƣợc trả về

tới quá trình và yêu cầu nhập/xuất đƣợc hoàn thành.

3) Ngƣợc lại, nhập/xuất vật lý cần đƣợc thực hiện để mà quá trình đƣợc xóa từ

hàng đợi thực thi và đƣợc đặt vào hàng đợi chờ thiết bị, và yêu cầu nhập/xuất

đƣợc lập thời biểu. Cuối cùng, hệ con nhập/xuất gởi yêu cầu tới trình điều khiển

thiết bị. Phụ thuộc vào hệ điều hành, yêu cầu đƣợc gởi bằng lời gọi thủ tục con

hay bằng thông điệp trong nhân.

4) Trình điều khiển thiết bị cấp phát vùng đệm nhân để nhận dữ liệu và lập thời

biểu nhập/xuất. Cuối cùng, trình điều khiển gởi lệnh tới bộ điều khiển thiết bị

bằng cách viết vào thanh ghi điều khiển của thiết bị.

5) Trình điều khiển thiết bị thao tác trên phần cứng thiết bị để thực hiện truyền

dữ liệu.

6) Trình điều khiển có thể thăm d trạng thái và dữ liệu hay thiết lập truyền DMA

vào bộ nhớ nhân. Chúng ta thừa nhận rằng truyền đƣợc quản lý bởi bộ điều

khiển DMA sinh ra một ngắt khi việc truyền hoàn thành.

7) Bộ quản lý ngắt tƣơng ứng nhận ngắt bằng bằng vector ngắt, lƣu bất cứ dữ liệu

cần thiết, báo hiệu trình điều khiển thiết bị và trả về từ ngắt.

8) Trình điều khiển thiết bị nhận tín hiệu, xác định yêu cầu nhập/xuất hoàn thành,

xác định trạng thái yêu cầu và báo hiệu cho hệ con nhập/xuất nhân rằng yêu cầu

đ hoàn thành.

9) Nhân truyền dữ liệu hay trả về m tới không gian địa chỉ của quá trình đƣợc yêu

cầu và di chuyển quá trình từ hàng đợi chờ tới hàng đợi sẵn sàng. Di chuyển

306

quá trình tới hàng đợi sẵn sàng không làm nghẽn quá trình. Khi bộ định thời

biểu gán quá trình tới CPU, quá trình tiếp tục thực thi tại thời điểm hoàn thành

của lời gọi hệ thống.

28 Nguy n Phú Trƣờng, Giáo trình hệ điều hành, ĐH Cần Thơ, 2005, Tr.251

307

Hình 5.6. Chu trình sống của y u cầu nh p/xu t28

5.7. N NG LỰC

Nhập/xuất là một yếu tố quan trọng trong năng lực hệ thống. Nó đặt nhiều yêu

cầu trên CPU để thực thi m trình điều khiển thiết bị và định thời biểu quá trình công

bằng và hiệu quả khi các quá trình này nghẽn và không nghẽn. Chuyển đổi ngữ cảnh

chú trọng đến CPU và vùng lƣu trữ phần cứng. Nhập/xuất cũng hiển thị tính không

hiệu quả trong các cơ chế quản lý ngắt trong nhân, và nhập/xuất tải xuống bus bộ nhớ

trong suốt thời gian sao ch p giữa vùng đệm nhân và không gian dữ liệu ứng dụng.

Ch p một cách hợp lý tất cả yêu cầu này là một trong những quan tâm chính của kiến

trúc máy tính.

Mặc dù các máy tính hiện đại có thể quản lý hàng ngàn ngắt trên giây, quản lý

ngắt là một công việc tƣơng đối đắt: mỗi ngắt gây cho hệ thống thực hiện một thay đổi

trạng thái, để thực thi bộ quản lý ngắt và sau đó phục hồi trạng thái. Nhập/xuất đƣợc

lập trình có thể hiệu quả hơn nhập/xuất hƣớng ngắt nếu số chu kỳ tiêu tốn cho việc chờ

đợi bận là không quá mức. Hoàn thành một thao tác nhập/xuất không nghẽn một quá

trình dẫn đến toàn bộ chi phí của việc chuyển đổi ngữ cảnh.

Có nhiều nguyên tắc để cải tiến tính hiệu quả của nhập/xuất:

 Cắt giảm số lƣợng chuyển ngữ cảnh

 Cắt giảm số lần dữ liệu phải đƣợc ch p vào bộ nhớ trong khi truyền giữa

thiết bị và ứng dụng.

 Cắt giảm tần số xuất hiện ngắt bằng cách dùng sự truyền lớn, bộ điều khiển

thông tin và vùng chứa nếu chờ đợi bận có thể là nhỏ nhất .

 Gia tăng tính đồng hành dùng các bộ điều khiển tri thức DMA hay các kênh

để giảm gánh nặng ch p dữ liệu đơn giản từ CPU.

 Di chuyển các hàm xử lý cơ bản vào phần cứng, để cho ph p họat động của

chúng trong các bộ điều khiển thiết bị đồng hành với các thao tác CPU và

bus.

 Cân bằng CPU, hệ con bộ nhớ, bus và năng lực nhập/xuất vì quá tải trong

một vùng bất kỳ sẽ gây rảnh rỗi trong vùng khác.

Ở đây các chức năng nhập/xuất nên đƣợc cài đặt: trong phần cứng thiết bị, trong

trình điều khiển thiết bị hay trong phần mềm ứng dụng? Chúng ta quan sát tiến trình

308

đƣợc mô tả trong Hình 5.7.

Hình 5.7. Tiến trình mô t chức năng thiết bị

Khởi đầu, chúng ta cài đặt giải thuật nhập/xuất thử nghiệm tại cấp ứng dụng vì

m ứng dụng là linh hoạt và những lỗi ứng dụng là chƣa chắc gây ra sự sụp đổ hệ

thống. Ngoài ra, bằng phát triển m tại cấp ứng dụng, chúng ta tránh yêu cầu khởi động

hay nạp lại trình điều khiển thiết bị sau mọi thay đổi tới m .

Tuy nhiên, cài đặt cấp ứng dụng có thể không đủ vì chi phí chuyển ngữ cảnh và vì

ứng dụng không thể lấy lợi điểm của những cấu trúc dữ liệu nhân bên trong và chức

năng nhân nhƣ truyền thông điệp hữu hiệu trong nhân, luồng và khóa .

Khi một giải thuật cấp ứng dụng chứng minh tính giá trị của nó, chúng ta có thể

cài đặt lại nó trong nhân. Điều này có thể cải tiến năng lực nhƣng nỗ lực phát triển có

thử thách nhiều hơn vì nhân hệ điều hành lớn, phần mềm hệ thống phức tạp. Ngoài ra,

việc cài đặt trong nhân phải đƣợc gỡ rối toàn bộ để tránh hƣ hỏng dữ liệu và sụp đổ hệ

thống.

Năng lực cao nhất có thể đạt đƣợc bởi cài đặt chuyên dụng trong phần cứng,

309

trong thiết bị hay trong bộ điều khiển. Sự bất lợi của việc cài đặt phần cứng gồm khó

khăn và chi phí của việc tạo những cải tiến xa hơn hay sửa lỗi, thời gian phát triển tăng

và khả năng linh hoạt giảm.

5.8. TÓM TẮT

Các thành phần phần cứng cơ bản đƣợc nạp vào nhập/xuất là các bus, các bộ điều

khiển thiết bị, và chính các thiết bị. Công việc chuyển dữ liệu giữa thiết bị và bộ nhớ

chính đƣợc thực hiện bởi CPU khi nhập/xuất đƣợc lập trình, hay đƣợc chuyển tải tới bộ

điều khiển DMA. Module nhân điều khiển một thiết bị là một trình điều khiển thiết bị.

Giao diện lời gọi hệ thống cung cấp tới ứng dụng đƣợc thiết kế để quản lý nhiều chủng

loại cơ bản của phần cứng, sockets mạng và bộ đếm thời gian đến đƣợc lập trình.

Hệ con nhập/xuất của nhân cung cấp nhiều dịch vụ. Các dịch vụ này là định thời

biểu nhập/xuất, vùng đệm, vùng chứa, quản lý lỗi và đặt trƣớc thiết bị. Một dịch vụ

khác là dịch tên, để tạo nối kết giữa các thiết bị phần cứng và tên tập tin tƣợng trƣng

đƣợc dùng bởi ứng dụng. Nó liên quan nhiều cấp ánh xạ mà dịch từ tên chuỗi ký tự tới

một trình điều khiển thiết bị xác định và địa chỉ thiết bị và sau đó tới địa chỉ vật lý của

cổng nhập/xuất hay bộ điều khiển bus

Các lời gọi hệ thống nhập/xuất tính chi phí theo thuật ngữ tiêu tốn CPU vì nhiều

lớp phần mềm giữa thiết bị vật lý và ứng dụng. Các lớp này ngụ ý chi phí chuyển ngữ

cảnh để đi qua phạm vi bảo vệ của nhân, của tín hiệu và bộ quản lý ngắt để phục vụ các

thiết bị nhập/xuất, và của tải trên CPU và hệ thống bộ nhớ để ch p dữ liệu giữa vùng

310

đệm nhân và không gian ứng dụng.

Câu hỏi ôn tập

1. Tổ chức của hệ thống quản lý I/O nhƣ thế nào ?

2. Có bao nhiêu loại thiết bị I/O? Với mỗi loại cho ví dụ cụ thể.

3. Vai tr của bộ điều khiển thiết bị là gì?

4. Cơ chế hoạt động DMA nhƣ thế nào?

5. Có thể thực hiện I/O mà không sử dụng điều khiển thiết bị không? Tại

sao?

Câu hỏi trắc nghiệm

1. t ốn quản lý I/O của u n l :

a. Một cơ chế trên mọi thiết bị tin học c. Bàn phím

b. Một phần của hệ điều hành d. Máy in

2. t ốn quản lý I/O của một u n bao ồm :

a. Phần cứng I/O và phần mềm I/O c. Kiểm soát ngắt

b. DMA d. a, b, c đều sai.

3. DMA l v ết tắt của :

a. Direct Management Access c. Direct Memory Access

b. Direct Memory Application d. Direct Mainboard Access

TÀI LIỆU TH M KHẢO

[1] Nguyễn Kim Tuấn, Giáo trình Hệ điều hành, Đại học Huế, 2004.

311

[2] Nguyễn Ph Trường, Giáo trình Hệ điều hành, Đại học Cần Thơ, 2005.

TÀI LIỆU TH M KHẢO

[1] Trần Hạnh Nhi, Giáo trình hệ điều hành nâng cao, Đại học Khoa học Tự

nhiên TP.HCM, 2004.

[2] [Lê Khắc Nhiên n, Hoàng Kiếm], Giáo trình Nh p môn hệ điều hành, Đại

học Khoa học Tự nhiên, TP.HCM 2004.

[3] Nguyễn Kim Tuấn, Giáo trình Hệ điều hành, Đại học Huế, 2004.

[4] Nguyễn Ph Trường, Giáo trình Hệ điều hành, Đại học Cần Thơ, 2005.

[5] Jean Bacon & Tim Harris, Operating Systems, Addison-Wesley, 2003.

[6] Silberschatz, Galvin, Gagne, Operating System Concepts, John Wiley & Sons,

312

2003.