Các thao tác với tiến trình

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 44)

Hoạt động quản lý tiến trình bao gồm một số công việc như tạo mới và kết thúc tiến trình, chuyển đổi giữa các tiến trình, điều độ, đồng bộ hóa, đảm bảo liên lạc giữa các tiến trình. Trong phần này, ta sẽ xem xét các thao tác tạo mới, kết thúc và chuyển đổi giữa các tiến trình. Những nội dung khác sẽ được xem xét trong các phần sau.

Tạo mới tiến trình

Một tiến trình có thể tạo ra tiến trình mới bằng cách gọi lời gọi hệ thống tương ứng của hệ điều hành. Khi người dùng chạy chương trình, trình dịch lệnh của hệ điều hành, ví dụ

Tiến trình 1 Tiến trình 2 Tiến trình 3 Tiến trình n …. Con trỏ tới bảng tiến trình PCB 1 PCB n Bảng tiến trình Đang chạy Sẵn sàng Chờ đợi đọc đĩa PCB PCB PCB PCB PCB PCB PTIT

Windows Explorer, chính là tiến trình yêu cầu thực hiện lời gọi hệ thống để tạo mới tiến trình. Tiến trình được tạo mới gọi là tiến trình con, tiến trình tạo ra tiến trình con gọi là tiến trình cha. Nếu tiến trình con tiếp tục tạo ra tiến trình mới thì dần dần sẽ có một cây tiến trình.

Để tạo ra tiến trình mới, hệ điều hành thực hiện một số bước sau:

a) Gán số định danh cho tiến trình được tạo mới và tạo một ô trong bảng tiến trình.

b) Tạo không gian nhớ cho tiến trình và PCB. Kích thước không gian nhớ được tính toán dựa trên thông tin về tiến trình mà hệ điều hành có. Tùy theo cách tạo mới, không gian nhớ của tiến trình con có thể chia sẻ hoặc không chia sẻ với tiến trình cha.

c) Khởi tạo PCB. Hệ điều hành gán giá trị cho các thành phần của PCB. Đa số giá trị ban đầu được gán theo mặc định (ví dụ giá trị không), trừ số định danh tiến trình, con trỏ lệnh, con trỏ ngăn xếp và một số giá trị khác.

d) Liên kết PCB của tiến trình vào các danh sách quản lý, ví dụ danh sách tiến trình mới khởi tạo, đặt con trỏ trong bảng tiến trình trỏ tới PCB.

Có hai kiểu tạo mới tiến trình khác nhau:

-Tiến trình con là một bản sao của tiến trình cha, tức là có cùng phần mã chương trình và phần dữ liệu. Cách này được thực hiện trong hệ điều hành UNIX bằng cách gọi lệnh fork().

-Tiến trình con được tạo thành từ một chương trình mới. Đây là cách tạo tiến trình được sử dụng trong Windows (bằng cách gọi lời gọi hệ thống CreateProcess()).

Kết thúc tiến trình

Tiến trình có thể yêu cầu hệ điều hành kết thúc mình bằng cách gọi lời gọi hệ thống exit(). Tiến trình thường kết thúc khi đã thực hiện xong và được gọi là kết thúc bình thường. Ngoài ra, tiến trình có thể kết thúc trong một số trường hợp sau:

-Bị tiến trình cha kết thúc. Thông thường, tiến trình cha có quyền kết thúc tiến trình con do mình tạo ra và có thể sử dụng quyền này khi không cần tiến trình con nữa hoặc khi tiến trình con dùng quá nhiều tài nguyên. Khi tiến trình cha kết thúc, hệ điều hành cũng có thể xóa mọi tiến trình con và tiến trình hậu duệ của tiến trình cha.

-Do các lỗi. Có nhiều loại lỗi có thể dẫn tới tiến trình bị kết thúc như: lỗi truy cập vùng bộ nhớ hoặc thiết bị vào/ra không được phép truy cập; các lỗi số học như chia cho không, tràn số; lỗi vào/ra như khi ghi ra đĩa một số lần không thành công.

-Tiến trình yêu cầu nhiều bộ nhớ hơn so với lượng bộ nhớ hệ thống có thể cung cấp. -Tiến trình thực hiện lâu hơn thời gian giới hạn. Tình huống này xảy ra đối với hệ

thống nhiều người dùng như các siêu máy tính và đòi hỏi đăng ký trước thời gian chạy cho tiến trình. Giới hạn thời gian cũng có thể dùng với các hệ thống tương tác trực tiếp và được tính bằng thời gian từ lúc người dùng yêu cầu cho tới khi tiến trình phản ứng lại.

-Do quản trị hệ thống hoặc hệ điều hành kết thúc. Ví dụ khi xảy ra các tình huống như bế tắc (xem phần về bế tắc).

Chuyển đổi giữa các tiến trình

Trong quá trình thực hiện, CPU có thể được chuyển từ tiến trình hiện thời sang thực hiện tiến trình khác hoặc mô đun xử lý ngắt của hệ điều hành. Trong những trường hợp như vậy, hệ điều hành cần lưu giữ các thông tin về tình trạng của tiến trình hiện thời để có thể khôi phục và thực hiện lại tiến trình từ điểm bị dừng. Thông tin về tiến trình hiện thời được gọi là

ngữ cảnh (context) của tiến trình, việc chuyển giữa tiến trình, do vậy, còn được gọi là chuyển đổi ngữ cảnh.

Việc chuyển tiến trình xảy ra trong hai trường hợp sau:

1) Khi có ngắt. Ngắt là kết quả của các sự kiện bên ngoài tiến trình (gọi là ngắt ngoài) hoặc do lỗi phát sinh trong bản thân tiến trình (gọi là ngắt trong).

Một số loại ngắt ngoài thông dụng bao gồm: ngắt do đồng hồ, được sinh ra do đồng hồ của hệ thống sau những khoảng thời gian nhất định và thường được sử dụng để phân phối CPU cho tiến trình khác sau khi tiến trình hiện thời đã chạy hết khoảng thời gian được phân bổ; ngắt vào/ra, ví dụ khi người dùng gõ bàn phím hoặc khi kết thúc đọc dữ liệu từ đĩa.

Ngắt trong là ngắt sinh ra khi có các lỗi nghiêm trọng hoặc những tình huống khiến tiến trình không thể thực hiện tiếp. CPU sẽ chuyển sang thực hiện mô đun xử lý lỗi của hệ điều hành.

2) Khi tiến trình gọi lời gọi hệ thống. Ví dụ tiến trình có thể gọi lệnh đọc file của hệ điều hành. Do kết quả các lệnh như vậy, hệ thống sẽ chuyển từ tiến trình gọi lời gọi hệ thống sang thực hiện hàm xử lý lời gọi hệ thống nằm trong thành phần hệ điều hành.

Như đã nói ở trên, ngữ cảnh của tiến trình được chứa trong PCB. Trước khi chuyển sang thực hiện tiến trình khác, ngữ cảnh (bao gồm nội dung các thanh ghi, thông tin về bộ nhớ …) được lưu vào PCB. Khi tiến trình được cấp phát CPU để thực hiện trở lại, ngữ cảnh sẽ được khôi phục từ PCB vào thanh ghi và những bảng tương ứng.

Vấn đề ở đây là ngữ cảnh phải bao gồm những thông tin nào ? Nói cách khác, thông tin nào phải được cập nhật và lưu vào PCB khi chuyển tiến trình? Tùy từng trường hợp cụ thể, những thông tin này có thể khác nhau.

Trong trường hợp đơn giản nhất, hệ thống chuyển sang thực hiện ngắt vào/ra, sau đó quay lại thực hiện tiếp tiến trình hiện thời. Ngữ cảnh cần lưu khi đó sẽ bao gồm những thông tin có thể bị hàm xử lý ngắt làm thay đổi, cụ thể là nội dung các thanh ghi và trạng thái CPU. Những thông tin này được lưu vào các vùng tương ứng trong PCB. Khi kết thúc ngắt, giá trị các thanh ghi và trạng thái CPU được cập nhật lại từ PCB và tiến trình có thể thực hiện lại từ vị trí trước khi bị ngắt.

Trong trường hợp phức tạp hơn, sau khi thực hiện ngắt, hệ thống có thể chuyển sang thực hiện tiến trình khác, chẳng hạn do kết quả điều độ tiến trình. Trong trường hợp như vậy,

việc chuyển đổi ngữ cảnh sẽ bao gồm thêm một số thao tác khác như: thay đổi trạng thái tiến trình, cập nhật thông tin thống kê trong PCB, chuyển liên kết PCB của tiến trình vào danh sách ứng với trạng thái mới, cập nhật PCB của tiến trình mới được chọn, cập nhật nội dung thanh ghi và trạng thái CPU bằng thông tin lấy từ PCB của tiến trình mới được chọn.

Như vậy, để chuyển tiến trình, hệ thống cần thực hiện một số bước liên quan tới việc lưu và khôi phục ngữ cảnh. Việc chuyển tiến trình, do vậy, đòi hỏi thời gian cùng với tài nguyên hệ thống và có thể ảnh hưởng tới tốc độ nếu diễn ra quá thường xuyên.

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 44)