【操作系统原理概述】第四章 进程管理

第四章 进程管理

4.1 进程概念

  • 4.1.1 进程概述

    • (1)定义:程序在某个数据集合上的一次运行活动
    • (2)特性:动态性(程序为静态长存),并发性,异步性,独立性(作为系统分配与调用CPU的单位)
    • (3)类型:系统和用户进程;计算型进程和I/O进程(用户交互)
  • 4.1.2 进程状态
    在这里插入图片描述

    • 运动、就绪、阻塞态
  • 4.1.3 LINUX进程状态
    在这里插入图片描述

    • 可运行、阻塞、僵死、挂起态
  • 4.1.4 进程控制块PCB

    • 描述进程状态、资源和与相关进程关系的数据结构
    • 进程 = 程序(代码 + 数据) + PCB

4.2 进程控制

  • 4.2.1 进程控制

    • (1)四种控制:进程创建(包括标识ID,优先级,起始地址等),进程撤销(资源与PCB),进程阻塞,进程唤醒
    • (2)原语:若干指令构成的具有特定功能的函数,必须一次执行完不能停止
  • 4.2.2 Windows进程控制

    • System(),CreateProcess(),ExitProcess(),TerminateProcess()
  • 4.2.3 LINUX进程控制

    • 所有的子进程都来自父进程:pid_t pid = fork(void),子父不同功能:exec(包含函数)函数簇

4.3 线程

  • 4.3.1 线程概念

    • (1)一个进程多线程,CPU可独立运行(最小调度单位可以是线程,但是一般还是取进程)
    • (2)CreateThread()函数,单线程与多线程程序
  • 4.3.2 线程典型应用场景

    • (1)线程典型应用场景:多功能并发、提升窗口交互性
    • (2)LINUX:pthread_create()函数

4.4 临界区和锁

  • 4.4.1 临界资源和临界区

    • (1)临界资源:一个只允许一个进程独占访问的资源
    • (2)临界区:锁住的临界资源的前后区域
    • (3)原则:忙则等待,空闲让进,有限等待,让权等待
  • 4.4.2 锁机制

    • (1)基本原理:设置标志S = 1表明临界资源是否可用,1可用 ,0不可用
    • (2)实现:Locks()操作S减1,Unlocks()操作S加1

4.5 同步与P-V操作

  • 4.5.1 同步与互斥的概念

    • (1)进程互斥:多个进程共享独占性资源,必须协调各进程对资源的存取顺序
    • (2)进程同步:若干合作进程为了完成一个共同的任务,需要相互协调运行步伐。一个进程开始某个操作之前必须要求另一个进程已经完成某个操作,否则前面的进程只能等待
  • 4.5.2 P-V操作

    • (1)信号灯:进程运行过程受信号灯状态控制,并能改变信号灯状态
    • (2)数据结构:一个二元矢量(s,q);s(信号量)为整数,初值为负;q为PCB队列(存进程PCB的指针),初值为空集
    • (3)P操作,S减1;若差大于或等于0,进程继续;若差小于0,则该进程阻塞并加入到队列q中,并转调度
    • (4)V操作:S加1;若和大于0,进程继续;若和小于或等于0,该进程继续同时从q中唤醒一个进程
  • 4.5.3 P-V操作解决互斥问题

    • 设置S = 1,在临界区前后进行PV操作
  • 4.5.4 P-V操作解决同步问题

    • (1)同步实质:运行条件不满足则暂停,运行条件满足时则继续
    • (2)基本思路:定义合理的S初值(如S1 = S2 = 0),关键操作前P操作,关键操作后S操作
  • 4.5.5 经典同步问题

    • (1)生产者消费者问题
      在这里插入图片描述

      • 规则:不能向满缓冲区存;不能向空缓冲区取;每个时刻只允许一个消费者/生产者来取/存产品
      • 实现核心:缓冲区是临界区,要被互斥使用
    • (2)读者与编者问题
      在这里插入图片描述

      • 规则:允许多个读者同时读;不允许读者与编者同时操作;不允许多个编者同时操作
      • 实现核心:循规蹈矩,并注意读者对于编者权限的限制方式设计(互斥量累加,保证必有1)

4.6 Windows与Linux的同步机制

  • 4.6.1 Windows

    • (1)临界区机制:CRITICAL SECTION
    • (2)等待函数:WaitForXXXObject,其中EnterCS为P操作,LeaveCS为V操作
    • (3)互斥量:与PV操作的区别在于可以跨线程使用
    • (4)信号量:允许多个进程/线程访问临界区,其中WaitForSingleObject信号量减1(>0有信号);ReleaseSemaphore信号量加1(<=0无信号)
  • 4.6.2 Linux

    • (1)进程调用wait(int status):阻塞自己,等待子进程结束后销毁自己
    • (2)Exit终结进程:释放资源并上报父进程
    • (3)Sleep休眠:根据输入时间来休眠

4.7 进程通信

  • 4.7.1 匿名管道通信

    • (1)管道通信机制:pipe,程序A→pipe(R→W)→程序B,即将A的输出重定向为B的输入
    • (2)设计思路:父进程的UI在前台运行→子进程作为底层在后台运行→UI与底层管道实现了双向通信
    • (3)实现过程:两根管道1和2,父进程中的输入作为管道1的Read,子进程的输入作为管道1的Write;子进程中的输出作为管道2的Read,父进程的输出作为管道1的Write;
  • 4.7.2 Linux通信

    • (1)信号Signal:Ctrl + C→SIGINT(杀死整个进程);Ctrl + Z→SIGTSTP(暂停);kill-9→SIGKILL(杀死当前进程)
    • (2)信号机制编程:(与QT的信号槽很类似),在函数Signal(信号编号,处理函数)中定义对应信号编号的处理函数

对应思维导图

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方寸间沧海桑田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值