Hệ điều hành (Part 3): Process

Ngày đăng: 2026-04-15

Lời nói đầu

Trong các bài viết trước thì chúng ta đã nhắc rất nhiều về các tiến trình hay còn gọi là Process. Mọi hoạt động của máy tính đều xoay quanh nó.

Ta có thể hiểu Process là thực thể hoạt động của Program. Bởi vì Program chỉ là các đoạn code được lưu trữ trong bộ nhớ dài hạn (Secondary Storage), nó chỉ có thể được thực thi khi được hệ điều hành nạp vào bộ nhớ chính (Main Memory) và được cấp phát các tài nguyên cần thiết như CPU, I/O Devices,...

Một cách khác dễ hiểu hơn (cho dân IT) thì Program chính là Class, còn Process chính là các Instance.

Và rõ ràng cũng như Class thì một Program cũng có thể có nhiều Process trong bộ nhớ chính.

Process Control Block (PCB)

Để hệ điều hành có thể quản lý các Process thì nó cần phải có một cấu trúc dữ liệu để lưu trữ thông tin về nó gọi là PCB.

Nôm na thì PCB giống như hồ sơ của bạn vậy và các chính phủ, công ty, nhà trường,... là OS. Muốn làm việc trong một hệ thống thì phải khai báo thông tin và trạng thái để OS quản lý.

Cấu trúc cơ bản của PCB bao gồm:

Mỗi tiến trình sẽ có một PCB và sẽ có một Process ID duy nhất để định danh nó trong vô số các tiến trình được nạp vào bộ nhớ.

Process State

Đây là thông tin về trạng thái của tiến trình và sẽ bị thay đổi trong suốt quá trình tồn tại trong hệ thống, bao gồm:

Sự thay đổi trạng thái của tiến trình trong hệ thống là việc tất yếu phải diễn ra, thường là do các sự kiện sau:

Sự thay đổi trạng thái của một Process trong hệ thống

CPU Scheduling

Lập lịch CPU là một bài toán kinh điển trong hệ điều hành. Người dùng muốn "bốc lột" CPU một cách tối đa, không cho nó thời gian nghỉ để tăng hiệu quả của toàn hệ thống. Vì thế nên họ cần phải sắp xếp, chuyển đổi và lập lịch các tiến trình để bảo đảm điều đó.

Việc này được thực hiện thông qua các hàng đợi:

Các Process sẽ chuyển đổi qua lại giữa các hàng đợi. Và để làm được điều này sẽ cần đến các bộ lập lịch Schedulers, bao gồm:

Sự phối hợp giữa các bộ lập lịch trong việc điều tiết Process State

Các Process trong hệ thống có thể được chia thành hai loại chính:

Long-term scheduler sẽ hướng đến việc trộn các loại Process này theo một thứ tự nào đó tối ưu nhất có thể.

Số lượng các Process nằm trong RAM được gọi là bậc đa chương (Degree of Multiprogramming) và con số này sẽ bị thay đổi bởi các bộ lập lịch kể trên.

Context Switch

Khi bộ lập lịch hoạt động và trao quyền sử dụng CPU cho các Process khác thì hệ điều hành lưu thông tin của nó vào PCB và tải thông tin từ PCB của tiến trình sắp được cấp phát thông qua một Context Switch (chuyển đổi ngữ cảnh).

Các thông tin của Process lưu trong PCB của nó được gọi là một Context.

Context Switch được xem là khoảng thời gian lãng phí của hệ thống bởi nó không thực hiện bất kỳ câu lệnh gì (kể cả I/O-bound lẫn CPU-bound). Hệ thống phải dành tài nguyên chỉ để tải thông tin và sau đó mới có thể thực hiện Process.

Khi hệ điều hành trở nên phức tạp và các thông tin của tiến trình trong PCB càng ngày càng lớn thì việc chuyển đổi ngữ cảnh sẽ tốn nhiều thời gian lẫn tài nguyên hơn.

Để tăng hiệu quả cho context switch thì một số hệ thống có nhiều tập các thanh ghi trên một CPU sẽ có khả năng tải nhiều context switch cùng một lúc (hoạt động song song).

Process Creation

Một Process đang chạy có thể tạo ra các Process con, các Process con này có thể tạo ra các Process cháu,... Từ đó hình thành nên một cây gia phả của Process đó.

Khi đó hệ thống sẽ phải cấp tài nguyên cho các Process con, dưới đây là 3 giải pháp cho việc đó:

Sẽ có 2 phương pháp chủ yếu để thực thi cây tiến trình này:

Process Termination

Việc kết thúc một tiến trình có thể diễn ra theo 2 hướng:

Khi một tiến trình kết thúc, nó sẽ hoặc đã thực hiện các câu lệnh cuối cùng của nó và nó sẽ yêu cầu hệ điều hành xóa nó đi.

Các dữ liệu đầu ra của nó sẽ được truyền cho tiến trình cha.

Các tài nguyên của tiến trình này sẽ được hệ điều hành giải phóng và cấp cho các tiến trình khác nếu nó là tiến trình con.

Còn khi một tiến trình cha kết thúc thì nó có thể sẽ kết thúc luôn các tiến trình con của nó bởi vì nó không còn tài nguyên được cấp của cha hoặc là nó nhiệm vụ của cha giao cho nó đã không còn nữa.

Một số hệ điều hành sẽ không cho phép tiến trình con tiếp tục chạy sau khi tiến trình cha kết thúc, tất cả các tiến trình con sẽ lần lượt bị kết thúc từ trên xuống, đây gọi là một cascading termination.

Còn với các hệ điều hành khác không hoạt động giống như vậy thì các tiến trình con như trên sẽ được gọi là tiến trình mồ côi (Orphan Process). Trong trường hợp tiến trình con đã hoàn thành xong nhiệm vụ của mình và trả về output cho tiến trình cha nhưng không có tiến trình cha nào đợi ouput của nó thì sẽ dẫn đến việc tiến trình đó tồn tại mãi trong hệ thống mặc dù đã chạy xong hết rồi, các tiến trình như trên được gọi là tiến trình thây ma (Zombie Process) gây lãng phí bộ nhớ.

Inner-Process Communication (IPC)

Các tiến trình cũng sẽ có thể được phân loại thành tiến trình hệ thống (do hệ thống khởi tạo) và tiến trình người dùng (do người dùng khởi tạo).

Các tiến trình bất kỳ sẽ có các mối quan hệ với nhau, có thể là chúng hoạt động đồng thời với nhau hoặc độc lập hoặc phối hợp với nhau.

Đối với các tiến trình phối hợp thì chúng sẽ phối hợp và truyền thông tin với nhau thông qua IPC. IPC cũng có 2 dạng là sử dụng vùng nhớ chung (Shared Memory) hoặc là sử dụng tin nhắn truyền đi (Message Passing).

Tài liệu tham khảo


← Quay lại trang chủ