授课语音

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供开发者使用。

去1:1私密咨询

系列课程: