班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08
作业目标:作业目标:学习计算机科学概论第10,11章,《C语言程序设计》第8章
作业正文:https://www.cnblogs.com/20221311fangyouchao/p/16840654.html
教材内容总结
1.《计算机科学概论》
①常见的内存管理方式有单块内存管理,页式管理, 分区内存管理。
(1) 单块内存管理:把主存分为一块一块的,当所需的程序片段不再主存时就分配一块主存空间,把程序load入主存,就算所需的程序片段只有几个字节也只能把这一块都分给他,造成很大的浪费,但易于管理。
(2) 页式内存管理:把主存分为一页一页的,每一页的空间要比一块小很多,显然这种分法的空间利用率要比块式管理高很多。
(3) 分区内存管理:把主存分为一段一段的,每一段的空间要比一页小很多,这种方法在空间利用率上比业式管理高很多,但有另外一个缺点:一个程序片段可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上。
②进程管理:进程控制是进程管理中的最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换功能。
③CPU调度:
1. 先进先出算法FIFO((First In First Out)
按照进程就绪的先后顺序来使用CPU,处理器被分配给最先进入就绪队列的进程,进程一单分到CPU的使用权,就一直执行到晋城结束或阻塞时才结束。这种进程按照时间顺序来使用,非抢占内存的方式,公平公正,实现起来也相对简单;但是算法的实际效果不佳,比如在长进程后的短进程,必须等到长进程执行完毕后才能执行,不利于有效的提升用户体验。再形象化一点,有3个进程p1,p2,p3,执行期分别为30,20,10,当他们分别进入就绪队列时,对于p1,p2,p3的周转时间分别为30,50,60,平均的周转时间是46.7,可见效率确实不高。
2.最短作业优先(SJF)
调度算法将每个进程与其下次 CPU 执行的长度关联起来。当 CPU 变为空闲时,它会被赋给具有最短 CPU 执行的进程。如果两个进程具有同样长度的 CPU 执行,那么可以由 FCFS 来处理。
3. 轮询法(Round Robin)
分配给调度上CPU的进程,确定了允许该进程运行的时间长度。每个进程会被分配一个时间片,在这个时间片的时间段内,允许进程运行;如果在时间片结束时该进程还在运行,就会剥夺该进程得而CPU并分配给另一个进程;如果该进程在时间片结束前终止或者阻塞,则CPU会立即完成任务并进行切换。这种算法有利于交互式计算,响应的速度快,但是由于进程的切换,时间片轮转法要花费较多的内存开销,而且对于彼此进程间相差较大的有利,而对于进程大小相似或相同的则不利。
④磁盘调度算法:
先来先服务算法
FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中考虑一些更为复杂的调度算法。
1、算法思想:按访问请求到达的先后次序服务。
2、优点:简单,公平。
3、缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。
最短寻找时间优先算法
SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比FCFS算法更好的性能。这种算法会产生“饥饿”现象。
1、算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
2、优点:改善了磁盘平均服务时间。
3、缺点:造成某些访问请求长期等待得不到服务。
扫描算法(又称电梯算法)
SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。
1、算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移 [2] 动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。
2、优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向。
代码调试中的问题:
在处理除法时为考虑到int/int型会直接转换为整型,导致除法运算结果一直不对。
解决方法:重新定义两个浮点型数进行除法运算。
上周错题总结:
代码行数(新增/累计) | 博客量(新增/累计) | 学习时间(新增/累计) | 重要成长 | |
目标 | 3000行 | 20篇 | 150小时 | |
第七周 | 250/250 | 1篇 | 22/22 | |
第八周 | 300/300 | 5篇 | 22/22 | |
第九周 | 400/400 | 3篇 | 23/25 | |
第十周 | 0/400 | 0篇 | 0/28 |