创建进程
- 为新进程分配一个唯一的进程标识符(pid)。
- 为新进程分配资源,如内存空间、文件描述符、信号处理函数等。
- 初始化新进程的进程控制块(PCB),包括设置初始状态、优先级、程序计数器等。
- 将新进程插入就绪队列,等待调度。
进程切换
- 时间片用完:当一个进程执行了一定时间后,如果还没有结束或阻塞,操作系统会强制将其从执行状态转换为就绪状态,让出CPU给其他进程。
- 阻塞:当一个进程需要等待某个事件发生(如输入输出完成、信号到达等)时,它会主动放弃CPU,从执行状态转换为阻塞状态,直到事件发生才能重新就绪。
- 抢占:当一个高优先级的进程就绪时,操作系统会暂停当前正在执行的低优先级的进程,将其从执行状态转换为就绪状态,并将CPU分配给高优先级的进程。
- 结束:当一个进程完成了它的任务或被其他进程杀死时,它会从执行状态转换为结束状态,并释放所有占用的资源。
改变进程优先级
- 在Linux系统中,可以通过nice和renice命令来设置和改变进程的优先级。nice命令可以在启动进程时指定其初始优先级,如nice -n 10 ./a.out表示以10为优先级运行a.out程序。renice命令可以在进程运行时修改其优先级,如renice -n 5 1234表示将pid为1234的进程的优先级改为5。
- 在Linux系统中,还可以通过调整进程的调度策略来设置实时进程的优先级。调度策略决定了进程在CPU上运行的方式和时间。Linux支持多种调度策略,如SCHED_OTHER、SCHED_FIFO、SCHED_RR等。实时进程通常使用SCHED_FIFO或SCHED_RR策略,并且有一个0到99之间的实时优先级值。可以通过sched_setscheduler函数来设置进程的调度策略和实时优先级。