1.4.1处理机管理功能
在传统的多道程序系统中,处理机的分配和运行都是以进程为基本单位的,因而对处理机的管理可归纳为对进程的管理。
处理机管理的主要功能有:创建和撤销进程,对诸进程的运行进行协调,实现进程之间的信息交换,以及按照一定的算法把处理机分配给进程。
1.进程控制
对进程的生命周期管理,通过原语操作完成系统态/用户态切换。
核心功能:
-
创建(Creation)
例:Linux 中
fork()
+exec()
组合(fork
创建子进程副本,exec
加载新程序)。 -
终止(Termination)
终止可能由程序正常结束、信号(如 `SIGKILL`)或错误触发。
-
切换(Context Switch)
时钟中断或系统调用触发,涉及 TLB 刷新性能问题。
-
状态管理
2. 进程同步
解决并发进程对共享资源的有序访问问题。
关键概念:
- 临界资源:一次仅允许一个进程使用的资源(如打印机)
- 临界区:操作临界资源的代码段
- 同步机制规则:空闲让进、忙则等待、有限等待、让权等待
典型实现:
-
生产者-消费者问题示例:
semaphore mutex = 1; // 互斥信号量 semaphore empty = N; // 空闲缓冲区数量 semaphore full = 0; // 已用缓冲区数量 producer() { while (1) { item = produce(); P(empty); P(mutex); add_item(item); V(mutex); V(full); } } consumer() { while (1) { P(full); P(mutex); item = remove_item(); V(mutex); V(empty); consume(item); } }
3. 进程通信
进程间数据交互的机制。
三种基本模式:
-
共享内存(Shared Memory)
- 直接映射到进程地址空间
- 需与信号量配合实现同步(如 POSIX 的
shm_open
)
-
消息传递(Message Passing)
- 直接通信:send/receive 需显式指定目标(如 MPI)
- 间接通信:通过邮箱或消息队列(如 POSIX
mq_open
)
-
管道(Pipe)
- 单向字节流(使用
pipe()
创建)
$ ls | grep .txt # 管道示例
- 单向字节流(使用
-
套接字(Socket)
- 跨网络通信(TCP/UDP)
4. 进程调度
决定 CPU 分配给哪个进程的机制。
调度层级:
调度算法:
算法类型 | 特点 | 应用场景 |
---|---|---|
先来先服务 (FCFS) | 公平,无饥饿现象,但长作业导致平均等待时间长 | 批处理系统 |
短作业优先 (SJF) | 最小化平均等待时间,但对长作业不公平 | 实时调度 |
时间片轮转 (RR) | 保证响应时间,时间片大小影响吞吐量 | 分时系统 |
多级反馈队列 (MLFQ) | 动态调整优先级,结合抢占式和时间片 | 通用系统如Linux |