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:
- Process State lưu trạng thái hiện tại của Process (Running, Waiting,...).
- Program Counter lưu vị trí của câu lệnh sẽ được thực thi tiếp theo.
- CPU Registers lưu giá trị của tất cả các thanh ghi đang được tiến trình sử dụng.
- CPU Scheduling Information lưu thông tin về việc lập lịch CPU của Process này (độ ưu tiên, vị trí trong hàng đợi,...).
- Memory Management Information lưu thông tin về các vùng nhớ được gán cho Process này.
- Accounting Information lưu các thông tin liên quan đến số liệu của Process này (sử dụng bao nhiêu CPU, đã chạy được bao lâu, thời gian bắt đầu, thời gian kết thúc,...).
- I/O Status Information lưu thông tin về các thiết bị nhập xuất, các file được Process này sử dụng.
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:
- New là trạng thái chỉ có trong hệ điều hành loại Batch, được gán cho tiến trình khi nằm trong RAM.
- Ready là khi Process nằm trong RAM được cấp CPU để làm việc.
- Running là trạng thái khi các lệnh của Process được CPU thực thi.
- Waiting (còn gọi là Blocked) khi đang chạy thì nhiều lúc Process sẽ phải chờ đợi một sự kiện nào đó, ví dụ như đợi thiết bị I/O đang bị chiếm giữ bởi Process khác, thì nó sẽ được đưa vào hàng đợi Waiting và được gán trạng thái Waiting.
- Terminated Process hoàn thành xong nhiệm vụ của mình (hoặc bị lỗi) và trả về ROM.
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:
- Một Process mới được tạo ra,
- Một Process nào đó yêu cầu một tài nguyên (CPU, I/O Devices),
- Một tài nguyên nào đó được giải phóng (CPU, I/O Devices),
- Một tiến trình khác có độ ưu tiên cao hơn được nạp vào RAM -> các Process có độ ưu tiên thấp hơn phải nhường vào đi vào hàng đợi Waiting,
- Thời gian hạn định Time Slice của một Process đã bị vượt qua, lúc này thì bộ định thời System Timer của hệ thống sẽ phát tính hiệu ngắt về thời gian,
- Các tính hiệu ngắt của hệ thống hoặc lỗi được tạo ra bởi Process hiện tại.
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:
- Job queue là tập hợp các Process trong hệ tống.
- Ready queue là tập hợp các Process đang chờ nhận CPU.
- Devices queue là tập hợp các Process đang chờ nhận I/O Devices.
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:
- Long-term scheduler (job scheduler) lựa chọn xem Process nào nên được đưa vào Ready queue, tức là nên cấp RAM cho Process nào. Vì là lập lịch dài hạn nên nó không được gọi thường xuyên.
- Short-term scheduler (CPU scheduler) lựa chọn xem Process nào nên được cấp CPU và được thực thi tiếp theo. Nó sẽ được gọi rất thường xuyên và phải hoạt động cực kì nhanh chóng. Trong một số hệ thống thì đây là bộ lập lịch duy nhất.
- Medium-term scheduler là bộ lập lịch trung hạn có thể được thêm vào các hệ thống hiện đại phục vụ cơ chế Swapping.
Các Process trong hệ thống có thể được chia thành hai loại chính:
- I/O-bound process: liên quan đến việc nhập xuất nhiều hơn là tính toán, sử dụng CPU nhiều lần nhưng mỗi lần sử dụng sẽ ngắn.
- CPU-bound process: liên quan đến việc tính toán nhiều hơn là nhập xuất, sử dụng CPU ít lần nhưng mỗi lần sử dụng sẽ rất lâu.
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 đó:
- Cách 1: Cha và con sẽ cùng xài chung một lượng tài nguyên.
- Cách 2: Con sẽ xài một phần tài nguyên do cha chia sẻ.
- Cách 3: Process con sẽ được hệ thống cấp phát tài nguyên riêng để xài.
Sẽ có 2 phương pháp chủ yếu để thực thi cây tiến trình này:
- Cách 1: Cha con làm việc một lúc (song song).
- Cách 2: Process cha sẽ đợi process con thực thi xong rồi mới tới nó.
Process Termination
Việc kết thúc một tiến trình có thể diễn ra theo 2 hướng:
- Volunteer (tự nguyện) bao gồm việc kết thúc khi hoàn thành xong, bị Internal Error hoặc gặp Exception (kết thúc nếu không tìm thấy file đầu vào,...).
- Involunteer (không tự nguyện) đúng như tên thì tiến trình bị kết thúc (kill) bởi một tiến trình khác như task manager chẳng hạn hoặc là khi nó gặp một fatal error (lỗi chia cho 0, truy cập vùng nhớ trái phép,...).
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
- Abraham Silberschartz, Peter Baer Galvin, Greg Gagne, Operating System Concepts, 9th Edition.
- Tutorialspoint, Operating System - Processes. [Trực tuyến]. Có sẵn tại Tutorialspoint (Truy cập 2026).
← Quay lại trang chủ