P. 1
Bai giang hdh

Bai giang hdh

|Views: 84|Likes:
Được xuất bản bởingocduy1604

More info:

Published by: ngocduy1604 on Dec 23, 2010
Bản quyền:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as RTF, PDF, TXT or read online from Scribd
See more
See less

12/02/2012

pdf

text

original

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG ---------------------------TỪ MINH PHƯƠNG

BÀI GIẢNG

Hệ ñiều hành

Hà nội 2009

LỜI NÓI ðẦU

Hệ ñiều hành là thành phần quan trọng trong hệ thống máy tính. Nắm vững kiến thức về hệ ñiều hành là cơ sở cho việc hiểu biết sâu sắc hệ thống máy tính nói chung. Chính vì vậy, kiến thức về hệ ñiều hành là phần kiến thức bắt buộc ñối với chuyên gia về công nghệ thông tin và các ngành liên quan. Môn học Hệ ñiều hành là môn học cơ sở trong chương trình ñào tạo ñại học, cao ñẳng ngành công nghệ thông tin. Kiến thức liên quan tới hệ ñiều hành có thể ñược cung cấp từ ba khía cạnh. Thứ nhất, ñó là kỹ năng về việc cài ñặt, sử dụng, khai thác, ñánh giá hệ ñiều hành một cách hiệu quả. Các kiến thức này rất cần thiết cho người sử dụng cũng như những chuyên gia về vận hành, phục vụ hạ tầng tính toán nói chung. Thứ hai, hệ ñiều hành ñược xem xét từ khía cạnh thiết kế và xây dựng. ðây là những kiến thức cần thiết cho chuyên gia về hệ thống hoặc những người sẽ tham gia thiết kế, xây dựng hệ ñiều hành. Thứ ba, ñó là kiến thức về các khái niệm và nguyên lý chung về hệ ñiều hành như một thành phần quan trọng của hệ thống máy tính. ðây là những kiến thức chung, cần thiết cho các ñối tượng dạng một và hai ở trên, ñồng thời là kiến thức cơ sở cho những người có chuyên môn liên quan tới máy tính. Cần lưu ý rằng việc phân chia này là tương ñối và các khối kiến thức có liên quan ñến nhau. Trong tài liệu này, hệ ñiều hành ñược trình bày theo khía cạnh thứ ba với mục ñích cung cấp kiến thức về các khái niệm và nguyên lý hoạt ñộng của hệ ñiều hành, từ ñây giúp người ñọc có hiểu biết sâu hơn về hệ thống máy tính. Những nguyên lý và khái niệm trình bày trong tài liệu mang tính tổng quát cho hệ ñiều hành nói chung, thay vì dựa trên một hệ ñiều hành cụ thể. Tuy nhiên, ñể giúp người ñọc có ñược liên kết giữa lý thuyết và thực tế, một số kỹ thuật trong hệ ñiều hành cụ thể sẽ ñược trình bày như những ví dụ minh họa. Các nội dung của tài liệu ñược trình bày thành bốn chương. Chương 1 bao gồm những khái niệm chung về hệ ñiều hành, vai trò trong hệ thống máy tính, các thành phần chức năng và một số kiểu kiến trúc thông dụng. Chương 1 cũng tóm tắt quá trình hình thành và phát triển hệ ñiều hành, qua ñó trình bày một số khái niệm và kỹ thuật quan trọng trong hệ ñiều hành hiện này. Kết thúc chương là ví dụ một số hệ ñiều hành tiêu biểu. Chương 2 trình bày về quản lý tiến trình trong hệ ñiều hành, tập trung vào quản lý tiến trình trong hệ thống với một CPU và nhiều tiến trình. Những nội dung chính của chương bao gồm: khái niệm tiến trình, trạng thái tiến trình, các thao tác và thông tin quản lý tiến trình, dòng thực hiện, vấn ñề ñiều ñộ tiến trình, ñồng bộ hóa các tiến trình ñồng thời. Chương 3 trình bày về quản lý bộ nhớ. Nội dung chính của chương 3 bao gồm: các vấn ñề liên quan tới bộ nhớ và ñịa chỉ, một số kỹ thuật tổ chức chương trình, kỹ thuật phân chương, phân trang, phân ñoạn bộ nhớ, khái niệm và cách tổ chức quản lý bộ nhớ ảo. Những khái niệm lý thuyết trình bày trong chương ñược minh họa qua hai ví dụ: hỗ trợ quản lý bộ nhớ trong vi xử lý Intel Pentium, và quản lý bộ nhớ trong hệ ñiều hành Windows XP. Chương 4 trình bày về hệ thống file với những nội dung chính sau: khái niệm file và thư mục, các thao tác với file và thư mục, tổ chức bên trong của file và thư mục, vấn ñề cấp phát
2

và quản lý không gian lưu trữ của file, các vấn ñề về ñộ tin cậy và an toàn bảo mật của hệ thống file. Tài liệu ñược biên soạn từ kinh nghiệm giảng dạy học phần Hệ ñiều hành tại Học viện Công nghệ bưu chính viễn thông, trên cơ sở tiếp thu phản hồi từ sinh viên và ñồng nghiệp của tác giả. Tài liệu có thể sử dụng làm tài liệu học tập cho sinh viên ñại học, cao ñẳng ngành công nghệ thông tin và các ngành liên quan, ngoài ra có thể sử dụng với mục ñích tham khảo cho những người quan tâm tới hệ ñiều hành và hệ thống máy tính. Trong quá trình biên soạn tài liệu, mặc dù tác giả ñã có nhiều cố gắng song không thể tránh khỏi những thiếu sót. Ngoài ra, hệ ñiều hành là một lĩnh vực có nhiều thay ñổi của khoa học máy tính ñòi hỏi tài liệu về hệ ñiều hành phải ñược cập nhật thường xuyên. Tác giả rất mong muốn nhận ñược ý kiến phản hồi, góp ý cho các thiếu sót cũng như ý kiến về việc cập nhật, hoàn thiện nội dung của tài liệu.

Hà nội 12/2009 TÁC GIẢ

3

....................... 48 2..... Một số bài toán ñồng bộ .................2........5.......................... Yêu cầu với giải pháp cho ñoạn nguy hiểm......................................4...... 39 2.... Ưu ñiểm của mô hình ña dòng ..........................2. Giải pháp phần cứng.................. Thông tin mô tả tiến trình .....4.................................. 31 2.......................... 8 1........... 30 2................................3..................................1...................................6.........................1......................................................................................................5....1.................................... ðỒNG BỘ HÓA TIẾN TRÌNH ðỒNG THỜI.............................................................................................. 19 1......4..........................6......................................... 35 2.............. 50 2.4................... Tài nguyên của tiến trình và dòng .............. Các vấn ñề ñối với tiến trình ñồng thời ............................................... ðIỀU ðỘ TIẾN TRÌNH ......MỤC LỤC CHƯƠNG 1: GIỚI THIỆU CHUNG .. 52 2.......... 39 2..... 9 1..................2...................7...................................................1........................ Một số kiểu cấu trúc hệ ñiều hành ........................3..................................................................................................4....... DÒNG .................... CẤU TRÚC HỆ ðIỀU HÀNH ... 47 2...........................4.....3........... GIAO DIỆN LẬP TRÌNH CỦA HỆ ðIỀU HÀNH ...............2...........2.................... 14 1....................................... 29 2................................................ 34 2....4.........1..........4..... 27 2....................... 54 2........... 27 2............... 24 CHƯƠNG 2: QUẢN LÝ TIẾN TRÌNH.... 40 2.........4......1..................3..... 50 2........... 8 1...... Các thao tác với tiến trình......... 43 2.................... CÁC DỊCH VỤ DO HỆ ðIỀU HÀNH CUNG CẤP ........ QUÁ TRÌNH PHÁT TRIỂN HỆ ðIỀU HÀNH ............................................................................................ Trạng thái của tiến trình..........................2......................2.............5.......4......... Dòng mức người dùng và dòng mức nhân .................................................................................................................. 20 1............... CÁC KHÁI NIỆM LIÊN QUAN ðẾN TIẾN TRÌNH....................3................ 13 1..........................3.... CÁC THÀNH PHẦN CỦA HỆ THỐNG MÁY TÍNH.......................................6.........................................................1.............................................................................................1.................... Bảng và danh sách tiến trình............................................................................. KHÁI NIỆM HỆ ðIỀU HÀNH ..................... 56 4 ....2. Khái niệm ñiều ñộ ................................................... Tiến trình là gì.............2................................................. 27 2...................... Các thuật toán ñiều ñộ ....................1................6....................................... Giải thuật Peterson ...........2.............................. 42 2............4................................3.... Các dạng ñiều ñộ .1......................... 37 2.......3. MỘT SỐ HỆ ðIỀU HÀNH CỤ THỂ........................................... 11 1...............2........................ 28 2...................1................................ Cờ hiệu (semaphore) ... Dòng thực hiện là gì ..3... Nhân của hệ ñiều hành ................................ Các tiêu chí ñiều ñộ ............... 36 2.......................... 17 1.........3...... 34 2.......................4.....3.........................

........2............... Trao ñổi giữa bộ nhớ và ñĩa (swapping)............................................................................. ðỔI TRANG .. 99 3..................... 99 3.............................................................................................. 97 3............8....................................... 98 3....1 Khái niệm............................................................................... Khái niệm bộ nhớ ảo .......................1............... Tại sao phải ñổi trang ..................... 70 3.........2.............. Phạm vi cấp phát khung...... Ánh xạ ñịa chỉ và chống truy cập trái phép .............................................................................4........... Các chiến lược ñổi trang ........................................................................................... BỘ NHỚ ẢO ..............................................6.....2............4...................2............................................. CẤP PHÁT KHUNG TRANG. 104 5 ........................................................................... 102 CHƯƠNG 4: HỆ THỐNG FILE............ 58 2.....1........................................ 85 3........... QUẢN LÝ BỘ NHỚ TRONG INTEL PENTIUM ........3..............................8................................... 89 3............................................................4....2............................... Kết hợp phân ñoạn với phân trang .................................................................7.................... Ánh xạ ñịa chỉ ..... Phân chương cố ñịnh ........................... Vấn ñề gán ñịa chỉ ... PHÂN ðOẠN BỘ NHỚ ........................ Liên kết ñộng và thư viện dùng chung ...... ðỊA CHỈ VÀ CÁC VẤN ðỀ LIÊN QUAN ........5..... Ánh xạ ñịa chỉ và chống truy cập bộ nhớ trái phép...3...5...............................................7.....................................11.......1. Tổ chức bảng phân trang ............................................3...................................................... 70 3.......... 79 3......... 81 3........... Khái niệm phân trang bộ nhớ..................1................................3............................. 72 3............7................... 78 3. 97 3...... 87 3.......................4.......2.............3................................4....................... 88 3............ Giới hạn số lượng khung ........................ TÌNH TRẠNG TRÌ TRỆ ...5. QUẢN LÝ BỘ NHỚ TRONG WINDOWS XP ..4................. MỘT SỐ CÁCH TỔ CHỨC CHƯƠNG TRÌNH....... 70 3............10........ Tải trong quá trình thực hiện .... 84 3.. 75 3.... ðịa chỉ lô gic và ñịa chỉ vật lý .............................2. Phân chương ñộng .......5.............................................................................................................2.................................. 61 CHƯƠNG 3: QUẢN LÝ BỘ NHỚ......... 72 3..8............................. 81 3................... 86 3.5......................................... 88 3.........................................................6.................... Bế tắc ........................7..............................................1.................................................1...3......................................3....2...................................................................................................................2...................... 91 3................................. 71 3...........8............4...............................................2.... 80 3.........................................1..................1...........1........................................... Phương pháp kề cận ......................... Monitor ..... 82 3............................... PHÂN CHƯƠNG BỘ NHỚ ................... 74 3.................................................1.2.................................. 76 3.....................................................................3.... 85 3..............3........................................ 91 3............. 93 3............................................................6... 72 3............. Nạp trang theo nhu cầu ................. PHÂN TRANG BỘ NHỚ .....9..

.................................4..................1................................................................8............................... Truy cập tuần tự ................... 118 4..........4... CÁC PHƯƠNG PHÁP TRUY CẬP FILE .................................1.....................6... 128 4..... 118 4.... THƯ MỤC ..................................9......... 131 4...................................................8.........................2.....5.......10...... 132 4.. 108 4....... 108 4......... 113 4.................................4.............. CÁC THAO TÁC VỚI FILE .....1............................... Cấu trúc hệ thống thư mục............................. Phát hiện và loại trừ các khối hỏng . KHÁI NIỆM FILE..................................................................................................... 127 4....... Tên ñường dẫn .............. 107 4....2............ 133 4........ 104 4......... Kích thước khối......................................................... 127 4............................................................... TỔ CHỨC BÊN TRONG CỦA THƯ MỤC .1.............................2.................... Truy cập dựa trên chỉ số ......... 126 4..............................5......................................................... 105 4........... File là gì ? ....... Thư mục của Linux .........................................................................................3.............................. 112 4........... 124 4..........................4............3............... 109 4..........2....... Sao dự phòng ......4................................ 110 4..... 129 4.......... CẤP PHÁT KHÔNG GIAN CHO FILE ................. 124 4....... QUẢN LÝ KHÔNG GIAN TRÊN ðĨA................................................................................... 122 4........ Quản lý các khối trống .....................................................2...........3............. Tổ chức thư mục của DOS (FAT).... 128 4....8..................... Truy cập trực tiếp ...9...............................................................7......................................................................................4.................... Thuộc tính của file.... 119 4.................................................2......7.1. Sử dụng khối chỉ số .....................7.. 132 4........................................ 107 4.................................................... 126 4......................... Các thao tác với thư mục ...........2..................1.......6............................................................ Bảng băm ........................6...4......................... 121 4...............................................3...........................1..............1.............5......9............. Danh sách quản lý truy cập..... 104 4...2.............. Khái niệm thư mục .7.............................................4...... ðĩa lôgic.......................1................ Danh sách.......5.........1................................................................................ Sử dụng danh sách kết nối ................ Cấp phát các khối liên tiếp.........4.... Sử dụng mật khẩu.........3.....................................................................................2....2...............................5.2............................................................. HỆ THỐNG FILE FAT ........................................ Cây nhị phân ................. 113 4......................................................................................................... Cấu trúc file .... Sử dụng danh sách kết nối trên bảng chỉ số........................1............................................... 112 4............................... 120 4... 134 6 ......................................... 125 4.1...........................1.................7......................................... 126 4......................................................... ðỘ TIN CẬY CỦA HỆ THỐNG FILE ......................... BẢO MẬT CHO HỆ THỐNG FILE ..............2.......7........................... 128 4........................................................................................3..................10...............5...........

.....................................................10.................................................2.................... Thư mục gốc ............. Boot sector ..4......... Bảng FAT ..... 137 4...................................................3................................................................ 138 TÀI LIỆU THAM KHẢO .......................................................... 140 7 .. 135 4....................................................4....10................10........

chương trình truyền thông .1: Các thành phần của hệ thống máy tính 8 . (Khái niệm người dùng ở ñây bao gồm cả người sử dụng thuần tuý lẫn người viết ra các chương trình ứng dụng) Ngoài phần cứng và trình ứng dụng.1. ðây là những thiết bị cụ thể như CPU.1. CÁC THÀNH PHẦN CỦA HỆ THỐNG MÁY TÍNH Một hệ thống máy tính nói chung có thể phân chia sơ bộ thành phần cứng và phần mềm. xử lý dữ liệu. trong ñó phần cứng là lớp dưới cùng và người dùng giao tiếp với trình ứng dụng là thành phần trên cùng của hệ thống. Những thao tác phân phối và ñiều khiển tài nguyên chung như vậy sẽ ñược gộp chung lại trong phạm vi hệ ñiều hành. Hệ ñiều hành là phần mềm ñóng vai trò trung gian giữa phần cứng và người sử dụng cùng các chương trình ứng dụng của họ. Các thành phần của hệ thống máy tính ñược thể hiện trên hình 1. ðể thực hiện công việc tính toán hoặc xử lý dữ liệu cụ thể cần có các chương trình gọi là chương trình ứng dụng. Ngoài chương trình ứng dụng và hệ ñiều hành còn có các chương trình hệ thống và chương trình tiện ích. Các chương trình ứng dụng khi chạy ñều cần thực hiện một số thao tác chung như ñiều khiển thiết bị vào ra. Có thể kể một số chương trình ứng dụng thường gặp như chương trình soạn thảo văn bản. thiết bị nhớ ngoài. hệ quản trị cơ sở dữ liệu. bộ nhớ. là phần mà người dùng xây dựng nên và tương tác trong quá trình giải quyết các nhiệm vụ của mình.Giới thiệu chung CHƯƠNG 1: GIỚI THIỆU CHUNG 1. chương trình trò chơi. Người sử dụng Chương trình ứng dụng. Chương trình ứng dụng là lớp trên của hệ thống. chương trình hệ thống và tiện ích Hệ ñiều hành Phần cứng Hình 1. thiết bị vào ra. hệ thống máy tính còn có một thành phần quan trọng là hệ ñiều hành. Phần cứng cung cấp các tài nguyên cần thiết cho việc tính toán. Phần cứng có thể biểu diễn như lớp dưới cùng.v.v. Phần mềm gồm các chương trình quy ñịnh cụ thể việc xử lý ñó. là cơ sở của toàn hệ thống. ðây là những chương trình ñược xây dựng ñể thực hiện những thao tác thường diễn ra trong hệ thống hoặc giúp người dùng thực hiện một số công việc dễ dàng hơn. Nhiệm vụ của hệ ñiều hành là làm cho việc sử dụng hệ thống máy tính ñược tiện lợi và hiệu quả.

thẻ nhớ và các thiết bị nhớ khác có vai trò lưu trữ chương trình. vai trò. Bộ nhớ chính là nơi lưu trữ chương trình và dữ liệu trong quá trình xử lý. Việc ghi thông tin lên vùng trống cũng cần ñược tính toán sao cho quá trình truy cập tới thông tin khi cần có thể thực hiện nhanh nhất. Nhờ có hệ ñiều hành. ñĩa quang từ.v. Các tài nguyên phần cứng chủ yếu của máy tính gồm có bộ xử lý (CPU). Quản lý tài nguyên trước hết là phân phối tài nguyên tới các ứng dụng một cách hiệu quả. Hệ ñiều hành cần biết những vùng nào trên ñĩa chưa ñược sử dụng ñể ghi thông tin lên những vùng này. Chẳng hạn. KHÁI NIỆM HỆ ðIỀU HÀNH Có nhiều cách ñịnh nghĩa khác nhau về hệ ñiều hành. Trong trường hợp xuất hiện các yêu cầu mâu thuẫn khác về phần cứng như ví dụ này. dữ liệu trong thời gian dài với dung lượng lớn. Bộ nhớ thứ cấp. Thiết bị vào ra cho phép máy tính trao ñổi thông tin với thế giới bên ngoài. Một ví dụ ñiển hình là trường hợp lưu trữ thông tin lên ñĩa. và chức năng trong hệ thống máy tính. hay bộ nhớ ngoài. 9 . tài nguyên ñược quản lý và sử dụng hợp lý hơn trong khi người sử dụng ñược giải phóng khỏi công việc khó khăn này. bộ nhớ thứ cấp. Ta sẽ xem xét kỹ hai chức năng này của hệ ñiều hành. ðể hoàn thành vai trò của mình. các chương trình cần tài nguyên phần cứng như không gian bộ nhớ. bộ nhớ chính. nhưng thông thường.v. CPU là thành phần trung tâm của hệ thống. ñĩa quang học. hệ ñiều hành sẽ quyết ñịnh thứ tự và thời gian cung cấp tài nguyên cho các chương trình sao cho ñạt ñược mục tiêu tính toán của hệ thống ñồng thời tối ưu hoá một số tiêu chí nào ñó.2. chẳng hạn giảm thời gian các chương trình phải tạm ngừng ñể chờ ñợi lẫn nhau. Quản lý tài nguyên Quản lý tài nguyên ñảm bảo cho tài nguyên hệ thống ñược sử dụng một cách có ích và hiệu quả. Hệ ñiều hành là hệ thống phần mềm ñóng vai trò trung gian giữa người sử dụng và phần cứng máy tính nhằm tạo ra môi trường giúp thực hiện các chương trình một cách thuận tiện và hiệu quả. hệ ñiều hành cần lưu trữ tình trạng tài nguyên ñể biết hiện giờ tài nguyên nào còn trống. tài nguyên nào ñang ñược sử dụng. Muốn cấp phát tài nguyên. bao gồm các ñĩa từ. băng từ. hệ ñiều hành cần thực hiện hai chức năng cơ bản là quản lý tài nguyên và quản lý việc thực hiện các chương trình. có chức năng xử lý dữ liệu và ñiều khiển toàn hệ thống. hai chương trình cùng có yêu cầu ghi ra ñĩa một lúc. hệ ñiều hành ñược ñịnh nghĩa thông qua mục ñích. các thiết bị vào ra. Yêu cầu tài nguyên ñược hệ ñiều hành thu nhận và ñáp ứng bằng cách cấp cho chương trình các tài nguyên tương ứng. thiết bị ngoại vi. ðể thực hiện ñược.Giới thiệu chung 1. Yêu cầu về phần cứng của các chương trình này có thể mâu thuẫn nhau.

thì việc chương trình này truy cập và thay ñổi vùng bộ nhớ của chương trình khác sẽ làm cho chương trình ñó hoạt ñộng không bình thường. thiết bị vào/ra ảo cho phép chương trình ñọc ghi dữ liệu. Các thanh ghi khác làm nhiệm vụ chứa thông tin cần trao ñổi và trạng thái ñĩa. ðể chạy chương trình cần thực hiện một số thao tác nhất ñịnh. nếu hai chương trình ñược cấp hai vùng bộ nhớ khác nhau. ghi thông tin ra các thanh ghi dữ liệu và ñưa các lệnh tiến hành ghi thông tin ra các thanh ghi ñiều khiển. người dùng không phải thực hiện các thao tác này. ta cần xác ñịnh chuỗi lệnh khởi ñộng (làm ñĩa quay nếu ñĩa ñang ở trạng thái dừng). ñồng thời ñảm bảo môi trường ñể việc xây dựng và thực hiện chương trình ñược thuận lợi. processor ảo cung cấp khả năng thực hiện các lệnh. Hệ ñiều hành cần thể hiện chức năng quản lý tài nguyên của mình qua việc ngăn ngừa những vi phạm kiểu này. ñịa chỉ. chỉ giữ lại những khía cạnh cốt lõi mà người sử dụng quan tâm. dễ lập trình hơn. Máy ảo là các máy lôgic với những tài nguyên ảo có các tính chất và khả năng khác so với tài nguyên thực: dễ sử dụng hơn. Chẳng hạn. Tài nguyên ảo giống tài nguyên thực ở chỗ nó cung cấp các dịch vụ cơ bản như tài nguyên thực. Ví dụ. Hệ ñiều hành giúp việc chạy chương trình dễ dàng hơn. ðể tạo môi trường thuận lợi cho chương trình. số lượng nhiều hơn tài nguyên thực thực. khuôn dạng thanh ghi và quá trình trao ñổi tin với ñĩa. sau ñó chuyển ñầu ñọc tới vị trí cần thiết. Các tài nguyên thực ñều rất khó lập trình trực tiếp. hệ ñiều hành tạo ra các máy ảo. Chương trình cần ñược quản lý ñể có thể thực hiện thuận lợi. khả năng có thể vượt quá khả năng tài nguyên thực. ðể thực hiện việc ñọc ghi thông tin. Các tài nguyên phần cứng sau khi ñược trừu tượng hoá vẫn cung cấp các chức năng cơ bản như ban ñầu xong dễ sử dụng hơn 10 . Nếu mạch ñiều khiển ñĩa thay ñổi thì các thông số này có thể thay ñổi theo và chương trình ghi ñĩa cũng phải viết lại. tránh các lỗi. Việc lập trình ñiều khiển ñĩa như vậy ñòi hỏi rất nhiều thời gian cùng những hiểu biết về giao diện phần cứng. Lấy ví dụ việc ghi thông tin ra ñĩa cứng. Trừu tượng hoá là quá trình loại bỏ các chi tiết không quan trọng. Tài nguyên ảo là bản mô phỏng của tài nguyên thực ñược thực hiện bằng phần mềm. Quản lý việc thực hiện các chương trình Nhiệm vụ quan trọng nhất của máy tính là thực hiện các chương trình. Một chương trình ñang trong quá trình thực hiện ñược gọi là tiến trình (process).Giới thiệu chung Quản lý tài nguyên còn có nghĩa là ñảm bảo sao cho chương trình không xâm phạm tài nguyên ñã cấp cho chương trình khác. Tài nguyên ảo khác tài nguyên thực ở chỗ dễ sử dụng hơn. ðể cho việc sử dụng các tài nguyên phần cứng trở nên ñơn giản người ta trừu tượng hoá các tài nguyên này. Các ñĩa cứng thường ñược lập trình bằng cách ghi một số lệnh ra các thanh ghi ñiều khiển. bộ nhớ ảo cung cấp khả năng lưu trữ thông tin. nhờ có hệ ñiều hành. kiểm tra xem ñĩa ñã ñạt ñược tốc ñộ chưa. Trong trường hợp này là kiến thức về các lệnh.

Do hệ ñiều hành là chương trình ñầu tiên ñược thực hiện khi khởi ñộng hệ thống nên hệ ñiều hành phải tự tải chính mình từ bộ nhớ ngoài vào bộ nhớ trong. Hệ ñiều hành sẽ thực hiện công việc phức tạp và lặp ñi lặp lại này. mỗi chương trình sẽ ñược hệ ñiều hành cung cấp một CPU ảo bằng cách phân chia thời gian sử dụng CPU thực cho các CPU ảo ñó. Một ñiểm khác biệt quan trọng của tài nguyên ảo là số lượng tài nguyên ảo có thể lớn hơn số lượng tài nguyên thực. ghi các tệp. Rõ ràng số lượng processor ảo lúc ñó vượt số lượng CPU thực rất nhiều. xoá. Chính xác hơn. Toàn bộ quá trình này tương ñối phức tạp song lại diễn ra thường xuyên. lập trình viên cũng như người sử dụng không cần quan tâm tới chi tiết của việc tải và chạy chương trình. Sau khi khởi ñộng hệ thống. Khi chương trình ñã thực hiện xong cần giải phóng bộ nhớ và các tài nguyên mà chương trình chiếm giữ. ghi các tệp bằng các lệnh bậc cao mà không cần quan tâm tới các thanh ghi. ðiển hình là bộ nhớ ảo. Hãy xem xét trường hợp CPU. ðiều này thể hiện qua một số dịch vụ mà hệ ñiều hành cung cấp cho các chương trình ứng dụng và người sử dụng. Việc trực tiếp ñưa các lệnh cụ thể ra thanh ghi cùng các chi tiết khác sẽ do hệ ñiều hành ñảm nhiệm. Một số hệ ñiều hành cung cấp nhiều dịch vụ trong khi hệ ñiều hành khác cung cấp ít dịch vụ hơn. Người dùng có thể tạo. MS-DOS không cung cấp các dịch vụ về bảo mật trong khi Windows NT lại rất chú trọng tới dịch vụ này. các lệnh bậc thấp. ñọc. một chương trình nằm sẵn trong bộ nhớ ROM (ví dụ trong BIOS của máy vi tính) sẽ ñược kích hoạt và ñọc chương trình mồi 11 . Mỗi máy tính thường chỉ có một processor thực. Các hệ ñiều hành thường cung cấp bộ nhớ trong ảo với không gian nhớ lớn hơn bộ nhớ thực rất nhiều bằng cách sử dụng thêm không gian trên bộ nhớ ngoài. Ở ñây cần nói thêm về việc tải hệ ñiều hành vào bộ nhớ.Giới thiệu chung nhiều do các chi tiết cụ thể ñã ñược giấu ñi. ñĩa cứng có thể coi như nơi có thể ñọc. Tuy nhiên nếu nhiều chương trình cùng ñược thực hiện trên máy ñó. Khái niệm dịch vụ ở ñây có thể hiểu ñơn giản là những công việc mà hệ ñiều hành thực hiện giúp người dùng hoặc chương trình ứng dụng. Hệ ñiều hành có một chương trình nhỏ gọi là chương trình tải hay chương trình mồi (OS loader). Dưới ñây là những dịch vụ thường gặp của hệ ñiều hành.3. ðể thực hiện một chương trình. 1. Chương trình này nằm ở một vị trí xác ñịnh trên ñĩa hoặc thiết bị nhớ ngoài khác. chương trình ñó cần ñược tải từ ñĩa vào bộ nhớ. sau ñó ñược trao quyền thực hiện các lệnh. Các dịch vụ có thể thay ñổi theo từng hệ ñiều hành. Khả năng của từng tài nguyên ảo cũng có thể vượt khả năng tài nguyên thực. quá trình ñó diễn ra như sau. Chẳng hạn. Chẳng hạn. Nhờ có hệ ñiều hành. CÁC DỊCH VỤ DO HỆ ðIỀU HÀNH CUNG CẤP Một trong các nhiệm vụ chủ yếu của hệ ñiều hành là tạo ra môi trường thuận lợi cho các chương trình khác thực hiện và giúp người dùng sử dụng hệ thống dễ dàng. Tải và chạy chương trình. Tuy nhiên có một số dịch vụ mà một hệ ñiều hành tiêu biểu thường có.

mất ñiện. ví dụ chương trình cmd. yêu cầu vào/ra sẽ ñược giao cho hệ ñiều hành thực hiện. Các hệ thống thường cung cấp giao diện cho phép hệ ñiều hành giao tiếp với hệ ñiều hành. Trong các hệ thống cho phép nhiều chương trình thực hiện ñồng thời cần có cơ chế cấp phát và phân phối tài nguyên hợp lý.v. chương trình mồi chịu trách nhiệm tải các phần khác của hệ ñiều hành vào bộ nhớ và trao cho hệ ñiều hành quyền ñiều khiển hệ thống. Trong trường hợp truyền thông ñiệp. ghi. Các lỗi phần cứng có thể là lỗi bộ nhớ.v. Làm việc với hệ thống file. ðối với hệ thống nhiều người dùng thường có xuất hiện 12 . Người dùng và chương trình trong khi thực hiện có thể có nhu cầu vào/ra dữ liệu với ñĩa hoặc các thiết bị ngoại vi. người sử dụng và trình ứng dụng không phải tự thực hiện việc cấp phát tài nguyên. ðể ñảm bảo cho hệ thống hoạt ñộng ổn ñịnh. ða số người dùng và chương trình có nhu cầu ñọc. Dịch vụ an ninh và bảo mật. Hệ ñiều hành cung cấp dịch vụ cho phép thiết lập liên lạc và truyền thông tin dưới dạng các thông ñiệp (message) hoặc thông qua những vùng bộ nhớ dùng chung (shared memory). thực ñơn. Giao diện dòng lệnh cho phép người dùng ra chỉ thị cho hệ ñiều hành bằng cách gõ lệnh dưới dạng văn bản.v. an toàn. Nhờ có hệ ñiều hành. File là một khái niệm lô gic dùng ñể trừu tượng hoá công việc vào ra thông tin với bộ nhớ ngoài. Giao diện với người dùng. Mỗi dạng tài nguyên cần có cách cấp phát riêng. ñồng thời vẫn ñảm bảo tài nguyên ñược cấp phát công bằng và hiệu quả. và thiết bị trỏ như chuột. tạo. Cấp phát tài nguyên. kết hợp với bàn phím ñể giao tiếp với hệ thống. Giao diện ñồ họa sử dụng hệ thống cửa sổ.exe của Windows. ðể tránh cho chương trình không phải làm việc trực tiếp với phần cứng. máy in hết giấy. Các lỗi phần mềm có thể do chương trình viết sai. các phép chia cho không. Thực hiện các thao tác vào ra dữ liệu. lỗi truy cập bộ nhớ. hệ ñiều hành ñóng vai trò chuyển các gói tin theo những quy tắc nhất ñịnh gọi là giao thức truyền thông.v. hệ ñiều hành cần phát hiện và xử lý kịp thời các lỗi xuất hiện trong phần cứng cũng như phần mềm.Giới thiệu chung của hệ ñiều hành từ vị trí quy ước trên ñĩa vào bộ nhớ. Trong khi thực hiện. chép file hoặc làm việc với thư mục. Hai dạng giao diện thông dụng nhất là giao diện dưới dạng dòng lệnh (command-line) và giao diện ñồ họa (Graphic User Interface – GUI). Truyền thông. Hệ ñiều hành giúp thực hiện những thao tác này dưới dạng các dịch vụ. Sau ñó. Ngoài ra còn nhiều thao tác khác với file như quản lý quyền truy cập. Phát hiện và xử lý lỗi. thậm chí với chương trình ñang thực hiện trên máy khác ñược nối mạng. sao lưu. chương trình có thể có nhu cầu trao ñổi thông tin với nhau. ví dụ cơ chế cấp phát CPU hoàn toàn khác so với cấp phát bộ nhớ. xóa.

API và lời gọi hệ thống khá tương tự nhau trừ một số ngoại lệ). Các ví dụ khác là POSIX API dùng cho UNIX. Lúc này. Trên hình 1.2 : Hàm ñọc file trong thư viện Windows API Khi viết chương trình. 1. Nhiều hệ ñiều hành còn cho phép kiểm tra người dùng thông qua việc kiểm soát ñăng nhập vào hệ thống. hệ thống cần ñảm bảo ñể tiến trình không truy cập trái phép tài nguyên (như vùng bộ nhớ. LPDWORD lpNumberOfBytesWritten. Các hệ ñiều hành trước ñây thường cung cấp lời gọi hệ thống dưới dạng các lệnh hợp ngữ do ñó lời gọi hệ thống còn ñược gọi là “lệnh máy mở rộng”. tức là ñảm bảo người dùng này không tiếp cận ñược với thông tin của người khác nếu không ñược phép. Thứ nhất. Giao diện này bao gồm các lời gọi hệ thống (system calls) mà chương trình sử dụng ñể yêu cầu một dịch vụ nào ñó từ phía hệ ñiều hành.4. lời gọi hệ thống có thể yêu cầu nhiều thông tin và do vậy khó sử dụng hơn API (trên thực tế.Giới thiệu chung yêu cầu bảo mật thông tin. Lời gọi hệ thống là dạng lệnh ñặc biệt mà chương trình ứng dụng gọi khi cần yêu cầu hệ ñiều hành thực hiện một việc gì ñó. Giao diện lập trình Win32 API (Application Programming Interface) do hệ ñiều hành Windows cung cấp là một ví dụ thư viện như vậy.2 là ví dụ một hàm của Win32 API cho phép yêu cầu dịch vụ ghi ra file của Windows: BOOL WINAPI WriteFile( in in in out_opt inout_opt ). file mở) của tiến trình khác hay của chính hệ ñiều hành bằng cách kiểm soát truy cập tới tài nguyên. 13 . GIAO DIỆN LẬP TRÌNH CỦA HỆ ðIỀU HÀNH ðể các chương trình có thể sử dụng ñược những dịch vụ nói trên. Hệ ñiều hành hiện nay thường cho phép gọi lời gọi hệ thống trực tiếp từ ngôn ngữ bậc cao như C hoặc C++. người lập trình sẽ sử dụng các hàm do giao diện lập trình ứng dụng API cung cấp thay vì gọi trực tiếp lời gọi hệ thống. lời gọi hệ thống giống như một lời gọi hàm hoặc chương trình con. chương trình dễ dàng chuyển sang thực hiện trên hệ thống khác có cùng API. DWORD nNumberOfBytesToWrite. Thứ hai. hệ ñiều hành cung cấp một giao diện gọi là giao diện lập trình. LPOVERLAPPED lpOverlapped Hình 1. Việc sử dụng API có hai ưu ñiểm so với sử dụng trực tiếp lời gọi hệ thống. LPCVOID lpBuffer. Linux và Java API dùng cho máy ảo Java. HANDLE hFile. Ví dụ các lời gọi kiểu này là các hàm ngắt 21h của DOS mà chương trình viết trên hợp ngữ gọi bằng lệnh int. Lời gọi hệ thống ñược thực hiện qua những thư viện hàm gọi là thư viện hệ thống cùng với những hàm hệ thống khác. Các hàm này sẽ giúp người lập trình gọi lời gọi hệ thống tương ứng của hệ ñiều hành. Tương tự như vậy. Chương trình dịch (compiler) sau ñó sẽ thực hiện việc chuyển ñổi lời gọi hàm sang lời gọi hệ thống tương ứng của hệ ñiều hành.

Giới thiệu chung Các lời gọi hệ thống thường thuộc một trong các nhóm sau: quản lý tiến trình, quản lý file và thư mục, quản lý thiết bị, ñảm bảo thông tin và liên lạc giữa các tiến trình. 1.5. QUÁ TRÌNH PHÁT TRIỂN HỆ ðIỀU HÀNH Các hệ ñiều hành ngày nay là những hệ thống phần mềm phức tạp thực hiện nhiều chức năng tinh vi liên quan tới quản lý tài nguyên và chương trình. Các tính năng và kỹ thuật ñược sử dụng trong hệ ñiều hành hiện ñại không phải có ngay mà ñược xây dựng và hoàn thiện qua nhiều thế hệ hệ ñiều hành khác nhau. Do vậy, việc xem xét quá trình phát triển hệ ñiều hành cho phép hiểu rõ hơn khả năng và yêu cầu ñối với một hệ ñiều hành hiện ñại. Các hệ thống ñơn giản Trong thời kỳ mới ra ñời, từ giữa những năm 40 cho tới giữa những năm 50 thế kỷ trước, tốc ñộ xử lý của máy tính rất thấp, việc vào/ra ñược thực hiện thủ công và khó khăn. Việc nạp chương trình ñược thực hiện nhờ các công tắc, các mạch hàn sẵn (plugboard), bìa ñục lỗ. Kết quả thực hiện ñược ñưa ra máy in, trạng thái máy thể hiện trên các ñèn tín hiệu. Trong thời kỳ này, lập trình viên tương tác trực tiếp với phần cứng, lập trình bằng các lệnh máy. Máy tính ñiện tử hế hệ này chưa có hệ ñiều hành. Xử lý theo mẻ Từ giữa những năm 1950, phần cứng máy tính ñã có những cải tiến quan trọng. Việc sử dụng bán dẫn cho phép giảm kích thước máy, tăng tốc ñộ xử lý cũng như giảm các hỏng hóc phần cứng. Việc nạp chương trình ñược thực hiện nhờ bìa ñục lỗ vào các ñĩa từ trước khi tải vào máy. Hệ ñiều hành ñầu tiên cũng ra ñời trong thời kỳ này. Trong những thập niên ñầu sau khi ra ñời, giá thành máy tính rất ñắt. Do ñó, nhiệm vụ quan trọng là tận dụng hết công suất máy, giảm thời gian chờ ñợi càng nhiều càng tốt. Một kỹ thuật cho phép tăng hiệu suất sử dụng máy là xử lý theo mẻ (batch processing). Kỹ thuật này lần ñầu tiên ñược hãng General Motors sử dụng trên máy tính 701 vào giữa những năm 1950. Thay vì làm việc trực tiếp với máy tính, lập trình viên chuẩn bị chương trình trên bìa ñục lỗ hoặc trên ñĩa từ và giao cho các kỹ thuật viên. ðây là những người chuyên trách quản lý máy và ñược chuẩn bị ñể sử dụng máy hiệu quả nhất. Sau khi nhận ñược chương trình, kỹ thuật viên sẽ phân chương trình thành các mẻ. Mỗi mẻ bao gồm những chương trình có yêu cầu giống nhau, ví dụ các chương trình cần ñược dịch bằng bộ dịch FORTRAN ñược xếp vào cùng mẻ. Toàn bộ mẻ sau ñó ñược nạp vào băng từ và ñược tải vào máy ñể thực hiện lần lượt. Một chương trình nhỏ gọi là chương trình giám sát (monitor) ñược giữ thường xuyên trong bộ nhớ. Mỗi khi một chương trình của mẻ kết thúc, chương trình giám sát tự ñộng nạp chương trình tiếp theo của mẻ vào máy và cho phép chương trình này chạy. Việc tự ñộng hoá giám sát và nạp chương trình còn giảm ñáng kể thời gian chuyển ñổi giữa hai chương trình trong cùng một mẻ do monitor có thể tự ñộng nạp chương trình nhanh hơn kỹ thuật viên. Hiệu suất sử dụng CPU do ñó ñược cải thiện ñáng kể. Sau khi toàn bộ mẻ ñã ñược thực hiện xong, kỹ thuật viên lấy băng từ chứa mẻ ra và nạp tiếp mẻ mới vào ñể thực hiện. Trình giám sát (monitor) mô tả ở trên chính là dạng ñơn giản nhất của hệ ñiều hành ñược tải vào và nằm thường trực trong bộ nhớ ñể quản lý việc thực hiện các chương trình

14

Giới thiệu chung khác. Bộ nhớ máy tính ñược phân thành hai vùng: một vùng chứa trình giám sát, và một vùng
Monitor

Trình ứng dụng

Hình 1.3: Bộ nhớ chứa trình giám sát (monitor) và chương trình ứng dụng chứa trình ứng dụng như minh họa trên hình 1.3. ða chương trình Mặc dù việc xử lý theo mẻ cho phép giảm thời gian chuyển ñổi giữa các chương trình ứng dụng xong hiệu suất sử dụng CPU vẫn tương ñối thấp. Mỗi khi có yêu cầu vào/ra, CPU phải dừng việc xử lý dữ liệu ñể chờ quá trình vào ra kết thúc. Do tốc ñộ vào ra luôn thấp hơn tốc ñộ CPU rất nhiều nên CPU thường xuyên phải chờ ñợi trong những khoảng thời gian dài. ðể hạn chế tình trạng nói trên, kỹ thuật ña chương trình (multiprogramming) hay còn gọi là ña nhiệm (multitasking) ñược sử dụng. Hệ thống chứa ñồng thời nhiều chương trình

Hệ ñiều hành Chương trình 1 Chương trình 2 Chương trình 3 Bộ nhớ trống

Hình 1.4: ða chương trình
trong bộ nhớ (hình 1.4). Khi một chương trình phải dừng lại ñể thực hiện vào ra hệ ñiều hành sẽ chuyển CPU sang thực hiện một chương trình khác. Nếu số chương trình nằm trong bộ nhớ ñủ nhiều thì hầu như lúc nào CPU cũng có việc ñể thực hiện, nhờ vậy giảm thời gian chạy không tải của CPU. Trên hình 1.5 là minh họa hiệu suất sử dụng thời gian CPU cho trường hợp ñơn chương trình và ña chương trình với 3 chương trình cùng ñược tải vào bộ nhớ một lúc. Thời gian thực hiện chương trình xen kẽ với thời gian chờ ñợi vào/ra. Dễ dàng nhận thấy, thời gian chờ ñợi của CPU trong chế ñộ ña chương trình giảm ñáng kể so với trong trường hợp ñơn chương trình.
Ch?y A Ch?y B

15

tức là thời gian từ khi người dùng gõ lệnh cho tới khi máy tính phản xạ lại cần phải tương ñối nhỏ. các terminal cho phép người dùng làm việc trực tiếp với máy tính thông qua màn hình và bàn phím. Kỹ thuật ña chương trình mô tả ở trên không ñảm bảo ñược thời gian ñáp ứng ngắn như vậy. Chia sẻ thời gian Mặc dù ña chương trình cho phép sử dụng hiệu quả CPU và các tài nguyên khác của hệ thống. Ngoài ra. Chia sẻ thời gian có thể coi như ña chương trình cải tiến. Trong các máy tính thế hệ sau. Việc phân phối CPU như vậy gọi là ñiều ñộ tiến trình hay ñiều ñộ CPU và sẽ ñược trình bầy chi tiết trong chương 2. Do việc chuyển ñổi giữa các công việc diễn ra với tần số cao và tốc ñộ CPU lớn nên thời gian ñáp ứng nằm trong giới hạn có thể chấp nhận.5: ChÕ ®é ®¬n ch−¬ng tr×nh vµ ®a ch−¬ng tr×nh Việc thực hiện ña chương trình ñòi hỏi những sự hỗ trợ nhất ñịnh từ phần cứng. Nếu không có cơ chế này. thời gian ñáp ứng. một kỹ thuật khác gọi là chia sẻ thời gian ñược sử dụng. ñặc biệt là khả năng vào/ra bằng ngắt và cơ chế DMA. tất cả người dùng ñều có cảm giác máy tính . cần quyết ñịnh xem bao nhiêu chương trình ñược tải vào bộ nhớ. Hiệu quả của ña chương trình do ñó sẽ bằng không. CPU sẽ phải trực tiếp ñiều khiển quá trình vào/ra thông tin và dữ liệu. hệ ñiều hành phải phân phối CPU cho các tiến trình. Trước hết. Sau khi ñã các chương trình ñã ở trong bộ nhớ và sẵn sàng thực hiện (gọi là các tiến trình). hệ ñiều hành cần ñảm bảo ñể tiến trình không xâm phạm vùng nhớ và tài nguyên ñã cấp cho tiến trình khác. song kỹ thuật này không cho phép người dùng tương tác với hệ thống. kết quả sau ñó ñược ñưa trực tiếp ra màn hình. hệ ñiều hành trở nên phức tạp hơn rất nhiều so với trường hợp ñơn chương trình.Ch?y A Ch?y B Ch?y C Giới thiệu chung Trong trường hợp ña chương trình. ðối với các hệ thống này. Nhiều người dùng có thể nhập thông tin và lệnh từ bàn phím. CPU lần lượt thực hiện các công việc khác nhau trong những khoảng thời gian ngắn gọi là lượng tử thời gian. Ch¹y Chê ®îi Ch¹ y Chê ®îi (a) §¬n ch−¬ng tr×nh Ch−¬ng tr×nh A Ch¹y Chê ®îi Ch¹ y Chê ®îi Ch¹ y Chê ®îi Chê ®îi Ch¹ y Ch¹ y Ch¹ y Chê ®îi Ch−¬ng tr×nh B Ch−¬ng tr×nh C Chê ®îi Chê ®îi Chê ®îi Toµn hÖ thèng Chê ®îi (b) §a ch−¬ng tr×nh H×nh 1. Do vậy.

chỉ thực hiện chương trình của mình. trong chế ñộ chia sẻ thời gian. CPU ñược chia sẻ giữa những người dùng khác 16 . Như vậy.

còn chương trình là một thực thể ñộng ñang tiến hành việc tính toán. xử lý.v.6. cho phép ñồng bộ hoá. bộ nhớ. ðể ñảm bảo chia sẻ CPU.1. Hệ ñiều hành hỗ trợ chia sẻ thời gian phức tạp hơn hệ ñiều hành ña chương trình ñơn thuần rất nhiều. Hệ ñiều hành chuyển quyền sử dụng CPU giữa các tiến trình khác nhau. có thể dưới dạng những bit. Các công việc liên quan tới quản lý tiến trình bao gồm: Tạo và xoá tiến trình (bao gồm cả tiến trình người dùng lẫn tiến trình hệ thống tiến trình hệ ñiều hành) Tạm treo và khôi phục các tiến trình bị treo ðồng bộ hoá các tiến trình (lập lịch cho các tiến trình .v.) Giải quyết các bế tắc. và ñược cung cấp một số tài nguyên như thời gian CPU. ðịa chỉ ñược sử dụng khi 17 .v. Quản lý tiến trình Một chương trình ñang trong quá trình thực hiện ñược gọi là tiến trình. CẤU TRÚC HỆ ðIỀU HÀNH Hệ ñiều hành là một hệ thống phần mềm phức tạp gồm ñược tạo thành từ các thành phần ñảm ñương những nhiệm vụ hoặc cung cấp những dịch vụ khác nhau. cũng như tránh tình trạng bế tắc. (khái niệm tiến trình sẽ ñược xem xét kỹ trong các chương sau). Các thành phần của hệ ñiều hành Một hệ ñiều hành tiêu biểu thường có các thành phần thực hiện những nhiệm vụ sau: a. Các chương trình ñang thực hiện như vậy ñược gọi là tiến trình. Các thành phần ñược tổ chức theo một cách nhất ñịnh ñể tạo ra hệ ñiều hành hoàn chỉnh.Giới thiệu chung nhau tương tác trực tiếp với hệ thống. 1. Quản lý bộ nhớ Bộ nhớ (nếu không nói gì thêm thì ñược hiểu là bộ nhớ trong hay bộ nhớ sơ cấp) là nơi chứa các tiến trình và dữ liệu. ví dụ như khi có xung ñột về tài nguyên Tạo cơ chế liên lạc giữa các tiến trình b. 1. ðây là tài nguyên quan trọng thứ hai sau CPU. Từng thành phần cũng như cách tổ chức toàn bộ hệ thống có thể rất khác nhau ở những hệ ñiều hành khác nhau.v. liên kết các thành phần xác ñịnh cấu trúc của hệ ñiều hành. hệ ñiều hành phải có các cơ chế ñiều ñộ tiến trình phức tạp.6. sau ñó xem xét một số kiểu cấu trúc thông dụng nhất. ñảm bảo liên lạc giữa các tiến trình. Bộ nhớ là khối ô nhớ ñược nhóm lại thành các từ hay các byte và ñược ñánh ñịa chỉ.v. Mỗi người dùng sẽ có chương trình của mình (một hoặc nhiều) trong bộ nhớ. Bản thân các tiến trình của hệ ñiều hành trong khi chạy cũng tạo ra các tiến trình. những byte ghi trên ñĩa. ðiểm khác nhau cơ bản giữa chương trình và tiến trình ở chỗ chương trình là một thực thể tĩnh. Hệ ñiều hành sử dụng các kỹ thuật ña chương trình và ñiều ñộ CPU ñể cung cấp CPU cho người dùng trong những khoảng thời gian ngắn. Trong phần này ta sẽ xem xét các thành phần thường có của một hệ ñiều hành tiêu biểu. Cách tổ chức.v.

v. ñó là file. cần có cơ chế tổ chức các file sao cho dễ tìm kiếm và sử dụng. quản lý không gian nhớ ñã ñược cấp và không gian còn trống. ñòi hỏi tốc ñộ tính toán cao hoặc khả năng lưu trữ dữ liệu lớn có thể phân tán việc xử lý trên các máy tính ñã ñược nối mạng. Quản lý vào ra Một trong các nhiệm vụ của hệ ñiều hành là ñơn giản hoá và tăng hiệu quả quá trình trao ñổi thông tin giữa các tiến trình với thiết bị vào ra. ðiều này cho phép trao ñổi. Xử lý phân tán cho phép tận dụng tài nguyên của các máy riêng lẻ ñể tạo nên một hệ thống tính toán có khả năng lớn hơn nhiều. hệ ñiều hành cho phép sử dụng một khái niệm lôgic khi lưu trữ thông tin trên các thiết bị nhớ này. Khi số lượng file lớn tới một mức nào ñó. tạo ra bộ nhớ ảo và ánh xạ ñịa chỉ bộ nhớ ảo vào bộ nhớ thực. d. Hệ thống quản lý file và thư mục ñảm nhiệm các chức năng sau: Tạo. xoá file và thư mục ðọc. Các chương trình và người dùng không cần quan tâm tới việc file ñược cất giữ trên bộ nhớ ngoài như thế nào. c. Hệ ñiều hành có trách nhiệm quản lý việc phân phối bộ nhớ giữa các tiến trình. tác giả . cho dễ tìm kiếm. thư mục chứa chương trình của cùng một hãng. 18 . ñồng thời tạo khả năng xử lý phân tán. Mỗi thư mục chứa các file có cùng một ñặc ñiểm nào ñó. File là tập hợp các thông tin có liên quan ñến nhau. chia sẻ thông tin giữa các máy. Hỗ trợ mạng và xử lý phân tán Một trong các xu hướng phát triển của các hệ thống tính toán hiện nay là kết hợp máy tính vào các mạng máy tính. Nhờ có hệ ñiều hành.v. ghi file Ánh xạ file và thư mục sang bộ nhớ ngoài e. Các máy tính ñược nối với nhau qua các môi trường truyền thông cho phép truyền thông tin và dữ liệu. Một nhiệm vụ khác của hệ vào ra là tăng hiệu quả trao ñổi thông tin với thiết bị ngoại vi nhờ hệ thống vùng ñệm (buffer) và bộ nhớ cache. Việc ñiều khiển trực tiếp thiết bị do các chương trình ñiều khiển thiết bị (driver) thực hiện. cung cấp và giải phóng bộ nhớ theo yêu cầu của các tiến trình. Trong những hệ ñiều hành ña nhiệm. nếu so sánh mỗi file như một quyển sách. Hệ ñiều hành phân chia các file thành các nhóm gọi là thư mục. Chẳng hạn. nhiều tiến trình có thể cùng thực hiện một lúc và ñược chứa trong bộ nhớ. ví dụ thư mục chứa các văn bản. Quản lý file và thư mục ðể tránh cho người dùng không phải quan tâm tới ñặc ñiểm các thiết bị nhớ ngoài vốn khác nhau và ña dạng.Giới thiệu chung cần ñọc hoặc ghi thông tin vào bộ nhớ. người dùng không phải quan tâm tới các chi tiết liên quan tới thiết bị vào ra cụ thể. Hệ ñiều hành sẽ chịu trách nhiệm ánh xạ file lên các thiết bị nhớ này. ðối với những bài toán lớn. Các thành phần này nằm trong hệ thống vào ra của hệ ñiều hành. là nơi có thể ghi thông tin vào hoặc ñọc thông tin ra. Ngoài ra còn có các giao diện lớp trên driver do hệ ñiều hành cung cấp. người ta cần phân loại sách theo thể loại. khi số sách tương ñối lớn như trong thư viện.

nhiều chương trình cấu thành. nhiều chương trình thành phần của hệ ñiều hành cung cấp các chức năng kém quan trọng hơn. Vai trò của những thành phần rất khác nhau. Máy tính hiện ñại thường ñược thiết kế với hai chế ñộ thực hiện chương trình: chế ñộ nhân và chế ñộ người dùng. xong lại không cần cho người dùng khác trong các trường hợp khác. người ta chỉ chọn những thành phần quan trọng không thể thiếu ñược.vào và chứa thường xuyên trong bộ nhớ. chẳng hạn như phần chịu trách nhiệm quản lý processor. là phần thực hiện các chức năng cơ bản nhất.là giao diện giữa các chương trình và hệ ñiều hành). một người sử dụng máy tính nghiệp dư sẽ không cần tới các chương trình dịch do hệ ñiều hành cung cấp. Các giao diện ñồ hoạ thường ñược biết ñến là Windows Explorer cho Windows. quan trọng nhất của hệ ñiều hành và thường xuyên ñược giữ trong bộ nhớ.system calls . Bộ dịch lệnh hay vỏ nhận lệnh từ người dùng và thực hiện các lệnh này. cân bằng tải.Giới thiệu chung Chức năng hỗ trợ mạng và xử lý phân tán của hệ ñiều hành bao gồm quản lý thiết bị mạng.6. Ví dụ. hỗ trợ các giao thức truyền thông. ðây là thành phần không bắt buộc của hệ ñiều hành. tiện ích giúp lưu trữ dữ liệu.2. thay vì tải toàn bộ hệ ñiều hành . Trong các hệ ñiều hành hiện nay. Hệ ñiều hành là một hệ thống phức tạp. Các phần này tạo thành nhân của hệ ñiều hành. vỏ (shell). người sử dụng làm việc với các ñối tượng ñồ hoạ như cửa sổ. Từ nhận xét trên. g. quản lý bộ nhớ. Các chương trình ứng dụng hay có trong thành phần của hệ ñiều hành là các chương trình dịch (trình dịch Basic của DOS. 1. Có thể lấy ví dụ các bộ dịch lệnh như command. các chương trình soạn thảo văn bản (Notepad của Windows. trình dịch C của Uni ). Có những phần không thể thiếu. quản lý việc truyền thông. Các chương trình này có thể cần cho một số người dùng nhất ñịnh trong một số cấu hình nhất ñịnh.có thể chiếm rất nhiều chỗ . vi của Linux). bộ dịch lệnh thường ñược thay thế bằng các hệ giao diện ñồ hoạ. Các chương trình tiện ích cung cấp cho người dùng một số dịch vụ giúp cho việc sử dụng hệ thống dễ dàng. f. biểu tượng rất trực giác và dễ hiểu. Chẳng hạn có các tiện ích giúp nén tệp.com của DOS. Các chương trình tiện ích và chương trình ứng dụng Hệ ñiều hành thường chứa sẵn một số chương trình tiện ích và chương trình ứng dụng. Hay một máy tính không nối mạng sẽ không bao giờ cần tới các dịch vụ mạng của hệ ñiều hành. Bên cạnh ñó. chép các tệp dài ra ñĩa mềm. là cơ sở ñể cho toàn bộ hệ thống hoạt ñộng. bash của Linux. X windows cho Linux. bao gồm nhiều thành phần. Giao diện với người dùng Thành phần này ñược gọi bằng nhiều tên khác nhau như bộ dịch lệnh (command intepreter). có thể bằng cách sử dụng dịch vụ do các phần khác của hệ ñiều hành cung cấp. Những phần còn lại không thuộc vào nhân có thể ñược tải vào và chạy khi cần thiết. Nhân của hệ ñiều hành Nhân (kernel) là phần cốt lõi. Thay vì gõ các lệnh dưới dạng văn bản. Chế ñộ nhân và chế ñộ người dùng. hiệu quả hơn. các chương trình trò chơi. Chế ñộ nhân (kernel 19 . Thực chất ñây là giao diện giữa ngưòi dùng với hệ ñiều hành (cần phân biệt với các lời gọi hệ thống .

Ngược lại. Cấu trúc nguyên khối Cấu trúc nguyên khối (monolithic) là cấu trúc trong ñó toàn bộ các chương trình và dữ liệu của hệ ñiều hành có chung một không gian nhớ và do vậy có thể coi như một khối duy nhất. sau ñó liên kết thành một chương trình lớn. chương trình ứng 20 . Kích thước nhân càng lớn thì càng ñảm ñương ñược nhiều chức năng và ñỡ tốn thời gian tải các phần phụ. ảnh hưởng tới không gian nhớ dành cho các chương trình ứng dụng.6. Có một vấn ñề ñược ñặt ra là quyết ñịnh phần nào thuộc vào nhân. 1. Một số kiểu cấu trúc hệ ñiều hành Các thành phần nêu trên cần ñược tổ chức. Việc che dấu thông tin hoàn toàn không có. Việc phân biệt chế ñộ nhân và chế ñộ người dùng nhằm mục ñích ngăn không cho chương trình ứng dụng vô tình hoặc cố ý thực hiện những thao tác làm ảnh hưởng tới hệ thống. Cách tổ chức hệ ñiều hành như vậy cho ta hình ảnh tương tự với chương trình ñược viết theo kiểu lập trình cấu trúc.Giới thiệu chung mode). bổ sung các thành phần của hệ ñiều hành sẽ dễ dàng hơn nếu ñược tổ chức dưới các mô ñun riêng lẻ (các chương trình) không thuộc nhân và chỉ chạy khi cần thiết. Mỗi chương trình con ñều ñược các chương trình con khác “nhìn thấy” và ñược gọi nếu cần.3. Song nhân lớn thì chiếm nhiều bộ nhớ. là chế ñộ mà chương trình thực hiện trong ñó có ñầy ñủ quyền truy cập và ñiều khiển phần cứng máy tính. tổ chức nhân lớn ảnh hưởng tới tính mềm dẻo. Việc quy ñịnh chế ñộ cụ thể phụ thuộc vào một bit ñặc biệt trong CPU.6 :Cấu trúc nguyên khối Khi chương trình ứng dụng cần dùng tới các dịch vụ của hệ ñiều hành. Phần này sẽ ñề cập tới một số kiểu tổ chức hệ ñiều hành thường ñược sử dụng.3. Mỗi chương trình con có thể tự do gọi chương trình con khác khi cần thiết. Trình ứng dụng phải thông qua nhân ñể có thể tiếp cận tài nguyên hệ thống. Chế ñộ người dùng Chế ñộ ñặc quyền trình ứng dụng trình ứng dụng Hệ ñiều hành Hình 1. Trong phần tiếp theo. và do vậy có toàn quyền kiểm soát và quản lý tài nguyên phần cứng. Việc thay ñổi.1. trong ñó toàn bộ chương trình tạo thành từ các chương trình con. nhân của hệ ñiều hành ñược thực hiện trong chế ñộ ñặc quyền. Ngoài việc ñược giữ thường xuyên trong bộ nhớ.6. Hệ ñiều hành lúc ñó trở thành một tập hợp các thủ tục hay các chương trình con. kết hợp với nhau theo một cách nào ñó ñể tạo ra một hệ thống thống nhất là hệ ñiều hành. phần nào không. 1. còn gọi là chế ñộ ñặc quyền (privilege mode). ta sẽ xem xét một số cách tổ chức nhân và hệ ñiều hành. Ngoài ra. Các chương trình con ñược dịch. chương trình thực hiện trong chế ñộ người dùng bị hạn chế rất nhiều quyền truy cập và sử dụng phần cứng.

Nhân của Linux có thể mở rộng nhờ các môñun. việc xuất hiện lỗi sẽ làm cho cả hệ thống tê liệt. Do có chung không gian ñịa chỉ. Chương trình con này sẽ gọi thêm các chương trình con khác ñể thực hiện nhiệm vụ nếu cần thiết. Chẳng hạn khi ta sử dụng ñĩa CD-ROM. môñun chịu trách nhiệm ñiều khiển vào ra với ñĩa sẽ ñược tải vào bộ nhớ. Do toàn bộ hệ ñiều hành là một khối. 1. Việc liên kết các thành phần thành một khối lớn còn khiến cho nhân luôn có kích thước lớn.7: Cấu trúc hệ ñiều hành Linux Cấu trúc của Linux ñược thể hiện trên hình 1. Một ví dụ cho cách tổ chức kiểu này là hệ ñiều hành Linux. Lời gọi hệ thống ñược chuyển cho chương trình con tương ứng của hệ ñiều hành thực hiện. Ưu ñiểm lớn nhất của cấu trúc nguyên khối là tốc ñộ thực hiện cao. Kể cả các thành phần không cần ñến cũng ñược tải vào bộ nhớ cùng với các thành phần khác.6. nhược ñiểm của cách tổ chức này là thiếu tính mềm dẻo và khó làm cho hệ thống có ñộ tin cậy cao.3. Các môñun này ñược tải vào bộ nhớ khi cần và khỏi bộ nhớ khi không cần nữa. Nói cách khác môñun và các thành phần khác của nhân tạo thành một “khối” nhân mới lớn hơn. không phải chịu những phí tổn về thời gian và bộ nhớ (ngăn xếp) như khi chuyển ñổi giữa những mô ñun có không gian nhớ khác nhau. mỗi chương trình con trong khối lại có thể truy cập tới dữ liệu và chương trình con khác. Cấu trúc phân lớp Là cấu trúc trong ñó các thành phần của hệ ñiều hành ñược phân thành các lớp nằm 21 . Tuy nhiên.2. ðiều này ñảm bảo cho hệ ñiều hành giữ ñược cấu trúc nguyên khối mà vẫn không có các thành phần thừa. các mô ñun này nhập vào với nhân thành một khối có cùng không gian ñịa chỉ. các trình ứng dụng các trình tiện ích các trình quản lý hệ thống thư viện hệ thống nhân các môñun tải ñược Hình 1.7. Trong trường hợp không dùng tới có thể xoá các mô ñun khỏi nhân. Quá trình này không ñòi hỏi khởi ñộng lại máy ñể có thể sử dụng thiết bị mới thêm vào. Cách tổ chức này cho phép tân dụng ưu thế về tốc ñộ của cấu trúc khối ñồng thời ñảm bảo cho nhân không chứa các phần thừa.Giới thiệu chung dụng sẽ sử dụng lời gọi hệ thống do hệ ñiều hành cung cấp. Tuy là các mô ñun riêng nhưng khi ñã ñược tải vào bộ nhớ. người ta tổ chức các mô ñun có thể tải từ ñĩa và gắn vào nhân khi cần thiết. chương trình và dữ liệu của môñun tải vào có cùng không gian nhớ với nhân. ðể khắc phục các nhược ñiểm nói trên. trong một số hệ ñiều hành cấu trúc khối. Các môñun ñược tải vào trong hai trường hợp: khi người dùng sử dụng các lệnh insmod và rmmod hoặc khi nhân cần các môñun và tự tải vào cho mình. Sau khi ñược tải vào bộ nhớ. việc truy cập dữ liệu hoặc gọi chương trình con cần thiết ñược thực hiện nhanh chóng. Các hàm chứa trong môñun sẽ ñược các hàm khác của nhân “nhìn thấy” và gọi nếu cần.

ta có thể chuyển sang kiểm tra lớp trên.v. Do các dịch vụ lớp dưới cung cấp cho lớp trên ñã ñược kiểm tra. Trong quá trình truyền. Phần lớn các lớp chạy trong chế ñộ nhân hay chế ñộ ñặc quyền.8). Kết quả là thời gian phục vụ của hệ thống sẽ tăng . Yêu cầu này ñược truyền từ lớp trên xuống phần cứng thông qua các lớp trung gian. Do mỗi lớp chỉ có thể gọi lớp nằm ngay bên dưới. chương trình quản lý sao chép ra ñĩa phải nằm ở lớp thấp hơn lớp có chứa khối quản lý bộ nhớ ảo. Có như vậy. 8: CÊu tróc líp liệu. nên nếu xuất hiện lỗi. Sau khi ñã chắc chắn lớp dưới không có lỗi. Lớp trên chỉ quan tâm tới dịch vụ ñược cung cấp mà không cần quan tâm ñến các chi tiết này (hình 1. cần xác ñịnh và phân hoạch chính xác các lớp trên cơ sở chức năng và tương tác giữa các phần của hệ ñiều hành. Như vậy. lớp dưới cùng tương ứng với phần cứng. tạo ra lời gọi lớp dưới thích hợp. khối quản lý bộ nhớ mới có thể sử dụng ñược dịch vụ sao chép này. Mỗi khi chương trình ứng dụng yêu cầu thực hiện các thao tác (chẳng hạn vào/ra) thông qua lới gọi hệ thống. Lớp trên cùng là lớp các chương trình ứng dụng. Các chi tiết cụ thể của lớp dưới như cấu trúc dữ Tr×nh øng dông HÖ thèng file Liªn l¹c gi÷a c¸c tiÕn tr×nh Qu¶n lý vµo ra Qu¶n lý bé nhí Qu¶n lý tiÕn tr×nh PHÇN CøNG H×nh 1. Một nhược ñiểm nữa của cấu trúc phân lớp là tốc ñộ tương ñối thấp so với các kiểu cấu trúc khác. Tuy nhiên. khối quản lý bộ nhớ ảo của hệ ñiều hành thường sao chép một phần không gian nhớ ảo lên ñĩa. mã chương trình ñược che dấu khỏi lớp trên.v. khó khăn thường gặp khi thiết kế hệ ñiều hành có cấu trúc phân lớp là việc xác ñịnh số lớp cũng như phân chia thành phần cụ thể của mỗi lớp là không dễ dàng. Ví dụ. Trước tiên lớp dưới ñược kiểm tra ñộc lập với lớp trên. Việc dò lỗi và hoàn thiện ñược thực hiện từ dưới lên trên. có thể tập trung tìm lỗi trong lớp trên. Quá trình tìm lỗi ñược thực hiện từ dưới lên trên như vậy cho tới khi tới lớp trên cùng của hệ thống. thường là dưới dạng các hàm mà lớp trên có thể gọi. Dịch vụ này ñược cung cấp qua giao diện của lớp dưới. mỗi lớp sẽ có các xử lý riêng của mình như thêm ñịa chỉ. Việc liên lạc giữa các lớp ñược quy ñịnh sao cho mỗi lớp chỉ có thể liên lạc với lớp nằm kề bên trên và kề bên dưới.Giới thiệu chung chồng lên nhau. ðiểm ñặc biệt của cấu trúc phân lớp là mỗi lớp chỉ có thể sử dụng dịch vụ do lớp nằm ngay bên dưới cung cấp. Một ưu ñiểm rõ nét của cấu trúc phân lớp là cấu trúc này cho phép thực hiện dò lỗi và hoàn thiện hệ ñiều hành một cách tương ñối dễ dàng.

22 .

Việc chuyển ñổi giữa tiến trình khác nhau của các môñun cũng cần các chi phí về thời gian và tài nguyên khác (cất giữ trạng thái tiến trình của môñun này trước . mỗi lớp ñảm nhiệm nhiều chức năng hơn (như hệ ñiều hành OS/2). yêu cầu sẽ ñược chuyển cho môñun tương ứng thực hiện.6. cấu trúc phân lớp ít ñược sử dụng trong thời gian gần ñây.3. 1. cấu trúc phân lớp cũng ñược sử dụng nhưng với số lượng lớp ít. Cách tổ chức này cho phép giảm tối thiểu kích thước nhân (từ ñây sinh ra tên gọi vi nhân) cũng như kích thước các môñun. Các môñun có thể ñược xây dựng riêng biệt. Ở các hệ ñiều hành có cấu trúc kiểu này.3. Cách liên lạc như vậy chậm hơn nhiều so với cách gọi hàm trực tiếp. cài ñặt. Cách tổ chức này cho phép tận dụng một phần ưu ñiểm của việc phân lớp ñồng thời giảm ñược khó khăn trong khâu thiết kế và tổ chức tương tác giữa các lớp.9 cho ta hình dung về cấu trúc vi nhân và liên lạc giữa trình ứng dụng với các môñun của hệ ñiều hành thông qua vi nhân. Các môñun chỉ có thể liên lạc với nhau theo những cơ chế liên lạc nhất ñịnh (thường là bằng cách chuyển thông ñiệp . Lấy ví dụ môñun làm nhiệm vụ quản lý ñĩa và tệp. trình ứng dụng trình ứng dụng quản lý tệp quản lý mạng Vi nhân Hình 1.message passing) chứ không thể trực tiếp gọi hàm và truy cập dữ liệu của môñun khác. chẳng hạn yêu cầu ñọc hoặc ghi tệp.5 Cấu trúc vi nhân Nhược ñiểm của cấu trúc vi nhân là việc chuyển ñổi giữa các môñun ñòi hỏi thời gian và tài nguyên hệ thống. Hình 1. Các môñun này có thể hoạt ñộng trong chế ñộ ñặc quyền như phần nhân hoặc như các chương trình ứng dụng thông thường. Cấu trúc vi nhân Một kiểu cấu trúc khá phổ biến khác là cấu trúc vi nhân (microkernel). Việc xuất hiện sự cố trong môñun này chỉ ảnh hưởng tới việc ñọc ghi các tệp chứ không phá hoại toàn bộ hệ thống. sau ñó tải vào khi có nhu cầu.Giới thiệu chung lên so với trường hợp không phân lớp. Nhiệm vụ của nhân khi ñó chỉ là ñảm bảo liên lạc giữa chương trình ứng dụng và môñun cung cấp dịch vụ. khi các các môñun này có lỗi sẽ không ảnh hưởng tới toàn bộ hệ ñiều hành. Một ưu ñiểm khác là do ña số các môñun chạy trong chế ñộ người dùng như các chương trình ứng dụng thông thường. quản lý các môñun sẽ dễ dàng và mềm dẻo hơn so với cấu trúc khối. Việc thiết kế. phần nhân chỉ chứa các chức năng quan trọng nhất. Do các nhược ñiểm nêu trên. Mỗi khi có yêu cầu cung cấp dịch vụ từ chương trình ứng dụng. Các chức năng còn lại của hệ ñiều hành ñược tổ chức thành các môñun khác. Trong một số ít trường hợp.

23 .

MỘT SỐ HỆ ðIỀU HÀNH CỤ THỂ Việc lấy ví dụ từ những hệ ñiều hành cụ thể là rất cần thiết cho trình bày nội dung các phần tiếp theo (ngay trong các phần trên ta ñã gặp một số ví dụ). UNIX UNIX chiếm một vị trí quan trọng trong lịch sử phát triển hệ ñiều hành. Song song với các trường ñại học. Việc “mở cửa” ñối với UNIX như vậy ñã tạo ra vô số sửa ñổi và các phiên bản khác nhau. MINIX Sau một thời gian cung cấp mã nguồn và quyền sử dụng gần như miễn phí UNIX cho các trường ñại học. ñồng thời cung cấp mã nguồn hệ ñiều hành này. UNIX là hệ ñiều hành ñược sử dụng rộng rãi nhất tại các trường ñại học trong một thời gian dài. hỗ trợ mạng và giao thức truyền thông TCP/IP. Các hệ ñiều hành này có ứng dụng rộng rãi và một số ñược coi như những hệ ñiều hành tiêu chuẩn. Một số phần. UNIX ñã ñược sử dụng rộng rãi trong các nghiên cứu về hệ ñiều hành. chẳng hạn giao diện lập trình (system calls) của UNIX có mặt trong hầu hết các hệ ñiều hành hiện ñại (với một số sửa ñổi nào ñó). ðây là hệ ñiều hành ñầu tiên ñược viết gần như hoàn toàn trên ngôn ngữ bậc cao và ñiều này ñã tạo cho UNIX khả năng dễ dàng chuyển ñổi. Sau ñó UNIX ñược Ken Thomson và Dennis Ritchie (tác giả ngôn ngữ C) viết lại chủ yếu bằng C. Các hệ ñiều hành ví dụ sẽ ñược giới thiệu sơ lược trong phần này. Các ví dụ ñã và sẽ sử dụng ñược lấy từ một số hệ ñiều hành thông dụng. Một trường hợp ngoại lệ cũng ñược nhắc ñến là hệ ñiều hành MINIX.7. Từ phiên 24 . 1. Thực tế. hãng AT&T cho phép sử dụng UNIX vào mục ñích nghiên cứu và giảng dạy tại các trường ñại học của Mỹ. ðặc ñiểm cụ thể và các giải pháp kỹ thuật của từng hệ ñiều hành có thể gặp trong nội dung các chương sau khi ta xem xét các vấn ñề liên quan. Trong số khoảng mười nghìn dòng mã của phiên bản ñầu tiên này chỉ có khoảng một nghìn dòng viết trên assembly. hãng AT&T nhận ra giá trị thương mại của hệ ñiều hành này. hệ quản lý tệp tốc ñộ cao. Từ khi ra ñời. Mặc dù không có ứng dụng thực tế nhưng do kích thước nhỏ. Thành công của UNIX ñã ñem lại cho Ken Thomson giải thưởng Turing. HP UNIX. tin học mà trước ñó chỉ ñược trao cho các sản phẩm phần cứng. IBM AIX). giải thưởng lớn trong lĩnh vực ñiện tử. Phiên bản này chứa một số cải tiến quan trọng ñối với UNIX như bộ nhớ ảo. Hệ ñiều hành UNIX ñược Ken Thomson xây dựng tại phòng thí nghiệm Bell Laboratories của hãng AT&T vào cuối những năm bẩy mươi. ða số giải pháp kỹ thuật cho các hệ ñiều hành sau này có nguồn gốc từ UNIX. có thể sử dụng cho nhiều kiến trúc máy tính khác nhau. Sau một thời gian sử dụng hiệu quả tại Bell Labs.Giới thiệu chung khi chuyển sang tiến trình của môñun khác). Phiên bản UNIX ñáng chú ý nhất ñược xây dựng tại ðại học tổng hợp Caliornia ở Berkeley và có tên Berkeley Software Distribution (BSD). ñơn giản và mục ñích các tác giả khi xây dựng MINIX là phục vụ ñào tạo nên các ví dụ lấy từ MINIX rất phù hợp với nội dung cuốn sách này. một số nhà sản xuất máy tính cũng xây dựng những phiên bản UNIX cung cấp cho máy tính của mình (chẳng hạn SUN Solaris. Các phiên bản này thường tương thích với UNIX ở mức ñộ người dùng với một số sửa ñổi nhất ñịnh.

Tất cả những ai quan tâm có thể tham khảo và sửa ñổi mã nguồn ñể tạo ra các phiên bản Linux hoàn chỉnh hơn. kiến trúc thông dụng nhất hiện nay. Năm 1991. Linux ñược cung cấp hoàn toàn miễn phí cùng với mã nguồn. Hệ ñiều hành này ñược ñặt tên là Linux. Linux là hệ ñiều hành kiểu UNIX ñược sử dụng rộng rãi nhất cho các máy tính ñể bàn và máy tính cá nhân. Thành công của các phiên bản ñầu tiên cùng tính “mở” của Linux ñã thu hút ñược một số lượng lớn lập trình viên tham gia sửa ñổi. MINIX ñược viết trên C và dễ dàng chuyển ñổi giữa các kiến trúc máy tính khác nhau. MINIX tương thích với UNIX phiên bản 7 trên quan ñiểm người dùng (người dùng sẽ thấy việc sử dụng và chạy chương trình trên MINIX rất giống với trên UNIX) song không sử dụng mã nguồn của UNIX mà ñược viết lại hoàn toàn. một giáo sư người Hà lan rất nổi tiếng trong các nghiên cứu về hệ ñiều hành.3. ñã xây dựng một hệ ñiều hành và ñặt tên là MINIX (mini. sinh viên người Phần lan. do mục ñích của tác giả là giữ cho hệ ñiều hành càng ñơn giản càng tốt. Giống như MINIX. việc xây dựng hệ ñiều hành có các tính năng tương tự như UNIX xong không bị các hạn chế về bản quyền ràng buộc trở thành mục tiêu của một số sinh viên và các nhà nghiên cứu. theo ñó Linux ñược cung cấp miễn phí. lập trình viên và người dùng. MINIX ñã thu hút ñược sự quan tâm của một số ñông sinh viên. BSD 4. Linux tương thích với chuẩn POSIX 1003. Sun SPARC. coi ñây như bí mật của hãng. Hệ ñiều hành này chủ yếu chứa những phần mang tính minh hoạ cho các giải pháp kỹ thuật về hệ ñiều hành. MINIX ñược xây dựng với mục ñích minh họa. Tuy nhiên. MINIX không trở thành một hệ ñiều hành ñáp ứng ñược các nhu cầu của ña số người dùng máy tính. hoàn chỉnh hệ ñiều hành này. phục vụ ñào tạo. So với UNIX. Việc không có giấy phép sử dụng UNIX gây ra nhiều khó khăn trong giảng dạy thực hành và nghiên cứu về hệ ñiều hành. Linux Sau khi AT&T hạn chế sửa ñổi và thương mại hoá UNIX. ðến nay. Cho ñến nay phương châm phát triển MINIX vẫn là giữ cho hệ ñiều hành này nhỏ và dễ hiểu nhất ñối với sinh viên. dễ hiểu nhất. MINIX là một sản phẩm khá thành công trong số này. có thể sử dụng miễn phí và ñược cung cấp cùng mã nguồn. Ngay sau khi ra ñời. có thể sử dụng rộng rãi và tương thích UNIX. AT&T ngừng cung cấp quyền sử dụng mã nguồn. MINIX ñơn giản hơn rất nhiều.Giới thiệu chung bản 7 của UNIX. cùng mã nguồn. Một số lượng lớn các chú giải ñược cung cấp kèm với mã nguồn giúp cho việc nghiên cứu MINIX dễ dàng hơn. Cũng như UNIX.UNIX). Phiên bản ñầu tiên ñược viết cho IBM PC. ñã phát triển phiên bản MINIX với ý ñồ xây dựng một hệ ñiều hành thực thụ. Sau ñó MINIX ñã ñược chuyển ñổi thành công ñể chạy trên một số máy tính khác như Amiga. Một số lượng lớn chương trình ứng dụng cho Linux cũng ñược viết theo các ñiều kiện của GNU như vậy. nhiều chức năng hơn. Các phiên bản của Linux ñược cung cấp theo các ñiều khoản của GNU General Public License.1 (chuẩn lập trình cho UNIX) và chứa nhiều tính năng của các hệ UNIX System V. Macintosh. Tất cả mọi người ñều có quyền sửa ñổi và ñược công nhận quyền tác giả ñối với thành quả của mình nhưng không ñược phép thu tiền từ các sửa ñổi ñó. Linus Torvalds. Andrew Tanenbaum. Mã nguồn do ñó tương ñối ngắn và ñược viết sao cho dễ ñọc. Tuy nhiên . Trước tình hình trên.

25 .Linux ñược tối ưu hoá ñể có thể chạy trên các máy tính các nhân với các tài nguyên hạn chế.

Hệ ñiều hành MS-DOS ñã ñược xây dựng ñể làm việc với các máy tính như vậy. Nhiều giải pháp kỹ thuật trong MS-DOS có nguồn gốc từ UNIX như giao diện lập trình (các lời gọi hệ thống). bao gồm cả các giải pháp lấy từ UNIX. có giao diện ñồ họa dưới dạng cửa sổ và ñược dùng cho các ứng dụng trên PC yêu cầu ñộ ổn ñịnh cao. Tốc ñộ tính toán. ðây là một hệ ñiều hành ñơn giản. MS-DOS.v. 7 Khi mới ra ñời. 2000. Windows NT là hệ ñiều hành ña nhiệm.v.Giới thiệu chung MS-DOS MS-DOS là sản phẩm của hãng Microsoft và ñược trang bị cho những máy PC ñầu tiên của IBM theo thoả thuận của hãng này. Cần có một hệ ñiều hành ñầy ñủ tính năng hơn. thành công của máy tính IBM PC cùng với sự phổ biến của máy này ñã ñưa MS-DOS thành một trong những hệ ñiều hành ñược sử dụng rộng rãi trên thế giới. So với MS-DOS. Một số chức năng khác hoàn toàn không có như bảo mật. thích hợp với phần cứng mới. hỗ trợ mạng. dần dần trở nên không thích hợp. Windows 2000. Windows NT (NT là viết tắt của new technology .công nghệ mới) là một thành viên của họ hệ ñiều hành này. XP. Tuy nhiên. hỗ trợ nhiều tiến trình. ðể có thể chạy trên những máy tính các nhân thế hệ ñầu với tài nguyên hạn chế. Windows NT. máy tính cá nhân (PC) có các tài nguyên phần cứng rất hạn chế: CPU chậm.v. nhiều phiên bản MS-DOS ñã ra ñời ñể thích ứng với sự phát triển của phần cứng. hãng Microsoft ñã xây dựng họ hệ ñiều hành Windows cho máy tính cá nhân. Phiên bản ñầu tiên của Windows NT ñược phát hành năm 1993. Trước tình hình ñó. hỗ trợ mạng. không có hoặc chỉ có ñĩa cứng dung tích bé. bộ nhớ nhỏ (thường dưới 1MB). Vista. Càng về sau. bộ dịch lệnh. mặc dầu ñược cải tiến. 7 là các thành viên tiếp theo. Theo mức ñộ phát triển của máy tính các nhân. dung tích bộ nhớ cùng nhiều thông số khác của PC bắt ñầu có thể so sánh với máy tính lớn. Vista. ðây là hệ ñiều hành sử dụng nhiều kỹ thuật tiên tiến trong lĩnh vực hệ ñiều hành ñã ñược phát triển cho ñến thời ñiểm này. nhiều chức năng ñược rút gọn. khả năng máy tính các nhân càng ñược mở rộng.v. 26 . MS-DOS ñược xây dựng ñơn giản và có ít chức năng hơn nhiều so với hệ ñiều hành cho các máy lớn. cấu trúc phân cấp của thư mục. XP. có các chức năng bảo mật.

con trỏ lệnh chỉ tới lệnh ñang ñược thực hiện. trong khi tiến trình là thực thể ñộng.1. ta có thể vừa chạy trình duyệt vừa soạn thảo văn bản và nhận thư ñiện tử. Có thể coi mỗi tiến trình ñược cấp một máy tính ảo và thực hiện trên máy tính ảo ñó. dữ liệu. Loại thứ nhất là tiến trình của người dùng hay tiến trình ứng dụng. tiến trình là thực thể ñộng bao gồm các lệnh. tiến trình là một chương trình ñang trong quá trình thực hiện. Một chương trình ñang trong quá trình thực hiện ñược gọi là tiến trình. Thứ hai. Chương này sẽ trình bày khái niệm về tiến trình và những vấn ñề liên quan tới quản lý tiến trình của hệ ñiều hành. Các lệnh này không thay ñổi theo thời gian. hệ ñiều hành cần tạo môi trường cho chương trình thực hiện và quản lý các chương trình này. thời gian CPU ñể thực hiện lệnh. Tiến trình ñược sinh ra khi chương trình ñược tải vào bộ nhớ ñể thực hiện. tiến trình là một khái niệm liên quan chặt chẽ tới khái niệm máy ảo. Trong hệ thống có hai loại tiến trình. không thay ñổi theo thời gian. dữ liệu. có thể thực hiện nhiều phiên bản khác nhau của trình duyệt web cùng một lúc ñể xem các trang web khác nhau. Máy tính cũng cho phép thực hiện nhiều bản khác nhau của một chương trình cùng một lúc. Có hai ñặc ñiểm cho phép phân biệt tiến trình với chương trình. ví dụ bằng cách nháy chuột ñúp vào biểu tượng chương trình như trong Windows. CÁC KHÁI NIỆM LIÊN QUAN ðẾN TIẾN TRÌNH 2. ngăn xếp khác với tiến trình kia. Việc sử dụng thuật ngữ tiến trình cho phép phân ñịnh rõ ràng chương trình trong những trường hợp như vậy. 2. Chương trình là tập hợp các lệnh và dữ liệu chứa trong file gọi là file chương trình hoặc file thực hiện ñược (executable).1. ngăn xếp. Trong khi ñó. Ví dụ. Tiến trình là gì Theo ñịnh nghĩa trực quan và ñơn giản nhất. giúp cho việc quản lý của hệ ñiều hành dễ dàng hơn. ví dụ con trỏ lệnh luôn luôn thay ñổi tùy thuộc vào lệnh thực hiện là lệnh nào. mỗi tiến trình sẽ có con trỏ lệnh. ví dụ. các file mở. ðây là tiến trình sinh ra từ những thành phần của hệ ñiều hành ñể thực hiện các công việc khác nhau của hệ thống. Thứ nhất. Có thể xem các tiến trình hiện thời của Windows bằng cách gọi 27 . Như vậy. ða số máy tính hiện nay cho phép thực hiện nhiều chương trình khác nhau cùng một lúc. ví dụ file có ñuôi exe của Windows. Ngay cả trong trường hợp hai tiến trình ñược sinh ra từ cùng một chương trình. chương trình là một thực thể tĩnh. trong khi mỗi tiến trình ñược cấp một số tài nguyên như bộ nhớ ñể chứa tiến trình.1. ðể phục vụ hoạt ñộng này. Hầu hết các thành phần này ñều thay ñổi trong quá trình tiến trình tồn tại. Loại thứ hai là các tiến trình hệ thống. các cổng và thiết bị vào/ra. chương trình không sở hữu tài nguyên cụ thể. ñược sinh ra khi người dùng chạy chương trình ứng dụng.Quản lý tiến trình CHƯƠNG 2: QUẢN LÝ TIẾN TRÌNH Hoạt ñộng quan trọng nhất của máy tính là thực hiện các chương trình.

Theo cách ñơn giản nhất. Mô hình năm trạng thái tiến trình là mô hình ñược sử dụng rộng rãi nhất trong các hệ ñiều hành. tiến trình có thể thuộc những trạng thái khác nhau. có thể chia nhỏ và phân biệt nhiều trạng thái hơn nữa.Trạng thái chạy: lệnh của tiến trình ñược CPU thực hiện.Trạng thái sẵn sàng: tiến trình chờ ñược cấp CPU ñể thực hiện lệnh của mình. .Trạng thái kết thúc: tiến trình ñã kết thúc việc thực hiện nhưng vẫn chưa bị xóa. Trạng thái của tiến trình Là một thực thể ñộng. kết thúc. tiến trình thuộc một trong hai trạng thái: chạy và không chạy. chờ ñợi. 2. Ý nghĩa việc chuyển ñổi giữa các trạng thái.Quản lý tiến trình “Task manager” (bấm Ctrl-Alt-Del) và vào Tab “Process”. . Chẳng hạn. Có nhiều cách phân biệt trạng thái tiến trình. Linux cho phép xem danh sách tiến trình bằng cách gõ lệnh ps từ giao diện dịch lệnh. 28 . ví dụ chờ tín hiệu từ tiến trình khác hoặc chờ kết thúc quá trình vào/ra. hệ ñiều hành thường phân biệt năm trạng thái khác nhau của tiến trình: mới khởi tạo. Ý nghĩa cụ thể năm trạng thái như sau: . Sơ ñồ chuyển ñổi giữa các trạng thái ñược thể hiện trên hình 2.Trạng thái chờ ñợi: tiến trình chờ ñợi một sự kiện gì ñó xảy ra. Chạy là khi các lệnh của tiến trình ñược CPU thực hiện và không chạy là trường hợp ngược lại. ðiều ñộ CPU Mới khởi tạo Sẵn sàn g Ngắt Kết thúc vào/ra Vào/ra hoặc chờ sự kiện Chờ ñợi Kết thúc Chạy Hình 2. sẵn sàng. . ví dụ khi CPU ñang ñược phân phối cho tiến trình khác hoặc khi tiến trình phải dừng ñể chờ kết quả vào/ra. Cách sử dụng hai trạng thái tiến trình là quá ñơn giản và không ñủ ñể phản ánh ñầy ñủ thông tin về trạng thái tiến trình.1. Trên thực tế. .1.Trạng thái mới khởi tạo: tiến trình ñang ñược tạo ra.2.1. Trạng thái chờ ñợi còn ñược gọi là trạng thái bị phong tỏa (blocked). Việc chuyển trạng thái xảy ra trong những trường hợp nhất ñịnh. mặc dù tên gọi cụ thể từng trạng thái có thể thay ñổi trong hệ ñiều hành cụ thể. một số hệ ñiều hành sử dụng thêm trạng thái treo (suspended). trong ñó tiến trình dừng toàn bộ việc thực hiện hoặc thậm chí tạm bị chuyển từ bộ nhớ ra ñĩa. Sơ ñồ chuyển ñổi giữa các trạng thái của tiến trình Trong một số trường hợp. chạy.

.3.Số ñịnh danh của tiến trình: tiến trình ñược gắn một số ñịnh danh PID cho phép phân biệt với tiến trình khác. tiến trình hiện thời chuyển sang trạng thái sẵn sàng và chờ ñược cấp CPU ñể chạy tiếp.1. Số ñịnh danh này ñược hệ ñiều hành sử dụng ñể tìm vị trí tương ứng với tiến trình trong bảng tiến trình.Chạy → Sẵn sàng: hệ ñiều hành cấp phát CPU cho tiến trình khác do kết quả ñiều ñộ hoặc do xảy ra ngắt. chỉ chờ ñược cấp CPU ñể chạy. 29 . ñể quản lý các khối nhớ. tiến trình chuyển sang trạng thái chờ ñợi hoặc còn gọi là trạng thái bị phong tỏa (blocked). .Chờ ñợi → Sẵn sàng: khi sự kiện ñược chờ ñợi ñã xảy ra. hệ ñiều hành cần có các thông tin về tiến trình ñó. khi ñó tiến trình sẽ ñược chuyển từ trạng thái mới sang trạng thái sẵn sàng.Chạy → Kết thúc: tiến trình ñã thực hiện xong. hệ ñiều hành sử dụng số ñịnh danh ñể biết tiến trình nào ñang ñược cấp một khối nhớ cụ thể. PCB bao gồm các thông tin sau: . tiến trình ñược hệ ñiều hành cấp phát CPU và chuyển sang trạng thái chạy. Ví dụ. ñược chuyển sang trạng thái kết thúc trước khi chấm dứt sự tồn tại. Thông thường. viết tắt là PCB (Process Control Block) (lưu ý là tên gọi của khối này có thể thay ñổi tùy hệ ñiều hành cụ thể). Thông tin mô tả tiến trình ðể có thể quản lý tiến trình. .Mới khởi tạo → Sẵn sàng: tiến trình ñã ñược khởi tạo xong và ñã ñược tải vào bộ nhớ. Ví dụ. tiến trình sẽ ñược chuyển sang trạng thái sẵn sàng và chờ ñược phân phối CPU ñể chạy tiếp. . hay tiến trình thực hiện lời gọi hệ thống và phải chờ cho tới khi lời gọi hệ thống thực hiện xong.Trạng thái tiến trình: một trong năm trạng thái liệt kê ở phần trước. hoặc sử dụng ñể tham chiếu giữa các bảng khác nhau lưu thông tin liên quan ñến tiến trình. . tiến trình ñọc dữ liệu từ file và chỉ có thể thực hiện tiếp khi ñọc xong. Thông tin về tiến trình chứa trong PCB phụ thuộc vào từng hệ ñiều hành cụ thể. Trong trường hợp này.Sẵn sàng → Chạy: do kết quả ñiều ñộ của hệ ñiều hành.Quản lý tiến trình Ý nghĩa các chuyển ñối trạng thái như sau: . . 2.Chạy → Chờ ñợi: tiến trình chỉ có thể thực hiện tiếp khi một sự kiện nào ñó xẩy ra. Con trỏ ngăn xếp trỏ tới ñỉnh ngăn xếp hiện thời của tiến trình.Nội dung một số thanh ghi CPU: nội dung một số thanh ghi quan trọng thường ñược giữ trong PCB như: o Thanh ghi con trỏ lệnh: trỏ tới lệnh tiếp theo cần thực hiện o Thanh ghi con trỏ ngăn xếp: Mỗi tiến trình ñều có ngăn xếp ñể lưu tham số và tình trạng hàm khi thực hiện lời gọi hàm/thủ tục của chương trình. . Thông tin về tiến trình ñược lưu trong một cấu trúc dữ liệu gọi là khối quản lý tiến trình.

Thông tin phục vụ việc ñiều ñộ tiến trình: bao gồm thông tin về mức ñộ ưu tiên của tiến trình so với các tiến trình khác.2). hệ ñiều hành sử dụng bảng tiến trình chứa con trỏ tới PCB của toàn bộ tiến trình có trong hệ thống (xem hình 2. bù…) Ti?n tr?nh n o Các thanh ghi ña dụng khác. hệ ñiều hành sẽ sử dụng thông tin từ PCB ñể khôi phục lại nội dung các thanh ghi. cho phép tiến trình thực hiện lại từ trạng thái trước lúc bị dừng. có phần ?. Lý do phải lưu nội dung các thanh ghi này trong PCB là do tiến trình có thể bị chuyển khỏi trạng thái chạy ñể nhường chỗ cho tiến trình khác (chẳng hạn khi có ngắt).Thông tin về bộ nhớ của tiến trình: hệ ñiều hành cần biết tiến trình nằm ở ñâu trong bộ nhớ.v.v. thông tin loại này có thể gồm các bảng trang.2: Bảng tiến trình chứa con trỏ tới các PCB 30 . Hệ ñiều hành sử dụng những thông tin này ñể ñiều ñộ. Tùy mô hình tổ chức bộ nhớ cụ thể.Thông tin thống kê phục vụ quản lý: thông tin loại này thường ñược sử dụng phục vụ thống kê hoặc tính toán chi phí ñối với các hệ thống dùng chung (như khi ñi thuê máy tính) và bao gồm thông tin về thời gian sử dụng CPU. bảng ñoạn. tức là quyết ñịnh thứ tự và thời gian ñược cấp CPU của tiến trình. vị trí tiến trình trong các hàng ñợi. hệ ñiều hành cần biết vị trí các PCB. và có thể các thông tin khác như lượng tài nguyên tiến trình ñang sở hữu. ñịa chỉ cơ sở của tiến trình . . . các thiết bị vào ra tiến trình ñang sử dụng. ðể làm ñược ñiều này.Danh sách các tài nguyên khác: bao gồm danh sách các file ñang mở của tiến trình. Vị trí cụ thể trong bảng ñược xác ñịnh nhờ số ñịnh danh của tiến trình.v. 2. Khi tiến trình chạy trở lại.v. chia cho không. giới hạn thời gian. tài khoản của người sở hữu tiến trình . Bảng và danh sách tiến trình ðể quản lý. Con trỏ tới bảng tiến trình Bảng tiến trình PCB 1 PCB n Hình 2.1.4. .Quản lý tiến trình Ti?n tr?nh 1 Ti?n tr?nh 2 o Các thanh ghi ñiều kiện và thanhtr?nh 3 thái: chứa trạng thái sau khi Ti?n ghi trạng thực hiện các phép tính lôgic hoặc số học (như tràn số. .

3 là một số danh sách ñược hệ ñiều hành sử dụng như danh sách tiến trình sẵn sàng. chuyển ñổi giữa các tiến trình.3: Danh sách liên kết PCB thuộc các trạng thái khác nhau Trên hình 2. Trong phần này. hệ ñiều hành xem xét danh sách sẵn sàng ñể chọn ra tiến trình tiếp theo ñược cấp phát CPU. b) Tạo không gian nhớ cho tiến trình và PCB. mỗi danh sách bao gồm tiến trình có cùng trạng thái hoặc tiến trình ñang cùng chờ ñợi một tài nguyên nào ñó. . danh sách tiến trình ñang chờ ñợi tài nguyên cụ thể nào ñó. ñiều ñộ. Ví dụ. Các thao tác với tiến trình Hoạt ñộng quản lý tiến trình bao gồm một số công việc như tạo mới và kết thúc tiến trình. PCB của tiến trình ñang ở trạng thái sẵn sàng sẽ ñược liên kết vào danh sách sẵn sàng. Khi người dùng chạy chương trình. ñồng bộ hóa. PCB của các tiến trình ñang có trong hệ thống ñược liên kết thành thành một số danh sách. Tạo mới tiến trình Một tiến trình có thể tạo ra tiến trình mới bằng cách gọi lời gọi hệ thống tương ứng của hệ ñiều hành. Nếu tiến trình con tiếp tục tạo ra tiến trình mới thì dần dần sẽ có một cây tiến trình.3). Tùy theo cách tạo mới. ðang chạy PCB Sẵn sàng PCB PCB PCB Chờ ñợi ñọc ñĩa PCB PCB Hình 2. các PCB trong danh sách ñược liên kết với nhau (xem hình 2. Kích thước không gian nhớ ñược tính toán dựa trên thông tin về tiến trình mà hệ ñiều hành có. Danh sách ñược quản lý nhờ hai con trỏ trỏ tới PCB ñầu tiên và PCB cuối cùng trong danh sách. ðể tạo ra tiến trình mới. Khi ñiều ñộ. ví dụ Windows Explorer.1. 2. tiến trình tạo ra tiến trình con gọi là tiến trình cha.Quản lý tiến trình Ngoài ra. ta sẽ xem xét các thao tác tạo mới. Những nội dung khác sẽ ñược xem xét trong các phần sau. Tiến trình ñược tạo mới gọi là tiến trình con. hệ ñiều hành thực hiện một số bước sau: a) Gán số ñịnh danh cho tiến trình ñược tạo mới và tạo một ô trong bảng tiến trình. kết thúc và chuyển ñổi giữa các tiến trình. trình dịch lệnh của hệ ñiều hành. chính là tiến trình yêu cầu thực hiện lời gọi hệ thống ñể tạo mới tiến trình. ñể thuận tiện cho việc ñiều ñộ. ñảm bảo liên lạc giữa các tiến trình.5.

31 .

Quản lý tiến trình không gian nhớ của tiến trình con có thể chia sẻ hoặc không chia sẻ với tiến trình cha. con trỏ ngăn xếp và một số giá trị khác. tiến trình cha có quyền kết thúc tiến trình con do mình tạo ra và có thể sử dụng quyền này khi không cần tiến trình con nữa hoặc khi tiến trình con dùng quá nhiều tài nguyên.Do quản trị hệ thống hoặc hệ ñiều hành kết thúc. . .Bị tiến trình cha kết thúc. Khi tiến trình cha kết thúc.Do các lỗi. Thông tin về tiến trình hiện thời ñược gọi là 32 . ví dụ danh sách tiến trình mới khởi tạo.Tiến trình con là một bản sao của tiến trình cha. Tình huống này xảy ra ñối với hệ thống nhiều người dùng như các siêu máy tính và ñòi hỏi ñăng ký trước thời gian chạy cho tiến trình. Giới hạn thời gian cũng có thể dùng với các hệ thống tương tác trực tiếp và ñược tính bằng thời gian từ lúc người dùng yêu cầu cho tới khi tiến trình phản ứng lại. c) Khởi tạo PCB. ða số giá trị ban ñầu ñược gán theo mặc ñịnh (ví dụ giá trị không). . CPU có thể ñược chuyển từ tiến trình hiện thời sang thực hiện tiến trình khác hoặc mô ñun xử lý ngắt của hệ ñiều hành.Tiến trình con ñược tạo thành từ một chương trình mới. Cách này ñược thực hiện trong hệ ñiều hành UNIX bằng cách gọi lệnh fork(). Tiến trình thường kết thúc khi ñã thực hiện xong và ñược gọi là kết thúc bình thường. Có hai kiểu tạo mới tiến trình khác nhau: . con trỏ lệnh. trừ số ñịnh danh tiến trình. tiến trình có thể kết thúc trong một số trường hợp sau: . lỗi vào/ra như khi ghi ra ñĩa một số lần không thành công. Có nhiều loại lỗi có thể dẫn tới tiến trình bị kết thúc như: lỗi truy cập vùng bộ nhớ hoặc thiết bị vào/ra không ñược phép truy cập. Ngoài ra. ðây là cách tạo tiến trình ñược sử dụng trong Windows (bằng cách gọi lời gọi hệ thống CreateProcess()). . d) Liên kết PCB của tiến trình vào các danh sách quản lý. Chuyển ñổi giữa các tiến trình Trong quá trình thực hiện.Tiến trình yêu cầu nhiều bộ nhớ hơn so với lượng bộ nhớ hệ thống có thể cung cấp. tràn số. ñặt con trỏ trong bảng tiến trình trỏ tới PCB.Tiến trình thực hiện lâu hơn thời gian giới hạn. Trong những trường hợp như vậy. các lỗi số học như chia cho không. hệ ñiều hành cần lưu giữ các thông tin về tình trạng của tiến trình hiện thời ñể có thể khôi phục và thực hiện lại tiến trình từ ñiểm bị dừng. hệ ñiều hành cũng có thể xóa mọi tiến trình con và tiến trình hậu duệ của tiến trình cha. Kết thúc tiến trình Tiến trình có thể yêu cầu hệ ñiều hành kết thúc mình bằng cách gọi lời gọi hệ thống exit(). Thông thường. Ví dụ khi xảy ra các tình huống như bế tắc (xem phần về bế tắc). . Hệ ñiều hành gán giá trị cho các thành phần của PCB. tức là có cùng phần mã chương trình và phần dữ liệu.

Trong trường hợp như vậy. những thông tin này có thể khác nhau. Ngữ cảnh cần lưu khi ñó sẽ bao gồm những thông tin có thể bị hàm xử lý ngắt làm thay ñổi. chẳng hạn do kết quả ñiều ñộ tiến trình. Ngắt là kết quả của các sự kiện bên ngoài tiến trình (gọi là ngắt ngoài) hoặc do lỗi phát sinh trong bản thân tiến trình (gọi là ngắt trong). sau ñó quay lại thực hiện tiếp tiến trình hiện thời. CPU sẽ chuyển sang thực hiện mô ñun xử lý lỗi của hệ ñiều hành. Ví dụ tiến trình có thể gọi lệnh ñọc file của hệ ñiều hành. hệ thống cần thực hiện một số bước liên quan tới việc lưu và khôi phục ngữ cảnh. ñược sinh ra do ñồng hồ của hệ thống sau những khoảng thời gian nhất ñịnh và thường ñược sử dụng ñể phân phối CPU cho tiến trình khác sau khi tiến trình hiện thời ñã chạy hết khoảng thời gian ñược phân bổ. thông tin về bộ nhớ …) ñược lưu vào PCB. Khi kết thúc ngắt. Việc chuyển tiến trình xảy ra trong hai trường hợp sau: 1) Khi có ngắt. do vậy. chuyển liên kết PCB của tiến trình vào danh sách ứng với trạng thái mới. việc chuyển giữa tiến trình. Vấn ñề ở ñây là ngữ cảnh phải bao gồm những thông tin nào ? Nói cách khác. cập nhật nội dung thanh ghi và trạng thái CPU bằng thông tin lấy từ PCB của tiến trình mới ñược chọn. hệ thống có thể chuyển sang thực hiện tiến trình khác. việc chuyển ñổi ngữ cảnh sẽ bao gồm thêm một số thao tác khác như: thay ñổi trạng thái tiến trình. cụ thể là nội dung các thanh ghi và trạng thái CPU. sau khi thực hiện ngắt. Như vậy. Khi tiến trình ñược cấp phát CPU ñể thực hiện trở lại. Trong trường hợp ñơn giản nhất. Trước khi chuyển sang thực hiện tiến trình khác. Việc chuyển tiến trình. Một số loại ngắt ngoài thông dụng bao gồm: ngắt do ñồng hồ. Do kết quả các lệnh như vậy. 2) Khi tiến trình gọi lời gọi hệ thống. ví dụ khi người dùng gõ bàn phím hoặc khi kết thúc ñọc dữ liệu từ ñĩa. ngắt vào/ra. hệ thống chuyển sang thực hiện ngắt vào/ra. Trong trường hợp phức tạp hơn. do vậy. thông tin nào phải ñược cập nhật và lưu vào PCB khi chuyển tiến trình? Tùy từng trường hợp cụ thể. giá trị các thanh ghi và trạng thái CPU ñược cập nhật lại từ PCB và tiến trình có thể thực hiện lại từ vị trí trước khi bị ngắt. ngữ cảnh sẽ ñược khôi phục từ PCB vào thanh ghi và những bảng tương ứng. ngữ cảnh của tiến trình ñược chứa trong PCB. ñể chuyển tiến trình. . cập nhật PCB của tiến trình mới ñược chọn. ñòi hỏi thời gian cùng với tài nguyên hệ thống và có thể ảnh hưởng tới tốc ñộ nếu diễn ra quá thường xuyên. Như ñã nói ở trên.Quản lý tiến trình ngữ cảnh (context) của tiến trình. còn ñược gọi là chuyển ñổi ngữ cảnh. Những thông tin này ñược lưu vào các vùng tương ứng trong PCB. hệ thống sẽ chuyển từ tiến trình gọi lời gọi hệ thống sang thực hiện hàm xử lý lời gọi hệ thống nằm trong thành phần hệ ñiều hành. cập nhật thông tin thống kê trong PCB. ngữ cảnh (bao gồm nội dung các thanh ghi. Ngắt trong là ngắt sinh ra khi có các lỗi nghiêm trọng hoặc những tình huống khiến tiến trình không thể thực hiện tiếp.

33 .

mà tiến trình có thể dùng ñể phục vụ nhu cầu của mình. Hệ ñiều hành hiện ñại thường cho phép tách riêng vai trò thực hiện lệnh của tiến trình. tại mỗi thời ñiểm chỉ có một dòng ñược thực hiện. Trong các hệ ñiều hành trước ñây. Các lệnh của tiến trình ñược thực hiện theo một thứ tự nào ñó phụ thuộc vào chương trình. Minh họa khái niệm dòng trong tiến trình ñược thể hiện trên hình 2. Dòng thực hiện là gì Trong phần trước. tiến trình ñược cấp một số tài nguyên như bộ nhớ. tức là một chuỗi lệnh ñược cấp phát CPU ñể thực hiện ñộc lập ñược gọi là một dòng thực hiện. thiết bị vào/ra. nhưng mỗi thời ñiểm vòng ñời của tiến trình chỉ có thể tương ứng với một ñiểm nhất ñịnh trong chuỗi lệnh ñược thực hiện. có thể ñộc lập với vai trò sở hữu tài nguyên.4. ðây là thuật ngữ chưa có cách dịch thống nhất sang tiếng Việt. Mỗi ñơn vị thực hiện của tiến trình. Với vai trò ñơn vị xử lý. hệ ñiều hành sẽ quan tâm tới vai trò ñơn vị xử lý của tiến trình. DÒNG Dòng thực hiện (thread). Hệ ñiều hành hiện nay thường hỗ trợ ña dòng (multithreading). Hình 2.2. ta ñã thấy tiến trình có thể ñược xem xét từ hai khía cạnh: thứ nhất. Tài liệu tiếng Việt hiện nay sử dụng một số thuật ngữ khác nhau cho dòng như: dòng. Khi cấp phát CPU. các file mở. có ảnh hưởng lớn tới việc tổ chức và quản lý tiến trình. ñối với máy tính với một CPU. Trong tài liệu này. và tình huống rẽ nhánh cụ thể trong khi thực hiện.Quản lý tiến trình 2. mỗi tiến trình chỉ tương ứng với một ñơn vị xử lý duy nhất.2. gọi tắt là dòng. Với vai trò sở hữu tài nguyên. ðiều này có nghĩa là tiến trình không thể thực hiện nhiều hơn một công việc cùng một lúc. tiểu trình. 2. nhưng các dòng sẽ lần lượt ñược phân phối CPU tương tự cách chia sẻ thời gian giữa các tiến trình). tiến trình là một ñơn vị sở hữu tài nguyên.1. chúng tôi sẽ thống nhất sử dụng “dòng” cho khái niệm “thread”. và thứ hai: tiến trình là một ñơn vị thực hiện công việc tính toán xử lý. tiến trình ñược cấp CPU ñể thực hiện các lệnh của mình. luồng. tức là cho phép nhiều chuỗi lệnh ñược thực hiện cùng lúc trong phạm vi một tiến trình (cần lưu ý.4: Tiến trình và dòng 34 . dữ liệu. là một khái niệm quan trọng trong các hệ ñiều hành hiện ñại.

trong các hệ thống không sử dụng ña dòng. Khi tiến trình thực hiện. Dòng cũng có trạng thái riêng như chạy. giá trị các thanh ghi. mỗi dòng còn có ngăn xếp riêng của mình. Dòng nhận yêu cầu sau ñó lại ñược giải phóng ñề chờ nhận yêu cầu khác. tiến trình vẫn là ñơn vị ñược hệ ñiều hành sử dụng ñể phân phối tài nguyên. Phần cài trên các ñại lý (client) sẽ liên lạc với phần trung tâm (server) ñể nhận dữ liệu và gửi các yêu cầu ñặt. Ưu ñiểm chính của cách tiếp cận nhiều dòng là quá trình tạo ra dòng mới nhanh hơn nhiều so với tạo ra tiến trình mới. ðối với mô hình ña dòng.Quản lý tiến trình Việc sử dụng nhiều dòng có thể minh họa qua một số trường hợp sau. tiến trình sẽ có khối quản lý tiến trình PCB chứa ñầy ñủ thông tin về trạng thái tiến trình. ðến ñây có sự khác biệt giữa tiến trình ñơn dòng và tiến trình ña dòng như thể hiện trên hình 2. tất cả dòng của một tiến trình chia sẻ không gian nhớ và tài nguyên của tiến trình ñó.5. mỗi dòng cần có khả năng quản lý con trỏ lệnh. Trình duyệt web thông dụng như IE hay Firefox ñều cho phép vừa tải dữ liệu trang web về vừa hiển thị nội dung trang và phần ảnh ñể tránh cho người dùng không phải chờ ñợi cho ñến khi tải ñược toàn bộ dữ liệu. sẵn sàng. . dùng cho trường hợp thực hiện chương trình con. . Khi chuyển ñổi tiến trình. ðấy chính là cách những hệ thống trước ñây sử dụng. trong mô hình ña dòng. server sẽ tạo ra một dòng mới và chuyển yêu cầu cho dòng này xử lý. Trong khi một dòng ñang tải dữ liệu thì dòng khác hiển thị dữ liệu ñã nhận ñược. các mảng) của tiến trình. ðể phục vụ nhiều client cùng một lúc. Nếu một dòng thay ñổi nội dung của biến nào ñó. giữ vé. Lấy ví dụ hệ thống bán vé máy bay. nội dung thanh ghi. có thể là không gian nhớ ảo. ðể làm ñược ñiều này. Các dòng có cùng không gian ñịa chỉ và có thể truy cập tới dữ liệu (các biến. phần dữ liệu của tiến trình. bị khóa. Ngoài ra. Hiện nay. Những thông tin này ñược chứa trong khối quản lý dòng. Một minh họa khác là những ứng dụng phải thực hiện ñồng thời một số công việc tương tự nhau. server sẽ phải sinh ra rất nhiều tiến trình. những thông tin này sẽ ñược lưu vào PCB như ñã nói ở trên. Mỗi tiến trình sẽ sở hữu chung một số số tài nguyên bao gồm: . Tiến trình cũng có ngăn xếp của mình ñể chứa tham số và trạng thái hàm/thủ tục/chương trình con khi thực hiện chương trình con. thay vì chứa trong PCB chung cho cả tiến trình.Không gian nhớ của tiến trình. 2. Trong mô hình ñơn dòng.2. trình duyệt ñược tổ chức thành một số dòng thực hiện song song với nhau. thiết bị hoặc cổng vào/ra. Ngoài ra còn một số ưu ñiểm khác sẽ ñược phân tích trong phần sau. ñược sử dụng ñể chứa phần chương trình (các lệnh). do mỗi dòng có chuỗi thực hiện riêng của mình. ðây là không gian nhớ lôgic. Như vậy. Khi nhận ñược yêu cầu.2. mỗi tiến trình phục vụ một client. Tiến trình của server duy trì một dòng làm nhiệm vụ nhận yêu cầu từ phía client. Tài nguyên của tiến trình và dòng Trong hệ thống cho phép ña dòng.Các tài nguyên khác như file do tiến trình mở. tiến trình sẽ làm chủ nội dung các thanh ghi và con trỏ lệnh của mình. chẳng hạn những hệ thống client-server trong ñó một server phải phục vụ nhiều client. Cùng một thời ñiểm có thể có rất nhiều client cùng liên lạc với server. các hệ thống xây dựng trên hệ ñiều hành hiện ñại sử dụng mô hình ña dòng ñể giải quyết vấn ñề loại này.

35 .

mô hình nhiều dòng trong một tiến trình có những ưu ñiểm chính sau ñây: 1) Tăng hiệu năng và tiết kiệm thời gian.Quản lý tiến trình dòng khác sẽ nhận ra sự thay ñổi này khi ñọc biến ñó. nhờ vậy. Nhờ mô hình ña dòng. Ưu ñiểm của mô hình ña dòng So với cách tổ chức tiến trình chỉ chứa một dòng. nhờ vậy tốn ít thời gian hơn nhiều. do ngữ cảnh của dòng ít thông tin hơn. 3) Tăng tính ñáp ứng. Việc chuyển ñổi dòng cũng nhanh hơn chuyển ñổi dòng. Trong một số hệ ñiều hành. Việc tạo. Các dòng của một tiến trình dùng chung không gian ñịa chỉ và tài nguyên. ví dụ bằng cách ghi và ñọc vào những biến (vùng bộ nhớ) chung. Việc tăng tính ñáp ứng rất quan trọng ñối với hệ thống tương tác trực tiếp. . giải phóng bộ nhớ và tài nguyên của tiến trình. và sử dụng một dòng khác ñể tiếp nhận và xử lý yêu cầu của người dùng. 2) Dễ dàng chia sẻ tài nguyên và thông tin. chương trình dữ liệu tài nguyên khác ch??ng d? li?u t?i nguy?n tr?nh l? d?ng kh?c khối quản lý tiến trình PCB kh?i qu?n ngăn xếp ng?n x?p kh?i qu?n l? d?ng ng?n x?p kh?i qu?n l? d?ng ng?n x?p Tiến trình ñơn dòng Tiến trình nhiều dòng Hình 2. tăng khả năng ñáp ứng.5: Mô hình ñơn dòng và ña dòng 2. Tính ñáp ứng (responsiveness) là khả năng tiến trình phản ứng lại với yêu cầu của người dùng hoặc tiến trình khác. Nhờ cách tổ chức này. do vậy tốn thời gian. Tài nguyên dùng chung cho phép dòng dễ dàng liên lạc với nhau. tránh cho người dùng cảm giác tiến trình bị treo. thời gian tạo mới dòng ít hơn vài chục lần so với tạo mới tiến trình.3. tiến trình có thể sử dụng một dòng ñề thực hiện những thao tác ñòi hỏi nhiều thời gian như ñọc file dài. mô hình ña dòng có một số ưu ñiểm như sẽ phân tích trong phần sau. Do dòng dùng chung tài nguyên với tiến trình nên tạo và xóa dòng không ñòi hỏi những công ñoạn này.2. xóa tiến trình ñòi hỏi cấp phát.

36 .

Bên cạnh ñó. a) Dòng mức người dùng. không phụ thuộc vào phương thức ñiều ñộ của hệ ñiều hành.Thứ ba. một dòng chịu trách nhiệm phần âm thanh.2. ta ñã xem xét khái niệm dòng và lợi ích của việc sử dụng mô hình tiến trình với nhiều dòng.4. Dòng mức người dùng và dòng mức nhân Ở trên. Thư viện hỗ trợ dòng thường bao gồm các hàm tạo. cụ thể là dòng ñược tạo ra và quản lý như thế nào? Nhìn chung. các dòng có thể chạy song song trên những CPU khác nhau. Dòng mức người dùng ñược tạo ra và quản lý không có sự hỗ trợ của hệ ñiều hành. Do hệ ñiều hành không biết về sự tồn tại của dòng mức người dùng. . sử dụng dòng mức người dùng bị ảnh hưởng bởi một số nhược ñiểm dưới ñây : .Thứ hai. Trong khi ñó.a). hệ ñiều hành không biết về sự tồn tại của những dòng như vậy. dòng mức nhân ñược tạo ra nhờ hệ ñiều hành và ñược hệ ñiều hành quản lý. Một số chương trình có thể tổ chức dễ dàng dưới dạng nhiều dòng thực hiện ñồng thời. ðiển hình là những chương trình bao gồm nhiều thao tác khác nhau cần thực hiện ñồng thời. Ví dụ. xóa dòng. trình ứng dụng có thể ñiều ñộ dòng theo ñặc ñiểm riêng của mình. hàm tạo liên lạc với dòng khác và hàm cho phép lưu/khôi phục ngữ cảnh của dòng. Việc phân phối CPU ñược thực hiện cho cả tiến trình thay vì cho từng dòng cụ thể (xem hình 2. Dòng mức người dùng do trình ứng dụng tự tạo ra và quản lý. một dòng chịu trách nhiệm phần ñồ họa. ví dụ như khi lập trình trên Java. một chương trình thể hiện một vật chuyển ñộng và phát ra âm thanh có thể tổ chức thành hai dòng riêng. hay chương trình ñòi hỏi vào/ra từ nhiều nguồn và ñích khác nhau. 2. do dòng ñược tạo ra và quản lý trong không gian người dùng nên việc chuyển ñổi dòng không ñòi hỏi phải chuyển sang chế ñộ nhân và do vậy tiết kiệm thời gian hơn.6. . hệ ñiều hành vẫn coi tiến trình như một ñơn vị duy nhất với một trạng thái tiến trình duy nhất. Việc sử dụng dòng mức người dùng có một số ưu ñiểm sau: . trình ứng dụng sử dụng thư viện do ngôn ngữ lập trình cung cấp. Trong hệ thống nhiều CPU. có thể sử dụng dòng mức người dùng cả trên những hệ ñiều hành không hỗ trợ ña dòng bằng cách bổ sung thư viện dòng mà các ứng dụng có thể dùng chung. ðể tạo ra dòng mức người dùng. ñồng bộ dòng. thiết lập mức ưu tiên và ñiều ñộ dòng. 5) Thuận lợi cho việc tổ chức chương trình. có thể tạo ra và quản lý dòng ở hai mức: mức người dùng và mức nhân.Khi một dòng của tiến trình gọi lời gọi hệ thống và bị phong tỏa (tức là phải ñợi cho 37 .Quản lý tiến trình 4) Tận dụng ñược kiến trúc xử lý với nhiều CPU.Thứ nhất. Dòng mức nhân còn ñược gọi là các tiểu trình ñể nhấn mạnh sự hỗ trợ trực tiếp của hệ ñiều hành tương tự như ñối với tiến trình. Tiếp theo ta sẽ xem xét vấn ñề triển khai. nhờ vậy tăng ñược tốc ñộ xử lý chung của tiến trình.

Có một số thư viện hỗ trợ dòng mức người dùng ñược sử dụng trên thực tế. thì toàn bộ tiến trình sẽ bị phong tỏa và phải ñợi cho tới khi lời gọi hệ thống thực hiện xong. chế ñộ người dùng chế ñộ nhân P chế ñộ người dùng chế ñộ nhân a) Mô hình mức người dùng P b) Mô hình mức nhân chế ñộ người dùng chế ñộ nhân dòng mức người dùng dòng mức nhân P P c) Mô hình kết hợp tiến trình Hình 2. Như vậy. .Cách tổ chức này không cho phép tận dụng kiến trúc nhiều CPU. dòng mức người dùng không cho phép tận dụng ưu ñiểm về tính ñáp ứng của mô hình ña dòng. Do hệ ñiều hành phân phối CPU cho cả tiến trình chứ không phải từng dòng cụ thể nên tất cả các dòng của tiến trình phải chung nhau một CPU thay vì thực hiện song song trên nhiều CPU khác nhau.Quản lý tiến trình tới khi thực hiện xong lời gọi hệ thống).6: Mô hình sử dụng dòng mức người dùng và dòng mức nhân b) Dòng mức nhân Dòng mức nhân ñược hệ ñiều hành tạo ra và quản lý. trong ñó có thể kể ñến Green threads cho hệ ñiều hành Solaris và thư viện GNU Portable threads. Hệ ñiều hành sẽ cung cấp giao diện lập trình bao gồm một số lời gọi hệ thống mà trình ứng dụng có thể gọi ñể yêu cầu 38 .

tại mỗi thời ñiểm chỉ một tiến trình ñược cấp CPU ñể thực hiện. CPU. tùy thuộc vào phương pháp ñiều ñộ cụ thể. Số lượng dòng mức nhân phụ thuộc vào hệ thống cụ thể. chúng ta sẽ tập trung vào vấn ñề ñiều ñộ ñối với CPU. c) Kết hợp dòng mức người dùng và dòng mức nhân Có thể kết hợp sử dụng dòng mức người dùng với dòng mức nhân. Bài toán ñiều ñộ ñược ñặt ra với mọi dạng tài nguyên khác nhau. Cụ thể là việc sử dụng dòng mức nhân cho phép tăng tính ñáp ứng và khả năng thực hiện ñồng thời của các dòng trong cùng một tiến trình. Nhược ñiểm chủ yếu của dòng mức nhân so với dòng mức người dùng là tốc ñộ. Theo cách tổ chức này. Tùy thuộc vào số lượng CPU. kể cả trong trường hợp có chia sẻ thời gian hay không. Sau ñó. và sẽ không ñược ñề cập tới ở ñây. 2. trong thời gian bao lâu. dòng mức người dùng ñược tạo ra trong chế ñộ người dùng nhờ thư viện. Ưu ñiểm chủ yếu của dòng mức nhân là khắc phục ñược các nhược ñiểm của dòng mức người dùng. ðiều ñộ (scheduling) hay lập lịch là quyết ñịnh tiến trình nào ñược sử dụng tài nguyên phần cứng khi nào. nhiều tiến trình có thể tồn tại và thực hiện cùng một lúc. ñồng thời ñáp ứng tốt hơn yêu cầu tính toán của người dùng. bộ nhớ…. hệ ñiều hành có thể phân phối CPU cho dòng khác thực hiện. một số dòng có thể chạy song song với nhau. Khái niệm ñiều ñộ Trong hệ thống cho phép ña chương trình. gọi là ñiều ñộ CPU.1. 39 . Hệ ñiều hành Windows và Linux là hai ví dụ trong việc hỗ trợ dòng mức nhân như vậy. chẳng hạn hệ thống nhiều CPU sẽ có nhiều dòng mức nhân hơn. Một trong những vấn ñề cơ bản khi thực hiện ña chương trình là vấn ñề ñiều ñộ. Kỹ thuật ña chương trình có nhiều ưu ñiểm do cho phép sử dụng CPU hiệu quả. dòng mức nhân có thể ñược cấp CPU khác nhau ñể thực hiện song song. hay là ñiều ñộ tiến trình. Trình ứng dụng có thể tạo ra rất nhiều dòng mức người dùng. việc ñiều ñộ thường phức tạp hơn. Việc kết hợp dòng mức người dùng với dòng mức nhân cho phép kết hợp ưu ñiểm của hai phương pháp riêng lẻ. dòng mức người dùng ñược ánh xạ lên một số lượng tương ứng hoặc ít hơn dòng mức nhân. Như vậy ñiều ñộ tiến trình là quyết ñịnh thứ tự và thời gian sử dụng CPU. chẳng hạn thiết bị vào ra. Trên hệ thống với nhiều CPU.3. ðIỀU ðỘ TIẾN TRÌNH 2. Việc tạo và chuyển dòng ñòi hỏi thực hiện trong chế ñộ nhân và do vậy cần một số thao tác ñể chuyển từ chế ñộ người dùng sang chế ñộ nhân và ngược lại. Hệ ñiều hành có thể chờ cho tới khi tiến trình không sử dụng CPU nữa hoặc chủ ñộng ñiều ñộ lại ñể chuyển CPU sang thực hiện tiến trình khác. ña chương trình cũng ñặt ra nhiều vấn ñề phức tạp hơn ñối với hệ ñiều hành. ðối với hệ thống bao gồm một CPU duy nhất.Quản lý tiến trình tạo/xóa dòng và thay ñổi tham số liên quan tới quản lý dòng.3. ðối với hệ thống nhiều CPU. Cũng có trường hợp hệ thống cho phép người lập trình ñiều chỉnh số lượng này. Trong phần này. Bên cạnh ñó. Ngoài ra khi có dòng bị phong tỏa.

Theo như tên gọi.2. dòng mức nhân là ñơn vị thực hiện ñược hệ ñiều hành cấp phát CPU chứ không phải tiến trình. hay khi tiến trình bị trao ñổi ra ñĩa (swapping) ñể nhường chỗ cho tiến trình khác. ðiều ñộ trung hạn cũng ảnh hưởng tới mức ñộ ña chương trình và ñược quyết ñịnh dựa trên mức ñộ ưu tiên cùng tình trạng hệ thống. ðiều ñộ trung hạn là quyết ñịnh tiến trình có ñược cấp bộ nhớ ñể thực hiện không. ðối với những máy tính lớn ñược sử dụng chung. trong hệ thống sẽ thêm tiến trình mới. ðiều ñộ dài hạn ñược thực hiện khi mới tạo ra tiến trình. tiến trình sẽ phải chờ tới thời ñiểm khác ñể ñược tạo ra và thực hiện. thuật ngữ ñiều ñộ tiến trình vẫn ñược sử dụng rộng rãi và ñược hiểu tương ñương với ñiều ñộ dòng. ðể thực hiện ñược. hệ ñiều hành cần quyết ñịnh có cho phép tải tiến trình vào bộ nhớ ñể thực hiện không. Hệ ñiều hành lựa chọn một tiến trình ñang trong bộ nhớ và sẵn sàng thực hiện ñể cấp phát CPU. ñiều ñộ ngắn hạn diễn ra thường xuyên. là ñối tượng ñược cấp CPU. Việc lựa chọn tiến trình ñược thực hiện theo một thuật toán nào ñó. Hệ thống hiện nay thường hỗ trợ dòng. Trong một số trường hợp như khi mới khởi tạo và bộ nhớ ñược nạp trang theo nhu cầu. ta phân biệt ñiều ñộ không phân phối lại (nonpreemptive) và ñiều ñộ 40 . người dùng ít cảm nhận ñược ảnh hưởng của ñiều ñộ dài hạn do hầu hết tiến trình ñều ñược chấp nhận tạo mới. Tuy nhiên. Trong máy tính cá nhân. trừ khi có giải thích cụ thể. và ñiều ñộ ngắn hạn. tức là số lượng tiến trình tối ña trong hệ thống. 2. Trong trường hợp này. ðiều ñộ ngắn hạn là quyết ñịnh tiến trình nào ñược cấp CPU ñể thực hiện. Ngược lại. chúng ta chỉ xem xét vấn ñề ñiều ñộ ngắn hạn. ñiều ñộ dài hạn ñóng vai trò quan trọng và rõ ràng hơn. Trong các phần tiếp theo. Việc ñiều ñộ ngắn hạn ñược thực ñối với những tiến trình ñang ở trạng thái sẵn sàng. ñiều ñộ dài hạn ñược thực hiện cho những khoảng thời gian dài và ít diễn ra nhất. tiến trình cần ñược tải vào bộ nhớ hoàn toàn. và việc ñiều ñộ ñược thực hiện ñối với tiến trình. hoặc một phần nếu sử dụng bộ nhớ ảo. nếu không nói gì thêm. Hình 2. ñiều ñộ tiến trình ñược hiểu là ñiều ñộ ngắn hạn hay ñiều ñộ CPU.7 minh họa quan hệ giữa trạng thái tiến trình và ba dạng ñiều ñộ trên. Các tiến trình ñã ñược tạo mới và ñược tải vào bộ nhớ do kết quả ñiều ñộ dài hạn và trung hạn ñược xếp vào hàng ñời ñể ñiều ñộ ngắn hạn. Trong những hệ thống trước ñây. Hệ ñiều hành quyết ñịnh xem tiến trình có ñược thêm vào danh sách ñang hoạt ñộng hay không.Quản lý tiến trình ðiều ñộ tiến trình và ñiều ñộ dòng. Nếu ñược chấp nhận. Các dạng ñiều ñộ gắn liền với việc chuyển tiến trình tự trạng thái này sang trạng thái khác. Ngược lại. ðiều ñộ dài hạn ảnh hưởng tới mức ñộ ña chương trình. Các dạng ñiều ñộ ðiều ñộ dài hạn và ngắn hạn Trong một số hệ thống. và do vậy việc ñiều ñộ ñược hệ ñiều hành thực hiện trực tiếp với dòng. ðiều ñộ có phân phối lại Tùy thuộc vào việc hệ ñiều hành có thể thực hiện ñiều ñộ khi một tiến trình ñang sử dụng CPU hay không. tiến trình là ñơn vị thực hiện chính. ñiều ñộ trung hạn chiếm vị trí ở giữa. ñiều ñộ tiến trình ñược phân chia thành một số mức khác nhau. ñiều ñộ trung hạn.3. bao gồm: ñiều ñộ dài hạn. Vì vậy.

Các phiên bản ñầu tiên của Windows là Windows 3. ðiều ñộ không phân phối lại còn gọi lại ñiều ñộ hợp tác (cooperative). So với ñiều ñộ không phân phối lại. không phụ thuộc vào hoạt ñộng của tiến trình. Do có phân phối lại. Lấy ví dụ hai tiến trình cùng sử dụng một mảng dữ liệu chung.7: Các dạng ñiều ñộ ðiều ñộ có phân phối lại là kiểu ñiều ñộ trong ñó hệ ñiều hành có thể sử dụng cơ chế ngắt ñể thu hồi CPU của một tiến trình ñang trong trạng thái chạy. tức là tiến trình ñang sử dụng CPU ñể thực hiện lệnh của mình. Với kiểu ñiều ñộ này. CPU có thể ñược thu hồi từ tiến trình thứ nhất ñể cấp cho tiến trình thứ hai khi chưa tiến 41 . do việc ñiều ñộ chỉ có thể thực hiện khi tiến trình thể hiện thái ñộ hợp tác và nhường lại CPU do không cần dùng nữa. các tiến trình khác sẽ không bao giờ ñược cấp CPU. hoặc tiến trình phải chuyển sang trạng thái chờ ñợi do thực hiện yêu cầu vào/ra hoặc lời gọi hệ thống. ðiều ñộ không phân phối lại là kiểu ñiều ñộ trong ñó tiến trình ñang ở trạng thái chạy sẽ ñược sử dụng CPU cho ñến khi xảy ra một trong các tình huống sau: tiến trình kết thúc.Quản lý tiến trình có phân phối lại (preemptive). ñiều ñộ có phân phối lại cũng làm cho vấn ñề quản lý tiến trình phức tạp hơn. ðiều ñộ dài hạn ðiều ñộ ngắn hạn Mới khởi tạo ðiều ñộ trung hạn Sẵn sàn g Kết thúc Chạy Chờ ñợi Hình 2. hoặc chờ ñợi tín hiệu ñồng bộ từ tiến trình khác. Tuy nhiên. cho phép thực hiện ña chương trình và chia sẻ thời gian ñúng nghĩa và tin cậy hơn. Trong trường hợp tiến trình không hợp tác và chiếm CPU vô hạn. Bên cạnh ñó. không cần chờ cho tới khi tiến trình ñang chạy kết thúc hoặc chuyển sang trạng thái chờ ñợi. NT và các phiên bản sau sử dụng ñiều ñộ có phân phối lại. ñiều ñộ có phân phối lại có nhiều ưu ñiểm hơn do hệ ñiều hành chủ ñộng hơn. hệ ñiều hành có thể phân phối lại CPU một cách chủ ñộng. ñặc biệt trong trường hợp các tiến trình chia sẻ dữ liệu dùng chung hoặc có cạnh tranh về tài nguyên. ví dụ khi sử dụng vòng lặp vô hạn không chứa lời gọi hệ thống. ñiều ñộ có phân phối lại ñòi hỏi phần cứng phải có bộ ñịnh thời gian (timer) và một số hỗ trợ khác. Chỉ có ñiều ñộ phân phối lại mới ñảm bảo chia sẻ thời gian thực sự.x sử dụng ñiều ñộ không phân phối lại. Windows 95.

và thời gian ñáp ứng của một tiến trình cụ thể phải ổn ñịnh. thời gian chờ ñợi. ðây là tiêu chí hướng tới người dùng và thường ñược sử dụng trong hệ thống tương tác trực tiếp. thời gian chờ ñợi. tiêu chí này mang tính trung bình và là một ñộ ño tính hiệu quả của hệ thống. thời gian chờ ñợi lớn hay nhỏ chịu ảnh hưởng trực tiếp của thuật toán ñiều ñộ CPU. trong khi ñó ba tiêu chí cuối là thời gian chờ ñợi và thời gian ñáp ứng càng nhỏ càng tốt. Hiệu suất sử dụng CPU. Một số tiêu chí chú trọng tới việc khai thác hiệu quả hệ thống trong khi một số tiêu chí tập trung nâng cao tính tiện lợi cho người dùng. có tiến trình cần nhiều thời gian. Tiêu chí này ñược tính bằng số lượng tiến trình thực hiện xong trong một ñơn vị thời gian. Riêng ñối với thời gian ñáp ứng. Thời gian này bằng tổng thời gian tải tiến trình. Ví dụ. Thời gian ñáp ứng. thời gian thực hiện tiến trình rất khác nhau. ðược tính bằng thời gian từ lúc có yêu cầu khởi tạo tiến trình tới khi tiến trình kết thúc. Ngoài ra những tiến trình giống nhau cần ñược ñối xử công bằng. Tuy nhiên. Tính bằng tổng thời gian tiến trình nằm trong trạng thái sẵn sàng và chờ ñược cấp CPU. tiêu chí quan trọng là ñảm bảo thời gian từ lúc nhận ñược yêu cầu cho tới khi hệ thống có phản ứng hay ñáp ứng ñầu tiên không quá lâu. hai tiêu chí ñầu tiên có giá trị càng lớn càng tốt. 2. Tỷ lệ phần trăm thời gian CPU trong trạng thái hoạt ñộng thay ñổi tùy hệ thống cụ thể. bên cạnh việc ñảm bảo giá trị ñáp ứng trung bình nhỏ cũng cần ñảm bảo ñể không tiến trình nào có thời gian ñáp ứng quá lâu. Mỗi thuật toán thường tốt cho một số trường hợp cụ thể tùy vào ñiều kiện hệ thống và tiêu chí ñiều ñộ.3. 42 . Hệ ñiều hành sử dụng thuật toán ñiều ñộ ñể lựa chọn tiến trình ñược cấp CPU tiếp theo. Trên thực tế. vào/ra dữ liệu. Có nhiều tiêu chí ñược sử dụng khi ñiều ñộ CPU và ñánh giá thuật toán. một yêu cầu quan trọng là ñảm bảo tính ổn ñịnh của hệ thống. chạy. Vòng ñời. thể hiện qua việc giá trị tiêu chí trong từng trường hợp cụ thể không lệch quá xa so với giá trị trung bình của tiêu chí ñó. Các yêu cầu này ñược thể hiện qua hai tiêu chí bổ sung sau: Tính dự ñoán ñược. ðối với hệ thống như vậy. Một trong những yêu cầu sử dụng hiệu quả hệ thống là cố gắng ñể CPU càng ít phải nghỉ càng tốt. Thời gian vòng ñời trung bình tiến trình. Nếu tiến trình thứ hai ñọc dữ liệu khi ñó sẽ nhận ñược dữ liệu không nhất quán.3. có tiến trình ít hơn. Các tiêu chí ñiều ñộ Các tiến trình trong trạng thái sẵn sàng ñược xếp vào hàng ñợi chờ ñược ñiều ñộ. Sau ñây là một số tiêu chí thường sử dụng: Lượng tiến trình ñược thực hiện xong. Thời gian chờ ñợi. không phụ thuộc vào tải của hệ thống. tức là chờ ñược cấp CPU ñể thực hiện. Lưu ý rằng. - - - - Trong số các tiêu chí nói trên. Bên cạnh những tiêu chí nói trên. người sử dụng phải nhận ñược ñáp ứng từ hệ thống trong một thời gian chấp nhận ñược và không bị thay ñổi lớn trong bất kể tình huống nào.Quản lý tiến trình trình thứ nhất chưa cập nhật xong dữ liệu.

ta xét ví dụ: cho 3 tiến trình với thứ tự xuất hiện và ñộ dài chu kỳ CPU như sau: Tiến trình P1 P2 P3 10 10 P1 4 P2 ðộ dài chu kỳ CPU 10 4 2 14 2 P3 Kết quả ñiều ñộ theo thuật toán FCFS thể hiện trên hình sau: Thời gian chờ ñợi của P1. khi CPU ñược giải phóng. dẫn tới tình trạng không tiến trình nào thực hiện ñược công việc của mình.67. ðể có thể sử dụng ñược trong những hệ thống chia sẻ thời gian. không tiến trình nào bị ñói tài nguyên hơn những tiến trình khác. hệ ñiều hành sẽ lấy tiến trình từ ñầu hàng ñợi và cấp CPU cho tiến trình ñó thực hiện. 2. P1. và 14. a. ðể minh họa. FCFS có thời gian chờ ñợi trung bình của tiến trình lớn do phải chờ ñợi tiến trình có chu kỳ CPU dài trong trường hợp những tiến trình như vậy nằm ở ñầu hàng ñợi. Tiến trình mới ñược xếp vào cuối hàng ñợi. Hệ ñiều hành xếp tiến trình sẵn sàng vào hàng ñợi FIFO. P3 lần lượt là 0. Kết quả là toàn hệ thống phải dừng lại chờ giải phóng CPU.Quản lý tiến trình Tính công bằng. P2. Sau ñây là những thuật toán tiêu biểu hoặc thường gặp nhất. Thời gian chờ ñợi trung bình = (0 + 10 + 14)/3 = 8. cả về nguyên tắc và cách thực hiện. Trong phần sau. Các thuật toán ñiều ñộ Nhiều thuật toán ñiều ñộ tiến trình ñược ñề xuất và sử dụng trên thực tế. P2.3. Sau khi tiến trình ñược cấp CPU. kể cả vào ra. Khi ñó thời gian chờ ñợi trung bình giảm xuống chỉ còn (6 + 2 + 0)/3 = 2. Có thể thấy thời gian chờ ñợi trung bình như vậy là rất lớn. ta sẽ sử dụng những tiêu chí trên khi xem xét thuật toán ñiều ñộ cụ thể. Tiến trình yêu cầu CPU trước sẽ ñược cấp CPU trước. tiến trình ñó sẽ sử dụng CPU cho ñến khi kết thúc hoặc phải dừng lại ñể chờ kết quả vào ra. Thuật toán FCFS thông thường là thuật toán ñiều ñộ không phân phối lại. chẳng hạn so với trường hợp tiến trình ñược cấp CPU theo thứ tự P3. Những tiến trình cùng ñộ ưu tiên phải ñược ñối xử như nhau. Mặc dù ñơn giản và ñảm bảo tính công bằng.4. thuật toán 43 . Cần lưu ý rằng việc tăng thời gian chờ ñợi CPU của tiến trình ảnh hưởng rất lớn tới hiệu suất chung của hệ thống do nhiều tiến trình phải dồn lại chờ một tiến trình trong khoảng thời gian quá lâu. Thuật toán ñến trước phục vụ trước ðến trước phục vụ trước (First Come First Served – viết tắt là FCFS) là phương pháp ñiều ñộ ñơn giản nhất. 10.

và 4. Trong trường hợp ngược lại. tiến trình sẽ giải phóng CPU và trả lại quyền ñiều khiển cho hệ ñiều hành. Giống như FCFS. Hệ ñiều hành thực hiện việc chuyển ñổi ngữ cảnh và chuyển tiến trình về cuối hàng ñợi sau ñó chọn một tiến trình ở ñầu và lặp lại quá trình trên. P3 lấy từ ví dụ ở phần trước và lượng tử thời gian có ñộ dài bằng 2. 6. Khi lượng tử lớn tới một mức nào ñó. Nếu lượng tử ngắn. ñiều ñộ quay vòng sẽ trở thành FCFS. Ngược lại. ðiều ñộ quay vòng tương tự FCFS nhưng có thể cơ chế phân phối lại bằng cách sử dụng ngắt của ñồng hồ. ðiều ñộ ưu tiên tiến trình ngắn nhất Một phương pháp ñiều ñộ cho phép giảm thời gian chờ ñợi trung bình là ñiều ñộ ưu tiên tiến trình ngắn nhất trước (Shortest Process First .Quản lý tiến trình ñến trước phục vụ trước ñược cải tiến ñể thêm cơ chế phân phối lại. P3 lần lượt là 6. Nếu tiến trình kết thúc chu kỳ sử dụng CPU trước khi hết thời gian lượng tử. hay còn có các tên gọi khác như công việc ngắn nhất trước (Shortest Job Fist).RR) là phiên bản sửa ñổi của FCFS ñược dùng cho các hệ chia sẻ thời gian. tiến trình chuyển sang trạng thái chạy. ðộ dài lượng tử nên lựa chọn lớn hơn thời gian cần thiết ñể tiến trình thực hiện một thao tác tương tác tiêu biểu hoặc. ðiều ñộ quay vòng cho phép cải thiện thời gian ñáp ứng của tiến trình so với FCFS nhưng vẫn có thời gian chờ ñợi trung bình tương ñối dài. tiến trình sẵn sàng ñược xếp vào hàng ñợi sao cho tiến trình ñến sau ñược thêm vào cuối hàng. thời gian ñáp ứng sẽ giảm. ñồng hồ sẽ sinh ngắt. ðiều ñộ quay vòng ðiều ñộ quay vòng (round robin .SPF). 2 P1 2 2 P2 4 2 P3 6 2 P1 8 2 P2 10 12 14 2 2 2 P1 P1 P1 Thời gian chờ ñợi của P1. lấy một tiến trình ở ñầu hàng ñợi và cấp CPU cho tiến trình. P2. việc chuyển ñổi tiến trình diễn ra thường xuyên ñòi hỏi nhiều thời gian hơn cho việc chuyển ñổi ngữ cảnh. Tiến trình ñang thực hiện phải dừng lại và quyền ñiều khiển chuyển cho hàm xử lý ngắt của hệ ñiều hành. Khi CPU ñược giải phóng. Ta sẽ xem xét thuật toán ñiều ñộ như vậy trong một phần sau. P2. Tuy nhiên. Thời gian chờ ñợi trung bình = (6 + 6 + 4)/3=5.33. Sau khi ñược cấp CPU. Hệ thống ñịnh nghĩa những khoảng thời gian nhỏ gọi là lượng tử thời gian (time quantum) hay lát cắt thời gian (time slice) có ñộ dài từ vài mili giây tới vài trăm mili giây tùy vào cấu hình cụ thể. lượng tử càng lớn càng tốn ít thời gian chuyển ñổi giữa các tiến trình nhưng tính ñáp ứng cũng kém ñi. tiến trình ngắn nhất tiếp theo (Shortest Process . c. khi hết ñộ dài lượng tử. b. hệ ñiều hành ñặt thời gian của ñồng hồ bằng ñộ dài lượng tử. Sau ñây là minh họa cho phương pháp ñiều ñộ này với ba tiến trình P1. Một vấn ñề quan trọng khi ñiều ñộ quay vòng là lựa chọn ñộ dài lượng tử thời gian. Tiến trình sẽ lần lượt ñược cấp CPU trong những khoảng thời gian như vậy trước khi bị ngắt và CPU ñược cấp cho tiến trình khác.

Next). Phương pháp ñiều ñộ này lựa chọn trong hàng ñợi tiến trình có chu kỳ sử dụng CPU 44 .

Trong trường hợp có nhiều tiến trình với chu kỳ CPU tiếp theo bằng nhau. hệ ñiều hành so sánh thời gian còn lại của tiến trình ñang chạy với thời gian còn lại của tiến trình mới xuất hiện. Có hai cách ñể giải quyết phần nào khó khăn này. ðiều ñộ ưu tiên tiến trình ngắn nhất trước là ñiều ñộ không có phân phối lại. tiến trình ñứng trước sẽ ñược chọn.Quản lý tiến trình tiếp theo ngắn nhất ñể phân phối CPU. Nếu một tiến trình ñược cấp CPU. Cách thứ hai là dự ñoán ñộ dài chu kỳ sử dụng CPU tiếp theo. Trong phần tiếp theo ta sẽ xem xét việc thêm cơ chế phân phối lại cho ñiều ñộ ưu tiên tiến trình ngắn nhất trước. Khi một tiến trình mới xuất hiện trong hàng ñợi. Xét ví dụ ñiều ñộ cho các tiến trình như ở phần trên nhưng sử dụng SPF. ñây là thời gian thực hiện cả ứng dụng chứ không phài một chu kỳ sử dụng CPU cụ thể. hệ ñiều hành sẽ thu hồi CPU của tiến trình ñang chạy và phân phối cho tiến trình mới. Lưu ý. ðiều ñộ ưu tiên thời gian còn lại ngắn nhất Phiên bản ưu tiên tiến trình ngắn nhất có thêm cơ chế phân phối lại ñược gọi là ñiều ñộ ưu tiên thời gian còn lại ngắn nhất trước (Shortest Remaining Time First – SRTF). 2 2 P3 4 P2 6 10 P1 Thời gian chờ ñợi trung bình = (6 + 2 +0)/3 = 2. tiến trình sẽ thực hiện cho tới khi không cần CPU nữa. Cách thứ nhất ñược áp dụng ñối với hệ thống xử lý theo mẻ như tại các trung tâm tính toán hiệu năng cao hiện nay. phương pháp này rất khó sử dụng trên thực tế do ñòi hỏi phải biết trước ñộ dài chu kỳ sử dụng CPU tiếp theo của tiến trình. Ưu ñiểm lớn nhất của SPF so với FCFS là thời gian chờ ñợi trung bình nhỏ hơn nhiều. Mặc dù ñiều ñộ ưu tiên tiến trình ngắn nhất có thời gian chờ ñợi trung bình tối ưu. d. Quản trị hệ thống căn cứ vào thời gian ñăng ký tối ña do lập trình viên cung cấp ñể xếp những ứng dụng có thời gian ñăng ký ngắn hơn lên trước. Cách dự ñoán ñơn giản nhất là dựa trên ñộ dài trung bình các chu kỳ CPU trước ñó ñể dự ñoán ñộ dài chu kỳ tiếp theo và ra quyết ñịnh cấp CPU. Nếu tiến trình mới xuất hiện có thời gian còn lại ngắn hơn. ðể minh họa cho phương pháp ñiều ñộ này. kể cả trong trường hợp xuất hiện tiến trình mới với chu kỳ sử dụng CPU ngắn hơn chu kỳ CPU còn lại của tiến trình ñang thực hiện.67. ta xét ví dụ sau với ba tiến trình có chu kỳ CPU và thời gian xuất hiện trong hàng ñợi như sau: Tiến trình P1 P2 P3 Thời ñiểm xuất hiện 0 0 2 ðộ dài chu kỳ CPU 8 7 2 45 .

ñiều ñộ ưu tiên thời gian còn lại ngắn nhất có thời gian chờ ñợi trung bình nhỏ nhưng ñòi hỏi hệ ñiều hành phải dự ñoán ñược ñộ dài chu kỳ sử dụng CPU của tiến trình. Tiến trình P1 P2 P3 Mức ưu tiên 4 1 3 P2 P3 P1 ðiều ñộ có mức ưu tiên vừa trình bày ở trên là ñiều ñộ không phân phối lại. ðiều ñộ với nhiều hàng ñợi Các phương pháp ñiều ñộ trình bày ở trên ñều làm việc với một hàng ñợi duy nhất chứa tiến trình ở trạng thái sẵn sàng. Các tiến trình có mức ưu tiên như nhau ñược ñiều ñộ theo nguyên tắc FCFS. trong ñó 0 ứng với mức ưu tiên cao nhất và các số lớn hơn tương ứng với mức ưu tiên thấp hơn. Tất cả tiến trình ñều ñược ñiều ñộ theo cùng một thuật toán giống nhau. Tuy nhiên có thể thêm cơ chế phân phối lại cho phương pháp này. ví dụ từ 0 ñến 31. hệ ñiều hành sẽ thu hồi CPU và phân phối cho tiến trình mới.Quản lý tiến trình Kết quả ñiều ñộ sử dụng SRTF ñược thể hiện trên biểu ñồ sau: 0 2 P2 2 4 P3 6 5 P2 11 8 P1 Cũng giống như ñiều ñộ ưu tiên tiến trình ngắn nhất. tiến trình có thể phân chia thành nhiều loại với ñặc ñiểm. Trên thực tế. Hệ ñiều hành quy ñịnh mức ưu tiên dưới dạng số nguyên trong một khoảng nào ñó. Có thể thấy hai phương pháp STF và SRTF ở trên là trường hợp riêng của ñiều ñộ có mức ưu tiên trong ñó tiến trình có thời gian chu kỳ CPU hoặc thời gian chu kỳ CPU còn lại ngắn hơn ñược ưu tiên hơn. Một số hệ ñiều hành coi số 0 ứng với mức ưu tiên cao nhất trong khi một số hệ ñiều hành sử dụng 0 cho mức ưu tiên thấp nhất. hạn chế thời gian… Mức ưu tiên cũng có thể do người quản trị hệ thống xác ñịnh dựa trên mức ñộ quan trọng của tiến trình. Tiến trình ñược ưu tiên hơn sẽ ñược cấp CPU trước. ñộ quan 46 . e. việc chuyển ñổi tiến trình diễn ra ít hơn và do vậy không tốn nhiều thời gian chuyển ñổi ngữ cảnh. ðiều ñộ có mức ưu tiên Theo phương pháp này. Nếu tiến trình mới xuất hiện có mức ưu tiên cao hơn tiến trình ñang chạy. So với ñiều ñộ quay vòng. mức ưu tiên ñược xác ñịnh theo nhiều tiêu chí khác nhau như yêu cầu bộ nhớ. mỗi tiến trình có một mức ưu tiên. Trong trường hợp tổng quát. Tuy nhiên. không có quy tắc chung về việc mức ưu tiên cao tương ứng với số nhỏ hay số to. f. Ví dụ sau minh họa cho ñiều ñộ có mức ưu tiên.

. Vấn ñề quản lý tiến trình ñồng thời hay quản lý tương tranh là vấn ñề quan trọng ñối với hệ ñiều hành nói riêng và khoa học máy tính nói chung. nhiều vấn ñề phức tạp có thể phát sinh so với trường hợp chỉ có một tiến trình. chẳng hạn tiến trình tương tác trực tiếp có mức ưu tiên cao hơn tiến trình nền.8 là một ví dụ ñiều ñộ với nhiều hàng ñợi.Quản lý tiến trình trọng và nhu cầu sử dụng CPU khác nhau. ðiều ñộ với nhiều hàng ñợi là phương pháp ñiều ñộ trong ñó tiến trình ñược phân chia thành nhiều loại tùy theo ñặc ñiểm và ñộ ưu tiên. Tiến trình ở hàng ñợi với mức ưu tiên thấp hơn phải nhường cho tiến trình ở hàng ñợi với mức ưu tiên cao chạy trước. ðỒNG BỘ HÓA TIẾN TRÌNH ðỒNG THỜI Trong những hệ thống cho phép nhiều tiến trình và/hoặc nhiều dòng cùng tồn tại.4. Hai loại tiến trình này ñòi hỏi thời gian ñáp ứng khác nhau và do vậy cần có mức ưu tiên cũng như cách ñiều ñộ khác nhau. Những tiến trình cùng tồn tại ñược gọi là tiến trình ñồng thời (concurrent process) hay còn ñược gọi là tiến trình tương tranh. trình soạn thảo bảng tính và bảng tính ñòi hỏi tương tác trực tiếp trong khi tiến trình quản lý in và quét virut trên ñĩa là tiến trình nền. Ví dụ ñiều ñộ với nhiều hàng ñợi 2. Mỗi loại ñược xếp trong một hàng ñợi riêng và ñược ñiều ñộ theo một phương pháp phù hợp với ñặc ñiểm của loại tiến trình ñó. Cách thứ nhất là ñiều ñộ theo mức ưu tiên có phân phối lại. do mối quan hệ trực tiếp hoặc gián tiếp giữa các tiến trình. Cách thứ hai là cấp cho mỗi hàng ñợi một khoảng thời gian nhất ñịnh (có thể phụ thuộc vào mức ưu tiên). tiến trình ñang chạy phải nhường CPU. Nếu có tiến trình mới với mức ưu tiên cao hơn xuất hiện.8. Giữa các hàng ñợi với nhau có thể ñiều ñộ theo hai cách sau. Mức ưu tiên cao nhất Các tiến trình hệ thống Các tiến trình tương tác Các tiến trình xử lý mẻ Các tiến trình nền Mức ưu tiên thấp nhất Hình 2. Thông thường. mỗi loại có thể ñòi hỏi phương pháp ñiều ñộ riêng. Lấy ví dụ trong máy tính cá nhân. tiến trình tương tác trực tiếp ñược ñiều ñộ theo phương pháp quay vòng RR trong khi tiến trình nền ñược ñiều ñộ FCFS. Tiến trình trong từng hàng ñợi ñược ñiều ñộ theo phương pháp của hàng ñợi của mình trong khoảng thời gian ñược cấp ñó. Trên 2. Do có nhiều loại tiến trình nên cần xác ñịnh mức ñộ ưu tiên cho từng loại.

47 .

Tiến trình cạnh tranh tài nguyên với nhau Ngay cả khi tiến trình không biết về sự tồn tại của nhau. chẳng hạn máy in.1. ñĩa. ðoạn mã tiến trình trong ñó chứa thao tác truy cập tài nguyên nguy hiểm ñược gọi là ñoạn nguy hiểm (critical section). ta cần ñảm bảo loại trừ tương hỗ. Phần này sẽ tập trung vào ñồng bộ hóa tiến trình. a. và tài nguyên ñó chỉ có thể phục vụ một tiến trình tại mỗi thời ñiểm. ðể giải quyết vấn ñề này cần xây dựng cơ chế cho phép phối hợp hoạt ñộng của hệ thống và các bản thân tiến trình. Lý do là ngay cả khi chỉ có một CPU. Mặc dù mỗi tiến trình không trao ñổi thông tin với tiến trình kia nhưng do chỉ một tiến trình ñược cấp tài nguyên. tức là tình trạng hai hoặc nhiều tiến trình không thể thực hiện tiếp do chờ ñợi lẫn nhau. Việc ñảm bảo loại trừ tương hỗ có thể gây ra tình trạng bế tắc. Cần lưu ý rằng. ðối với hệ thống nhiều CPU. trong những hệ thống hỗ trợ ña dòng hiện nay. Do kết - . ðối với các tiến trình cạnh tranh tài nguyên cần phải giải quyết một số vấn ñề sau: ðảm bảo loại trừ tương hỗ (mutual exclusion). mặc dù thuật ngữ tiến trình ñược sử dụng khi trình bày về ñồng bộ hóa. làm ảnh hưởng tới thời gian thực hiện. Giả sử hai hoặc nhiều tiến trình cùng yêu cầu một tài nguyên. hoạt ñộng của tiến trình có thể xen kẽ theo những cách không thể xác ñịnh trước. vấn ñề bế tắc (deadlock) và ñói tài nguyên (starvation). do thời gian thực hiện và hành vi của từng tiến trình không thể dự ñoán trước. Trên thực tế. cạnh tranh và chia sẻ tài nguyên. Giả sử có hai tiến trình P1 và P2. thiết bị ngoại vi hoặc kênh vào/ra. giữa tiến trình vẫn có quan hệ gián tiếp và có thể bị ảnh hưởng do cùng có nhu cầu sử dụng một số tài nguyên như bộ nhớ. cũng như do ñặc ñiểm ñiều ñộ và khả năng xảy ra ngắt trong hệ thống. tiến trình kia sẽ phải chờ ñợi. Yêu cầu ñặt ra là hai tiến trình không ñược phép thực hiện ñồng thời trong ñoạn nguy hiểm của mình. tại mỗi thời ñiểm. Tài nguyên như vậy ñược gọi là tài nguyên nguy hiểm (critical resource). Mặc dù vậy. Các vấn ñề ñối với tiến trình ñồng thời Trong hệ thống với một CPU. 2. tùy thuộc vào quan hệ giữa các tiến trình. vấn ñề quản lý tương tranh ñều ñược ñặt ra tương tự nhau. thời gian CPU ñược phân phối cho các tiến trình ñang tồn tại trong hệ thống. trong cả hai trường hợp. những chủ ñề khác liên quan tới tiến trình ñồng thời sẽ ñược trình bày sau. mỗi tiến trình cần ñược cấp ñồng thời tài nguyên T1 và T2 ñể có thể thực hiện xong công việc của mình. Xét trường hợp hai tiến trình cũng có nhu cầu sử dụng một tài nguyên. một số tiến trình có thể thực hiện song song với nhau. hầu hết kỹ thuật ñồng bộ ñược sử dụng ñể ñồng bộ hóa các dòng cùng tồn tại trong phạm vi một tiến trình. phối hợp và ñồng bộ hóa hoạt ñộng các tiến trình. chỉ một tiến trình duy nhất ñược thực hiện. và như vậy ñã bị ảnh hưởng gián tiếp bởi tiến trình cạnh tranh. ðể tránh mâu thuẫn và ñảm bảo kết quả ñúng. tức là ñảm bảo rằng nếu một tiến trình ñang sử dụng tài nguyên thì các tiến trình khác không ñược sử dụng tài nguyên ñó.Quản lý tiến trình Quản lý tiến trình ñồng thời bao gồm nhiều vấn ñề liên quan tới liên lạc giữa các tiến trình. Sau ñây là một số vấn ñề có thể xảy ra với tiến trình ñồng thời.4. Không ñể xảy ra bế tắc (deadlock). các nội dung trình bày cũng ñúng ñối với dòng trong hệ thống cho phép ña dòng.

48 .

hay các file. Bên cạnh ñó. Cũng do loại trừ tương hỗ. Kết quả thực hiện trong những trường hợp như vậy phụ thuộc vào thứ tự thay ñổi giá trị hai biến x và y và ñược gọi là ñiều kiện chạy ñua. xuất hiện yêu cầu ñảm bảo tính nhất quán của dữ liệu. Tiến trình hợp tác với nhau thông qua tài nguyên chung Tiến trình có thể có quan hệ hợp tác với nhau. thứ tự thực hiện P1 và P2 diễn ra như sau: P1: P2: P1: x=x+1 x=x*2 y=y*2 y=y+1 Kết quả ta có x = 6. ghi. sau khi thực hiện các biến ñổi trên. Ngoài ra cũng xuất hiện tình trạng bế tắc và ñói tương tự như ñã nhắc tới ở trên. Một trong các phương pháp trao ñổi thông tin giữa các tiến trình hợp tác là chia sẻ với nhau vùng bộ nhớ dùng chung (các biến toàn thể). Do kết quả ñiều ñộ.Quản lý tiến trình quả cấp phát của hệ ñiều hành. ñòi hỏi thao tác truy cập phải tính tới tính nhất quản của dữ liệu. P2. Việc các tiến trình ñồng thời truy cập dữ liệu dùng chung làm nẩy sinh vấn ñề ñồng bộ hóa. Xét ví dụ sau: hai tiến trình P1 và P2 cùng cập nhất hai biến nguyên x và y như sau: Khởi ñầu: x = y =2 P1: P2: x = x +1 y = y +1 x=x*2 y=y*2 Theo lô gic thông thường. P1 và P2 lần lượt ñược cấp tài nguyên nhiều lần trong khi P1 không bao giờ ñến lượt và do vậy không thực hiện ñược tiếp mặc dù không hề có bế tắc. Do kết quả loại trừ tương hỗ và cách cấp phát tài nguyên. P1 ñược cấp T1 và P2 ñược cấp T2. ta phải có x = y. Kết quả P1 và P2 rơi vào bế tắc. P3 cùng có yêu cầu lặp ñi lặp lại một tài nguyên. việc cập nhật dữ liệu dùng chung ñòi hỏi ñảm bảo loại trừ tương hỗ. ðiều kiện chạy ñua (race condition) là tình huống trong ñó một số dòng hoặc tiến trình ñọc và ghi dữ liệu sử dụng chung và kết quả phụ thuộc vào thứ tự các thao tác ñọc. y = 5 và như vậy x ≠ y. Trước hết. Lý do chính gây ra tình trạng phá vỡ tính nhất quán ở ñây là do hai biến ñổi của P1 không ñược thực hiện cùng với nhau. Giả sử tình huống P1 và P2 ñược thực hiện ñồng thời. 49 . tức là chờ ñợi quá lâu mà không ñến lượt sử dụng tài nguyên nào ñó. P1 sẽ chờ P2 giải phóng T2 trong khi P2 cũng chờ P1 giải phóng T1 trước khi có thể thực hiện tiếp. Xét ví dụ ba tiến trình P1. tiến trình có thể rơi vào tình trạng ñói tài nguyên. Tính nhất quán của dữ liệu bị phá vỡ. Không ñể ñói tài nguyên (starvation). b. không thể thực hiện tiếp.

2. c. ðiều này có nghĩa là không ñược phép xảy ra bế tắc hoặc tình trạng bị ñói ñối với tiến trình. Tiến trình có liên lạc nhờ gửi thông ñiệp Các tiến trình hợp tác có thể trao ñổi thông tin trực tiếp với nhau bằng cách gửi thông ñiệp (message passing). chẳng hạn khi hai tiến trình ñều chờ thông ñiệp từ tiến trình kia trước khi có thể thực hiện tiếp. Bế tắc có thể xuất hiện. Trong trường hợp trao ñổi thông ñiệp.3. Trong các phần tiếp theo. và nhóm sử dụng hỗ trợ của hệ ñiều hành hoặc thư viện ngôn ngữ lập trình. Cụ thể là giả thiết tiến trình không bị treo. Yêu cầu với giải pháp cho ñoạn nguy hiểm Như ñã trình bày ở trên. tức là giải . Bên cạnh ñó. tiến trình không chia sẻ hoặc cạnh tranh tài nguyên và vì vậy không có yêu cầu loại trừ tương hỗ. 2) Tiến triển: một tiến trình ñang thực hiện ở ngoài ñoạn nguy hiểm không ñược phép ngăn cản các tiến trình khác vào ñoạn nguy hiểm của mình. không lặp vô hạn.Quản lý tiến trình Vấn ñề nẩy sinh khi có ñiều kiện chạy ñua có thể giải quyết bằng cách ñặt toàn bộ thao tác truy cập và cập nhật dữ liệu dùng chung của mỗi tiến trình vào ñoạn nguy hiểm và sử dụng loại trừ tương hỗ ñể ñảm bảo các thao tác này không bị tiến trình khác xen ngang. và không kết thúc trong ñoạn nguy hiểm. Cùng với giải thuật Dekker. Giải thuật Peterson Giải thuật Peterson do Gary Peterson ñể xuất năm 1981 cho bài toán ñoạn nguy hiểm.4. giải pháp cho vấn ñề ñoạn nguy hiểm ñược xây dựng dựa trên các giả thiết sau: 1) Giải pháp không phụ thuộc vào tốc ñộ của các tiến trình. 2. nếu một tiến trình bị treo ở ngoài ñoạn nguy hiểm thì ñiều ñó không ñược phép ảnh hưởng tới tiến trình khác. Cơ chế liên lạc ñược hỗ trợ bởi thư viện của ngôn ngữ lập trình hoặc bản thân hệ ñiều hành. ta sẽ xem xét một số giải pháp cho vấn ñề ñoạn nguy hiểm.4. giải thuật Peterson là giải pháp thuộc nhóm phần mềm. nhóm giải pháp phần cứng. yêu cầu quan trọng khi ñồng bộ hóa tiến trình là giải quyết vấn ñề ñoạn nguy hiểm (critical section) và loại trừ tương hỗ. 2) Không tiến trình nào ñược phép nằm quá lâu trong ñoạn nguy hiểm. 3) Chờ ñợi có giới hạn: nếu tiến trình có nhu cầu vào ñoạn nguy hiểm thì tiến trình ñó phải ñược vào sau một khoảng thời gian hữu hạn nào ñó. Giải pháp cho vấn ñề ñoạn nguy hiểm cần thỏa mãn những yêu cầu sau: 1) Loại trừ tương hỗ: nếu nhiều tiến trình có ñoạn nguy hiểm ñối với cùng một tài nguyên thì tại mỗi thời ñiểm. Tình trạng ñói có thể xuất hiện khi một tiến trình phải chờ ñợi quá lâu những tiến trình khác trong khi những tiến trình kia bận trao ñổi thông ñiệp với nhau. Các giải pháp ñược chia thành 3 nhóm: nhóm giải pháp phần mềm. Chẳng hạn.2. 3) Thao tác ñọc và ghi bộ nhớ là thao tác nguyên tử (atomic) và không thể bị xen ngang giữa chừng. Tuy nhiên có thể xuất hiện bế tắc và ñói. chỉ một tiến trình ñược ở trong ñoạn nguy hiểm.

50 .

So với giải thuật Dekker. turn=1. <Phần còn lại của tiến trình> } } void P1(){ //tiến trình P1 for(. while(flag[1] && turn==1). Giải thuật Peterson ñược thể hiện trên hình sau: … bool flag[2]. Giải thuật Peterson ñược ñề xuất ban ñầu cho bài toán ñồng bộ hai tiến trình. while(flag[0] && turn==0). //tắt tiến trình chính. } Hình 2.){ //lặp vô hạn flag[1]=true.9: Giải thuật Peterson cho hai tiến trình 51 . Mỗi tiến trình thực hiện vô hạn và xen kẽ giữa ñoạn nguy hiểm với phần còn lại của tiến trình. Biến thứ hai bao gồm hai cờ cho mỗi tiến trình bool flag[2]. Giải thuật Peterson yêu cầu hai tiến trình trao ñổi thông tin với nhau qua hai biến chung.. StartProcess(P1). void P0(){ //tiến trình P0 for(.){ //lặp vô hạn flag[0]=true. giải thuật Peterson dễ hiểu hơn và ñược trình bày ở ñây ñể ñại diện cho nhóm giải pháp phần mềm. Biến thứ nhất int turn xác ñịnh ñến lượt tiến trình nào ñược vào ñoạn nguy hiểm.//lặp ñến khi ñiều kiện không thỏa <ðoạn nguy hiểm> flag[1]=false. <Phần còn lại của tiến trình> } } void main(){ flag[0]=flag[1]=0. turn=0. chạy ñồng thời hai tiến trình P0 và P1 StartProcess(P0). int turn. trong ñó flag[i] = true nếu tiến trình thứ i yêu cầu ñược vào ñoạn nguy hiểm.Quản lý tiến trình pháp pháp không ñòi hỏi sự hỗ trợ từ phía phần cứng hay hệ ñiều hành. turn=0..//lặp ñến khi ñiều kiện không thỏa <ðoạn nguy hiểm> flag[0]=false. Giả sử có hai tiến trình P0 và P1 thực hiện ñồng thời với một tài nguyên chung và một ñoạn nguy hiểm chung.

2. Việc cấm ngắt ñồng thời trên tất cả CPU ñòi hỏi nhiều thời gian ñể gửi thông ñiệp tới tất cả CPU. làm chậm việc vào ñoạn nguy hiểm. ðiều này ñảm bảo tiến trình ñược thực hiện trọn vẹn ñoạn nguy hiểm và không bị tiến trình khác vào ñoạn nguy hiểm trong thời gian ñó. Giải pháp phần cứng Phần cứng máy tính có thể ñược thiết kế ñể giải quyết vấn ñề loại trừ tương hỗ và ñoạn nguy hiểm. tiến trình vẫn có thể ñược cấp CPU khác ñể vào ñoạn nguy hiểm. Mặc dù ñơn giản. ñề giải quyết vấn ñề ñoạn nguy hiểm ta chỉ cần cấm không ñể xẩy ra ngắt trong thời gian tiến trình ñang ở trong ñoạn nguy hiểm ñể truy cập tài nguyên. tiến trình phải lặp ñi lặp lại thao tác kiểm tra trong vòng while trước khi vào ñược ñoạn nguy hiểm.2. Chờ ñợi tích cực là tình trạng chờ ñợi trong ñó tiến trình vẫn phải sử dụng CPU ñể kiểm tra xem có thể vào ñoạn nguy hiểm hay chưa. Sử dụng lệnh máy ñặc biệt Giải pháp thứ hai là phần cứng ñược thiết kế có thêm một số lệnh máy ñặc biệt. giải pháp cấm ngắt không thể sử dụng ñối với máy tính nhiều CPU. Ở ñây.4. Có nhiều dạng lệnh máy như vậy.Quản lý tiến trình Có thể nhận thấy giải thuật Peterson thỏa mãn các yêu cầu ñối với giải pháp cho ñoạn nguy hiểm (yêu cầu sinh viên thử chứng minh như bài tập nhỏ). Dưới ñây. ñược thực hiện trong cùng một lệnh máy và do vậy sẽ ñảm bảo ñược thực hiện cùng nhau mà không bị xen vào giữa. Như vậy.4. Nguyên tắc chung của giải pháp này là hai thao tác kiểm tra giá trị và thay ñổi giá trị cho một biến (một ô nhớ). Giải pháp phần cứng thường dễ sử dụng và có tốc ñộ tốt. ta sẽ xem xét hai giải pháp thuộc nhóm phần cứng. tại mỗi thời ñiểm chỉ một tiến trình ñược thực hiện. có thể ảnh hưởng tới khả năng ñáp ứng các sự kiện cần ngắt.1. return temp.4. và do vậy gây lãng phí thời gian CPU. val = true. Cấm các ngắt Trong trường hợp máy tính chỉ có một CPU. 2. việc cấm ngắt làm giảm tính mềm dẻo của hệ ñiều hành. Tiến trình ñang có CPU sẽ thực hiện cho ñến khi tiến trình ñó gọi dịch vụ hệ ñiều hành hoặc bị ngắt. hoặc các thao tác so sánh và hoán ñổi giá trị hai biến. Lô gic của lệnh Test_and_Set ñược thể hiện trên hình sau: bool { Test_and_Set(bool& bool temp = val. 52 val) . 2. Trong khi cấm ngắt ở CPU này.4. Ngoài ra.4. Ta sẽ gọi lệnh như vậy là lệnh “kiểm tra và xác lập” Test_and_Set. Việc sử dụng giải thuật Peterson trên thực tế tương ñối phức tạp. ðơn vị thực hiện không bị xen vào giữa như vậy ñược gọi là thao tác nguyên tử (atomic). Ngoài ra nhóm giải pháp này ñòi hỏi tiến trình ñang yêu cầu vào ñoạn nguy hiểm phải nằm trong trạng thái chờ ñợi tích cực (busy waiting). ta sẽ xem xét một dạng lệnh tiêu biểu có tính ñại diện cho lệnh máy dùng ñể ñồng bộ tiến trình.4. ðối với giải thuật Peterson.

mặc dù hai CPU có thể cùng thực hiện lệnh Test_and_Set nhưng do hai lệnh cùng truy cập một biến chung nên việc thực hiện vẫn diễn ra tuần tự. . ðịnh nghĩa lệnh Test_and_Set Ta có thể sử dụng lệnh Test_and_Set ñể giải quyết vấn ñề ñoạn nguy hiểm ñồng thời cho n tiến trình ký hiệu P(1) ñến P(n) như sau: … const int n. tất cả ñề sử dụng chung lệnh Test_and_Set trên một biến chung gắn với một tài nguyên chung. Ngoài ra... ðiều này ñảm bảo duy nhất một tiến trình vào ñược ñoạn nguy hiểm.11. .Giải pháp có thể dùng ñể ñồng bộ nhiều tiến trình. //tắt tiến trình chính. Do việc kiểm tra giá trị lock và thay ñổi lock=true ñược ñảm bảo thực hiện cùng nhau nên tiến trình ñầu tiên kiểm tra thấy lock=false sẽ ñảm bảo thay ñổi lock thành true trước khi tiến trình khác kiểm tra ñược biến này.. .Quản lý tiến trình } Hình 2. Cần lưu ý là trong trường hợp này. } Hình 2. tiến trình chỉ có thể vào ñược ñoạn giới hạn nếu lock=false. StartProcess(P(n)).){ //lặp vô hạn while(Test_and_Set(lock)). 53 . Thật vậy. //n là số lượng tiến trình bool lock. void P(int i){ //tiến trình P(i) for(. <Phần còn lại của tiến trình> } } void main(){ lock = false. chạy ñồng thời n tiến trình StartProcess(P(1)).Có thể sử dụng cho trường hợp ña xử lý với nhiều CPU nhưng có bộ nhớ chung. Loại trừ tương hỗ sử dụng lệnh máy ñặc biệt Test_and_Set Có thể dễ dàng kiềm tra ñiều kiện loại trừ tương hỗ ñược bảo ñảm khi sử dụng giải pháp với Test_and_Set như trên.10. Giải pháp sử dụng lệnh phần cứng ñặc biệt có một số ưu ñiểm sau: .//lặp ñến khi ñiều kiện không thỏa <ðoạn nguy hiểm> lock = false.Việc sử dụng tương ñối ñơn giản và trực quan. tiến trình ở ngoài ñoạn nguy hiểm không có khả năng ảnh hưởng tới giá trị của lock và do vậy không thể ngăn cản tiến trình khác vào ñoạn nguy hiểm.

. Trong thời gian tiến trình thực hiện thao tác như vậy ñể thay ñổi giá trị cờ hiệu.Việc sử dụng lệnh Test_and_Set có thể gây ñói. và V . Xây dựng cờ hiệu Cờ hiệu có thể ñược xây dựng dưới dạng một cấu trúc trên ngôn ngữ C với hai thao tác Wait và Signal như sau: struct semaphore { int value. Nếu giá trị S nhỏ hơn hoặc bằng 0 sau khi tăng thì một trong các tiến trình ñang bị phong tỏa (nếu có) sẽ ñược giải phóng và có thể thực hiện tiếp. Trừ thao tác khởi tạo.5. process *queue. tiến trình sẽ chuyển sang trạng thái chờ ñợi cho ñến khi hết bị phong tỏa mới ñược phép thực hiện tiếp. không bị phân chia. - ðiểm ñầu tiên cần lưu ý là hai thao tác Wait và Signal là những thao tác nguyên tử.cho thao tác Wait.value--. Các tiến trình bị phong tỏa ñược xếp vào hàng ñợi của cờ hiệu.//danh sách chứa các tiến trình bị phong tỏa }. Trong trường hợp có nhiều tiến trình cùng chờ ñể vào ñoạn giới hạn. //phong tỏa tiến trình } 54 .viết tắt của từ “tăng” trong tiếng ðức . tiến trình sẽ ñược thực hiện tiếp.queue block(). ñồng thời tương ñối dễ sử dụng là cờ hiệu hay ñèn hiệu (semaphore) do Dijkstra ñề xuất. thao tác sẽ không bị ngắt giữa chừng. void Wait(semaphore& S) { S. Signal(S): Tăng S lên một ñơn vị. Cờ hiệu S là một biến nguyên ñược khởi tạo một giá trị ban ñầu nào ñó. bằng khả năng phục vụ ñồng thời của tài nguyên. 2. Nếu giá trị của S không âm. Cờ hiệu (semaphore) Một giải pháp loại trừ tương hỗ khác không phụ thuộc vào sự hỗ trợ của phần cứng (dưới dạng các lệnh kiểm tra và xác lập trình bày ở trên). việc lựa chọn tiến trình tiếp theo không theo quy luật nào và có thể làm cho một số tiến trình không bao giờ vào ñược ñoạn giới hạn.Quản lý tiến trình Bên cạnh ñó.Chờ ñợi tích cực. Nếu giá trị của S âm sau khi giảm thì tiến trình gọi thao tác P(S) sẽ bị phong tỏa (blocked).viết tắt cho từ “kiểm tra” trong tiếng ðức . Các tài liệu trước ñây sử dụng ký hiệu P . Hai thao tác này có ý nghĩa như sau: Wait(S): Giảm S ñi một ñơn vị. if (S.value < 0) { Thêm tiến trình gọi Wait vào S.4. giải pháp dùng lệnh phần cứng cũng có một số nhược ñiểm: . Khi tiến trình bị phong tỏa. giá trị của cờ hiệu S chỉ có thể thay ñổi nhờ gọi hai thao tác là Wait và Signal. Tiến trình muốn vào ñoạn nguy hiểm phải liên tục gọi lệnh Test_and_Set trong vòng lặp while cho tới khi nhận ñược kết quả lock=false.cho thao tác Signal.

việc sử dụng cờ hiệu tránh cho tiến trình không phải chờ ñợi tích cực và do vậy tiết kiệm ñược thời gian sử dụng CPU. Nếu tiến trình khác thực hiện Wait trên cờ hiệu. chẳng hạn dưới dạng danh sách kết nối các PCB của tiến trình. Cần lưu ý rằng việc sử dụng FIFO sẽ ñảm bảo ñiều kiện chờ ñợi có giới hạn. Loại trừ tương hỗ ñược thực hiện bằng cách sử dụng cờ hiệu như thể hiện trên hình 2.value <= 0) { Lấy một tiến trình P từ S. if (S.12.value++. Do vậy. Mỗi cờ hiệu với giá trị ñầu dương thường dùng ñể kiểm soát việc truy cập một tài nguyên với khả năng phục vụ ñồng thời một số lượng hữu hạn tiến trình. Sau khi dùng xong tài nguyên. Danh sách tiến trình bị phong tỏa queue có thể xây dựng bằng những cách khác nhau. tức là tiến trình chỉ phải chờ ñợi một thời gian giới hạn trước khi vào ñoạn nguy hiểm. ðầu tiên. Giá trị tuyệt ñối của cờ hiệu âm tương ứng với số tiến trình bị phong tỏa.queue wakeup(P). giá trị cờ hiệu sẽ giảm tiếp. Hai thao tác block và wakeup ñược thực hiện nhờ những lời gọi hệ thống của hệ ñiều hành. Ví dụ. Nếu giá trị cờ hiệu âm sau khi giảm có nghĩa là tài nguyên ñược sử dụng hết khả năng và tại thời ñiểm ñó không phục vụ thêm ñược nữa. tại mỗi thời ñiểm tài nguyên như máy in chỉ cho phép một tiến trình ghi thông tin. tiến trình thực hiện Wait sẽ bị phong tỏa cho ñến khi tài nguyên ñược giải phóng. cờ hiệu ñược khởi tạo một giá trị dương hoặc bằng không. Nhờ việc phong tỏa các tiến trình chưa ñược vào ñoạn nguy hiểm. } } Hình 2. 55 . Thao tác block() trong Wait phong tỏa tiến trình gọi Wait và thao tác wakeup() trong Signal khôi phục tiến trình phong tỏa về trạng thái sẵn sàng.Quản lý tiến trình } void Signal(semaphore& S) { S. ðịnh nghĩa cờ hiệu trên C Mỗi cờ hiệu có một giá trị và một danh sách queue chứa tiến trình bị phong tỏa. tiến trình thực hiện thao tác Signal trên cùng cờ hiệu. Việc chọn một tiến trình từ danh sách khi thực hiện Signal có thể thực hiện theo nguyên tắc FIFO hoặc theo những thứ tự khác. Thao tác này tăng giá trị cờ hiệu và cho phép một tiến trình ñang phong tỏa ñược thực hiện tiếp. Khi tiến trình cần truy cập tài nguyên. và cờ hiệu dùng cho máy in ñược khởi tạo bằng 1. Cách sử dụng cờ hiệu Cờ hiệu ñược tiến trình sử dụng ñể gửi tín hiệu trước khi vào ñoạn nguy hiểm và sau khi ra khỏi ñoạn nguy hiểm. tiến trình thực hiện thao tác Wait của cờ hiệu tương ứng.13.

Quản lý tiến trình
… const int n; //n là số lượng tiến trình semaphore S = 1; void P(int i){ //tiến trình P(i) for(;;){ //lặp vô hạn Wait(S); <ðoạn nguy hiểm> Signal(S); <Phần còn lại của tiến trình> } } void main(){ //tắt tiến trình chính, chạy ñồng thời n tiến trình StartProcess(P(1)); ... StartProcess(P(n)); }

Hình 2.13. Loại trừ tương hỗ sử dụng cờ hiệu 2.4.6. Một số bài toán ñồng bộ ðể tiện minh họa cho việc sử dụng giải pháp ñồng bộ, trong phần này sẽ trình bày một số bài toán ñồng bộ kinh ñiển. ðây là những bài toán hoặc có ứng dụng trên thực tế hoặc không có ứng dụng nhưng rất thuận tiện trong việc mô tả vấn ñề xảy ra giữa các quá trình ñồng thời và do vậy thường ñược sử dụng ñể minh họa hoặc kiểm tra giải pháp ñồng bộ hóa. a. Bài toán triết gia ăn cơm Tình huống trong bài toán như sau. Có năm triết gia ngồi trên ghế quanh một bàn tròn, giữa bàn là thức ăn, xung quanh bàn có năm chiếc ñũa sao cho bên phải mỗi người có một ñũa và bên trái có một ñũa (2.14).

Hình 2.14. Bài toán các triết gia ăn cơm

Công việc của mỗi triết gia là suy nghĩ. Khi người nào ñó cần ăn, người ñó dừng suy nghĩ, nhặt hai chiếc ñũa nằm gần hai phía và ăn. Triết gia có thể nhặt hai chiếc ñũa theo thứ tự
56

Quản lý tiến trình bất kỳ nhưng bắt buộc phải nhặt từng chiếc một với ñiều kiện ñũa không nằm trong tay người khác. Sau khi cầm ñược cả hai ñũa, triết gia bắt ñầu ăn và không ñặt ñũa xuống trong thời gian ăn. Sau khi ăn xong, triết gia ñặt hai ñũa xuống bàn và suy nghĩ tiếp. Có thể coi năm triết gia như năm tiến trình ñồng thời với tài nguyên nguy hiểm là ñũa và ñoạn nguy hiểm là ñoạn dùng ñũa ñể ăn. Cờ hiệu cho phép giải quyết bài toán này như sau. Mỗi ñũa ñược biểu diễn bằng một cờ hiệu. Thao tác nhặt ñũa sẽ gọi Wait ñối với cờ hiệu tương ứng và thao tác ñặt ñũa xuống bàn gọi Signal. Toàn bộ giải pháp sử dụng cờ hiệu cho bài toán triết gia ăn cơm thể hiện trên 2.15.
… semaphore chopstick[5] = {1,1,1,1,1,1}; void Philosopher(int i){ //tiến trình P(i) for(;;){ //lặp vô hạn Wait(chopstick[i]); //lấy ñũa bên trái Wait(chopstick[(i+1)%5]); //lấy ñũa bên phải <Ăn cơm> Signal(chopstick[(i+1)%5]); Signal(chopstick[i]); <Suy nghĩ> } } void main(){ // chạy ñồng thời 5 tiến trình StartProcess(Philosopher(1)); ... StartProcess(Philosopher (5)); }

Hình 2.15. Bài toán triết gia ăn cơm sử dụng cờ hiệu Lưu ý rằng giải pháp trên 2.15 cho phép thực hiện loại trừ tương hỗ, tức là tránh trường hợp hai triết gia cùng nhặt một ñũa. Tuy nhiên, giải pháp này có thể gây bế tắc nếu cả năm người cùng nhặt ñược ñũa bên trái và không thể tiếp tục vì ñũa bên phải ñã bị người bên phải nhặt mất. Cách giải quyết tình trạng này sẽ ñược ñề cập trong phần về bế tắc. b. Bài toán người sản xuất, người tiêu dùng với bộ ñệm hạn chế Bài toán ñược mô tả như sau. Có một người sản xuất ra sản phẩm gì ñó và xếp sản phẩm làm ra vào một chỗ chứa gọi là bộ ñệm, mỗi lần một sản phẩm. Một người tiêu dùng lấy sản phẩm từ bộ ñệm, mỗi lần một sản phẩm, ñể sử dụng. Dung lượng của bộ ñệm là hạn chế và chỉ chứa ñược tối ña N sản phẩm. ðây là bài toán có nhiều phiên bản tương tự trên thực tế, chẳng hạn thiết bị vào ra như bàn phím có thể nhận ký tự gõ từ bàn phím, ñặt vào bộ ñệm, và tiến trình lấy ký tự từ bộ ñệm ra ñể xử lý. Trong trường hợp tổng quát có thể có nhiều người sản xuất cùng làm ra và xếp sản phẩm vào bộ ñệm. Bài toán người sản xuất người tiêu dùng ñặt ra ba yêu cầu ñồng bộ sau:
57

Quản lý tiến trình Người sản xuất và người tiêu dùng không ñược sử dụng bộ ñệm cùng một lúc. ðây là yêu cầu loại trừ tương hỗ. Khi bộ ñệm rỗng, người tiêu dùng không nên cố lấy sản phẩm. Khi bộ ñệm ñầy, người sản xuất không ñược thêm sản phẩm vào bộ ñệm.

Ba yêu cầu trên có thể giải quyết bằng cờ hiệu. Yêu cầu thứ nhất ñược giải quyết bằng cách sử dụng một cờ hiệu lock khởi tạo bằng 1. Yêu cầu thứ hai và thứ ba ñược giải quyết lần lượt bằng hai cờ hiệu empty và full. Cờ hiệu empty ñược khởi tạo bằng 0 và full ñược khởi tạo bằng kích thước bộ ñệm N. Giải pháp cho bài toán ñược thể hiện trên 2.16:
const int N; //kích thước bộ ñệm semaphore lock = 1; semaphore empty = 0; semaphore full = N; void producer () { for (;;) { <sản xuất > wait (full); wait (lock); <thêm một sản phẩm vào bộ ñệm> signal (lock); signal (empty); } } void consumer () for (;;) { wait (empty); wait (lock); <lấy một sản phẩm từ bộ ñệm> signal (lock); signal (full); <tiêu dùng> } } void main(){ StartProcess(producer); StartProcess(consumer); } { //tiến trình người tiêu dùng //tiến trình người sản xuất

Hình 2.16: Giải pháp cho bài toán người sản xuất người tiêu dùng sử dụng cờ hiệu 2.4.7. Monitor Trong một phần trước ta ñã xem xét về cơ chế ñồng bộ sử dụng cờ hiệu. Mặc dù có một số ưu ñiểm như không phải chờ ñợi tích cực và dễ sử dụng hơn giải thuật Peterson song ñồng
58

Tiến trình khác gọi hàm của monitor sẽ bị phong tỏa. một giải pháp khác của nhóm giải pháp dựa trên hỗ trợ của hệ ñiều hành và ngôn ngữ bậc cao là giải pháp sử dụng monitor (một số tài liệu tại Việt nam dịch là phòng ñợi do ñặc ñiểm của monitor). ðặc ñiểm thứ nhất rất quen thuộc ñối với ñối tượng trong ngôn ngữ lập trình hướng ñối tượng và làm cho monitor có nhiều ñiểm tương tự class. Mỗi monitor gồm một dữ liệu riêng. chỉ một tiến trình ñược thực hiện trong monitor.Quản lý tiến trình bộ hóa bằng cờ hiệu có thể gây ra lỗi nếu không ñược sử dụng ñúng cách. trong trường hợp thứ hai gây ñói. và không cần lập trình cơ chế loại trừ tương hỗ một cách tường minh bằng cách sử dụng các bước trước và sau ñoạn nguy hiểm như trong những phương pháp ở trên. 59 . Khái niệm monitor Monitor ñược ñịnh nghĩa dưới dạng một kiểu dữ liệu trừu tượng của ngôn ngữ lập trình bậc cao. hàm khởi tạo. có thể xẩy ra vấn ñề khác về ñồng bộ. Tiến trình thực hiện trong monitor bằng cách gọi hàm do monitor cung cấp. Tiến trình chờ ñợi sẽ ñược khôi phục lại từ ñiểm dừng sau khi ñiều kiện ñang chờ ñợi ñược thỏa mãn. tức là gọi wait hai lần hoặc signal hai lần: trong trường hợp thứ nhất không ñảm bảo loại trừ tương hỗ. không thể truy cập dữ liệu trực tiếp. Tuy nhiên. chẳng hạn khi một tiến trình ñang thực hiện trong monitor và phải dừng lại (bị phong tỏa) ñể ñợi một sự kiện hay một ñiều kiện nào ñó ñược thỏa mãn. ðể hạn chế phần nào các vấn ñề vừa nêu khi sử dụng cờ hiệu. chẳng hạn như một class của C++ hoặc Java. tiến trình cần trả lại monitor ñể tiến trình khác có thể sử dụng. Biến ñiều kiện Monitor ñược ñịnh nghĩa như trên cho phép giải quyết vấn ñề loại trừ tương hỗ. Thay vì dùng thao tác wait lại dùng signal hoặc ngược lại. 2) Tại mỗi thời ñiểm. ðặc ñiểm này giúp tránh lỗi xảy như khi dùng cờ hiệu. Trong trường hợp như vậy. Người lập trình chỉ cần ñặt tài nguyên nguy hiểm vào trong monitor. và một số hàm hoặc phương thức ñể truy cập dữ liệu với các ñặc ñiểm sau: 1) Tiến trình hoặc dòng chỉ có thể truy cập dữ liệu của monitor thông qua các hàm hoặc phương thức của monitor. Sử dụng cờ hiệu không ñúng sẽ gây ra các lỗi sau: Quên không gọi thao tác wait hoặc signal hoặc cả hai. xếp vào hàng ñợi của monitor ñể chờ cho ñến khi monitor ñược giải phóng. ðảo ngược thứ tự wait và signal: gây ra bế tắc. ðặc ñiểm thứ hai cho phép ñảm bảo loại trừ tương hỗ ñối với ñoạn nguy hiểm. Một ñiều quan trọng là những lỗi xuất hiện như vậy khó debug do lỗi chỉ xẩy ra ở một số trường hợp khi tiến trình thực hiện xen kẽ nhau theo một thứ tự nhất ñịnh. ví dụ ñặt biến dùng chung thành dữ liệu của monitor.

bộ ñệm buffer ñược khai báo như dữ liệu cục bộ của monitor có thể truy cập bằng hai thao tác append (thêm vào) và take (lấy ra).cwait() trước ñó thì một tiến trình như vậy sẽ ñược giải phóng.18). x. Monitor ðể minh họa cho cách sử dụng monitor. Trong giải pháp này. nếu không có tiến trình chờ ñợi ñiều kiện.17. //bộ ñệm chứa N sản phẩm kiểu product int count. Nếu không có tiến trình bị phong tỏa thì thao tác csignal sẽ không có tác dụng gì cả. ta có thể sử dụng các biến ñiều kiện. Monitor Dữ liệu cục bộ các biến ñiều kiện condition x condition y hàng ñợi ñiều kiện hàm hàm hàm hàng ñợi chung của monitor hàm khởi tạo Hình 2. - Cần lưu ý ñiểm khác nhau của csignal với signal của cờ hiệu: signal luôn giải phóng một tiến trình còn csignal thì có thể không. Monitor sử dụng hai biến ñiều kiện notFull và notEmpty ñể tránh việc thêm sản phẩm vào bộ ñệm ñầy hoặc lấy sản phẩm khỏi bộ ñệm rỗng.csignal (): tiến trình gọi csignal ñể thông báo ñiều kiện x ñã thỏa mãn. ðây là những biến ñược khai báo và sử dụng trong monitor với hai thao tác là cwait và csignal (tiền tố “c” ñược thêm vào ñể phân biệt với cờ hiệu) như sau: x. Tiến trình bị xếp vào hàng ñợi của biến ñiều kiện x.cwait (): tiến trình ñang ở trong monitor và gọi cwait bị phong tỏa cho tới khi ñiều kiện x xẩy ra. chúng ta sẽ xem xét một giải pháp cho bài toán người sản xuất người tiêu dùng với bộ ñệm hạn chế.17. //số lượng sản phẩm hiện thời trong bộ ñệm . monitor BoundedBuffer { product buffer[N].Quản lý tiến trình ðể giải quyết tình huống vừa nêu. Cấu trúc monitor với các biến ñiều kiện ñược thể hiện trên 2. trong ñó cơ chế ñồng bộ ñược thực hiện bằng monitor (hình 2. Monitor ñược giải phóng và một tiến trình khác sẽ ñược vào monitor. Nếu có tiến trình ñang bị phong tỏa và nằm trong hàng ñợi của x do gọi x.

60 .

} void append (product x) { if (count == N) notFull.){ <Sản xuất sản phẩm x> BoundedBuffer.csignal (). } Hình 2. notEmpty. } product take ( ) { if (count == 0) notEmptry.1. Lý do dừng vô hạn của nhóm tiến trình là do tiến trình phải 61 .append (x). Bế tắc là gì? Một vấn ñề gây nhiều khó khăn ñối với các tiến trình ñồng thời là tình trạng bế tắc (deadlock).take ().18. //chờ ñến khi buffer không rỗng <Lấy một sản phẩm x từ buffer> count --. } } void consumer ( ) { //tiến trình người tiêu dùng for (. notFull.8.4. notEmpty.csignal ( )..4..Quản lý tiến trình condition notFull. Bế tắc 2.){ product x = BoundedBuffer. } } void producer ( ) { //tiến trình người sản xuất for (. Bế tắc là tình trạng một nhóm tiến trình có cạnh tranh về tài nguyên hay có hợp tác phải dừng (phong tỏa) vô hạn.8. Giải pháp sử dụng monitor cho bài toán người sản xuất người tiêu dùng với bộ ñệm hạn chế 2.cwait ( ). //các biến ñiều kiện public: BoundedBuffer( ) { //khởi tạo count = 0. <Tiêu dùng x> } } void main() { Thực hiện song song producer và consumer.cwait (). //dừng và chờ ñến khi buffer có chỗ <Thêm một sản phẩm vào buffer> count++.

ðiều kiện này nghĩa là có một tài nguyên nguy hiểm.Quản lý tiến trình chờ ñợi một sự kiện chỉ có thể sinh ra bởi tiến trình khác cũng ñang trong trạng thái chờ ñợi của nhóm. mỗi tiến trình cần thực hiện thao tác yêu cầu tài nguyên Request. 2) Giữ và chờ. ðể minh họa cho tình huống xảy ra bế tắc.8. Kết quả hai tiến trình rơi vào bế tắc. Nhưng Q cũng phải dừng lại ở thao tác “Q: Request X” ñể ñợi tài nguyên X do P ñang giữ. 2. 62 . tiến trình giải phóng tài nguyên bằng thao tác Release. thao tác “P:Request Y” sẽ khiến P phải chờ cho ñến khi Q giải phóng Y.4. tức là tài nguyên mà tại mỗi thời ñiểm chỉ duy nhất một tiến trình ñược sử dụng. thứ tự thực hiện của hai tiến trình diễn ra như sau: … P: Request X Q: Requets Y … P: Request Y Q: Request X … Trong trường hợp này.2. chẳng hạn chờ ñợi ñể ñược cấp thêm tài nguyên khác. Tiến trình P và Q ñược thể hiện như sau: Tiến trình P … Request X … Request Y … Release X … Release Y … Tiến trình Q … Request Y … Request X … Release Y … Release X … Giả sử do kết quả ñiều ñộ. ðiều kiện xảy ra bế tắc Tình trạng bế tắc xẩy ra khi bốn ñiều kiện sau ñồng thời thỏa mãn: 1) Loại trừ tương hỗ. sau khi thực hiện xong. Tài nguyên do tiến trình giữ không thể phân phối lại cho tiến trình khác trừ khi tiến trình ñang giữ tự nguyện giải phóng tài nguyên. ðể sử dụng tài nguyên. Mỗi tiến trình cần sử dụng ñồng thời hai tài nguyên X và Y trong một khoảng thời gian nhất ñịnh. Hai tiến trình P và Q thực hiện ñồng thời. ta xét ví dụ sau. 3) Không có phân phối lại (no preemption). Tiến trình giữ tài nguyên trong khi chờ ñợi. Tài nguyên X và Y chỉ có khả năng phục vụ một tiến trình tại một thời ñiểm. Tiến trình khác yêu cầu tài nguyên này sẽ phải dừng lại chờ ñến khi tài nguyên ñược giải phóng.

hệ ñiều hành hiện nay không sử dụng giải pháp nào trong số này. kể cả tài nguyên chưa cần ñến. Pn chờ tài nguyên do P1 ñang giữ. …. tiến trình phải giải phóng tài nguyên ñã ñược cấp và yêu cầu lại (nếu cần) cùng với tài nguyên mới.8. Khi một tiến trình yêu cầu tài nguyên nhưng 63 . Bốn ñiều kiện trên là cần và ñủ ñể xẩy ra bế tắc. Tuy nhiên. Cách thứ nhất là yêu cầu tiến trình phải nhận ñủ toàn bộ tài nguyên cần thiết trước khi thực hiện tiếp. Pn sao cho P1 chờ ñợi tài nguyên do P2 ñang giữ. Cần lưu ý rằng ñiều kiện 2 là hệ quả của ñiều kiện 4 và ñiều kiện 3. - Trên thực tế. có thể giải quyết vấn ñề bế tắc theo những cách sau: Ngăn ngừa (deadlock prevention): ñảm bảo ñể một trong bốn ñiều kiện xẩy ra bế tắc không bao giờ thỏa mãn. tức là loại trừ trước khả năng xảy ra bế tắc. 3) Không có phân phối lại ðiều kiện này có thể ngăn ngừa như sau. Bốn ñiều kiện xẩy ra bế tắc có thể ngăn ngừa như sau: 1) Loại trừ tương hỗ Có thể tránh loại trừ tương hỗ ñối với những tài nguyên cho phép nhiều tiến trình sử dụng một lúc ví dụ các file trong chế ñộ ñọc. Phát hiện và giải quyết (deadlock detection): cho phép bế tắc xẩy ra. Dựa trên ñặc ñiểm và ñiều kiện xảy ra bế tắc. P2. …. tức là không làm gì với bế tắc. gây lãng phí tài nguyên. 2. Nhiệm vụ xử lý bế tắc do các tiến trình tự ñảm nhiệm.3. Do vậy không thể ngăn ngừa ñiều kiện về loại trừ tương hỗ. P2 chờ tài nguyên do P3 ñang giữ. Cách thứ hai là tiến trình chỉ ñược yêu cầu tài nguyên nếu tiến trình không giữ tài nguyên nào khác. Trước khi tiến trình yêu cầu thêm tài nguyên. 2) Giữ và chờ Có hai cách ngăn ngừa ñiều kiện này. nếu không nhận ñủ. Giải pháp này có thể thực hiện bằng cách sử dụng một số quy tắc ñể hạn chế cách yêu cầu tài nguyên của tiến trình. Ngoài ra tiến trình sẽ giữ toàn bộ tài nguyên ñến khi thực hiện xong. phát hiện bế tắc và khôi phục hệ thống về tình trạng không bế tắc. tiến trình bị phong tỏa ñể chờ cho ñến khi có thể nhận ñủ tài nguyên. Cách này thường không hiệu quả do tiến trình phải chờ ñợi rất lâu ñể lấy ñủ tài nguyên trong khi có thể thực hiện với một số tài nguyên ñược cấp. trên thực tế luôn luôn tồn tại tài nguyên không có khả năng chia sẻ ñồng thời như vậy và cần ñảm bảo loại trừ tương hỗ khi sử dụng chúng. nhưng vẫn ñược tách riêng ñể thuận lợi cho việc tìm hiểu cơ chế xử lý bế tắc trình bày trong các phần sau.4. Phòng tránh (deadlock avoidance): cho phép một số ñiều kiện bế tắc ñược thỏa mãn nhưng ñảm bảo ñể không ñạt tới ñiểm bế tắc. Ngăn ngừa bế tắc Ngăn ngừa bế tắc (deadlock prevention) là ñảm bảo ñể ít nhất một trong bốn ñiều kiện trình bày trong phần trước không xẩy ra. Tồn tại nhóm tiến trình P1.Quản lý tiến trình 4) Chờ ñợi vòng tròn.

việc áp dụng quy tắc trên cho phép ngăn ngừa chờ ñợi vòng tròn. Nếu tiến trình ñã yêu cầu một số tài nguyên dạng Ri thì sau ñó tiến trình chỉ ñược phép yêu cầu tài nguyên dạng Rj nếu j > i.v. Ta sẽ thấy ngay ñiều này không thể xẩy ra do một trong hai tiến trinh vi phạm quy tắc nói trên (hoặc i > j hoặc j > i).4.4. v. 4) Chờ ñợi vòng tròn Một trong những cách ngăn ngừa chờ ñợi vòng tròn là xác ñịnh một thứ tự cho các dạng tài nguyên trong hệ thống và chỉ cho phép tiến trình yêu cầu tài nguyên sao cho tài nguyên mà tiến trình yêu cầu sau có thứ tự lớn hơn tài nguyên mà tiến trình ñó yêu cầu trước. Nếu tài nguyên do tiến trình khác giữ và tiến trình này ñang chờ cấp thêm tài nguyên thì thu hồi lại ñể cấp cho tiến trình yêu cầu. ta cấp phát ngay. Tiến trình chỉ có thể thực hiện tiếp sau khi lấy ñược tài nguyên cũ cùng với tài nguyên mới yêu cầu. R2. Mỗi yêu cầu cấp tài nguyên của tiến trình sẽ ñược xem xét và quyết ñịnh tùy theo tình hình cụ thể. phòng tránh bế tắc cho phép ba ñiều kiện ñầu xẩy ra và chỉ ñảm bảo sao cho trạng thái bế tắc không bao giờ ñạt tới. Nguyên tắc trên ñược minh họa như sau.Quản lý tiến trình không ñược do ñã bị cấp phát. Có thể dễ dàng kiểm tra.v.v. Một cách thực hiện khác là khi tiến trình yêu cầu tài nguyên. …. R2 ñứng trước R3. Tuy nhiên. hệ thống có thể phòng tránh bế tắc bằng cách sử dụng thuật toán người cho vay như sau.8. 64 . 2. Dạng thông tin ñơn giản và hiệu quả nhất là số lượng tối ña tài nguyên tiến trình cần sử dụng. hệ ñiều hành yêu cầu tiến trình cung cấp thông tin về việc sử dụng tài nguyên của mình và sử dụng thông tin này khi cấp phát. nếu tài nguyên còn trống. Dựa trên thông tin về số lượng tài nguyên cần cấp tối ña do tiến trình thông báo. giảm hiệu năng của tiến trình. ðể làm ñược như vậy. Giả sử trong hệ thống có n dạng tài nguyên ký hiệu R1. Phòng tránh bế tắc giống ngăn ngừa bế tắc ở chỗ ñều nhằm ñảm bảo bế tắc không thể xảy ra (thực chất cả hai ñều là ngăn ngừa). Nếu tiến trình cần nhiều tài nguyên cùng dạng thì tiến trình phải yêu cầu tất cả tài nguyên dạng ñó cùng một lúc. hệ ñiều hành sẽ thu hồi lại toàn bộ tài nguyên tiến trình ñang giữ. Việc sử dụng ràng buộc như vậy có nhược ñiểm là làm cho việc sử dụng tài nguyên kém hiệu quả. ðể giải quyết phần nào nhược ñiểm này có thể sử dụng nhóm giải pháp thứ hai là phòng tránh bế tắc (deadlock avoidance). Nếu hai ñiều kiện trên ñều không thỏa thì tiến trình yêu cầu tài nguyên phải chờ. tức là R1 ñứng trước R2. thay vì tuân theo một quy tắc chung như trong trường hợp ngăn ngừa. Rn. . Các dạng tài nguyên có thể là máy in. không mất tính tổng quát. Với cách sắp xếp như vậy ta có thể tránh bế tắc bằng cách chỉ cho phép tiến trình yêu cầu tài nguyên theo thứ tự tăng của chỉ số. Giả sử xẩy ra chờ ñợi vòng tròn do tiến trình P ñã có Ri và yêu cầu Rj trong khi tiến trình Q ñã có Rj và yêu cầu Ri. ổ ñĩa. Tiếp theo. Phòng tránh bế tắc Giải pháp ngăn ngừa bế tắc trình bày ở trên tập trung vào việc sử dụng quy tắc hay ràng buộc khi cấp phát tài nguyên ñể ngăn ngừa ñiều kiện xẩy ra bế tắc. ta giả sử những dạng tài nguyên này ñược sắp xếp theo thứ tự tăng dần của chỉ số.

trong ñó A[j] là số lượng tài nguyên dạng j còn lại và có thể cấp phát. Số lượng tài nguyên còn lại cho dưới dạng vec tơ A[m]. m là số lượng tài nguyên. ta xét ví dụ sau. cách phòng tránh bế tắc ñược thực hiện như sau. P4 có yêu cầu tài nguyên tối ña cho trong bảng M sau: X P1 P2 P3 P4 Yêu cầu tối ña Xét trạng thái của hệ thống với lượng tài nguyên ñã cấp. Trạng thái ñược cho bởi các thông tin sau: Số lượng tối ña tài nguyên mà tiến trình yêu cầu. P2. Z=7. trong ñó n là số lượng tiến trình. P3. Tuy nhiên. Lượng tài nguyên còn cần cấp dưới dạng ma trận C[n][m] trong ñó C[i][j]=M[i][j]D[i][j] là lượng tài nguyên dạng j mà tiến trình i còn cần cấp. Khi tiến trình muốn khởi tạo. Nếu số lượng yêu cầu không vượt quá khả năng hệ thống. Nếu an toàn. tiến trình sẽ ñược khởi tạo. Y. Với các khái niệm trạng thái ñịnh nghĩa ở trên. tài nguyên sẽ ñược cấp thật.5 3 3 2 Quản lý tiến trình 2 9 Thuật toán người cho vay (banker’s algorithm) 0 Thuật toán người cho vay ñược ñặt tên 2 trên sự tương tự giữa việc quyết ñịnh dựa 2 nguyên trong máy tính. Z với số lượng ban ñầu X=10. Thuật toán người cho vay ñược mô tả như sau. Khi tiến trình có yêu cầu cấp tài nguyên. Người cho vay cho vay tiền của ngân hàng với việc cấp phát tài 2 giỏi là người cho vay ñược nhiều. Lượng tài nguyên ñã cấp cho mỗi tiến trình dưới dạng ma trận D[n][m]. M[i][j] (0<=i<=n. cập nhật lại trạng thái và xác ñịnh xem trạng thái ñó có an toàn không. Trạng thái không an toàn là trạng thái khác với trạng thái an toàn. Bốn tiến trình P1. còn cần như sau: 0 7 7 4 65 Y Z . Thông tin này ñược cho dưới dạng ma trận M[n][m]. trong ñó D[i][j] là lượng tài nguyên dạng j ñã cấp cho tiến trình i. Ngược lại. còn lại. Y=5. do vậy không thể thu hồi vốn và không thể trả nợ dẫn tới cả ngân hàng và người vay rơi vào bế tắc tương tự tiến trình cạnh tranh về tài nguyên. khi cho vay vượt quá số tiến thực có sẽ gặp 2 rủi ro do mỗi người vay không thể vay ñủ số tiến cần thiết ñể phục vụ kinh doanh. 0<=j<=m) là số lượng tài nguyên tối ña dạng j mà tiến trình i yêu cầu. hệ thống giả sử tài nguyên ñược cấp. tiến trình bị phong tỏa và chờ tới khi có thể cấp phát an toàn. ta ñịnh nghĩa một số khái niệm sau: Trạng thái ñược xác ñịnh bởi tình trạng sử dụng tài nguyên hiện thời trong hệ thống. Hệ thống có 3 dạng tài nguyên X. ðể trình bày thuật toán người cho vay. ðể minh họa. - Trạng thái an toàn là trạng thái mà từ ñó có ít nhất một phương án cấp phát sao cho bế tắc không xẩy ra. tiến trình thông báo dạng tài nguyên và số lượng tài nguyên tối ña cho mỗi dạng sẽ yêu cầu.

P3.0) phải bị từ chối. (F[i] chứa tình trạng tiến trình thứ i ñã kết thúc hay chưa. tức là yêu cầu = (0. Do vậy yêu cầu (0.…. W chứa lượng tài nguyên còn lại) Khởi tạo W=A và F[i]=false (i=0. Khai báo mảng W kích thước m và mảng F kích thước n. hệ thống sẽ chuyển sang trạng thái tiếp theo X 3 Y 0 Z 4 P1 P2 P3 P4 Còn cần cấp ðây là trạng thái không an toàn vì không thể tìm ra cách cấp phát nào cho phép bất kỳ tiến trình nào thực hiện ñến cùng trước khi có thể trả lại tài nguyên. Tìm i sao cho: F[i] = false và C[i][j] ≤ W[j] với mọi j=0. a) W = W + D[i] b) F[i] = true c) Quay lại bước 2 4.….…. If F[i] = true với mọi i =0. P4. ví dụ theo thứ tự P2.19.5.m-1 Nếu không có i như vậy thì chuyển sang bước 4 3.3. Việc kiểm tra xem một trạng thái có phải là trạng thái an toàn không có thể thực hiện bằng thuật toán thể hiện trên 2. Giả sử hệ thống ñang nằm trong trạng thái an toàn như trên và P1 yêu cầu cấp 3 tài nguyên dạng Y. P1.0).3.n-1 thì trạng thái an toàn Else trạng thái không an toàn Hình 2.19.8. Phát hiện bế tắc và xử lý Các biện pháp ngăn ngừa và phòng tránh bế tắc sử dụng ràng buộc khi cấp phát tài 66 X Y Z Còn lại .4. 1. Nếu yêu cầu này ñược thỏa mãn.0 2 0 Quản lý tiến trình 0 3 X Y 0 2 P1 2 P2 1 1 P3 P4 ðã cấp Z X 3 Y 3 Z 4 Còn lại 3 1 2 2 6 0 0 0 1 1 X P1 P2 P3 P4 1 2 2 6 0 0 Y 0 1 1 Z Còn cần cấp Trạng thái này là trạng thái an toàn do có thể tìm ra cách cấp phát không dẫn ñến bế tắc. Thuật toán xác ñịnh trạng thái an toàn 2.n-1) 2.

Hệ thống ñịnh kỳ kiểm tra ñể phát hiện có tình trạng bế tắc hay không. P2. Tiến trình ñược nối với tài nguyên bằng cung có hướng nếu tiến trình ñang ñược cấp tài nguyên ñó. ñể phát hiện bế tắc trên ñồ thị chờ ñợi có thể sử dụng thuật toán phát hiện chu trình trên ñồ thị có hướng. ðặc ñiểm chung của hai nhóm giải pháp này là an toàn nhưng ñều ảnh hưởng tới hiệu quả sử dụng tài nguyên. hệ thống sẽ xử lý ñể khôi phục lại trạng thái không có bế tắc. Tiếp theo ñây. Trong ví dụ vừa xét. Trong trường hợp này. việc phát hiện bế tắc ñược thực hiện tương ñối ñơn giản bằng cách sử dụng ñồ thị biểu diễn quan hệ chờ ñợi lần nhau giữa tiến trình (tạm gọi là ñồ thị chờ ñợi). Trước hết. Phát hiện bế tắc Trường hợp mỗi dạng tài nguyên chỉ có một tài nguyên duy nhất.b minh họa cho việc xây dựng ñồ thị chờ ñợi từ ñồ thị cấp phát tài nguyên bên trái. ñược xây dựng như sau.a. Trong trường hợp tổng quát. ðồ thị chờ ñợi ñược xây dựng từ ñồ thị cấp phát tài nguyên bằng cách bỏ ñi các nút tương ứng với tài nguyên và nhập các cung ñi qua nút bị bỏ.Quản lý tiến trình nguyên ñể tránh cho bế tắc không xảy ra. Tài nguyên ñược nối với tiến trình bằng cung có hướng nếu tài nguyên ñược cấp cho tiến trình ñó. Hình 2. ðồ thị chờ ñợi cho phép phát hiện tình trạng tiến trình chờ ñợi vòng tròn là ñiều kiện ñủ ñể sinh ra bế tắc. trong ñó các nút là tiến trình và tài nguyên. ta sẽ xem xét hai nội dung: cách phát hiện bế tắc và cách khôi phục lại trạng thái không bế tắc. Hệ thống không thực hiện biện pháp ngăn ngừa hay phòng tránh và do vậy bế tắc có thể xảy ra. ðồ thị cấp phát tài nguyên và ñồ thị có hướng Thời ñiểm phát hiện bế tắc 67 . ta có thể thấy tiến trình P1.20.20. P4 ñang bị bế tắc do phải chờ ñợi vòng tròn lẫn nhau.20. ta xây dựng ñồ thị cấp phát tài nguyên như thể hiện trên Hình 2. nếu có. Hình 2. Phát hiện bế tắc (deadlock detection) là cách tiếp cận khác.

Lưu ý là không phải yêu cầu không ñược thỏa mãn nào cũng làm phát sinh bế tắc. có thể giảm tần suất chạy thuật toán phát hiện bế tắc. Hệ ñiều hành sẽ phải chạy lại thuật toán phát hiện bế tắc sau khi kết thúc mỗi tiến trình. Vấn ñề tiếp theo là khi nào hệ thống cần sử dụng những thuật toán này ñể phát hiện bế tắc (nếu có). Ví dụ ngăn ngừa bế tắc cho bài toán triết gia ăn cơm Trong một phần trước. Ngoài ra có thể chạy thuật toán khi có một số dấu hiệu như hiệu suất sử dụng CPU giảm xuống dưới một ngưỡng nào ñó. chẳng hạn sau từng chu kỳ từ vài chục phút tới vài giờ. Tuy nhiên việc xác ñịnh chu kỳ chạy thuật toán có thể dựa trên những phân tích sau. hệ ñiều hành có thể sử dụng một trong những phương pháp sau ñể xử lý khi phát hiện bế tắc: Kết thúc tất cả tiến trình ñang bị bế tắc. Ngoài ra. Tiến trình bị thu hồi tài nguyên ñược khôi phục về trạng thái trước khi ñược cấp tài nguyên. Tuy nhiên. chẳng hạn tiến trình ñang giữ nhiều tài nguyên hơn sẽ bị chọn kết thúc trước.8. Phương pháp này ñòi hỏi hệ ñiều hành lưu trữ trạng thái ñể có thể thực hiện quay lui và khôi phục về các ñiểm kiểm tra trước ñó. - - - 2. Khôi phục tiến trình về thời ñiểm trước khi bị bế tắc sau ñó cho các tiến trình thực hiện lại từ ñiểm này.4.6. hệ ñiều hành cần có biện pháp xử lý ñể khôi phục lại hệ thống về tình trạng không bế tắc. hệ thống có thể chạy thuật toán phát hiện bế tắc mỗi khi có yêu cầu cấp phát tài nguyên không ñược thỏa mãn. Chu kỳ chạy thuật toán phát hiện bế tắc sẽ phụ thuộc vào hệ thống cụ thể và tần suất xuất hiện bế tắc trên ñó. Bế tắc chỉ có thể xuất hiện sau khi một tiến trình nào ñó yêu cầu tài nguyên và không ñược thỏa mãn. Nhìn chung. ðể tránh bế tắc có thể sử dụng một số biện pháp như sau: 68 . Lần lượt thu hồi lại tài nguyên từ các tiến trình bế tắc cho tới khi hết bế tắc. Việc giảm hiệu suất sử dụng CPU có thể có nguyên nhân là tiến trình bị bế tắc không thể thực hiện tiếp và do vậy không sử dụng CPU. ðây là cách giải quyết ñơn giản nhất và cho phép chấm dứt ngay bế tắc. ta ñã xem xét giải pháp loại trừ tương hỗ cho bài toán triết gia ăn cơm (hình 2. do thuật toán phát hiện bế tắc có ñộ phức tạp nhất ñịnh nên việc chạy thường xuyên như vậy làm giảm hiệu năng hệ thống. Hệ ñiều hành có thể chọn thứ tự kết thúc tiến trình dựa trên tiêu chí nào ñó.Quản lý tiến trình Trong phần trên ta ñã xem xét thuật toán phát hiện bế tắc. Giải pháp này sẽ dẫn tới bế tắc trong tình huống cả năm người cùng lấy ñược ñũa bên trái nhưng sau ñó không lấy ñược ñũa bên phải do ñũa ñã bị người bên phải giữ. Xử lý khi bị bế tắc Khi phát hiện bế tắc. khi chạy lại từ những ñiểm chưa bế tắc. các tiến trình có thể lại rơi vào bế tắc tiếp. Kết thúc lần lượt từng tiến trình ñang bị bế tắc cho ñến khi hết bế tắc. Như vậy.21). Chu kỳ phát hiện bế tắc như vậy cho phép phát hiện bế tắc ngay khi vừa xẩy ra. Nhược ñiểm của phương pháp này là bỏ phí phần việc tiến trình ñã thực hiện trước khi bế tắc. ðể tránh ảnh hưởng ñến hiệu năng.

Giải pháp ñồng bộ sử dụng thêm một cờ hiệu table có giá trị khởi tạo bằng 4. ví dụ người có số thứ tự chẵn lấy ñũa trái trước ñũa phải. semaphore table = 4. semaphore chopstick[5] = {1. Giải pháp ñồng bộ không bế tắc cho bài toán triết gia ăn cơm 69 .1.. } Hình 2. . <Suy nghĩ> } } void main(){ // chạy ñồng thời 5 tiến trình StartProcess(Philosopher(1)).. Quy ước bất ñối xứng về thứ tự lấy ñũa. signal(table).1.Quản lý tiến trình ðặt hai thao tác lấy ñũa của mỗi triết gia vào ñoạn nguy hiểm ñể ñảm bảo triết gia lấy ñược hai ñũa cùng một lúc. void Philosopher(int i){ //tiến trình P(i) for(.21. wait(chopstick[i]).1}.21. //lấy ñũa bên trái wait(chopstick[(i+1)%5]). ta sẽ xem xét việc thực hiện biện pháp chỉ cho tối ña bốn người ngồi vào bàn bằng cách cải tiến giải pháp sử dụng cờ hiệu trình bày ở trên. Sau ñây. Tại mỗi thời ñiểm chỉ cho tối ña bốn người ngồi vào bàn. Triết gia phải gọi thao tác wait(table) trước khi ngồi vào bàn và lấy ñũa. signal(chopstick[i]). //lấy ñũa bên phải <Ăn cơm> signal(chopstick[(i+1)%5]). StartProcess(Philosopher (5)).1. Giải pháp mới ñược thể hiện trên hình 2.1.){ //lặp vô hạn wait(table).. người có số thứ tự lẻ lấy ñũa phải trước ñũa trái.

xử lý và ghi dữ liệu ngược vào bộ nhớ. chúng ta sử dụng ñịa chỉ dưới dạng các tên (ví dụ tên biến. Các lệnh có thể có yêu cầu ñọc. Vấn ñề gán ñịa chỉ Chương trình máy tính thường không ñược viết trực tiếp trên ngôn ngữ máy. Khi dịch. tên hàm). Quá trình ñó ñược biểu diễn trên hình 3. chương trình dịch ánh xạ các tên ñó thành các ñịa chỉ tương ñối tính từ ñầu môñun chương trình. hệ ñiều hành cho phép trao ñổi thông tin giữa ñĩa và bộ nhớ hoặc tổ chức bộ nhớ ảo ñể thoả mãn nhu cầu các tiến trình. cấp phát bộ nhớ trống cho các tiến trình và giải phóng bộ nhớ ñã cấp phát.1. Trong quá trình thực hiện tiến trình. 70 . khi viết chương trình. 3. ñịa chỉ ñầu của tiến trình hoàn toàn có thể khác 00000 và thậm chí có thể thay ñổi trong quá trình thực hiện tiến trình. Các công việc liên quan tới quản lý bộ nhớ bao gồm quản lý bộ nhớ trống. Vị trí mà chương trình sẽ ñược tải vào trong bộ nhớ là có thể thay ñổi và thường không biết trước. Các chương trình nguồn phải qua một quá trình dịch và liên kết trước khi trở thành chương trình có thể tải vào và thực hiện. Trong trường hợp yêu cầu về bộ nhớ của các tiến trình lớn hơn dung lượng bộ nhớ vật lý. ñịa chỉ ñược biểu diễn theo một cách khác nhau. 3. CPU ñọc các lệnh từ bộ nhớ và thực hiện các lệnh này. Việc quản lý và sử dụng bộ nhớ hợp lý ảnh hưởng tới tốc ñộ và khả năng của toàn bộ hệ thống tính toán. ðây là chỗ chứa các tiến trình và dữ liệu của tiến trình. ánh xạ giữa ñịa chỉ lôgic và ñịa chỉ vật lý. CPU sử dụng ñịa chỉ ñể xác ñịnh lệnh và dữ liệu cụ thể. Do ñó. quản lý bộ nhớ là một chức năng quan trọng của hệ ñiều hành. Khi viết chương trình.1. cả dữ liệu và lệnh ñều phải ñược gán ñịa chỉ.ña chương trình. do vậy. ðể thực hiện một chương trình. ðơn vị ñánh ñịa chỉ có thể là từ máy (words) nhưng thường là byte. Chương trình liên kết sau ñó sẽ ánh xạ ñịa chỉ này thành các ñịa chỉ tương ñối tính từ ñầu chương trình. Ở mỗi giai ñoạn.Quản lý bộ nhớ CHƯƠNG 3: QUẢN LÝ BỘ NHỚ Bộ nhớ là tài nguyên quan trọng thứ hai sau CPU trong một hệ thống máy tính. trừ thế hệ máy tính ñầu tiên. Các kiểu tổ chức ñược xem xét từ ñơn giản như hệ thống ñơn chương trình cho tới phức tạp hơn .1. lập trình viên chưa biết và chưa thể gán ñịa chỉ cho các lệnh cũng như dữ liệu. ðể có thể thực hiện các lệnh và xử lý dữ liệu. Chẳng hạn. ðỊA CHỈ VÀ CÁC VẤN ðỀ LIÊN QUAN Có thể hình dung bộ nhớ máy tính như một chuỗi các ô nhớ ñược ñánh ñịa chỉ bắt ñầu từ 0. mà viết trên một ngôn ngữ bậc cao hoặc trên hợp ngữ. ngăn chặn việc truy cập trái phép tới các vùng bộ nhớ. Các chương trình dịch và liên kết cũng không biết ñịa chỉ chính xác khi thực hiện công việc của mình. mặc dù ñịa chỉ ñầu của bộ nhớ là 00000. Bộ nhớ bao gồm các byte hoặc các từ ñược ñánh ñịa chỉ.1. hệ ñiều hành ñọc chương trình từ ñĩa vào bộ nhớ và tạo ra tiến trình tương ứng. Trong chương này ta sẽ xem xét những kiểu tổ chức hệ thống và cách thức khác nhau ñể quản lý bộ nhớ.

2. Mã nguồn mô ñun khác (printf. ñịa chỉ lôgic còn ñược gọi là ñịa chỉ ảo. dữ liệu.1.exe) Chương trình tải (hệ ñiều hành) Tiến trình trong bộ nhớ Hình 3. 3. Một dạng ñịa chỉ lôgic ñiển hình là ñịa chỉ tương ñối. ðịa chỉ lôgic là ñịa chỉ ñược gán cho các lệnh và dữ liệu không phụ thuộc vào vị trí cụ thể của tiến trình trong bộ nhớ.1. ðịa chỉ lô gic và ñịa chỉ vật lý Do vị trí tiến trình trong bộ nhớ có thể thay ñổi. Khi thực hiện chương trình. Toàn bộ ñịa chỉ ñược gán trong chương trình tạo thành không gian nhớ lôgic của chương trình.lib) Chương trình liên kết Mô ñun tải ñược (prog. trong ñó mỗi phần tử của chương trình ñược gán một ñịa chỉ tương ñối với một vị trí nào ñó. Khả năng sử dụng những vùng nhớ không cố ñịnh cho tiến trình và ánh xạ ñịa chỉ là một yêu cầu rất quan trọng ñối với hệ ñiều hành khi thực hiện chức năng quản lý bộ nhớ. chẳng hạn ñầu chương trình.c) Chương trình dịch Chương trình dịch Mô ñun object (printf. Quá trình tạo và tải chương trình vào bộ nhớ 71 .o) Mô ñun object (prog.c) Mã nguồn (prog. hệ ñiều hành cần có khả năng gán ñịa chỉ và ánh xạ các ñịa chỉ này tuỳ thuộc vào vị trí tiến trình trong bộ nhớ. Trong trường hợp sử dụng bộ nhớ ảo. cần phân biệt hai loại ñịa chỉ: ñịa chỉ lôgic và ñịa chỉ vật lý.o) Thư viện hóa Thư viện (*. CPU “nhìn thấy” và sử dụng ñịa chỉ lôgic này ñể trỏ ñến các phần khác nhau của lệnh.Quản lý bộ nhớ Như vậy.

Các hàm này sẽ chiếm chỗ vô ích trong bộ nhớ. Hệ ñiều hành không kiểm soát quá trình tải mà chỉ cung cấp các hàm phục vụ việc tải các mô ñun thôi.2. 3. Trong thời gian thực hiện tiến trình.2. Sau ñây. ñịa chỉ lôgic ñược ánh xạ sang ñịa vật lý nhờ một cơ chế phần cứng gọi là khối ánh xạ bộ nhớ (MMU=Memory Mapping Unit).2. chương trình tải sẽ ñược gọi ñể tải hàm vào bộ nhớ. Các mô ñun có thể ñược viết và dịch thành file object (ñuôi . ðịa chỉ vật lý là ñịa chỉ chính xác trong bộ nhớ của máy tính và ñược phần cứng quản lý bộ nhớ ñặt lên ñường ñịa chỉ ñể truy cập ô nhớ tương ứng. việc kiểm tra và tải các hàm do chương trình người dùng ñảm nhiệm.1. Quá trình này ñược thể hiện trên hình 3. toàn bộ chương trình ñược tải vào bộ nhớ ñể thực hiện. ta xem xét một số kỹ thuật cho phép giải quyết vấn ñề này. Theo cách thông thường nhất.2.o). ánh xạ ñịa chỉ hàm vào không gian nhớ chung của chương trình và thay ñổi bảng ñịa chỉ ghi lại các ánh xạ ñó. liên kết và tải chương trình như vậy không cho phép sử dụng bộ nhớ hiệu quả.Quản lý bộ nhớ ðể truy cập bộ nhớ. Liên kết ñộng và thư viện dùng chung 72 . chương trình ñược tạo thành từ một số mô ñun khác nhau. ñịa chỉ lô gic cần ñược biến ñổi thành ñịa chỉ vật lý. Có nhiều cách khác nhau ñể thực hiện ánh xạ này. 3. cách tổ chức. hệ ñiều hành sẽ tải toàn bộ chương trình vào bộ nhớ. Mỗi khi có một lời gọi hàm. Một số mô ñun object chứa các hàm hay dùng có thể ñược lưu trữ dưới dạng thư viện ñể tiện cho việc liên kết với các mô ñun khác của chương trình. MỘT SỐ CÁCH TỔ CHỨC CHƯƠNG TRÌNH Một vấn ñề quan trọng trong tổ chức chương trình và quản lý bộ nhớ là làm sao giảm ñược không gian chương trình chiếm trên ñĩa và trong bộ nhớ. một kỹ thuật ñược áp dụng là tải các hàm hay chương trình con trong quá trình thực hiện chương trình. Từ nhận xét này.1. Thông thường. Cách tổ chức chương trình như vậy có thể gọi là cách tổ chức tĩnh. ðịa chỉ vật lý còn ñược gọi là ñịa chỉ tuyệt ñối. Hàm nào chưa ñược gọi ñến thì chưa ñược tải vào bộ nhớ. Cơ chế ánh xạ cụ thể cho những cách tổ chức bộ nhớ khác nhau sẽ ñược trình bày trong các phần sau. không gian nhớ vật lý khác với không gian nhớ lôgic của chương trình. hay còn gọi là tải ñộng. qua ñó có thể sử dụng không gian nhớ hiệu quả hơn. Khi cần thực hiện chương trình. một số phần của chương trình có thể không ñược dùng tới. ðối với các chương trình lớn. Trong kỹ thuật này. 3. Tải trong quá trình thực hiện Bình thường. chương trình gọi sẽ kiểm tra xem hàm ñược gọi ñã nằm trong bộ nhớ chưa. ñồng thời làm tăng thời gian tải chương trình lúc ñầu. Thực chất của kỹ thuật này là hoãn việc tải các hàm cho ñến khi hàm ñược sử dụng. sau ñó liên kết với nhau thành chương trình thực hiện ñược hay còn gọi là chương trình tải ñược. Nếu chưa. trong một phiên làm việc. chẳng hạn các hàm xử lý lỗi. Mặc dù ñơn giản và trực quản.

o) Thư viện hóa Chương trình liên kết Thư viện dùng chung (*. Kích thước chương trình khi ñó sẽ bằng kích thước chương trình vừa ñược dịch cộng với kích thước các hàm thư viện.Quản lý bộ nhớ Trong quá trình liên kết truyền thống. vị trí (ñịa chỉ) mà mô ñun ñó chiếm trong không gian ñịa chỉ của chương trình. có các hàm thư viện ñược dùng trong hầu hết các chương trình. Mô ñun khác (printf.Về bản chất. các hàm này sẽ có mặt lặp ñi lặp lại trong các chương trình làm tăng không gian chung mà các chương trình chiếm. Nếu liên kết tĩnh. Thay vào ñó.c) Chương trình dịch Chương trình dịch Mô ñun object (printf. ðoạn mã này chứa thông tin về mô ñun thư viện như mô ñun ñó nằm trong thư viện nào. chương trình liên kết không kết nối các mô ñun thư viện vào mô ñun chương trình.exe) Chương trình tải ñộng (hệ ñiều hành) Chương trình tải (hệ ñiều hành) Tiến trình trong bộ nhớ Hình 3.2: Liên kết ñộng trong thời gian thực hiện 73 . bao gồm cả không gian trên ñĩa và không gian bộ nhớ chính khi các chương trình ñược tải vào ñể thực hiện.dll) Mô ñun tải ñược (prog. còn gọi là liên kết tĩnh.c) Mã nguồn (prog. Trên thực tế. một ñoạn mã nhỏ sẽ ñược chèn vào vị trí của hàm thư viện. Một trong những cách giải quyết vấn ñề này là sử dụng kỹ thuật liên kết ñộng và các thư viện hàm dùng chung. ví dụ ña số chương trình viết cho Windows sử dụng các hàm quản lý cửa sổ và giao diện ñồ hoạ. kỹ thuật này chỉ thực hiện liên kết thư viện vào chương trình trong thời gian thực hiện.o) Mô ñun object (prog. các hàm thư viện ñược liên kết luôn vào mã chương trình. Trong giai ñoạn liên kết.

có thể phân biệt phân chương cố ñịnh và phân chương ñộng. mô ñun thư viện sẽ ñược thực hiện ngay. sau ñó chương trình sẽ thay ñịa chỉ ñoạn mã chèn thành ñịa chỉ mô ñun thư viện. PHÂN CHƯƠNG BỘ NHỚ ðể thực hiện tiến trình.3. trong ñó mỗi tiến trình ñược cấp một vùng bộ nhớ liên tục. thư viện dùng chung còn giúp cho việc cập nhật và sửa lỗi thư viện dễ dàng hơn. hệ ñiều hành cần cấp phát cho tiến trình không gian nhớ cần thiết. Trong lần thực hiện tiếp theo.DLL chứa thư viện. Nếu chưa. mô ñun thư viện sẽ ñược ñọc vào bộ nhớ. nếu chọn liên kết ñộng. Thay vào ñó.Quản lý bộ nhớ Trong thời gian chạy. khi cài ñặt trên máy khác cần cài ñặt cả file thực hiện chính và các file . 3. Trong phần này. trình liên kết cho phép người lập trình lựa chọn chế ñộ liên kết tĩnh hay liên kết ñộng. Khi xây dựng chương trình. tuy nhiên việc xem xét kỹ thuật này là cơ sở ñể tìm hiểu về nhiều vấn ñề khác trong quản lý không gian nhớ. Ngược lại. không cần mất thời gian kiểm tra và tải lại. khi tới ñoạn ñến ñoạn chương trình này. Ngoài ưu ñiểm tiết kiệm bộ nhớ. Tùy vào việc lựa chọn vị trí và kích thước của chương. hệ ñiều hành tiến hành chia sẻ bộ nhớ giữa các tiến trình. ðể có thể chứa nhiều tiến trình cùng một lúc trong bộ nhớ. Quá trình phân chia bộ nhớ thành chương như vậy gọi là phân chương bộ nhớ (partitioning) hay còn gọi là cấp phát vùng nhớ liên tục. Mặc dù kỹ thuật phân chương thuần túy ñược coi là lỗi thời. Hệ thống sẽ thông báo không tìm ñược file DLL cần thiết trong trường hợp không tìm ñược các file này. Kỹ thuật liên kết ñộng ñược minh họa trên hình 3. chương trình chỉ cần chứa thông tin về phiên bản của thư viện tương thích với chương trình và lựa chọn phiên bản phù hợp.2. 74 . người lập trình không cần biên dịch và liên kết lại toàn bộ chương trình. Các kỹ thuật tiên tiến hơn sẽ ñược ñề cập trong các phần sau. Nếu liên kết tĩnh. mỗi tiến trình sẽ ñược cung cấp một chương ñể chứa lệnh và dữ liệu của mình. Thư viện dùng chung của Windows ñược chứa trong các file có ñuôi là DLL (Dynamic Linking Library). Thư viện khi ñó ñược gọi là thư viện dùng chung. Kỹ thuật ñơn giản nhất là chia bộ nhớ thành các phần liên tục gọi là chương (partition). và do vậy vẫn ñược ñề cập tới ở ñây. khi ñoạn mã chèn vào ñược thực hiện. Khi có thay ñổi trong thư viện. file thực hiện không chứa thư viện và có kích thước nhỏ hơn so với liên kết tĩnh. ðối với mô ñun thư viện ñược sử dụng bởi nhiều tiến trình. Tuy nhiên. chúng ta sẽ xem xét một kỹ thuật cấp phát ñơn giản nhất. toàn bộ các mô ñun chương trình và thư viện ñược liên kết thành một file thực hiện duy nhất có thể cài và chạy trên máy khác. Việc cấp phát và quản lý vùng nhớ là chức năng quan trọng của hệ ñiều hành. tất cả tiến trình có thể dùng chung một bản duy nhất phần mã chương trình của thư viện. Hệ thống máy tính hiện ñại thường là hệ thống ña chương trình trong ñó hệ ñiều hành cho phép tải và giữ trong bộ nhớ nhiều tiến trình cùng một lúc. Một ví dụ sử dụng liên kết ñộng và thư viện dùng chung là hệ ñiều hành Windows. ñoạn này sẽ kiểm tra xem mô ñun thư viện ñã có nằm trong bộ nhớ chưa.

Phân chương cố ñịnh Phân chương cố ñịnh là phương pháp ñơn giản nhất ñể phân chia bộ nhớ cho các tiến trình. Kích thước các chương có thể chọn bằng nhau hoặc không bằng nhau. Các tiến trình cần ñược tải vào ñược sắp xếp trong hàng ñợi chờ ñến lượt ñược cấp chương nhớ. Mỗi chương khi ñó có một hàng ñợi riêng. Việc chọn các chương kích thước bằng nhau mặc dù ñơn giản hơn một chút song rất không mềm dẻo.1. Tiến trình có kích thước lớn hơn kích thước chương sẽ không thể tải vào chương và chạy ñược. (a) Mỗi chương có hàng ñợi 75 . Mỗi chương chứa ñược ñúng một tiến trình do ñó số tiến trình tối ña có thể chứa ñồng thời trong bộ nhớ sẽ bị giới hạn bởi số lượng chương.3. Khi ñược tải vào. tiến trình ñược cấp phát một chương. hệ ñiều hành chỉ sử dụng phương pháp phân chương với kích thước chương không bằng nhau. Trên thực tế. Bộ nhớ ñược phân thành những chương có kích thước cố ñịnh ở những vị trí cố ñịnh.3 a). tạm gọi là lựa chọn chương phù hợp nhất. Nhiều hàng ñợi Chương 4 500 KB Các tiến trình trong một hàng ñợi Chương 4 500 KB Chương 3 300KB Chương 2 200KB Chương 1 150KB Hệ ñiều hành Chương 3 300KB Chương 2 200KB Chương 1 150KB Hệ ñiều hành (a) (b ) Hình 3.3. Hiện tượng này gọi là phân mảnh trong (internal fragmentation). Do mỗi tiến trình chiếm cả một chương. ñể cấp. ta phải tăng kích thước của chương bằng kích thước của tiến trình lớn nhất. hệ ñiều hành giải phóng chương và chương có thể ñược cấp phát tiếp cho tiến trình mới. các tiến trình nhỏ cũng ñược cung cấp và chiếm cả chương như một tiến trình lớn.Quản lý bộ nhớ 3. Phần bộ nhớ rất ñáng kể còn lại của chương sẽ bị bỏ trống gây lãng phí lớn bộ nhớ. Có hai cách lựa chọn chương nhớ ñể cấp cho tiến trình ñang chờ ñợi. Giả sử các chương có kích thước khác nhau và xuất hiện yêu cầu cung cấp chương cho tiến trình. Cấp phát bộ nhớ sử dụng phân chương cố ñịnh. Muốn cho chương chứa ñược các tiến trình lớn. Tiến trình có kích thước phù hợp với chương nào sẽ nằm trong hàng ñợi của chương ñó (hình 3. Sau khi tiến trình kết thúc. Cách thứ nhất là lựa chọn chương nhỏ nhất có thể chứa tiến trình.

tiến trình ñược cấp một lượng bộ nhớ ñúng bằng lượng bộ nhớ mà tiến trình cần. Tiến trình cần bộ nhớ ñược xếp trong hàng ñợi ñể chờ tới lượt mình.Quản lý bộ nhớ riêng. Mỗi khi tiến trình ñược tải vào bộ nhớ. ðể tránh cho tiến trình bị bỏ qua nhiều lần do kích thước không phù hợp và phải ñứng quá lâu trong hàng ñợi. 3. Kích thước và số lượng chương do người vận hành máy quy ñịnh và ñược giữ nguyên trong những khoảng thời gian tương ñối dài. Do mỗi chương có một hàng ñợi riêng nên sẽ có thời ñiểm hàng ñợi của chương lớn hơn thì rỗng và chương cũng không chứa tiến trình nào.2.2. Thứ hai. số lượng tiến trình trong bộ nhớ bị hạn chế bởi số lượng chương. Nếu không có vùng bộ nhớ trống nào thoả mãn ñiều kiện này. do bị phân mảnh trong nên bộ nhớ ñược sử dụng không hiệu quả. cách cấp chương này có một nhược ñiểm ñáng kể sau. Trong cách này. Các vùng bộ nhớ cũng có thể ñược liên kết thành một danh sách kết nối. ở mỗi thời ñiểm. Mỗi khi tiến trình bị “chen ngang” trong hàng ñợi. phương pháp phân chương này hầu như không ñược sử dụng. chương 3 trống và không ñược sử dụng. Mỗi khi có khi có một chương trống. hệ ñiều hành sẽ cố gắng cung cấp bộ nhớ cho tiến trình ñó bằng cách tìm một lỗ (vùng bộ nhớ) trống có kích thước lớn hơn hoặc bằng kích thước tiến trình. hệ ñiều hành sẽ tìm khả năng gần nhất ñể tải tiến trình vào bộ nhớ. có thể tiến trình ở ñầu hàng ñợi hơn và có thứ tự ưu tiên cao hơn sẽ bị tải vào sau. Một ví dụ kinh ñiển về sử dụng thành công phương pháp phân chương này là hệ ñiều hành cho máy tính của hãng IBM OS/360 với phương pháp có tên gọi MFT (Multiprogramming with Fixed number of Tasks). Cách thứ hai cho phép khắc phục nhược ñiểm nói trên. trong khi hàng ñợi của chương nhỏ hơn thì có các tiến trình. có thể quy ñịnh số lần tối ña n mà mỗi tiến trình bị bỏ qua. Các tiến trình nhỏ này buộc phải ñợi ñược cấp chương nhỏ trong khi có thể tải vào chương lớn hơn và chạy. Với cách lựa chọn như vậy. Hệ ñiều hành sử dụng một bảng ñể biết ñược phần bộ nhớ nào ñã ñược dùng. Mặc dù phương pháp phân chương cố ñịnh tương ñối ñơn giản. Thứ nhất. sau khi kết thúc. Như vậy.3 a. Vùng bộ nhớ do tiến trình chiếm trước ñó trở thành một “lỗ” (vùng trống) trong bộ nhớ nếu các vùng nhớ trước và sau thuộc về các tiến trình khác. Trên hình 3. Mỗi khi ñến lượt một tiến trình. phần nào ñang còn trống. còn các tiến trình nhỏ vẫn phải chờ chương 1. tiến trình giải phóng bộ nhớ. tiến trình sẽ ñược thêm một ñiểm. trong bộ nhớ tồn tại một tập hợp các vùng trống có kích thước khác nhau. tiến trình nằm gần ñầu hàng ñợi nhất và có kích thước phù hợp với chương sẽ ñược tải vào ñể thực hiện.3 b). (b) Một hàng ñợi chung cho tất cả các chương Ưu ñiểm của cách cấp chương này là cho phép giảm tối thiểu phân mảnh trong và do ñó tiết kiệm ñược bộ nhớ. hệ ñiều hành sử dụng một hàng ñợi duy nhất cho tất cả các chương (hình 3. Tuy nhiên tính từ quan ñiểm toàn cục của hệ thống. kích thước và số lượng chương ñều không cố ñịnh và có thể thay ñổi.3. Phân chương ñộng Trong phương pháp phân chương này. hệ ñiều hành có thể chờ cho tới khi một vùng . song phương pháp này có một số nhược ñiểm. Hiện nay. Khi tiến trình ñược n ñiểm.

76 .

vùng trống ñược chia thành hai phần. Các chương thuộc về các tiến trình ñược dịch chuyển lại nằm kề nhau. Việc tìm kiếm có thể bắt ñầu từ ñầu danh sách các vùng trống hay từ vị trí của lần cấp phát cuối cùng. Có ba chiến lược cấp bộ nhớ thường ñược sử dụng: Vùng thích hợp ñầu tiên (first fit): chọn vùng trống ñầu tiên có kích thước lớn hơn hoặc bằng kích thước cần cấp phát. phần còn lại trở thành một vùng trống có kích thước nhỏ hơn vùng trống ban ñầu và ñược bổ sung vào danh sách các vùng trống mà hệ ñiều hành quản lý. Một yếu tố ảnh hưởng nhiều tới phân mảnh ngoài là lựa chọn vùng trống phù hợp khi cấp bộ nhớ cho tiến trình. Vùng bôi xám là vùng nhớ trống Cùng với thời gian.B bộ nhớ ñủ lớn ñược giải phóng ñể cấp phát hoặc tìm kiếm trong hàng ñợi một tiến trình ñủ A nhỏ ñể có thể chứa trong những vùng bộ nhớ còn trống. Nếu vùng trống này nằm kề cận với một vùng trống khác. ðể giải quyết vấn ñề phân mảnh ngoài. trái với phân mảnh trong như ta ñã nhắc tới ở trên.4. chúng sẽ ñược nối với nhau ñể tạo ra vùng trống mới có H? ?i?u h?nh kích thước lớn hơn. Không gian mà các vùng trống này chiếm do vậy bị bỏ phí. chiến lược 77 . Một phần cấp cho tiến trình. C B C C Quản lý bộ nhớ Mỗi tiến trình sau khi kết thúc tạo ra một vùngBtrống mới. Trên hình 3. Hiện tượng này gọi là phân mảnh ngoài. Các vùng trống giữa các tiến trình khi ñó sẽ dồn thành một vùng trống duy nhất. Kỹ thuật dồn bộ nhớ ñòi hỏi một số thời gian nhất ñịnh ñể di chuyển các chương bộ nhớ và làm nảy sinh vấn ñề bố trí lại ñịa chỉ trong các tiến trình. Sở dĩ gọi như vậy là do không gian bên ngoài các chương bị chia nhỏ. D H? ?i?u h?nh A Hệ ñiều hành Theo thời gian Hình 3. Chiến lược lựa chọn vùng trống ñúng ñắn ñể cấp phát sẽ làm giảm ñáng kể phân mảnh ngoài. người ta sử dụng kỹ thuật dồn bộ nhớ. H? ?i?u h?nh A H? ?i?u h?nh H? ?i?u trống Trong trường hợp kích thước vùngh?nh tìm ñược lớn hơn kích thước tiến trình. Tình trạng bộ nhớ khi phân chương ñộng. việc phân chương ñộng có thể sinh ra trong bộ nhớ các vùng trống kích thước quá nhỏ và do vậy không thể cấp phát tiếp cho bất kỳ tiến trình nào. Trong trường hợp sau.4 thể hiện tình trạng bộ nhớ khi tiến trình ñược cấp phát C và giải phóng chương nhớ theo thời gian sử dụng kỹ thuật phân chương ñộng.

3.Quản lý bộ nhớ ñược ñặt tên là vùng thích hợp tiếp theo (next fit). nếu 2 < s ≤ 2 . và 10MB. Ngược lại. một trong hai khối 2 ñược chia ñôi tiếp thành các khối kề cận kích thước 2 . Phân chương cố ñịnh hạn chế số lượng tiến trình trong bộ nhớ và gây phân mảnh trong. Phương pháp kề cận Cả hai phương pháp phân chương nói trên ñều có các nhược ñiểm. Vùng thích hợp nhất (best fit): chọn vùng trống nhỏ nhất trong số các vùng trống có kích thước lớn hơn hoặc bằng kích thước cần cấp phát. Giả sử các khối trống có kích thước là 2 với L<=K<=H. Khởi ñầu. Trong hai phương pháp ñầu. ñồng thời gây phân mảnh ngoài. một trong hai khối 2 sẽ ñược cấp phát. hai phương pháp ñầu cho phép giảm phân mảnh ngoài tốt hơn phương pháp thứ ba. trong ñó 2 là kich H thước khối nhớ nhỏ nhất có thể ñược cấp phát (thường không nhỏ hơn 1KB). toàn bộ nhớ là một khối trống duy nhất có kích thước 2 . 8MB. 2 là kích thước khối nhớ lớn nhất có thể cấp phát (thường bằng kích thước toàn bộ nhớ). Chiến lược best fit sẽ chọn vùng trống 7MB. Không gian còn thừa từ vùng trống này sau khi cấp xong tạo ra vùng trống mới có kích thước lớn hơn so với hai chiến lược trên. Ví dụ: trong bộ nhớ có 4 vùng trống có kích thước lần lượt như sau 3MB. khối nhớ ñược chia ñôi thành hai khối kề cận. ðể quyết ñịnh chiến lược nào là tốt nhất. 7MB. Phân chương ñộng. Vùng không thích hợp nhất (worst fit): từ nhận xét là các vùng trống sinh ra sau khi cấp phát theo chiến lược thứ hai (best fit) có kích thước bé và do ñó thường không thích hợp cho việc cấp phát tiếp theo. mặc dù tránh ñược các nhược ñiểm này. 3. H-2 H-3 H . phương pháp thứ nhất ñơn giản và có tốc ñộ nhanh nhất. yêu cầu cấp phát vùng nhớ kích thước 6MB.3. Kết quả mô phỏng và thực nghiệm cho thấy. Quá trình này tiếp tục cho tới khi khối nhớ nhỏ nhất có kích thước lớn hơn hoặc bằng s ñược tạo ra hoặc ta L ñạt giới hạn dưới 2 . Một phương pháp cho phép dung hoà các nhược ñiểm của hai phương pháp nói trên ñược gọi là phương pháp kề cận (buddy systems). So sánh tiếp. H-1 Trong trường hợp s ≤ 2 . song tương ñối phức tạp trong việc quản lý vùng trống và lựa chọn vùng trống phù hợp. Chiến lược worst fit sẽ chọn vùng trống 10MB. Chiến lược này ñơn giản và do ñó thực hiện nhanh nhất. Ba chiến lược cấp phát ở trên sẽ cho kết quả như sau: Chiến lược first fit sẽ chọn khối 8MB ñể chia và cấp phát. Trong phương pháp này. Nếu 2 < s ≤ 2 thì toàn khối nhớ sẽ ñược cấp phát. Vùng trống sinh ra sau khi cấp phát do vậy sẽ có kích thước bé nhất. Giả sử có yêu H-1 H cầu cấp phát khối nhớ kích thước s. người ta nghĩ ra chiến lược thứ ba này. nhiều nghiên cứu ñã ñược thực hiện. hệ ñiều hành quản lý và cấp phát khối nhớ có kích thước là K L luỹ thừa của 2. mỗi khối có kích Hthước 2 1 H-2 H-1 H-2 . Vùng trống lớn nhất sẽ ñược cấp phát.

78 .

phương pháp này có thể sử dụng kết hợp với kỹ thuật phân trang sẽ ñược trình bày ở phần sau ñể tận dụng ưu ñiểm của mình. 1GB trống Cấp 205MB Cấp 120MB Cấp 500MB Giải phóng B Giải phóng C Giải phóng A A = 205MB A = 205MB 256MB 256MB 1GB C=500MB 512MB A = 205MB 256MB 1GB 512MB K Hình 3. trong bộ nhớ sẽ hình thành tập hợp các khối trống kích thước 2 . Việc truy cập trái phép có thể phá vỡ an toàn bảo mật thông tin. Hai vấn ñề nói trên có thể giải quyết bằng cách sử dụng một cơ chế phần cứng như minh họa trên hình 3. các tiến trình có thể vô tình (do lỗi) hoặc cố ý truy cập tới vùng bộ nhớ thuộc tiến trình khác. một vấn ñề cần giải quyết là ánh xạ các ñịa chỉ lôgic của tiến trình thành ñịa chỉ vật lý.5.5.3. Do ñó. khi có hai khối kề cận cùng kích thước. Tuy nhiên. Hệ ñiều hành Linux sử dụng phương pháp kề cận kết hợp với trang nhớ kích thước 4KB ñể quản lý bộ nhớ vật lý. Hệ ñiều hành quản lý các khối này bằng cách tạo ra danh sách móc nối cho những khối có kích thước bằng nhau.6. Vấn ñề tiếp theo cũng cần giải quyết là chống truy cập trái phép bộ nhớ. chúng sẽ ñược kết hợp lại tạo ra khối có kích thước gấp ñôi và ñược chuyển vào danh sách các khối kích thước tương ứng. Một ví dụ minh họa quá trình cấp phát và giải phóng bộ nhớ sử dụng phương pháp kề cận ñược thể hiện qua hình 3. Ánh xạ ñịa chỉ và chống truy cập bộ nhớ trái phép Với việc phân chương bộ nhớ.B=120MB B=120MB 128MB 128MB C=500MB 512MB Quản lý bộ nhớ Sau một thời gian tiến hành phân chia như vậy. Ngược lại. Với nhiều tiến trình chứa trong bộ nhớ.4. 79 . Ví dụ cấp phát và giải phóng chương nhớ sử dụng kỹ thuật kề cận Cũng như kỹ thuật phân chương nói chung. 3. các tiến trình sẽ ñược tải vào các chương bộ nhớ ñể thực hiện. Các khối bị chia ñôi ñược chuyển sang danh sách khối bé hơn. phương pháp kề cận thuần túy hiện ñược coi là có nhiều nhược ñiểm. Vị trí các chương trong bộ nhớ thường không ñược biết trước và có thể thay ñổi trong quá trình thực hiện tiến trình (ví dụ khi hệ thống tiến hành dồn bộ nhớ ở phương pháp phân chương ñộng). Nếu tiến trình bị truy cập trái phép là tiến trình của hệ ñiều hành thì việc truy cập có thể gây ra lỗi làm hỏng toàn bộ hệ thống.

ðịa chỉ lôgic ñược so sánh với nội dung thanh ghi giới hạn. nội dung thanh ghi cơ sở sẽ ñược thay ñổi thành ñịa chỉ mới của chương.5. Giả sử. Thanh ghi thứ nhất gọi là thanh ghi cơ sở chứa ñịa chỉ bắt ñầu của tiến trình trong bộ nhớ. Các tiến trình thường ñược tải ra và tải vào từ các ñĩa tốc ñộ cao. Chỉ những ñịa chỉ lôgic nhỏ hơn giá trị thanh ghi này mới ñược coi là hợp lệ và ñược ánh xạ thành ñịa chỉ vật lý. tiến trình P1 có một yêu cầu vào ra ñang ở trong hàng ñợi do thiết bị vào ra bận. 3. Thời gian tải phụ thuộc vào tốc ñộ truy cập ñĩa. Tiến trình khi ñó bị tải ra ñể nhường chỗ cho tiến trình khác ñến lượt sử dụng CPU. Thanh ghi thứ hai gọi là thanh ghi giới hạn và chứa giới hạn ñịa chỉ lô gic của tiến trình tức ñộ dài chương chứa tiến trình. Cơ chế ánh xạ ñịa chỉ và chống truy cập trái phép Trong trường hợp các chương bị di chuyển trong bộ nhớ. tốc ñộ truy cập bộ nhớ và kích thước tiến trình. tiến trình có thể ñược chứa vào vị trí cũ hoặc ñược cấp cho một chương ñịa chỉ hoàn toàn mới. Sau ñó các tiến trình bị tải ra lại ñược tải vào thực hiện tiếp. hai thanh ghi ñặc biệt của processor sẽ ñược sử dụng.6.Quản lý bộ nhớ Khi hệ ñiều hành tải tiến trình vào và thực hiện. Một hạn chế với các tiến trình bị trao ñổi là tiến trình ñó phải ở trạng thái nghỉ. ñặc biệt không thực hiện các thao tác vào ra. Trao ñổi giữa bộ nhớ và ñĩa (swapping) Trong các hệ ña chương trình. Ta tải P1 ra và tải P2 vào vị trí của P1. ñể có thể thực hiện nhiều tiến trình một lúc. Các phép ánh xạ sau ñó vẫn diễn ra như cũ. ðịa chỉ vật lý ñược tạo ra bằng cách cộng nội dung thanh ghi cơ sở với ñịa chỉ lôgic. Khi thao tác vào ra của . Việc trao ñổi giữa ñĩa và bộ nhớ như vậy có thể thực hiện khi một tiến trình ñã hết khoảng thời gian sử dụng CPU của mình và phải ñợi cho tới khi ñến lượt. Tiến trình cũng có thể bị tải ra ñể nhường chỗ cho một tiến trình khác có thứ tự ưu tiên cao hơn. Thanh ghi giới hạn Thanh ghi cơ sở CPU ðịa chỉ lô gic < no yes ðịa chỉ Bộ nhớ + vật lý Lỗi truy cập bộ nhớ Hình 3. chẳng hạn như khi hệ ñiều hành tiến hành dồn bộ nhớ ñể tránh phân mảnh ngoài. các tiến trình ñang thực hiện có thể bị tạm thời tải ra ñĩa nhường chỗ ñể tải các tiến trình khác vào và thực hiện.3. Khi ñược tải vào lại.

0 0 1 0 .80 0 A.0 C.

mỗi tiến trình chiếm một chương tức một vùng liên tục trong bộ nhớ. Nhược ñiểm của việc phân chương bộ nhớ là tạo ra phân mảnh: phân mảnh trong ñối với phân chương cố ñịnh.3 1 1 C.1. phân mảnh ngoài ñối với phân chương ñộng.C. là một trong hai kỹ thuật cấp phát bộ nhớ như D. Hình 3. A. hậu quả ñều là việc không tận dụng hết bộ nhớ. Trong phần này ta sẽ xem xét kỹ thuật phân trang (paging). Khái niệm phân trang bộ nhớ D.2 D3 Trong các hệ thống phân trang. mỗi tiến trình ñược cấp phát nhiều khung kích thước nhỏ.2 thao D.1 A.4.0 D.2 D. Tiến trình A và C chiếm các khung nằm cạnh nhau trong khi tiến trình D chiếm các khung nằm trong hai vùng nhớ cách xa nhau.2 tác này sẽ truy cập vùng ñịa chỉ của P1 trước kia mà hiện giờ P2 2 2 C. có kích thước và vị trí không thay ñổi. có thể sử dụng phương pháp cấp phát cho tiến trình những vùng nhớ không nằm liền nhau.2 D.1 C.7: Phân trang bộ nhớ Kỹ thuật phân trang có ñiểm tương tự với phân chương cố ñịnh. Tuy nhiên. Mỗi tiến trình sẽ ñược cấp các khung ñể chứa các trang nhớ của mình.1 ứng. bộ nhớ vật lý ñược chia thành các khối nhỏ kích thước cố ñịnh và bằng nhau gọi là khung trang (page frame) hoặc ñơn giản là khung.4.0 C. Không gian ñịa chỉ lôgic của tiến trình cũng ñược chia thành những khối gọi là trang (page) có kích thước bằng kích thước của khung.1 3. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Bộ nhớ Tiến trình A Tiến trình B 3 Tiến trình C Không gian nhớ lô gic của các tiến trình A và B: 3 trang D: 4 trang Hình 3. Các khung thuộc về một tiến trình có thể nằm ở các vị trí khác nhau trong bộ nhớ chứ không nhất thiết nằm liền nhau theo thứ tự các trang. PHÂN TRANG BỘ NHỚ Trong kỹ thuật phân chương trình bày ở trên.0 vậy. D. khác với phân chương.2 3. trong ñó mỗi khung tương tự một chương. nhờ vậy giảm ñáng kể phân mảnh trong.7 sau cho thấy có ba tiến trình ñược tải vào bộ nhớ.P1 ñược ñáp ñang chiếm. 81 .1 2 Quản lý bộ nhớ A. ðể hạn chế nhược ñiểm của kỹ thuật cấp phát cho tiến trình chương nhớ.

ðịa chỉ lô gic ðộ dài số thứ tự trang (p) m ñộ dịch trong trang (0) n Ví dụ: cho trang nhớ kích thước 1024B. tương ứng với không gian nhớ lô gic của tiến trình là 2 . Mỗi ô của bảng tương ứng với một trang và chứa số thứ tự hay ñịa chỉ cơ sở của khung chứa trang ñó trong bộ nhớ.Quản lý bộ nhớ 3 4 8 9 Khi phân trang. ñể ánh xạ ñịa chỉ lôgic của tiến trình thành ñịa chỉ vật lý. và n bit thấp chứa ñộ dịch trong trang nhớ. sẽ có: phần p = 1502/1024 = 1 tương ứng với 6 bit cao 000001 phần o = 1502 module 1024 = 478 tương ứng với 10 bit thấp 0111011110.7. Do tiến trình nằm trong những khung nhớ không liền kề nhau. 0 1 2 0 1 2 0 1 2 5 6 7 0 1 2 3 Bảng trang tiến trình D Bảng trang tiến trình A Bảng trang tiến trình C Hình 3. Kích thước trang nhớ khi ñó sẽ n bằng 2 .8. 3. nếu kích thước tiến trình không bằng bội số kích thước trang. Trên hình 3.2. mỗi tiến trình bị bỏ phí một nửa trang do phân mảnh trong. C. Số thứ tự trang ñược dùng ñể tìm ra ô tương ứng trong bảng trang. ñộ dài ñịa chỉ lô gic 16 bit. ðịa chỉ lô gic 1502. trong ñó ñộ dài ñịa chỉ lô gic là m+n m+n bit. 82 . ðịa chỉ này ñược cộng vào ñộ dịch trong trang ñể tạo ra ñịa chỉ vật lý và ñược chuyển cho mạch ñiều khiển bộ nhớ ñể truy cập. Ánh xạ ñịa chỉ Bảng trang. D ñã ñược minh họa ở hình 3.8 là ví dụ bảng trang cho ba tiến trình A. Ví dụ bảng trang của các tiến trình ðịa chỉ. Phương pháp phân trang không bị ảnh hưởng của phân mảnh ngoài do từng khung trong bộ nhớ ñều có thể sử dụng ñể cấp phát. Tính trung bình. Cấu trúc ñịa chỉ lô gic ñược thể hiện trên hình sau. khoảng không gian bỏ phí do phân mảnh trong bằng phần không gian không sử dụng trong trang cuối của tiến trình. Cần lưu ý là mỗi tiến trình có bảng trang riêng của mình. Thay vào ñó người ta sử dụng một bảng gọi là bảng trang (page table). Phần m bit cao chứa số thứ tự của trang. hay 0000010111011110 ở dạng nhị phân. từ bảng ta tìm ñược ñịa chỉ cơ sở của khung tương ứng. việc dùng một thanh ghi cơ sở cho mỗi tiến trình như ở phương pháp phân chương là không ñủ.4. ðịa chỉ lô gic khi phân trang bao gồm hai phần: số thứ tự trang (p) và ñộ dịch (o) của ñịa chỉ tính từ ñầu trang ñó.

9. { Hình 3. Phần cứng ánh xạ ñịa chỉ khi phân trang Như ñã nói ở trên.9. Kích thước trang quá bé cũng không tiện cho việc trao ñổi với ñĩa. vốn ñược thực hiện theo từng khối lớn. Mỗi khoản mục của bảng khung ứng với một khung của bộ nhớ vật lý và chứa các thông tin về khung này: còn trống hay ñã ñược cấp. Lưu ý rằng với kích thước trang bằng lũy thừa của 2. kích thước trang luôn ñược chọn bằng lũy thừa của 2. giảm kích thước trang cho phép tiết kiệm bộ nhớ. hệ ñiều hành sử dụng một bảng gọi là bảng khung (frame table). Ví dụ.v. Với việc phân trang. và nằm trong khoảng từ 512B ñến 16MB. phân mảnh trong khi phân trang có giá trị trung bình bằng nửa trang. người ta thường chọn trang có kích thước vừa phải. Tiến 83 . Tuy nhiên. khung trang nào ñã ñược cấp và cấp cho tiến trình nào. Thực tế.Quản lý bộ nhớ Cơ chế ánh xạ ñịa chỉ. ðể cấp phát ñược bộ nhớ. hệ ñiều hành cần biết các khung trang nào còn trống. cấp cho tiến trình nào. Do việc phân trang phải dựa vào sự hỗ trợ của phần cứng khi biến ñổi ñịa chỉ. khó quản lý. cách nhìn của người dùng và chương trình ứng dụng ñối với bộ nhớ (tức là bộ nhớ lôgic) hoàn toàn khác với bộ nhớ vật lý thực.v. ðể thuận tiện cho việc ánh xạ ñịa chỉ theo cơ chế trên hình 3. Hệ ñiều hành Windows 32 bit chọn kích thước trang bằng 4KB. kích thước trang nhỏ làm số lượng trang tăng lên. chương trình có thể gồm các trang nằm xa nhau và rải rác trong bộ nhớ. Như vậy. Quá trình biến ñổi từ ñịa chỉ lô gic thành ñịa chỉ vật lý ñược thực hiện nhờ phần cứng theo cơ chế ñược thể hiện trên hình 3. ðể quản lý ñược các thông tin này. Cần lưu ý là việc ánh xạ ñịa chỉ ñều phải dựa vào phần cứng vì thao tác ánh xạ cần thực hiện thường xuyên và ảnh hưởng lớn tới tốc ñộ toàn hệ thống. việc tách phần p và o trong ñịa chỉ lô gic ñược thực hiện dễ dàng bằng phép dịch bit thay vì thực hiện phép chia và chia mô ñun thông thường (xem ví dụ về ñịa chỉ lô gic ở trên).9. kích thước trang và khung do phần cứng quyết ñịnh. Trên thực tế. Quản lý khung. Cơ chế ánh xạ giữa hai loại ñịa chỉ hoàn toàn trong suốt ñối với chương trình và do hệ ñiều hành quản lý. dẫn tới bảng trang to hơn. vi xử lý Pentium của Intel hiện nay hỗ trợ kích thước trang bằng 4KB hoặc 4MB. Bộ nhớ lôgic khi ñó ñược chương trình ứng dụng coi như một khối lien tục và duy nhất chứa chương trình ñó.

Phần còn lại o kích thước 12 bit chứa ñộ dịch trong trang. 3. không có khả năng truy cập tới vùng bộ nhớ thực nằm ngoài các trang ñược cấp cho tiến trình ñó. Số lượng khoản mục cần có trong bảng phân trang sẽ là 32 12 20 2 /2 =2 . do vậy cần chia bảng phân trang ra thành những phần nhỏ hơn. Mỗi khoản mục của bảng mức trên không chỉ tới một trang mà chỉ tới một bảng phân trang khác.Quản lý bộ nhớ trình ứng dụng. Khoản mục này chứa ñịa chỉ của khung tương ứng. . Vậy phải tổ chức bảng phân trang sao cho tốc ñộ truy cập là cao nhất. kích thước bảng phân trang sẽ là 22 2 =4MB. tức là ñòi hỏi truy cập bảng phân trang. Tốc ñộ truy cập bảng phân trang khi ñó rất cao nhưng kích thước và số lượng bảng phân trang sẽ bị hạn chế do số lượng thanh ghi của CPU không nhiềulắm. Giả sử không gian ñịa chỉ lôgic là 32 12 2 . Tốc ñộ truy cập bảng phân trang do ñó ảnh hưởng rất lớn tới tốc ñộ truy cập bộ nhớ của toàn hệ thống. Do tốc ñộ bộ nhớ tương ñối chậm nên ñòi hỏi nhiều thời gian cho việc truy cập bảng. do ñó. Giải pháp thường áp dụng ñể tăng tốc ñộ là sử dụng bộ nhớ cache tốc ñộ cao. 32 Việc chia nhỏ ñược thực hiện bằng cách tổ chức bảng phân trang nhiều mức. Phương pháp dùng thanh ghi dó ñó không áp dụng ñược. Việc tìm ra vùng trống kích thước 4MB trong bộ nhớ có thể không ñơn giản. Bảng phân trang nhiều mức Các hệ thống tính toán hiện ñại cho phép sử dụng không gian ñịa chỉ lôgic rất lớn (2 64 ñến 2 ). kích thước trang nhớ là 4KB=2 . Các máy tính hiện ñại ñều có bộ nhớ lớn và do ñó cũng cần bảng phân trang tương ứng. Các bảng phân trang khi ñó ñược giữ trong bộ nhớ. Tổ chức bảng phân trang Tốc ñộ truy cập bảng phân trang Mỗi thao tác truy cập bộ nhớ ñều ñòi hỏi thực hiện ánh xạ giữa ñịa chỉ lôgic và ñịa chỉvật lý. Chi tiết về nguyên tắc và cáh tổ chức cache sẽ ñược ñề cập tới ở một trong các chương sau. Nếu mỗi khoản mục có kích thước 4 byte. Từ ñây ta tìm ñược bảng mức dưới tương ứng.4.3. Vị trí của mỗi bảng sẽ ñược trỏ tới bởi một thanh ghi gọi là thanh ghi cơ sở của bảng trang (PTBR-Page-Table Base Register). Ta lấy ví dụ bảng hai mức. Phần thứ nhất p1 kích thước 10 bit cho phép ñịnh vị khoản mục trong bảng mức trên. ðịa chỉ 32 bit khi ñó ñược chia thành 3 phần. Cách ñơn giản nhất là sử dụng một tập hợp các thanh ghi dành riêng làm bảng phân trang. Phần p2 cho phép ñịnh vị khoản mục trong bảng mức dưới. Kích thước bảng phân trang do ñó cũng tăng theo. Mỗi tiến trình cần có một bảng phân trang riêng như vậy.

84 .

ñoạn cũng có thể ñược ñánh số ñể phân biệt.1 Khái niệm Mỗi chương trình bao gồm một số thành phần có ý nghĩa khác nhau: dữ liệu. ngăn xếp. không quan tâm ñến tổ chức lôgic và ý nghĩa các thành phần. chẳng hạn khi lập trình bằng assembly. ðoạn ngăn xếp. 3.5. chứa ngăn xếp của tiến trình trong quá trình thực hiện. trong ñó mỗi tiến trình ñược cấp phát những vùng nhớ không nhất thiết nằm gần nhau.5.10. Bộ nhớ ñược coi như một khối duy nhất các byte hoặc các từ. Việc chia chương trình thành các ñoạn có thể do người lập trình thực hiện. lệnh.Quản lý bộ nhớ { { { Hình 3. 85 . hoặc do chương trình dịch tự của ngôn ngữ bậc cao tự ñộng chia. Bảng phân trang hai mức 3. Tuy nhiên. ta sẽ xem xét một kỹ thuật cấp phát bộ nhớ khác. Mỗi ñịa chỉ lôgic do CPU sinh ra khi ñó sẽ gồm hai phần: số thứ tự của ñoạn và ñộ dịch trong ñoạn. khi phân trang. ñược phân biệt bởi tên và ñộ dài của mình. chứa các biến toàn cục. Một cách tổ chức khác cho phép tính tới tổ chức lôgic của chương trình là phân ñoạn (segmentation). chứa mã toàn bộ chương trình. hàm. Chẳng hạn. Không gian ñịa chỉ lôgic của tiến trình khi ñó sẽ gồm tập hợp các ñoạn. Chương trình ñược chia thành những phần kích thước khác nhau gọi là ñoạn (segment) tuỳ theo ý nghĩa của chúng.v. các mảng. ví dụ ñể không khai báo mảng vượt kích thước tối ña này. ta có thể phân biệt: ðoạn chương trình. Ngoài cách dùng tên. Người lập trình khi ñó cần biết kích thước tối ña ñược phép của ñoạn. ðoạn dữ liệu. . Mỗi ñoạn tương ứng với không gian ñịa chỉ riêng. chương trình ñược chia thành các trang kích thước ñều nhau. PHÂN ðOẠN BỘ NHỚ Trong phần này. hay một số hàm hoặc thủ tục của chương trình.v.

thuật toán cấp phát first-fit hoặc best-fit như phân chương ñộng sẽ ñược sử dụng. ñộ dịch trong ñoạn (o) > ðối với trường hợp chương trình viết trên ngôn ngữ bậc cao. Bảng ñoạn ñược sử dụng kết hợp với một cơ chế phần cứng cho phép biến ñổi từ ñịa chỉ lô gic sang ñịa chỉ tuyệt ñối (hình 3. phân ñoạn không sinh phân mảnh trong nhưng lại tạo phân mảnh ngoài. không gian nhớ lô gic sẽ bao gồm không gian nhớ của các ñoạn. Kích thước ñoạn thường phụ thuộc kích thước bộ nhớ. và ñộ dịch từ ñầu ñoạn là bao nhiêu. mỗi chương trình có thể chiếm những ñoạn bộ nhớ không nằm liền kề nhau. ðịa chỉ cơ sở là vị trí bắt ñầu của ñoạn trong bộ nhớ máy tính. chỉ rõ hai thông tin: ñịa chỉ thuộc ñoạn nào. khác với phân chương ñộng. 86 . Hai thông tin này cần ñược người lập trình cung cấp rõ ràng. Mỗi ô của bảng ñoạn chứa ñịa chỉ cơ sở và giới hạn của ñoạn. Tương tự như trong trường hợp phân trang.5. Mỗi tiến trình có một bảng như vậy. ñịa chỉ lô gic với hai thành phần như vậy ñược chương trình dịch sinh ra trong quá trình dịch ñể thể hiện cấu trúc và ý nghĩa các ñoạn của chương trình nguồn. Việc chống truy cập trái phép ñược thực hiện nhờ các bit bảo vệ chứa trong khoản mục của bảng phân ñoạn. ðoạn càng nhỏ thì phân mảnh ngoài càng giảm. khác với trường hợp phân trang. việc ánh xạ ñược thực hiện dựa trên bảng ñoạn (segment table). nếu kích thước ñoạn là một byte hay một từ tức là bằng ñơn vị thông tin nhỏ nhất ñược ñánh ñịa chỉ của bộ nhớ thì sẽ hoàn toàn không có phân mảnh ngoài. Trường hợp ñặc biệt. Khi sử dụng phân ñoạn.2. ñịa chỉ lô gic bao gồm hai thành phần. phân mảnh ngoài khi phân ñoạn nhỏ hơn phân chương ñộng do tiến trình ñã ñược chia thành các ñoạn kích thước nhỏ hơn. Do vậy. số lượng ñoạn tăng làm tăng kích thước của bảng phân ñoạn và tăng thời gian quản lý các ñoạn. ðịa chỉ lô gic cần phải ñược biến ñổi thành ñịa chỉ vật lý ñể xác ñịnh ô nhớ cụ thể của máy tính. 3. Các ñoạn ñược gắn bit bảo vệ dựa theo ý nghĩa của ñoạn ñó. Nhìn chung. Cũng như phân chương ñộng. ñược cấu trúc như sau: < số thứ tự ñoạn (s). ñịa chỉ lô gic sẽ có hai thành phần. Bộ nhớ càng lớn thì kích thước ñoạn cũng ñược chọn càng lớn.11). Mức ñộ phân mảnh ngoài phụ thuộc vào kích thước trung bình của ñoạn. ðối với ñoạn ñược ñánh số. Chẳng hạn. Ánh xạ ñịa chỉ. còn giới hạn ñoạn chính là ñộ dài ñoạn và sẽ ñược sử dụng ñể chống truy cập trái phép ra ngoài ñoạn. các ñoạn chứa lệnh sẽ không cho phép ghi mà chỉ cho phép ñọc. Tuy nhiên.Quản lý bộ nhớ Phân ñoạn bộ nhớ giống với phân chương ñộng ở chỗ bộ nhớ ñược cấp phát theo từng vùng kích thước thay ñổi. Mỗi khi có yêu cầu cấp phát bộ nhớ cho các ñoạn. trong ñó tiến trình cung cấp duy nhất một ñịa chỉ và phần cứng có nhiệm vụ tách ñịa chỉ này thành số trang và ñộ dịch. Ánh xạ ñịa chỉ và chống truy cập trái phép ðịa chỉ. Tuy nhiên.

các hệ thống tính toán hiện ñại thường kết hợp cả hai phương pháp tổ chức bộ nhớ này. ðộ dịch o sẽ ñược cộng vào ñịa chỉ khung ñể tính ra ñịa chỉ vật lý.Quản lý bộ nhớ { Hình 3. Phần thứ nhất s là số thứ tự ñoạn. ñịa chỉ phải gồm ba phần (s. Mỗi ñoạn lại ñược phân trang. 87 . Khoản mục chứa con trỏ tới bảng chia trang cho ñoạn ñó. Tiến trình bao gồm nhiều ñoạn. Kết hợp phân ñoạn với phân trang ðể kết hợp các ưu ñiểm của phân doạn với các ưu ñiểm của phân trang.o). Cơ chế ánh xạ ñịa chỉ khi phân ñoạn 3. ðể ñịnh vị ô nhớ trong phương pháp này. s cho phép xác ñịnh khoản mục ứng với ñoạn trong bảng chia ñoạn.11.p.3. Như vậy mỗi tiến trình có một bảng phân ñoạn riêng và mỗi ñoạn lại có bảng phân trang riêng của mình. Số thứ tự trang p cho phép xác ñịnh khung trang tương ứng.5.

6. Càng nhiều tiến trình trong bộ nhớ thì CPU càng ñược sử dụng 88 .Số lượng tiến trình ñược chứa ñồng thời trong bộ nhớ tăng lên do mỗi tiến trình chiếm ít chỗ hơn. Khái niệm bộ nhớ ảo Qua các nội dung trình bày ở phần trên: phân trang. Việc ánh xạ ñược thực hiện trong thời gian thực hiện. Các phần nhỏ này có thể bị trao ñổi ra ñĩa hoặc từ ñĩa vào trong quá trình thực hiện.12. với tiến trình cũng như người dùng không nhìn thấy và không cần biết ñến việc ánh xạ này. có thể rút ra một số nhận xét như sau: .Tiến trình có thể bị chia thành những phần nhỏ (trang hoặc ñoạn) và ñược xếp nằm rải rác trong bộ nhớ. phân ñoạn. Các trang hoặc ñoạn có thể ñược trao ñổi từ ñĩa vào bộ nhớ khi có nhu cầu truy cập tới.Quản lý bộ nhớ Hình 3. Các nhận xét này cho phép rút ra một kết luận rất quan trọng: không nhất thiết toàn bộ các trang hoặc ñoạn của một tiến trình phải có mặt ñồng thời trong bộ nhớ khi tiến trình chạy. Ánh xạ ñịa chỉ kết hợp phân ñoạn với phân trang 3.1. . BỘ NHỚ ẢO 3.Các phép truy cập ñịa chỉ trong tiến trình ñếu sử dụng ñịa chỉ lôgic. trao ñổi bộ nhớ-ñĩa. Phân tích việc thực hiện các tiến trình cũng cho thấy không phải tiến trình nào khi chạy cũng sử dụng tất cả các lệnh và dữ liệu của mình với tần suất như nhau. ñịa chỉ này sau ñó ñược ánh xạ thành ñịa chỉ vật lý nhờ các cơ chế phần cứng.6. Ví dụ các ñoạn lệnh xử lý lỗi có thể rất ít khi ñược gọi. Việc thực hiện các tiến trình chỉ nằm một phần trong bộ nhớ có một số ưu ñiểm sau: .

Tuy nhiên. Nếu trang ñã ở trong bộ nhớ. Người lập trình có thể viết những chương trình lớn mà không cần quan tâm tới hạn chế của bộ nhớ thực. tổ chức bộ nhớ ảo trên cơ sở phân ñoạn không ñược ñề cập tới. trang cũng ñược sử dụng như ñơn vị ñể xây dựng bộ nhớ ảo. mỗi tiến trình sẽ gồm có tập hợp các trang ñang ở trong bộ nhớ và những trang còn trên ñĩa. ðể nhận biết trang ñã ở trong bộ nhớ hay ở ngoài. lệnh và dữ liệu chỉ ñược xử lý khi nằm trong bộ nhớ thực.6. người ta thêm một bit (tạm gọi là bit P) vào khoản mục trong bảng phân trang. Do ñó có tên gọi nạp trang theo nhu cầu. người lập trình không cần quan tâm tới các vấn ñề này. Bộ nhớ ảo là một phương pháp tổ chức bộ nhớ quan trọng ñược sử dụng trong hầu hết các hệ ñiều hành hiện ñại.13 minh họa một ví dụ tiến trình với các trang ở trong và ngoài bộ nhớ. . Tiến trình ñược phân trang và chứa trên ñĩa.14): 89 . Bộ nhớ ảo là bộ nhớ lôgic theo cách nhìn của người lập trình và tiến trình và không bị hạn chế bởi bộ nhớ thực. Phương pháp phân ñoạn tương ñối ít ñược sử dụng làm cơ sở cho bộ nhớ ảo do các thuật toán ñổi ñoạn phức tạp hơn ñổi trang. Tại một thời ñiểm. không phải toàn bộ các trang của tiến trình ñược nạp cùng một lúc. Trước hết. ta nạp tiến trình vào bộ nhớ. Ngược lại.Quản lý bộ nhớ triệt ñể hơn. ðiều này cho phép giải quyết một trong những vấn ñề cơ bản của lập trình: giới hạn kích thước chương trình. nếu trang chưa ñược nạp vào. Nguyên nhân chính của sự phức tạp là do kích thước ñoạn không cố ñịnh. Bộ nhớ ảo có thể lớn hơn bộ nhớ thực rất nhiều và bao gồm cả không gian trên ñĩa. nhắc lại khái niệm bộ nhớ thực. Nó ñơn giản hoá rất nhiều nhiệm vụ của người lập trình và cho phép sử dụng không gian nhớ lớn hơn không gian nhớ thực. Thủ tục xử lý ngắt sinh ra do thiếu trang gồm các bước sau (hình 3. Bộ nhớ thực là bộ nhớ vật lý của máy tính. Bộ nhớ ảo thường ñược xây dựng dựa trên phương pháp phân trang trong ñó các trang là ñơn vị ñể nạp từ ñĩa vào khi cần. Khi tiến trình truy cập tới một trang. Hình 3. Chỉ những trang ñang cần ñến mới ñược nạp vào. một sự kiện gọi là thiếu trang hay lỗi trang (page-fault) sẽ xẩy ra. Phần cứng làm nhiệm vụ ánh xạ ñịa chỉ trang sinh ra một ngắt và ñược chuyển cho hệ ñiều hành ñể xử lý. Giá trị của bit bằng 1(0) cho thấy trang tương ứng ñã ở trong (ngoài) bộ nhớ hoặc ngược lại. Trong các phần sau. Nạp trang theo nhu cầu Nạp trang theo nhu cầu (demand paging) dựa trên phân trang kết hợp trao ñổi bộ nhớñĩa. bit P của trang sẽ ñược kiểm tra.2. Hệ ñiều hành sẽ tự phân chia chương trình. Khi cần thực hiện tiến trình. Trong phương pháp kết hợp phân ñoạn với phân trang. Tới ñây ta có thể ñưa ra khái niệm bộ nhớ ảo. tải vào ñể thực hiện khi cần. 3. việc truy cập diễn ra bình thường.Kích thước tiến trình có thể lớn hơn kích thước thực của bộ nhớ.

khoản mục tương ứng trong bảng phân trang sẽ ñược sửa ñổi tương ứng với vị trí của trang trong bộ nhớ. Sau khi ngắt ñược xử lý xong và trang ñược nạp. Phân trang bộ nhớ .Lệnh của tiến trình ñã gây ra ngắt ñược thực hiện lại. một số trang có thể ñược nạp sẵn và ñược giữ trong bộ nhớ ñể tránh xảy ra thiếu trang. 90 4 1 . . . ta có thể bắt ñầu một tiến trình mà không nạp bất kỳ trang nào của tiến trình vào bộ nhớ.Hệ ñiều hành tìm một khung trống trong danh sách các khung trống. Lệnh này bây giờ có thể truy cập trang vừa ñược nạp vào. . Sơ ñồ nạp trang như vậy là trường hợp riêng của nạp trang theo nhu cầu và ñược gọi là nạp trang hoàn toàn theo nhu cầu. sự kiện thiếu trang lại xẩy ra và quá trình xử lý như trên sẽ lặp lại.Trang tương ứng sẽ ñược ñọc từ ñĩa vào khung trang vừa tìm ñược. Nếu tiến trình truy cập các trang ñó. Tại thời ñiểm này.13. Trong các sơ ñồ khác. Tiến trình sau ñó thực hiện bình thường cho tới lần thiếu trang tiếp theo.Quản lý bộ nhớ Hình 3. một số trang của tiến trình có thể vẫn nằm ngoài bộ nhớ. toàn bộ trạng thái tiến trình ñược khôi phục lại như ban ñầu và ta có thể thực hiện tiếp tiến trình với một trang vừa ñược nạp. sự kiện thiếu trang sẽ sinh ra và trang tương ứng ñược nạp vào. Khi con trỏ lệnh ñược hệ ñiều hành chuyển tới lệnh ñầu tiên (chưa ñược tải vào bộ nhớ) của tiến trình ñể thực hiện. trạng thái bit P thể hiện việc trang ñã ở trong bộ nhớ. Việc lựa chọn số trang ñể nạp sẵn ñược trình bày trong một phần sau. Với sơ ñồ xử lý thiếu trang như trên ñây.Sau khi trang ñược ñọc vào.

Tuy nhiên trong thực tế. Một vấn ñề gắn với nạp trang theo nhu cầu là một lệnh có thể sinh ra các yêu cầu truy cập bộ nhớ khác nhau (ñể ñọc lệnh và các toán hạng).7. Tuy nhiên. ñọc trang thiếu vào khung và tiến trình sau ñó hoạt ñộng bình thường. chiến lược nạp trang trước là không hiệu quả về nhiều mặt và do ñó sẽ không ñược ñề cập tới nữa. Tuy nhiên. hiện tượng này ít xảy ra do tính cục bộ của lệnh và dữ liệu.14. Các bước xử lý thiếu trang Chiến lược nạp trang khác với nạp trang theo nhu cầu ñược gọi là nạp trang trước (prepage).A B C D E F G H Hệ ñiều hành 6 1 0 0 9 1 0 0 0 2 1 2 1 0 2 3 4 5 6 7 Bảng trang 5 6 7 8 9 10 11 12 Bộ nhớ vật lý F ðĩa 4 C C F A D G B E H 3 4 A Quản lý bộ nhớ 3 0 1 2 3 4 5 6 7 Bộ nhớ logic 5 Hình 3.1. Tại sao phải ñổi trang Khi xẩy ra thiếu trang. Ta sẽ quay lại vấn ñề này sau. Chiến lược này dựa trên ñặc ñiểm của ñĩa hoặc băng từ trong ñó các khối liên tiếp trên ñĩa cùng thuộc một tiến trình ñược ñọc ñồng thời vào bộ nhớ ñể hạn chế thời gian di chuyển ñầu từ ñọc ñĩa. do kích thước của các tiến trình có thể lớn hơn kích thước bộ nhớ thực rất nhiều nên tới một lúc nào ñó sẽ xảy ra tình 91 . 3.7. trong ñó các trang chưa cần ñến cũng ñược nạp vào bộ nhớ. Nếu các ñịa chỉ truy cập thuộc về những trang mới khác nhau thì lệnh ñó sẽ gây ra nhiều sự kiện thiếu trang và do vậy làm giảm nghiêm trọng tốc ñộ thực hiện. ðỔI TRANG 3. hệ ñiều hành tìm một khung trống trong bộ nhớ. các nghiên cứu cho thấy.

Các khung và trang chứa trong khung này ñược ñánh dấu bị khoá và sẽ 92 . bit này sẽ ñược xác lập bằng 1. Cách giải quyết thứ ba ñược áp dụng trong ña số trường hợp. b) Ghi nội dung khung bị ñổi ra ñĩa (nếu cần). Nếu không có khung nào trống. thời gian nạp trang sẽ tăng ñáng kể do xuất hiện thêm nhu cầu ghi trang bị ñổi ra ñĩa. Cách giải quyết này là cần thiết trong một số trường hợp. hệ ñiều hành sẽ trừ ra một số khung. Mỗi khi có một byte hay từ của trang bị sửa ñổi. mục ñích của bộ nhớ ảo là cho phép các tiến trình sử dụng ñược không gian nhớ lớn hơn không gian nhớ thực và tăng tính ña chương trình của hệ thống. ðổi trang có ghi và ñổi trang không ghi. Nhưng. Nếu nhu cầu ñổi trang xuất hiện khi nạp trang mới. Bước 3: a) Lựa chọn một khung ñể giải phóng. Một trang nhớ có bit sửa ñổi bằng 1 sẽ ñược ghi ra ñĩa khi ñổi trang. Khung ñược lựa chọn theo một thuật toán hay chiến lược ñổi trang nào ñó. Tiến trình và người dùng cần ñược ñáp ứng nhu cầu về bộ nhớ. cập nhật bảng trang và bảng khung ñể thể hiện thay ñổi này. Cách giải quyết thứ hai là tạm trao ñổi tiến trình ra ñĩa. quá trình ñổi trang diễn ra qua một số bước sau: Bước 1: Xác ñịnh trang cần nạp vào trên ñĩa Bước 2: Nếu có khung trống trống thì chuyển sang bước 4. Cụ thể. Các khung bị khoá: Khi tìm các khung ñể giải phóng và ñổi trang. giải phóng toàn bộ không gian mà tiến trình chiếm trong bộ nhớ và chờ tới khi thuận lợi (nhiều bộ nhớ trống hơn) mới nạp lại tiến trình vào bộ nhớ ñể thực hiện tiếp. Bước 4: ðọc trang cần nạp vào khung vừa giải phóng.Quản lý bộ nhớ trạng toàn bộ bộ nhớ ñã ñược cấp phát. ðó là sử dụng kỹ thuật ñổi trang. Nội dung của khung ñược trao ñổi ra ñĩa. Việc nhận biết ñược thực hiện bằng cách sử dụng một bit trong khoản mục của trang gọi là bit sửa ñổi (ta sẽ ký hiệu là bit M). Khung ñã ñược giải phóng ñược cấp phát cho trang mới cần nạp vào. hệ ñiều hành không thể tìm ñược khung trống ñể tải trang mới vào. cập nhật bảng trang và bảng khung. ðể giảm thời gian này. hệ ñiều hành chọn một khung ñã cấp phát nhưng hiện giờ không dùng tới và giải phóng khung trang này. Cách giải quyết ñơn giản nhất trong trường hợp ñó là hệ ñiều hành kết thúc tiến trình do không thoả mãn ñược nhu cầu bộ nhớ. các trang nhớ có nội dung không thay ñổi từ lúc nạp vào ñược hệ ñiều hành nhận biết và không ghi ngược ra ñĩa. Bước 5: Thực hiện tiếp tiến trình từ ñiểm bị dừng trước khi ñổi trang. Thao tác ñổi trang Bản chất của việc ñổi trang như sau. trang nhớ chứa trong khung sẽ ñược ñánh dấu không còn nằm trong bộ nhớ (bằng cách thay ñổi bit P tương ứng) trong bảng phân trang có chứa trang này. như ta ñã biết.

ñể sử dụng chiến lược này. lôgic này là không ñúng trong nhiều trường hợp. 5. Vào trước. ðiều này là không thể thực hiện ñược. 2. Trang vừa nạp vào sẽ ñược chèn vào cuối hàng ñợi. Chiến lược này cho phép giảm tối thiểu sự kiện thiếu trang và do ñó là tối ưu theo tiêu chuẩn này. do ñó. Các chiến lược ñổi trang ñã ñược ñề xuất và khảo sát trong rất nhiều nghiên cứu về quản lý bộ nhớ. ðó thường là các khung chứa trang nhớ thuộc các tiến trình nhân của hệ ñiều hành hoặc chứa những cấu trúc thông tin ñiều khiển quan trọng. Có 93 . Các khung bị khoá ñược nhận biết bởi một bit riêng chứa trong bảng khung. ðổi trang tối ưu (OPT) Với chiến lược này. Tuy nhiên.7. 2. Chiến lược ñổi trang tối ưu. 4. ra trước (FIFO) ðây là chiến lược ñơn giản nhất. trang ñứng ñầu hàng sẽ bị ñổi. Rõ ràng. Ngoài ñặc ñiểm ñơn giản. Chiến lược lựa chọn thích hợp cho phép tối ưu một số thông số. 2. Các trang sau khi ñược nạp vào sẽ ñược chứa trong một hàng ñợi. Các chiến lược ñổi trang ñược trình bày trong phần này bao gồm: ðổi trang tối ưu( OPT) ðổi trang theo nguyên tắc FIFO Trang ít ñược dùng nhất (LRU) Chiến lược ñồng hồ a. 1. không gian nhớ của tiến trình có 5 trang và các trang của tiến trình ñược truy cập theo thứ tự sau: 2. một số chiến lược ñổi trang sẽ ñược trình bày và phân tích. Các chiến lược ñổi trang Một vấn ñề quan trọng ñối với hệ ñiều hành là chọn khung nào trong các khung không bị khoá ñể tiến hành ñổi trang.2. 5. Khi có nhu cầu ñổi trang. Ví dụ: Giả sử tiến trình ñược cấp 3 khung. trong ñó F ký hiệu cho tình huống thiếu trang gây ra ñổi trang mới. 3. trong ñó quan trọng nhất là giảm tần số thiếu trang. không thể áp dụng trong thực tế mà chỉ ñược dùng ñể so sánh với các chiến lược ñổi trang khác. hệ ñiều hành chọn trang nhớ sẽ không ñược dùng tới trong khoảng thời gian lâu nhất ñể trao ñổi. chiến lược FIFO chứa ñựng một lôgic như sau: trang bị trao ñổi là trang nằm trong bộ nhớ lâu nhất. 3. hệ ñiều hành cần ñoán trước nhu cầu sử dụng các trang trong tương lai. Trong phần này. Thứ tự ñổi trang khi sử dụng phương pháp ñổi trang tối ưu ñược minh họa trên hình sau. b. 5.Quản lý bộ nhớ không bao giờ bị ñổi ra ñĩa. ðổi trang tối ưu ñòi hỏi 3 lần ñổi trang cho chuỗi truy cập trên. 3. Do nằm trong bộ nhớ lâu nhất nên có nhiều khả năng trang ñó không còn cần tới nữa. 2.

ðây không phải thời gian thực mà là thời gian lôgic do ta tự ñặt ra. Lưu ý. Phương pháp này rất thích hợp cho việc thực hiện bằng phần mềm. chỉ số của bộ ñếm sẽ ñược ghi vào trường thời gian truy cập trong khoản mục của trang ñó.Quản lý bộ nhớ những phần lệnh và dữ liệu của chương trình ñược dùng rất nhiều trong suốt quá trình tồn tại của tiến trình. ngăn xếp ở ñây là ngăn xếp ñặc biệt trong ñó các phần tử có thể lấy ra từ vị trí bất kỳ chứ không nhất thiết từ ñỉnh. hệ ñiều hành sẽ tìm trong bảng phân trang ñể xác ñịnh trang có tuổi bé nhất. Kết quả ñổi trang sử dụng FIFO cho chuỗi truy cập ở ví dụ trên ñược minh họa trên hình sau: c. ñó chính là trang ít có khả năng sử dụng tới nhất trong tương lai. Mỗi khi một trang nhớ ñược truy cập. Sử dụng ngăn xếp: một ngăn xếp ñược sử dụng ñể chứa các số trang. ở ñây thời gian ñược sử dụng làm tiêu chí so sánh là khoảng thời gian không sử dụng trang trong quá khứ chứ không phải trong tương lai. Sau ñây là hai cách giải quyết: Sử dụng biến ñếm: mỗi khoản mục của bảng phân trang sẽ có thêm một trường chứa thời gian truy cập trang lần cuối. số trang sẽ ñược chuyển lên ñỉnh ngăn xếp. Vấn ñề ñặt ra là xác ñịnh ñược trang có lần truy cập cuối diễn ra cách thời ñiểm hiện tại lâu nhất. Theo nguyên tắc cục bộ về thời gian. Như vậy ñỉnh ngăn xếp sẽ chứa trang ñược truy cập gần ñây nhất. CPU cũng ñược thêm một bộ ñếm thời gian lôgic này. LFU cho kết quả ñổi trang như sau: Việc triển khai LRU tương ñối khó khăn so với phương pháp FIFO và thường ñòi hỏi sự hỗ trợ của phần cứng. ðổi trang ít sử dụng nhất trong thời gian cuối LRU (Least Recently Used) Ở chiến lược ñổi trang này. Mỗi khi một trang nhớ ñược truy cập. tức là trang cần trao ñổi. Phương pháp này ngược với phương pháp ñổi trang tối ưu. LRU cho kết quả tốt gần như phương pháp ñổi trang tối ưu. trong khi ñáy ngăn xếp chính là trang LRU. trang bị ñổi là trang mà thời gian từ lần truy cập cuối cùng ñến thời ñiểm hiện tại là lâu nhất. Chỉ số của bộ ñếm tăng mỗi khi xảy ra truy cập bộ nhớ. do vậy không giống với ngăn xếp truyền thống. Thực tế cho thấy. Với ví dụ chuỗi truy cập trang ở trên. Như vậy mỗi khi có yêu cầu ñổi trang. 94 - . Trang bị ñổi sẽ là trang có giá trị trường này nhỏ nhất. Như vậy trường này luôn chứa thời gian truy cập trang lần cuối. Mặc dù việc chuyển vị trí số trang trong ngăn xếp ñòi hỏi một số thời gian xong ta lại tránh ñược việc tìm kiếm trong bảng phân trang.

nếu tại thời ñiểm ñổi trang bit U của tất cả trang trong danh sách bằng 1 thì con trỏ sẽ quay ñúng một vòng. nếu bit U bằng 1. bit U của trang ñã ñược ñặt bằng 1. Danh sách này có một con trỏ có thể chuyển ñộng theo một chiều nhất ñịnh ñể trỏ lần lượt vào các trang trong danh sách. ký hiệu là U. Mỗi khi trang ñược truy cập ñể ñọc hoặc ghi. . con trỏ ñược dịch chuyển ñể trỏ vào trang tiếp theo trong danh sách. Mỗi trang ñược gắn thêm một bit gọi là bit sử dụng.15). hệ ñiều hành kiểm tra trang ñang bị trỏ tới. Thuật toán ñồng hồ Thuật toán ñồng hồ (clock). tức là danh sách có ñầu và cuối trùng nhau. hay trang tương ứng. Thuật toán ñồng hồ ñược thực hiện như sau. ñược liên kết vào một danh sách vòng. ñặt bit U của tất cả trang bằng 0. là một cải tiến của thuật toán FIFO nhằm tránh thay thế những trang mặc dù ñã ñược nạp vào lâu nhưng hiện vẫn có khả năng ñược sử dụng. chuyển sang trang tiếp theo trong danh sách và lặp lại thủ tục trên. Danh sách có thể thể hiện tương tự như một mặt ñồng hồ với các khung/trang là con số và và con trỏ là kim ñồng hồ chuyển ñộng theo một chiều nhất ñịnh (hình 3. Ngược lại.Thuật toán ñồng hồ Khi có nhu cầu ñổi trang. sau ñó trang hiện thời ñang bị trỏ tới sẽ bị ñổi. hệ ñiều hành sẽ ñặt bit U bằng 0. Khi một trang nào ñó bị ñổi. bit u ñược ñặt giá trị bằng 1. Các khung có thể bị ñổi. chứa trong bảng phân trang. Nếu bit U của trang bằng 0. còn gọi là thuật toán cơ hội thứ hai (second chance). trang sẽ bị ñổi ngay. Minh họa cho thuật toán ñồng hồ: 95 . Như vậy. ngay khi trang ñược ñọc vào bộ nhớ. Với cách thực hiện như trên. Khung ñâu tiên thích hợp cho thay thế n -1 Trang 9 U =1 0 Trang 19 U =1 Trang 1 U =1 1 Con trỏ tới khung tiếp theo Trang 45 U =1 2 8 Trang 222 U=0 Trang 191 U =1 3 Trang 33 U =1 Trang 556 U =0 Trang 67 U =1 Trang 13 U =0 7 4 6 5 Hình 3.15.Quản lý bộ nhớ d.

Trong một phần trước. kiểm tra các trang. U=1. Ở bước này. Thông tin thứ nhất là thời gian trang ñược tải vào. chưa thật thích hợp ñể ñổi. hệ thống sử dụng bit M. ngoài bit U. M=0: trang mới ñược truy cập gần ñây và do vậy theo nguyên lý cục bộ về thời gian có thể sắp ñược truy cập tiếp. 96 . Trong quá trình quét lại. Chẳng hạn. Thuật toán ñồng hồ cải tiến Một số biến thể của thuật toán ñồng hồ có thể sử dụng ñể tận dụng thêm thông tin phụ giúp cho việc ñổi trang ñược tốt hơn. rất thích hợp ñể bị ñổi ra ngoài. Nếu vẫn chưa có kết quả thì thực hiện lại bước 2. với M ñược ñặt bằng 1 mỗi khi ghi vào trang. thuật toán ñồng hồ cải tiến thực hiện các bước sau : Bước 1: Bắt ñầu từ vị trí hiện tại của con trỏ. M=1: trang có nội dung thay ñổi nhưng gần ñây không ñược truy cập. Việc kiểm tra thêm bit U tương tự việc cho trang thêm khả năng ñược giữ trong bộ nhớ và vì vậy thuật toán có tên gọi khác là “cơ hội thứ hai”. M=1: trang có nội dung bị thay ñổi và mới ñược truy cập gần ñây. thuật toán ñồng hồ có thể sử dụng thêm thông tin về việc nội dung trang có bị thay ñổi không. thể hiện qua vị trí trang trong danh sách tương tự như FIFO. ðể ñổi trang theo thứ tự liệt kê ở trên. ta có bốn khả năng sau: U=0. Trang ñầu tiên có U=0 và M=0 sẽ bị ñổi. Trang ñầu tiên có U=0 và M=1 sẽ bị ñổi. ta ñã biết rằng nếu nội dung trang bị thay ñổi sau khi nạp vào thì khi ñổi trang sẽ mất thời gian hơn do phải ghi nội dung trang ra ñĩa. những trường hợp phía trên nên ñổi trước trường hợp phía dưới. ðể ñánh dấu những trang có nội dung thay ñổi. cũng là ứng viên ñể ñổi ra ngoài mặc dù ñòi hỏi thời gian ghi ra ñĩa so với trường hợp trên. U=0. thuật toán ñặt bit U của trang ñã quét ñến nhưng ñược bỏ qua bằng 0. thể hiện qua nội dung bit U. bit M. ñi từ trên xuống dưới. thuật toán ñồng hồ căn cứ trên hai thông tin ñể ñưa ra quyết ñịnh ñổi trang. M=0: cho thấy trang gần ñây không ñược truy cập và nội dung cũng không bị thay ñổi. U=1. thuật toán chỉ kiểm tra mà không thay ñổi nội dung bit U. Nếu hai bước trên không cho kết quả thì thực hiện lại bước 1.Quản lý bộ nhớ So với FIFO. Có thể nhận thấy. Bước 2: Nếu quay hết một vòng mà không tìm ñược trang có U=0 và M=0 thì quét lại danh sách lần hai. e. Kết hợp bit U và bit M. Thông tin thứ hai là việc gần ñây trang có ñược sử dụng không.

thì việc tăng thêm khung cho tiến trình không làm giảm ñáng kể tần suất thiếu trang nữa. trang sẽ ñược lấy ra từ danh sách ñềm và sử dụng ngay mà không cần nạp lại từ ñĩa. Việc ghi nhiều trang ñồng thời như vậy thường tiết kiệm thời gian hơn do thao tác ghi ñĩa ñược tiến hành theo khối lớn. Vấn ñề ñặt ra với hệ ñiều hành là cấp phát bao nhiêu khung cho mỗi tiến trình. theo ñó. lỗi thiếu trang sẽ diễn ra thường xuyên.Quản lý bộ nhớ Dễ dàng kiểm tra. Thay vào ñó. 97 . tiến trình không nhất thiết phải nằm hoàn toàn trong bộ nhớ máy tính. Hệ ñiều hành dành ra một số khung trống ñược kết nối thành danh sách liên kết gọi là các trang ñệm. Lý do chủ yếu là do số lượng khung ñã trở nên bão hòa (xấp xỉ yêu cầu bộ nhớ tối ña của tiến trình). Vùng ñệm khi ñó ñóng vai trò giống như bộ nhớ cache. Tuy nhiên. Tới thời ñiểm thích hợp. Khi có yêu cầu ñổi trang.7.8. hệ ñiều hành vẫn có nạp trang mới vào ngay. Tuy nhiên. Một số trang của tiến trình ñược cấp phát khung nhớ trong khi những trang khác tạm nằm trên ñĩa. khi số lượng khung cấp cho tiến trình tăng lên ñến một mức nào ñó. Số khung cấp cho mỗi tiến trình càng nhỏ thì càng chứa ñược nhiều tiến trình trong bộ nhớ tại mỗi thời ñiểm. khi lựa chọn số lượng khung tối ña cho mỗi tiến trình. Thứ hai. . khung chứa trang ñược ñánh dấu là khung trống và thêm vào cuối danh sách trang ñệm. khi việc thực hiện một lệnh yêu cầu truy cập tới nhiều trang hơn số khung ñược cấp thì việc thiếu trang sẽ lặp ñi lặp lại do không bao giờ các trang nhớ yêu cầu có mặt ñồng thời trong bộ nhớ.Khi số lượng khung cấp tối ña cấp cho mỗi tiến trình giảm xuống tới một mức nào ñó. Thay vì nạp vào khung chứa trang vừa bị ñổi. tại mỗi thời ñiểm. Trong thời gian này. CẤP PHÁT KHUNG TRANG 3. Sử dụng ñệm trang Một kỹ thuật thường ñược sử dụng kết hợp với thuật toán ñổi trang nói trên là sử dụng ñệm trang (page-buffering). trang bị ñổi vẫn ñược giữ trong bộ nhớ một thời gian. việc ghi ra ñĩa sẽ ñược lùi lại tới một thời ñiểm muộn hơn.1.Việc cấp thêm khung cho tiến trình sẽ làm giảm tần suất thiếu trang. cần chú ý hai nhận xét sau: . trang mới sẽ ñược nạp vào khung ñứng ñầu trong danh sách trang ñệm.8.3. nếu trang bị ñổi có nội dung cần ghi ra ñĩa. hệ thống sẽ ghi nội dung các trang trong danh sách ñệm ra ñĩa. một trang bị ñổi như bình thường nhưng nội dung trang này không bị xóa ngay khỏi bộ nhớ ñể nhường cho trang mới. hoặc do nguyên tắc cục bộ. Kỹ thuật ñệm trang cho phép cải tiến tốc ñộ do một số lý do sau: Thứ nhất. Giới hạn số lượng khung Với bộ nhớ ảo. nếu có yêu cầu truy cập. những trang nhớ cần truy cập ñồng thời ñã ñược tải ñủ vào số khung ñược cấp phát. 3. 3. việc thực hiện thuật toán cho phép tìm ra trang ñể ñổi theo thứ tự ưu tiên liệt kê ở trên. Thao tác ghi ra ñĩa có thể thực hiện ñồng thời với nhiều trang nằm trong danh sách ñược ñánh dấu trống. Chẳng hạn.

8. Phạm vi cấp phát ñược phân thành cấp phát toàn thể (global) và cấp phát cục bộ (local). Số lượng khung tối ña khi ñó ñược xác ñịnh dựa trên kích thước bộ nhớ và mức ñộ ña chương trình mong muốn. kể cả khung ñã ñược cấp phát cho tiến trình khác. với phương pháp cấp phát cục bộ. 3. Mỗi tiến trình sẽ ñược cấp phát số lượng khung không nhỏ hơn giới hạn này. trang chỉ ñược ñổi vào khung ñang ñược cấp cho tiến trình. tiến trình với mức ưu tiên cao hơn có thể ñược cấp nhiều khung hơn tiến trình với mức ưu tiên thấp. 98 . Tuy nhiên. có hai phương pháp thường ñược hệ ñiều hành sử dụng ñể quyết ñịnh số lượng khung tối ña cấp phát cho mỗi tiến trình: phương pháp cấp phát số lượng khung cố ñịnh và cấp phát số lượng khung thay ñổi.Quản lý bộ nhớ Từ nhận xét thứ nhất. Trên cơ sở nhận xét thứ hai. Chiến lược cấp phát toàn thể cho phép tiến trình ñổi trang mới vào bất cứ khung nào (không bị khóa). ñể thay ñổi số lượng khung tối ña một cách hợp lý. Cấp phát không bằng nhau. Giới hạn tối thiểu ñược xác ñịnh dựa trên kiến trúc phần cứng máy tính. số lượng khung tối ña cấp cho mỗi tiến trình có thể thay ñổi trong quá trình thực hiện. hệ ñiều hành thường ñược ñặt một giới hạn tối thiểu các khung cấp phát cho mỗi tiến trình. Ngược lại. tiến trình tương tác trực tiếp .2. Số lượng khung tối ña cấp cho tiến trình có thể khác nhau và ñược tính toán dựa trên ñặc ñiểm tiến trình như kích thước không gian nhớ lô gic. Cách ñơn giản nhất là cấp cho mỗi tiến trình số lượng khung tỷ lệ thuận với kích thước tiến trình. Những yếu tố cơ bản ñể xác ñịnh giới hạn là số toán hạng trong một lệnh máy và kích thước trang nhớ. Phương pháp cấp phát số lượng khung thay ñổi có liên quan chắt chẽ với phạm vi cấp phát khung ñược trình bày ngay sau ñây. b) Cấp phát số lượng khung thay ñổi Theo phương pháp này. hệ ñiều hành cần theo dõi và xử lý thông tin về tình hình sử dụng bộ nhớ của tiến trình.). Trong những hệ thống có quy ñịnh mức ưu tiên cho tiến trình. Việc thay ñổi số khung tối ña phụ thuộc vào tình hình thực hiện của tiến trình. Cấp phát bằng nhau.v. Số lượng này ñược xác ñịnh vào thời ñiểm tạo mới tiến trình và không thay ñổi trong quá trình tiến trình tồn tại. Theo cách cấp phát này. Tiến trình có tần suất ñổi trang cao sẽ ñược cấp thêm khung nhớ. mỗi tiến trình ñược cập một số lượng khung tối ña giống nhau. không phụ thuộc vào ñặc ñiểm riêng của tiến trình.v. hệ ñiều hành cấp cho tiến trình một số lượng cố ñịnh khung ñể chứa trang nhớ của mình. a) Cấp phát số lượng khung cố ñịnh. trong khi ñó tiến trình có tần suất ñổi trang thấp có thể bị thu hồi bớt khung. dạng tiến trình (tiến trình nền. Theo cách này. ðến ñây lại có hai cách tính số lượng khung tối ña. Phạm vi cấp phát khung Phạm vi cấp phát là vấn ñề quan trọng khác khi cấp khung cho tiến trình. Phương pháp cấp phát số lượng khung thay ñổi cho phép sử dụng bộ nhớ hiệu quả hơn phương pháp cố ñịnh.

trong khi tần suất thiếu trang thấp cho thấy tiến trình ñược cấp ñủ hoặc thậm chí thừa khung. tiến trình sẽ rơi vào tình trạng thiếu bộ nhớ và phải ñổi trang liên tục. tiến trình phải ñổi một trang. file dữ liệu) và thuật toán ñòi hỏi truy cập những phần khác nhau của dữ liệu cùng một lúc. với số lượng khung tối ña thay ñổi. hệ thống thu hồi một số khung của tiến trình.Quản lý bộ nhớ Phạm vi cấp phát có quan hệ mật thiết với số lượng khung tối ña trình bày ở trên.9. Cụ thể là. Tình trạng khủng hoảng bộ nhớ ảnh hưởng nghiêm trọng tới tốc ñộ máy tính và do vậy cần có biện pháp giải quyết. tức là tiến trình phải ñổi trang với một trang của mình. Dấu hiệu dễ nhận thấy của tình trạng này là hoạt ñộng liên tục của ñĩa cứng trong khi tiến trình không có tiến triển. tiến trình ñòi hỏi truy cập ñồng thời nhiều trang nhớ và hệ thống có mức ñộ ña chương trình cao. Trong trường hợp tần suất vượt giới hạn trên và hệ thống không thể tìm khung ñể cấp thêm. Kiểm soát tần suất thiếu trang Khi tiến trình rơi vào tình trạng trì trệ. 3. Một tiến trình rơi vào tình trạng trì trệ khi thời gian ñổi trang của tiến trình lớn hơn thời gian thực hiện. Khi tần suất vượt giới hạn trên.10. số lượng khung cố ñịnh tương ứng với phạm vi cấp phát cục bộ. Hệ ñiều hành có thể ñặt ra giới hạn trên và giới hạn dưới cho tần suất thiếu trang của tiến trình. hệ thống theo dõi và ghi lại tần suất thiếu trang.1. Do các trang ñều ñang cần dùng tới nên trang vừa bị ñổi ra sẽ lập tức gây thiếu trang và quá trình này sẽ tiếp diễn. Việc ñổi trang mới vào khung của tiến trình khác cũng ñồng thời làm giảm số lượng khung của tiến trình kia. hệ thống cấp cho tiến trình thêm khung mới. nếu muốn nạp trang mới vào. Tần suất thiếu trang tăng lên là dấu hiệu cho thấy tiến trình ñược cấp không ñủ khung. ñồng thời cho phép giải phóng một số khung ñể cấp cho tiến trình khác. ðây là thông tin quan trọng ñược sử dụng ñể phát hiện và giải quyết vấn ñề trì trệ. chẳng hạn khi khi tiến trình làm việc với dữ liệu kích thước lớn (ảnh. Trên thực tế. khi tần suất thiếu trang thấp hơn giới hạn dưới. Cụ thể. 3. Tình trạng ñổi trang liên tục do không ñủ bộ nhớ ñược gọi là trì trệ (thrashing). tiến trình có thể ñổi trang vào một khung không phải của mình.9. QUẢN LÝ BỘ NHỚ TRONG INTEL PENTIUM 99 . 3. qua ñó tăng số lượng khung ñược sở hữu. tức là nhiều tiến trình cùng thực hiện một lúc. Khi ñạt tới số lượng khung tối ña cho phép. Giải pháp này một mặt tránh cho tiến trình không rời vào trì trệ. Ngược lại. Tình trạng trì trệ xảy ra khi bộ nhớ máy tính có kích thước hạn chế. tiến trình sẽ bị treo (suspend) hoặc bị kết thúc. tình trạng này có thể xảy ra cả khi mức ñộ ña chương trình thấp. ðể nạp một trang mới vào. Trong khi ñó. TÌNH TRẠNG TRÌ TRỆ Khi số khung cấp cho tiến trình giảm xuống một mức nào ñó. tần suất thiếu trang của tiến trình sẽ tăng lên ñáng kể. tiến trình phải giải phóng một khung ñang sử dụng ñể ñảm bảo không tăng số lượng khung.

p=3 là chế ñộ người dùng). Như ñã phân tích ở trên. Không gian nhớ của tiến trình bao gồm nhiều ñoạn. ðịa chỉ lô gic Khối phân ñoạn ðịa chỉ tuyến tính Khối phân trang ðịa chỉ vật lý Hình 3. g cho biết ñoạn thuộc GDT (g=0) hay LDT(g=1).16: Ánh xạ ñịa chỉ trong Intel Pentium Không gian nhớ lô gic ñược chia thành hai phần. ðịa chỉ lô gic bao gồm hai phần (selector. Phần thứ nhất dành riêng cho tiến trình. Giai ñoạn hai do khối phân trang chịu trách nhiệm. . Ngoài ra thông tin về ñoạn ñược chứa trong 6 thanh ghi kích thước 8 byte ñể tránh việc ñọc các ô của LDT và GDT mỗi khi truy cập bộ nhớ. và cũng gồm tối ña 8KB ñoạn. offset). Giai ñoạn thứ nhất do khối phân ñoạn chịu trách nhiệm. Phần selector ñộ dài 16 bit có cấu trúc như sau: s g p 13 bit 1 bit 2 bit Trong ñó: s là số thứ tự ñoạn. mỗi ñoạn có thể có kích thước khác nhau và ñược phân trang trước khi ñặt vào bộ nhớ. mỗi ñoạn có kích thước tối ña 4GB. LDT chứa mô tả ñoạn (descriptor) (hình 3. Phân ñoạn Vi xử lý Pentium cho phép tiến trình có tối ña 16KB (hơn 16000) ñoạn. p cho biết chế ñộ bảo vệ (p=0 là chế ñộ nhân. bao gồm cả ñịa chỉ cơ sở và giới hạn (ñộ dài) ñoạn. ðịa chỉ tuyến tính ñược tạo ra như sau: trước hết phần selector ñược sử dụng ñể tìm ô tương ứng trong GDT. ðể tăng tốc ánh xạ ñịa chỉ. ðây là số lượng lớn hơn rất nhiều so với khả năng thực của bộ nhớ máy tính hiện nay. Mỗi ô trong các bảng này có kích thước 8 byte và chứa thông tin về ñoạn tương ứng. ñịa chỉ lô gic ñược dịch thành ñịa chỉ tuyến tính (linear address). phần thứ hai là ñộ dịch trong ñoạn kích thước 32bit.17 b.Quản lý bộ nhớ Vi xử lý Pentium của Intel hỗ trợ cơ chế quản lý bộ nhớ. ñịa chỉ tuyến tính ñược biến ñổi thành ñịa chỉ vật lý. Pentium có 6 thanh ghi ñoạn. trong ñó phân ñoạn ñược kết hợp với phân trang. Ánh xạ ñịa chỉ. việc kết hợp cho phép kết hợp ưu ñiểm của hai phương pháp quản lý bộ nhớ vật lý. Phần thứ hai ñược dùng chung cho tất cả tiến trình. GDT.16). phần thứ nhất cho phép chọn ô tương ứng từ hai bảng mô tả LDT. Thông tin quản lý tiến trình thuộc phần thứ nhất và phần thứ hai ñược chứa lần lượt trong hai bảng gọi là bảng mô tả cục bộ (local descriptor table – LDT) và bảng mô tả toàn thể (global descriptor table – GDT). phần mô tả ñoạn sau ñó ñược kết hợp với ñộ dịch trong ñoạn ñể tạo ra ñịa chỉ tuyến tính theo cơ chế mô tả trên hình 3. cho phép tiến trình truy cập ñồng thời 6 ñoạn.17 a). bao gồm tối ña 8KB ñoạn. bao gồm cả hệ ñiều hành. ðịa chỉ lô gic ñược ánh xạ thành ñịa chỉ vật lý qua hai giai ñoạn (hình 3.

100 .

bảng trang mức một và mức hai ñều có kích thước 4KB.18. Cơ chế biến ñổi từ ñịa chỉ tuyến tính thành ñịa chỉ vật lý ñược thể hiện trên hình 3.Quản lý bộ nhớ (a) { (b) Hình 3. tùy thuộc giá trị cờ kích thước trang (Page Size flag).17: Biến ñổi ñịa chỉ lô gic thành ñịa chỉ tuyến tính Phân trang Vi xử lý Pentium hỗ trợ bảng kích thước trang bằng 4KB hoặc 4MB. bảng trang ñược tổ chức thành hai mức. . Trong trường hợp kích thước trang bằng 4KB. Trong trường hợp trang nhớ kích thước trang bằng 4MB. phần p2 cho phép tìm ô tương ứng trong bảng trang mức hai ñể kết hợp với ñộ dịch o tạo ra ñịa chỉ vật lý. bảng trang chỉ có một mức với phần p kích thước 10bit và phần ñộ dịch o kích thước 22 bit cho phép trỏ tới vị trí cụ thể trong trang nhớ 4MB. ðịa chỉ tuyến tính kích thước 32 bit có cấu trúc như sau: p1 10 bit p2 10 bit o 12 bit Phần p1 cho phép tìm bảng trang mức hai (trong Pentium ñược gọi là page directory).

101

Quản lý bộ nhớ Toàn bộ cơ chế ánh xạ từ ñịa chỉ lô gic sang ñịa chỉ vật lý ñược thể hiện chi tiết trên hình 3.19

Hình 3.18: Cơ chế ánh xạ ñịa chỉ tuyến tính thành ñịa chỉ vật lý của Pentium

Hình 3.19. toàn bộ cơ chế ánh xạ ñịa chỉ trong Pentium 3.11. QUẢN LÝ BỘ NHỚ TRONG WINDOWS XP Windows XP cho phép tiến trình sử dụng bộ nhớ ảo với không gian nhớ 4GB, trong ñó 2GB ñược dùng riêng cho tiến trình và 2GB sau ñược dùng chung cho hệ thống. Bộ nhớ ảo ñược thực hiện bằng kỹ thuật nạp trang theo nhu cầu và ñổi trang. Kích thước trang nhớ bằng 4KB và bảng trang ñược tổ chức thành hai mức ñể sử dụng triệt ñể sự

102

Quản lý bộ nhớ hỗ trợ của vi xử lý Intel x86. Cách tổ chức bảng trang và ánh xạ ñịa chỉ hoàn toàn giống như mô tả trong phần phân trang của Pentium ở phần trên. ðể tăng hiệu quả nạp trang, Windows XP sử dụng kỹ thuật nạp trang theo cụm. Khi xảy ra thiếu trang, thay vì chỉ nạp trang bị thiếu, hệ ñiều hành nạp cả cụm, bao gồm một số trang nằm sau trang bị thiếu. Hệ ñiều hành kiểm soát số lượng trang mà tiến trình có trong bộ nhớ bằng cách gán cho mỗi tiến trình số lượng trang tối ña và tối thiểu. Tiến trình ñược ñảm bảo có số lượng khung không nhỏ hơn số lượng tối thiểu nhưng không ñược lớn hơn số lượng tối ña. Số lượng khung tối ña và tối thiểu ñối với tiến trình ứng dụng thường ñược ñặt tương ứng là 345 và 50. Trong quá trình thực hiện, số lượng trang tối ña và tối thiểu cấp cho tiến trình ñược thay ñổi tùy vào tình trạng bộ nhớ trống. Hệ ñiều hành lưu danh sách khung trống, ñồng thời sử dụng một ngưỡng an toàn. Khi số khung trống ít hơn ngưỡng này, hệ ñiều hành xem xét các tiến trình ñang thực hiện. Tiến trình có số trang lớn hơn số lượng tối thiểu sẽ bị giảm số trang cho tới khi ñạt tới số lượng tối thiểu của mình. Tùy vào vi xử lý, Windows XP sử dụng thuật toán ñổi trang khác nhau. Khi thực hiện trên hệ thống Intel x86 với một CPU, Windows XP sử dụng thuật toán ñồng hồ ñể chọn trang bị ñổi. Trong trường hợp khác, hệ ñiều hành sử dụng thuật toán FIFO.

103

ñọc thông tin từ ñĩa vào. các vấn ñề liên quan tới ñộ tin cậy và bảo mật cho hệ thống file sẽ ñược ñề cập. Nói cách khác. File ñược ñịnh nghĩa như tập hợp các thông tin liên quan ñến nhau ñược ñặt tên và ñược lưu trữ trên bộ nhớ ngoài. hệ thống file (file system) là phần mà người dùng thường xuyên tiếp xúc và làm việc một cách trực quan nhất. Trong khi ñó. File là gì ? Bộ nhớ ngoài bao gồm các thiết bị khác nhau như ñĩa từ. số rãnh trên ñĩa. các vấn ñề liên quan ñến file và thư mục theo cách nhìn của người dùng sẽ ñược xem xét. Chẳng hạn ñể ñọc và ghi lên ñĩa cứng cần biết các cồng tương ứng của bộ ñiều khiển ñĩa. cấu trúc dữ liệu dùng cho biểu diễn file. Người dùng chỉ quan tâm tới các vấn ñề như: cấu trúc thư mục ra sao. Trong chương này.v. ðây chính là biểu hiện bên ngoài của hệ thống file. của ñĩa ñang sử dụng.1. hệ thống file bao gồm tập hợp các file chứa dữ liệu hoặc chương trình và hệ thống thư mục cho phép tổ chức và lưu trữ thông tin về các file ñó. Việc truy cập bộ nhớ ngoài ñòi hỏi thông tin chi tiết về ñặc ñiểm của từng loại thiết bị và cách tổ chức lưu trữ dữ liệu trên ñó. Cuối cùng. ñĩa quang từ. Việc cần biết những chi tiết này gây khó khăn cho thao tác lưu trữ thông tin trên bộ nhớ ngoài. 104 . giúp người dùng không phải quan tâm ñến chi tiết thiết bị nhớ. có thể thực hiện các thao tác gì với file. băng từ.Hệ thống file CHƯƠNG 4: HỆ THỐNG FILE Trong các thành phần của hệ ñiều hành. Trước hết. các vấn ñề ñược quan tâm là phương pháp ánh xạ file lên các ñĩa. Sau ñó.v. Thông tin lưu trữ trên bộ nhớ ngoài ñược nhìn một cách thống nhất dưới dạng file. tổ chức dữ liệu bên cho thư mục. không phụ thuộc vào thiết bị lưu trữ cụ thể. 4. ñối với hệ ñiều hành. hệ thống file ñược nhìn từ bên trong. từ phía hệ ñiều hành. ñĩa quang. hệ ñiều hành có thể sử dụng ñồng thời một hoặc nhiều hệ thống file khác nhau trong cùng một hệ thống máy tính. giá thành rẻ hơn bộ nhớ trong. nội dung lưu trữ không bị mất ngay cả khi không ñược cấp ñiện. Hệ ñiều hành sẽ ñảm nhiệm việc ánh xạ lên các thiết bị lưu trữ. Từ phía người dùng. thẻ nhớ dùng cổng USB… Bộ nhớ ngoài có nhiều ưu ñiểm như dung lượng lớn. Tất cả các thao tác chạy chương trình.v. quy tắc ñặt tên file thế nào. lưu trữ thông tin ra ñĩa. ðể thuận tiện. hệ thống file sẽ ñược trình bầy lần lượt theo hai cách nhìn nói trên. chúng ta sẽ xem xét các phương pháp tổ chức bên trong hệ thống file: cách ánh xạ file lên các ñĩa.1. KHÁI NIỆM FILE 4. tổ chức bên trong của file và thư mục. cũng như số lượng ñầu ñọc. sao chép. ðể tổ chức lưu trữ thông tin trên bộ nhớ ngoài. File là khái niệm lôgic. hệ ñiều hành tránh những chi tiết cụ thể ñó bằng cách trừu tượng hoá các thiết bị nhớ ngoài. Có thể nhìn hệ thống file theo hai cách. với vai trò quản lý file và thư mục. giớí hạn kích thước file là bao nhiêu.v. dịch chuyển thông tin ñều liên quan ñến hệ thống file.1.

có thể không. Theo cách thứ nhất. quản trị hệ thống có thể chiếm quyền sở hữu file từ người tạo file trong trường hợp cần thiết. Thời gian tạo file. dạng ký tự hay dạng nhị phân. bảo mật. file có thể là file thông thường chứa dữ liệu hay là file chứa thông tin về thư mục và ñược dùng cho mục ñích quản lý file. Kích thước này thường tính bằng byte nhưng cũng có thể tính theo ñơn vị từ (word) hay bản ghi (record). hoặc dữ liệu. các byte.2. Thuộc tính của file Ngoài thông tin và dữ liệu ñược lưu trữ trong file.v. file có thể chứa chương trình (mã nguồn hoặc mã chạy ñược).v. Vị trí file: Cho biết dữ liệu của file ñược lưu trữ ở ñâu trên bộ nhớ ngoài. Các thông tin này gọi là thuộc tính (attribute) của file. trong Windows NT. Các thông tin này có thể cần thiết cho việc quản lý sao lưu. Trên thực tế. là hợp lý và cần thiết. Người tạo file và người sở hữu có thể không trùng nhau. ssửa. Do ñặc ñiểm lưu trữ dữ liệu trên ñĩa. xoá file. chẳng hạn trong phần tiêu ñề (header) nằm ở ñầu file. ñồng bộ nội dung file. Nhờ có khái niệm file. trong Linux. truy cập lần cuối. ý nghĩa các ñơn vị thành phần này của file hoàn toàn do người tạo ra file và người sử dụng file quy ñịnh. Người tạo file. Quyền truy cập file: Chứa thông tin về việc ai có quyền thực hiện ñọc. truy cập file lần cuối: Bao gồm thời gian. ñịnh nghĩa này rất tổng quát. Dữ liệu trong file có thể có dạng số. Theo cách thứ hai. cách sử dụng cho thông tin cần lưu trữ và ñặt tên cho tập các thông tin này. Việc ñịnh nghĩa file một cách tổng quát. các dòng văn bản hay các bản ghi. file là tập hợp các bit. Kích thước file có thể bao gồm kích thước thực và kích thước mà file chiếm trên ñĩa. trong ñó mỗi file chiếm một số nguyên các khối hay cung nên kịch thước thực và kích thước mà file ñược cấp phát trên ñĩa có thể khác nhau. 4. Người sử dụng có thể không quan tâm tới việc file ñược lưu trữ cụ thể ở ñâu. 105 . người sở hữu file: Chứa tên hoặc số ñịnh danh của người ñã tạo ra và người ñang có quyền sở hữu file. - - - - Có hai cách lưu trữ thuộc tính file trên ñĩa. Dưới ñây liệt kê một số thuộc tính file có thể gặp trong những hệ ñiều hành thông dụng: Tên file: Là thuộc tính rất quan trọng và thường ñược người dùng sử dụng khi truy cập file Kiểu file: Một số hệ ñiều hành phân biệt các kiểu file khác nhau.1. Thông tin này cần thiết cho hệ ñiều hành khi truy cập tới file. thuộc tính file ñược lưu trữ trong khoản mục ứng với file trong thư mục (sẽ ñề cập tới trong phần về thư mục). Ví dụ. ngày tháng tạo. Các thuộc tính cụ thể có thể thay ñổi ở những hệ ñiều hành khác nhau. Ví dụ. thay ñổi nội dung. người dùng có thể quy ñịnh cấu trúc. sửa file. Nói một cách chung nhất. thuộc tính ñược lưu trữ luôn cùng với dữ liệu file. 2000. ra sao. hệ ñiều hành còn gắn cho file các thông tin có tác dụng mô tả. ý nghĩa. có thể có cấu trúc. do vậy. Kích thước file: Kích thước hiện thời của file.Hệ thống file Có thể thấy.

Ví dụ. không phân biệt chữ hoa với chữ thường (nghĩa là file VIDU. hệ ñiều hành thường cung cấp các lời gọi hệ thống tương ứng.<>` 256 Có có (nếu tên file chứa trong ngoặc kép) Rất nhiều hệ ñiều hành hỗ trợ việc chia tên file thành hai phần. các ký tự có thể dùng trong tên file. | = . Tên tồn tại cùng với file và cho phép truy cập tới file khi cần. chữ thường không Cho phép sử dụng dấu cách không Các ký tự cấm 8 cho tên file 3 cho mở rộng Windows NT FAT Windows NT NTFS Linux (EXT3) 255 ký tự cho không cả tên file và ñường dẫn 255 không có có Bắt ñầu bằng chữ cái hoặc số Không ñược chứa các ký tự / \[]:. Ví dụ quy tắc ñặt tên cho hệ thống file của MS-DOS phiên bản cũ (FAT).c là file chương trình nguồn trên C. phần mở rộng của tên file trong FAT phiên bản cũ có ñộ dài tối ña là 3 và cho biết kiểu file như progrm. và là thông tin mà người dùng thường sử dụng nhất khi làm việc với file. có sử dụng phần mở rộng không.TXT với file vídu. trong khi LINUX lại hỗ trợ tên file tới 256 ký tự. có phân biệt chữ hoa và chữ thường không. tên có thể thay ñổi nếu cần thiết. thời gian sửa file lần cuối có thể thay ñổi bằng hàm 57h của ngắt 21h. ðặt tên cho file Trong số các thuộc tính. DOS chỉ hỗ trợ tên file ñộ dài 8 ký tự cộng 3 ký tự phần mở rộng.Hệ thống file ðể ñọc và thay ñổi các thông tin về thuộc tính file.1: Quy tắc ñặt tên file của một số hệ ñiều hành Hệ ñiều hành MS-DOS ðộ dài tối ña Phân biệt chữ hoa. tên file là thuộc tính rất quan trọng cho phép xác ñịnh file. cách nhau bởi dấu chấm (.txt ñược coi là một). NTFS) và Linux (EXT3) ñược cho trong bảng sau: Bảng 4.).^?@ Bắt ñầu bằng chữ cái hoặc số Không ñược chứa các ký tự / \ [] : . Các lựa chọn khi quy ñịnh việc ñặt tên cho file bao gồm ñộ dài cho phép của tên file. Phần sau dấu chấm là phần mở rộng và chứa một số thông tin bổ sung về file (thường là kiểu file).|=. UNIX và LINUX hỗ trợ 106 . có phân biệt chữ hoa với chữ thường. MS-DOS cho phép ñọc và thay ñổi thuộc tính file bằng hàm 43h của ngắt 21h. Windows NT (FAT. Trong quá trình tồn tại của file. Nói chung không có quy tắc ñặt tên file thống nhất cho các hệ ñiều hành. ^ ? @ Không ñược chứa các ký tự / \<>*|: Không ñược chứa các ký tự ! @#$%^&*()[]{}‘“/ \:. Ví dụ.

người dùng muốn tạo ra một file văn bản ñã ñược mã hoá. Có bao nhiêu kiểu cấu trúc file ñược hệ ñiều hành hỗ trợ thì phải có bấy nhiêu ñoạn chương trình ñược thêm vào hệ ñiều hành ñể thao tác với những kiểu cấu trúc này. WINDOWS là các hệ ñiều hành như vậy.tar. Ví dụ. UNIX.Hệ thống file phần mở rộng có số lượng và ñộ dài tuỳ ý. Các chương trình chỉ có thể sử dụng các file có cấu trúc do hệ ñiều hành ñịnh sẵn. các file ñược xem 1 như tập hợp (không có cấu trúc) các byte . 4. hỗ trợ cấu trúc file ở mức hệ ñiều hành có các hạn chế là làm tăng kích thước hệ thống. Thứ nhất. Tên file có thể có nhiều hơn một phần mở rộng.v. 107 . Do các nhược ñiểm nêu trên. Ta hãy xem xét ví dụ sau. Việc kiểm soát ñược các thao tác với file cho phép hạn chế một số lỗi. khi ta vô tình in một file chương trình (ñã ñược dịch và lưu trữ dưới dạng nhị phân) ra máy in. ña số hệ ñiều hành không hỗ trợ và quản lý kiểu cấu trúc file.1. File văn bản sẽ gồm các ký tự xếp liền nhau trong khi file cơ sở dữ liệu là các bản ghi có cấu trúc nhất ñịnh. 4. các bản ghi của cơ sở dữ liệu. các thao tác với file sẽ dễ dàng hơn ñối với người lập trình ứng dụng. Các ví dụ là file kiểu EXE của Windows. mã nguồn chương trình.v. Sau khi mã hoá. hệ thống quản lý dữ liệu sẽ tạo ra file bao gồm các bản ghi. Một số lượng lớn cấu trúc file sẽ khiến kích thước hệ ñiều hành tăng lên ñáng kể. tức là giống với file chương trình hơn file văn bản. chương trình ñã ñược dịch và liên kết. Nhược ñiểm thứ hai quan trọng hơn là tính mềm dẻo của hệ ñiều hành bị giảm. Chẳng hạn. Cấu trúc file sẽ do chương trình ứng dụng và người dùng tự quản lý. file văn bản sẽ có dạng như một file nhị phân. Trong các hệ ñiều hành này. DOS. Các thông tin này có thể rất khác nhau: văn bản.v. hình ảnh từ máy quét. Cấu trúc file File là tập hợp các thông tin do người tạo file ñịnh ra. Ví dụ như file chương trình phải có cấu trúc phù hợp cho việc tải vào bộ nhớ và chạy chương trình ñó. chẳng hạn myfile. Cấu trúc của file do vậy cũng rất khác nhau và phụ thuộc vào thông tin chứa trong file. Các chương trình ứng dụng khác nhau sẽ tạo ra và tự quản lý cấu trúc file riêng của mình.2. Việc gán phần mở rộng cho tên file có thể có ích trong một số trường hợp. chương trình xử lý ñồ hoạ lưu file dưới dạng mã nhị phân ñã ñược nén. Ví dụ. hệ ñiều hành có thể kiểm soát ñược các thao tác với file. Hệ ñiều hành khi ñó có thể nhầm và xếp file ñã mã hoá vào kiểu file chương trình và ngăn cản việc ñọc file này ñể giải mã. Do yêu cầu bảo mật. Giả sử hệ ñiều hành chỉ hỗ trợ các file văn bản và file chương trình.z. Tuy nhiên. CÁC PHƯƠNG PHÁP TRUY CẬP FILE 1 Tuy nhiên hệ ñiều hành vẫn phải nhận biết và hỗ trợ một số loại file nhất ñịnh. một số chương trình dịch có thể phân biệt file chương trình nguồn với các file khác thông qua phần mở rộng.3.v. hệ ñiều hành sẽ phát hiện ra rằng file kiểu nhị phân không hỗ trợ in ấn và ngăn chặn việc in ra như vậy. Thứ hai. Cách tổ chức như vậy cho phép chương trình ứng dụng hoàn toàn tự do trong việc tổ chức lưu trữ thông tin của mính. Vậy hệ ñiều hành có cần biết và hỗ trợ các kiểu cấu trúc file hay không? Việc hỗ trợ cấu trúc file ở mức hệ ñiều hành có một số ưu ñiểm sau. Việc tạo ra một file có cấu trúc khác với các cấu trúc mà hệ thống hỗ trợ sẽ bị ngăn cản.

Chẳng hạn ta có thể ñọc khối thứ 50 sau ñó ñọc khối thứ 13 rồi khối thứ 101.2. 4. Dưới ñây là những phương pháp truy cập thường gặp: 4. hay còn gọi là truy cập tương ñối. Việc ñọc ghi các khối ñược tiến hành theo thứ tự tùy ý. sau ñó di chuyển tiến tới vị trị cần truy cập. Ví dụ. Phương pháp truy cập trực tiếp rất quan trọng ñối với những ứng dụng sử dụng file có kích thước lớn như ứng dụng cơ sở dữ liệu. Thao tác ñọc trả về nội dung byte hoặc bản ghi ở vị trí hiện thời. con trỏ vị trí ñược ñặt trỏ tới vị trí ñầu tiên của file. thao tác ghi sẽ ghi dữ liệu lên vị trí hiện thời. Mỗi hệ ñiều hành có thể hỗ trợ một hoặc nhiều cách truy cập khác nhau. Có hai cách ñể ñọc ghi trực tiếp khối. các thao tác với file cần có khả năng sử dụng số thứ tự của byte hay bản ghi như một thông số làm việc. Mặc dù các hệ ñiều hành ngày nay hỗ trợ những kiểu truy cập phức tạp và ưu ñiểm hơn song rất nhiều chương trình ứng dụng vẫn truy cập file theo kiểu tuần tự. Truy cập tuần tự ða số các hệ ñiều hành cổ ñiển chỉ hỗ trợ cách truy cập này.2. Truy cập tuần tự là phương pháp trong ñó thông tin chứa trong file ñược ñọc hoặc ghi lần lượt từ ñầu file. Chẳng hạn. ta không thể ñọc byte thứ 2 sau ñó bỏ qua byte thứ 3 và ñọc thẳng byte thứ 4 ñược. Giả sử ta có cơ sở dữ liệu về sách trong thư viện. Chẳng hạn. Trong cách thứ nhất. trong ñó n là số thứ tự của khối hay bản ghi cần ñọc. Có thể có nhiều cách truy cập thông tin như vậy. các trình soạn thảo văn bản hoặc chương trình dịch thường ñọc và xử lý dữ liệu lần lượt từ ñầu file. Truy cập trực tiếp Việc lưu trữ file trên ñĩa cho phép sử dụng phương pháp truy cập trực tiếp (direct access). file ñược xem như gồm các khối hay các bản ghi ñược ñánh số (khối có thể chỉ gồm 1 byte). kiểu truy cập trực tiếp không thích hợp do mất thời gian duyệt qua phần trước thông tin cần truy cập. Cách thức truy cập này rất phù hợp với các file ñược lưu trữ trên băng từ. Tuy nhiên. hệ thống sẽ tiến hành ñọc trực tiếp bản ghi chứa thông tin này chứ không phải ñọc tất cả các bản ghi ñứng trước nó.2. Tương tự. Trong cách thứ hai. Sau mỗi thao tác ñọc hoặc ghi con trỏ sẽ ñược tăng lên 1 ñể trỏ tới vị trí tiếp theo.Hệ thống file ðể ñọc thông tin từ file hay ghi thông tin ra file hệ ñiều hành phải quy ñịnh cách thức truy cập tới nội dung file. ghi chứa số thứ tự khối cần ñọc. Một con trỏ ñược sử dụng ñể ñịnh vị ví trí hiện thời trong file. Thông thường khi mới mở file. trước tiên ta dùng 108 . Thông tin ñược ghi hoặc ñọc lần lượt theo chiều quay của băng. ðể truy cập vị trí nằm trước vị trí hiện thời cần ñặt lại con trỏ về ñầu file.1. ta có lệnh READ n. lệnh ñọc. File ñược chứa trong các khối khác nhau của ñĩa do vậy cũng cho phép truy cập không cần tuân theo thứ tự. Trong phương pháp này. ví dụ theo từng byte hay từng bản ghi. ðể có thể truy cập trực tiếp. Việc truy cập trực tiếp dựa trên ñặc ñiểm của ñĩa cho phép truy cập các khối bất kỳ. Khi người ñọc cần thông tin về quyển sách nào ñó. ñối với ứng dụng ñòi hỏi ñọc/ghi một số thông tin trong file.

Một số hệ ñiều hành yêu cầu chỉ rõ chế ñộ truy cập khi tạo file. Ví dụ. hoặc cũng có thể là khoảng cách tương ñối tính từ vị trí hiện thời về phía ñầu file hoặc cuối file. ðọc theo số thứ tự khối READ n ðịnh vị xong mới ñọc SEEK n READ Các khối hoặc bản ghi của file thường ñược ñánh số bắt ñầu từ ñầu file. bên cạnh là số trang trong ñó thuật ngữ xuất hiện.1: Truy cập theo khối chỉ số . 4. Trong phương pháp này. Trong trường hợp sử dụng cách thứ 2. ta tìm khoá tương ứng trong chỉ số. Truy cập dựa trên chỉ số Phương pháp truy cập dựa trên chỉ số cho phép truy cập tới bản ghi trong file không theo số thứ tự hoặc vị trí của bản ghi trong file mà theo một khoá ứng với bản ghi ñó. sau ñó mới tiến hành ñọc bản ghi.1 minh hoạ cách ñánh chỉ số như vậy Một ví dụ sử dụng chỉ số khác là việc ñánh chỉ số các từ khoá (các thuật ngữ) ở cuối các sách.2. ða số hệ ñiều hành ngày nay ñều hỗ trợ truy cập file trực tiếp. Cùng với khoá này là số thứ tự bản ghi.3.v. ta có thể cung cấp cho hệ thống tên của người ñó. Hình 4. Các thuật ngữ ñược sắp theo vần chữ cái. hệ thống có thể truy cập trực tiếp tới bản ghi theo số thứ tự bản ghi tìm ñược cùng với khoá. byte thứ 2 là 1.. File ñược quy ñịnh là file truy cập tuần tự sẽ không thể truy cập trực tiếp và ngược lại. Tuy nhiên nếu file có thể truy cập trực tiếp thì việc truy cập tuần tự có thể ñược mô phỏng dễ dàng nếu cần. Chẳng hạn.v..Hệ thống file các lệnh ñịnh vị SEEK ñể nhảy tới vị trí cần ñọc. mỗi file có chứa một chỉ số riêng của mình. ðể truy cập tới bản ghi. Tên An Bắc . sau ñó theo con trỏ chỉ số ñể xác ñịnh bản ghi và tiến hành truy nhập trực tiếp bản ghi này. ña số hệ ñiều hành coi byte thứ nhất có số thứ tự là 0. Hệ thống sẽ duy trì chỉ số trong ñó tên ñược sử dụng làm khoá và ñược sắp xếp cho dễ tìm kiếm. Sau khi tìm ñược tên cần thiết trong chỉ số. ñể tìm kiếm bản ghi về một người trong cơ sở dữ liệu. n có thể là số thứ tự tuyệt ñối tính từ ñầu file hoặc cuối file. Chỉ số gồm các khoá và con trỏ chỉ tới các bản ghi trong file. Giang 3 Số thứ tự bản ghi File dữ liệu Hình 4.

109 .

Những thao tác với file thường gặp trong các hệ ñiều hành bao gồm: Tạo file. Phương pháp truy cập theo chỉ số rất hay ñược dùng trong file cơ sở dữ liệu ñể giúp cho việc ñịnh vị và truy cập bản ghi theo một khóa nào ñó thực hiện nhanh hơn. thông tin này ñã ñọc vào bộ nhớ khi tiến hành thao tác mở file. Mỗi khi cần ñọc ghi các file ñang mở. Con trỏ này sẽ ñược sử dụng làm thông số cho các thao tác tiếp theo với file. thông tin sẽ ñược thêm vào và kích thước file tăng lên. ðọc thuộc tính của file. 4. Một số chương trình trong quá trình làm việc cần ñọc các thuộc tính của file. Lệnh ghi file cần cung cấp thông tin cần ghi. Xoá file. ðọc file. là nơi có thể lưu trữ và truy cập thông tin. do ñó. Thao tác xoá file bao gồm giải phóng không gian mà file chiếm trên ñĩa. ðối với file truy cập trực tiếp. sau ñó giải phóng chỗ của file trong thư mục. Thông tin ở vị trí hiện thời sẽ ñược ñọc. thông tin ở vị trí ñó sẽ bị ghi ñè lên. Vị trí của file trên ñĩa ñược xác ñịnh từ thông tin ghi trong thuộc tính của file. ðịnh vị (seek). Việc giải phóng không gian có thể ñơn thuần là ñánh dấu không gian ñó như không gian tự do.3. Ghi vào file. file cần ñược ñóng. Lệnh ñọc file cần cung cấp thông tin về số lượng byte hoặc bản ghi cần ñọc và nơi chứa dữ liệu ñược ñọc từ file (ví dụ vị trí bộ ñệm). tên file. Một file trống chưa có dữ liệu ñược tạo ra.v. Rất nhiều hệ ñiều hành hạn chế số lượng file có thể mở cùng một lúc.Hệ thống file Các chỉ số có thể ñược ñọc trước vào bộ nhớ ñể tăng tốc ñộ cho việc tìm kiếm và truy cập file tiếp theo. Hệ ñiều hành cũng quy ñịnh ra các thao tác mà người dùng và ứng dụng có thể thực hiện với file. Mở file. Nếu vị trí này không phải cuối file. Sau khi hoàn thành tất cả các thao tác ñọc ghi file. Ví dụ thông tin về những người có quyền truy cập file rất cần cho hệ thống bảo mật. có nghĩa là các thông tin về file chứa trong bảng nói trên bị xoá ñể nhường chỗ cho các file sắp mở. Thực chất của việc mở file là ñọc các thuộc tính của file và vị trí file trên ñĩa vào bộ nhớ ñể tăng tốc ñộ cho các thao tác ñọc ghi tiếp theo. việc ñóng các file ñã truy cập xong là rất quan trọng. 110 . Thông thường. CÁC THAO TÁC VỚI FILE Như ñã nói ở trên. Thao tác mở file ñược tiến hành trước khi ñọc hoặc ghi file. Hệ ñiều hành căn cứ vào tên file cần mở ñể tìm kiếm thông tin về file chứa trong thư mục. file là một kiểu dữ liệu lô gic. Hệ ñiều hành sẽ lưu trữ một bảng chứa thông tin liên quan tới các file ñang ñược mở trong bộ nhớ. File ñược dành một chỗ trong thư mục kèm theo một số thuộc tính như thời gian tạo file. thao tác ñịnh vị cho phép xác ñịnh vị trí hiện thời ñể tiến hành ñọc hoặc ghi. ðóng file.v. Lệnh mở file thường trả về con trỏ tới mục chứa thông tin về file trong bảng các file ñang mở. Các thao tác này ñược hệ ñiều hành thực hiện khi chương trình ứng dụng gọi lời gọi hệ thống tương ứng. người tạo file. hệ ñiều hành sẽ lấy thông tin cần thiết (chẳng hạn vị trí file trên ñĩa) từ bảng này chứ không phải tìm kiếm trong thư mục nữa. Nếu vị trí hiện thời là cuối file. Dữ liệu ñược ghi vào vị trí hiện thời (xem phần phương pháp truy cập file).

v. thao tác mở file trả về chỉ số ứng với file trong bảng ñó. Một số thuộc tính của file có thể ñược ñặt lại giá trị. Cần nói thêm về thao tác mở file. Xác lập thuộc tính của file. Thông tin về quyền truy cập file là một ví dụ thuộc tính loại này. file ñược mở trước khi truy cập.v. thao tác mở file phức tạp hơn do có thể xẩy ra trường hợp nhiều người cùng yêu cầu mở file một lúc. Chỉ số này ñược sử dụng làm thông số cho các thao tác ñọc ghi về sau..c . Nhìn chung. Các hệ ñiều hành khác nhau gọi chỉ số bằng những tên khác nhau. chỉ số cũng ñược gọi là file handle.. Thông tin này ñặc thù cho mỗi phiên làm việc với file và do vậy không thể lưu trữ cùng các thuộc tính khác trên ñĩa. Chỉ số 0 1 .. trong Windows NT. ðể thực hiện mỗi thao tác ñọc ghi khi ñó hệ ñiều hành sẽ phải tìm kiếm file trong thư mục. Vị trí file trên ñĩa: giúp cho việc ñọc ghi ra ñĩa thực hiện nhanh hơn. mỗi file ñang mở thường có các thông tin sau ñi kèm: Con trỏ tới vị trí hiện thời trong file: dùng xác ñịnh vị trí ñọc. Trong trường hợp ñó. trong khi ñó UNIX sử dụng thuật ngữ khối mô tả file (file descriptor) cho thông số này. vị trí. quyền truy cập. và xây dựng riêng cho mỗi tiến trình một bảng chứa thông tin riêng liên quan ñến việc sử dụng file của tiến trình ñó như vị trí hiện thời ở trong file. r Hệ thống file rwx . Trong MS-DOS chỉ số ñược gọi là khối quản lý file (file control block) hoặc file handle. xác ñịnh vị trí của file trên ñĩa (ñược lưu như một thuộc tính của file trong thư mục) sau ñó mới thực hiện thao tác ñọc ghi. chủ sở hữu file và vị trí các khối chứa nội dung file trên ñĩa... n Hình 4. sau ñó ñọc một phần thông tin từ khoản mục của file vào một bảng trong bộ nhớ gọi là bảng các file ñang mở (Hình ??). ðây là thao tác không mang tính bắt buộc khi thiết kế hệ thống file của hệ ñiều hành nhưng thường ñược thêm vào do nó giúp tăng hiệu quả thao tác vào ra với file.2: Một ví dụ bảng các file ñang mở Sau khi ñã ñọc khoản mục vào bảng các file mở. Giả sử file không ñược mở trước khi ñọc ghi. Chỉ số có thể là số thứ tự của file trong bảng hoặc con trỏ tới dòng chứa thông tin về file.myprog. ðể tránh lặp ñi lặp lại các công ñoạn này. ñọc các thuộc tính của file. Với các hệ ñiều hành cho phép nhiều người dùng cùng sử dụng. 111 Tên file Chủ sở hữu file Quyền truy cập Vị trí các khối trên ñĩa - file1 . hệ ñiều hành sẽ xây dựng một bảng lưu trữ các thông tin chung về file như tên. Các thông tin thường ñược ñọc là tên file. Hệ ñiều hành cung cấp lời gọi hệ thống cho phép xác lập hoặc thay ñổi giá trị thuộc tính ñó. Thao tác mở file bao gồm tìm file (theo tên file) trong thư mục. ghi hiện thời trong file.

Thư mục chỉ lưu thông tin tối thiểu cần thiết cho việc tìm vị trí của file trên ñĩa (Hình 4. một phần thuộc tính ñược lưu trữ luôn cùng với dữ liệu của file. Thu?c t?nh file4. toàn bộ thuộc tính của file ñược lưu trong thư mục. Khái niệm thư mục Thu?c t?nh Trong một hệ thống tính toán.4. Thứ nhất.b). người ta có thể tạo ra ñĩa lôgic từ những vùng không gian khác nhau trên các ñĩa vật lý khác nhau. ñĩa lôgic cho phép chia không gian ñĩa thành những vùng riêng biệt. có nhiều cách khác nhau ñể lưu thông tin về file trong thư mục. Nói cách khác. không gian của ñĩa ñược chia thành các phần (partition) gọi là ñĩa lôgic . Các vùng riêng biệt này ñược quản lý và sử dụng ñộc lập.file2 Thu?c t?nh Hệ thống file 4. Ngược với cách trên. (a) (b) Hình 4.1. Các ñĩa lôgic có thể sử dụng với hai mục ñích. MS-DOS sử dụng kiểu tổ chức thư mục này. ðây là cách tổ chức thư mục sử dụng trong hệ thống file EXT2 và EXT3 của Linux. ðể quản lý các file trên mỗi ñĩa lôgic.3: Lưu trữ thuộc tính file (a) Trong thư mục.a).4. Kích thước của mỗi khoản mục và cả thư mục nói chung khi ñó rất lớn. Với các hệ ñiều hành khác nhau. Toàn bộ hoặc một phần lớn của thư mục có thể ñược ñọc vào bộ nhớ ñể tăng tốc ñộ xử lý. vị trí. số lượng file lưu trữ trên ñĩa có thể rất lớn (nhiều nghìn file). Bảng này nằm ở bộ nhớ trong và ñược sử dụng ñể . Việc tìm ra dòng cần thiết ñược thực hiện theo tên file. Theo cách thứ nhất. mỗi khoản mục ứng với một file. Kích thước thư mục do vậy giảm xuống. các file phải ñược tổ chức theo một cách nào ñó. ðể dễ dàng quản lý. Có thể hình dung thư mục như một bảng. Sau ñó hệ ñiều hành ñọc các thuộc tính và vị trí dữ liệu của file vào một bảng chứa thông tin về các file ñang mở. 4. bản thân file chỉ chứa dữ liệu (Hình 4. thư mục cho phép ánh xạ từ tên file vào bản thân file ñó. kích thước. Nói chung.3. (b) cùng với file Khi thực hiện thao tác mở file. truy cập. THƯ MỤC file3. hệ ñiều hành tìm trong thư mục khoản mục tương ứng với tên file cần mở. file4. trong ñó mỗi dòng là khoản mục ứng với một file. thông tin về file ñược lưu trong thư mục (directory hay folder) của ñĩa.3. có kích thước nhỏ hơn kích thước ñĩa vật lý. Theo cách thứ hai. Khoản mục chứa các thông tin về file như tên file. không phụ thuộc vào các phần khác. thuộc tính thuộc tính thuộc tính thuộc tính 2 file1 file2 file3. kiểu file và các thuộc tính khác hoặc chứa con trỏ tới nơi lưu trữ những thông tin này. Thư mục ñược tạo thành từ các khoản mục (entry). Kích thước ñĩa lôgic khi ñó có thể lớn hơn kích thước của mỗi ñĩa vật lý.

2 Có thể có các tên gọi khác nhau như ñĩa nhỏ (minidisk) hoặc volume 112 .

Hệ thống file cung cấp thông tin nhanh chóng cho thao tác ñọc ghi file sau ñó. Nếu khoản mục trỏ tới cấu trúc khác chứa thuộc tính file, cấu trúc này sẽ ñược ñọc vào bảng nói trên. 4.4.2. Các thao tác với thư mục Có rất nhiều cách xây dựng và tổ chức thư mục khác nhau. Tuy nhiên, dù là cách tổ chức như thế nào thì phải hỗ trợ các thao tác với thư mục cho thuận lợi. Trước khi ñề cập kỹ ñến các cách tổ chức và xây dựng thư mục, việc xem xét các thao tác cần thực hiện với thư mục là rất cần thiết. Nói chung, thư mục phải cho phép tìm kiếm, tạo file, xoá file, liệt kê các thông tin về file trong thư mục. Sau ñây ta sẽ xem xét cụ thể các thao tác ñó: Tìm kiếm file: Cấu trúc thư mục phải cho phép tìm kiếm file theo tên file hay chính xác hơn là tìm kiếm khoản mục ứng với file theo tên file ñó. Trong trường hợp cần tìm một nhóm file có tên tương tự hoặc tìm kiếm file mà không nhớ chính xác tên, hệ thống cần cung cấp khả năng tìm các file có tên phù hợp với mẫu yêu cầu. Các kỹ tự thường ñược sử dụng ñể xây dựng mẫu là ký tự “*” thay thế cho một chuỗi kỹ tự bất kỳ và ký tự “?” thay thế cho một ký tự bất kỳ. Ví dụ, trong Windows, mẫu “*.c” ứng với tất cả các file có phần mở rộng là “c”. Tạo file: như ñã nói trong phần các thao tác với file, việc tạo file ñòi hỏi phải tạo ra khoản mục mới và thêm vào thư mục. Xoá file: ngoài việc giải phóng không gian mà file chiếm, thông tin về file và khoản mục tương ứng cũng bị xoá khỏi thư mục. Duyệt thư mục: một thao tác quan trọng với thư mục là liệt kê tất cả các file chứa trong thư mục cũng như thông tin chứa trong khoản mục của file. ðổi tên file: người dùng cần có khả năng thay ñổi tên file khi có nhu cầu (chẳng hạn ñể phản ánh nội dung mới của file sau khi thay ñổi). Thao tác ñổi tên chỉ cần thực hiện với thư mục chứ không liên quan tới dữ liệu của file. Tuỳ theo cách tổ chức bên trong của thư mục, việc ñổi tên file có thể gây ra sự sắp xếp lại thứ tự file trong thư mục. 4.4.3. Cấu trúc hệ thống thư mục Như ñã nói ở trên, thư mục chứa các khoản mục biểu diễn cho file. Khi số lượng file trong hệ thống tăng lên, kích thước của thư mục cũng tăng, việc tìm ñược file trong thư mục ñó trở nên khó khăn. Các vấn ñề khác cũng nảy sinh. Chẳng hạn hệ thống có nhiều người dùng và những người dùng khác nhau có thể chọn tên file trùng nhau. ðể giải quyết các vấn ñề tương tự, nhiều cách tổ chức khác nhau của hệ thống thư mục ñã ñược sử dụng. Trong phần này, ta sẽ xem xét một số cấu trúc thông dụng nhất. a. Thư mục một mức và hai mức Thư mục một mức là kiểu tổ chức thư mục ñơn giản nhất hay nói chính xác hơn là không có cấu trúc gì cả. Hệ thống chỉ có một thư mục duy nhất và tất cả các file ñược giữ trong thư mục này. Thư mục một mức ñược minh hoạ trên hình 4.4.a. Cách tổ chức thư mục một mức có một số nhược ñiểm lớn. Do các file ñược sắp xếp trong một thư mục duy nhất nên ñể có thể phân biệt, tên file không ñược phép trùng nhau. Khi
113

Hệ thống file
B A số lượng file tăng, việc tìm các tên khác nhau cho file là không dễ dàng. ðặc biệt, khi có nhiều người cùng sử dụng hệ thống rất dễ xẩy ra khả năng nhiều người chọn tên file giống nhau. Một ví dụ dễ thấy khi tất cả sinh viên một lớp cùng lập trình một bài tập và lưu chương trình của mình trong thư mục duy nhất. Ngoài ra, trong trường hợp ñộ dài file bị hạn chế tương ñối ngắn, số tổ hợp tên file có thể cũng không cho phép chọn nhiều tên file vừa có nghĩa vừa khác nhau. Thư mục gốc

C (a)

Thư mục người dùng

(b = Thư mục = File

H×nh 4.4: Tæ chøc th− môc (a) Mét møc. (b) Hai møc Một nhược ñiểm nữa của thư mục một mức là số lượng file trong thư mục rất lớn, do vậy việc tìm ñược file trong thư mục sẽ tốn nhiều thời gian. ðể tránh tình trạng nhiều người sử dụng chọn cùng tên file, một giải pháp ñơn giản là phân cho mỗi người một thư mục riêng chỉ chứa các file do người ñó tạo. Mặc dù tất cả các file vẫn ñược chứa trên cùng một ñĩa, chúng ñược chia thành các nhóm lôgic theo từng người dùng. Hệ thống vẫn duy trì một thư mục gọi là thư mục gốc. Các khoản mục ứng với thư mục người dùng ñược chứa trong thư mục gốc này. ðây là phương pháp tổ chức thư mục hai mức (Hình 4.4.b). Mỗi khi người dùng truy cập file, file sẽ ñược tìm kiếm trong thư mục ứng với tên người ñó (tên ñăng nhập). Do vậy, những người dùng khác nhau có thể ñặt tên file trùng nhau mà không sợ lẫn lộn. Tên file chỉ cần khác nhau trong từng thư mục. Các thư mục người dùng có thể ñược tạo ra và xoá ñi nếu cần. Thông thường việc tạo và xoá thư mục người dùng sẽ ñược giao cho quản trị mạng. ðây là người dùng có các quyền ñặc biệt, trong ñó có các quyền liên quan tới quản lý hệ thống thư mục. Sau khi ñã chia thư mục thành hai mức, mỗi người dùng sẽ làm việc với tập hợp các file trong thư mục của mình. Cách phân chia file ñộc lập như vậy rất thuận tiện khi người sử dụng làm việc ñộc lập với nhau. Tuy nhiên trong quá trình làm việc, có thể xuất hiện nhu cầu sử dụng chung file. Một số hệ thống cho phép người dùng truy cập thư mục người dùng khác nếu ñược cấp quyền. Một số hệ thống hạn chế người dùng trong thư mục của mình.

114

Hệ thống file Nếu việc truy cập thư mục của người khác ñược cho phép thì ngoài tên file, người dùng phải chỉ rõ file cần truy cập nằm trong thư mục nào. Nói cách khác, người dùng phải cung cấp ñường dẫn tới file. Chi tiết về ñường dẫn sẽ ñược trình bầy trong phần sau. Ngoài các file do người dùng tạo ra, trong hệ thống còn tồn tại một loạt những file thường ñược nhiều người dùng truy cập tới như file hệ thống, những tiện ích.v.v.. ðể sử dụng ñược các chương trình như vậy có thể chép chúng vào từng thư mục của từng người dùng. Cách này rõ ràng gây lãng phí không gian nhớ vì phải lưu nhiều bản sao của chương trình. Một cách giải quyết tốt hơn và ñược nhiều hệ ñiều hành sử dụng là lưu các chương trình dùng chung vào một thư mục ñặc biệt. Thư mục này có thể tạo ra như dành cho một người dùng ñặc biệt nào ñó. Khi người chạy một chương trình. Chương trình ñó trước tiên ñược tìm trong thư mục của người dùng. Nếu không tìm thấy, hệ ñiều hành sẽ chuyển sang tìm kiếm trong thư mục ñặc biệt. Hệ ñiều hành UNIX (và tất nhiên là Linux) cũng sử dụng kỹ thuật tương tự. b. Thư mục cấu trúc cây Cấu trúc cây là phát triển ý tưởng của cấu trúc hai mức. Thay chỉ chứa các file, mỗi thư mục con lại có thể chứa các thư mục con khác và các file. Thư mục con ñược nhóm một cách lôgic theo một tiêu chí nào ñó, chẳng hạn thư mục con chứa các file của cùng một người dùng, thư mục con chứa các chương trình và dữ liệu liên quan tới một ứng dụng.v.v. Hệ thống thư mục khi ñó có thể biểu diễn phân cấp như một cây. Các cành là thư mục, còn lá là các file. Dễ dàng nhận thấy, thư mục hai mức là trường hợp riêng của cấu trúc cây này.
Thư mục gốc

= Thư mục

= File

Hình 4.5: Thư mục dạng cây Mỗi thư mục hoặc thư mục con khi ñó sẽ chứa tập hợp các file và các thư mục con mức dưới. ðể phân biệt khoản mục của file với khoản mục chỉ tới thư mục con mức dưới, người ta thường sử dụng một bit ñặc biệt chứa trong khoản mục. Nếu bit này bằng 1, thì ñó là khoản mục của thư mục mức dưới, nếu bằng 0, ñó là khoản mục của file.
115

Một số hệ ñiều hành như Linux. khác với lời gọi hệ thống dành việc tạo và xoá file. Một số hệ ñiều hành như MS-DOS không cho phép xoá thư mục khi thư mục không rỗng. tất cả các các file và thư mục mức dưới chứa trong ñó cũng bị xoá theo. Người dùng phải hết sức cẩn thận khi sử dụng nhãng lệnh xoá như vậy. Thông tin về thư mục mặc ñịnh ñược ghi trong tài khoản người dùng cùng với các thông tin bảo mật khác và ñược hệ ñiều hành ñọc khi người dùng ñăng nhập. Thực chất. Rõ ràng cách tổ chức sau mang tính trừu tượng hoá cao hơn cách ñầu. Trong trường hợp thư mục có chứa thư mục mức dưới hoặc file. c. Tại mỗi thời ñiểm. Ngược lại. mỗi ñĩa là một hệ thống file và ñược gắn (mount) vào hệ thống thư mục chung. Việc thay ñổi thư mục ñược thực hiện bằng lời gọi hệ thống tương ứng.Hệ thống file Bản thân thư mục (hoặc thư mục con) cũng ñược lưu trữ trên ñĩa như một file song ñược hệ ñiều hành sử dụng khác với các file thông thường. Trong quá trình làm việc. Windows NT cho phép quy ñịnh thư mục hiện thời khi người dùng mới ñăng nhập vào hệ thống. Muốn tới ñược một cây thư mục. Thư mục cấu trúc ñồ thị không tuần hoàn Ta hãy xét ví dụ sau. Nếu người dùng gõ lệnh ñổi thư mục từ bộ dịch lệnh (shell) thì bộ dịch lệnh sẽ gọi lời gọi hệ thống này. chẳng hạn khi cả hai cùng làm việc với một dự án nào ñó. Người dùng phải xoá hết các file và thư mục mức dưới của một thư mục trước khi xoá thư mục ñó. toàn hệ thống chỉ gồm một cây thư mục to. * Tổ chức cây thư mục cho từng ñĩa: Trong một số hệ thống file như FAT của DOS cây thư mục ñược xây dựng cho từng ñĩa. Linux cho phép xoá các thư mục không rỗng. ðể tạo và xoá thư mục con. Tuy nhiên. Trong các hệ ñiều hành khác như Linux. ñó phải là bản chính của thư mục chứ không phải các bản sao. Những file này có thể ñược cất vào một thư mục con dành riêng cho dự án. trước tiên ta phải chỉ ra ñĩa tương ứng. ñể thuận tiện cho công việc. Thư mục này thường chứa phần lớn các file mà người dùng sẽ sử dụng và còn ñược gọi là thư mục theo mặc ñịnh. một số hệ ñiều hành như UNIX. hệ ñiều hành ñịnh nghĩa những lời gọi hệ thống riêng. người dùng có thể di chuyển sang thư mục khác tức là thay ñổi thư mục hiện thời. Việc tạo bản sao có thể gây mất ñồng bộ dữ liệu . Cách này rất tiện lợi. Người dùng thậm chí không cần quan tâm tới việc hệ thống có bao nhiêu ñĩa và file ñang ñược lưu trữ trên ñĩa nào. Khi một thư mục bị xoá (bằng lệnh rm). Nói chung có hai cách giải quyết trong trường hợp này. ðồng thời. việc xoá thư mục sẽ ảnh hưởng tới các thư mục mức dưới và file ñó. người dùng làm việc với một thư mục gọi là thư mục hiện thời hay thư mục làm việc. Hệ thống thư mục sẽ ñược ñược coi như “rừng” trong ñó mỗi cây “mọc” trên một ñĩa. cho phép tiết kiệm thời gian và công sức khi cần xoá số lượng thư mục. Trong trường hợp người dùng truy cập một file mà không thông báo cụ thể thư mục chứa file ñó thì file ñược tìm kiếm trước tiên trong thư mục hiện thời sau ñó mở rộng sang các thư mục ñược quy ñịnh trong ñường tìm kiếm (search path) như mô tả trong phần thư mục hai mức. các ñĩa sẽ là các cành mọc ra từ cây này. Hai người cùng cần sử dụng một số file.khi người này 116 . Tuy nhiên việc cho phép xoá thư mục không rỗng có thể gây mất mát nhiều file và thư mục con do một lệnh xoá vô ý có thể xoá cả một nhánh lớn của cây thư mục. cần phải làm sao ñể thư mục con này có mặt trong cả hai thư mục riêng của hai người.

Mặc dù thư mục cấu trúc graph không tuần hoàn cho phép quản lý hệ thống thư mục mềm dẻo hơn cấu trúc cây song cũng phức tạp hơn cấu trúc cây rất nhiều. Cách thuận tiện nhất ñể triển khai graph không tuần hoàn . Hệ ñiều hành sau ñó phải theo dõi ñể ñảm bảo tính ñồng bộ và nhất quán cho các bản sao ñó. ðây là một cấu trúc graph không chứa vòng (Hình 4. trong quá trình sao lưu và thống kê. Liên kết có thể ñược sử dụng dưới dạng ñường dẫn tuyệt ñối hoặc tương ñối tới thư mục cần liên kết. hệ ñiều hành phải chép thay ñổi này sang các bản sao khác. người khác không thấy ngay ñược sửa ñổi ñó và vẫn làm việc với bản cũ. Khi một bản sao bị thay ñổi.6: Thư mục cấu trúc ñồ thị không tuần hoàn Một cấu trúc thư mục cho phép file hoặc thư mục con xuất hiện trong nhiều thư mục khác nhau ñược gọi là cấu trúc graph không tuần hoàn (acyclic graph).Hệ thống file sửa ñổi. ðể hai (hoặc nhiều) người có thể sử dụng chung file và thư mục. Một cách khác cũng cho phép tạo cấu trúc kiểu này là tạo ra các bản sao của các file và thư mục cần chia sẻ rồi chứa vào những thư mục khác nhau. Liên kết thực chất là con trỏ tới thư mục hoặc file khác. Dễ dàng nhận thấy. Do file và thư mục có mặt ở nhiều nơi khác nhau trong hệ thống thư mục.ñược sử dụng trong Linux . cấu trúc graph không tuần hoàn là dạng mở rộng của cấu trúc cây. Trong ví dụ nói trên. . Thư mục gốc Hình 4. ñường dẫn tới file sẽ ñược sử dụng ñể truy cập.là sử dụng liên kết (link). trong ñó lá và cành có thể ñồng thời thuộc về những cành khác nhau. thay vì tìm file trong thư mục ñó.6). cần chia sẻ file và thư mục ñó sao cho chúng có thể xuất hiện ở nhiều thư mục riêng khác nhau. Khi một khoản mục của thư mục ñược ñánh dấu là liên kết. chẳng hạn khi ta cần ñếm số lượng file. hai thư mục của hai người dùng sẽ không chứa thư mục con có các chương trình dùng chung mà chỉ chứa các liên kết (con trỏ) tới thư mục con này. phải tính tới các liên kết ñể tránh sao lưu hoặc thống kê cùng một file nhiều lần. Cấu trúc cây trình bầy ở phần trước không cho phép thực hiện chia sẻ kiểu này.

117 .

ña số hệ ñiều hành ñưa thêm vào mỗi thư mục hai khoản mục ñặc biệt “. Giả sử ta ñang ở trong thư mục /usr. 4. Các thành phần của ñường dẫn. 4. Trong các trường hợp liên kết không bị xoá.”.5. ngoài tên file. Việc xoá file ñã ñược chia sẻ phải bao gồm xoá các liên kết trỏ tới file ñó. các liên kết này tiếp tục trỏ tới một file ñã không tồn tại hoặc vào vùng không gian ñĩa ñã ñược giải phóng. ñược ngăn cách với nhau và với tên file bởi các ký tự ñặc biệt. thư mục gốc chứa thư mục con usr.. ðường dẫn tuyệt ñối là ñường dẫn ñi từ gốc của cây thư mục dẫn tới file. bao gồm tất cả các thư mục ở giữa. “. Thông thường. usr chứa ast.exe ñược hiểu như sau: ñĩa c chứa thư mục bc. ðể có thể sử dụng ñường dẫn tương ñối. trong ñó có file bc.” biểu diễn thư mục mức trên (tức là thư mục bố). CẤP PHÁT KHÔNG GIAN CHO FILE Một nhiệm vụ quan trọng của hệ ñiều hành trong việc quản lý hệ thống file là cấp phát không gian trên ñĩa và các thiết bị nhớ ngoài khác ñể lưu trữ file và thư mục. ast chứa file mailbox. Mỗi khối lô gic bao gồm một số lượng khối vật lý bằng lũy thừa 118 . Tên ñường dẫn Với cấu trúc thư mục từ hai mức trở lên. Các thao tác truy cập tiếp theo thữc hiện với liên kết sẽ sinh ra lỗi. Ví dụ tên file với ñường dẫn ñầy ñủ trong DOS là c:\bc\bin\bc.4. Nói cách khác. Nếu ta ñang ở trong /usr/etc. ðường dẫn tương ñối là ñường dẫn tính từ thư mục hiện thời. ñồng thời ghi lại vị trí các khối nhớ ñã cấp phát ñể có thể tiến hành truy cập file về sau. Khi ñó ñể chỉ tới file mailbox ta chỉ cần sử dụng ñường dẫn tương ñối ast/mailbox là ñủ. ký tự ngăn cách là /. ñể xác ñịnh file. Khối nhớ do chương trình ñiều khiển ñĩa xác ñịnh ñược gọi là khối vật lý. tức là tên các thư mục ở giữa. Ta hãy xem ví dụ về ñường dẫn tương ñối. ta còn cần chỉ ra vị trí file ñó trong cây thư mục.. ký tự này là \ còn trong UNIX và Linux. hệ ñiều hành không cấp phát trực tiếp khối vật lý mà kết hợp một hoặc nhiều khối vật lý ñể tạo thành khối lô gic có kích thước lớn hơn.. Toàn bộ không gian ñĩa ñược chia thành các khối nhớ (sector). Việc sử dụng ñường dẫn thuyệt ñối cho phép chỉ ra vị trí của file trong cây thư mục mà không cần biết thư mục hiện thời là thư mục nào./ast/mailbox. Trong DOS và Windows. Trong Linux ñường dẫn tuyệt ñối có thể là /usr/ast/mailbox. Thông tin về vị trí của file ñược gọi là ñường dẫn ñược thêm vào trước tên file. thư mục này chứa thư mục con bin.” biểu diễn thư mục hiện tại còn “.Hệ thống file Một vấn ñề cần quan tâm nữa liên quan tới việc xoá file. Có hai kiểu ñường dẫn: ñường dẫn tuyệt ñối và ñường dẫn tương ñối.” và “.exe. Thông thường vấn ñề này ñược giải quyết bằng cách tìm và xoá tất cả các liên kết ñến file sau khi ñã xoá file. ðường dẫn này xuất phát từ thư mục gốc (ký hiệu /). hệ thống quản lý file phải thực hiện ánh xạ file lên ñĩa (hoặc thiết bị nhớ ngoài khác).4. ñây là ñơn vị thông tin nhỏ nhất mà chương trình ñiều khiển ñĩa (disk driver) cho phép ñọc hoặc ghi. ñường dẫn tương ñối sẽ là . Việc cấp phát các khối nhớ cho file phải ñược thực hiện sao cho tiết kiệm không gian ñĩa và tăng tốc ñộ truy cập file.

. Khối tiếp theo sẽ ñược ñọc khi cần thiết. 4. Cấp phát các khối liên tiếp Mỗi file ñược cấp một khoảng không gian gồm các khối nằm liên tiếp trên ñĩa. chẳng hạn 1.5. Ngoài việc hỗ trợ cả hai phương pháp truy cập và dễ dàng lưu trữ vị trí file trong thư mục.7) 3 fileA fileB 0 4 8 12 16 20 fil 1 5 9 13 17 21 2 6 10 14 18 22 3 7 11 15 19 23 Tên file 1 fileA fileB fileB 3 8 3 5 Thư mục Bắt ñầu ðộ dài 2 Hình 4.. ðể truy cập tuần tự. nếu file ñược cầp phát n khối bắt ñầu từ khối thứ s. . Các khối lôgic ñược ñánh số liên tục. s+2. hệ ñiều hành ghi nhớ ñịa chỉ khối vừa ñược truy cập cuối cùng.7) thì ñầu từ cũng chỉ phải di chuyển sang rãnh bên cạnh.1. khối lôgic ñược gọi là cluster (Một số tài liệu gọi khối vật lý là cung va khối lôgic là liên cung). Do không phải di chuyển ñầu ñọc nên tốc ñộ truy cập file sẽ tăng lên. s+n-1. Trong hệ ñiều hành MS-DOS và Windows. khi ñó các khối của file sẽ là s. Khối lôgic là ñơn vị thông tin nhỏ nhất mà hệ ñiều hành cấp phát cho file và là ñơn vị nhỏ nhất cho phép ñọc từ ñĩa hoặc ghi ra ñĩa. 2. Trong trường hợp các khối nằm trên các rãnh khác nhau (ví dụ fileC trên hình 4. 3 Một số tài liệu gọi khối vật lý là cung va khối lôgic là liên cung 119 . Trong trường hợp các khối của file nằm kề nhau có thể ñọc liên tiếp mà không thực hiện các di chuyển nói trên. khối cấp phát sẽ ñược hiểu là khối lôgic.Hệ thống file của 2. Vị trí file trên ñĩa ñược xác ñịnh bởi vị trí khối ñầu tiên và ñộ dài hoặc số khối mà file ñó chiếm. Chẳng hạn.. Trong khi trình bầy về các phương pháp cấp phát khối cho file. 4 khối vật lý. bắt ñầu từ 0 hoặc 1. phương pháp cấp phát cho file các khối liên tiếp còn cho phép tiết kiệm thời gian di chuyển ñầu từ khi ñọc các khối của file. việc truy cập file có thể thực hiện dễ dàng theo cả hai cách truy cập trực tiếp và truy cập tuần tự. s+1. ñầu từ cần di chuyển tới vị trí khối ñó bằng cách di chuyển tới rãnh tương ứng và chờ cho tới khi cung chứa khối quay ñến nơi. Việc truy cập trực tiếp khối thứ i của một file bắt ñầu tại ñịa chỉ s ñược thực hiện bằng cách truy cập khối thứ s+i của ñĩa. Khoản mục của file trong thư mục sẽ chứa ñịa chỉ khối ñầu tiên và số khối mà file chiếm (Hình 4. ðể ñọc một khối trên ñĩa.7: Cấp phát cho file các khối liên tục Trong trường hợp cấp phát khối liên tiếp.

hệ ñiều hành dành ra một số byte ở ñầu mỗi khối.3. Sau một thời gian sử dụng. khối vừa cấp 120 . các khối thuộc về một file có thể nằm bất cứ chỗ nào trên ñĩa chứa không nhất thiết nằm liền kề nhau. Mỗi khối chứa con trỏ tới khối tiếp theo. con trỏ này có giá trị nil (dấu hiệu kết thúc file và có thể có các giá trị khác nhau tuỳ vào hệ thống cụ thể). việc cấp phát khối liên tiếp có nhiều nhược ñiểm ñáng kể và do vậy ít khi ñược sử dụng. và do vậy không thể tiến hành thường xuyên. Chiến lược thường ñược sử dụng là tìm vùng trống ñầu tiên thích hợp (first fit) hoặc tìm vùng trống thích hợp nhất (best fit). Mỗi khi file ñược cấp thêm khối mới. các khối ñược cấp phát khi tạo file và giải phóng khi xoá file sẽ tạo ra các vùng trống trên ñĩa. các khối thuộc về mỗi file ñược nối với nhau thành một danh sách móc nối. Sử dụng danh sách kết nối Các phân tích ở phần trên cho thấy. Một phương pháp cho phép khắc phục những nhược ñiểm này là sử dụng danh sách kết nối (linked list).8 là ví dụ một file bắt ñầu từ khối 1 và bao gồm các khối 1. Khi có yêu cầu cấp phát. 4. Trong một số trường hợp như khi chép file từ nơi này sang nơi khác. Khó khăn ñầu tiên liên quan tới việc tìm ra khoảng không gian trống ñủ lớn trên ñĩa ñể cấp phát cho file. Những vùng trống như vậy do ñó bị bỏ phí. trong ña số trường hợp. ta biết trước kích thước file cần tạo. ñặc biệt khi kích thước ñĩa lớn. Trên hình 4. ta có thể dành 508 byte chứa dữ liệu của file. kích thước file không ñược biết trước mà chỉ biết sau khi ghi thông tin vào file. Khác với cách cấp phát khối ở phần trước.Hệ thống file Ngoài các ưu ñiểm nói trên. Sau khi file ñã ñược tạo. hệ ñiều hành phải kiểm tra các vùng trống ñể tìm ra vùng có kích thước thích hợp. với khối kích thước là 512 byte.7. 8. Tương tự như trong trường hợp cấp phát bộ nhớ ñộng. Việc này ñòi hỏi một thời gian nhất ñịnh. việc cấp phát cho file các khối liên tiếp có một số nhược ñiểm lớn. Trong phương pháp này. Tuy nhiên.2. Việc lựa chọn ô trống ñể cấp phát cho file có thể thực hiện theo một trong các chiến lược cấp phát bộ nhớ ñộng ñã ñược trình bầy trong phần phân ñoạn bộ nhớ. Mặc dù hiện tượng này có thể khắc phục bằng cách chuyển các file lại gần nhau ñể tập trung tất cả vùng trống về cuối ñĩa nhưng việc di chuyển file cần khá nhiều thời gian. kích thước file luôn luôn thay ñổi.17. việc tăng ñộ dài file có thể gặp khó khăn nếu các khối nằm sau vị trí của file ñã bị file khác chiếm. khoản mục của thư mục sẽ chứa con trỏ tới khối ñầu tiên của file. ðể xác ñịnh vị trí file trên ñĩa. hiện tượng phân mảnh ngoài sẽ gây lãng phí không gian nhiều hay ít. phương pháp cấp phát khối liên tiếp gây ra lãng phí không gian ñĩa do hiện tượng phân mảnh ngoài (external fragmentation). Giải pháp duy nhất ñể tăng kích thước file là chuyển toàn bộ file sang vùng không gian trống lớn hơn.5. ñộ dài khối và ñộ dài trung bình của file. Khi mới tạo file. Một nhược ñiểm khác của phương pháp này là cần phải biết kích thước file khi tạo file. Chẳng hạn.6. Mặt khác. Ví dụ. ðể chứa con trỏ. còn 4 byte chứa con trỏ tới khối tiếp theo. trên hình 4. Tuỳ thuộc vào kích thước ñĩa. vùng trống nằm trước fileA có kích thước 1 khối và không thể cấp phát cho file kích thước lớn hơn. ðó là hiện tượng các vùng trống còn lại trên ñĩa có kích thước quá nhỏ và do vậy không thể cấp phát cho file có kích thước lớn hơn.

ta phải ñọc lần lượt tất cả các khối nằm trước bắt ñầu từ khối ñầu tiên. Con trỏ tới khối tiếp theo của file không chứa ngay trong khối nữa mà ñược chứa trong ô tương ứng của bảng này (hình 4. Mặc dù giải khắc phục ñược các nhược ñiểm của phương pháp cấp khối liên tục. ta phải ñọc cả khối. hệ ñiều hành chỉ việc thêm khối trống vào danh sách và sửa lại con trỏ ở khối cuối. Trong trường hợp giá trị các con trỏ bị thay ñổi không ñúng do lỗi việc xác ñịnh khối nào thuộc file nào sẽ không chính xác. Nhược ñiểm lớn nhất là phương pháp này chỉ hỗ trợ truy cập tuần tự mà khôngcho phép truy cập file trực tiếp. Do các khối thuộc về một file có thể nằm bất cứ chỗ nào trên ñĩa.8: Các khối của file ñược kết nối thành danh sách Nhược ñiểm thứ hai liên quan tới tốc ñộ truy cập file.Hệ thống file ñược thêm vào cuối danh sách. Mỗi ñĩa lôgic có . Không có khối trống nào bị bỏ phí. Sử dụng danh sách kết nối trên bảng chỉ số Vấn ñề không hỗ trợ truy cập trực tiếp của phương pháp dùng danh sách kết nối có thể khắc phục bằng cách sử dụng danh sách kết nối trên bảng chỉ số. Bảng chỉ số là một bảng trong ñó mỗi ô ứng với một khối của ñĩa. ðể truy cập file. 0 4 8 17 12 16 20 fil 1 3 5 9 13 17 6 21 2 6 -1 10 14 18 22 3 8 7 11 15 19 23 Tên file fileA Thư mục Bắt ñầu 1 Hình 4.3. Phương pháp cấp phát này cũng không yêu cầu biết trước kích thước khi tạo file. không nhất thiết phải nằm cạnh nhau nên phương pháp cấp phát này cho phép tránh ñược hiện tượng phân mảnh ngoài. hệ ñiều hành ñọc lần lượt từng khối và sử dụng con trỏ ñể xác ñịnh khối tiếp theo. Như vậy. ðể ñọc một khối nào ñó ta phải theo tất cả các con trỏ từ khối ñầu tiên cho tới khối cần ñọc. Do con trỏ nằm ngay trong các khối và khối là ñơn vị nhỏ nhất có thể tiến hành ñọc nên ñể xác ñịnh con trỏ. sử dụng danh sách kết nối cũng có một số nhược ñiểm. ðể tăng kích thước file. Kích thước file có thể tăng dễ dàng sau khi ñã ñược tạo. Do các khối thuộc về một file có thể nằm rải rác ở nhiều nơi trên ñĩa nên ñầu từ của ñĩa phải thực hiện nhiều thao tác di chuyển mới truy cập ñược hết dữ liệu của file.5.9). ðể ñọc một khối. Chi tiết về tính toàn vẹn của hệ thống file sẽ ñược trình bầy trong một phần sau. Việc liên kết các khối thuộc về một file bằng con trỏ cũng làm giảm ñộ tin cậy và tính toàn vẹn của hệ thống file. 4.

121 9 3 .

Ví dụ. Thay vì ñọc tất cả các khối nằm trước khối cần truy cập. ðể tránh phải ñọc bảng chỉ số nhiều lần. hệ ñiều hành có thể ñọc và cache cả bảng này trong bộ nhớ.. Bảng chỉ số 0 1 2 3 4 5 6 7 8 9 10 … Hình 4. Kích thước bảng khi ñó sẽ là 2 *4B=4MB. 2 . Bản sao ñược sử dụng trong trường hợp bảng chính bị hư hỏng. khối ñược lấy từ danh sách các khối trống. sau ñó ñịa chỉ khối ñược thêm vào ô tương ứng trong chỉ số. nhiều hệ ñiều hành tạo ra các bản sao của bảng. Mảng này chứa thuộc tính của file và vị trí các khối của file trên ñĩa (xem hình 4. mỗi file có một mảng riêng của mình chứa trong một khối gọi là khối chỉ số (I-node). Trong phương pháp này. Ô thứ i của mảng này chứa con trỏ tới khối thứ i của file. 16 hay 32 bit và cho phép quản lý tối ña 2 . 2 khối. Tuy nhiên. 6 20 20 khối. ta chỉ cần ñi theo chuỗi con trỏ chứa trong bảng chỉ mục. FAT 16 hay FAT 32. Kích thước mỗi ô trong bảng phụ thuộc vào số lượng khối trên ñĩa. thường ở phần ñầu ñĩa. Tuỳ vào phiên bản FAT 12. OS/2 và Windows (trừ các bản Windows sử dụng NTFS). Giả sử ñĩa có 2 Bảng chỉ mục sử dụng 4 byte cho mỗi ô. Việc ñọc khối thứ i của file do vậy ñược thực hiện theo ñịa chỉ chứa trong ô thứ i của khối chỉ số. mỗi ô của bảng FAT có kích 12 16 32 thước 12. gây mất thông tin về khối. Sử dụng khối chỉ số Khối chỉ số (Index block hay Index node – I-node) là phương pháp trong ñó tất cả con trỏ tới các khối thuộc về một file ñược tập trung một chỗ cho tiện việc truy cập trực tiếp ñến từng khối của file. Bảng FAT và các bản sao ñược lưu trữ ở ñầu mỗi ñĩa lôgic sau sector khởi ñộng (BOOT). ô kích thước 32 4 byte cho phép chứa con trỏ tới một trong 2 khối. thư mục Tên file . ðể thêm khối mới vào file.-1 Hệ thống file ? một bảng chỉ số ñược lưu ở vị trí xác ñịnh. Việc sử dụng bảng chỉ số cho phép tiếp hành truy cập file trực tiếp. Khi mới tạo file. 122 ..9: Danh sách kết nối các khối sử dụng bảng chỉ số 4.4. tất cả các ô này có giá trị nil. việc ñọc toàn bộ bảng chỉ mục vào bộ nhớ ñòi hỏi một lượng bộ nhớ ñáng kể. ðể tránh trường hợp bảng này bị hỏng.10).5. Một ví dụ bảng chỉ số ñược sử dụng rất thành công là bảng FAT (file allocation table) của hệ ñiều hành MS-DOS.

Cách 2: Sử dụng i-node nhiều mức có cấu trúc như sau. Tuy nhiên. 3 ô cuối của i-node chứa con trỏ tới các khối chỉ số gián tiếp. hệ ñiều hành sẽ liên kết các i-node ñể tạo thành i-node có kích thước lớn hơn. ô tiếp theo của i-node sẽ ñược . Ô dầu tiên trong 3 ô (ô thứ 13) chứa ñịa chỉ một khối chỉ số khác gọi là chỉ số gián tiếp mức 1. I-node bao gồm một số ô chứa ñịa chỉ các khối nhớ trên ñĩa. Nếu kích thước i-node tăng lên.10: Phương pháp sử dụng khối chỉ số ðể xác ñịnh khối chỉ số ứng với file. khối này có thể ñược ñọc vào và cache trong bộ nhớ (ví dụ khi mở file) ñể giảm thời gian cho thao tác ñọc ghi file tiếp theo. Cách 1: Cho phép thay ñổi kích thước i-node bằng cách sử dụng danh sách kết nối. Sau khi xác ñịnh ñược khối chỉ số tương ứng. Trong hệ thống file Ext2 của Linux và phiên bản BSD UNIX i-node có 15 ô như vậy. i-node nhỏ không cho phép chứa ñủ con trỏ tới các khối nếu file lớn. Ngược lại nếu i-node lớn (có hàng trăm ô) trong khi file nhỏ chỉ chiếm 1 hoặc 2 ô thì các ô còn lại không ñược sử dụng và gây lãng phí bộ nhớ. 12 ô ñầu tiên của i-node trỏ trực tiếp tới khối nhớ chứa dữ liệu của file trên ñĩa. Có hai cách giải quyết vấn ñề này. Khi ñó.Hệ thống file Tên 0 1 3 2 3 file fileA Thư mục Khối chỉ số 19 4 8 12 16 20 5 9 13 17 21 6 10 14 18 22 7 11 15 19 23 9 11 6 22 -1 -1 Hình 4. Các khối thuộc về một file cũng không cần phải nằm gần nhau do ñó không gây ra hiện tượng phân mảnh ngoài. Việc sử dụng khối chỉ số cho phép tiến hành truy cập trực tiếp các khối trong file mà không phải ñọc các khối trước ñó. Nếu kích thước file lớn và số lượng các ô này không ñủ. Một vấn ñề quan trọng ñặt ra là chọn kích thước cho i-node. các ô phía trên của i-node chứa con trỏ tới các khối của file trong khi ô cuối cùng chứa con trỏ tới i-node tiếp theo. Mỗi i-node sẽ ñược cấp phát một khối trên ñĩa ñể lưu các ô của mình. Các ô của chỉ số này không chứa dữ liệu mà con trỏ tới các khối chứa dữ liệu của file. Trong trường hợp vẫn không ñủ ñịnh vị hết các khối của file. khoản mục của file trong thư mục chứa con trỏ tới khối chỉ số này. I-node càng nhỏ thì càng tiết kiệm không gian.

Các ô của khối này trỏ tới khối ñịa chỉ gián tiếp mức 1 khác. chỉ số gián tiếp mức 3 sẽ ñược 123 . Nếu chỉ số gián tiếp mức 2 vẫn chưa ñủ.sử dụng ñể trỏ tới khối chỉ số gián tiếp mức 2.

.. Trong trường hợp kích thước file không bằng bội số kích thước khối. cần chú ý tới hai vấn ñề: vấn ñề lựa chọn kích thước cho khối. hệ ñiều hành có thể ñịnh vị các file kích thước ñủ lớn.6. . Khối chỉ số Thuộc tính khối chỉ số gián tiếp mức 1 dữ liệu dữ liệu ðịa chỉ trực tiếp dữ liệu .. mỗi file bao gồm một số nguyên các khối nhớ.6. . ðể quản lý hiệu quả không gian trên ñĩa. ngoài phương pháp cấp phát khối nhớ cho file. Hệ thống file NTFS của Windows NT hoặc Windows thế hệ sau cho phép hiển thị kích thước chính xác của file cũng như kích thước mà file chiếm trên ñĩa ñược tính dựa trên số khối cấp phát cho file. Nếu chọn khối nhớ có kích thước lớn.6KB thì file sẽ cần tất cả 6 khối. QUẢN LÝ KHÔNG GIAN TRÊN ðĨA Không gian trên ñĩa ñược cấp phát theo từng khối không phân chia.. và cách quản lý những khối trống (hiện không cấp phát cho file nào). không gian bị bỏ phí do phân mảnh trong . . Phương pháp sử dụng khối chỉ số cũng bị nhược ñiểm tương tự như sử dụng danh sách kết nối.. Hiện tượng này gọi là phân mảnh trong (internal segmentation). Kích thước tối ña của file phụ thuộc vào số ô của khối chỉ số gián tiếp và kích thước khối chứa dữ liệu của file (hình 4.... dữ liệu dữ liệu khối chỉ số gián tiếp mức 2 dữ liệu dữ liệu Gián tiếp mức 1 Gián tiếp mức 1 Gián tiếp mức 1 .. khối cuối cùng của file sẽ không ñược sử dụng hết và bị bỏ phí.. Kích thước khối Khối là ñơn vị cấp phát nhỏ nhất của hệ ñiều hành. dữ liệu dữ liệu . ðó là do các khối thuộc về một file không nằm gần nhau. Với khối chỉ số gian tiếp mức 3 như vậy. khối chỉ số gián tiếp mức 3 . 4. nếu kích thước khối là 1KB và file có kích thước 5. Ví dụ.4KB không ñược sử dụng. .11: Khối chỉ số nhiều mức Việc lựa chọn kích thước khối ảnh hưởng trực tiếp tới hiệu quả lưu trữ và truy cập dữ liệu trên ñĩa. dữ liệu Hình 4.1. tốc ñộ truy cập file bị giảm vì phải di chuyển ñầu ñọc nhiều lần. 4.11). trong ñó khối cuối cùng có 0.Hệ thống file sử dụng.

124 .

khối sẽ có kích thước nhỏ hơn.6. Với những ñĩa kích thước lớn. Ngược lại. thời gian cần thiết cho việc ñọc/ghi file sẽ tăng lên. 9. Như vậy. 4. ðể quản lý khối trống này. Việc lựa chọn khối nhớ kích thước nhỏ cho phép tiết kiệm không gian nhờ giảm ảnh hưởng của phân mảnh trong. Các khối trống bao gồm những khối chưa ñược cấp phát lần nào hoặc cấp phát rồi nhưng ñã ñược giải phóng. Tuy nhiên. các khối 0.. thường nằm trong khoảng từ 512B tới 32KB. Mỗi ô của mảng có kích thước 1 bit và ứng với 1 khối nhớ trên ñĩa. Ngoài ra.Hệ thống file sẽ tăng lên. Quản lý các khối trống ðể có thể cấp phát khối nhớ trên ñĩa cho file. các khối ñược giải phóng lại ñược trả về danh sách khối trống. Sau khi file bị xoá hoặc giảm kích thước. khối chưa ñược cấp phát có bit tương ứng là 1 (hoặc ngược lại). việc tìm kiếm như trên chỉ có thể thực hiện nếu toàn bộ vectơ bit ñược chứa trong bộ nhớ. Bảng bit hay bản ñồ bit (bit map) là một mảng một chiều. 10 ñã ñược cấp phát. hệ ñiều hành thường sử dụng danh sách khối trống hoặc duy trì một kiểu bản ñồ các khối trên ñĩa. Bảng bit. Khối tương ứng chính là khối trống cần tìm. hệ ñiều hành cần biết khối nào hiện ñang trống. Ví dụ một ñĩa kích thước 8GB với nếu chia thành khối kích thước 1KB sẽ có vectơ bit tương ứng là 1Mb. Mỗi khối trống chứa ñịa chỉ của khối . Ví dụ: Trong trường hợp sau. Khối ñã ñược cấp phát có bit tương ứng là 0. Sau ñó vị trí bit ñầu tiên bằng 0 ñược xác ñịnh. Hệ ñiều hành có thể lựa chọn kích thước khối tự ñộng dựa trên dung lượng ñĩa hoặc cho phép người dùng lựa chọn khi format ñĩa. 8. việc tiết kiệm không quan trọng bằng tốc ñộ nên có thể chọn khối kích thước lớn. Trên thực tế. Tương tự như trong trường hợp sử dụng danh sách kết nối cho file. Hệ ñiều hành có thể chia vectơ bit thành các từ và kiểm tra xem từ ñó có khác. Nếu các khối này nằm rải rác trên ñĩa. yêu cầu về tránh phân mảnh trong mâu thuẫn với yêu cầu về tốc ñộ truy cập và ñòi hỏi giải pháp dung hòa hai yêu cầu này. các khối trống ñược liên kết với nhau thành danh sách. 1. Danh sách kết nối. kích thước khối vật lý (sector) nhỏ nhất thường ñược chọn bằng 512B và kích thước khối lô gic là lũy thừa 2 của kích thước khối vật lý. Sau ñây là một số phương pháp thường dùng ñể lưu trữ danh sách hoặc bản ñồ khối trống này. hệ ñiều hành sẽ phải dành nhiều không gian hơn ñể lưu thông tin quản lý khối. các khối ñược lấy từ danh sách này và cấp phát cho file. việc ñọc toàn bộ vectơ bit vào bộ nhớ như vậy có thể ñòi hỏi khá nhiều bộ nhớ. với ñĩa dung lượng nhỏ. Khi cần thiết..2. kích thước khối nhỏ ñồng nghĩa với việc mỗi file sẽ bao gồm nhiều khối hơn. ðối với ñĩa có dung lượng lớn. Tuy nhiên. các khối còn lại chưa bị sử dụng: 00111111000111111. Do nhiều bộ vi xử lý cung cấp các lệnh cho phép tìm ra các bit ñầu tiên có giá trị 1 hoặc 0 trong một từ nhớ (ví dụ vi xử lý Intel bắt ñầu từ 80386 và Motorola bắt ñầu từ 68020) nên việc tìm ra vùng các khối trống có thể thực hiện rất nhanh ở mức phần cứng.

125 .

thời gian tìm kiếm có thể rất lớn (ở mức người dùng có thể nhận biết ñược). Phần này sẽ ñề cập tới một số phương pháp xây dựng thư mục. Một số hệ thống file có thể không sử dụng các cấu trúc riêng nói trên ñể quản lý khối trống mà kết hợp luôn vào cấu trúc quản lý không gian trung của ñĩa. ðể tiến hành thao tác mở file. ðịa chỉ khối trống ñầu tiên trong danh sách này ñược lưu trữ ở một vị trí ñặc biệt trên ñĩa và ñược hệ ñiều hành giữ trong bộ nhớ khi cần làm việc với các file.7. Khoản mục mới sau ñó ñược thêm vào cuối danh sách hoặc một ô trong bảng nếu ô này chưa ñược sử dụng.1. Khi số lượng file trong thư mục tăng lên. hệ ñiều hành lưu vị trí khối trống ñầu tiên của vùng các khối trống liên tiếp và số lượng các khối trống nằm liền ngay sau ñó. cách lưu trữ và quản lý thư mục.2. thay vì lưu trữ ñịa chỉ từng khối trống. xoá file. Nhược ñiểm cơ bản của phương pháp tổ chức thư mục này là việc tìm kiếm trong danh sách rất chậm do phải duyệt lần lượt.7. Danh sách này có thể là bảng. Ví dụ. Việc duyệt chỉ cần thiết khi cần tìm các khối trống nằm kề nhau như trong phương pháp cấp phát khối liên tiếp. ðể mở file hoặc xóa file. Danh sách vùng trống. Tuy nhiên. Do ñó. Phương pháp này lợi dụng một ñặc ñiểm là các khối nằm liền nhau thường ñược cấp phát và giải phóng ñồng thời. ta cũng tiến hành tìm tuần tự khoản mục tương ứng. ðể thêm file mới vào thư mục. xoá. Vì số lượng vùng trống ít hơn số lượng từng khối trống nên danh sách vùng trống có kích thước bé hơn danh sách từng khối trống rất nhiều. Việc cache thư mục trong bộ nhớ mà nhiều hệ ñiều hành thực hiện chỉ cho phép tiết kiệm thời gian ñọc thư mục từ ñĩa chứ không giảm ñược thời gian tìm kiếm trong thư mục. trong ña số trường hợp. Cây nhị phân 126 . file ñược biểu diễn bởi khoản mục trong thư mục. danh sách kết nối hay một câu trúc khác. trước tiên ta phải duyệt cả thư mục ñể kiểm tra xem khoản mụcvới tên file như vậy ñã có chưa. tạo file. tìm kiếm khoản mục trong thư mục phụ thuộc rất nhiều vào cách tổ chức bên trong. 4.Hệ thống file trống tiếp theo. việc sử dụng danh sách kết nối ñể quản lý khối trống ñòi hỏi truy cập lần lượt các khối trống khi cần duyệt danh sách này. TỔ CHỨC BÊN TRONG CỦA THƯ MỤC Như ñã nói trong các phần trước. Danh sách Cách ñơn giản nhất là tổ chức thư mục dưới dạng danh sách các khoản mục. hệ ñiều hành ít khi phải duyệt danh sách mà có thể cấp phát ngay các khối ở ñầu danh sách. Giống như trường hợp danh sách kết nối cho file. trước tiên hệ ñiều hành duyệt thư mục và tìm ra khoản mục tương ứng. Việc tìm kiếm khoản mục khi ñó ñược thực hiện bằng cách duyệt lần lượt danh sách. Hai thông số này sau ñó sẽ ñược lưu trong một danh sách riêng. 4. Hiệu quả việc tạo. Khoản mục này sẽ cung cấp thông tin về vị trí file trên ñĩa cho phép ta thực hiện các thao tác tiếp theo với file. hệ thống file FAT của MS-DOS và Windows quản lý ngay khối trống trong FAT bằng cách ñánh dấu các khối này một cách ñặc biệt: ô tương ứng với khối trống trong bảng FAT có giá trị 0.7. Không có cấu trúc dữ liệu nào ñược tạo riêng ñể quản lý khối trống nữa. 4.

khoản mục dài 32 byte không ñủ ñể chứa hết các tên file dài. Trong trường hợp ñó. Một số phiên bản cải tiến của FAT cho phép sử dụng tên file có ñộ dài tối ña là 255 ký tự. Việc tìm kiếm trong cây ñã sắp xếp nhanh hơn rất nhiều. Hệ thống file NTFS của Windows NT là một ví dụ sử dụng thư mục kiểu này. Khi ñó ta cần xây dựng hàm băm mới cho phép ánh xạ tên file sang khoảng mới từ 0 ñến 149. Ví dụ thư mục gốc của ñĩa mềm thường chỉ chứa tối ña 128 khoản mục. Mỗi khoản mục chiếm một dòng trong bảng này và có ñộ dài cố ñịnh là 32 byte. Số lượng khoản mục trong thư mục gốc bị hạn chế không ñược vượt quá một số lượng cho trước. ðể 127 . Cấu trúc dữ liệu thường ñược dùng ñể xây dựng thư mục là cây nhị phân (B tree) hoặc cây nhị phân cân bằng. Bảng băm là cấu trúc dữ liệu cho phép dùng hàm băm ñể tính vị trí của khoản mục trong thư mục theo tên file.3. 4. ngay sau sector khởi ñộng BOOT và bảng FAT. Nếu số lượng khoản mục vượt quá kích thước chọn cho bảng băm thì phải chọn lại hàm băm. Trường hợp nhiều ên file cùng băm tới một vị trí ñược giải quyết như trong các bảng băm thông thường. cấu trúc phiên bản mới xem trong phần mô tả hệ thống file FAT ở cuối chương). Tổ chức thư mục của DOS (FAT) Mỗi ñĩa lôgic trong MS-DOS có cây thư mục riêng của mình. hệ thống sắp xếp khoản mục vào nhánh tương ứng của cây. Thời gian tìm kiếm trong thư mục do ñó giảm xuống rất nhiều so với dùng danh sách như ở phần trên. Nhược ñiểm lớn nhất của cấu trúc này là hàm băm phụ thuộc vào kích thước của bảng băm do ñó bảng phải có kích thước cố ñịnh. Hàm băm biến ñổi tên file thành các số nguyên từ 0 ñến 127 bằng cách lấy phần dư sau khi chia cho 128. Cấu trúc của khoản mục ñược thể hiện trên hình 4. Việc tạo và xoá file cũng ñược thực hiện ñơn giản bằng cách tính vị trí của khoản mục cần tạo hay xoá trong bảng băm.Hệ thống file ðể tăng tốc ñộ tìm kiếm cần dùng cấu trúc dữ liệu có hỗ trợ sắp xếp. kích thước bảng băm cũng phải tăng lên. Nếu số lượng file trong thư mục tăng lên quá 128.12 (dùng trong phiên bản cũ. 4. 8 Tên file Phần mở rộng tên file Thuộc tính 3 1 10 Phần dự phòng 2 2 2 4 ðộ dài Thời gian tạo file Số thứ tự cluster ñầu Ngày tạo file Hình 4. Cây thư mục bắt ñầu từ thư mục gốc ROOT.4. chẳng hạn 130 file. Thư mục gốc ñược ñặt ở phần ñầu của ñĩa. ta có bảng băm với 128 khoản mục.7.Các khoản mục có thể trỏ tới file hoặc trỏ tới thư mục con mức dưới.12: Nội dung khoản mục trong thư mục của hệ thống file FAT Thư mục của MS-DOS ñược tổ chức dưới dạng bảng.7. Ví dụ. Khi thêm khoản mục mới vào thư mục. Bảng băm Một kiểu cấu trúc dữ liệu khác có thể dùng cho thư mục là bảng băm (hash table). Thư mục gốc chứa các file và thư mục con. chẳng hạn thành 150 khoản mục. Thư mục con ñến lượt mình có thể chứa file và thư mục mức dưới.

8. ðối với ñĩa mềm. Các thông tin này có thể rất quan trọng ñối với người dùng. Mỗi khoản mục ñộ dài 32 byte sẽ chứa một phần tên file. Những khối hỏng này ñược nhà sản xuất phát hiện trong quá trình kiểm tra ñĩa và ñược lưu trong danh sách khối hỏng ñi cùng với ñĩa.1.8. Thư mục của Linux Thư mục hệ thống file Ext2 của Linux có cách tổ chức bên trong ñơn giản. phần ñầu mỗi khoản mục có một trường cho biết kích thước của khoản mục này (xem hình 4. các khối hỏng thường xuất hiện trong quá trình sử dụng. 4. Hệ thống file. ñọc thông tin. thường có các khối hỏng ngay trong quá trình sản xuất. Thông tin của hệ thống file lưu trên ñĩa và các thiết bị nhớ ngoài khác có thể bị sai lệch hoặc mất mát do nhiều nguyên nhân: lỗi phần cứng. Trong phần này ta sẽ xem xét một số vấn ñề liên quan tới ñộ tin cậy và tính toàn vẹn của hệ thống file. 4. ðỘ TIN CẬY CỦA HỆ THỐNG FILE File là nơi lưu giữ thông tin mang tính lâu bền.7. ñĩa có thể chứa các khối hỏng.v. . lỗi phần mềm. Chỉ có khoản mục cuối cùng chứa vị trí bắt ñầu file và các thuộc tính khác. phải có tính bền vững cao. thậm chí quan trọng hơn chính bản thân hệ thống tính toán.5. hệ ñiều hành sử dụng nhiều khoản mục cho một file.Hệ thống file chứa hết tên file. Có hai phương pháp thường ñược sử dụng cho phép thực hiện việc này.13: Cấu trúc khoản mục trong thư mục hệ thống file Linux Ext 4. Do vậy.v. ðể tránh mất thông tin do các khối hỏng gây ra cần phát hiện khối hỏng và tránh ghi thông tin lên ñó. ngược lại. Mỗi khoản mục chứa tên file và ñịa chỉ i-node. 128 . Kích thước khoản mục không cố ñịnh mà phụ thuộc vào ñộ dài tên file. Hình 4. hệ thống file cần ñược ñược xây dựng sao cho có khả năng phát hiện và khắc phục hậu quả trong khả năng cao nhất có thể. Khoản mục i-node ðộ dài Tên file Bảng i-node . . do vậy. không thể dùng cho ghi.13). Phát hiện và loại trừ các khối hỏng Trong quá trình sản xuất cũng như sử dụng. sự cố kỹ thuật (mất ñiện). nghĩa là phải ñảm bảo lưu trữ thông tin sao cho thông tin ñược toàn vẹn và không bị mất mát. ðĩa cứng. Mặc dù không thể ngăn chặn các sự cố như vậy. Toàn bộ thông tin còn lại về thuộc tính và vị trí các khối dữ liệu của file ñược lưu trong i-node chứ không phải trong thư mục.

hệ thống sử dụng một bit ñặc biệt gắn với mỗi file gọi là archive bit. Thay vì sao lưu toàn ñĩa. tính toàn vẹn của hệ thống cũng bị phá vỡ. Các khối hỏng sẽ ñược thay thế bằng các khối dự trữ bằng cách thay thế ñịa chỉ khối dự trữ thành ñịa chỉ khối hỏng. 129 . Ưu ñiểm của băng từ là dung lượng lớn. giá thành rẻ. ðể sử dụng phương pháp sao lưu thứ hai. bit ñược ñặt lại bằng 1.v.v. hệ thống lưu trữ thông tin về các lần lưu trữ file. thư mục chứa con trỏ tới các i-node. do ñó nhược ñiểm này không phải là vấn ñề lớn lắm. Có hai phương pháp sao lưu ñược sử dụng. phần quản lý không gian chưa sử dụng chứa danh sách các khối trống ñược liên kết với nhau. xong việc truy cập tới băng từ ít khi xảy ra (chỉ trong trường hợp ñĩa gốc bị hư hỏng). Do thuộc về file.DOS. Tính toàn vẹn của hệ thống file Như ñã trình bày ở các phần trên. Sao lưu tăng dần ñược sử dụng sau khi ñã tiến hành sao lưu toàn bộ ít nhất một lần. Phương pháp thứ nhất là sao lưu toàn bộ (full backup). vật mang ñược chọn cho bản sao dự phòng thường là băng từ.8. Thường thường người ta áp dụng cả 2 phương pháp trên. 4. còn sao lưu tăng dần ñược tiến hành hàng ngày. Chẳng hạn. Mặc dù tốc ñộ truy cập băng từ thấp hơn ñĩa và băng từ không hỗ trợ truy cập trực tiếp. Sao lưu toàn bộ ñược tiến hành hàng tuần hoặc hàng tháng. Hệ ñiều hành quản lý việc sao lưu bằng cáh kiểm tra thời gian sao lưu cuối này. Mọi truy cập tới khối hỏng do vậy sẽ trở thành truy cập tới khối dự trữ. Phương pháp thứ hai cho phép tiếp kiệm thời gian sao lưu và có tên gọi là sao lưu tăng dần (incremental backup). Sau khi sao dự phòng. Nếu thông tin về các liên kết này bị hư hại. ñặc biệt các ñĩa có dung lượng lớn. các khối này ñược ñánh dấu như ñã cấp phát và do vậy không ñược sử dụng nữa. Mỗi khi nội dung file thay ñổi. Hệ ñiều hành tập trung tất cả các khối hỏng thành một file. nội dung ñĩa có thể sao sang một ñĩa mềm khác.Hệ thống file Trong phương pháp thứ nhất.3. một sector trên ñĩa ñược dành riêng chứa danh sách các khối hỏng. Sao dự phòng Sao dự phòng (backup) hay sao lưu là tạo ra một bản sao của ñĩa trên một vật mang khác. Trong một số hệ thống như MS. i-node lại chứa liên kết tới các khối. hệ ñiều hành kiểm tra archive bit của các file. File có bit tương ứng bằng 1 là file ñã bị thay ñổi và cần phải sao lưu. Băng dùng sao lưu có thể là băng video thông thường với thiết bị ghi ñi kèm. phương pháp này chỉ sao các file ñã bị thay ñổi sau lần sao lưu cuối cùng. Phương pháp thứ hai ñơn giản hơn. hệ thống file chứa nhiều cấu trúc dữ liệu có các mối liên kết với nhau. Trong trường hợp ñĩa cần sao là ñĩa mềm.2.8. Với ñĩa cứng. các bit này ñược xoá về 0. Nếu sau lần lưu trữ cuối file bị thay ñổi thì file sẽ ñược sao lưu lại. Trong lần sao lưu tiếp theo. Tất cả thông tin trên ñĩa sẽ ñược sao sang băng từ. 4. Một số khối không hỏng ñược dành riêng ñể dự trữ. thay vì ghi lại thời gian lần sao lưu cuối cùng. Phương pháp này thường khá tốn thời gian nếu dung tích của ñĩa lớn.

Hệ thống. Chương trình lần lượt duyệt danh sách khối trống và toàn bộ i-node của các file. các khối không có mặt trong danh sách các khối trống. ñặc biệt khởi ñộng lại sau các sự cố. Có thể khắc phục lỗi này bằng cách thêm khối vào danh sách khối trống. Với mỗi khối cụ thể có thể xẩy ra ba trường hợp sau: Tổng số ñếm thứ nhất và thứ hai của khối bằng 1 như với các khối 1. thay ñổi các liên kết này. cho thấy khối hiện không thuộc danh sách khối trống. cho thấy khối ñang trống hoặc ñã ñược cấp phát cho duy nhất 1 file. file có thể bị xoá trong khi khoản mục ứng với file trong thư mục vẫn còn. số ñếm tương ứng thứ hai ñược tăng một ñơn vị. khoản mục ứng với file bị xoá còn file thì chưa. hệ thống file thường phải ñọc các khối chứa thông tin về các liên kết vào bộ nhớ. Ví dụ chương trình kiểm tra tính toàn vẹn trong Unix làm việc như sau: Kiểm tra tính toàn vẹn của khối. hệ ñiều hành thường có các chương trình kiểm tra tính toàn vẹn của hệ thống. Trong nhiều trường hợp. hệ thống file ñọc ñịa chỉ các khối thuộc về file. ðể giải quyết các vấn ñề nói trên. Có thể xảy ra trường hợp ngược lại. Ta hãy xem xét một số trường hợp phá vỡ tính toàn vẹn. Tạo hai số ñếm cho mỗi khối. ñồng thời cũng không thuộc file nào. Nếu khối xuất hiện trong i-node của file. Số ñếm thứ hai chứa số lần khối xuất hiện trong file. Nếu một khối ñồng thời thuộc về hai file cùng một lúc sẽ dẫn ñến mâu thuẫn và gây mất dữ liệu. Ví dụ ñược biết ñến rộng rãi của chương trình loại này là chương trình SCANDISK của Windows và DOS. khi xoá file. Trên hình ??? là ví dụ số ñếm của một số khối sau khi duyệt xong toàn hệ thống. hoặc ñã ñược cấp cho nhiều hơn một file. 4. ðối với file. i-node hoặc danh sách khối trống bị hư hại. do ñó. cho thấy file vừa ñược ñánh dấu còn trống. 5: kết quả lỗi. Các chương trình này ñược chạy khi hệ thống khởi ñộng. một khối có thể vừa thuộc về một file nào ñó vừa có mặt trong danh sách khối trống và do ñó có thể bị hệ ñiều hành cấp phát lần thứ hai cho một file khác. - 130 . Ví dụ. Khởi ñâu. vừa ñược ñánh dấu ñã cấp phát cho file. Nếu một khối xuất hiện trong danh sách khối trống. tất cả số ñếm ñược khởi tạo bằng 0. Tổng số ñếm thứ nhất và thứ hai của khối lớn hơn 1 như với khối 3. số ñếm tương ứng thứ nhất ñược tăng một ñơn vị. Việc hư hại xảy ra khi vùng ñĩa chứa các thông tin này bị hỏng hoặc khi hệ thống bị sự cố khi ñang thay ñổi các cấu trúc nói trên. ñồng thời cũng không có mặt trong một file nào. sau ñó ghi ngược ra ñĩa. mất quyền kiểm soát với các khối này. Trong trường hợp này việc khắc phục có thể gây mất dữ liệu nếu khối thuộc về nhiều file và ñã ñược ghi dữ liệu lên ñó. ñánh dấu khối thành khối trống sau ñó giải phóng khoản mục chứa file. Tổng số ñếm thứ nhất và thứ hai của khối bằng 0 như với khối 0: kết quả lỗi. 2: kết quả bình thường. Số ñếm thứ nhất chứa số lần khối ñó xuất hiện trong danh sách khối trống.Hệ thống file Trong quá trình làm việc. Trường hợp thứ nhất. Trong trường hợp khác. các liên kết này có thể bị phá vỡ và trở nên không toàn vẹn ñặc biệt trong trường hợp thư mục.

Thứ hai. ðối với các hệ thống nhỏ dành cho một người dùng.14: Kết quả kiểm tra tính toàn vẹn của khối 4. thực hiện (ñối với file 131 . Tuy nhiên.8. nhưng phương pháp này có một số nhược ñiểm. Kỹ thuật này dựa trên khái niệm giao tác (transaction). Hệ thống file NTFS của Windows NT và các phiên bản sau sử dụng kỹ thuật giao tác vừa trình bầy. Giao tác là một tập hợp các thao tác cần phải ñược thực hiện trọn vẹn cùng với nhau. hệ ñiều hành sẽ sử dụng thông tin từ log ñể khôi phục hệ thống file về trạng thái không lỗi.1 1 3 2 Số thứ tự khối 1 2 3 4 1 0 1 0 Số thứ tự khối 1 2 3 4 Hệ thống file Số lần xuất hiện trong danh sách trống 0 0 5 1 0 Số lần xuất hiện trong file 5 Hình 4. cụ thể là những thay ñổi thực hiện với các liên kết và cấu trúc quản lý file. Nếu bất cứ một thao tác nào chưa hoàn thành. Toàn bộ trạng thái hệ thống file. việc kiểm tra chỉ cho phép phát hiện lỗi sau khi ñã xảy ra và không ñảm bảo khôi phục dữ liệu ñối với một số lỗi. chẳng hạn bằng cách chạy SCANDISK. Nếu giao tác không ñược thực hiện trọn vẹn do sự cố. Trong những hệ thống tính toán ña người dùng.9. ñòi hỏi khá nhiều thời gian. Các thao tác thường ñược xem xét hạn chế là ñọc. trước khi bắt ñầu thực hiện giao tác. Mỗi khi thực hiện giao tác. và không sử dụng kỹ thuật này cho thay ñổi nội dung file. Phương pháp sử dụng giao tác cho phép ñưa hệ thống file về một trạng thái không lỗi trong khi không phải kiểm tra toàn bộ liên kết của file và thư mục.4. BẢO MẬT CHO HỆ THỐNG FILE Bảo mật cho hệ thống file là ngăn cản việc truy cập trái phép các thông tin lưu trữ trong file và thư mục. ghi. hệ thống kiểm tra xem giao tác có ñược thực hiện trọn vẹn không. ví dụ. Thứ nhất. hệ thống chỉ áp dụng giao tác với thay ñổi liên kết. một khái niệm có nguồn gốc từ lĩnh vực cơ sở dữ liệu. ví dụ các thao tác cập nhật liên kết liên quan với một khối trên ñĩa. ðối với hệ thống file. Hệ thống quản lý quyền truy cập bằng cách hạn chế các thao tác truy cập tới file hoặc thư mục. vấn ñề bảo mật tương ñối ñơn giản và có thể thực hiện bằng các biện pháp vật lý. ñược hệ thống ghi lại trong một file log (một dạng file nhật ký ghi lại thông tin về hệ thống theo thời gian). cho phép hạn chế những nhược ñiểm nói trên. thì coi như toàn bộ giao tác chưa ñược thực hiện. mỗi giao tác sẽ bao gồm những thao tác thay ñổi liên kết cần thực hiện cùng nhau. ðảm bảo tính toàn vẹn bằng cách sử dụng giao tác Mặc dù có thể kiểm tra tính toàn vẹn của các liên kết trong hệ thống file như vừa trình bày trong phần trước. 4. việc kiểm tra toàn bộ hệ thống file. Một số hệ thống file hiện nay sử dụng kỹ thuật tiên tiến hơn. không cho những người khác tiếp cận tới hệ thống. việc bảo mật cho file và thư mục thực hiện bằng cách kiểm soát quyền truy cập tới các tài nguyên này.

15: Ví dụ danh sách quản lý truy cập cho hai file Các quyền truy cập thường sử dụng với file bao gồm: Quyền ñọc (Read): người có quyền này ñược phép ñọc nội dung file. Quyền xóa (Delete): ñược phép xóa file. Quyền thay ñổi chủ file (Change owner) 132 . Dưới ñây ta sẽ ñề cập tới một số cơ chế bảo mật thường gặp. gắn với tên và mật khẩu.9. hệ thống file ñối chiếu uid với các quyền ghi trong ACL của file tương ứng ñể quyết cho phép hay không cho phép truy cập File 1 A chủ file ñọc ghi B ñọc C ñọc ghi File 2 Hình 4. do mỗi thao tác truy cập ñều ñòi hỏi cung cấp mật khẩu nên rất mất thời gian và không tiện lợi. xoá file. Nhược ñiểm chủ yếu của phương pháp này là việc nhớ mật khẩu cho từng file hoặc từng thư mục là vô cùng khó khăn nếu số lượng file lớn. Thông tin ñịnh danh người dùng có thể chứa tên người dùng hoặc số nhận dạng mà hệ ñiều hành cấp khi người dùng ñó ñăng nhập vào hệ thống. B 4. Change): ñược phép ghi vào file. Ngoài ra. Thực chất. xoá file khỏi thư mục. các thao tác cần kiểm soát là xem nội dung thư mục. Khi người dùng (hoặc chương trình ứng dụng của người dùng) truy cập file. hệ thống sẽ chương trình ứng dụng truy cập file ñể ñọc.1. ghi hoặc thực hiện thao ghi yêu cầu cùng cấp mật khẩu tương ứng và việc truy cấp chỉ ñược thực hiện nếu mật khẩu ñúng. Phương pháp sử dụng ACL thường ñược sử dụng cùng với cơ chế ñăng nhập. tức là thay ñổi nội dung file. uid sẽ gắn với người dùng trong phiên làm việc. ??c tác khác. 4. Ví dụ sử dụng cơ chế bảo mật kiểu này ñược sử dụng trong Windows 95/98 ñể chia sẻ các thư mục giữa các máy nối mạng theo mô hình nhóm (workgroup). thêm file vào thư mục.9. thay ñổi (Write. ðối với thư mục. Danh sách này chứa thông tin ñịnh danh người dùng và các quyền mà người dùng ñó ñược thực hiện với file. thêm vào file.Hệ thống file chương trình). Danh sách quản lý quyền truy cập thường ñược lưu trữ như một thuộc tính của file hoặc thư mục. Người dùng ñược hệ thống cấp một số ñịnh danh uid.2. Sử dụng mật khẩu C ch? file Mỗi file sẽ có một mật khẩu gắn với một số quyền nào??c Khi người dùng hoặc ñó. Sau khi ñăng nhập thành công. quyền này tương ñương với quyền thay ñổi file. Quyền ghi. Danh sách quản lý truy cập Mỗi file sẽ ñược gắn một danh sách ñi kèm gọi là danh sách quản lý truy cập ACL (Access Control List).

ðồng thời. Những quyền liệt kê ở trên là những quyền cơ sở và có thể ñược tổ hợp với nhau ñể tạo ra quyền mới. 4. Trong trường hợp số lượng người dùng có quyền với file lớn. Hiện nay. và ñược sử dụng như phương tiện trung gian thuận tiện khi cần trao ñổi file giữa các hệ ñiều hành khác nhau. không hỗ trợ cơ chế bảo mật. Tuy nhiên. 3.0. 133 . hệ ñiều hành sử dụng thêm khái niệm nhóm người dùng. ðối với Windows. kích thước ACL có thể rất ñáng kể. rất nhiều hệ thống nhúng sử dụng FAT ñể quản lý file do sự ñơn giản của hệ thống file này. Chẳng hạn. FAT không ñược dùng làm hệ thống file cho ñĩa cứng trong những phiên bản mới nhất của Windows do có một số nhược ñiểm như tốc ñộ và ñộ tin cậy không cao. trong ñó có quyền cấp quyền cho người dùng khác ñối với file do mình làm chủ. ME. nếu người dùng có quyền ñọc file thì sẽ có quyền thực hiện file. thực chất là ñọc và tải nội dung file chương trình vào bộ nhớ ñể thực hiện. Nhóm người dùng bao gồm những người có quyền giống nhau ñối với file hoặc thư mục. và sau ñó ñã ñược sử dụng trong một số phiên bản của hệ ñiều hành Windows như Windows 3. quyền truy cập ñược hiển thị và thay ñổi thông qua giao diện ñồ họa như trên hình 4.Hệ thống file Quyền thứ tư ñược nhắc tới ở trên liên quan tới khái niệm chủ file (owner). FAT vẫn là hệ thống file thông dụng nhất.16. ñĩa mềm. Dưới ñây là ví dụ giao diện làm việc với quyền truy cập trong Windows (sử dụng hệ thống file NTFS).1. 95/98. HỆ THỐNG FILE FAT Hệ thống file FAT ñược thiết kế ban ñầu ñể sử dụng trong hệ ñiều hành DOS. Ngoài ra. Do ñó.10. ñược sử dụng trong hầu hết các hệ ñiều hành hiện nay ñể quản lý thẻ nhớ. ñĩa CD. Chủ file là người có quyền cao nhất với file. việc gán quyền cho từng người dùng riêng lẻ tốn rất nhiều thời gian. Ta có thể thêm từng nhóm người dùng vào ACL của file (Windows NT) hoặc thêm người dùng vào nhóm gắn với file (Linux).

trong khi FAT16 ñược sử dụng cho thiết bị nhớ ngoài có dung lượng nhỏ hơn như CD. ðối với ñĩa cứng. ðơn vị cấp phát không gian trên ñĩa (khối lô gic) là cluster.16: Giao diện phần quản lý quyền truy cập file của Windows Vista Hệ thống file FAT có ba phiên bản là FAT12. Hiện nay. với một số quy ước như A là ổ ñĩa mềm. mỗi ñĩa mềm. C là ñĩa lô gic ñầu tiên trên ổ cứng. Mỗi cluster chứa một số lượng sector bằng lũy thừa của 2.v. 134 . ðối với thiết bị nhớ ngoài khác. kích thước cluster nằm trong khoảng tự 2KB ñến 32KB. 4.. Thông thường.D. toàn bộ ñĩa ñược chia thành các vùng (partition). thẻ nhớ ngoài ñược coi là một ñĩa lô gic với ñầy ñủ cấu trúc quản lý ñĩa lô gic của mình.C. Kích thước cluster cùng với phiên bản FAT (12. Tổ chức thông tin trên ñĩa lôgic Thông tin trên ñĩa lô gic ñược tổ chức như trên hình 4. ña số FAT ñược sử dụng cho ñĩa cứng là FAT32. ðĩa lô gic ñược ñặt tên bằng các chữ cái A. trong ñó chữ số sau phần chữ chỉ kích thước ô của bảng FAT tương ứng là 12. Vùng mở rộng ñược chia tiếp thành một số ñĩa lô gic. 16. ðĩa lôgic ðơn vị tổ chức trong hệ thống file FAT là ñĩa lôgic (logical disk). CD. và 32 bit.Hệ thống file Hình 4. bao gồm vùng chính (primary partition) và vùng mở rộng (extended partition).v. hay 32) quyết ñịnh kích thước tối ña của ñĩa lô gic mà FAT có thể quản lý. FAT16.10. thẻ nhớ ngoài. và FAT32.B.1. 16.17. Bản thân vùng chính cũng ñược coi là ñĩa lô gic với khác biệt là có thể khởi ñộng hệ ñiều hành từ ñây.

vùng này Kích thước vùng này mục gốc và ñược ghi lưu trữ thư mục gốc 2) 3) 4) Vùng dữ liệu: chiếm toàn bộ không gian còn lại trên ñĩa.FAT1+FAT2: số lượng bảng FAT x kích thước FAT. Ngoài ra. cluster. tính bằng số sector mà vùng ñó chiếm. . ta thấy ñĩa lô gic của hệ thống file FAT gồm 4 phần chính: 1) Boot sector các các sector dự phòng. FAT32 không sử dụng vùng này mà như các file và thư mục thông thường. chứa các file và thư mục của ñĩa lô gic. 4. và FAT16. Tuy nhiên. Boot sector chứa thông tin mô tả cấu trúc ñĩa lô gic như kích thước sector. tức là thư mục trên cùng của ñĩa. trong ñó một bảng là bản sao của bản kia. .v. Sector ñầu tiên trong phần này ñồng thời là sector ñầu tiên của ñĩa lô gic là boot sector. số lượng bảng FAT có thể thay ñổi và không phải là hai.2. thực chất là bảng chỉ số dùng cho việc quản lý các khối và các file. Trong phiên bản FAT12 chứa các thư mục gốc. có thể xác ñịnh bằng cách ñọc thông tin ghi trong phần boot sector như sau. nên ngoài boot sector. nếu ñĩa lô gic là ñĩa khởi ñộng hệ ñiều hành thì boot sector còn chứa mã của chương trình mồi (loader) dùng ñể tải hệ ñiều hành. kích thước bảng FAT.v. Cấu trúc cụ thể của boot sector như sau: 32 byte ñầu tiên: 135 .17: Cấu trúc ñĩa lô gic Kích thước các vùng. vùng này bắt ñầu từ cluster số 2. Do thông tin trong bảng FAT rất quan trọng nên hệ ñiều hành thường duy trì hai bảng FAT. ñược xác ñịnh bằng số lượng tối ña khoản mục trong thư trong boot sector. Kích thước toàn bộ vùng này ñược ghi trong cấu trúc thông tin chứa trong boot sector.Thư mục gốc: (số lượng khoản mục trong thư mục gốc x 32)/kích thước sector. Do chương trình mồi có thể dài.10. Số lượng bảng FAT cho ñĩa cụ thể ñược ghi trong boot sector. Boot sector Boot sector là sector ñầu tiên trên ñĩa và chứa thông tin mô tả cấu trúc ñĩa cùng với mã ñể tải hệ ñiều hành ñối với ñĩa mồi hệ ñiều hành. Thông thường. hoặc hệ thống cần phải chứa thêm một số thông tin khác. Qua hình vẽ.Boot Sector và dự phòng: bằng số lượng sector dự phòng. . vùng này có thể bao gồm thêm một số sector dự phòng khác. FAT: Vùng này chứa bảng FAT. Thư mục gốc (root directory).Hệ thống file Boot sector và các khối dự phòng Bảng FAT1 Bảng FAT2 Thư mục gốc Phần còn lại cho tới cuối ñĩa (chỉ có trên chứa các file và thư mục của FAT12 và ñĩa lô gic FAT16) Hình 4.

Tổng số sector trên ñĩa. bao gồm boot sector và các sector dự phòng. Nếu bằng không thì số lượng sector ñược ghi bằng 4 byte tại vị trí 0x20. 0xF1 là ñĩa cứng .5” hai mặt với 80 rãnh trên mỗi mặt. 80h: ñĩa cứng . Số xê ri của ñĩa (Volume Serial Number) ñược tạo lúc format ñĩa 136 Ý nghĩa Số thứ tự vật lý của ñĩa (0: ñĩa mềm. viết tắt là BPB) Sectors per cluster.v. Ví dụ 0xF0 là ñĩa mềm 3.) . Kích thước sector tính bằng byte. Số lượng sector dành cho vùng ñầu ñĩa ñến trước FAT. ðây cũng là vị trí bắt ñầu của Khối Thông số BIOS (BIOS Parameter Block. Sectors per FAT. Cụ thể.v. MSDOS5. Tổng số sector trên ñĩa cho trường hợp có nhiều hơn 65535. Bằng 0 với FAT32. bổ sung dấu trắng ở cuối cho ñủ 8B. Ví dụ: IBM 3. Total sector. Reserved sectors. Số lượng ñầu ñọc (mặt ñĩa ñược sử dụng) Hidden sectors. Số lượng bảng FAT. Số sector trên một rãnh.0. Chỉ sử dụng cho FAT12 và FAT16. Bytes per sector. Số lượng sector ẩn. Chỉ thị cho CPU bỏ qua phần thông tin và nhẩy tới thực hiện phần mã mồi của hệ ñiều hành nếu ñây là ñĩa mồi hệ ñiều hành.v.v. luôn là lũy thừa của 2 và không lớn hơn 128.v. Chứa giá trị 0x29 (ký tự ‘)’) hoặc 0x28. Tên hãng sản xuất.v. Số khoản mục tối ña trong thự mục gốc ROOT. Mô tả loại ñĩa. Number of heads. các byte tiếp theo trong FAT12/16 chứa các thông tin sau: Vị trí 36 37 38 39 ðộ dài 1 1 1 4 Dự phòng Dấu hiệu của phần mã mồi. Thường bằng 2. 11 2 13 14 16 17 19 21 22 24 26 28 32 1 2 1 2 2 1 2 2 2 4 4 Phần còn lại có cấu trúc khác nhau ñối với FAT12/16 và FAT32.Hệ thống file Vị trí 0 3 ðộ dài 3 8 Ý nghĩa Lệnh Jump. Kích thước FAT tính bằng sector (ñối với FAT12/16) Sectors per track. Số sector trong một cluster.3. Total sector. Giá trị thường gặp là 512 ñối với ñĩa cứng.

ðây là phần nằm trong số sector dự phòng ngay sau boot sector. Số thứ tự sector ñầu tiên của bản sao của boot sector (nếu có) Dự phòng Số thứ tự vật lý của ñĩa Dự phòng Dấu hiệu của phần mã mồi mở rộng. Nhãn của ñĩa ñược tạo khi format. 0x1FE 2 4. Số sector của Information Sector. mỗi ô trong bảng FAT tương ứng với một cluster trên ñĩa. và chứa thông tin sau: Vị trí 36 0x28 0x2a 0x2c 0x30 0x32 0x34 0x40 0x41 0x42 0x43 0x47 0x52 0x5a ðộ dài 4 2 2 4 2 2 12 1 1 1 4 11 8 420 Cờ của FAT Version.10. dùng ñể quản lý các khối (cluster) trên ñĩa và các file theo nguyên tắc các khối thuộc về một file ñược liên kết với nhau thành danh sách móc nối và con trỏ ñược chứa trong ô tương ứng của bảng FAT. Chẳng hạn. Bảng FAT Bảng FAT là bảng chỉ số. Cụ thể. Mỗi ô trong bảng FAT chứa một trong các thông tin sau: Số thứ tự của cluster tiếp theo trong danh sách cluster của file. Dấu hiệu Boot sector (0x55 0xAA) ðối với FAT32. Tên hệ thống file FAT. ñây là phần chương trình tải hệ ñiều hành khi khởi ñộng. Mã mồi hệ ñiều hành. Phiên bản. Phương pháp này ñã ñược mô tả trong phần cấp phát không gian cho file ở trên.Hệ thống file 43 54 62 510 11 8 448 2 Volume Label. "FAT16 ". Số xê ri của ñĩa (Volume Serial Number) Volume Label "FAT32 " Mã mồi hệ ñiều hành Dấu hiệu Boot sector (0x55 0xAA) Ý nghĩa Sectors per FAT. Số thứ tự của cluster ñầu tiên của thư mục gốc root. các byte tiếp theo có ý nghĩa khác. ví dụ"FAT12 ". 137 . Kích thước FAT tính bằng sector. ô số 2 của FAT tương ứng với cluster số 2.3.

FAT12 0x000 0x001 0x002– 0xFEF 0xFF0– 0xFF6 0xFF7 0xFF8– 0xFFF FAT16 0x0000 0x0001 0x0002– 0xFFEF 0xFFF0– 0xFFF6 0xFFF7 0xFFF8– 0xFFFF FAT32 0x00000000 0x00000001 0x00000002– 0x0FFFFFEF Cluster trống Cluster dự phòng. 32 dành tương ứng 12. Dấu hiệu ñánh dấu cluster bị hỏng. thêm bằng dấu trắng ở cuối nếu ngắn hơn 8 byte Phần mở rộng. ðối với FAT12/16. Mỗi khoản mục có kích thước 32 byte chửa thông tin về một file hoặc thư mục con thuộc thư mục ñang xét. Dấu hiệu ñánh dấu cluster dự phòng. thêm bằng dấu trắng ở cuối nếu ngắn hơn 3 byte Byte thuộc tính của file. 4 bit cao dùng làm dự phòng và có giá trị bằng 0. không ñược sử dụng Cluster ñã ñược cấp cho file. Do cluster ñầu tiên của vùng dữ liệu ñược ñánh số thứ tự bằng 2 nên hai ô ñầu tiên của bảng FAT không ñược sử dụng.3 có cấu trúc như sau: Vị trí 0 8 11 ðộ dài 8 3 1 Mô tả Tên file. chưa ñược cấp phát cho file nào. 0x0FFFFFF8– Cluster cuối cùng của file 0x0FFFFFFF FAT12. 4. không ñược sử dụng. Thư mục gốc Mỗi thư mục ñược lưu trong bảng thư mục.Hệ thống file Dấu hiệu kết thúc danh sách nếu ô tương ứng với cluster cuối cùng trong file. Chứa số thứ tự cluster tiếp theo của file. 16. và 32 bit cho mỗi ô của FAT. Mỗi khoản mục ñối với trường hơp tên file ngắn 8. Mỗi thư mục bao gồm các khoản mục 32 byte xếp liền nhau.10. Ý nghĩa 0x0FFFFFF0– Cluster dự phòng 0x0FFFFFF6 0x0FFFFFF7 Cluster hỏng. Mỗi ô của FAT có thể chứa giá trị cụ thể như liệt kê dưới ñây.4. Bằng 0 nếu cluster trống. Các hệ thống FAT32 hiện nay chỉ sử dụng 28 bit thấp. Các thư mục mức thấp hơn cũng như thư mục gốc của FAT 32 ñược chứa trong vùng dữ liệu của ñĩa cùng với file. Kích thước mỗi ô càng lớn thì càng quản lý ñược nhiều cluster. Các bit của byte này nếu bằng 1 sẽ có ý nghĩa như sau: 138 . thực chất là một file ñặc biệt chứa các khoản mục của thư mục. ñồng thời cũng ñòi hỏi nhiều không gian hơn ñể lưu bảng FAT. thư mục trên cùng của ñĩa ñược chứa trong một vùng ñặc biệt gọi là thư mục gốc (root). 16.

bit 8-5: tháng (1-12). bit 4-0: giây/2 (0-29) Ngày tạo file theo format sau. 139 . ðể sử dụng tên file dài tới 255 ký tự. theo format thời gian tạo file Ngày sửa file lần cuôi. 127 =2107). Bằng 0 với thư mục con 12 13 14 16 18 20 22 24 26 28 1 1 2 2 2 2 2 2 2 4 Tên file dài. Bit 15-9: năm (0-1980. Cấu trúc trên chỉ cho phép lưu tên file và phần mở rộng không quá 8 và 3 byte. giá trị từ 0 ñến 199 Thời gian tạo file theo format sau: bit 15-11: giờ (0-23). 2 byte thấp của số thứ tự cluster ñầu tiên trong FAT32 Kích thước file tính bằng byte. Dự phòng Thời gian tạo file tính theo ñơn vị 10ms. theo format như ngày tạo file Số thứ tự cluster ñầu tiên của file trong FAT12/16.Hệ thống file Bit 0: file chỉ ñược ñọc Bit 1: file ẩn Bit 2: file hệ thống Bit 3: Volume label Bit 4: thư mục con Bit 5: archive Bit 6: thiết bị nhớ khác (dùng cho hệ ñiều hành) Bit 7: không sử dụng Byte thuộc tính bằng 0x0F là dấu hiệu của file tên dài. bit 10-5: phút (0-59). bit 4-0: ngày (1-31) Ngày truy cập cuối. mỗi khoản mục của file ñược tạo thành bằng cách ghép nhiều cấu trúc 32 byte với nhau. theo format như ngày tạo file 2 byte cao của số thứ tự cluster ñầu tiên của file trong FAT32 Thời gian sửa file lần cuối.

Tanenbaum.B. A. 3. 8 edition. Modern operating systems. W. NXB KHKT 2009. John Wiley & Sons. Gagne. ðHBK Hà nội 1999. 2009. Silbeschatz. C. Prentice Hall 2008. 6. 3rd edition.Hệ thống file TÀI LIỆU THAM KHẢO th 1. Operating systems: A design-oriented approach. Operating Systems: Internals and Design Principles. th 140 . Giáo trình Nguyên lý các hệ ñiều hành. Irwin Professional Publishing 1996.S. 5 edition. Crowley. 4. Prentice Hall 2005. Giáo trình Hệ ñiều hành. Hà Quang Thụy. 2. P. Galvin. Operating system concepts. In lần thứ ba. 5. G. Stallings. A. Nguyễn Thanh Tùng.

You're Reading a Free Preview

Tải về
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->