第8章 进程控制

本文详细介绍了进程控制的相关概念,包括进程切换、进程创建、进程加载、进程等待与退出。重点讨论了fork()和vfork()的区别,以及进程在创建、执行和退出过程中涉及的内存管理、CPU状态和资源分配。同时阐述了wait()系统调用在父进程等待子进程结束中的作用,以及僵尸进程的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第8章 进程控制

进程切换(上下文切换):
定义:

  • 暂停当前运行进程,从运行状态变成其他状态
  • 调度另一个进程从就绪状态变成运行状态

要求:

  • 切换前,保存进程上下文
  • 切换后,恢复进程上下文
  • 快速切换

进程存储的生命周期的信息:

  • 寄存器(PC,SP,…)
  • CPU状态
  • 内存地址空间

在这里插入图片描述

进程控制块PCB:内核的进程状态记录

  • 内核为每个进程维护了对应的进程控制块PCB
  • 内核将相同状态的进程的PCB放置在同一队列

在这里插入图片描述

ucore的进程控制块结构:

  • 进程标识信息
  • 进程状态信息
  • 进程占用的资源(存储资源、内核堆栈等)
  • 保护现场用的内容
  • 当前进程在哪个队列

ucore+ 的进程切换
在这里插入图片描述
在这里插入图片描述
CR3寄存器与进程切换

僵尸进程

8.2 进程创建

进程创建:

  • Windows进程创建API:CreateProcess
  • Unix进程创建系统调用:fork/exec。
    • fork()把一个进程复制成两个进程,父子进程有各自的PID;
    • 接下来的exec()用新程序来重写当前新创建的进程,PID不改变

在这里插入图片描述

fork()的地址空间复制:fork()执行过程对于子进程而言,是在调用时间对父进程地址空间的一次复制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

空闲进程的创建:

  • 当用户代码执行完之后,系统将在空闲进程中执行。

在这里插入图片描述

用户态的进程创建之前,先创建了一个第一个内核线程的创建:
在这里插入图片描述

fork()的开销:

  • 对子进程分配内存
  • 复制父进程的内存和CPU寄存器到子进程里
  • 开销昂贵

在99%的情况里,我们在调用fork()之后调用exec()

  • fork()操作中内存复制是没有作用的
  • 子进程可能会关闭打开的文件和连接
  • 因此考虑将其合并到一个调用中,于是出现了vfork()。

vfork():

  • 创建进程时,不再创建一个同样的内存映像,而是当调用exec()时才开始复制,而要被覆盖或者关闭的资源不再进行复制
  • 一些时候称为轻量级fork()
  • 子进程应该几乎立刻调用exec()
  • 现在使用Copy on Write(COW)技术

8.3 进程加载

在这里插入图片描述

8.4 进程等待与退出

父进程等待子进程:

  1. wait()系统调用用于父进程等待子进程的结束
    子进程结束时通过exit()向父进程返回一个值
    父进程通过wait()接受并处理返回值

  2. wait()系统调用的功能
    有子进程存活时,父进程进入等待状态,等待子进程的返回结果。
    当某子进程调用exit()时,唤醒父进程,将exit()返回值作为父进程中wait的返回值(wait在前,exit在后)
    有子进程调用exit()而父进程还未调用wait()处理时,子进程被称为僵尸进程。如果此时父进程调用wait()则直接处理并返回
    无子进程或无子进程存活时,wait()也是立刻返回

  3. exit()用于进程的有序终止
    进程结束执行时调用exit(),完成进程资源回收。

  4. exit()系统调用的功能
    将调用参数作为进程的结果返回
    关闭所有打开的文件等占用资源
    释放内存
    释放大部分进程相关的内核数据结构
    检查是否父进程是存活的:如果父进程存活,保留结果的值直到父进程用wait()处理,进入僵尸状(zombie/defunct)态;如果父进程不存活,则子进程为孤儿进程,直接释放所有数据结果,进程结束
    以上检查完之后会清理所有等待的僵尸进程

  5. 进程终止是最终的垃圾收集

其他进程控制系统调用:
在这里插入图片描述

进程控制vs进程状态
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值