Bai giang hdh_newformat.pdf
Document Details
Uploaded by ChasteLesNabis
2009
Tags
Related
Full Transcript
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ín...
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 MỤC LỤC CHƯƠNG 1: GIỚI THIỆU CHUNG................................................................................ 8 1.1. CÁC THÀNH PHẦN CỦA HỆ THỐNG MÁY TÍNH................................................ 8 1.2. KHÁI NIỆM HỆ ðIỀU HÀNH.................................................................................. 9 1.3. CÁC DỊCH VỤ DO HỆ ðIỀU HÀNH CUNG CẤP................................................. 11 1.4. GIAO DIỆN LẬP TRÌNH CỦA HỆ ðIỀU HÀNH................................................... 13 1.5. QUÁ TRÌNH PHÁT TRIỂN HỆ ðIỀU HÀNH........................................................ 14 1.6. CẤU TRÚC HỆ ðIỀU HÀNH................................................................................. 17 1.6.2. Nhân của hệ ñiều hành...................................................................................... 19 1.6.3. Một số kiểu cấu trúc hệ ñiều hành..................................................................... 20 1.7. MỘT SỐ HỆ ðIỀU HÀNH CỤ THỂ........................................................................ 24 CHƯƠNG 2: QUẢN LÝ TIẾN TRÌNH.......................................................................... 27 2.1. CÁC KHÁI NIỆM LIÊN QUAN ðẾN TIẾN TRÌNH............................................... 27 2.1.1. Tiến trình là gì................................................................................................... 27 2.1.2. Trạng thái của tiến trình..................................................................................... 28 2.1.3. Thông tin mô tả tiến trình.................................................................................. 29 2.1.4. Bảng và danh sách tiến trình.............................................................................. 30 2.1.5. Các thao tác với tiến trình.................................................................................. 31 2.2. DÒNG...................................................................................................................... 34 2.2.1. Dòng thực hiện là gì.......................................................................................... 34 2.2.2. Tài nguyên của tiến trình và dòng...................................................................... 35 2.2.3. Ưu ñiểm của mô hình ña dòng........................................................................... 36 2.2.4. Dòng mức người dùng và dòng mức nhân......................................................... 37 2.3. ðIỀU ðỘ TIẾN TRÌNH........................................................................................... 39 2.3.1. Khái niệm ñiều ñộ............................................................................................. 39 2.3.2. Các dạng ñiều ñộ............................................................................................... 40 2.3.3. Các tiêu chí ñiều ñộ........................................................................................... 42 2.3.4. Các thuật toán ñiều ñộ....................................................................................... 43 2.4. ðỒNG BỘ HÓA TIẾN TRÌNH ðỒNG THỜI.......................................................... 47 2.4.1. Các vấn ñề ñối với tiến trình ñồng thời.............................................................. 48 2.4.2. Yêu cầu với giải pháp cho ñoạn nguy hiểm........................................................ 50 2.4.3. Giải thuật Peterson............................................................................................ 50 2.4.4. Giải pháp phần cứng.......................................................................................... 52 2.4.5. Cờ hiệu (semaphore)......................................................................................... 54 2.4.6. Một số bài toán ñồng bộ.................................................................................... 56 4 2.4.7. Monitor............................................................................................................. 58 2.4.8. Bế tắc................................................................................................................ 61 CHƯƠNG 3: QUẢN LÝ BỘ NHỚ................................................................................. 70 3.1. ðỊA CHỈ VÀ CÁC VẤN ðỀ LIÊN QUAN.............................................................. 70 3.1.1. Vấn ñề gán ñịa chỉ............................................................................................. 70 3.1.2. ðịa chỉ lô gic và ñịa chỉ vật lý........................................................................... 71 3.2. MỘT SỐ CÁCH TỔ CHỨC CHƯƠNG TRÌNH....................................................... 72 3.2.1. Tải trong quá trình thực hiện............................................................................. 72 3.2.2. Liên kết ñộng và thư viện dùng chung............................................................... 72 3.3. PHÂN CHƯƠNG BỘ NHỚ..................................................................................... 74 3.3.1. Phân chương cố ñịnh......................................................................................... 75 3.3.2. Phân chương ñộng............................................................................................. 76 3.3.3. Phương pháp kề cận.......................................................................................... 78 3.3.4. Ánh xạ ñịa chỉ và chống truy cập bộ nhớ trái phép............................................. 79 3.3.5. Trao ñổi giữa bộ nhớ và ñĩa (swapping)............................................................. 80 3.4. PHÂN TRANG BỘ NHỚ......................................................................................... 81 3.4.1. Khái niệm phân trang bộ nhớ............................................................................. 81 3.4.2. Ánh xạ ñịa chỉ................................................................................................... 82 3.4.3. Tổ chức bảng phân trang................................................................................... 84 3.5. PHÂN ðOẠN BỘ NHỚ........................................................................................... 85 3.5.1 Khái niệm........................................................................................................... 85 3.5.2. Ánh xạ ñịa chỉ và chống truy cập trái phép........................................................ 86 3.5.3. Kết hợp phân ñoạn với phân trang..................................................................... 87 3.6. BỘ NHỚ ẢO............................................................................................................ 88 3.6.1. Khái niệm bộ nhớ ảo......................................................................................... 88 3.6.2. Nạp trang theo nhu cầu...................................................................................... 89 3.7. ðỔI TRANG............................................................................................................ 91 3.7.1. Tại sao phải ñổi trang........................................................................................ 91 3.7.2. Các chiến lược ñổi trang.................................................................................... 93 3.8. CẤP PHÁT KHUNG TRANG.................................................................................. 97 3.8.1. Giới hạn số lượng khung................................................................................... 97 3.8.2. Phạm vi cấp phát khung..................................................................................... 98 3.9. TÌNH TRẠNG TRÌ TRỆ.......................................................................................... 99 3.10. QUẢN LÝ BỘ NHỚ TRONG INTEL PENTIUM.................................................. 99 3.11. QUẢN LÝ BỘ NHỚ TRONG WINDOWS XP.................................................... 102 CHƯƠNG 4: HỆ THỐNG FILE................................................................................... 104 5 4.1. KHÁI NIỆM FILE.................................................................................................. 104 4.1.1. File là gì ?....................................................................................................... 104 4.1.2. Thuộc tính của file........................................................................................... 105 4.1.3. Cấu trúc file.................................................................................................... 107 4.2. CÁC PHƯƠNG PHÁP TRUY CẬP FILE.............................................................. 107 4.2.1. Truy cập tuần tự.............................................................................................. 108 4.2.2. Truy cập trực tiếp............................................................................................ 108 4.2.3. Truy cập dựa trên chỉ số.................................................................................. 109 4.3. CÁC THAO TÁC VỚI FILE.................................................................................. 110 4.4. THƯ MỤC............................................................................................................. 112 4.4.1. Khái niệm thư mục.......................................................................................... 112 4.4.2. Các thao tác với thư mục................................................................................. 113 4.4.3. Cấu trúc hệ thống thư mục............................................................................... 113 4.4.4. Tên ñường dẫn................................................................................................ 118 4.5. CẤP PHÁT KHÔNG GIAN CHO FILE................................................................. 118 4.5.1. Cấp phát các khối liên tiếp............................................................................... 119 4.5.2. Sử dụng danh sách kết nối............................................................................... 120 4.5.3. Sử dụng danh sách kết nối trên bảng chỉ số...................................................... 121 4.5.4. Sử dụng khối chỉ số......................................................................................... 122 4.6. QUẢN LÝ KHÔNG GIAN TRÊN ðĨA.................................................................. 124 4.6.1. Kích thước khối............................................................................................... 124 4.6.2. Quản lý các khối trống.................................................................................... 125 4.7. TỔ CHỨC BÊN TRONG CỦA THƯ MỤC........................................................... 126 4.7.1. Danh sách........................................................................................................ 126 4.7.2. Cây nhị phân................................................................................................... 126 4.7.3. Bảng băm........................................................................................................ 127 4.7.4. Tổ chức thư mục của DOS (FAT).................................................................... 127 4.7.5. Thư mục của Linux......................................................................................... 128 4.8. ðỘ TIN CẬY CỦA HỆ THỐNG FILE.................................................................. 128 4.8.1. Phát hiện và loại trừ các khối hỏng.................................................................. 128 4.8.2. Sao dự phòng.................................................................................................. 129 4.9. BẢO MẬT CHO HỆ THỐNG FILE....................................................................... 131 4.9.1. Sử dụng mật khẩu............................................................................................ 132 4.9.2. Danh sách quản lý truy cập.............................................................................. 132 4.10. HỆ THỐNG FILE FAT........................................................................................ 133 4.10.1. ðĩa lôgic........................................................................................................ 134 6 4.10.2. Boot sector.................................................................................................... 135 4.10.3. Bảng FAT..................................................................................................... 137 4.10.4. Thư mục gốc................................................................................................. 138 TÀI LIỆU THAM KHẢO.................................................................................................. 140 7 Giới thiệu chung CHƯƠNG 1: GIỚI THIỆU CHUNG 1.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. Phần cứng cung cấp các tài nguyên cần thiết cho việc tính toán, xử lý dữ liệu. Phần mềm gồm các chương trình quy ñịnh cụ thể việc xử lý ñó. ðể 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. 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, chương trình trò chơi, hệ quản trị cơ sở dữ liệu, chương trình truyền thông.v.v. Phần cứng có thể biểu diễn như lớp dưới cùng, là cơ sở của toàn hệ thống. ðây là những thiết bị cụ thể như CPU, bộ nhớ, thiết bị nhớ ngoài, thiết bị vào ra. Chương trình ứng dụng là lớp trên của hệ thống, 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. (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, 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. 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ọ. 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ả. 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. 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. 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. ðâ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. Các thành phần của hệ thống máy tính ñược thể hiện trên hình 1.1, 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. Người sử dụng Chương trình ứng dụng, chương trình hệ thống và tiện ích Hệ ñiều hành Phần cứng Hình 1.1: Các thành phần của hệ thống máy tính 8 Giới thiệu chung 1.2. 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, nhưng thông thường, hệ ñiều hành ñược ñịnh nghĩa thông qua mục ñích, vai trò, và chức năng trong hệ thống máy tính. 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ả. ðể hoàn thành vai trò của mình, 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. Ta sẽ xem xét kỹ hai chức năng này của hệ ñiều hành. 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ả. Nhờ có hệ ñiều hành, 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. 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), bộ nhớ chính, bộ nhớ thứ cấp, các thiết bị vào ra. CPU là thành phần trung tâm của hệ thống, có chức năng xử lý dữ liệu và ñiều khiển toàn hệ thống. Bộ nhớ chính là nơi lưu trữ chương trình và dữ liệu trong quá trình xử lý. Bộ nhớ thứ cấp, hay bộ nhớ ngoài, bao gồm các ñĩa từ, ñĩa quang học, ñĩa quang từ, băng từ, thẻ nhớ và các thiết bị nhớ khác có vai trò lưu trữ chương trình, dữ liệu trong thời gian dài với dung lượng lớn. 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. 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ả. ðể thực hiện ñược, các chương trình cần tài nguyên phần cứng như không gian bộ nhớ, thiết bị ngoại vi. 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. Muốn cấp phát tài nguyên, 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. Một ví dụ ñiển hình là trường hợp lưu trữ thông tin lên ñĩa. 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. 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. 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. Chẳng hạn, hai chương trình cùng có yêu cầu ghi ra ñĩa một lúc. 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, 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 ñó, 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.v.v. 9 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. Ví dụ, nếu hai chương trình ñược cấp hai vùng bộ nhớ khác 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. 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. 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). Chương trình cần ñược quản lý ñể có thể thực hiện thuận lợi, tránh các lỗi, ñồ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. Hệ ñiều hành giúp việc chạy chương trình dễ dàng hơn. ðể chạy chương trình cần thực hiện một số thao tác nhất ñịnh, nhờ có hệ ñiều hành, người dùng không phải thực hiện các thao tác này. ðể tạo môi trường thuận lợi cho chương trình, hệ ñiều hành tạo ra các máy ảo. 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, dễ lập trình hơn, số lượng nhiều hơn tài nguyên thực thực, khả năng có thể vượt quá khả năng tài nguyên thực. 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. 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. Chẳng hạn, processor ảo cung cấp khả năng thực hiện các lệnh, bộ nhớ ảo cung cấp khả năng lưu trữ thông tin, thiết bị vào/ra ảo cho phép chương trình ñọc ghi dữ liệu. Tài nguyên ảo khác tài nguyên thực ở chỗ dễ sử dụng hơn. Các tài nguyên thực ñều rất khó lập trình trực tiếp. Lấy ví dụ việc ghi thông tin ra ñĩa cứng. 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. 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. ðể thực hiện việc ñọc ghi thông tin, 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), kiểm tra xem ñĩa ñã ñạt ñược tốc ñộ chưa, sau ñó chuyển ñầu ñọc tới vị trí cần thiết, 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. 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. Trong trường hợp này là kiến thức về các lệnh, ñịa chỉ, khuôn dạng thanh ghi và quá trình trao ñổi tin với ñĩa. 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. ðể 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. Trừu tượng hoá là quá trình loại bỏ các chi tiết không quan trọng, chỉ giữ lại những khía cạnh cốt lõi mà người sử dụng quan tâm. 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 Giới thiệu chung nhiều do các chi tiết cụ thể ñã ñược giấu ñi. Chẳng hạn, ñĩa cứng có thể coi như nơi có thể ñọc, ghi các tệp. Người dùng có thể tạo, xoá, ñọc, 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, các lệnh bậc thấp. 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 ñ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. Hãy xem xét trường hợp CPU. Mỗi máy tính thường chỉ có một processor thực. Tuy nhiên nếu nhiều chương trình cùng ñược thực hiện trên má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 ñó. Rõ ràng số lượng processor ảo lúc ñó vượt số lượng CPU thực rất nhiều. 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. ðiển hình là bộ nhớ ảo. 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. 1.3. 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. ð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. 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. Các dịch vụ có thể thay ñổi theo từng hệ ñiều hành. 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. Chẳng hạn, 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. 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ó. Dưới ñây là những dịch vụ thường gặp của hệ ñiều hành. Tải và chạy chương trình. ðể thực hiện một chương trình, 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. 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ữ. 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. 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. Nhờ có hệ ñiều hành, 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. Ở ñây cần nói thêm về việc tải hệ ñiều hành vào bộ 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. Chính xác hơn, quá trình ñó diễn ra như sau. 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). 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. Sau khi khởi ñộng hệ thống, 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 Giới thiệu chung của hệ ñiều hành từ vị trí quy ước trên ñĩa vào bộ nhớ. Sau ñó, 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. Giao diện với người dùng. 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. 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). 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í dụ chương trình cmd.exe của Windows. Giao diện ñồ họa sử dụng hệ thống cửa sổ, thực ñơn, và thiết bị trỏ như chuột, kết hợp với bàn phím ñể giao tiếp với hệ thống. Thực hiện các thao tác vào ra dữ liệu. 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. ðể 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, yêu cầu vào/ra sẽ ñược giao cho hệ ñiều hành thực hiện. Làm việc với hệ thống file. 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. ða số người dùng và chương trình có nhu cầu ñọc, ghi, tạo, xóa, chép file hoặc làm việc với thư mục. Ngoài ra còn nhiều thao tác khác với file như quản lý quyền truy cập, sao lưu. 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ụ. Phát hiện và xử lý lỗi. ðể ñảm bảo cho hệ thống hoạt ñộng ổn ñịnh, an toàn, 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. Các lỗi phần cứng có thể là lỗi bộ nhớ, mất ñiện, máy in hết giấy.v.v. 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, lỗi truy cập bộ nhớ.v.v. Truyền thông. Trong khi thực hiện, chương trình có thể có nhu cầu trao ñổi thông tin với nhau, 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. 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). Trong trường hợp truyền thông ñiệp, 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. Cấp phát tài nguyên. 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ý. Mỗi dạng tài nguyên cần có cách cấp phát riêng, ví dụ cơ chế cấp phát CPU hoàn toàn khác so với cấp phát bộ nhớ. Nhờ có hệ ñiều hành, 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, ñồ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ả. Dịch vụ an ninh và bảo mật. ðối với hệ thống nhiều người dùng thường có xuất hiện 12 Giới thiệu chung yêu cầu bảo mật thông tin, 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. Tương tự như vậy, 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ớ, 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. 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. 1.4. 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 cung cấp một giao diện gọi là giao diện lập trình. 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. 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ì ñó. 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”. 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. 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++. Lúc này, 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. 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. 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. Các ví dụ khác là POSIX API dùng cho UNIX, Linux và Java API dùng cho máy ảo Java. Trên hình 1.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 HANDLE hFile, __in LPCVOID lpBuffer, __in DWORD nNumberOfBytesToWrite, __out_opt LPDWORD lpNumberOfBytesWritten, __inout_opt LPOVERLAPPED lpOverlapped ); Hình 1.2 : Hàm ñọc file trong thư viện Windows API Khi viết chương trình, 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. 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. 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. Thứ nhất, 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. Thứ hai, 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ế, API và lời gọi hệ thống khá tương tự nhau trừ một số ngoại lệ). 13 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. 15 Giới thiệu chung Trong trường hợp ña chương trì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. Trước hết, cần quyết ñịnh xem bao nhiêu chương trình ñược tải vào bộ nhớ. 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 phải phân phối CPU cho các tiến trình. 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. Ngoài ra, 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. 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−¬ng tr×nh B Chê ®îi Ch¹y Chê ®îi Ch¹y Chê ®îi Ch−¬ng tr×nh C Chê ®îi Ch¹y Chê ®îi Ch¹y Chê ®îi Toµn hÖ thèng Ch¹y A Ch¹y B Ch¹y C Chê ®îi Ch¹y A Ch¹y B Ch¹y C Chê ®îi (b) §a ch−¬ng tr×nh H×nh 1.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, ñặc biệt là khả năng vào/ra bằng ngắt và cơ chế DMA. Nếu không có cơ chế này, 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. Hiệu quả của ña chương trình do ñó sẽ bằng không. 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, song kỹ thuật này không cho phép người dùng tương tác với hệ thống. Trong các máy tính thế hệ sau, 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. Nhiều người dùng có thể nhập thông tin và lệnh từ bàn phím, kết quả sau ñó ñược ñưa trực tiếp ra màn hình. ðối với các hệ thống này, thời gian ñáp ứng, 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ỏ. 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. Do vậy, một kỹ thuật khác gọi là chia sẻ thời gian ñược sử dụng. Chia sẻ thời gian có thể coi như ña chương trình cải tiến. 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. 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, tất cả người dùng ñều có cảm giác máy tính chỉ thực hiện chương trình của mình. Như vậy, trong chế ñộ chia sẻ thời gian, CPU ñược chia sẻ giữa những người dùng khác 16 Giới thiệu chung nhau tương tác trực tiếp với hệ thống. 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. 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ớ. Các chương trình ñang thực hiện như vậy ñược gọi là tiến trình. Hệ ñiều hành chuyển quyền sử dụng CPU giữa các tiến trình khác nhau. 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. ðể ñảm bảo chia sẻ CPU, hệ ñiều hành phải có các cơ chế ñiều ñộ tiến trình phức tạp, cho phép ñồng bộ hoá, ñảm bảo liên lạc giữa các tiến trình, cũng như tránh tình trạng bế tắc. 1.6. 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á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. 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. Cách tổ chức, liên kết các thành phần xác ñịnh cấu trúc của hệ ñiều hành. 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, sau ñó xem xét một số kiểu cấu trúc thông dụng nhất. 1.6.1. 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. 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. ð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, có thể dưới dạng những bit, những byte ghi trên ñĩa, 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.v. và ñược cung cấp một số tài nguyên như thời gian CPU, bộ nhớ.v.v. (khái niệm tiến trình sẽ ñược xem xét kỹ trong các chương sau). 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. 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.v.) Giải quyết các bế tắc, 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. 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. ðây là tài nguyên quan trọng thứ hai sau CPU. 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ỉ. ðịa chỉ ñược sử dụng khi 17 Giới thiệu chung cần ñọc hoặc ghi thông tin vào bộ nhớ. Trong những hệ ñiều hành ña nhiệm, 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ớ. 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ạo ra bộ nhớ ảo và ánh xạ ñịa chỉ bộ nhớ ảo vào bộ nhớ thực, cung cấp và giải phóng bộ nhớ theo yêu cầu của các tiến trình, quản lý không gian nhớ ñã ñược cấp và không gian còn trống. c. 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. Nhờ có hệ ñiều hà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ể. 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. 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. Các thành phần này nằm trong hệ thống vào ra của hệ ñiều hành. 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. d. 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, 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, ñó là file. File là tập hợp các thông tin có liên quan ñến nhau, là nơi có thể ghi thông tin vào hoặc ñọc thông tin ra. 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. 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. Khi số lượng file lớn tới một mức nào ñó, cần có cơ chế tổ chức các file sao cho dễ tìm kiếm và sử dụng. Chẳng hạn, nếu so sánh mỗi file như một quyển sách, khi số sách tương ñối lớn như trong thư viện, người ta cần phân loại sách theo thể loại, tác giả.v.v. cho dễ tìm kiếm. Hệ ñiều hành phân chia các file thành các nhóm gọi là thư mục. Mỗi thư mục chứa các file có cùng một ñặc ñiểm nào ñó, ví dụ thư mục chứa các văn bản, thư mục chứa chương trình của cùng một hãng. 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, ghi file Ánh xạ file và thư mục sang bộ nhớ ngoài e. 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. ðiều này cho phép trao ñổi, chia sẻ thông tin giữa các máy, ñồng thời tạo khả năng xử lý phân tán. 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. ðối với những bài toán lớn, ñò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. 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. 18 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, hỗ trợ các giao thức truyền thông, quản lý việc truyền thông, cân bằng tải. f. 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), vỏ (shell). 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 - system calls - là giao diện giữa các chương trình và hệ ñiều hành). 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ó 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. Có thể lấy ví dụ các bộ dịch lệnh như command.com của DOS, bash của Linux. Trong các hệ ñiều hành hiện nay, bộ dịch lệnh thường ñược thay thế bằng các hệ giao diện ñồ hoạ. Thay vì gõ các lệnh dưới dạng văn bản, người sử dụng làm việc với các ñối tượng ñồ hoạ như cửa sổ, biểu tượng rất trực giác và dễ hiểu. Các giao diện ñồ hoạ thường ñược biết ñến là Windows Explorer cho Windows, X windows cho Linux. g. 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. ðây là thành phần không bắt buộc của hệ ñiều hành. 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, hiệu quả hơn. Chẳng hạn có các tiện ích giúp nén tệp, chép các tệp dài ra ñĩa mềm, tiện ích giúp lưu trữ dữ liệu. 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, trình dịch C của Uni ), các chương trình soạn thảo văn bản (Notepad của Windows, vi của Linux), các chương trình trò chơi. 1.6.2. Nhân của hệ ñiều hành Nhân (kernel) là phần cốt lõi, là phần thực hiện các chức năng cơ bản nhất, quan trọng nhất của hệ ñiều hành và thường xuyên ñược giữ trong bộ nhớ. Hệ ñiều hành là một hệ thống phức tạp, bao gồm nhiều thành phần, nhiều chương trình cấu thành. Vai trò của những thành phần rất khác nhau. Có những phần không thể thiếu, là cơ sở ñể cho toàn bộ hệ thống hoạt ñộng, chẳng hạn như phần chịu trách nhiệm quản lý processor, quản lý bộ nhớ. Bên cạ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. 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, xong lại không cần cho người dùng khác trong các trường hợp khác. Ví dụ, 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. 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. Từ nhận xét trên, thay vì tải toàn bộ hệ ñiều hành - có thể chiếm rất nhiều chỗ - vào và chứa thường xuyên trong bộ nhớ, người ta chỉ chọn những thành phần quan trọng không thể thiếu ñược. Các phần này tạo thành nhân của hệ ñiều hành. 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. Chế ñộ nhân và chế ñộ người dùng. 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. Chế ñộ nhân (kernel 19 Giới thiệu chung mode), còn gọi là chế ñộ ñặc quyền (privilege mode), 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. Ngược lại, 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. Việc quy ñịnh chế ñộ cụ thể phụ thuộc vào một bit ñặc biệt trong CPU. 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. Ngoài việc ñược giữ thường xuyên trong bộ nhớ, nhân của hệ ñiều hành ñược thực hiện trong chế ñộ ñặc quyền, 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. 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. Có một vấn ñề ñược ñặt ra là quyết ñịnh phần nào thuộc vào nhân, phần nào không. 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ụ. Song nhân lớn thì chiếm nhiều bộ nhớ, ảnh hưởng tới không gian nhớ dành cho các chương trình ứng dụng. Ngoài ra, tổ chức nhân lớn ảnh hưởng tới tính mềm dẻo. Việc thay ñổi, 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. Trong phần tiếp theo, ta sẽ xem xét một số cách tổ chức nhân và hệ ñiều hành. 1.6.3. 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, 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à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. 1.6.3.1. 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. 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. 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. 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, trong ñó toàn bộ chương trình tạo thành từ các chương trình con. Các chương trình con ñược dịch, sau ñó liên kết thành một chương trình lớn. Việc che dấu thông tin hoàn toàn không có. 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. Chế ñộ trình ứng trình ứng dụng dụng người dùng Chế ñộ ñặc Hệ ñiều hành quyền Hình 1.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, chương trình ứng 20 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. 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. 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. Ư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. Do có chung không gian ñịa chỉ, 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, 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. Tuy nhiên. 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. Do toàn bộ hệ ñiều hành là một khối, 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, việc xuất hiện lỗi sẽ làm cho cả hệ thống tê liệt. 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. 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. ðể 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, 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. Trong trường hợp không dùng tới có thể xoá các mô ñun khỏi nhân. Tuy là các mô ñun riêng nhưng khi ñã ñược tải vào bộ nhớ, 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ỉ. ð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. Một ví dụ cho cách tổ chức kiểu này là hệ ñiều hành Linux. các trình các trình tiện các trình ứng dụng ích 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: 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.7. Nhân của Linux có thể mở rộng nhờ các môñun. 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. 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ớ. 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á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ớ, 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. 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. 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. 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. 1.6.3.2. 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 Giới thiệu chung chồng lên nhau. Lớp trên cùng là lớp các chương trình ứng dụng, lớp dưới cùng tương ứng với phần cứng. 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. ð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. Dịch vụ này ñược cung cấp qua giao diện của lớp dưới, thường là dưới dạng các hàm mà lớp trên có thể gọi. 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. 8: CÊu tróc líp liệu, mã chương trình ñược che dấu khỏi lớp trên. 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.8). Phần lớn các lớp chạy trong chế ñộ nhân hay chế ñộ ñặc quyền. 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. Việc dò lỗi và hoàn thiện ñược thực hiện từ dưới lên trên. Trước tiên lớp dưới ñược kiểm tra ñộc lập với lớp trên. Sau khi ñã chắc chắn lớp dưới không có lỗi, ta có thể chuyển sang kiểm tra lớp trên. Do các dịch vụ lớp dưới cung cấp cho lớp trên ñã ñược kiểm tra, nên nếu xuất hiện lỗi, 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. Tuy nhiên, 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. Do mỗi lớp chỉ có thể gọi lớp nằm ngay bên dưới, 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. Ví dụ, 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. Như vậy, 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, khối quản lý bộ nhớ mới có thể sử dụng ñược dịch vụ sao chép này. 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. 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. 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. Trong quá trình truyền, mỗi lớp sẽ có các xử lý riêng của mình như thêm ñịa chỉ, tạo ra lời gọi lớp dưới thích hợp.v.v. Kết quả là thời gian phục vụ của hệ thống sẽ tăng 22 Giới thiệu chung lên so với trường hợp không phân lớp. Do các nhược ñiểm nêu trên, cấu trúc phân lớp ít ñược sử dụng trong thời gian gần ñây. Trong một số ít trường hợp, cấu trúc phân lớp cũng ñược sử dụng nhưng với số lượng lớp ít, mỗi lớp ñảm nhiệm nhiều chức năng hơn (như hệ ñiều hành OS/2). 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. 1.6.3.3. 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). Ở các hệ ñiều hành có cấu trúc kiểu này, phần nhân chỉ chứa các chức năng quan trọng nhất. 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. 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. Mỗi khi có yêu cầu cung cấp dịch vụ từ chương trình ứng dụng, chẳng hạn yêu cầu ñọc hoặc ghi tệp, yêu cầu sẽ ñược chuyển cho môñun tương ứng thực hiện. 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ụ. Hình 1.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á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. Việc thiết kế, cài ñặt, quản lý các môñun sẽ dễ dàng và mềm dẻo hơn so với cấu trúc khối. Các môñun có thể ñược xây dựng riêng biệt, sau ñó tải vào khi có nhu cầu. 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, 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. Lấy ví dụ môñun làm nhiệm vụ quản lý ñĩa và tệp. 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. trình ứng trình ứng quản lý tệp quản lý mạng dụng dụng Vi nhân Hình 1.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. 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 - 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. 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. 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 23 Giới thiệu chung khi chuyển sang tiến trình của môñun khác). 1.7. 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ụ). 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. 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 trường hợp ngoại lệ cũng ñược nhắc ñến là hệ ñiều hành MINIX. Mặc dù không có ứng dụng thực tế nhưng do kích thước nhỏ, ñơ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. Các hệ ñiều hành ví dụ sẽ ñược giới thiệu sơ lược trong phần này. ðặ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. UNIX UNIX chiếm một vị trí quan trọng trong lịch sử phát triển hệ ñiều hành. 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. 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. 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. ðâ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, 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, 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ỹ, ñồng thời cung cấp mã nguồn hệ ñiều hành này. Thực tế, 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. 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. 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). 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ệ quản lý tệp tốc ñộ cao, hỗ trợ mạng và giao thức truyền thông TCP/IP. Song song với các trường ñại học, 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, HP UNIX, IBM AIX). 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ừ khi ra ñời, UNIX ñã ñược sử dụng rộng rãi trong các nghiên cứu về hệ ñiều hành. ð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. Một số phần, 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 ñó). Thành công của UNIX ñã ñem lại cho Ken Thomson giải thưởng Turing, giải thưởng lớn trong lĩnh vực ñiện tử, tin học mà trước ñó chỉ ñược trao cho các sản phẩm phần cứng. 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, hãng AT&T nhận ra giá trị thương mại của hệ ñiều hành này. Từ phiên 24 Giới thiệu chung bản 7 của UNIX, AT&T ngừng cung cấp quyền sử dụng mã nguồn, coi ñây như bí mật của hãng. 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. Trước tình hình trên, Andrew Tanenbaum, 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, ñã xây dựng một hệ ñiều hành và ñặt tên là MINIX (mini- UNIX). MINIX ñược xây dựng với mục ñích minh họa, phục vụ ñào tạo, có thể sử dụng miễn phí và ñược cung cấp cùng mã nguồn. 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. So với UNIX, MINIX ñơn giản hơn rất nhiều. 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. Mã nguồn do ñó tương ñối ngắn và ñược viết sao cho dễ ñọc, dễ hiểu nhất. 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. 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. Cũng như UNIX, 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. Phiên bản ñầu tiên ñược viết cho IBM PC, kiến trúc thông dụng nhất hiện nay. 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, Macintosh, Sun SPARC. Ngay sau khi ra ñời, MINIX ñã thu hút ñược sự quan tâm của một số ñông sinh viên, lập trình viên và người dùng. Linux Sau khi AT&T hạn chế sửa ñổi và thương mại hoá UNIX, 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. MINIX là một sản phẩm khá thành công trong số này. Tuy nhiên, 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, 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. Năm 1991, Linus Torvalds, sinh viên người Phần lan, ñã 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ụ, có thể sử dụng rộng rãi và tương thích UNIX. Hệ ñiều hành này ñược ñặt tên là Linux. Giống như MINIX, Linux ñược cung cấp hoàn toàn miễn phí cùng với mã nguồn. 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, nhiều chức năng hơ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, hoàn chỉnh hệ ñiều hành này. 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, theo ñó Linux ñược cung cấp miễn phí, cùng mã nguồn. 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 ñó. 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. ðến nay, 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. Linux tương thích với chuẩn POSIX 1003.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, BSD 4.3. Tuy nhiên 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ế. 25 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ó 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ế, 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. Tuy nhiê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. 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), cấu trúc phân cấp của thư mục, bộ dịch lệnh. Một số chức năng khác hoàn toàn không có như bảo mật, hỗ trợ mạng, hỗ trợ nhiều tiến trình.v.v. Theo mức ñộ phát triển của máy tính các nhân, 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. Windows NT, 2000, XP, Vista, 7 Khi mới ra ñời, 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, bộ nhớ nhỏ (thường dưới 1MB), không có hoặc chỉ có ñĩa cứng dung tích bé.v.v. 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. ðây là một hệ ñiều hành ñơn giản, nhiều chức năng ñược rút gọn. Càng về sau, khả năng máy tính các nhân càng ñược mở rộng. Tốc ñộ tính toá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. MS-DOS, mặc dầu ñược cải tiến, dần dần trở nên không thích hợp. Cần có một hệ ñiều hành ñầy ñủ tính năng hơn, thích hợp với phần cứng mới. Trước tình hình ñó, hãng Microsoft ñã xây dựng họ hệ ñiều hành Windows cho máy tính cá nhân. 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. Windows 2000, XP, Vista, 7 là các thành viên tiếp theo. Phiên bản ñầu tiên của Windows NT ñược phát hành năm 1993. ðâ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, bao gồm cả các giải pháp lấy từ UNIX. So với MS-DOS, Windows NT là hệ ñiều hành ña nhiệm, hỗ trợ mạng, có các chức năng bảo mật, 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. 26 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. ðể phục vụ hoạt ñộng này, 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. Một chương trình ñang trong quá trình thực hiện ñược gọi là tiến trình. 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. 2.1. CÁC KHÁI NIỆM LIÊN QUAN ðẾN TIẾN TRÌNH 2.1.1. Tiến trình là gì Theo ñịnh nghĩa trực quan và ñơn giản nhất, tiến trình là một chương trình ñang trong quá trình thực hiện. ð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ụ, 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ử. 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, ví dụ, 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. 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, giúp cho việc quản lý của hệ ñiều hành dễ dàng hơn. Có hai ñặc ñiểm cho phép phân biệt tiến trình với chương trình. Thứ nhất, chương trình là một thực thể tĩnh, không thay ñổi theo thời gian, trong khi tiến trình là thực thể ñộng. 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), ví dụ file có ñuôi exe của Windows. Các lệnh này không thay ñổi theo thời gian. Trong khi ñó, tiến trình là thực thể ñộng bao gồm các lệnh, dữ liệu, ngăn xếp, con trỏ lệnh chỉ tới lệnh ñang ñược thực hiện. 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, 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. Ngay cả trong trường hợp hai tiến trình ñược sinh ra từ cùng một chương trình, mỗi tiến trình sẽ có con trỏ lệnh, dữ liệu, ngăn xếp khác với tiến trình kia. Thứ hai, chương trình không sở hữu tài nguyên cụ thể, 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, các cổng và thiết bị vào/ra, các file mở, thời gian CPU ñể thực hiện lệnh. Như vậy, 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. 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 ñó. Tiến trình ñược sinh ra khi chương trình ñược tải vào bộ nhớ ñể thực hiện. Trong hệ thống có hai loại tiến trình. Loại thứ nhất là tiến trình của người dùng hay tiến trình ứng dụng, ñược sinh ra khi người dùng chạy chương trình ứng dụng, ví dụ bằng cách nháy chuột ñúp vào biểu tượng chương trình như trong Windows. Loại thứ hai là các tiến trình hệ thống. ðâ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. Có thể xem các tiến trình hiện thời của Windows bằng cách gọi 27 Quản lý tiến trình “Task manager” (bấm Ctrl-Alt-Del) và vào Tab “Process”. 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. 2.1.2. Trạng thái của tiến trình Là một thực thể ñộng, tiến trình có thể thuộc những trạng thái khác nhau. Có nhiều cách phân biệt trạng thái tiến trình. Theo cách ñơn giản nhất, tiến trình thuộc một trong hai trạng thái: chạy và không chạy. 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, 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. Trên thực tế, 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, sẵn sàng, chạy, chờ ñợi, kết thúc. Ý nghĩa cụ thể năm trạng thái như sau: - Trạng thái mới khởi tạo: tiến trình ñang ñược tạo ra. - 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 chạy: lệnh của tiến trình ñược CPU thực hiện. - Trạng thái chờ ñợi: tiến trình chờ ñợi một sự kiện gì ñó xảy ra, 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. Trạng thái chờ ñợi còn ñược gọi là trạng thái bị phong tỏa (blocked). - 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. 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, 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ể. ðiều ñộ CPU Mới Sẵn Chạy Kết khởi tạo sàng thúc Ngắt Kết thúc Vào/ra hoặc