操作系统八股文02-进程管理

操作系统八股文02-进程管理

1. 进程组成

  • PCB
  • 程序段
  • 数据段

进程状态保存在PCB中

2. 进程状态及调度

在这里插入图片描述

**调度类别:**作业调度、中级调度、进程调度(eg. FCFS、SJF、时间片轮转、多级反馈队列)

3. 进程与线程

3.1 基本概念

  • 进程:为了更好的实现操作系统的并发操作,资源分配的基本单位

  • 线程:为了提高操作系统的并发操作效率,调度的基本单位

同一进程中的线程共享进程中的资源,所以访问资源时需要保证线程安全(eg. 锁、信号量、条件变量、原子操作)

3.2 上下文切换

  • 进程上下文切换:需要保存寄存器、用户栈、PC寄存器、状态码、文件表、页表等
  • 线程上下文切换:需要保存寄存器、用户栈、PC寄存器等

4. 进程组、Session、终端

4.1 进程组

  • 一组进程的集合
  • 每个Group存在一个Leader,PGID = leader PID

4.2 Seesion

  • 一个或多个Group可构成一个Session
  • 每个Session存在一个Leader,SID = Leader PID
  • Session中的Group可称为Job,一个Session中包括一个前台Job若干个后台Job
    • 前台Job:继承Session的stdin、stdout、stderr
    • 后台Job:继承Session的stdout、stderr(jobs 查看后台job
  • 前台Job转后台Job
    • ~ &
    • ctrl+z,再执行bg
    • nohup ~ &

4.3 终端

  • 命令行界面,通过shell指令实现OS与User的交互
  • 一个Session和与一个终端绑定,作为输入输出的接口
  • 终端异常退出过程
    • 终端hongup
    • 内核向Session Leader发送SIGHUP信号
    • Session Leader向其他进程发送SIGHUP信号,杀死Session中的其他进程
    • Session Leader结束
  • 终端使用exit退出,不发送SIGHUP信号

5. 特殊进程

5.1 父子进程

  • 父进程中调用fork创建子进程

Fork返回值:返回0,表示当前为子进程;返回非0,表示当前为父进程,返回值为子进程的PID。

  • 父子进程暂时共享资源,当子进程读写操作时才复制资源

5.2 孤儿进程

  • 正常情况下,父进程fork出的子进程的资源由父进程负责回收(父进程通过调用wait/waitpid等待子进程结束并回收资源)
  • 当父进程未调用wait/waitpid直接结束,而子进程仍在运行时,子进程变为孤儿进程
  • 当进程变为孤儿进程时,其父进程变为init进程(PPID=1),并由init进程负责回收其资源

5.3 僵尸进程

  • 当子进程结束且退出状态没有被父进程捕获到(wait/waitpid)时,子进程未真正结束,而是变为僵尸进程
  • 解决方法
    • 父进程阻塞调用wait/waitpid
    • 父进程在SIGCHLD信号上绑定处理函数,并在函数中调用wait/waitpid
    • 父进程忽略SIGCHLD信号(SIG_IGN),此时子进程由init进程负责自动回收
    • 两次fork创建子进程(可看作孙子进程),此时子进程变为孤儿进程,结束时由init进程负责自动回收
  • 补救办法
    • Kill 父进程,此时僵尸进程变为孤儿进程,由init进程负责自动回收

5.4 守护进程

  • 后台运行,自己为Group Leader和Session Leader,独立于终端(见5)
  • 创建方法
    • 后台job + stdout、stderr重定向 + bash exit
    • nohup ~ &
    • fork fork & + 重定向

Nohup 使进程忽略SIGHUP信号

6. 进程间通信

  • 管道
    • 无名管道:一种特殊的内存文件,只存在于内存中,单向
    • 有名管道:FIFO文件,存在于文件系统中,单向
  • 共享内存:临界资源,需手动实现互斥访问,访问速度快
  • 消息队列:无需提供同步方法,进程可根据消息类型选择接受
  • 套接字:IP + port,可实现不同主机间的进程通信
  • 信号SIGHUP、SIGCHLD、ctrl+c、Kill
  • 信号量
    • System V 信号量
      • 常用于进程间通信,使用ID标识
      • 内核对象,独立与进程,内核管理
    • POSIX 信号量
      • POSIX 有名信号量
        • 与System V 信号量类似,使用名字标识
        • 在/dev/shm/中产生文件,管理时通过文件进行
      • POSI 无名信号量
        • 需要指定内存地址(私有内存用于线程通信,共享内存用于进程通信)
        • 一般用于线程/父子进程通信

7. 进程同步机制

  • 同步:直接制约关系,调整进程顺序
  • 互斥:间接制约关系,临界资源访问
  • PV操作、管程与条件变量、生产者与消费者

8. 死锁

  • 多个进程因竞争资源而造成的僵局

8.1 死锁产生的必要条件

  • 互斥条件
  • 不剥夺条件
  • 请求保持条件
  • 循环等待条件

8.2 死锁处理策略

  • 鸵鸟策略:不做任何操作
  • 死锁预防:进程开始前破坏四个必要条件之一
  • 死锁避免:进程运行过程中分配资源时,使用银行家算法寻找安全序列
  • 死锁检测和解除:发送死锁时进行如下操作
    • 检测:资源分配图是否可简化
    • 解除:资源剥夺、进程撤销、进程回退
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值