Hệ điều hành - Chương 2: Quản lý tiến trình (Phần 1)
Bạn đang xem 20 trang mẫu của tài liệu "Hệ điều hành - Chương 2: Quản lý tiến trình (Phần 1)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- he_dieu_hanh_chuong_2_quan_ly_tien_trinh_phan_1.pdf
Nội dung text: Hệ điều hành - Chương 2: Quản lý tiến trình (Phần 1)
- HỆ ĐIỀU HÀNH (OPERATING SYSTEM CONCEPTS) Wiley - Operating System Concepts(Silberschatz).9th
- Giới thiệu môn học Mục tiêu môn học Vai trò của HĐH Nguyên lý hoạt động của HĐH đa nhiệm Nội dung Phần 1: Tổng quan (Overview) Phần 2: Quản lý tiến trình (Process Management) Phần 3: Quản lý bộ nhớ (Memory Management) Phần 4: Quản lý I/O (I/O Management) Phần 5: Quản lý hệ thống file (Storage Management) 1.2
- Process Management CHƯƠNG 2: QUẢN LÝ TIẾN TRÌNH - P1 1.3
- Nội dung Các khái niệm chương trình và tiến trình các thao tác & trạng thái của tiến trình khối điều khiển tiến trình PCB Điều phối tiến trình Liên lạc giữa các tiến trình Đồng bộ tiến trình Deadlock 1.4
- Tiến trình là gì? Process – tiến trình / quá trình = một chương trình đang thực thi = một tập các tài nguyên dùng để chạy một chương trình = nội dung bộ nhớ + nội dung các thanh ghi (+ trạng thái I/O) Chương trình (program) – tĩnh Tiến trình (process) – động Một process bao gồm : 1.5
- Hệ điều hành tổ chức ntn trên bộ nhớ? Nhắc lại một trong những chức năng của HĐH là cung cấp giao diện máy ảo giúp cho việc lập trình cho máy dễ dàng hơn Vì vậy, hình ảnh bộ nhớ của tiến trình phải có chứa HĐH Mã nguồn Bộ nhớ HĐH Vùng toàn cục Stack Mã nguồn Vùng toàn cục Heap Stack Vùng dữ liệu của HĐH dùng để lưu các biến, ví dụ tt mô tả tập tin sẽ được truy xuất bởi tiến trình, hay trạng thái thiết bị I/O, Heap v.vv. 1.6
- Process Control Block Trạng thái của mỗi tiến trình được lưu trong process control block (PCB) Được xem là dữ liệu trong phần dữ liệu của HĐH Tương tự như là đối tượng của một lớp 1.7
- PCB Các thông tin của một tiến trình: Identification: tiến trình, tiến trình cha, người dùng, nhóm, Trạng thái tiến trình Program counter CPU registers Thông tin lập lịch của CPU Thông tin liên quan bộ nhớ Thông tin sổ sách: mã số tiến trình, số lượng CPU, thời gian sử dụng CPU, Trạng thái I/O: danh sách file đang mở, danh sách các thiết bị đã cấp cho tiến trình Lưu vết thông tin 1.8
- Các trạng thái của Tiến trình States: New: process được khởi tạo Running: process ở trong CPU các lệnh đang được thực hiện Waiting (Blocked): process đang chờ một sự kiện nào đó xuất hiện Ready: process đang chờ đến lượt để được thực thi. Exit (Terminated): completed/error exit Chỉ có 1 process ở running trên mỗi procesor tại một thời điểm Có nhiều process chờ ready và waiting tại một thời điểm 1.9
- Các trạng thái của Tiến trình 1.10
- CPU chuyển đổi giữa các tiến trình 1.11
- Ví dụ hàng đợi Ready 1.12
- Process Scheduler Trong hệ multiprogramming và time-sharing, bộ lập lịch thực hiện chức năng điều phối các tiến trình Chọn tiến trình được xử lý bởi CPU trong số các tiến trình đang chờ được xử lý. Quản lý các hàng đợi read queue, I/O device queues Chuyển ngữ cảnh 1.13
- Lập lịch tiến trình (Process Scheduling) 1.14
- Tạo tiến trình Làm sao tạo một tiến trình? Sử dụng System call. Trong UNIX, một tiến trình có thể tạo một tiến trình khác bằng fork() (system call) int pid = fork(); /* ngôn ngữ C */ Tiến trình tạo gọi là tiến trình cha và tiến trình mới gọi là tiến trình con Tiến trình con là một bản sao của tiến trình cha (giống “hình dáng” và cấu trúc điều khiển tiến trình) ngoại trừ identification và trạng thái điều phối Tiến trình con và cha chạy trên hai vùng bộ nhớ khác nhau Mặc định là không có chia sẻ bộ nhớ Chi phí tạo tiến trình là lớn vì quá trình copy Hàm exec() cũng để tạo một tiến trình, nhưng thường là tạo tiến trình của chương trình mới chứ không phải gọi lại chính nó 1.15
- System Call 11 bước để thực hiện 1 system call read (fd, buffer, nbytes) 1.16
- Tạo tiến trình 1.17
- Ví dụ tạo tiến trình sử dụng Fork() int main() { Pid_t pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Failed"); exit(-1); } else if (pid == 0) { /* child process */ execlp("/bin/ls", "ls", NULL); } else { /* parent process */ /* parent will wait for the child to complete */ wait (NULL); printf ("Child Complete"); exit(0); } } 1.18
- Kết thúc tiến trình Một tiến trình có thể đợi một tiến trình khác hoàn thành bằng hàm wait() (system call) Có thể là đợi cho tiến trình con thực thi xong như ví dụ trên Cũng có thể đợi một tiến trình bất kì nào đó, phải biết PID của nó Để “hủy” một tiến trình khác dùng kill() (system call) Điều gì xảy ra khi kill() được gọi? Điều gì xảy ra nếu tiến trình “nạn nhân” vẫn chưa muốn “chết”? 1.19
- Kết thúc tiến trình Tiến trình kết thúc khi : Normal exit ( tự nguyện ) Error exit ( tự nguyện ) Fatal error exit ( ép buộc ) Được kết thúc bởi một tiến trình khác ( ép buộc ) Một system call được gửi tới HĐH yêu cầu thực hiện kết thúc một tiến trình Trong Unix : exit() => kết thúc tự nguyện kill() => kết thúc ép buộc 1.20
- Kết thúc tiến trình Tiến trình xử lý statement cuối và hỏi OS để xóa nó (exit) Output data từ child sang parent (thông qua wait) Tài nguyên tiến trình được giải phóng bởi OS Parent có thể kết thúc tiến trình của child (abort) Child vượt quá tài nguyên được phân bổ Nhiệm vụ gán cho child không còn được yêu cầu Nếu parent kết thúc Một số OS không cho phép child tiếp tục hoạt động khi parent kết thúc – Tất cả child bị kết thúc cascading termination 1.21
- Cây tiến trình trong hệ UNIX thông thường 1.22
- Tóm tắt Khái niệm tiến trình . Phân biệt tiến trình với chương trình Các trạng thái của tiến trình. Sự thay đổi trạng thái. Khối thông tin quản lý tiến trình (PCB) Tạo tiến trình Kết thúc tiến trình 1.23