第3课_Linux进程管理
热度🔥:45 免费课程
授课语音
Linux进程管理
1. 进程实体
进程(Process) 是正在执行的程序的实例。在Linux操作系统中,进程是操作系统资源分配的基本单位。每个进程在内存中的表示包含以下重要实体:
- 程序计数器(Program Counter, PC):指示当前进程执行到的指令地址。
- 寄存器:保存进程运行时的临时数据,包括程序计数器、栈指针、基指针等。
- 内存:每个进程拥有独立的虚拟地址空间,包括代码段、数据段、堆栈等。
- 文件描述符(File Descriptor):进程打开的文件或设备的标识符,每个进程有自己的文件描述符表。
- 进程状态:当前执行状态,包括运行、就绪、阻塞等。
- 进程控制块(Process Control Block, PCB):Linux为每个进程维护的结构,包含进程ID、状态、优先级、内存映射、文件描述符表等信息。
Linux 特性:
- 每个进程由一个唯一的PID(进程ID)标识。
/proc
文件系统:Linux通过/proc
目录提供进程信息,每个进程在/proc/[PID]
目录下有专属的目录,包含其详细状态信息。
2. 五状态模型
Linux进程在生命周期中会经历以下五种主要状态:
1. 新建(New)
- 定义:进程通过系统调用(如
fork()
)被创建时处于新建状态。 - Linux机制:
- 分配PCB和所需资源。
- 初始化内存区域、打开文件表等。
- 状态转换:从新建到就绪。
2. 就绪(Ready)
- 定义:进程已准备好运行,但因CPU被占用,暂时不能执行。
- Linux机制:
- 就绪队列存储所有等待被调度的进程。
- 调度程序从队列中选择下一个运行的进程。
- 状态转换:从新建或阻塞到就绪。
3. 运行(Running)
- 定义:进程获得CPU并开始执行指令。
- Linux机制:
- 调度程序通过分配CPU时间片让进程进入运行状态。
- 在多核处理器上,多个进程可以同时运行。
- 状态转换:从就绪到运行,或因中断/时间片耗尽回到就绪。
4. 阻塞(Blocked)
- 定义:进程在等待I/O或其他事件时无法继续执行,进入阻塞状态。
- Linux机制:
- 阻塞队列存储等待的进程。
- 事件完成时进程被唤醒,回到就绪队列。
- 状态转换:从运行到阻塞,或从阻塞到就绪。
5. 完成(Terminated)
- 定义:进程执行完毕或被终止。
- Linux机制:
- 操作系统回收进程资源并删除PCB。
- 子进程的终止状态通过
wait()
或waitpid()
通知父进程。
- 状态转换:从运行到完成。
状态转换示意图
New -> Ready -> Running -> Blocked -> Ready -> Running -> Terminated
3. 进程同步
进程同步用于解决多进程访问共享资源时的竞争问题,确保数据一致性和系统稳定性。
1. 互斥锁(Mutex)
- 定义:确保同一时刻只有一个进程访问共享资源。
- Linux实现:通过
pthread_mutex_lock()
和pthread_mutex_unlock()
控制资源访问。
示例:
pthread_mutex_t lock;
pthread_mutex_init(&lock, NULL);
pthread_mutex_lock(&lock);
// 访问共享资源
pthread_mutex_unlock(&lock);
2. 信号量(Semaphore)
- 定义:信号量控制资源的可用数量,支持多个进程同步访问。
- Linux实现:通过
sem_wait()
和sem_post()
实现。
示例:
sem_t sem;
sem_init(&sem, 0, 1);
sem_wait(&sem);
// 访问共享资源
sem_post(&sem);
3. 条件变量(Condition Variable)
- 定义:允许进程等待某个条件满足后再执行。
- Linux实现:结合互斥锁使用,提供
pthread_cond_wait()
和pthread_cond_signal()
。
示例:
pthread_cond_t cond;
pthread_mutex_t lock;
pthread_cond_init(&cond, NULL);
pthread_mutex_init(&lock, NULL);
pthread_mutex_lock(&lock);
while (!condition_met) {
pthread_cond_wait(&cond, &lock); // 等待条件
}
// 条件满足后继续执行
pthread_mutex_unlock(&lock);
4. 死锁(Deadlock)
- 定义:多个进程相互等待资源导致的无法继续执行的状态。
- Linux避免措施:
- 资源预分配:一次性分配进程所需的所有资源。
- 超时机制:进程在等待资源时设定超时时间。
- 避免环路等待:分配资源时严格定义顺序。
总结
- 进程实体:包括程序计数器、寄存器、内存、文件描述符等,操作系统通过PCB管理进程。
- 五状态模型:新建、就绪、运行、阻塞和完成状态之间的转换由Linux调度程序管理。
- 进程同步:通过互斥锁、信号量、条件变量等机制,确保多进程环境下的资源安全与数据一致性。
Linux的进程管理机制确保了操作系统能够高效运行,同时提供丰富的工具和API供开发者使用。