Là một thực thể động, tiến trình có thể thuộc những trạng thái khác nhau. Có nhiều cách phân biệt trạng thái tiến trình. Theo cách đơn giản nhất, tiến trình thuộc một trong hai trạng thái: chạy và không chạy. Chạy là khi các lệnh của tiến trình được CPU thực hiện và không chạy là trường hợp ngược lại, ví dụ khi CPU đang được phân phối cho tiến trình khác hoặc khi tiến trình phải dừng để chờ kết quả vào/ra.
Cách sử dụng hai trạng thái tiến trình là quá đơn giản và không đủ để phản ánh đầy đủ thông tin về trạng thái tiến trình. Trên thực tế, hệ điều hành thường phân biệt năm trạng thái khác nhau của tiến trình: mới khởi tạo, sẵn sàng, chạy, chờ đợi, kết thúc. Ý nghĩa cụ thể năm trạng thái như sau:
-Trạng thái mới khởi tạo: tiến trình đang được tạo ra. Hệ điều hành đã tạo ra các thông tin về tiến trình tuy nhiên tiến trình chưa được thêm vào danh sách những tiến trình được phép thực hiện. Thông thường, tiến trình ở trạng thái này chưa nằm trong bộ nhớ.
- Trạng thái sẵn sàng: tiến trình chờ được cấp CPU để thực hiện lệnh của mình.
-Trạng thái chạy: lệnh của tiến trình được CPU thực hiện. Với những máy tính có một CPU và CPU có một lõi, tại mỗi thời điểm chỉ có một tiến trình nằm trong trạng thái chạy.
-Trạng thái chờ đợi: tiến trình chờ đợi một sự kiện gì đó xảy ra, ví dụ chờ tín hiệu từ tiến trình khác hoặc chờ kết thúc quá trình vào/ra. Trạng thái chờ đợi còn được gọi là trạng thái bị phong tỏa (blocked).
-Trạng thái kết thúc: tiến trình không còn nằm trong danh sách các tiến trình được thực hiện nhưng vẫn chưa bị xóa. Tiến trình thuộc về trạng thái này sau khi đã thực hiện xong hoặc bị tiến trình khác kết thúc.
Việc sử dụng các trạng thái “mới khởi tạo” và “kết thúc” cho phép phân biệt rõ các bước trong quá trình tạo mới và kết thúc tiến trình. Hệ điều hành thường tạo ra tiến trình mới với hai bước. Bước một, hệ điều hành gán cho tiến trình số định danh, tạo ra các cấu trúc dữ liệu chứa thông tin về tiến trình. Bước hai, hệ điều hành thêm tiến trình vào danh sách các tiến trình được phép thực hiện bằng cách liên kết thông tin về tiến trình vào danh sách tương ứng. Trạng thái “mới khởi tạo” là trạng thái trước khi thực hiện bước hai.
Quá trình kết thúc tiến trình cũng bao gồm hai bước tương tự như tạo mới nhưng theo thứ tự ngược lại. Ở bước một, tiến trình bị chuyển khỏi danh sách các tiến trình đang thực hiện sau khi đã thực hiện xong hoặc do bị tiến trình khác kết thúc. Tuy nhiên, hệ điều hành vẫn giữ các thông tin về tiến trình và các thông tin này có thể được sử dụng chẳng hạn để thống kê thời gian chạy hoặc bộ nhớ đã sử dụng. Ở bước hai, hệ điều hành xóa toàn bộ thông tin về tiến trình và giải phóng các vùng bộ nhớ tương ứng. Trạng thái “kết thúc” là trạng thái trước khi thực hiện bước hai.
Mô hình năm trạng thái tiến trình là mô hình được sử dụng rộng rãi nhất trong các hệ điều hành, mặc dù tên gọi cụ thể từng trạng thái có thể thay đổi trong hệ điều hành cụ thể.
Hình 2.1. Sơ đồ chuyển đổi giữa các trạng thái của tiến trình
Lưu ý: Trong một số hệ điều hành, có thể chia nhỏ và phân biệt nhiều trạng thái hơn nữa. Chẳng hạn, một số hệ điều hành sử dụng thêm trạng thái treo (suspended), trong đó tiến trình tạm dừng toàn bộ việc thực hiện hoặc thậm chí tạm bị chuyển từ bộ nhớ ra đĩa.
Ý nghĩa việc chuyển đổi giữa các trạng thái. Việc chuyển trạng thái xảy ra trong những trường hợp nhất định. Sơ đồ chuyển đổi giữa các trạng thái được thể hiện trên hình 2.1. Ý nghĩa các chuyển đối trạng thái như sau:
-Mới khởi tạo Sẵn sàng: tiến trình đã được khởi tạo xong và đã được tải vào bộ nhớ, chỉ chờ được cấp CPU để chạy, khi đó tiến trình sẽ được chuyển từ trạng thái mới sang trạng thái sẵn sàng. Trong trường hợp số lượng tiến trình lớn hơn số lượng CPU, tiến trình ở trạng thái sẵn sàng sẽ phải đợi cho tới khi được cấp CPU
Mới khởi tạo Sẵn sàng Chạy thúc Kết Chờ đợi Điều độ CPU Ngắt Vào/ra hoặc chờ sự kiện Kết thúc vào/ra PTIT
-Sẵn sàng Chạy: do kết quả điều độ (phân phối CPU) của hệ điều hành, tiến trình được hệ điều hành cấp phát CPU và chuyển sang trạng thái chạy.
-Chạy Sẵn sàng: hệ điều hành thu hồi CPU của tiến trình đang chạy và cấp phát CPU cho tiến trình khác do kết quả điều độ hoặc do xảy ra ngắt, tiến trình hiện thời chuyển sang trạng thái sẵn sàng và chờ được cấp CPU để chạy tiếp. Thông thường, việc này xẩy ra khi tiến trình đã thực hiện hết một khoảng thời gian nào đó trong các hệ thống chia sẻ thời gian và đồng hồ sinh ngắt để hệ điều hành có thể thu hồi CPU và chuyển sang chạy tiến trình tiếp theo.
-Chạy Chờ đợi: tiến trình chuyển từ trạng thái chạy sang trạng thái chờ đợi (bị phong tỏa) nếu tiến trình có yêu cầu với hệ thống và phải chờ đợi đến khi yêu cầu được thỏa mãn. Trường hợp điển hình nhất là khi tiến trình gọi lời gọi hệ thống, chẳng hạn để vào/ra dữ liệu. Ví dụ, tiến trình đọc dữ liệu từ file bằng cách gọi lời gọi hệ thống đọc file. Lời gọi được chuyển cho hàm đọc file của hệ điều hành thực hiện. Trong khi yêu cầu này chưa được hoàn tất, tiến trình không thể thực hiện tiếp. Trong trường hợp này, tiến trình chuyển sang trạng thái chờ đợi hoặc còn gọi là trạng thái bị phong tỏa (blocked).
-Chờ đợi Sẵn sàng: khi sự kiện được chờ đợi đã xảy ra, tiến trình sẽ được chuyển sang trạng thái sẵn sàng và chờ được phân phối CPU để chạy tiếp.
-Chạy Kết thúc: tiến trình đã thực hiện xong, được chuyển sang trạng thái kết thúc trước khi chấm dứt sự tồn tại.
Trong một vòng đời của mình, tiến trình thường phải chuyển qua lại nhiều lần giữa các trạng thái “sẵn sàng”, “chạy” và “chờ đợi” trước khi hoàn thành và chuyển sang trạng thái kết thúc.