计算机操作系统期末复习大题详解速成不挂课

2023-10-09 17:40

本文主要是介绍计算机操作系统期末复习大题详解速成不挂课,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 写在前面
    • 缺页问题
    • 计算物理地址
    • 银行家算法
    • 磁盘调度
    • 进程调度

写在前面

  • 这遍博客主要是记录博主期末操作系统速成的笔记!
  • 博主平时不听课,全靠期末速成
  • 学霸可以自行离开
  • 笔记内容来自于B站UP主:夜连三 视频:【操作系统】操作系统期末考试不挂科 大题详解 从0开始的不挂科生活 内容,学渣拯救者!!!40分钟速成,大家可以去看!
    在这里插入图片描述

常考的五大题型

  • 缺页问题
  • 计算物理地址
  • 银行家算法
  • 磁盘调度
  • 进程调度

缺页问题

三类算法:

  • 先进先出FIFO(First Input First Output)
  • 最佳置换算法OPT(Optimal replacement)
  • 最近最少使用LRU(Least Recently used)

例题:

在一个请求分页系统中,假如一个作业的页面走向为:1.2.3.4.5.1.4.1.2.3.4.5 ,当分配给该作业的物理块数为4时,分别采用FIFO,LRU,OPT算法,计算访问过程中发生的缺页次数和缺页率!

解题步骤:

  • 读题划重点信息 :页面走向,物理块数!
  • 画表 页面走向第一行!
  • 开局4缺页!因为这4个页面都要放入到cpu中!

FIFO算法

要点:先进先出!看那个页面最先进就替换!

每次替换左边出现次数最多的页面!看谁长,谁长替换谁!

页面走向123451412345
物理页0111155555544
物理页122221111115
物理页23333332222
物理页3444444333
缺页

缺页次数为10 缺页率:5/6

OPT算法

要点:

最佳替换算法,看已经在物理页中的页面在右边最后使用到的先替换!

淘汰的页面将是未来长时间内不再被访问的页面!

就比如:开始1234 然后5要替换,后面有 14123显然 3最后使用!所以先替换3!

页面走向123451412345
物理页0111111111333
物理页122222222222
物理页23355555555
物理页3444444444
缺页

缺页次数为6 缺页率:1/2

LRU算法

要点:

最近最少使用算法!最近未使用!

看需要添加页面的左边,页面走向哪个页面理该页面最远就替换该页面!!!

直接看页面走向就可以!

这里要和FIFO区分开!!!

先进先出,看哪个物理页最长!

LRU最近最少使用,看页面走向哪个理该页面最远!

页面走向123451412345
物理页0111155555333
物理页122221111115
物理页23333332222
物理页3444444444
缺页

缺页:9 缺页率:3/4

总结:

  1. 缺页问题,先画图,页面走向数+1为列,物理块+2为行!

  2. 开局都缺页!

FIFO:看(整个表)左边,谁长替换谁!

OPT:看(表头)右边,谁最远替换谁!

LRU:看(表头)左边,谁最远替换谁!

计算物理地址

物理地址计算3步曲!

  • 求出页号
  • 对照页表
  • 计算地址

地址转换:

绝对地址 = 块号*块长 + 块内地址

例题:

在采用页式存储管理的系统中,某进程的逻辑地址空间为4页(每页2048字节),且已知该进程的页面映像表(页表)如下:

页号块号
02
14
26
38

计算有效逻辑地址4865所对应的物理地址.

解题:

读题划重点: 每页多少字节, 页表,有效逻辑地址!

3步曲解题!

页号:

页号 = 逻辑地址/每页字节数

d = 4065/2048 = 2

对照页表:

根据页号找到块号!

看页表 ,页号2对应块号6!

数地址:

绝对地址 = 块号*块长 + 块内地址

块内地址= 逻辑地址%每页字节数

块内地址: 4065%2048 = 769

地址:6*2048 + 769 = 13057

银行家算法

2种题型

  • 判断系统是否"死锁"
  • 提供安全系列

例题:

假定系统中有5个进程{ P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别是10,5,7,在T0时刻的资源分配情况如下图所示:

资源MAXAllocationNeedAvailable
进程ABCABCABCACB
P0753010743332
P1322200122
P2902302600
P3222211011
P4433002431

1.判断在T0时刻的安全性?

2.P1请求资源:P1发出请求向量Request(1,0,2),系统按照银行家算法进行检查!

3.P4请求资源:P4发出请求向量Request(3,3,0),系统按照银行家算法进行检验!

MAX:进程所需资源

Allocation:系统已经分配给进程的资源数

Need:进程还需要的资源数; Need=MAX - Allocation

Available:系统剩余的资源数;Available=Total-AllAllocation

解题:

第一问:

  • 题目可能会给我们资源分配表,也可能不给我们,我们需要创建该表进行解题!

  • Need是我们需要计算的! MAX - Allocation

  • Available: Total(题目给的总资源数) - AllAllocation(全部已经分配的资源数)

  • 画一张新表

Work:当前所剩资源

work+allocation:计算机处理完当前进程后所剩资源!

资源WorkNeedAllocationwork+allocationFinish
进程ABCABCABCABC
P1332122200532T
P3532011211743T
P4743431002745T
P0745743010755T
P27556003021057T

我们根据上面的表得到的Available剩余进程数,看那个进程Need<=Available先执行填入到work

然后一步步将该表完善!1

如果最后一行得到的work+allocation与题目所给的总资源数一样说明结果正确!

如果都可以完成说明进程安全!

p1,p3,p4,p0,p2就是一组线程安全序列(不唯一)

第二问:

解题步骤:

1.先判断请求是否<=所需:Request(1,0,2)<=Need(1,2,2)

2.判断请求是否<=系统所剩的:Request(1,0,2)<=Available(3,3,2)

3.根据请求资源量进行分配(更改表)

4.列表计算

根据上表可以看到如果满足Request<=Need&&Request<=Available

然后就更改表: Need -=Request Allocation+=Request Available-=Request

Request(1,0,2)满足!

资源MAXAllocationNeedAvailable
进程ABCABCABCACB
P0753010743230
P1322302020
P2902302600
P3222211011
P4433002431

然后通过更改后的表进行第一问的操作!

资源WorkNeedAllocationwork+allocationFinish
进程ABCABCABCABC
P1230020302532T
P3532011211743T
P0743743010753T
P27536003021055T
P410554310021057T

线程安全序列:P1,P3,P0,P2,P4

第三问:

解题步骤:

和第二问相同,

注意这里要在第二问的基础上,如果第二问请求成功的话!

1.判断请求是否<=所需 :Request(3,3,0)<=Need(4,3,1) true

2.判断请求是否<=系统剩余:Request(3,3,0)<=Available(2,3,0) false

线程不安全!不需要进行下面的计算了!

磁盘调度

4种算法!

  • 先来先服务FCFS
  • 最短寻道时间优先SSTF
  • 扫描算法SCAN
  • 循环扫描算法C-SCAN

例题:

一个磁盘驱动器有150个柱面,考虑一个磁盘队列,它按照到达时间顺序分别是35,52,37,17,80,120,135,104如果读写磁头最初位于柱面90,请使用FCFS,SSTF,SCAN,CSCAN算法求总寻道长度平均寻道长度.

FCFS 先来先服务!

到达顺序就是服务顺序!

记得磁头一开始位置90!

//磁头移动顺序:
90 -> 35 -> 52 -> 37 -> 17 -> 80 -> 120 -> 135 -> 104 
//总寻道长度 = (90-35) + (52-35) + (52-37) + ... + (135-120) + (135-104) = 256

总寻道长度就是将磁头移动的总距离!

平均寻道长度 = 总长/移动次数

256/8 = 32

SSTF 最短寻道时间优先

在这里插入图片描述

向画一条数轴!

然后根据初始磁头位置90,判断两边距离,往距离更短的一遍走!

//磁头移动顺序:
90 -> 80 -> 104 -> 120 -> 135 -> 52 -> 37 -> 35 -> 17
//总寻道长度:
//平均寻道长度:

SCAN 扫描算法

看刚刚的数轴,分成左右两部分!

//磁头移动顺序:
//移动顺序分两种
//1.向左移动完再往右边最近优先寻道!
90-> 80 -> 52 -> 37 -> 35 -> 17 -> 104 -> 120 -> 135
//2.向右移动完再往左边最近优先寻道!
90 -> 104 -> 120 -> 135 -> 80 -> 52 -> 37 -> 35 -> 17

CSCAN 循环扫描算法

这里和扫描算法的不同是先左(右)扫描完,直接到最右(左)边开始扫描!

//磁头移动顺序:
//移动顺序分两种
//1.向左移动完再往右边最远优先寻道!
90-> 80 -> 52 -> 37 -> 35 -> 17 -> 135 -> 120 ->104 
//2.向右移动完再往左边最远优先寻道!
90 -> 104 -> 120 -> 135 -> 17 -> 35 -> 37 -> 52 -> 80

进程调度

3类算法

  • 先来先服务FCFS(First Come First Service)
  • 短作业优先SJF(Shortest Job First)
  • 高响应比优先HRRN(Highest Response Ratio Next)(了解即可)

导学

到达时间(提交时间):就是进程告诉操作系统要开始处理的时间点,进程进入就绪队列等待等待处理!

开始时间:就是操作系统真正开始处理该进程的时间点

执行时间(CPU突发时间):就是操作系统处理这个进程的时间

例题:

P1P4有4个进程,每个进程的到达时间和运行时间如下表所示:

进程到达时间执行时间
P108
P214
P329
P435

先来先服务调度算法:

按照进程到达先后顺序执行进程:P1,P2,P3,P4

方法一:

进程到达时间执行时间开始时间结束时间等待时间周转时间带权周转时间
P10808081
P2148127112.75
P329122110192.11
P435212618234.6

等待时间 = 开始时间 - 到达时间

周转时间 = 结束时间 - 到达时间(就是进程从就绪队列等待开始到进程结束所需要的时间)

带权周转时间 = 周转时间/执行时间

方法二:

Gantt图

在这里插入图片描述

这种方法比较直观!操作快推荐使用!

等待时间: 进程开始时间 - 到达时间

周转时间 : 用进程的结束时间 - 到达时间

短作业优先调度算法SJF

非抢占:就是进程从开始执行就一直是该进程执行到结束再执行其他进程

按照进程长度,进程越短越先执行: P1,P2,P4,P3

进程到达时间执行时间开始时间结束时间等待时间周转时间带权周转时间
P10808081
P2148127112.75
P43512179142.8
P329172615242.67

在这里插入图片描述

抢占 :就是有其他进程抢占执行,当一个进程到达后,发现自己的执行时间比正在执行进程的所需的剩余时间短,就抢占执行该进程!

抢占执行使用Gantt图更加直观!

在这里插入图片描述

这里就不画表格,表格比较麻烦!

高响应比优先调度算法:按优先权 = (等待时间+执行时间)/执行时间优先执行等待时间长执行时间短的进程!

非抢占:先执行P1

计算后面3个进程优先权:

P2 = (7+4)/4

P3 = (5+5)/5

p4 = (6+9)/9

这里P2的优先权更大!先执行P2

进程到达时间执行时间开始时间结束时间等待时间周转时间带权周转时间
P10808081
P2148127112.75
P43512179142.8
P329172615242.67

这篇关于计算机操作系统期末复习大题详解速成不挂课的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174492

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装