1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình nguyên lý hệ điều hành

315 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nguyên lý hệ điều hành
Tác giả Học Viện Nông Nghiệp Việt Nam Phạm Quang Dũng, Vũ Thị Lưu, Nguyễn Thị Thảo
Trường học Học viện Nông nghiệp Việt Nam
Chuyên ngành Nguyên lý hệ điều hành
Thể loại giáo trình
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 315
Dung lượng 8,31 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • Chương 1. GIỚI THIỆU CHUNG (15)
    • 1.1. TỔ CHỨC CỦA HỆ THỐNG MÁY TÍNH (15)
      • 1.1.1. Hoạt động của hệ thống máy tính (15)
      • 1.1.2. Cấu trúc bộ nhớ lưu trữ (16)
      • 1.1.3. Cấu trúc vào/ra (18)
    • 1.2. KHÁI NIỆM HỆ ĐIỀU HÀNH (20)
      • 1.2.1. Quan điểm của người sử dụng (21)
      • 1.2.2. Quan điểm hệ thống (21)
      • 1.3.3. Các mục đích của hệ điều hành (21)
    • 1.3. CẤU TRÚC HỆ ĐIỀU HÀNH (22)
    • 1.4. HOẠT ĐỘNG CỦA HỆ ĐIỀU HÀNH (24)
      • 1.4.1. Sự hoạt động ở hai chế độ (24)
      • 1.4.2. Bộ định thời (Timer) (26)
    • 1.5. QUẢN LÝ TIẾN TRÌNH (26)
    • 1.6. QUẢN LÝ BỘ NHỚ CHÍNH (27)
    • 1.7. QUẢN LÝ LƯU TRỮ (28)
      • 1.7.1. Quản lý tệp (28)
      • 1.7.2. Quản lý bộ nhớ lưu trữ lớn (29)
      • 1.7.3. Kỹ thuật sử dụng bộ nhớ đệm nhanh - Caching (29)
      • 1.7.4. Hệ thống con vào/ra (31)
    • 1.8. BẢO VỆ VÀ AN NINH (32)
  • Chương 2. CẤU TRÚC HỆ ĐIỀU HÀNH (35)
    • 2.1. CÁC DỊCH VỤ CỦA HỆ ĐIỀU HÀNH (35)
    • 2.2. GIAO DIỆN NGƯỜI SỬ DỤNG (37)
      • 2.2.1. Trình thông dịch lệnh (37)
      • 2.2.2. Giao diện đồ họa (37)
    • 2.3. LỜI GỌI HỆ THỐNG (38)
    • 2.4. CÁC CHƯƠNG TRÌNH HỆ THỐNG (43)
    • 2.5. THIẾT KẾ VÀ THỰC THI HỆ ĐIỀU HÀNH (44)
      • 2.5.1. Mục tiêu thiết kế (44)
      • 2.5.2. Sự thực thi (44)
    • 2.6. CẤU TRÚC HỆ ĐIỀU HÀNH (45)
      • 2.6.1. Cấu trúc đơn giản (45)
      • 2.6.2. Cấu trúc phân lớp (46)
      • 2.6.3. Cấu trúc vi nhân (Microkernel) (48)
      • 2.6.4. Cấu trúc module (48)
    • 2.7. MÁY ẢO (50)
      • 2.7.1. Sự thực thi (51)
      • 2.7.2. Những lợi điểm (51)
      • 2.7.3. Các ví dụ (52)
    • 2.8. SỰ PHÁT SINH HỆ THỐNG (54)
    • 2.9. KHỞI ĐỘNG HỆ THỐNG (55)
  • Chương 3. TIẾN TRÌNH (59)
    • 3.1. KHÁI NIỆM TIẾN TRÌNH (59)
      • 3.1.1. Tiến trình (60)
      • 3.1.2. Các trạng thái tiến trình (61)
      • 3.1.3. Khối điều khiển tiến trình (61)
      • 3.1.4. Luồng (62)
    • 3.2. LẬP LỊCH TIẾN TRÌNH (63)
      • 3.2.1. Các hàng đợi lập lịch (63)
      • 3.2.2. Các trình lập lịch (64)
      • 3.2.3. Chuyển ngữ cảnh (66)
    • 3.3. CÁC HOẠT ĐỘNG TRÊN TIẾN TRÌNH (66)
      • 3.3.1. Sự tạo tiến trình (66)
      • 3.3.2. Sự chấm dứt tiến trình (71)
    • 3.4. CÁC TIẾN TRÌNH HỢP TÁC (71)
      • 3.4.1. Hệ thống dùng bộ nhớ chia sẻ (73)
      • 3.4.2. Hệ thống truyền thông điệp (74)
    • 3.5. VÍ DỤ TRÊN HỆ ĐIỀU HÀNH WINDOWS XP (78)
    • 3.6. GIAO TIẾP TRONG CÁC HỆ THỐNG CLIENT-SERVER (79)
      • 3.6.1. Sockets (79)
      • 3.6.2. Lời gọi thủ tục từ xa (Remote Procedure Calls - RPC) (80)
      • 3.6.3. Triệu gọi phương thức từ xa (Remote Method Invocation - RMI) (81)
  • Chương 4. LUỒNG CHƯƠNG TRÌNH (84)
    • 4.1. TỔNG QUAN (84)
      • 4.1.1. Sự cần thiết của đa luồng (84)
      • 4.1.2. Các lợi điểm của đa luồng (85)
    • 4.2. CÁC MÔ HÌNH ĐA LUỒNG (86)
      • 4.2.1. Mô hình Many-to-One (86)
      • 4.2.2. Mô hình One-to-One (86)
      • 4.2.3. Mô hình Many-to-Many (87)
    • 4.3. CÁC VẤN ĐỀ VỀ LUỒNG (88)
      • 4.3.1. Các lời gọi hệ thống fork() và exec() (88)
      • 4.3.2. Sự hủy bỏ luồng (88)
      • 4.3.3. Xử lý tín hiệu (89)
      • 4.3.4. Thread Pools (90)
      • 4.3.5. Dữ liệu riêng của luồng (91)
      • 4.3.6. Giao tiếp kernel - thư viện luồng (91)
    • 4.4. VÍ DỤ LUỒNG TRONG CÁC HỆ ĐIỀU HÀNH (92)
      • 4.4.1. Các luồng trong Windows XP (92)
      • 4.4.2. Các luồng trong Linux (93)
  • Chương 5. LẬP LỊCH CPU (96)
    • 5.1. CÁC KHÁI NIỆM CƠ BẢN (96)
      • 5.1.1. Chu kỳ sử dụng CPU-I/O (CPU-I/O Burst Cycle) (96)
      • 5.1.2. Trình lập lịch CPU (97)
      • 5.1.3. Lập lịch có ưu tiên trước và không ưu tiên trước (98)
      • 5.1.4. Trình điều vận - Dispatcher (98)
    • 5.2. CÁC TIÊU CHUẨN LẬP LỊCH (99)
    • 5.3. CÁC GIẢI THUẬT LẬP LỊCH (100)
      • 5.3.1. Giải thuật FCFS (Đến trước - Phục vụ trước) (100)
      • 5.3.2. Giải thuật SJF (ưu tiên trước tiến trình ngắn nhất) (101)
      • 5.3.3. Giải thuật SRTF (ưu tiên trước tiến trình có thời gian ngắn hơn) (102)
      • 5.3.4. Giải thuật lập lịch theo mức ưu tiên (103)
      • 5.3.5. Giải thuật Round-Robin (RR) (104)
      • 5.3.6. Giải thuật lập lịch đa mức hàng đợi (105)
      • 5.3.7. Giải thuật lập lịch đa mức hàng đợi có hoàn ngược (106)
    • 5.4. LẬP LỊCH VỚI NHIỀU BỘ XỬ LÝ (107)
    • 5.5. VÍ DỤ LẬP LỊCH TRONG CÁC HỆ ĐIỀU HÀNH (108)
      • 5.5.1. Lập lịch trong Windows XP (108)
      • 5.5.2. Lập lịch trong Linux (110)
    • 5.6. LỰA CHỌN GIẢI THUẬT LẬP LỊCH (112)
  • Chương 6. ĐỒNG BỘ HÓA TIẾN TRÌNH (116)
    • 6.1. KIẾN THỨC CƠ SỞ (116)
    • 6.2. VẤN ĐỀ ĐOẠN GĂNG (117)
    • 6.3. GIẢI PHÁP CỦA PETERSON (118)
    • 6.4. PHẦN CỨNG ĐỒNG BỘ HÓA (120)
    • 6.5. KỸ THUẬT DÙNG CỜ BÁO (123)
      • 6.5.1. Cách sử dụng (123)
      • 6.5.2. Sự thực thi (124)
      • 6.5.3. Sự bế tắc (deadlocks) và khóa vô hạn (126)
    • 6.6. CÁC VẤN ĐỀ KINH ĐIỂN CỦA ĐỒNG BỘ HÓA (127)
      • 6.6.1. Vấn đề buffer có giới hạn (127)
      • 6.6.2. Vấn đề tiến trình đọc - tiến trình ghi (128)
      • 6.6.3. Vấn đề các triết gia ngồi ăn (130)
    • 6.7. SỰ ĐỒNG BỘ HÓA TRONG MỘT SỐ HỆ ĐIỀU HÀNH (132)
      • 6.7.1. Đồng bộ hóa trong Windows XP (132)
      • 6.7.2. Đồng bộ hóa trong Linux (133)
  • Chương 7. BẾ TẮC (136)
    • 7.1. MÔ HÌNH HỆ THỐNG (136)
    • 7.2. CÁC ĐẶC ĐIỂM CỦA BẾ TẮC (137)
      • 7.2.1. Các điều kiện cần (137)
      • 7.2.2. Đồ thị phân phối tài nguyên (138)
    • 7.3. CÁC PHƯƠNG PHÁP XỬ LÝ BẾ TẮC (140)
    • 7.4. NGĂN NGỪA BẾ TẮC (141)
      • 7.4.1. Ngăn cản lẫn nhau (141)
      • 7.4.2. Giữ và đợi (141)
      • 7.4.3. Không ưu tiên trước (142)
      • 7.4.4. Chờ đợi vòng tròn (142)
    • 7.5. TRÁNH KHỎI BẾ TẮC (142)
      • 7.5.1. Trạng thái an toàn (143)
      • 7.5.2. Giải thuật đồ thị phân phối tài nguyên (144)
      • 7.5.3. Giải thuật chủ nhà băng (145)
    • 7.6. PHÁT HIỆN BẾ TẮC (148)
      • 7.6.1. Khi mỗi loại tài nguyên là đơn thể (148)
      • 7.6.2. Khi mỗi loại tài nguyên là đa thể (149)
      • 7.6.3. Cách sử dụng giải thuật phát hiện bế tắc (150)
    • 7.7. PHỤC HỒI SAU BẾ TẮC (151)
      • 7.7.1. Sự chấm dứt tiến trình (151)
      • 7.7.2. Sự ưu tiên trước tài nguyên (152)
  • Chương 8. BỘ NHỚ CHÍNH (157)
    • 8.1. KIẾN THỨC CƠ SỞ (157)
      • 8.1.1. Phần cứng cơ bản (158)
      • 8.1.2. Liên kết địa chỉ (159)
      • 8.1.3. Không gian địa chỉ vật lý và địa chỉ logic (161)
      • 8.1.4. Nạp động (162)
      • 8.1.5. Liên kết động và các thư viện chia sẻ (163)
    • 8.2. KỸ THUẬT HOÁN ĐỔI (164)
    • 8.3. CẤP PHÁT BỘ NHỚ LIÊN TỤC (166)
      • 8.3.1. Bảo vệ và ánh xạ bộ nhớ (0)
      • 8.3.2. Cấp phát bộ nhớ (167)
      • 8.3.3. Phân mảnh (169)
    • 8.4. KỸ THUẬT PHÂN TRANG (170)
      • 8.4.1. Phương pháp cơ bản (170)
      • 8.4.2. Hỗ trợ phần cứng (174)
      • 8.4.3. Sự bảo vệ (177)
      • 8.4.4. Trang được chia sẻ (178)
    • 8.5. CẤU TRÚC BẢNG TRANG (179)
      • 8.5.1. Bảng trang phân cấp (179)
      • 8.5.2. Bảng trang được băm (182)
      • 8.5.3. Bảng trang đảo (183)
    • 8.6. KỸ THUẬT PHÂN ĐOẠN (184)
      • 8.6.1. Phương pháp cơ bản (184)
      • 8.6.2. Phần cứng (186)
    • 8.7. VÍ DỤ INTEL PENTIUM (187)
      • 8.7.1. Phân đoạn Pentium (188)
      • 8.7.2. Phân trang Pentium (189)
      • 8.7.3. Linux trên các hệ thống Pentium (190)
  • Chương 9. BỘ NHỚ ẢO (195)
    • 9.1. TỔNG QUAN (195)
    • 9.2. PHÂN TRANG THEO YÊU CẦU (198)
      • 9.2.1. Các khái niệm cơ bản (199)
      • 9.2.2. Hiệu suất của phân trang theo yêu cầu (0)
    • 9.3. THAY THẾ TRANG (0)
      • 9.3.1. Thay thế trang cơ bản (0)
      • 9.3.2. Thay thế trang FIFO (0)
      • 9.3.3. Thay thế trang tối ưu (0)
      • 9.3.4. Thay thế trang không được dùng trong một khoảng thời gian lâu nhất (0)
      • 9.3.5. Thay thế trang xấp xỉ LRU (0)
      • 9.3.6. Thay thế trang dựa trên cơ sở đếm (0)
    • 9.4. CẤP PHÁT KHUNG (0)
      • 9.4.1. Số lượng khung tối thiểu (0)
      • 9.4.2. Thuật toán cấp phát (0)
      • 9.4.3. Cấp phát toàn cục và cục bộ (0)
    • 9.5. SỰ TRÌ TRỆ (0)
      • 9.5.1. Nguyên nhân của sự trì trệ (0)
      • 9.5.2. Tần số lỗi trang (0)
    • 9.6. VÍ DỤ VỀ CÁC HỆ ĐIỀU HÀNH (0)
      • 9.6.1. Windows XP (0)
      • 9.6.2. Solaris (0)
  • Chương 10. QUẢN LÝ VÀO/RA VÀ LẬP LỊCH ĐĨA (0)
    • 10.1. CÁC THIẾT BỊ I/O (0)
    • 10.2. TỔ CHỨC CHỨC NĂNG I/O (0)
      • 10.2.1. Sự phát triển của các chức năng I/O (0)
      • 10.2.2. Truy nhập bộ nhớ trực tiếp, DMA (0)
    • 10.3. CÁC VẤN ĐỀ THIẾT KẾ HỆ ĐIỀU HÀNH (0)
    • 10.4. KỸ THUẬT ĐỆM VÀO/RA (0)
      • 10.4.1. Đệm đơn (0)
      • 10.4.2. Đệm đôi (0)
      • 10.4.3. Đệm vòng (0)
      • 10.4.4. Công dụng của đệm (0)
    • 10.5. LẬP LỊCH ĐĨA (0)
      • 10.5.1. Các thông số hiệu suất đĩa (0)
      • 10.5.2. Phương pháp lập lịch đĩa (0)
    • 10.6. RAID (0)
      • 10.6.1. RAID Level 0 (0)
      • 10.6.2. RAID Level 1 (0)
      • 10.6.3. RAID Level 2 (0)
      • 10.6.4. RAID Level 3 (0)
      • 10.6.5. RAID Level 4 (0)
      • 10.6.6. RAID Level 5 (0)
      • 10.6.7. RAID Level 6 (0)
    • 10.7. DISK CACHE (0)
      • 10.7.1. Xem xét thiết kế (0)
      • 10.7.2. Vấn đề hiệu suất (0)
    • 10.8. UNIX SVR4 I/O (0)
    • 10.9. LINUX I/O (0)
      • 10.9.1. Lập lịch đĩa (0)
      • 10.9.2. Linux Page Cache (0)
    • 10.10. WINDOWS I/O (0)
      • 10.10.1. Đặc điểm của I/O cơ bản (0)
      • 10.10.2. I/O không đồng bộ và đồng bộ (0)
  • Chương 11. QUẢN LÝ TỆP TIN (0)
    • 11.1. TỔNG QUAN (0)
      • 11.1.1. Một số định nghĩa cơ bản (0)
      • 11.1.2. Các chức năng quản lý tệp tin (0)
    • 11.2. TRUY CẬP VÀ TỔ CHỨC TỆP TIN (0)
      • 11.2.1. Tệp Pile (0)
      • 11.2.2. Tệp tuần tự (0)
      • 11.2.3. Tệp tuần tự được lập chỉ mục (0)
      • 11.2.4. Tệp được lập chỉ mục (0)
      • 11.2.5. Tệp trực tiếp hoặc tệp băm (Hash) (0)
    • 11.3. B-TREE (0)
    • 11.4. THƯ MỤC TỆP TIN (0)
      • 11.4.1. Cấu trúc (0)
      • 11.4.2. Đặt tên (0)
      • 11.4.3. Quyền truy cập (0)
      • 11.4.4. Truy cập đồng thời (0)
    • 11.5. BLOCKING RECORD (BẢN GHI THEO KHỐI) (0)
    • 11.6. QUẢN LÝ BỘ LƯU TRỮ THỨ CẤP (0)
      • 11.6.1. Cấp phát trước và cấp phát động (0)
      • 11.6.2. Kích thước portion (0)
      • 11.6.3. Phương pháp cấp phát tệp tin (0)
    • 11.7. AN TOÀN HỆ THỐNG TỆP TIN (0)
    • 11.8. QUẢN LÝ TỆP UNIX (0)
      • 11.8.1. Inodes (0)
      • 11.8.2. Cấp phát tệp (0)
      • 11.8.3. Thư mục (0)
    • 11.9. HỆ THỐNG TỆP TIN WINDOWS (0)
  • Tài liệu tham khảo (0)

Nội dung

Phần A: Tổng quan về hệ thống máy tính và hệ điều hành Chương 1: Giới thiệu chung - Chương này giới thiệu tổng quát về các thành phần chính của một hệ điều hành và tổ chức cơ bản của h

Trang 1

HỌC VIỆN NÔNG NGHIỆP VIỆT NAM

PHẠM QUANG DŨNG, VŨ THỊ LƯU, NGUYỄN THỊ THẢO

Trang 3

LỜI NÓI ĐẦU

Cuốn giáo trình Nguyên lý hệ điều hành này được biên soạn bởi nhóm tác giả TS Phạm Quang Dũng (viết chương 1 đến chương 7), ThS Nguyễn Thị Thảo (chương 8 và chương 9), ThS Vũ Thị Lưu (chương 10 và chương 11) - giảng viên Khoa Công nghệ thông tin, Học viện Nông nghiệp Việt Nam Giáo trình bao gồm những kiến thức cơ bản

về nguyên lý hoạt động của hệ điều hành Nội dung giáo trình được tham khảo và biên soạn chọn lọc từ những cuốn sách được sử dụng phổ biến trong các trường đại học nổi tiếng trên thế giới

Hệ điều hành là một phần quan trọng của bất kỳ hệ thống máy tính nào Tương tự như vậy, khóa học về hệ điều hành là một phần quan trọng của bất kỳ chương trình đào tạo khoa học máy tính nào Lĩnh vực này đang thay đổi nhanh chóng vì ngày nay các máy tính phổ biến trong mọi lĩnh vực của cuộc sống hàng ngày, từ dạng thiết bị nhúng trong ô tô đến những công cụ lập kế hoạch phức tạp nhất cho chính phủ và các công ty đa quốc gia Tuy nhiên, các khái niệm cơ bản vẫn khá rõ ràng và được chúng tôi đề cập trong cuốn sách này Giáo trình này được dùng để làm tài liệu giảng dạy và học tập chính cho học phần Nguyên lý hệ điều hành gồm 3 tín chỉ trong chương trình đào tạo các chuyên ngành thuộc khoa Công nghệ thông tin, Học viện Nông nghiệp Việt Nam

Giáo trình chia thành 3 phần, mỗi phần bao gồm nhiều chương, mỗi chương sẽ thảo luận về một khía cạnh của hệ điều hành được sắp xếp theo thứ tự logic về kiến thức

Phần A: Tổng quan về hệ thống máy tính và hệ điều hành

Chương 1: Giới thiệu chung - Chương này giới thiệu tổng quát về các thành phần

chính của một hệ điều hành và tổ chức cơ bản của hệ thống máy tính: (1) Tổ chức của hệ thống máy tính; (2) Khái niệm hệ điều hành; (3) Cấu trúc hệ điều hành; (4) Hoạt động của hệ điều hành; (5) Quản lý tiến trình; (6) Quản lý bộ nhớ chính; (7) Quản lý lưu trữ; (8) Bảo vệ và an ninh

Chương 2: Cấu trúc hệ điều hành - Chương này đề cập đến các kiến thức nền tảng

về cấu trúc hệ điệu hành: (1) Các dịch vụ của hệ điều hành; (2) Giao diện người sử dụng; (3) Lời gọi hệ thống; (4) Các chương trình hệ thống; (5) Thiết kế và thực thi hệ điều hành; (6) Cấu trúc hệ điều hành, (7) Máy ảo; (8) Sự phát sinh hệ điều hành; (9) Khởi động hệ thống

Phần B: Quản lý tiến trình

Chương 3: Tiến trình - Chương này đề cập đến kiến thức nền tảng về các vấn đề

liên quan đến tiến trình: (1) Khái niệm tiến trình; (2) Lập lịch tiến trình; (3) Các hoạt động trên tiến trình; (4) Các tiến trình hợp tác; (5) Các ví dụ về các hệ thống IPC; (6) Giao tiếp trong các hệ thống client-server

Chương 4: Luồng - Chương này sẽ giới thiệu nhiều khái niệm liên quan với các hệ

thống máy tính đa luồng: (1) Tổng quan về luồng; (2) Các mô hình đa luồng; (3) Các vấn

đề về luồng; (4) Luồng trong các hệ điều hành

Trang 4

Chương 5: Lập lịch CPU - Chương này giới thiệu các khái niệm lập lịch cơ bản,

giới thiệu và mô tả các giải thuật lập lịch CPU khác nhau: (1) Các khái niệm cơ bản; (2)

Các tiêu chuẩn lập lịch; (3) Các giải thuật lập lịch; (4) Lập lịch với nhiều bộ xử lý; (5) Ví

dụ lập lịch trong các hệ điều hành; (6) Lựa chọn giải thuật lập lịch

Chương 6: Đồng bộ hóa tiến trình - Chương này thảo luận các cơ chế để đảm bảo

rằng thứ tự thực hiện của các tiến trình hợp tác có khả năng chia sẻ không gian địa chỉ

logic đồng thời vẫn duy trì sự ổn định dữ liệu Nội dung của chương bao gồm: (1) Kiến

thức cơ sở; (2) Vấn đề đoạn găng; (3) Giải pháp của Peterson; (4) Phần cứng đồng bộ

hóa; (5) Kỹ thuật dùng cờ báo; (6) Các vấn đề kinh điển của đồng bộ hóa; (7) Sự đồng bộ

hóa trong một số hệ điều hành

Chương 7: Bế tắc (deadlock) - Chương này miêu tả bế tắc và các phương pháp mà hệ

điều hành có thể sử dụng để ngăn ngừa hoặc đối mặt với bế tắc Nội dung của chương bao

gồm: (1) Mô hình hệ thống; (2) Các đặc điểm của bế tắc; (3) Các phương pháp xử lý bế tắc;

(4) Ngăn ngừa bế tắc; (5) Tránh khỏi bế tắc; (6) Phát hiện bế tắc; (7) Phục hồi sau bế tắc

Phần C: Quản lý bộ nhớ

Chương 8: Bộ nhớ chính - Chương này đề cập đến nhiều cách quản lý bộ nhớ khác

nhau và nghiên cứu các kỹ thuật quản lý bộ nhớ phân trang, phân đoạn Nội dung của chương

bao gồm các đề mục: (1) Kiến thức cơ sở; (2) Kỹ thuật hoán đổi; (3) Cấp phát bộ nhớ liên

tục; (4) Phân trang; (5) Phân đoạn; (6) Cấu trúc bảng trang; (7) Ví dụ Intel Pentium

Chương 9: Bộ nhớ ảo - Chương này thảo luận về bộ nhớ ảo trong dạng phân trang

theo yêu cầu và xem xét độ phức tạp và chi phí Nội dung của chương bao gồm: (1) Tổng

quan bộ nhớ ảo; (2) Phân trang theo yêu cầu; (3) Thay thế trang; (4) Cấp phát khung; (5)

Sự trì trệ; (6) Ví dụ về các hệ điều hành

Chương 10: Quản lý vào/ra (I/O) và lập lịch đĩa - Chương này tóm tắt các thiết bị

và việc tổ chức các chức năng I/O trên máy tính Nội dung kiến thức của chương đề cập

đến: (1) Các thiết bị I/O; (2) Tổ chức chức năng I/O; (3) Các vấn đề thiết kế hệ điều hành;

(4) Kỹ thuật đệm vào/ra (I/O); (5) Lập lịch đĩa; (6) Raid; (7) Disk cache; (8) I/O Unix

SVR4; (9) Linux I/O; (10) I/O Windows

Chương 11: Quản lý tệp tin - Chương này mô tả được các khái niệm và các kỹ thuật

cơ bản về tổ chức và truy cập tệp và hệ thống tệp Nội dung của chương bao gồm: (1)

Tổng quan về quản lý tệp tin; (2) Truy cập và tổ chức tệp tin; (3) B-Tree; (4) Thư mục

tệp tin; (5) Blocking record (bản ghi theo khối); (6) Quản lý bộ lưu trữ thứ cấp; (7) An

toàn hệ thống tệp tin; (8) Quản lý tệp Unix; (9) Hệ thống tệp tin Windows

Nhóm tác giả đã có rất nhiều cố gắng trong công tác biên soạn nhưng khó tránh

khỏi thiếu sót Chúng tôi xin trân trọng tiếp thu những ý kiến đóng góp của các quý độc

giả để hoàn thiện giáo trình trong những lần tái bản

Nhóm tác giả

Trang 5

MỤC LỤC

Lời nói đầu iii

Danh mục chữ viết tắt xiii

Phần A TỔNG QUAN VỀ HỆ THỐNG MÁY TÍNH VÀ HỆ ĐIỀU HÀNH 1

Chương 1 GIỚI THIỆU CHUNG 1

1.1 TỔ CHỨC CỦA HỆ THỐNG MÁY TÍNH 1

1.1.1 Hoạt động của hệ thống máy tính 1

1.1.2 Cấu trúc bộ nhớ lưu trữ 2

1.1.3 Cấu trúc vào/ra 4

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

1.2.1 Quan điểm của người sử dụng 7

1.2.2 Quan điểm hệ thống 7

1.3.3 Các mục đích của hệ điều hành 7

1.3 CẤU TRÚC HỆ ĐIỀU HÀNH 8

1.4 HOẠT ĐỘNG CỦA HỆ ĐIỀU HÀNH 10

1.4.1 Sự hoạt động ở hai chế độ 10

1.4.2 Bộ định thời (Timer) 12

1.5 QUẢN LÝ TIẾN TRÌNH 12

1.6 QUẢN LÝ BỘ NHỚ CHÍNH 13

1.7 QUẢN LÝ LƯU TRỮ 14

1.7.1 Quản lý tệp 14

1.7.2 Quản lý bộ nhớ lưu trữ lớn 15

1.7.3 Kỹ thuật sử dụng bộ nhớ đệm nhanh - Caching 15

1.7.4 Hệ thống con vào/ra 17

1.8 BẢO VỆ VÀ AN NINH 18

TÓM TẮT 19

CÂU HỎI ÔN TẬP 19

Chương 2 CẤU TRÚC HỆ ĐIỀU HÀNH 21

2.1 CÁC DỊCH VỤ CỦA HỆ ĐIỀU HÀNH 21

2.2 GIAO DIỆN NGƯỜI SỬ DỤNG 23

2.2.1 Trình thông dịch lệnh 23

2.2.2 Giao diện đồ họa 23

2.3 LỜI GỌI HỆ THỐNG 24

Trang 6

2.4 CÁC CHƯƠNG TRÌNH HỆ THỐNG 29

2.5 THIẾT KẾ VÀ THỰC THI HỆ ĐIỀU HÀNH 30

2.5.1 Mục tiêu thiết kế 30

2.5.2 Sự thực thi 30

2.6 CẤU TRÚC HỆ ĐIỀU HÀNH 31

2.6.1 Cấu trúc đơn giản 31

2.6.2 Cấu trúc phân lớp 32

2.6.3 Cấu trúc vi nhân (Microkernel) 34

2.6.4 Cấu trúc module 34

2.7 MÁY ẢO 36

2.7.1 Sự thực thi 37

2.7.2 Những lợi điểm 37

2.7.3 Các ví dụ 38

2.8 SỰ PHÁT SINH HỆ THỐNG 40

2.9 KHỞI ĐỘNG HỆ THỐNG 41

TÓM TẮT 42

CÂU HỎI ÔN TẬP 42

Phần B QUẢN LÝ TIẾN TRÌNH 45

Chương 3 TIẾN TRÌNH 45

3.1 KHÁI NIỆM TIẾN TRÌNH 45

3.1.1 Tiến trình 46

3.1.2 Các trạng thái tiến trình 47

3.1.3 Khối điều khiển tiến trình 47

3.1.4 Luồng 48

3.2 LẬP LỊCH TIẾN TRÌNH 49

3.2.1 Các hàng đợi lập lịch 49

3.2.2 Các trình lập lịch 50

3.2.3 Chuyển ngữ cảnh 52

3.3 CÁC HOẠT ĐỘNG TRÊN TIẾN TRÌNH 52

3.3.1 Sự tạo tiến trình 52

3.3.2 Sự chấm dứt tiến trình 57

3.4 CÁC TIẾN TRÌNH HỢP TÁC 57

3.4.1 Hệ thống dùng bộ nhớ chia sẻ 59

3.4.2 Hệ thống truyền thông điệp 60

3.5 VÍ DỤ TRÊN HỆ ĐIỀU HÀNH WINDOWS XP 64

Trang 7

3.6 GIAO TIẾP TRONG CÁC HỆ THỐNG CLIENT-SERVER 65

3.6.1 Sockets 65

3.6.2 Lời gọi thủ tục từ xa (Remote Procedure Calls - RPC) 66

3.6.3 Triệu gọi phương thức từ xa (Remote Method Invocation - RMI) 67

TÓM TẮT 68

CÂU HỎI ÔN TẬP 68

Chương 4 LUỒNG CHƯƠNG TRÌNH 70

4.1 TỔNG QUAN 70

4.1.1 Sự cần thiết của đa luồng 70

4.1.2 Các lợi điểm của đa luồng 71

4.2 CÁC MÔ HÌNH ĐA LUỒNG 72

4.2.1 Mô hình Many-to-One 72

4.2.2 Mô hình One-to-One 72

4.2.3 Mô hình Many-to-Many 73

4.3 CÁC VẤN ĐỀ VỀ LUỒNG 74

4.3.1 Các lời gọi hệ thống fork() và exec() 74

4.3.2 Sự hủy bỏ luồng 74

4.3.3 Xử lý tín hiệu 75

4.3.4 Thread Pools 76

4.3.5 Dữ liệu riêng của luồng 77

4.3.6 Giao tiếp kernel - thư viện luồng 77

4.4 VÍ DỤ LUỒNG TRONG CÁC HỆ ĐIỀU HÀNH 78

4.4.1 Các luồng trong Windows XP 78

4.4.2 Các luồng trong Linux 79

TÓM TẮT 80

CÂU HỎI ÔN TẬP 80

Chương 5 LẬP LỊCH CPU 82

5.1 CÁC KHÁI NIỆM CƠ BẢN 82

5.1.1 Chu kỳ sử dụng CPU-I/O (CPU-I/O Burst Cycle) 82

5.1.2 Trình lập lịch CPU 83

5.1.3 Lập lịch có ưu tiên trước và không ưu tiên trước 84

5.1.4 Trình điều vận - Dispatcher 84

5.2 CÁC TIÊU CHUẨN LẬP LỊCH 85

5.3 CÁC GIẢI THUẬT LẬP LỊCH 86

5.3.1 Giải thuật FCFS (Đến trước - Phục vụ trước) 86

5.3.2 Giải thuật SJF (ưu tiên trước tiến trình ngắn nhất) 87

Trang 8

5.3.3 Giải thuật SRTF (ưu tiên trước tiến trình có thời gian ngắn hơn) 88

5.3.4 Giải thuật lập lịch theo mức ưu tiên 89

5.3.5 Giải thuật Round-Robin (RR) 90

5.3.6 Giải thuật lập lịch đa mức hàng đợi 91

5.3.7 Giải thuật lập lịch đa mức hàng đợi có hoàn ngược 92

5.4 LẬP LỊCH VỚI NHIỀU BỘ XỬ LÝ 93

5.5 VÍ DỤ LẬP LỊCH TRONG CÁC HỆ ĐIỀU HÀNH 94

5.5.1 Lập lịch trong Windows XP 94

5.5.2 Lập lịch trong Linux 96

5.6 LỰA CHỌN GIẢI THUẬT LẬP LỊCH 98

TÓM TẮT 98

CÂU HỎI ÔN TẬP 99

Chương 6 ĐỒNG BỘ HÓA TIẾN TRÌNH 102

6.1 KIẾN THỨC CƠ SỞ 102

6.2 VẤN ĐỀ ĐOẠN GĂNG 103

6.3 GIẢI PHÁP CỦA PETERSON 104

6.4 PHẦN CỨNG ĐỒNG BỘ HÓA 106

6.5 KỸ THUẬT DÙNG CỜ BÁO 109

6.5.1 Cách sử dụng 109

6.5.2 Sự thực thi 110

6.5.3 Sự bế tắc (deadlocks) và khóa vô hạn 112

6.6 CÁC VẤN ĐỀ KINH ĐIỂN CỦA ĐỒNG BỘ HÓA 113

6.6.1 Vấn đề buffer có giới hạn 113

6.6.2 Vấn đề tiến trình đọc - tiến trình ghi 114

6.6.3 Vấn đề các triết gia ngồi ăn 116

6.7 SỰ ĐỒNG BỘ HÓA TRONG MỘT SỐ HỆ ĐIỀU HÀNH 118

6.7.1 Đồng bộ hóa trong Windows XP 118

6.7.2 Đồng bộ hóa trong Linux 119

TÓM TẮT 120

CÂU HỎI ÔN TẬP 120

Chương 7 BẾ TẮC 122

7.1 MÔ HÌNH HỆ THỐNG 122

7.2 CÁC ĐẶC ĐIỂM CỦA BẾ TẮC 123

7.2.1 Các điều kiện cần 123

7.2.2 Đồ thị phân phối tài nguyên 124

Trang 9

7.3 CÁC PHƯƠNG PHÁP XỬ LÝ BẾ TẮC 126

7.4 NGĂN NGỪA BẾ TẮC 127

7.4.1 Ngăn cản lẫn nhau 127

7.4.2 Giữ và đợi 127

7.4.3 Không ưu tiên trước 128

7.4.4 Chờ đợi vòng tròn 128

7.5 TRÁNH KHỎI BẾ TẮC 128

7.5.1 Trạng thái an toàn 129

7.5.2 Giải thuật đồ thị phân phối tài nguyên 130

7.5.3 Giải thuật chủ nhà băng 131

7.6 PHÁT HIỆN BẾ TẮC 134

7.6.1 Khi mỗi loại tài nguyên là đơn thể 134

7.6.2 Khi mỗi loại tài nguyên là đa thể 135

7.6.3 Cách sử dụng giải thuật phát hiện bế tắc 136

7.7 PHỤC HỒI SAU BẾ TẮC 137

7.7.1 Sự chấm dứt tiến trình 137

7.7.2 Sự ưu tiên trước tài nguyên 138

TÓM TẮT 138

CÂU HỎI ÔN TẬP 139

Phần C QUẢN LÝ BỘ NHỚ 143

Chương 8 BỘ NHỚ CHÍNH 143

8.1 KIẾN THỨC CƠ SỞ 143

8.1.1 Phần cứng cơ bản 144

8.1.2 Liên kết địa chỉ 145

8.1.3 Không gian địa chỉ vật lý và địa chỉ logic 147

8.1.4 Nạp động 148

8.1.5 Liên kết động và các thư viện chia sẻ 149

8.2 KỸ THUẬT HOÁN ĐỔI 150

8.3 CẤP PHÁT BỘ NHỚ LIÊN TỤC 152

8.3.1 Bảo vệ và ánh xạ bộ nhớ 152

8.3.2 Cấp phát bộ nhớ 153

8.3.3 Phân mảnh 155

8.4 KỸ THUẬT PHÂN TRANG 156

8.4.1 Phương pháp cơ bản 156

8.4.2 Hỗ trợ phần cứng 160

8.4.3 Sự bảo vệ 163

Trang 10

8.4.4 Trang được chia sẻ 164

8.5 CẤU TRÚC BẢNG TRANG 165

8.5.1 Bảng trang phân cấp 165

8.5.2 Bảng trang được băm 168

8.5.3 Bảng trang đảo 169

8.6 KỸ THUẬT PHÂN ĐOẠN 170

8.6.1 Phương pháp cơ bản 170

8.6.2 Phần cứng 172

8.7 VÍ DỤ INTEL PENTIUM 173

8.7.1 Phân đoạn Pentium 174

8.7.2 Phân trang Pentium 175

8.7.3 Linux trên các hệ thống Pentium 176

TÓM TẮT 178

CÂU HỎI ÔN TẬP 178

Chương 9 BỘ NHỚ ẢO 181

9.1 TỔNG QUAN 181

9.2 PHÂN TRANG THEO YÊU CẦU 184

9.2.1 Các khái niệm cơ bản 185

9.2.2 Hiệu suất của phân trang theo yêu cầu 188

9.3 THAY THẾ TRANG 191

9.3.1 Thay thế trang cơ bản 192

9.3.2 Thay thế trang FIFO 195

9.3.3 Thay thế trang tối ưu 197

9.3.4 Thay thế trang không được dùng trong một khoảng thời gian lâu nhất 197

9.3.5 Thay thế trang xấp xỉ LRU 199

9.3.6 Thay thế trang dựa trên cơ sở đếm 202

9.4 CẤP PHÁT KHUNG 202

9.4.1 Số lượng khung tối thiểu 203

9.4.2 Thuật toán cấp phát 204

9.4.3 Cấp phát toàn cục và cục bộ 205

9.5 SỰ TRÌ TRỆ 205

9.5.1 Nguyên nhân của sự trì trệ 206

9.5.2 Tần số lỗi trang 207

9.6 VÍ DỤ VỀ CÁC HỆ ĐIỀU HÀNH 208

9.6.1 Windows XP 208

9.6.2 Solaris 208

Trang 11

TÓM TẮT 210

CÂU HỎI ÔN TẬP 210

Chương 10 QUẢN LÝ VÀO/RA VÀ LẬP LỊCH ĐĨA 214

10.1 CÁC THIẾT BỊ I/O 214

10.2 TỔ CHỨC CHỨC NĂNG I/O 215

10.2.1 Sự phát triển của các chức năng I/O 216

10.2.2 Truy nhập bộ nhớ trực tiếp, DMA 217

10.3 CÁC VẤN ĐỀ THIẾT KẾ HỆ ĐIỀU HÀNH 219

10.4 KỸ THUẬT ĐỆM VÀO/RA 221

10.4.1 Đệm đơn 222

10.4.2 Đệm đôi 223

10.4.3 Đệm vòng 224

10.4.4 Công dụng của đệm 224

10.5 LẬP LỊCH ĐĨA 224

10.5.1 Các thông số hiệu suất đĩa 224

10.5.2 Phương pháp lập lịch đĩa 227

10.6 RAID 231

10.6.1 RAID Level 0 231

10.6.2 RAID Level 1 233

10.6.3 RAID Level 2 233

10.6.4 RAID Level 3 234

10.6.5 RAID Level 4 234

10.6.6 RAID Level 5 234

10.6.7 RAID Level 6 235

10.7 DISK CACHE 236

10.7.1 Xem xét thiết kế 237

10.7.2 Vấn đề hiệu suất 239

10.8 UNIX SVR4I/O 240

10.9 LINUX I/O 242

10.9.1 Lập lịch đĩa 243

10.9.2 Linux Page Cache 245

10.10 WINDOWS I/O 246

10.10.1 Đặc điểm của I/O cơ bản 246

10.10.2 I/O không đồng bộ và đồng bộ 246

TÓM TẮT 248

CÂU HỎI ÔN TẬP 248

Trang 12

BÀI TẬP 249

Chương 11 QUẢN LÝ TỆP TIN 250

11.1 TỔNG QUAN 250

11.1.1 Một số định nghĩa cơ bản 250

11.1.2 Các chức năng quản lý tệp tin 253

11.2 TRUY CẬP VÀ TỔ CHỨC TỆP TIN 255

11.2.1 Tệp Pile 256

11.2.2 Tệp tuần tự 257

11.2.3 Tệp tuần tự được lập chỉ mục 257

11.2.4 Tệp được lập chỉ mục 259

11.2.5 Tệp trực tiếp hoặc tệp băm (Hash) 259

11.3 B-TREE 259

11.4 THƯ MỤC TỆP TIN 262

11.4.1 Cấu trúc 263

11.4.2 Đặt tên 265

11.4.3 Quyền truy cập 266

11.4.4 Truy cập đồng thời 268

11.5 BLOCKING RECORD (BẢN GHI THEO KHỐI) 268

11.6 QUẢN LÝ BỘ LƯU TRỮ THỨ CẤP 270

11.6.1 Cấp phát trước và cấp phát động 270

11.6.2 Kích thước portion 271

11.6.3 Phương pháp cấp phát tệp tin 272

11.7 AN TOÀN HỆ THỐNG TỆP TIN 278

11.8 QUẢN LÝ TỆP UNIX 280

11.8.1 Inodes 281

11.8.2 Cấp phát tệp 282

11.8.3 Thư mục 283

11.9 HỆ THỐNG TỆP TIN WINDOWS 290

TÓM TẮT 295

CÂU HỎI ÔN TẬP 296

BÀI TẬP 296

Thông tin 298

Bảng thuật ngữ 298

Tài liệu tham khảo 300

Trang 13

DANH MỤC CHỮ VIẾT TẮT

EPPROM Electrically Erasable Programmable Read-Only

Memory ETHREAD Executive Thread Block - Khối luồng thực hiện

KTHREAD Kernel Thread Block - Khối luồng Kernel

Trang 14

MFU Most frequently used

OPT or MIN Optimal page-replacement algorithm

Trang 15

Phần A TỔNG QUAN

VỀ HỆ THỐNG MÁY TÍNH VÀ HỆ ĐIỀU HÀNH

Chương 1

GIỚI THIỆU CHUNG

Hệ điều hành (operating system) là một chương trình hoạt động như một lớp trung gian giữa người sử dụng và phần cứng máy tính Mục tiêu của hệ điều hành là cung cấp một môi trường cho người sử dụng thực hiện các chương trình theo cách thuận tiện và hiệu quả Vì hệ điều hành rất lớn và phức tạp, nó phải được xây dựng từng bước một Trước khi trình bày về các thành phần chính một hệ điều hành, chương này sẽ tổng quát

tổ chức cơ bản của hệ thống máy tính

1.1 TỔ CHỨC CỦA HỆ THỐNG MÁY TÍNH

1.1.1 Hoạt động của hệ thống máy tính

Một hệ thống máy tính đa năng hiện đại chứa một hoặc nhiều CPU và các bộ điều

khiển thiết bị (device controller) được kết nối với nhau qua một đường bus chung cho

phép truy nhập tới bộ nhớ chia sẻ Mỗi bộ điều khiển này phụ trách một loại thiết bị (ví dụ: các ổ đĩa, thiết bị audio và video) CPU và các bộ điều khiển thiết bị có thể thực hiện đồng thời, cạnh tranh nhau bộ nhớ Để đảm bảo sự truy nhập có thứ tự đến bộ nhớ chia

sẻ, hệ điều hành sử dụng bộ điều khiển có chức năng đồng bộ hóa sự truy nhập bộ nhớ

Hình 1.1 Mô hình hệ thống máy tính hiện đại

Để một máy tính bắt đầu chạy khi được bật hoặc khởi động lại, cần có một chương

trình khởi tạo để chạy, được gọi là chương trình mồi - bootstrap program Thông

Trang 16

thường, chương trình mồi được chứa trong bộ nhớ chỉ đọc (ROM) hoặc bộ nhớ chỉ đọc lập trình được và xóa được (EPPROM) Nó khởi tạo tất cả hệ thống, từ các thanh ghi trong CPU đến các bộ điều khiển thiết bị và nội dung bộ nhớ Chương trình mồi phải biết cách nạp hệ điều hành và bắt đầu thực hiện hệ thống như thế nào Nó phải định vị và nạp nhân hệ điều hành (kernel) vào bộ nhớ Sau đó hệ điều hành bắt đầu thực hiện tiến trình đầu tiên, ví dụ như "init", rồi đợi sự kiện nào đó xuất hiện

Sự xuất hiện của một sự kiện thường được báo hiệu bởi một ngắt từ phần cứng hoặc

phần mềm Phần cứng có thể gây một ngắt bằng cách gửi một tín hiệu lên bus hệ thống đến CPU Phần mềm có thể gây một ngắt bằng cách thực hiện một hoạt động đặc biệt

được gọi là lời gọi hệ thống (system call, monitor call)

Các hệ điều hành hiện đại được điều khiển bằng ngắt Nếu không có tiến trình nào

để thực hiện, không có thiết bị vào/ra nào để phục vụ, không có user nào để đáp ứng, hệ điều hành sẽ yên lặng đợi một điều gì đó xảy ra Các sự kiện luôn được báo hiệu bởi sự

xuất hiện của một ngắt hay một bẫy (trap) Trap (hay exception) là một phần mềm tạo

ngắt được gây ra bởi một lỗi (ví dụ: lỗi chia cho 0, lỗi truy nhập bộ nhớ không hợp lệ) hoặc một yêu cầu ngắt từ chương trình của người sử dụng Đối với mỗi loại ngắt, các đoạn mã riêng biệt trong hệ điều hành xác định hành động nào cần được thực hiện Một thường trình dịch vụ ngắt được sử dụng để chịu trách nhiệm giải quyết các ngắt

Khi CPU bị ngắt, nó dừng các công việc đang làm và lập tức chuyển đến một vị trí xác định để tiếp tục công việc của nó Vị trí đó thường chứa địa chỉ bắt đầu của nơi mà thường trình dịch vụ ngắt được định vị Thường trình dịch vụ ngắt thực hiện; khi kết thúc, CPU lại tiếp tục các tính toán bị ngắt

1.1.2 Cấu trúc bộ nhớ lưu trữ

Các chương trình máy tính để được thực hiện phải được đưa vào bộ nhớ chính, còn

được gọi là bộ nhớ truy nhập ngẫu nhiên (random access memory - RAM) Bộ nhớ

chính là vùng bộ nhớ lớn duy nhất (đến hàng GB) mà CPU có thể truy nhập trực tiếp Nó

được làm bởi một công nghệ bán dẫn gọi là dynamic RAM (DRAM), công nghệ hình

thành mảng các từ nhớ (memory word), mỗi word đều có địa chỉ Sự tương tác được thực

hiện thông qua một chuỗi các lệnh load hoặc store đến các địa chỉ bộ nhớ xác định Lệnh load chuyển một word từ bộ nhớ chính đến một thanh ghi trong CPU, còn lệnh store chuyển nội dung của một thanh ghi đến bộ nhớ chính Ngoài các lệnh load và store rõ

ràng, CPU cũng tự động nạp các lệnh từ bộ nhớ chính để thực hiện

Trên một hệ thống có kiến trúc von Neumann, một vòng lặp thực hiện lệnh điển hình đầu tiên sẽ tìm và nạp lệnh từ bộ nhớ và chứa lệnh đó trong thanh ghi lệnh Tiếp theo lệnh sẽ được giải mã và có thể nạp các toán hạng từ bộ nhớ và chứa trong thanh ghi nào

đó trong CPU Sau khi lệnh được thực hiện, kết quả có thể được đưa ra lưu trong bộ nhớ Theo lý tưởng, chương trình và dữ liệu được mong muốn lưu trữ ổn định trong bộ nhớ chính Nhưng ý tưởng này không thể thực hiện được vì 2 lý do:

Trang 17

- Bộ nhớ chính thường là quá nhỏ để lưu trữ ổn định tất cả các chương trình và dữ liệu

- Bộ nhớ chính là thiết bị nhớ khả biến, nó sẽ mất nội dung bên trong khi tắt nguồn

Vì vậy các hệ thống máy tính thường dùng bộ nhớ thứ cấp (secondary storage)

như sự mở rộng của bộ nhớ chính Yêu cầu chính đối với bộ nhớ thứ cấp là có khả năng

lưu giữ ổn định lượng lớn dữ liệu Thiết bị nhớ thứ cấp phổ biến nhất là đĩa từ (magnetic

disk) cho phép lưu trữ cả chương trình và dữ liệu Hầu hết các chương trình (trình duyệt web, trình biên dịch, xử lý văn bản, bảng tính…) được chứa trên đĩa cho đến khi nó được nạp vào bộ nhớ chính

Ngoài các thanh ghi, bộ nhớ chính, đĩa từ, hệ thống lưu trữ còn bao gồm bộ nhớ cache, CD-ROM, băng từ… Mỗi hệ thống lưu trữ đều cung cấp các chức năng cơ bản để lưu trữ dữ liệu Sự khác biệt chính giữa các hệ thống lưu trữ là ở tốc độ, giá thành, kích thước và tính ổn định

Các hệ thống lưu trữ trong một hệ thống máy tính có thể được tổ chức trong một sơ

đồ phân cấp (Hình 1.2) theo tốc độ và giá thành Các mức cao đắt hơn nhưng nhanh hơn

Từ trên xuống dưới, giá thành trên mỗi bit nói chung giảm dần, thời gian truy nhập tăng dần Bốn mức bộ nhớ trên cùng có thể được xây dựng từ bộ nhớ bán dẫn

Hình 1.2 Sự phân cấp thiết bị lưu trữ

Các thiết bị nhớ cũng có thể được phân biệt theo tính khả biến hoặc không khả biến

Thiết bị khả biến bị mất nội dung khi không còn nguồn năng lượng cho nó Dữ liệu muốn lưu giữ an toàn cần được ghi vào thiết bị không khả biến Xem hình 1.2, các thiết

Trang 18

bị trên đĩa điện tử (electronic disk) là khả biến, dưới nó là không khả biến Đĩa điện tử

có thể được thiết kế là khả biến hoặc không khả biến Khi hoạt động bình thường, đĩa điện tử lưu dữ liệu trong một mảng DRAM lớn có tính khả biến Nhưng nhiều thiết bị đĩa điện tử chứa một đĩa từ cứng ẩn và một pin để giữ năng lượng Nếu năng lượng bên ngoài

bị ngắt, bộ điều khiển sao chép dữ liệu từ RAM vào đĩa từ Khi có lại năng lượng bên ngoài, bộ điều khiển sao chép dữ liệu trở lại RAM Một dạng khác của đĩa điện tử là bộ nhớ flash, phổ biến trong các camera, PDA, robot và ngày càng được dùng nhiều làm thiết bị nhớ có khả năng chuyển đổi dữ liệu trên các máy tính Bộ nhớ flash rẻ hơn DRAM nhưng không cần năng lượng để duy trì nội dung Một dạng khác của thiết bị không khả biến là NVRAM - là DRAM có pin giữ năng lượng Bộ nhớ này có thể nhanh như DRAM nhưng khoảng thời gian không khả biến hạn chế

Thiết kế một hệ thống nhớ hoàn chỉnh phải cân bằng tất cả các yếu tố vừa phân tích:

nó phải sử dụng càng ít bộ nhớ đắt, càng nhiều bộ nhớ rẻ và không khả biến càng tốt Các

bộ nhớ đệm nhanh (cache) có thể được đặt ở nơi có thời gian truy nhập lớn hay ở giữa 2 thiết bị nhớ có sự khác biệt lớn về tốc độ truyền dữ liệu nhằm cải thiện hiệu năng

1.1.3 Cấu trúc vào/ra

Tùy theo bộ điều khiển thiết bị (device controller), có thể có nhiều hơn một thiết bị được gắn kết Ví dụ small computer system interface (SCSI) controller có thể có 7 hoặc nhiều hơn thiết bị gắn với nó Mỗi bộ điều khiển thiết bị duy trì một số bộ nhớ đệm (buffer) và tập các thanh ghi đa năng Nó chịu trách nhiệm chuyển dữ liệu giữa các thiết

bị ngoại vi và buffer cục bộ của nó Dung lượng buffer cục bộ khác nhau, từ 128 đến 4096 byte, tùy theo thiết bị được điều khiển Ví dụ, dung lượng buffer của một bộ điều khiển đĩa bằng hoặc là bội số của 512 byte, đó là dung lượng của một sector - phần nhỏ nhất của đĩa có thể đánh địa chỉ

a) Ngắt vào/ra

Để bắt đầu một hoạt động vào/ra, CPU nạp nội dung các thanh ghi tương ứng vào trong bộ điều khiển thiết bị Bộ điều khiển lần lượt kiểm tra nội dung các thanh ghi đó để xác định hành động nào cần thực hiện Ví dụ, nếu nó thấy một yêu cầu đọc, bộ điều khiển

sẽ bắt đầu chuyển dữ liệu từ thiết bị đến buffer cục bộ của nó Mỗi khi việc chuyển dữ liệu hoàn thành, bộ điều khiển thiết bị thông báo cho CPU biết bằng cách gây ra một ngắt Nói chung, trạng thái này sẽ xuất hiện như kết quả của một tiến trình người sử dụng yêu cầu vào/ra Sau khi vào/ra được bắt đầu, có thể có một trong hai quá trình diễn biến sau:

- Khi vào ra kết thúc, quyền điều khiển được trả lại cho tiến trình người sử dụng

Trường hợp này đơn giản hơn và được gọi là vào/ra đồng bộ (synchronous I/O)

- Quyền điều khiển được trả lại cho tiến trình người sử dụng mà không cần đợi vào/ra kết thúc, sau đó việc vào/ra có thể tiếp tục trong khi các hoạt động khác của hệ thống vẫn diễn ra Trường hợp này được gọi là vào/ra không đồng bộ (asynchronous I/O)

Trang 19

Hình 1.3 Hai quá trình vào/ra: (a) đồng bộ, (b) không đồng bộ

b) Cấu trúc DMA

Nếu các ký tự được gõ với tốc độ 9600 baud (đơn vị chỉ tốc độ truyền), CPU có thể chấp nhận và chuyển mỗi ký tự xấp xỉ 1 mili giây (ms), bằng 1000 micro giây (s) Một thường trình ngắt mất 2 s để đưa mỗi ký tự vào buffer, như thế lãng phí sự sử dụng CPU

998 s cho mỗi lần chuyển ký tự Vào/ra không đồng bộ thường được gán mức ưu tiên thấp, cho phép các tiến trình khác có mức ưu tiên cao hơn được thực hiện trước Tuy nhiên, các thiết bị tốc độ cao như đĩa, mạng truyền thông có khả năng truyền thông tin gần bằng tốc độ bộ nhớ; nếu CPU cần 2 s để đáp ứng cho mỗi ngắt và ví dụ các ngắt xuất hiện theo chu kỳ 4 s thì CPU sẽ không còn nhiều thời gian để thực hiện các tiến trình khác

Để giải quyết vấn đề trên, truy nhập bộ nhớ trực tiếp (direct memory access - DMA) được sử dụng cho các thiết bị vào/ra tốc độ cao Sau khi thiết lập buffer, con trỏ

và bộ đếm cho thiết bị vào/ra, bộ điều khiển thiết bị chuyển toàn bộ một khối dữ liệu trực tiếp giữa buffer của nó và bộ nhớ chính mà không có sự can thiệp bởi CPU Chỉ một ngắt được sinh ra cho mỗi khối thay vì một ngắt cho mỗi byte (hoặc word) đối với các thiết bị tốc độ thấp

Hoạt động cơ bản của CPU vẫn tương tự Một chương trình của người sử dụng, hoặc chính hệ điều hành, có thể yêu cầu chuyển dữ liệu Hệ điều hành tìm một buffer (buffer trống cho input, hoặc buffer đầy cho output) từ buffer pool - một tổ hợp chung

các buffer Sau đó, một phần của hệ điều hành gọi là trình điều khiển thiết bị, device driver, thiết lập các thanh ghi của bộ điều khiển DMA (DMA controller, DMAC) để thiết

lập độ dài dữ liệu cần chuyển, các địa chỉ nguồn và đích thích hợp Tiếp theo DMAC được lệnh bắt đầu hoạt động vào/ra Trong khi DMAC thực hiện chuyển dữ liệu, CPU rỗi

có thể thực hiện các tác vụ khác Vì bộ nhớ chính thường chỉ có thể chuyển mỗi lần một word, DMAC chiếm dụng chu kỳ bộ nhớ từ CPU Sự chiếm dụng chu kỳ này có thể làm chậm sự thực hiện của CPU khi thực hiện chuyển DMA DMAC sẽ ngắt CPU khi hoàn thành việc chuyển dữ liệu

Trang 20

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

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

hệ thống máy tính có thể được chia (một cách đại khái) thành 4 thành phần:

 Phần cứng (hardware),

 Hệ điều hành (operating system),

 Các chương trình ứng dụng (application programs),

 Người sử dụng (users)

Phần cứng - bộ xử lý trung tâm (CPU), bộ nhớ, các thiết bị vào/ra - cung cấp các tài nguyên tính toán cơ bản Các chương trình ứng dụng - như các chương trình xử lý văn bản, bảng tính, chương trình dịch, trình duyệt web - xác định cách mà các tài nguyên được

sử dụng để giải quyết các vấn đề tính toán của người sử dụng Hệ điều hành là một chương trình hoạt động như một lớp trung gian giữa người sử dụng và phần cứng máy tính, nó kiểm soát và sắp xếp cách sử dụng phần cứng cho các chương trình khác nhau của các người sử dụng khác nhau

Các thành phần của hệ thống máy tính gồm phần cứng, phần mềm và dữ liệu của

nó Hệ điều hành cung cấp cách sử dụng hợp thức các tài nguyên này trong các hoạt động của hệ thống máy tính Nó chỉ đơn giản cung cấp một môi trường mà trong đó các chương trình khác có thể thực hiện các công việc hữu ích Các hệ điều hành có thể được xem xét

từ 2 quan điểm: của người sử dụng và của hệ thống

Trang 21

1.2.1 Quan điểm của người sử dụng

Quan điểm của người sử dụng đối với máy tính thay đổi theo giao diện sử dụng Hầu hết người sử dụng ngồi trước máy tính cá nhân (PC), gồm màn hình, bàn phím, chuột, hộp máy (chứa các đơn vị hệ thống như CPU, bộ nhớ ) Một hệ thống như vậy được thiết

kế cho một người sử dụng để độc quyền tài nguyên của nó, để tối đa hóa công việc mà người sử dụng đang thực hiện Trong trường hợp này, hệ điều hành được thiết kế chủ yếu

để dễ sử dụng, thứ đến là hiệu năng mà ít chú ý đến sự sử dụng tài nguyên

Một số người sử dụng ngồi tại các điểm cuối (terminal) khác nhau, cùng truy nhập vào một mainframe hoặc minicomputer Họ chia sẻ tài nguyên và có thể trao đổi thông tin Khi đó hệ điều hành được thiết kế để tối đa hóa việc sử dụng tài nguyên - để đảm bảo rằng tất cả tài nguyên khả dụng (CPU, bộ nhớ vào/ra) đều được sử dụng hiệu quả và không một người sử dụng nào giành được nhiều tài nguyên hơn so với mức phân bổ tài nguyên của hệ điều hành

Những người sử dụng khác ngồi tại các máy trạm (workstation) được nối mạng với các workstation khác và các server Họ có tài nguyên riêng và cũng chia sẻ tài nguyên như tệp tin, kết quả tính toán, máy in mạng Do đó, hệ điều hành của họ được thiết kế để thỏa hiệp giữa khả năng sử dụng độc lập và sự sử dụng tài nguyên

Gần đây, xuất hiện nhiều loại máy tính cầm tay Những thiết bị này hầu như là độc lập, được sử dụng chỉ bởi các cá nhân riêng lẻ Một số thì được kết nối mạng hoặc trực tiếp dùng dây, hoặc phổ biến hơn là qua các modem không dây Hệ điều hành cho các thiết bị này được thiết kế chủ yếu cho khả năng sử dụng độc lập

Một số máy tính có rất ít hoặc không có khung nhìn cho người sử dụng, ví dụ như các máy tính nhúng (embedded computer) trong các thiết bị gia đình (máy giặt, lò vi sóng…) và trong ô tô Chúng có thể có một vùng phím số và đèn báo để hiển thị trạng thái, nhưng hầu hết các máy tính đó và hệ điều hành của chúng được thiết kế để chạy không cần sự can thiệp của người sử dụng

1.2.2 Quan điểm hệ thống

Từ cái nhìn tổng quan của hệ thống, hệ điều hành là chương trình có liên hệ mật

thiết nhất với phần cứng Chúng ta có thể xem hệ điều hành như một trình phân phối tài nguyên Một hệ thống máy tính có nhiều tài nguyên phần cứng và phần mềm như chu kỳ

CPU, không gian bộ nhớ, không gian lưu trữ tệp, các thiết bị vào/ra Hệ điều hành hoạt động như một trình quản lý các tài nguyên này Các yêu cầu tài nguyên rất nhiều và có thể xung đột, hệ điều hành phải quyết định phân phối các tài nguyên cho các chương trình

và người sử dụng như thế nào để làm cho hệ thống máy tính hiệu quả và công bằng

1.3.3 Các mục đích của hệ điều hành

Mục đích chính của một số hệ điều hành là tính tiện lợi cho người sử dụng Các

hệ điều hành tồn tại vì được cho rằng tính toán với chúng dễ dàng hơn là không có chúng Quan điểm này được nhận rõ khi bạn nhìn vào các hệ điều hành cho các máy PC

Trang 22

Mục đích chính của một số hệ điều hành khác là sự hoạt động hiệu quả của hệ

thống máy tính Đây là trường hợp đối với các hệ thống lớn, chia sẻ, nhiều người sử dụng Hai mục đích trên - tiện dụng và hiệu quả - đôi khi mâu thuẫn nhau Trước đây, tính hiệu quả thường quan trọng hơn tính tiện dụng Do đó, nhiều học thuyết hệ điều hành đã tập trung vào sử dụng tối ưu các tài nguyên tính toán Qua quá trình tiến triển, các hệ điều hành ngày càng được chú ý đến tính tiện dụng Ví dụ như hệ điều hành UNIX khởi đầu với giao diện gồm một bàn phím và máy in; dần dần phần cứng thay đổi, UNIX được chuyển đến phần cứng mới với nhiều giao diện thân thiện hơn; nhiều giao diện đồ họa (GUI) đã được thêm vào cho phép UNIX trở nên tiện dụng hơn, dù vẫn tập trung vào tính hiệu quả

1.3 CẤU TRÚC HỆ ĐIỀU HÀNH

Một hệ điều hành cung cấp môi trường để các chương trình được thực hiện trong

đó Sâu bên trong thì các hệ điều hành có khác biệt rất lớn trong tạo dựng vì chúng được

tổ chức theo nhiều phương pháp khác nhau Tuy nhiên, chúng cũng có nhiều điểm chung

sẽ thảo luận trong phần này

Một trong những khía cạnh quan trọng nhất của một hệ điều hành là khả năng đa chương trình Nói chung, một user không thể sử dụng hết tất cả các chu kỳ của CPU và

các thiết bị vào/ra Kỹ thuật đa chương trình (multiprogramming) làm tăng sự sử dụng

CPU bằng cách tổ chức các chương trình (job, gồm mã và dữ liệu) để CPU luôn có việc

để làm

Hình 1.1 Bố trí bộ nhớ của hệ điều hành đa chương trình

Các hệ thống đa chương trình cung cấp môi trường mà trong đó các tài nguyên hệ thống (CPU, bộ nhớ, các thiết bị ngoại vi) được sử dụng hiệu quả, nhưng chưa có sự

tương tác và linh hoạt giữa người sử dụng với hệ thống máy tính Kỹ thuật chia sẻ thời

Trang 23

gian (time sharing), còn được gọi là kỹ thuật đa nhiệm (multitasking), là một sự mở

rộng logic của kỹ thuật đa chương trình Trong các hệ thống chia sẻ thời gian, CPU thực hiện nhiều chương trình bằng cách chuyển giữa chúng, nhưng sự chuyển xuất hiện rất thường xuyên khiến cho các user có thể tương tác với mỗi chương trình trong khi nó đang được chạy

Kỹ thuật chia sẻ thời gian cần có một hệ thống máy tính tương tác, cung cấp sự giao tiếp trực tiếp giữa người sử dụng và hệ thống Người sử dụng dùng một thiết bị vào dữ liệu như bàn phím hay chuột để gửi các lệnh trực tiếp tới hệ thống hay tới một chương trình và đợi kết quả tức thì trên một thiết bị xuất dữ liệu như màn hình Do đó, thời gian đáp ứng cần ngắn - thường nhỏ hơn 1 giây

Một hệ điều hành chia sẻ thời gian cho phép nhiều user chia sẻ máy tính đồng thời

Vì mỗi hành động hoặc lệnh thường ngắn nên chỉ cần dành một lượng nhỏ thời gian CPU cho mỗi user Vì hệ thống chuyển rất nhanh từ user này sang user kế tiếp nên mỗi user có cảm giác rằng toàn bộ hệ thống máy tính được dành riêng cho mình, dù thực tế là nó đang được chia sẻ giữa nhiều user

Một hệ điều hành chia sẻ thời gian sử dụng các kỹ thuật lập lịch CPU và đa chương trình để cung cấp cho mỗi user một phần nhỏ của máy tính chia sẻ thời gian Mỗi user có

ít nhất một chương trình độc lập trong bộ nhớ Một chương trình đã ở trong bộ nhớ và

đang được thực hiện được gọi là một tiến trình (process) Tiến trình thường thực hiện

chỉ một thời gian ngắn trước khi nó kết thúc hoặc cần phải thực hiện vào/ra Vào/ra có thể là tương tác; nghĩa là, dữ liệu ra được hiển thị cho người sử dụng và dữ liệu vào lại được đưa vào từ chuột, bàn phím của người sử dụng Vì vào/ra tương tác thường chạy ở

“tốc độ con người”, nó có thể tốn nhiều thời gian để hoàn thành Ví dụ vào dữ liệu có thể

bị giới hạn bởi tốc độ gõ bàn phím của người sử dụng; 7 ký tự mỗi giây là nhanh đối với người nhưng là vô cùng chậm đối với máy tính Thay vì để CPU rỗi khi vào dữ liệu như vậy, hệ điều hành sẽ nhanh chóng chuyển CPU cho chương trình của người sử dụng khác Các kỹ thuật chia sẻ thời gian và đa chương trình đều yêu cầu có một số chương trình đồng thời trong bộ nhớ Vì nói chung bộ nhớ chính quá nhỏ để chứa tất cả các chương trình, nên ban đầu các chương trình đó được chứa trên đĩa trong job pool Nơi này chứa tất cả các tiến trình trên đĩa đang đợi phân phối bộ nhớ chính Nếu có một số chương trình sẵn sàng được đưa vào bộ nhớ và nếu không có đủ chỗ cho tất cả chúng thì

hệ thống phải lựa chọn Việc lựa chọn này được gọi là lập lịch chương trình (job

scheduling) sẽ được thảo luận trong chương 5 Khi hệ điều hành chọn một chương trình

từ job pool, nó nạp chương trình vào trong bộ nhớ để thực hiện Tại mỗi thời điểm có một

số chương trình trong bộ nhớ nên cần một số dạng quản lý bộ nhớ và nội dung này sẽ được thảo luận trong chương 8 và 9 Hơn nữa, nếu một số chương trình cùng sẵn sàng để chạy, hệ thống phải chọn một chương trình để cấp CPU Việc lựa chọn này được gọi là

lập lịch CPU (CPU scheduling) và sẽ được thảo luận trong chương 5

Trang 24

Trong một hệ thống chia sẻ thời gian, hệ điều hành phải đảm bảo thời gian đáp ứng

chấp nhận được mà đôi khi được thực hiện thông qua swapping: các tiến trình được hoán

chuyển vào trong (swap in) và ra khỏi (swap out) để tới đĩa Một phương pháp phổ biến

hơn để đạt được điều này là bộ nhớ ảo (virtual memory), bộ nhớ cho phép thực hiện một

tiến trình không được chứa toàn bộ trong bộ nhớ (chương 9) Lợi điểm chính của việc dùng bộ nhớ ảo là nó cho phép các user chạy các chương trình có kích thước lớn hơn bộ nhớ vật lý thật

Các hệ thống chia sẻ thời gian phải cung cấp một hệ thống tệp nằm trên các đĩa (chương 11), vì vậy cần có sự quản lý đĩa Các hệ thống chia sẻ thời gian cũng cung cấp một cơ chế để bảo vệ các tài nguyên tránh bị sử dụng không thích hợp Để đảm bảo sự thực hiện có thứ tự, hệ thống phải cung cấp các cơ chế để đồng bộ hóa và giao tiếp tiến trình (chương 6) và nó phải đảm bảo rằng các tiến trình không bị bế tắc, chờ đợi vô hạn một tiến trình khác (chương 7)

1.4 HOẠT ĐỘNG CỦA HỆ ĐIỀU HÀNH

Trong môi trường đa chương trình ngày nay, một chương trình lỗi có thể thay đổi chương trình hay dữ liệu của một chương trình khác Vì vậy, hệ điều hành phải được thiết

kế để đảm bảo rằng nếu một chương trình bị lỗi sẽ không gây cho các chương trình khác thực hiện sai

Nhiều lỗi chương trình được phát hiện bởi phần cứng và thường được xử lý bởi hệ điều hành Một chương trình của người sử dụng cũng có thể gây lỗi, ví dụ như khi chương trình đang cố gắng thực hiện một lệnh không hợp lệ hoặc truy nhập vào vùng nhớ ngoài không gian bộ nhớ dành cho người sử dụng, khi đó phần cứng sẽ đặt bẫy rồi gửi ngắt tới

hệ điều hành Mỗi khi lỗi chương trình xuất hiện, hệ điều hành phải chấm dứt chương trình theo cách bất bình thường và đưa ra một thông báo lỗi tương ứng

1.4.1 Sự hoạt động ở hai chế độ

Để đảm bảo sự hoạt động thích hợp, phải bảo vệ hệ điều hành và tất cả các chương trình và dữ liệu của chúng tránh khỏi bất kỳ một chương trình gặp sự cố nào Sự bảo vệ

là cần thiết đối với tất cả các tài nguyên chia sẻ Phương pháp được nhiều hệ điều hành

sử dụng là cung cấp sự hỗ trợ phần cứng cho phép phân biệt các chế độ thực hiện khác

nhau Máy tính có 2 chế độ hoạt động là user mode (chế độ người sử dụng) và kernel mode (chế độ giám sát, còn được gọi là supervisor mode, system mode, privileged mode) Một mode bit được đưa vào phần cứng máy tính để chỉ ra chế độ hiện tại: monitor (0)

hoặc user (1)

Khi hệ thống khởi động, phần cứng bắt đầu trong kernel mode Sau đó hệ điều hành được nạp rồi bắt đầu các tiến trình của người sử dụng trong user mode Mỗi khi một bẫy hay ngắt xuất hiện, phần cứng chuyển từ user mode sang kernel mode (chuyển

Trang 25

trong chế độ kernel mode Hệ thống luôn chuyển thành user mode (bằng cách thiết lập

mode bit bằng 1) trước khi chuyển điều khiển cho một chương trình của người sử dụng

Hình 1.2 Chuyển từ user mode sang kernel mode

Sự bảo vệ hệ điều hành và các chương trình được thực hiện bằng cách chỉ rõ một

số lệnh máy có thể gây hại là các lệnh đặc quyền (privileged instruction) Phần cứng chỉ cho phép các lệnh đặc quyền được thực hiện trong kernel mode Nếu một lệnh đặc quyền

cố gắng để được thực hiện trong user mode thì phần cứng sẽ không thực hiện lệnh đó mà coi nó là một lệnh không hợp lệ và đặt bẫy gửi đến hệ điều hành

Khái niệm lệnh đặc quyền cũng cung cấp phương thức để người sử dụng tương tác với hệ điều hành bằng cách yêu cầu hệ thống thực hiện một số tác vụ xác định mà chỉ nên

để hệ điều hành thực hiện Mỗi yêu cầu như vậy được gọi đến bằng cách người sử dụng

thực hiện một lệnh đặc quyền, được gọi là lời gọi hệ thống (system call, hoặc monitor

call, operating system function call)

Khi một lời gọi hệ thống được thực hiện, nó được phần cứng coi như một ngắt mềm Quyền điều khiển chuyển qua vectơ ngắt đến một thường trình dịch vụ (service routine) trong hệ điều hành và mode bit được thiết lập thành monitor mode Bộ phận giám sát kiểm tra một tham số trong lệnh ngắt để xác định lời gọi hệ thống nào đã xuất hiện Các thông tin cần thiết cho yêu cầu có thể được chuyển vào trong các thanh ghi, trong stack, hoặc trong bộ nhớ (với con trỏ tới địa chỉ vùng nhớ được truyền trong các thanh ghi) Bộ phận giám sát xác định tính chính xác và hợp lệ của các tham số, thực hiện yêu cầu rồi trả quyền điều khiển cho lệnh sau lời gọi hệ thống

Nếu thiếu sự hỗ trợ phần cứng để máy tính hoạt động ở 2 chế độ trên thì có thể gây

ra những lỗi nghiêm trọng Ví dụ, hệ điều hành MS-DOS được viết cho kiến trúc Intel 8088 không có mode bit, không có 2 chế độ hoạt động Một chương trình của người sử dụng chạy lỗi có thể phá hỏng hoàn toàn hệ điều hành bằng cách ghi đè dữ liệu lên nó và nhiều chương trình có thể ghi lên một thiết bị tại cùng một thời điểm có thể gây những hậu quả tai hại Các phiên bản tiên tiến gần đây của CPU Intel, đã cung cấp sự hoạt động ở 2 chế

độ Kết quả là các hệ điều hành gần đây như Microsoft Windows 7, Unix và Linux đã có lợi điểm của tính năng này, đồng thời cũng cung cấp sự bảo vệ tốt hơn cho hệ điều hành

Trang 26

1.4.2 Bộ định thời (Timer)

Chúng ta phải đảm bảo rằng hệ điều hành duy trì kiểm soát đối với CPU, phải ngăn không để chương trình của người sử dụng bị tắc trong một vòng lặp vô hạn hoặc không gọi các dịch vụ của hệ thống và không bao giờ trả quyền điều khiển lại cho hệ điều hành

Để đạt được mục đích này, có thể sử dụng một bộ định thời Nó có thể được thiết lập để ngắt máy tính sau một khoảng xác định Khoảng thời gian này có thể được ấn định (ví dụ, 1/60 giây) hoặc thay đổi (ví dụ từ 1ms đến 1s) Bộ định thời thay đổi thường được thực thi bằng một đồng hồ có tốc độ xác định và một bộ đếm Hệ điều hành thiết lập bộ đếm Mỗi khi đồng hồ nhảy, bộ đếm bị giảm xuống, khi bộ đếm bằng 0 thì một ngắt xuất hiện

Ví dụ, một bộ đếm 10-bit và một đồng hồ chia đến 1ms cho phép các ngắt xuất hiện theo các khoảng từ 1ms đến 1024ms, với bước nhảy mỗi 1ms

Trước khi trao quyền điều khiển cho người sử dụng, hệ điều hành đảm bảo rằng timer được thiết lập để ngắt Khi timer ngắt, quyền điều khiển được chuyển về hệ điều hành để xử lý ngắt như một lỗi gây hại hoặc có thể cho chương trình thêm thời gian Rõ ràng là các lệnh sửa đổi nội dung của timer là lệnh đặc quyền

Vì vậy, có thể sử dụng timer để ngăn chặn chương trình của người sử dụng chạy quá lâu Một kỹ thuật đơn giản để khởi động bộ đếm với một lượng thời gian mà một chương trình được phép chạy Một chương trình có thời gian giới hạn là 7 phút sẽ có bộ đếm khởi đầu là 420 Mỗi giây, timer ngắt và bộ đếm giảm đi 1 Miễn là bộ đếm còn lớn hơn 0, quyền điều khiển được chuyển cho chương trình người sử dụng Khi bộ đếm bằng

0, hệ điều hành kết thúc chương trình vì hết thời gian ấn định

1.5 QUẢN LÝ TIẾN TRÌNH

Một chương trình không làm việc gì trừ khi các lệnh của nó được thực hiện bởi CPU Một tiến trình có thể được xem là một chương trình đang được thực hiện, nhưng sự định nghĩa này sẽ mở rộng khi khảo sát nó kỹ hơn Một chương trình của người sử dụng chia sẻ thời gian (ví dụ như một trình biên dịch) là một tiến trình Một chương trình xử lý văn bản đang chạy bởi người sử dụng trên một PC là một tiến trình Một tác vụ hệ thống như gửi dữ liệu ra tới máy in cũng là một tiến trình Bây giờ, bạn có thể xem một tiến trình là một tác vụ hoặc một chương trình chia sẻ thời gian, nhưng sau này bạn sẽ hiểu khái niệm này tổng quát hơn

Một tiến trình cần có các tài nguyên gồm chu kỳ CPU, bộ nhớ, các tệp, các thiết bị vào/ra để hoàn thành tác vụ Những tài nguyên này hoặc được phân phối cho tiến trình khi nó được tạo hoặc khi đang chạy Khi tiến trình kết thúc, hệ điều hành sẽ giành lại những tài nguyên có thể tái sử dụng

Một chương trình tự nó không phải là một tiến trình, một chương trình là một thực

thể bị động (passive), như là nội dung của một tệp được chứa trên đĩa, còn tiến trình là một thực thể hoạt động (active), với một bộ đếm chương trình xác định lệnh kế tiếp để

thực hiện Lệnh của một tiến trình phải tuần tự CPU thực hiện lệnh sau kế tiếp lệnh trước

Trang 27

cho đến khi tiến trình hoàn thành Hơn nữa, tại bất kỳ thời điểm nào, tối đa chỉ có một lệnh được thực hiện được xem như là tiến trình Do đó, dù hai tiến trình có thể được liên kết với cùng một chương trình, chúng vẫn được xem như hai chuỗi thực hiện riêng Thông thường chương trình sinh ra nhiều tiến trình khi nó chạy

Tiến trình là một đơn vị công việc trong hệ thống Một hệ thống chứa một tập các tiến trình, một số trong đó là các tiến trình của hệ điều hành (thực hiện mã lệnh hệ điều hành), số còn lại là tiến trình của người sử dụng (thực hiện mã lệnh của người sử dụng) Tất

cả những tiến trình này có khả năng thực hiện đồng thời bằng cách sử dụng nhiều CPU

Hệ điều hành chịu trách nhiệm đối với những hoạt động sau để quản lý tiến trình:

 Tạo và xóa các tiến trình của hệ thống và của người sử dụng

 Tạm dừng và tiếp tục lại tiến trình

 Cung cấp cơ chế cho đồng bộ hóa tiến trình

 Cung cấp cơ chế cho giao tiếp tiến trình

 Cung cấp cơ chế cho xử lý bế tắc

Các kỹ thuật quản lý tiến trình sẽ được thảo luận trong các chương từ 3 đến 6

1.6 QUẢN LÝ BỘ NHỚ CHÍNH

Bộ nhớ chính là trung tâm của các hoạt động của một hệ thống máy tính hiện đại

Bộ nhớ chính là một mảng lớn các từ nhớ hoặc byte nhớ với kích thước từ vài trăm nghìn đến vài tỷ Mỗi từ nhớ hay byte nhớ có địa chỉ riêng Đó là một kho chứa dữ liệu có thể truy nhập nhanh được chia sẻ cho CPU và các thiết bị vào/ra Bộ xử lý trung tâm đọc các lệnh từ bộ nhớ chính trong suốt chu kỳ tìm nạp lệnh, nó đọc và ghi dữ liệu lên bộ nhớ chính trong chu kỳ tìm nạp dữ liệu Các hoạt động vào/ra thực hiện thông qua DMA cũng đọc và ghi dữ liệu trong bộ nhớ chính Bộ nhớ chính là thiết bị lưu trữ lớn duy nhất là CPU có thể định địa chỉ và truy nhập trực tiếp Ví dụ, khi CPU xử lý dữ liệu từ đĩa, đầu tiên dữ liệu đó phải được chuyển tới bộ nhớ chính bởi các lệnh vào/ra từ CPU Tương tự, các lệnh phải ở trong bộ nhớ để CPU thực hiện

Để một chương trình được thực hiện, nó phải được ánh xạ tới địa chỉ nhất định và được nạp vào trong bộ nhớ Khi chương trình thực hiện, nó truy nhập các lệnh và dữ liệu

từ bộ nhớ bằng cách tạo ra các địa chỉ tuyệt đối này Cuối cùng khi chương trình kết thúc, không gian bộ nhớ của nó được khai báo khả dụng và chương trình tiếp theo có thể được nạp vào và thực hiện

Để cải thiện cả hiệu năng của CPU và tốc độ đáp ứng của máy tính đối với người

sử dụng, phải giữ một vài chương trình trong bộ nhớ Có nhiều giải thuật quản lý bộ nhớ khác nhau và sự hiệu quả của các giải thuật đó phụ thuộc vào trạng thái cụ thể Việc lựa chọn một giải thuật quản lý bộ nhớ cho một hệ thống cụ thể phụ thuộc vào nhiều yếu tố -

đặc biệt dựa vào thiết kế phần cứng của hệ thống Mỗi giải thuật có yêu cầu về hỗ trợ

phần cứng riêng cho nó

Trang 28

Hệ điều hành chịu trách nhiệm đối với những hoạt động sau để quản lý bộ nhớ:

 Lưu lại dấu vết của các phần bộ nhớ đang được sử dụng và được sử dụng bởi tiến trình nào

 Quyết định xem những tiến trình nào được nạp khi có bộ nhớ trống

 Phân phối và thu hồi bộ nhớ khi cần đến

Các kỹ thuật quản lý bộ nhớ sẽ được thảo luận trong chương 8 và 9

1.7 QUẢN LÝ LƯU TRỮ

1.7.1 Quản lý tệp

Quản lý tệp là một trong những thành phần hữu hình nhất của một hệ điều hành Máy tính có thể chứa thông tin trên một số kiểu phương tiện vật lý khác nhau: băng từ, đĩa từ, đĩa quang là những phương tiện phổ biến nhất Mỗi phương tiện này có những đặc điểm và

tổ chức vật lý riêng Mỗi phương tiện được điều khiển bởi một thiết bị cũng có những đặc điểm duy nhất như ổ đĩa hay ổ băng Những thuộc tính này bao gồm tốc độ truy nhập, dung lượng, tốc độ truyền dữ liệu, phương thức truy nhập (tuần tự hoặc ngẫu nhiên)

Để sử dụng hệ thống máy tính tiện lợi, hệ điều hành cung cấp một cách nhìn logic thống nhất đối với lưu trữ thông tin Nó tách các thuộc tính vật lý ra khỏi các thiết bị lưu trữ để xác định một đơn vị lưu trữ logic là tệp Hệ điều hành ánh xạ tệp vào phương tiện vật lý rồi truy nhập chúng thông qua các thiết bị lưu trữ

Tệp là một tập hợp các thông tin liên quan xác định bởi người tạo nó Thông thường, các tệp đại diện cho chương trình và dữ liệu Các tệp dữ liệu có thể là dạng số, dạng chữ hoặc cả hai Các tệp có thể có định dạng tự do (ví dụ các tệp văn bản) hoặc có định dạng

cố định (ví dụ tệp có các trường cố định) Tệp chứa một chuỗi các bit, byte, dòng hoặc bản ghi

Hệ điều hành thực hiện khái niệm tệp rất trừu tượng bằng cách quản lý các phương tiện lưu trữ lớn (như các đĩa) và các thiết bị điều khiển chúng Các tệp cũng thường được

tổ chức trong các thư mục để dễ sử dụng Cuối cùng, khi nhiều người sử dụng truy nhập tệp có thể muốn tệp điều khiển bởi ai và theo cách nào (ví dụ, đọc, ghi, nối thêm)

Hệ điều hành chịu trách nhiệm đối với những hoạt động sau để quản lý tệp:

 Tạo và xóa các tệp

 Tạo và xóa các thư mục

 Hỗ trợ việc thao tác với các tệp và thư mục

 Ánh xạ các tệp vào bộ nhớ thứ cấp

 Sao lưu tệp trên các phương tiện lưu trữ ổn định

Các kỹ thuật quản lý tệp sẽ được thảo luận trong chương 11

Trang 29

1.7.2 Quản lý bộ nhớ lưu trữ lớn

Mục đích chính của một hệ thống máy tính là thực hiện các chương trình Những chương trình này cùng với dữ liệu chúng truy nhập phải ở trong bộ nhớ chính (bộ nhớ cơ sở) khi chương trình được thực hiện Vì bộ nhớ chính quá nhỏ để lưu trữ tất cả dữ liệu và chương trình và bởi vì tất cả dữ liệu trong nó bị mất khi mất nguồn điện, hệ thống máy tính phải cung cấp bộ nhớ thứ cấp (còn gọi là bộ nhớ cấp hai) để sao lưu bộ nhớ chính Hầu hết các hệ thống máy tính hiện đại đều sử dụng các đĩa làm các phương tiện lưu trữ trực tuyến cơ sở cho cả chương trình và dữ liệu Hầu hết các chương trình - bao gồm các trình biên dịch, trình dịch hợp ngữ, thường trình sắp xếp, trình soạn thảo, trình định dạng

- được chứa trên đĩa cho đến khi được nạp vào bộ nhớ và rồi sử dụng đĩa làm cả nguồn

và đích cho quá trình xử lý của chúng Do đó, có thể nói sự quản lý đĩa là đặc biệt quan trọng đối với một hệ thống máy tính

Hệ điều hành chịu trách nhiệm đối với những hoạt động sau để quản lý đĩa:

Tuy nhiên, người ta cũng sử dụng các bộ nhớ cấp ba, chậm hơn nhưng rẻ hơn (đôi khi dung lượng lớn hơn) so với bộ nhớ thứ cấp Một số mục đích là để sao lưu dữ liệu đĩa, dữ liệu ít khi sử dụng, lưu trữ lâu dài

Các băng từ và các đĩa CD, DVD là những thiết bị lưu trữ cấp ba phổ biến Những thiết bị này đa dạng, từ WORM (write-once, read-many-times) đến RW (read-write)

Bộ nhớ cấp ba không quyết định đến hiệu năng của hệ thống, nhưng nó vẫn phải được quản lý Một số hệ điều hành chịu trách nhiệm này, còn một số khác để việc này cho các chương trình ứng dụng Một số chức năng mà hệ điều hành có thể cung cấp bao gồm gắn (mount) và tháo (unmount) các phương tiện lưu trữ, phân phối và giải phóng các thiết bị, di chuyển dữ liệu từ bộ nhớ cấp hai sang bộ nhớ cấp ba

Các kỹ thuật quản lý bộ nhớ cấp hai và cấp ba sẽ được thảo luận trong chương 11

1.7.3 Kỹ thuật sử dụng bộ nhớ đệm nhanh - Caching

Caching là một nguyên lý quan trọng của các hệ thống máy tính Bình thường thì thông tin được chứa đâu đó trong hệ thống thiết bị lưu trữ (như bộ nhớ chính) Khi được sử dụng, nó được sao chép vào thiết bị nhớ có tốc độ nhanh hơn - cache Khi CPU cần thông tin, đầu tiên nó sẽ kiểm tra xem thông tin đó có trong cache hay không, nếu có thì sẽ sử

Trang 30

dụng thông tin trực tiếp từ cache, nếu không sẽ lấy thông tin từ bộ nhớ chính và sao chép vào trong cache vì có thể thông tin đó sẽ sớm được sử dụng tiếp Hơn nữa, các thanh ghi lập trình được trong CPU cung cấp cache tốc độ cao cho bộ nhớ chính Người lập trình (hoặc trình biên dịch) thực hiện các giải thuật phân phối và thay thế nội dung thanh ghi để quyết định thông tin nào được giữ trong các thanh ghi, thông tin nào trong bộ nhớ chính Cũng có các cache được thực hiện hoàn toàn trong phần cứng Ví dụ hầu hết các

hệ thống có một cache lệnh để giữ các lệnh được thực hiện tiếp theo Nếu không có cache lệnh, CPU sẽ phải đợi vài chu kỳ cho việc tìm nạp lệnh từ bộ nhớ chính Cũng với lý do như vậy, hầu hết các hệ thống có một hoặc một vài cache dữ liệu tốc độ cao Chúng ta sẽ không phải quan tâm đến các cache này vì chúng nằm ngoài sự điều khiển của hệ điều hành

Vì các cache có dung lượng hạn chế, việc quản lý cache là một vấn đề thiết kế quan trọng Chọn lựa cẩn thận kích thước cache và giải thuật thay thế có thể giúp tăng hiệu năng rất lớn với tỷ lệ truy nhập thông tin đang có trong cache đạt 80-99%

Bộ nhớ chính có thể được xem là một cache nhanh cho bộ nhớ thứ cấp vì dữ liệu trong bộ nhớ thứ cấp phải được sao chép vào bộ nhớ chính để sử dụng và dữ liệu phải ở trong bộ nhớ chính trước khi được chuyển tới bộ nhớ thứ cấp để lưu trữ ổn định

Bảng 1.1 Hiệu năng của các mức bộ nhớ

Thời gian truy

Quản lý bởi Trình biên dịch Phần cứng Hệ điều hành Hệ điều hành

Sự chuyển thông tin giữa các mức của hệ thống phân cấp thiết bị lưu trữ có thể rõ ràng hoặc ẩn ngầm phụ thuộc vào thiết kế phần cứng và phần mềm hệ điều hành điều khiển Ví dụ, chuyển dữ liệu từ cache đến CPU và các thanh ghi là một chức năng phần cứng mà không có sự can thiệp của hệ điều hành Mặt khác, chuyển dữ liệu từ đĩa đến bộ nhớ chính được điều khiển bởi hệ điều hành

Trong cấu trúc thiết bị lưu trữ phân cấp, một dữ liệu có thể xuất hiện trong các mức khác nhau Ví dụ, giả sử một số nguyên A cần được tăng lên 1, nó được lưu trong file B trên đĩa từ Hoạt động tăng đầu tiên sẽ thực hiện một thao tác vào/ra để sao chép khối chứa

Trang 31

A trên đĩa vào bộ nhớ chính Tiếp theo A sẽ được sao chép vào cache rồi vào thanh ghi trong CPU Vì vậy, bản sao chép của A xuất hiện ở nhiều nơi: đĩa từ, bộ nhớ chính, cache, thanh ghi Mỗi khi thực hiện tăng A trong thanh ghi, giá trị của A khác nhau trong các mức

bộ nhớ trên Giá trị đó chỉ giống nhau khi nó được ghi ngược từ thanh ghi ra đĩa từ Trong môi trường đơn nhiệm, chỉ một tiến trình thực hiện tại một thời điểm, vấn đề trên không gây khó khăn vì sự truy nhập số nguyên A luôn diễn ra tại mức cao nhất trong

hệ thống phân cấp thiết bị lưu trữ Tuy nhiên, trong môi trường đa nhiệm, CPU luôn phải chuyển qua lại giữa các tiến trình nên cần có sự quan tâm đặc biệt để đảm bảo rằng: nếu một số tiến trình muốn truy nhập A thì mỗi tiến trình sẽ phải lấy được giá trị được cập nhật mới nhất

Hình 1.3 Sự di trú của số nguyên A từ đĩa đến thanh ghi

Tình hình trở nên phức tạp hơn trong môi trường đa bộ xử lý, mỗi CPU có các thanh ghi và cache riêng Một bản copy của A có thể tồn tại đồng thời trên một số cache Vì tất

cả các CPU có thể thực hiện đồng thời, phải đảm bảo rằng giá trị của A trong một cache phải lập tức được cập nhật đến tất cả các cache khác chứa A Đây thường là vấn đề thuộc phần cứng (được thực hiện dưới mức hệ điều hành)

Trong môi trường phân tán, tình hình thậm chí còn phức tạp hơn Một vài bản copy của file có thể được lưu trên các máy tính khác nhau được phân tán trong không gian Vì các bản copy khác nhau có thể được truy nhập và cập nhật đồng thời, phải đảm bảo rằng khi một bản copy được cập nhật tại một nơi thì tất cả các bản copy khác phải được cập nhật càng sớm càng tốt

1.7.4 Hệ thống con vào/ra

Một trong những mục đích của hệ điều hành là ẩn đi những tính chất khác thường của các thiết bị phần cứng đối với người sử dụng Ví dụ, trong UNIX các tính chất khác thường của các thiết bị vào/ra được ẩn giấu đối với chính hệ điều hành bởi hệ thống con vào/ra Hệ thống con vào/ra bao gồm:

 Một thành phần quản lý bộ nhớ bao gồm buffering, caching, spooling

 Một giao diện trình quản lý thiết bị chung

 Trình quản lý (driver) cho các thiết bị phần cứng riêng biệt

Chỉ có trình quản lý thiết bị biết các tính chất khác thường của thiết bị cụ thể mà nó điều khiển

Trang 32

1.8 BẢO VỆ VÀ AN NINH

Nếu một hệ thống máy tính có nhiều người sử dụng và cho phép nhiều tiến trình thực thi song song thì sự truy nhập đến dữ liệu phải được sắp đặt Các cơ chế đảm bảo các tệp, các đoạn bộ nhớ, CPU và các tài nguyên khác chỉ có thể được điều hành bởi các tiến trình đã giành được quyền hợp lệ từ hệ điều hành Ví dụ, phần cứng định địa chỉ bộ nhớ đảm bảo rằng một tiến trình chỉ có thể thực hiện trong không gian bộ nhớ của chính

nó Timer đảm bảo rằng không một tiến trình nào có thể giành được quyền điều khiển CPU mà không trả lại quyền đó Người sử dụng không thể truy nhập các thanh ghi điều khiển thiết bị, vì vậy tính toàn vẹn của các thiết bị ngoại vi khác nhau được bảo vệ

Bảo vệ là cơ chế của hệ điều hành nhằm kiểm soát sự truy nhập của tiến trình hoặc

người sử dụng đến các tài nguyên Cơ chế này phải cung cấp các phương thức để xác định quyền điều khiển phải được tuân thủ và các phương thức để bắt buộc

Bảo vệ có thể cải thiện độ tin cậy bằng cách phát hiện các lỗi ngầm tại giao diện giữa các hệ thống con thành phần Sự phát hiện lỗi sớm thường có thể ngăn ngừa sự lây lỗi từ một hệ thống con khác Một tài nguyên không được bảo vệ không thể chống lại sự

sử dụng (đúng hoặc sai) bởi một user không có hoặc không đủ quyền

An ninh là công việc chống sự tấn công hệ thống từ bên ngoài và bên trong Các

sự tấn công này rất đa dạng, bao gồm virus, worm, tấn công kiểu từ chối dịch vụ of-service, DOS - sử dụng tất cả các tài nguyên hệ thống và vì vậy những người sử dụng hợp lệ không thể vào hệ thống), ăn cắp định danh và ăn cắp dịch vụ (sử dụng hệ thống sai thẩm quyền) Vì sự gia tăng đến báo động của các vấn đề an ninh, các đặc tính an ninh của hệ điều hành trở thành một lĩnh vực nghiên cứu và phát triển nhanh chóng

(denial-Bảo vệ và an ninh đòi hỏi hệ thống phân biệt được tất cả người sử dụng Hầu hết

các hệ điều hành duy trì một danh sách các tên người sử dụng (user name) và định danh (user ID) tương ứng Theo cách gọi của Windows NT thì đó là security ID (SID) Các số

ID này là duy nhất, mỗi số cho một người sử dụng Khi một người sử dụng đăng nhập vào hệ thống, hệ điều hành xác định user ID tương ứng User ID đó được gắn với tất cả các tiến trình và luồng của người sử dụng Khi cần user ID được dịch trở lại thành tên người truy nhập

Trong một số trường hợp, muốn phân biệt giữa các tập hợp người sử dụng hơn là giữa những người sử dụng riêng lẻ Ví dụ, người sở hữu một tệp (owner) trên hệ thống UNIX có thể được phép thực hiện mọi hoạt động trên tệp đó, còn tập các người sử dụng khác chỉ có thể được phép đọc tệp Để làm được điều này, cần xác định một tên nhóm (group name) và tập những người sử dụng thuộc nhóm đó Các chức năng về nhóm có thể được thực thi nhờ một danh sách các tên nhóm và định danh (group ID) tương ứng Một người sử dụng có thể thuộc một hay nhiều nhóm phụ thuộc vào sự thiết kế hệ điều hành Group ID của người sử dụng cũng được gắn vào mọi tiến trình và luồng của người đó

Trang 33

TÓM TẮT

Chương 1 trình bày cái nhìn tổng quát về các thành phần chính của một hệ điều hành và tổ chức cơ bản của hệ thống máy tính Nội dung tổng quan chủ yếu tập trung vào cách tổ chức của hệ thống máy tính, cấu trúc và nguyên lý hoạt động của hệ điều hành, cách thức quản lý tiến trình bộ nhớ chính và lưu trữ dữ liệu Ngoài ra, chương này còn giới thiệu cơ chế bảo vệ an ninh của hệ điều hành Nội dung tiếp theo của chương 2 sẽ trình bày sâu hơn về cấu trúc của hệ điều hành

CÂU HỎI ÔN TẬP

1 Trong một môi trường chia sẻ thời gian và đa chương trình, một số người sử dụng đồng thời chia sẻ hệ thống Trạng thái này có thể gây ra các vấn đề an ninh:

a Cho biết hai vấn đề như vậy?

b Có thể đảm bảo được mức an ninh trong một máy chia sẻ thời gian giống như trong một máy không chia sẻ thời gian hay không? Giải thích câu trả lời của bạn?

2 Mục đích của ngắt là gì? Những sự khác nhau giữa bẫy lỗi (trap) và ngắt? Các bẫy lỗi

có thể được sinh ra bởi chương trình của người sử dụng hay không? Nếu có thì để nhằm mục đích gì?

3 Truy nhập bộ nhớ trực tiếp (DMA) được sử dụng cho các thiết bị vào/ra tốc độ cao để tranh làm tăng việc nạp thực hiện của CPU

Bằng cách nào CPU giao tiếp với thiết bị để kết hợp truyền dữ liệu?

Bằng cách nào CPU biết được khi các hoạt động bộ nhớ kết thúc?

CPU được phép thực hiện các chương trình khác trong khi bộ điều khiển DMA đang truyền dữ liệu Tiến trình có làm cản trở sự thực hiện của chương trình người sử dụng hay không? Nếu có, hãy mô tả các dạng cản trở đó?

4 Một số hệ thống máy tính không cung cấp chế độ hoạt động kernel mode trong phần cứng Có thể xây dựng được một hệ điều hành đảm bảo an ninh cho những hệ thống máy tính này hay không? Hãy thảo luận cả hai khả năng có thể và không thể

5 Đưa ra 2 lý do vì sao các cache hữu dụng Chúng giải quyết những vấn đề gì? Chúng gây

ra những vấn đề gì? Nếu có thể chế tạo được cache lớn như thiết bị mà nó làm đệm (ví dụ cache lớn như đĩa), tại sao không làm nó lớn như vậy và loại bỏ thiết bị kia?

6 Mô tả cơ chế thực hiện bảo vệ bộ nhớ để tránh không cho chương trình này sửa đổi

bộ nhớ của các chương trình khác?

7 Hệ điều hành là chương trình như một lớp nằm sát giữa hai lớp nào?

a Người sử dụng - Các chương trình ứng dụng và chương trình hệ thống

b Phần cứng máy tính - Các chương trình ứng dụng và chương trình hệ thống

Trang 34

c Người sử dụng - Phần cứng máy tính

d Các phương án trên đều sai

8 Chỉ ra phương án nào sau đây là chức năng của hệ điều hành:

a Cung cấp các tài nguyên tính toán cơ bản (CPU, memory, I/O devices)

b Điều khiển và sắp xếp việc sử dụng phần cứng trong các chương trình ứng dụng khác nhau đối với những người sử dụng khác nhau

c Định cách sử dụng tài nguyên hệ thống để giải quyết các bài toán của người sử dụng

d Cả 3 phương án trên đều đúng

9 Xác định phương án sai khi nói tới vào-ra đồng bộ (synchronous I/O)?

a Sau khi bắt đầu vào-ra, quyền kiểm soát chỉ quay lại chương trình của người sử dụng khi vào-ra đó kết thúc

b Chờ lệnh làm rỗi CPU cho đến khi có lệnh ngắt kế tiếp

c Chờ theo vòng lặp kiểm tra CPU rỗi → tranh chấp truy nhập bộ nhớ

d Tại một thời điểm, có thể có sự xử lý I/O đồng thời

10 Xác định phương án sai khi nói tới sự thực thi chế độ kép của HĐH:

a Chế độ kernel mode và user mode được lập cờ bởi mode bit

b Có tác dụng ngăn không cho các tiến trình hệ thống gây ảnh hưởng xấu tới các tiến trình của người sử dụng và tới HĐH

c Mode bit có thể được thiết lập bằng 0 khi có lời gọi system call, bằng 1 khi có return (từ system call)

d Các lệnh vào-ra luôn được thực thi trong kernel mode

11 Xác định phương án sai khi nói tới trách nhiệm của HĐH đối với việc quản lý các tiến trình:

a Tạo và xóa các tiến trình của hệ thống và của người sử dụng

b Tạm ngừng và tiếp tục lại các tiến trình

c Quyết định xem những tiến trình (hoặc những phần của chúng) và dữ liệu nào được đưa vào và đưa ra khỏi bộ nhớ

d Cung cấp các cơ chế cho sự đồng bộ hóa, giao tiếp tiến trình, xử lý bế tắc

Trang 35

Chương 2

CẤU TRÚC HỆ ĐIỀU HÀNH

Một hệ điều hành có thể được xem xét từ nhiều khía cạnh Một là tập trung vào các dịch vụ mà hệ điều hành cung cấp Hai là tập trung vào giao diện mà nó cung cấp cho người sử dụng và các lập trình viên Khía cạnh thứ ba là tập trung vào các thành phần của nó và các liên kết nối giữa chúng Chương này khai thác cả ba khía cạnh của hệ điều hành, chỉ ra quan điểm của người sử dụng, của lập trình viên và của người thiết kế hệ điều hành Chương này xem xét các dịch vụ nào mà một hệ điều hành cung cấp, cung cấp bằng cách nào và những phương pháp nào để thiết kế các hệ điều hành như vậy Cuối cùng, miêu tả cách mà các hệ điều hành được tạo ra và cách máy tính khởi động hệ điều hành của nó như thế nào

2.1 CÁC DỊCH VỤ CỦA HỆ ĐIỀU HÀNH

Hệ điều hành cung cấp một môi trường cho việc thực hiện các chương trình Nó cung cấp các dịch vụ cho các chương trình và người sử dụng những chương trình đó Tất nhiên các dịch vụ cụ thể khác nhau giữa các hệ điều hành, nhưng có thể xác định các lớp chung Các dịch vụ hệ điều hành giúp cho những người sử dụng và lập trình viên thực hiện các tác vụ của họ thuận tiện và dễ dàng hơn

Giao diện người sử dụng: Hầu hết tất cả các hệ điều hành có một giao diện người

sử dụng (user interface - UI) Có một số dạng giao diện Một trong số đó là giao diện

dòng lệnh (command-line interface - CLI), sử dụng các lệnh bằng chữ (text command)

và một chương trình cho phép nhập vào và soạn thảo lệnh Một dạng khác là giao diện

bó (batch interface), trong đó các lệnh và lệnh điều khiển chúng được nhập vào các tệp

và các tệp đó được thực hiện Phổ biến nhất là giao diện đồ họa (graphical user interface

- GUI), đó là một hệ thống cửa sổ với một thiết bị chỉ điểm để vào/ra trực tiếp, chọn từ các menu và một bàn phím để nhập vào chữ Một số hệ thống cung cấp 2 hoặc cả 3 dạng giao diện trên

Thực hiện chương trình: Hệ thống phải có khả năng nạp chương trình vào bộ nhớ

rồi chạy chương trình đó Chương trình phải có khả năng kết thúc thực hiện, hoặc theo cách bình thường hoặc theo cách bất thường (khi có lỗi)

Thực hiện vào/ra: Một chương trình đang chạy có thể yêu cầu vào/ra bao gồm một

tệp hoặc một thiết bị vào/ra Để phát huy hiệu quả và bảo vệ, người sử dụng thường không thể điều khiển trực tiếp các thiết bị vào/ra Vì vậy, hệ điều hành phải cung cấp biện pháp

để thực hiện vào/ra

Thao tác hệ thống tệp: Các chương trình cần đọc, ghi các tệp và thư mục; tạo, xóa

chúng thông qua tên; tìm kiếm, liệt kê thông tin về tệp và thư mục Một số chương trình

Trang 36

bao gồm quản lý quyền để cho phép hay từ chối truy nhập đến tệp và thư mục dựa trên quyền sở hữu

Giao tiếp: Trong nhiều trường hợp, một tiến trình cần trao đổi thông tin với tiến trình

khác Sự giao tiếp như vậy có thể diễn ra theo hai cách chính Thứ nhất là giao tiếp giữa các tiến trình đang thực hiện trên cùng một máy tính Thứ hai là giao tiếp giữa các tiến trình đang thực hiện trên các máy tính được nối mạng với nhau Sự giao tiếp có thể được thực hiện thông qua bộ nhớ chia sẻ (shared memory), hoặc bằng kỹ thuật truyền thông điệp (message passing) - các gói tin được chuyển giữa các tiến trình bởi hệ điều hành

Phát hiện lỗi: Hệ điều hành cần định kỳ nhận biết các lỗi Lỗi có thể xuất hiện trong

CPU hoặc phần cứng bộ nhớ (ví dụ như lỗi bộ nhớ hoặc lỗi nguồn điện), trong thiết bị vào/ra (như lỗi kết nối mạng, thiếu giấy trong máy in), trong chương trình người sử dụng (như lỗi tràn toán học, truy nhập vùng nhớ bất hợp lệ, sử dụng CPU quá lâu) Với mỗi loại lỗi, hệ điều hành thực hiện hành động tương ứng để đảm bảo sự đúng đắn và tính toán thích hợp

Ngoài ra, còn có một tập các chức năng hệ điều hành khác không phải để giúp cho người sử dụng mà để đảm bảo sự hoạt động hiệu quả của chính hệ điều hành Các hệ thống

đa người sử dụng có thể tạo sự hiệu quả bằng cách chia sẻ tài nguyên máy tính giữa họ

Phân phối tài nguyên: Khi nhiều người sử dụng đăng nhập vào hệ thống hoặc

nhiều công việc đang chạy tại cùng một thời điểm, các tài nguyên phải được phân phối cho tất cả trong số đó Nhiều loại tài nguyên khác nhau được quản lý bởi hệ điều hành Một số tài nguyên (như chu kỳ CPU, bộ nhớ chính) có thể có mã phân phối đặc biệt, còn các tài nguyên khác (như các thiết bị vào/ra) có thể có mã yêu cầu và giải phóng tổng quát hơn Ví dụ, để xác định sử dụng CPU như nào cho tốt nhất, hệ điều hành có các thường trình lập lịch CPU để xác định tốc độ của CPU, các công việc phải được thực hiện, số các thanh ghi khả dụng…

Tính toán thống kê (accounting): Cần theo dõi và ghi lại những người sử dụng

dùng loại tài nguyên máy tính nào và dùng bao nhiêu Việc lưu lại bản ghi này có thể được sử dụng để tính toán (để người sử dụng có thể thanh toán) hoặc đơn giản là để tính thống kê sự sử dụng Sự thống kê đó có thể là một công cụ đánh giá cho các nhà nghiên cứu muốn cấu hình lại hệ thống để cải tiến các dịch vụ tính toán

Bảo vệ (protection) và an ninh (security): Những người sở hữu thông tin được lưu

trong hệ thống máy tính đa người dùng có thể muốn kiểm soát sự sử dụng thông tin đó Khi một vài tiến trình khác nhau thực hiện đồng thời, có thể một tiến trình cản trở các tiến trình khác hoặc cản trở chính hệ điều hành Sự bảo vệ đảm bảo rằng tất cả sự truy nhập tới các tài nguyên hệ thống được kiểm soát An ninh của hệ thống từ bên ngoài cũng rất quan trọng An ninh bắt đầu với việc mỗi người sử dụng có một quyền riêng đối với hệ thống để được phép truy nhập các tài nguyên, thường bởi phương thức dùng mật khẩu

Mở rộng đến là giúp các thiết bị vào/ra ngoại vi (như modem, card mạng) chống lại các

Trang 37

truy nhập bất hợp lệ và ghi lại tất cả các kết nối như vậy để phát hiện xâm nhập Nếu một

hệ thống muốn được bảo vệ và an ninh, cần phải tiến hành phòng ngừa cẩn thận

2.2 GIAO DIỆN NGƯỜI SỬ DỤNG

Có hai phương pháp cơ bản để người sử dụng giao tiếp với hệ điều hành Một kỹ thuật

là cung cấp một giao diện dòng lệnh hay trình thông dịch lệnh (command interpreter), cho phép người sử dụng trực tiếp nhập lệnh để hệ điều hành thực hiện Phương pháp còn lại cho phép người sử dụng giao tiếp với hệ điều hành thông qua một giao diện đồ họa (GUI)

2.2.1 Trình thông dịch lệnh

Một số hệ điều hành tích hợp trình thông dịch lệnh trong kernel Các hệ điều hành khác, như Windows XP và UNIX, coi trình thông dịch là một chương trình đặc biệt, chạy khi một chương trình được khởi tạo hoặc khi một người sử dụng đăng nhập lần đầu Trên các hệ thống có nhiều trình thông dịch lệnh để chọn, các trình thông dịch đó được gọi là

các shell Ví dụ, trên các hệ thống UNIX và Linux có một số shell khác nhau như Bourne

shell, C shell, Bourne-Again shell, Korn shell… Hầu hết các shell cung cấp các chức năng

tương tự nhau

Chức năng chính của trình thông dịch lệnh là nhận và thực hiện lệnh kế tiếp từ người sử dụng Nhiều lệnh tại mức này thao tác với các tệp: tạo, xóa, liệt kê, in thông tin, sao chép, thực hiện… Các shell MS-DOS và UNIX hoạt động theo cách này Có hai cách chính để thực thi các lệnh

Cách thứ nhất là trình thông dịch lệnh chứa trong nó mã thực hiện lệnh Ví dụ, một lệnh xóa tệp có thể khiến trình thông dịch lệnh nhảy tới đoạn mã thiết lập các tham số và tạo lời gọi hệ thống thích hợp Theo cách này thì số lượng các lệnh sẽ xác định kích thước của trình thông dịch lệnh vì mỗi lệnh yêu cầu mã thực hiện của chính nó

Một cách khác - được sử dụng bởi UNIX - thực thi hầu hết các lệnh thông qua các chương trình hệ thống Trong trường hợp này, trình thông dịch lệnh không hiểu lệnh, nó chỉ sử dụng lệnh để xác định tệp được nạp vào bộ nhớ và được thực hiện Do đó, lệnh xóa

tệp của UNIX rm file.txt sẽ tìm một tệp có tên rm, nạp nó vào bộ nhớ rồi thực hiện nó với tham số file.txt Chức năng tương ứng với lệnh rm sẽ được xác định hoàn toàn bởi

mã trong tệp rm Theo cách này, người lập trình có thể thêm lệnh mới vào hệ thống dễ dàng bằng cách tạo tệp với tên tương ứng Chương trình thông dịch lệnh có thể nhỏ và không bị thay đổi khi thêm các lệnh mới

2.2.2 Giao diện đồ họa

Chiến lược thứ hai để giao tiếp với hệ điều hành là thông qua một giao diện đồ họa (GUI) thân thiện Thay vì để người sử dụng trực tiếp nhập lệnh qua giao diện dòng lệnh, GUI cung cấp một giao diện bao gồm hệ thống các cửa sổ và menu Có một nền màn hình (desktop) trên đó chuột được di chuyển để trỏ tới các biểu tượng (icon) đại diện cho các

Trang 38

chương trình, tệp, thư mục và các chức năng hệ thống Tùy thuộc vào vị trí của con trỏ chuột, việc kích một phím trên chuột có thể gọi một chương trình, chọn một tệp hoặc thư mục, hay thả xuống một menu chứa lệnh

Sự nghiên cứu giao diện đồ họa đầu tiên được tiến hành vào đầu những năm 1970 tại trung tâm nghiên cứu Xerox PARC GUI đầu tiên xuất hiện trên máy tính Xerox Alto vào năm 1973 Tuy nhiên, giao diện đồ họa trở nên rộng rãi hơn với sự phát triển của máy tính Apple Macintosh vào những năm 1980 Giao diện người sử dụng cho hệ điều hành Macintosh (Mac OS) đã trải qua nhiều thay đổi qua các năm, đáng chú ý nhất là giao diện

Aqua xuất hiện trên Mac OS X Phiên bản Windows 1.0 đầu tiên của Microsoft được dựa

trên việc thêm giao diện GUI cho hệ điều hành MS-DOS Các phiên bản Windows sau

đã có nhiều cải tiến về hình thức và chức năng, bao gồm Windows Explorer

Các hệ thống UNIX truyền thống được thống trị bởi các giao diện dòng lệnh, bao gồm Common Desktop Environment (CDE) và các hệ thống X-Windows phổ biến trên các phiên bản thương mại của UNIX như Solaris và hệ thống AIX của IBM Tuy nhiên,

có sự phát triển thiết kế GUI đáng chú ý từ các dự án mã nguồn mở như K Desktop Environment (KDE) và GNOME desktop bởi dự án GNU Cả KDE và GNOME chạy trên

Linux và các hệ thống UNIX khác

Sự lựa chọn sử dụng giao diện dòng lệnh hay GUI chủ yếu tùy vào sở thích cá nhân Như một quy tắc rất chung, nhiều người sử dụng UNIX thích giao diện dòng lệnh hơn vì chúng thường cung cấp các giao diện shell mạnh mẽ Còn hầu hết người sử dụng Windows thích sử dụng môi trường GUI và hầu như không bao giờ sử dụng giao diện shell MS-DOS Trước đây, Mac OS không cung cấp giao diện dòng lệnh Tuy nhiên, đến phiên bản Mac OS X (một phần được thực thi dùng kernel UNIX), hệ điều hành giờ đây cung cấp

cả giao diện Aqua mới và cả giao diện dòng lệnh

Trang 39

Khi đã lấy được 2 tên tệp, chương trình phải mở tệp nguồn và tạo tệp đích Mỗi thao tác này yêu cầu một lời gọi hệ thống và có thể gặp trạng thái lỗi Khi chương trình

cố gắng mở tệp nguồn, nó có thể phát hiện tệp không tồn tại hoặc tệp không cho phép truy nhập Trong những trường hợp này, chương trình sẽ in một thông báo trên màn hình (cần một chuỗi các lời gọi hệ thống nữa), sau đó kết thúc bất bình thường (cần một lời gọi hệ thống khác) Nếu tệp nguồn có tồn tại thì phải tạo tệp đích Nếu tệp đích có cùng tên thì có thể khiến chương trình bị hủy bỏ (cần một lời gọi hệ thống), hoặc có thể xóa tệp đã tồn tại (cần một lời gọi hệ thống khác) rồi tạo tệp mới (cần một lời gọi hệ thống nữa) Trong một hệ thống tương tác, một lựa chọn khác là hỏi người sử dụng xem có thay thế tệp đã tồn tại bằng một tệp mới hoặc hủy bỏ chương trình (cần một chuỗi các lời gọi

hệ thống để hiện ra thông báo gợi nhắc và đọc đáp ứng từ bàn phím)

Khi cả 2 tệp được thiết lập vào một vòng lặp đọc từ tệp nguồn (một lời gọi hệ thống)

và ghi lên tệp đích (một lời gọi hệ thống khác) Mỗi thao tác đọc và ghi phải trả về thông tin các tình trạng lỗi khác nhau có thể xảy ra Trên tệp nguồn, chương trình có thể kiểm tra đã đến cuối tệp hay chưa Trên tệp nguồn, nhiều lỗi khác nhau cũng có thể xuất hiện, phụ thuộc vào thiết bị đích (ví dụ như không đủ dung lượng đĩa trống, máy in hết giấy) Cuối cùng, sau khi toàn bộ tệp được sao chép, chương trình có thể đóng cả hai tệp (cần một lời gọi hệ thống khác), viết một thông báo trên màn hình (cần một số lời gọi hệ thống), rồi kết thúc một cách bình thường (lời gọi hệ thống cuối cùng) Những chương trình đơn giản cũng có thể sử dụng hệ điều hành rất nặng Hệ điều hành thực hiện hàng ngàn lời gọi hệ thống mỗi giây Chuỗi lời gọi này được chỉ ra như hình 2.1

Hình 2.1 Ví dụ về cách các lời gọi hệ thống được sử dụng

Ví dụ chuỗi lời gọi hệ thống

Lấy tên tệp nguồn Viết dòng nhắc ra màn hình Chấp nhận dữ liệu vào Lấy tên tệp đích

Viết dòng nhắc ra màn hình Chấp nhận dữ liệu vào

Mở tệp nguồn Nếu tệp không tồn tại, hủy bỏ việc Tạo tệp đích

Nếu tệp đã tồn tại, hủy bỏ việc Lặp

Đọc từ tệp nguồn Ghi lên tệp đích Đến khi không đọc được nữa Đóng tệp đích

Viết thông báo hoàn thành lên màn hình Kết thúc bình thường

Trang 40

Tuy nhiên, hầu hết người sử dụng không bao giờ thấy mức này một cách chi tiết

Thường những người phát triển ứng dụng thiết kế các chương trình theo một hệ giao diện lập trình ứng dụng (application program interface - API) API cung cấp cho người lập

trình ứng dụng một tập các hàm cùng các tham số và các giá trị trả về mà người lập trình

có thể mong muốn Ba loại API phổ biến nhất đối với các lập trình viên là Win32 API cho các hệ thống Windows, POSIX API cho các hệ thống dùng nền POSIX (gồm gần như tất cả các phiên bản của UNIX, Linux và Mac OS X) và Java API cho các chương trình chạy trên máy ảo Java Chú ý rằng tên của lời gọi hệ thống trong sách này chỉ là ví dụ Mỗi hệ điều hành có các tên lời gọi hệ thống riêng

Xét một ví dụ của API chuẩn, hàm ReadFile() trong Win32 API để đọc từ một tệp như hình 2.2

Hình 2.2 Hàm ReadFile() của API

Mô tả các tham số được truyền:

 HANDLE file - tệp để đọc

 LPVOID buffer - một vùng đệm để dữ liệu sẽ được đọc vào và ghi ra

 DWORD bytesToRead - số byte được đọc vào vùng đệm

 LPDWORD bytesRead - số byte đã đọc được trong lần đọc cuối cùng

 LPOVERLAPPED ovl - chỉ ra nếu vào/ra gối chồng được sử dụng

Ẩn phía sau thì các hàm API thường nhân danh là người lập trình ứng dụng để gọi các lời gọi hệ thống thật Ví dụ, hàm Win32 CreateProcess() thực sự gọi lời gọi hệ thống NTCreateProcess() trong kernel Windows Tại sao lập trình viên lại thích dùng API hơn là gọi các lời gọi hệ thống thực sự? Có một số lý do như sau: Lợi điểm thứ nhất là lập trình theo API có tính khả chuyển: chương trình có thể biên dịch và chạy trên bất kỳ hệ thống nào hỗ trợ API đó (dù thực tế cũng không dễ vì sự khác nhau về kiến trúc

hệ điều hành) Hơn nữa, các lời gọi hệ thống thật thường chi tiết hơn và khó dùng hơn so với các API

Hệ thống hỗ trợ trong giai đoạn chạy (run-time support system - một tập các hàm được xây dựng trong các thư viện đi cùng với trình biên dịch) cho hầu hết các ngôn ngữ

Ngày đăng: 17/07/2023, 20:54

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w