首先我们需要先理解进程在操作系统中的各种状态。
这七种状态通常包括:
- 运行状态(Running): 进程正在CPU上执行。
- 就绪状态(Ready): 进程已准备好运行,等待CPU。
- 阻塞状态(Blocked): 进程正在等待某些事件(如I/O操作完成)。
- 新建状态(New): 进程正在被创建。
- 终止状态(Terminated): 进程已结束执行。
- 挂起就绪状态(Ready Suspended / Ready Blocked):
进程在就绪状态,但被移到了外存。 - 挂起阻塞状态(Blocked Suspended / Blocked Blocked):
进程在阻塞状态,但被移到了外存。
Attention:进程准备好资源 ≠ CPU空闲 在Python中,由于没有直接的系统调用来模拟所有这些状态(尤其是挂起状态),我们可以通过在代码中创建状态变量和对应逻辑来模拟进程的行为。以下是一段简化了的Python代码,模拟了除“挂起”状态之外的进程状态变换:
import time
import random
import threading
class Process(threading.Thread):
def __init__(self, name):
super(Process, self).__init__()
self.name = name
self.state = 'New'
def run(self):
self.state = 'Running'
while True:
# Simulate a process execution
time.sleep(random.uniform(0.5, 1.5))
event = random.choice(['IO', 'Complete'])
print(event)
if event == 'IO':
self.state = 'Blocked'
print('Blocked')
# Simulate I/O operation
time.sleep(random.uniform(1.0, 2.0))
# I/O complete, moving back to Ready state
self.state = 'Ready'
print('Ready')
elif event == 'Complete':
self.state = 'Terminated'
print('Terminated')
break
if __name__ == "__main__":
process_list = [Process(f'Process-{i}') for i in range(5)]
for p in process_list:
p.start()
for p in process_list:
p.join()
print("All processes have been completed.")