从零开始的操作系统60分速成

前言:后天考试,一学期没去上课啥都不会,于是从零开始学OS了。打算边学边写一篇博客,一些考不到或太繁杂的知识就不说了,面向60分学习(

如果文中有错误还请各位大佬指出QAQ

以下内容部分参考王道论坛的《操作系统考研复习指导》(@avgstuBoboge大佬发的pdf,有水印)。



(huj:)主观题考点:进程同步和互斥,信号量的使用,死锁和饥饿,虚拟页式,虚拟段页,虚拟多级分页,地址转换,缺页中断,页面替换,进程调度,磁盘调度。

2.进程

2.1 概述

由于多道程序环境的并发执行,各程序失去了封闭性。此时,为了控制调度程序的并发执行,我们引入了进程的概念。

进程可以看作程序的一次执行过程,是系统进行资源分配的最小单位。进程具有以下性质:

  • 动态性:进程并非一成不变,而是具有不同的状态和过程,动态性是进程最基本的特征
  • 并发性:多个进程能在一段时间内同时进行,显著提高资源利用率。
  • 独立性:进程是独立运行、获得资源、接受调度的基本单位。
  • 异步性:由于进程间的相互制约,导致了进程的间断性,这也造成了执行结果的不可再现性。因此,操作系统必须配置相应的同步机制。
  • 结构性:进程实体由程序段数据段PCB(Process Control Block)组成。

创建/撤销进程的本质是对PCB的创建/撤销。

未建立PCB的程序无法作为独立单位参与运行,即PCB是进程存在的唯一标志

2.2 五状态模型

上回说到,进程具有动态性,由此可见,进程通常具有以下五种状态,其中就绪、阻塞、运行是三个基本状态。

在这里插入图片描述

进程执行过程

五状态模型下进程执行的过程,简而言之就是:

进程正在被创建时是创建态,创建完成就进入了就绪态,当该进程被调度,得到了资源就进入了运行态,如果:

(1)运行的时候需要等待某些事件(如I/O设备)就会进入阻塞态,等到所等待的事件发生就会回到就绪态

(2)运行的时间过长,用完了当前的时间片,就会让出资源回到就绪态

(3)运行结束,一切正常,去往终止态等待消亡。

进程在状态间的转移,实质上是PCB的创建、删除、入/出队。

进程间通信

进程间要进行数据交换,就必然需要通信方法,效率较高的进程间通信方法主要有三类:

  • 共享存储:通信的进程拥有共享空间,通过对空间进行直接访问可以实现进程间通信。
  • 消息传递:进程通过系统提供的发送/接受消息的两个原语来进行数据交换。可以直接发送给对方,也可以发送到一个中间实体后转运给对方。
  • 管道通信:管道(pipe)是连接一对进程以实现它们之间通信的共享文件,管道的本质是一个固定大小的缓冲区。可以理解为共享存储的优化和发展。

线程

线程可以理解为一个轻量级进程,是基本的CPU执行单元,也是程序执行流的最小单元。

一个进程中有多个线程,线程不拥有系统资源,但是和同一进程中的其他线程共享该进程的所有资源。提高了操作系统的并发性能。

进程可以创建进程和线程,线程只可以创建其他线程。

每个线程和进程一样,拥有唯一的标识符。

2.3 处理机调度

三级调度

一个作业从提交至完成,往往要经历以下三级调度:

  1. 作业调度(高级调度):按一定原则分为资源给一或多个作业并建立相应进程。
  2. 中级调度:挂起暂时不能运行的进程至外存,使外存中可以运行的进程变为就绪态并入队。
  3. 进程调度(低级调度):根据调度算法将CPU分配给某个进程。进程调度是最基本的一种调度

在这里插入图片描述

无法调度的情况

  • 在处理中断的过程中:中断过程复杂且不属于某一进程,不应被剥夺CPU资源。
  • 进程在操作系统内核程序临界区中:进入临界区后需要独占式访问共享数据。
  • 原子操作过程中。

进程调度方式

  • 剥夺调度方式:立即暂停当前执行的进程并抢占CPU。
  • 非剥夺调度方式:等到当前进程执行完再抢占CPU,无法适用于分时和大多数的实时系统。

调度性能评价

  • CPU利用率。
  • 系统吞吐量:单位时间内CPU完成作业的数量。
  • 周转时间:作业从提交到完成所经历的时间。
  • 在这里插入图片描述
  • 等待时间:进程处于等待CPU状态的时间之和。调度算法实质上影响的是等待时间
  • 响应时间:用户提交请求到系统首次产生响应的时间。

经典调度算法

  1. FCFS算法:FCFS,就是先提交的作业先运行,属于不可剥夺算法
  2. SJF算法:短作业优先算法,不考虑作业紧迫程度,优先选择运行时间最短的作业。可能导致长作业长期不被调度(饥饿现象)。
  3. 优先级调度算法:根据静态和动态优先级将CPU分配给优先级最高的作业。
  4. 高响应比优先调度算法:综合了FCFS和SJF算法,选出 [响应比=(等待时间+执行时间)/执行时间] 最高的作业运行。
  5. 时间片轮转调度算法:以时间片为单位按到达时间循环执行就绪队列中的作业,主要用于分时系统。
  6. 多级反馈队列调度算法:上述算法之集大成者,设置多个优先级、时间片大小不同的就绪队列。高优先级队列在时间片内无法完成,则压入次级队列,最后一级队列进行时间片轮转调度算法。当且仅当高优先级队列为空时才会运行次级队列中的作业。

(好像只考4&5来着

2.4 同步与互斥

由于进程具有异步性,为了让不同程序经过调度得到确定的结果,我们需要利用原语对进程进行同步,从而得到需要的结果。

PV操作

wait(S)//P
{
   
    while(S<=0);
	S--;
}
signal(S)//V
{
   
    S++;
}

同步问题

  • 生产者-消费者问题
  • 读者-写者问题
  • 哲学家进餐问题
  • 吸烟者问题

具体例子就略了,书上肯定有,这里说一下做这类题目的思考方法:

假设所有进程并行,考虑各进程之间的关系与临界资源制约的最坏情况,利用 m u t e x mutex mutex达到互斥的目的。

注意 N N N个临界资源时,互斥信号量的范围为取值 − ( N − 1 ) − 1 -(N-1)-1 (N1)1

2.5 死锁

当P进程拥有A资源请求B资源,Q进程拥有B资源请求A资源的时候就发生了死锁

死锁产生的条件

  • 互斥:进程拥有的资源无法同时被多个进程占有。
  • 不剥夺:进程所拥有的资源无法被释放,除非该进程主动释放。
  • 请求和保持:进程拥有着某个资源的同时请求其他资源。
  • 循环等待:进程对资源的拥有与请求形成的有向图是一个环。

当且仅当四个条件都被满足的时候才会发生死锁。

死锁的处理策略

  • 预防:设置限制使四个条件无法全部满足以预防死锁
  • 避免:分配资源时防止系统进入不安全状态。
  • 检测及解除:及时检测死锁的发生并解除。

银行家算法

银行家算法是最著名的死锁避免算法,核心思想是让系统时刻处于能够满足所有可能需求的安全状态

数据结构

  • A v a i l a b l e [ m ] Available[m] Available[m]
  • 34
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值