Thực hành Hệ điều hành - Bài thực hành: Tiến trình

Giải quyết biến toàn cục như a và b dễ dàng hơn
Chỉ việc cấp phát bộ nhớ cho chúng
Được làm lúc thời gian biên dịch (compile time)
Mỗi lần truy xuất a là việc truy cập vào vùng nhớ đã cấp cho biến a
Giả sử a lưu tại ô 2000
Thì, a = a + 1 có thể được biên dịch như sau
 

loadi 
load 
add 
store
2000, R1
R1, R2
R2, 1, R2
R1, R2


 

pdf 33 trang xuanthi 30/12/2022 2480
Bạn đang xem 20 trang mẫu của tài liệu "Thực hành Hệ điều hành - Bài thực hành: Tiến trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfthuc_hanh_he_dieu_hanh_bai_thuc_hanh_tien_trinh.pdf

Nội dung text: Thực hành Hệ điều hành - Bài thực hành: Tiến trình

  1. Mô hình Von Neuman Cả chương trình và dữ liệu đều ở trên bộ nhớ Vòng lặp thực thi Lấy lệnh Giải mã lệnh CPU Thực thi lệnh Bộ nhớ ĐH KHTN TpHCM 2 TH 106: Hệ Điều Hành
  2. Chúng ta lập trình như thế nào? class foo { }; Làm sao tạo chương trình static int a = 0; như vậy trong máy von static int b = 0; Neuman? void main() { Lưu biến a, b ở đâu? foo foo_obj = new foo(); foo_obj.cheat(); Biến foo_obj và c lưu ở đâu? } Làm sao thực hiện void foo::cheat() { foo_obj.cheat()? int c = a; a = a + 1; if (c < 10) { cheat(); } } ĐH KHTN TpHCM 4 TH 106: Hệ Điều Hành
  3. Biến cục bộ Biến foo_obj trong main() và c trong hàm cheat() thì sao? 2000 a Đầu tiên chúng ta sẽ nghĩ là cũng sẽ cấp vùng nhớ cho chúng là xong 2004 b (như hình bên) 2008 c Có vấn đề gì với cách tiếp cận này? Chúng ta sẽ giải quyết vấn đề này ra sao? ĐH KHTN TpHCM 6 TH 106: Hệ Điều Hành
  4. Đối tượng mới thì sao? foo foo_obj = new foo(); foo_obj thật ra là một con trỏ trỏ tới một đối tượng foo Như đã thảo luận, bộ nhớ trong stack được cấp phát cho foo_obj mỗi khi main() được gọi Thật sự đối tượng mới được tạo cư trú ở đâu sau lệnh “new foo” ? Liệu stack có phải là nơi thích hợp để lưu đối tượng? Tại sao không? ĐH KHTN TpHCM 8 TH 106: Hệ Điều Hành
  5. Truy xuất dữ liệu Làm sao tìm dữ liệu được cấp phát động trên stack? Giải pháp, thiết kế 1 thanh ghi như là stack pointer Stack pointer luôn trỏ tới activation record hiện hành Stack pointer trỏ tới vị trí lệnh đầu tiên của hàm Mã thay đổi giá trị stack pointer được phát sinh bởi trình biên dịch Địa chỉ offsets của biến cục bộ và tham số được lưu trong thanh ghi SP activation record c PC SP của cheat() CPU ĐH KHTN TpHCM 10 TH 106: Hệ Điều Hành
  6. Activation Record Chúng ta chỉ mới thảo luận về việc cấp phát biến cục bộ trên stack Các giá trị khác Activation record được dùng để lưu: Tham số của thủ tục Biến cục bộ Địa chỉ bắt đầu của activation record trước Địa chỉ trả về Các biến cục bộ ĐH KHTN TpHCM 12 TH 106: Hệ Điều Hành
  7. Tổ chức bộ nhớ trong lúc CT đang thực thi Mỗi biến được phân loại vào các vùng lưu trữ Biến toàn cục (static) Mã Được cấp phát trong vùng toàn cục lúc biên Vùng toàn cục dịch Stack Biến cục bộ và tham số của hàm Cấp phát động trên stack Các đối tượng được tạo mới khi thực thi (sử dụng phương thức new) Heap Cấp phát động từ heap Bộ nhớ Các đối tượng tồn tại vì lời gọi hàm??? Bộ thu gom rác (garbage) sẽ thu hồi lại vùng nhớ của đối tượng khi nó không còn dùng nữa ĐH KHTN TpHCM 14 TH 106: Hệ Điều Hành
  8. 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. ĐH KHTN TpHCM 16 TH 106: Hệ Điều Hành
  9. 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 ĐH KHTN TpHCM 18 TH 106: Hệ Điều Hành
  10. Các trạng thái của tiến trình ĐH KHTN TpHCM 20 TH 106: Hệ Điều Hành
  11. Ví dụ hàng đợi Ready ĐH KHTN TpHCM 22 TH 106: Hệ Điều Hành
  12. 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ó ĐH KHTN TpHCM 24 TH 106: Hệ Điều Hành
  13. Tạo tiến trình ĐH KHTN TpHCM 26 TH 106: Hệ Điều Hành
  14. Hủy 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”? ĐH KHTN TpHCM 28 TH 106: Hệ Điều Hành
  15. Tín hiệu (Signals) Chương trình người dùng gọi các dịch vụ của HĐH bằng system calls Phải làm sao khi chương trình muốn HĐH báo hiệu cho nó khi có sự kiện xảy ra một cách bất đồng bộ? Phát tín hiệu Cơ chế của UNIX là báo cho chương trình người dùng biết những sự kiện nó quan tâm Các sự kiện như là: v.d., lỗi truy cập segment, có thông điệp, kill. Khi muốn xử lý một sự kiện cụ thể nào đó (signal), tiến trình báo cho HĐH biết và gửi thủ tục xử lý sự kiện này cho HĐH Tiến trình báo cho HĐH biết sự kiện nó quan tâm như thế nào? ĐH KHTN TpHCM 30 TH 106: Hệ Điều Hành
  16. Tóm tắt: tiến trình Một “nhân bản” của chương trình Mức trừu tượng: một tập các tài nguyên đủ để thực thi một chương trình Execution context(s) Không gian địa chỉ Thao tác tập tin, truyền thông, v.v Tất cả các điều trên được “chỉ” vào một khái niệm chung Gần đây, chia ra thành vài khái niệm Tiểu trình, không gian địa chỉ, vùng được bảo vệ, v.v,. Quản lý tiến trình của HĐH: Hỗ trợ người dùng tạo tiến trình và liên lạc giữa các tiến trình (IPC) Cấp phát tài nguyên cho tiến trình, tùy thuộc vào chính sách cụ thể Tăng khả năng tận dụng hệ thống bằng cách đồng bộ nhiều tiến trình ĐH KHTN TpHCM 32 TH 106: Hệ Điều Hành