操作系统<OS>学习——第二、三章:进程与处理机

前言

时人不识凌云木,直待凌云始道高。————杜荀鹤《小松》


程序的执行:指程序在计算机系统中的运行过程。
程序并发执行:计算机能够同时处理多个具有独立功能的程序。
多道的执行环境的特点:

  • 独立性:每道程序都是逻辑上独立的
  • 随机性:多用户环境下,程序和数据输入与执行开始时间都是随机的。
  • 资源共享:资源共享将导致对程序执行速度的制约。(外设有限、内存有限等)

1-1、进程的定义、组成、组织方式、特征


在这里插入图片描述


一、进程的定义

  • 程序:就是一个指令序列,早期的计算机(只支持单道程序)。
    在这里插入图片描述
  • 引入多道程序技术后:
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


二、进程的组成

在这里插入图片描述

**进程控制快PCB的作用:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


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


三、进程的组织

在这里插入图片描述

链接方式:

在这里插入图片描述

索引方式:

在这里插入图片描述


四、进程的特征

在这里插入图片描述


在这里插入图片描述


小结:


在这里插入图片描述


1-2、进程的状态与转换


处理机的执行状态:

在这里插入图片描述


在这里插入图片描述


一、三种基本状态

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


二、另外两种状态


在这里插入图片描述


在这里插入图片描述


三、转换

进程状态的转换:
在这里插入图片描述
在这里插入图片描述


1-3、进程控制

在这里插入图片描述


一、什么是进程控制?


在这里插入图片描述


在这里插入图片描述


二、如何实现进程控制?


在这里插入图片描述


在这里插入图片描述


  • 原语 实现进程控制。原语的 特点 是执行期间 不允许中断,只能一气呵成。
  • 这种不可被中断的操作即 原子操作
  • 源于采用 “关中断指令” 和 “开中断指令” 实现

在这里插入图片描述


三、进程控制相关的原语

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


小结:

在这里插入图片描述


1-4、进程通信

在这里插入图片描述


一、共享存储

在这里插入图片描述


二、管道通信

在这里插入图片描述


三、消息传递在这里插入图片描述


小结:

在这里插入图片描述


1-5、线程概念和多线程模型

在这里插入图片描述


一、什么是线程,为什么要引入线程?

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


二、引入线程机制后,有什么变化?

在这里插入图片描述


三、线程的属性

在这里插入图片描述


四、线程的实现方式

  • 用户级线程(User-Level Thread , ULT
    在这里插入图片描述

  • 内核级线程(Kernel-Level Thread,KLT,又称 “内核支持的线程”)
    在这里插入图片描述


在这里插入图片描述


五、多线程模型

  • 多对一 模型:
    在这里插入图片描述

  • 一对一 模型:
    在这里插入图片描述

  • 多对多 模型:
    在这里插入图片描述


小结:

在这里插入图片描述


2-1、处理机调度

在这里插入图片描述


一、调度(Scheduling)的基本概念

调度的实质是一种资源分配
调度的目标是找出一种合理的、有效的安排方法,提高资源的利用率。
处理机调度是对处理机资源进行分配。

在这里插入图片描述


二、调度的三个层次

在这里插入图片描述


1、高级调度

在这里插入图片描述


作业:指在一个事物处理过程中由计算机系统所完成的工作。

  • 用户程序数据作业控制块(JCB) 这三部分组成,其中作业控制块记录了作业的全部信息。

在这里插入图片描述

2、中级调度

在这里插入图片描述


补充知识:进程的挂起态和七状态模型

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


三、低级调度(进程调度)

在这里插入图片描述


在这里插入图片描述


三层调度的联系、对比:

在这里插入图片描述


小结:

在这里插入图片描述


2-2、进程调度

在这里插入图片描述


一、进程调度的时机

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


在这里插入图片描述


二、进程调度的方式

在这里插入图片描述


三、进程切换与过程

在这里插入图片描述


小结:

在这里插入图片描述


2-3、调度算法的评价指标

在这里插入图片描述


一、CPU利用率

在这里插入图片描述


二、系统吞吐量

系统吞吐量:单位时间内完成作业的数量。

在这里插入图片描述


三、周转时间

在这里插入图片描述


在这里插入图片描述


四、等待时间

在这里插入图片描述


五、响应时间

在这里插入图片描述


小结:

在这里插入图片描述


2-4、调度算法

各种算法的学习思路:

  1. 算法思想
  2. 算法规则
  3. 这种调度算法是用于 作业调度 还是 进程调度
  4. 抢占式?非抢占式?
  5. 优点和缺点
  6. 是否会导致 饥饿饥饿:是指某进程或作业长期得不到服务)

在这里插入图片描述


在这里插入图片描述


一、先来先服务(FCFS,First Come First Serve)

在这里插入图片描述

  • 例题:在这里插入图片描述


一、短作业优先(SJF,Shortest Job First)

在这里插入图片描述


  • 例题:

  • 非抢占式的短作业优先短进程优先调度算法(SPF,Shortest Process First)
    在这里插入图片描述
  • 抢占式的短作业优先最短剩余时间优先算法(SRTN,Shortest Remaining Time Next)
    在这里插入图片描述

在这里插入图片描述


注意的小细节:

在这里插入图片描述


三、上述两种算法的比较

在这里插入图片描述


四、高响应比优先(HRRN,Highest Response Ratio Next)

在这里插入图片描述


  • 例题:在这里插入图片描述


小结:

:这几种算法主要关心对用户的公平性,平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也不关心任务的紧急程度,因此对用户来说,交互性很糟糕。 因此这三种算法一般适合用于早期的批处理系统,当然,FCFS算法也常结合其他算法使用,在现在也扮演着很重要的角色。

在这里插入图片描述


2-5、调度算法

各种算法的学习思路:

  1. 算法思想
  2. 算法规则
  3. 这种调度算法是用于 作业调度 还是 进程调度
  4. 抢占式?非抢占式?
  5. 优点和缺点
  6. 是否会导致 饥饿饥饿:是指某进程或作业长期得不到服务)

在这里插入图片描述


一、时间片轮转(RR,Round-Robin)

在这里插入图片描述


  • 例题:

  • 时间片为2:在这里插入图片描述在这里插入图片描述

  • 时间片为5
    在这里插入图片描述

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


一般来说,设计时间片时要让切换进程的开销占比不超过 1%


二、优先级调度算法

在这里插入图片描述


  • 例题:

  • 非抢占式的优先级调度算法在这里插入图片描述
  • 抢占式的优先级调度算法
    在这里插入图片描述

补充就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置。
根据优先级是否可以动态改变,可将优先级分为 静态优先级动态优先级 两种:

  • 静态优先级:创建进程时确定,之后一直不变。
  • 动态优先级:创建进程时会有一个初始值,之后会根据情况动态地调整优先级。

1、如何合理地设置各类进程的优先级?
通常:

  • 系统进程优先级 高于 用户进程
  • 前台进程优先级 高于 后台进程
  • 操作系统更偏好 I/O 型进程或称 I/O 繁忙型进程

注:I/O 型进程 相对的是 计算型进程或称 CPU 繁忙型进程

在这里插入图片描述


2、如果采用的是动态优先级,什么时候应该调整?
可以追求公平、提升资源利用率等角度考虑。

  • 如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
  • 如果某进程占用处理机运行了很长时间,则可以适当降低其优先级
  • 如果发现一个进程频繁地进行 I/O 操作,则可以适当提升其优先级

***思考?

在这里插入图片描述


三、多级反馈队列调度算法

在这里插入图片描述


  • 例题:在这里插入图片描述


小结:在这里插入图片描述


3-1、进程同步与进程互斥


在这里插入图片描述


在这里插入图片描述

一、进程同步在这里插入图片描述


二、进程互斥在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


小结:

在这里插入图片描述


3-2、进程互斥的软件实现方法在这里插入图片描述


一、单标志法

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


二、双标志先检查法在这里插入图片描述


三、双标志后检查法在这里插入图片描述


并发执行的异步性。


四、Peterson算法在这里插入图片描述

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


小结:在这里插入图片描述


3-3、进程互斥的硬件实现方法在这里插入图片描述


一、中断屏蔽方法

在这里插入图片描述


二、TestAndSet 指令(‘TS’指令)

在这里插入图片描述


三、Swap 指令

在这里插入图片描述


小结:在这里插入图片描述


3-4、信号量机制

在这里插入图片描述


信号量机制:

P原语:P是荷兰语Proberen(测试)的首字母。为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;
V原语:V是荷兰语Verhogen(增加)的首字母。为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。

在这里插入图片描述


一、整型信号量在这里插入图片描述


二、记录型信号量在这里插入图片描述


在这里插入图片描述


小结:

在这里插入图片描述


3-5、信号量的应用


在这里插入图片描述

一、利用信号量实现进程互斥在这里插入图片描述


二、利用信号量实现进程同步

进程同步:要让各并发进程按要求有序地推进。

在这里插入图片描述


在这里插入图片描述


三、利用信号量实现前驱关系

在这里插入图片描述


小结:

在这里插入图片描述


  • 经典问题:


一、生产者 - 消费者问题

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


二、多生产者 - 多消费者问题

三、吸烟者问题

四、哲学家进餐问题

五、读者 - 写者问题


3-10、管程

在这里插入图片描述


一、为什么要引入管程

在这里插入图片描述


二、管程的定义和基本特征

在这里插入图片描述


三、用管程解决生产者消费者问题

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


三、Java中类似于管程的机制在这里插入图片描述


小结:在这里插入图片描述


4-1、死锁在这里插入图片描述


一、什么是死锁

  • 每个人都占有资源,同时又在等待另一个人手里的资源。发生 “死锁”。
  • 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是 “死锁”。
  • 发生死锁后若无外力干涉,这些进程都将无法向前推进。
    在这里插入图片描述

在这里插入图片描述


二、死锁、饥饿、死循环的区别

  • 死锁: 各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
  • 饥饿: 由于长期得不到想要的资源,某进程无法向前推进的现象。比如,在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。
  • 死循环: 某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑 bug 导致的,有时是程序员故意设计的。

在这里插入图片描述


三、死锁产生的条件

在这里插入图片描述

在这里插入图片描述


四、什么时候会发生死锁?

在这里插入图片描述


五、死锁的处理策略

  • 预防死锁

  • 避免死锁

  • 死锁的检测和解除在这里插入图片描述


小结:

在这里插入图片描述


死锁的处理

在这里插入图片描述


一、预防死锁

预防死锁的方法是通过破坏产生死锁的四个必要条件,以避免发生死锁。

在这里插入图片描述


1、破坏互斥条件

互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。
由于互斥条件是非共享设备所必需的,不仅不能改变,还应加以保证。

在这里插入图片描述

2、破坏不剥夺条件

在这里插入图片描述


3、破坏请求和保持条件

在这里插入图片描述


4、破坏循环等待条件

在这里插入图片描述


小结:

在这里插入图片描述


二、避免死锁

在这里插入图片描述


1、什么是安全序列?

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

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


2、银行家算法

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


银行家算法代码实现:

在这里插入图片描述


小结:

在这里插入图片描述


三、死锁的检测和解除

在这里插入图片描述


1、死锁的检测

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


2、死锁的解除

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


小结:

在这里插入图片描述


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
进程和线程是操作系统中的两个基本概念,它们都是用来执行程序的执行单元,但在一些方面有着明显的区别。 1. 进程(Process): - 进程是程序在执行过程中的一个实例。 - 每个进程都有自己的独立内存空间,包括代码段、数据段和堆栈段。 - 进程之间相互独立,拥有各自的资源,通信需要通过进程间通信(IPC)机制。 - 进程拥有自己的进程控制块(PCB),用于描述进程的状态、资源和调度信息。 2. 线程(Thread): - 线程是进程中的一个执行单元。 - 多个线程可以共享同一个进程的内存空间,包括代码段、数据段和堆栈段。 - 线程之间共享进程的资源,如打开的文件、信号处理等。 - 线程由线程控制块(TCB)来描述,每个线程有自己的栈和寄存器上下文。 区别: 1. 资源占用:每个进程都有独立的内存空间和系统资源,而线程共享进程的资源。 2. 创建销毁开销:创建或销毁进程比线程开销大,因为进程需要分配独立的内存空间和系统资源,而线程只需要创建线程控制块。 3. 切换开销:进程切换的开销较大,需要保存和恢复整个进程的上下文,而线程切换只需要保存和恢复线程的上下文。 4. 通信和同步:进程间通信需要使用进程间通信机制,如管道、消息队列等。线程间通信和同步相对容易,可以使用共享内存、信号量、互斥量等机制。 总结: 进程和线程都是用于执行程序的执行单元,但进程是资源分配的基本单位,线程是CPU调度的基本单位。多线程比多进程更轻量级,线程之间的切换开销更小,但进程之间相互独立,安全性更高。在实际应用中,需要根据具体需求选择使用进程还是线程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

W_oilpicture

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

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

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

打赏作者

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

抵扣说明:

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

余额充值