操作系统--算法总结

操作系统中各个算法的运用使计算机系统的各个部件协调工作,使资源利用,程序执行更加合理高效。对比我们的生活,操作系统就像是一个百货商店,而算法就实现了让商店的利润尽可能达到最大。

【处理器两级调度】

这里的两级调度说的是:作业调度、进程调度

我们知道程序和数据存在外部存储器,执行前要先输送到内存,然后进程从就绪状态到运行结束;磁盘上的输入井传入主存的过程就是作业调度;一直到执行结束称为进程调度。

作业调度的算法:

首先是先来先服务,就好比是我们打饭排队一样,先来的先能买到饭,这体现了时间上的公平性。看一个简单例子:

在一个多道程序系统中,设用户空间为100K,主存空间管理采用最先适应分配策略,并采用先来先服务算法管理作业。请列出各个作业的开始执行时间、完成时间、周转时间。

解析:

首先,题目给出用户可以使用主存为100k,因此作业放入主存的过程要注意内存不够用的情况,对上图的步骤进行解析:

1.确定开始、完成时间,以及装入主存的时间,因为单核系统一次只能出入一个作业,因此上一个作业的完成时间是下一个作业开始执行的时间。

2.按照先来先服务,job3本该先于job4,但job1,job2最先执行完也要到9时,从8--9时之间内存只有20K不能放下job3,因此跳过job3,先放入job4,它进入内存的时间=进入输入井的时间。

3.确定job3的进入内存时间,9时job1虽然已经完成,但是job2和job4仍然占用80K内存,因此,只能等job2完成,即9.6时,job3才能放入内存。

4.特别注意:周转时间=执行结束时间-进入输入井时间。

时间短优先算法,当内存仍然可以同时装入多个作业时,按照先来先服务算法执行,如果碰到两个像上题中job3的情况就考虑计算时间短的先执行:

例如上题,添加job5:装入时间 8.7时,需计算0.4小时,主存需求量25k,那执行完job4,接下来应该执行job5了而不是job3.

      响应比高者优先算法:响应比=等待时间/计算时间

                                              等待时间=最后进入输入井时间-最初进入输入井时间

       由响应比可以很方便的知道,程序的执行取决于等待时间和计算时间两个参量,可以避免执行事件非常短的程序等待过长的情况。

【进程调度算法】

进程调度,是对内存中程序执行时就绪队列中的进程的调度。

对比于作业调度,先来先服务算法不用再考虑内存的事,因为作业已经从内存中形成进程形成队列,完全按照先来后到的顺序执行即可。

最高优先级调度,事先约定好进程的等级,让高优先级的先执行。它又分为抢占式和非抢占式,指的是高优先级进程到来时,会不会前占现有进程占用的处理器。

时间片轮转调度,事先规定了进程一次执行最多占用处理器时间,如果超出了就必须让出处理器。

【页面调度】

  页面调度的算法就像一个个接龙游戏:

      先进先出:

         例:在页式存储管理系统中,某进程依次访问的页面为2,3,2,1,5,2,4,5,3,2,5,2,分配三块主存块,此阿勇先进先出算法:

解析:

首先理解什么是缺页,每一次重新占用主存块就叫缺页。

                                           

     例如,第一列和第二列数字占用主存前是没有放东西的,因此是缺页,到第三列时,队列中已经存在2了,所以不缺页,队列中就不会有改变。这张表里面我们看到队首时间最短,先进先出是替换掉对尾(时间最长)。

其他算法类似,不做赘述。

【总结】

算法应用于计算机让我们的程序执行的越来越高效,只要我们联系生活,这些都是非常简单而有趣的。

   

时间: 2024-10-27 18:13:55

操作系统--算法总结的相关文章

web前端工程师必备技能汇总

web前端知识结构图. 图片的形式具有诸多的不便.缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个github项目.我们可以通过协作的方式来共同维护这个项目.Git的历史记录也可以见证前端行业的一些变迁. 尽管会变成文字的方式来维护这些内容,但是我承诺写一个小工具帮大家生成更好玩的图形(基于DataV项目). 前端开发知识结构 前端工程师 SVG/Canvas/VML SVG: D3/Raphaël/Snap.svg/DataV Canvas: Cre

前端技能汇总 Frontend Knowledge Structure

Frontend Knowledge Structure 项目起源 还记得@jayli 的这幅前端知识结构图么. 图片的形式具有诸多的不便.缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个GitHub项目.我们可以通过协作的方式来共同维护这个项目.Git的历史记录也可以见证前端行业的一些变迁. 尽管会变成文字的方式来维护这些内容,但是我承诺写一个小工具帮大家生成更好玩的图形(基于DataV项目). 前端开发知识结构 前端工程师 浏览器 IE6/7/8/

【前端之路】这世上哪有一路鲜花的康庄大道

一:程序员基本功 1:数据结构+算法  (acm/icpc/oj ) 2:离散数学,数字逻辑,线性代数,概率论,数理统计(学堂在线,mooc) 3:计算机组成原理,操作系统,编译原理 二:语言基础 1:html(html5网页游戏开发,微信游戏开发) W3Schools-HTML(英) , W3School-HTML(中) <HTML5高级程序设计 > 2:css(css设计基本功,css3动画) <精通CSS> <瞬间之美 ><网站重构 ><CSS禅

Web前端知识技能大汇总

Web前端知识技能大汇总 来源:github 发布时间:2015-07-08 阅读次数:3432 28 项目起源 还记得@jayli 的这幅前端知识结构图么. 图片的形式具有诸多的不便.缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个GitHub项目.我们可以通过协作的方式来共同维护这个项目.Git的历史记录也可以见证前端行业的一些变迁. 可视化效果 前端开发知识结构 前端工程师 浏览器 IE6/7/8/9/10/11 (Trident) Firefo

全端project师必备技能汇总

首先,看一张前端知识结构图:  (原文: ithomer) 图片的形式具有诸多的不便.缺失源图的我们.无法为此图贡献些什么,随着时间的迁移,也许有些技术点会发生改变.所以有了这个GitHub项目.我们能够通过协作的方式来共同维护这个项目.Git的历史记录也能够见证前端行业的一些变迁. 虽然会变成文字的方式来维护这些内容.可是我承诺写一个小工具帮大家生成更好玩的图形(基于DataV项目). 前端开发知识结构 前端project师 浏览器 IE6/7/8/9/10/11 (Trident) Fire

CVTE内推面试(c++)

内推是通过微信上泡面之路推荐的,大家可以关注微信公众号泡面之路,上面提供各名企的内推和校招信息 先是笔试,选择没什么好说的(也记不到),基本上都是一些基础问题,数据结构,数据库,计算机网络,操作系统, 算法好的基本都可以回答. 笔试最后两题是编程题: 1.自己实现atoi函数,只考虑整数 函数功能就是将字符串转换成整数并返回. 题目要求只考虑整数就很简单,不用再考虑其他情况. 主要考虑到负数情况就可以了. 2.实现一个函数完成四则运算,包含 + - * / ( ) 学数据结构的时候写过,当时一时

如何成为一个优秀的web前端开发工程师

一.技术的必须的 作为一名最基础的前端工程师你必须掌握HTML.CSS和 JavaScript.三者必须同时精通,类似我字样对前端知识一知半解的,一遇到问题就停下工作就四处搜索解决方案的,首先就算不上一个合格的前端人 员.像我这样的如果当了前端工程师那工期肯定是不能保证的.合格的前端工程师第一要学会的就是在没有任何外来帮助的情况下(包括搜索引擎),能够完成大多 数任务. 以下知识点是作为一个前端工程师必须了解和熟悉的: DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动. DO

前端工程师必备技能汇总

首先,看一张前端知识结构图:  (原文: ithomer) 图片的形式具有诸多的不便.缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个GitHub项目.我们可以通过协作的方式来共同维护这个项目.Git的历史记录也可以见证前端行业的一些变迁. 尽管会变成文字的方式来维护这些内容,但是我承诺写一个小工具帮大家生成更好玩的图形(基于DataV项目). 前端开发知识结构 前端工程师 浏览器 IE6/7/8/9/10/11 (Trident) Firefox (

前端工程师必备技能储备

前端开发知识结构 前端工程师 浏览器 IE6/7/8/9/10/11 (Trident) Firefox (Gecko) Chrome/Chromium (Blink) Safari (WebKit) Opera (Blink) 编程语言 JavaScript/Node.js CoffeeScript TypeScript 切页面 HTML/HTML5 CSS/CSS3 PhotoShop/Paint.net/Fireworks/GIMP 开发工具 编辑器和IDE VIM/Sublime Tex