软件工程师——操作系统
1. 操作系统概述
对于人和计算机而言接口往往是命令,窗口;应用软件和硬件是API接口
2. 进程管理
2.1 进程的定义
为了描述系统中程序执行时动态变化的过程引入了进程。进程是资源分配和独立运行的基本单位。进程管理重点需要研究诸进程之间的并发特性,以及进程之间相互合作与资源竞争产生的问题。
2.2 进程与程序的区别
进程实际上就是程序的一次执行。
①进程是动态的,程序是静态的。
②进程具有生命周期,程序是永久存在的。
③进程是由程序段、相关数据段和进程控制块(PCB)组成,程序是指令的有序集合。
2.3 进程的状态
指在操作系统中对进程进行管理的时候为进程指定了几种状态以便于给进程分配相应的资源来进行管理。
运行:这个进程所需要的所有资源都已经配出了,并给它了CPU资源
就绪:其他所有资源都已经配出了,只缺CPU资源
等待:除了没有CPU资源,还缺其他的资源
2.4 前驱图
前驱图主要表达:需要进行的活动之间的依赖关系。
2.5 进程的同步与互斥
互斥:在同一时刻,只允许一个进程使用资源。
同步:有速度匹配的要求,速度快的等慢的从而达到同步。
同步和互斥不是反义词,互斥的反是共享,同步的反是异步。
生产者与消费者问题:
单缓冲区:意思是市场容量只有1,存放了一个东西就不能存放第二个,对于市场的操作不能既有生产者去存东西,又有消费者去搬东西,同一时刻要求只有一个人对市场进行操作,不允许同时操作,这就是互斥,市场是互斥资源。同步:生产者需要等消费者消费完商品才能继续放东西。
多缓冲区:只是说同步的时候放的步子大一些,原来只能放一个东西,现在能放多个东西,放满之后再停下来等消费者。
2.6 PV操作
生产者若没有加PV操作:可能会产生缓冲区已满,产生溢出的情况。
消费者若没有加PV操作:可能缓冲区是空的,进行取操作会产生错误。
若先从生产者开始:
生产一个产品
S1=1,进行P操作,S1=0,0不小于0,不会被阻塞,就继续往下执行
把产品送到缓冲区
S2=0,进行V操作,S2=1,1不<=0,再进行生产者进程
生产一个产品
S1=0,进行P操作,S1=-1,满足S<0的标准,当前进程就会被放进进程的等待队列,并且把当前的状态阻塞起来,就说明加入PV操作之后,第二次生产的产品在第一个产品没有消费完之前是不会送到产品缓冲区。
执行消费者进程:
S2=1,进行P操作,S2=0,0不小于0,不会被阻塞,就继续往下执行
从缓冲区取出产品,缓冲区变空了
S1=-1,进行V操作,S1=0,S<=0为T,则在等待队列中找到一个进程把它激活,激活的就是生产者的进程
若先从消费者开始:
- S2=0,进行P操作,S2=-1,满足S<0的标准,当前进程就会被放进进程的等待队列,并且把当前的状态阻塞起来,所以消费者一开始缓冲区为空的错误可以通过PV操作来避免
通过分析,发现PV操作解决的问题是:并发进程之间约束关系的问题的解决。
2.7 PV操作练习题
1、P(Sn)和V(Sn)功能实现:最多允许n个购书者进入,n+1个进来的人会被阻塞,若有人出去了则n+1被激活。
2、付款是购书者单一的能够完成的动作吗?不是,需要有收银员来进行收费,需要双方的配合,所以有同步的关系。
3、若没有a1、a2、b1、b2则收银员周而复始的进行收费操作,问题在于若没有购书者提出付款的申请则收费无意义,所以b1需要是一个P1操作,需要被唤醒,应该由付款唤醒,意思是在没有人提出付款申请的时候,收银员无工作即阻塞起来了,当有人要付款则a1执行V1操作,唤醒收营员要收费了。
4、等收银员计算好价格,收到钱找了零钱之后,通知可以走了,所以进行付款的时候需要等待收银员,即需要阻塞,所以a2是P2操作,b2是V2。
2.8 PV操作与前驱图
2.9 死锁问题
2.9.1什么是死锁?
系统当中有一系列的资源,有一系列需要用到这些资源的进程,进程需要系统分配资源才能够运行,若系统发现某一时刻发现所有可用的资源都分配出去了,而所有进程都没办法完成它的任务,从而释放已占有的资源,就会产生死锁。即所有的进程都在等待别人给它放资源,而自己不愿把自己的资源分享给别人,造成系统无法正常完成一系列任务,产生死锁。
有k个进程,则至少有K×(n-1)+1个资源就不会发生死锁。3×4+1=13
2.9.2 死锁的条件
银行家算法:
1、当前系统还剩下的资源数
2、分析怎样的顺序执行进程系统是安全的
除了P2以外其他所需的资源数都超过了系统剩下的资源数,一旦先执行了其他进程就会造成死锁,所以先运行的必须是P2
P2运行完后,系统释放资源,剩下资源数为R1=4,R2=2,R3=1,只可进行P4进程,同理分析得出进程序列为P2—>P4—>P5—>P1—>P3
3、验证别的选项
3. 存储管理
3.1 分区存储组织
1、分配前
原来是一块连续的大的空白区域,等到系统运行的时候,系统会把用户需要的大小提交到分配组织,然后就分配相应的需求匹配大小的容量内存。
例如:作业1需要33K的内存,系统就分配了33K内存;作业2需要22K内存,系统就分配了22K内存;间隔了25K是因为,原来作业1的位置有一个33K的程序,接下来分配了25K的空间给另外一个作业,再有一个22K的作业分配下来,再是10K的,等原来的25K的作业执行完之后,会把这一块空间给释放出来,所以就得到了一个25K的空白区域。分配是动态分配的,需要多少就分配多少空间。
2、首次适应法
空闲分区以地址递增的次序链接。上题中,在首次能够容纳9K的块中切9K出来
3、最佳适应算法
空闲分区按其容量从小到大的顺序链接,先用最小。10K—>25K—>28K的链,分配空间时用空闲区最小的空间和9K比,10K够用就切9K的空间用。
优点:分配的空间尽可能的在与它接近的空间区分配,这样能让系统保留大块的空白区域。
缺点:内存碎块很多,不好利用。
4、最差适应算法
空闲分区按其容量从小到大的顺序链接,先用最大。用28K中切出9K来用。
5、循环首次适应算法
把空闲的区域连成一个环状,顺次分配。25K—>28K—>10K,分配的均匀
3.2 页式存储组织
把用户程序分为等分大小的页。例如:把用户程序等分为4K大小的区,每个块成为一个页,把内存当中的存储区也分成4K一页,调入程序到内存运行时,不再是把整个用户程序一次性调入,采取的机制是,需要用到那些块就调入哪些块。
优点:内存利用率很高,碎片小,分配及管理简单。
缺点:增加了系统开销,可能产生抖动现象。(有页表记录了两者的映射关系,执行程序的时候需要查表定位具体的代码,转换增加了系统开销。)
逻辑地址和物理地址:
页内地址相同,调入的时候以页为单位,所以以页为单位的偏移量不会有变化;页号不同,逻辑地址的页号对应物理地址的块号,通过查表得知。
如何通过逻辑地址来求物理地址?
首先要知道逻辑地址当中哪一部分是页号,哪一部分是页内地址。页内地址直接写入物理地址中的页内地址,然后通过页号查找块号把两个拼接起来就得到了物理地址。
1、求物理地址先要把逻辑地址中的页号和页内地址分开,通过页面大小分析得知。
4K=2^12,说明一个页的页内地址是12位,那么高于12位的部分就是页号。十六进制5A29H中A29代表二进制的12位,所以页内地址是A29,页号是5通过查表对应的物理块号是6,所以第一空应为6A29。
2、分析表格
状态为为1表示在内存,页面淘汰只能淘汰在内存的页,所以从0、1、2、5中选择一个淘汰,访问过的访问位为1不能淘汰,为0的可以淘汰,所以应该淘汰1号页。
3.3 段式存储组织
段式和页式分割方式有较大差异,段式是按逻辑结构来划分的。
例如:一个程序中把main函数化成一个段,把function1化为一个段,function2化为一个段,段的大小不要求一致。
段表:段号、段长、基址(段在内存当中哪一个地址开始的连续空间段即起始地址)
3.4 段页式存储组织
3.5 页面置换算法
3.5.1 先进先出算法(FIFO)
哪个页面先进入内存的就先淘汰谁。
抖动:分配给你更多的资源希望做的更好,结果效率还降低了。
第一行:要访问的页面的序列
第一列:内存的3个页面
首先访问调入了4的程序页,这时内存里没有编号为4的程序页,所以会调入编号为4的,并产生一次缺页;再访问3、2,都会产生缺页。访问到1号页时,最先进入的是4号页,所以先淘汰4号页,保留3、2号页。再访问到4号页,此时最先的为3号页,则淘汰3号页,以此类推得出总的缺页次数9次。把内存页加到4个时,发现缺页次数为10次,就这产生了抖动的现象。
3.5.2 最近最少使用(LRU)
不会产生抖动,根据使用情况来看,刚刚被访问过的不会被淘汰出去。有局部性原理,刚刚被访问过的很有可能再次被访问到。
3.5.3 FIFO 和 LRU对比
首先调入前3个页都是空白,不存在淘汰问题。到2号页要访问的时候,内存已经被5、0、1这三个页占用了,FIFO考虑5最先进入所以把5淘汰了,LRU考虑刚刚被访问完的是1不淘汰,其次是0也不淘汰,最近没有访问到的是5号所以淘汰5号。由于当前内存当中存的是0、1、2这三个页面,所以FIFO和LRU都是命中的,不涉及淘汰,也没有缺页。发现内存中没有3号页,需要调入,会产生缺页中断,FIFO内存中有0、1、2其中0最先进来,所以淘汰0;LRU中有1、2、0其中0刚刚被访问不淘汰,其次是2,最久没访问到的是1,所以淘汰1。后面同理。
没有使用块表代表:每读一次程序块,需要先再内存查表,查表后才能读取相应的内存块,所以每一个块需要进行两次内存的访问。
总共有6个块所以产生12次对内存的访问。
默认指令无论占用几个块都一次性调入,可以看出指令占用了两个块,第一个块是从0号字节到1023个字节,1023是一个块的最后一个单元,存只能存指令的一半,还有一半只能存在一号页,跨了两个页常规就会产生两次缺页中断,但对于指令而言会一次性读入只产生一次缺页中断,而数据类型跨两个页会产生两次缺页中断。1+2+2=5次缺页中断。
4. 文件管理
4.1 索引文件结构
一般有13个节点,0-12
例如:一个物理盘块为4K大小
直接索引:直接对应物理盘块4K*13=52K
一级间接索引:0-9对应直接索引,即索引节点对应地址,地址直接对应物理盘块,物理盘块存索引文件的内容。前10个容量是4K×10=40K,从第10个开始存物理盘块的地址,每个地址假设占4个字节,则4K/4字节=1024个。即10号索引节点的地址对应的物理盘块存1024个物理盘块的地址,每个地址对应一个物理盘块,这个盘块才存索引文件的内容,这称为一级间接索引。容量:4K×1024
二级间接索引:11号节点,地址对应的盘块存地址,地址对应的下一级的盘块还存地址,最后才指向物理盘块存具体内容。容量:4K×1024×1024
间接级别越多访问效率越低。
逻辑块号从0开始算,50→0,67→1,68→2,78→3,89→4,58→5,一个盘块1K,一个地址4个字节,则每个盘块可以存256个地址,所以187→261,所以(1)选C,101→i-addr[7]是二级间接索引,所以(2)选D。
4.2 树型目录结构
重点掌握相对路径和绝对路径的表示方法!!!
4.3 空闲存储空间管理——位示图法
1表示已经被占用,0表示是空闲的
一个字是32bit位,(4195+1)/32=131.125,超过131,当前物理块所在的位再132个字当中。位置从第0位置开始,131×32=4192→0-4191,在第132字当中,第0位置→4192,1→4193,2→4194,3→4195,所以第3位置置“1”。
字从1开始算,位置从0开始算!!!
5. 设备管理
5.1 数据传输控制方式
程序控制方式:整个数据的传输控制很多时候都需要CPU的介入,外设处于非常被动的方式,不会主动的反馈信息,由CPU发出相应的查询指令。缺点:每隔一段时间需要询问外设是否完成工作。
程序中断方式:与控制方式比,主动性强了些。如果外设完成了相应的数据的传输,会发一个中断出来,系统会做下一步处理,效率更高了。
DMA方式(直接存取控制方式):有专门的DMA控制器,只要是外设和内存的数据交换,过程中就由控制器管控,CPU只要在开头的时候做一些介入,例如安排好一些事务做一些初始化之类,整个过程中由控制器监管,完成后由CPU接手做后续的工作。效率更高了。
5.2 虚设备与Spooling技术
spooling技术:打印机中有相应的控制程序做打印的管控,管控的时候会先把相应的需要输出的 内容放到磁盘缓冲区,进入到输出井,然后打印机会顺次的把输出井里面的数据打印出来。核心:开辟了缓冲区,把要输入输出的数据缓存起来,解决了外设的低速和内部系统的高效之间的瓶颈差异。
6. 微内核操作系统
微内核操作系统—内核更小的操作系统,为什么要更小?主要体现在:可靠性、稳定性、安全性
软件工程师——操作系统相关推荐
- 汇编程序设计与计算机体系结构软件工程师教程笔记:函数、字符串、浮点运算
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:处理器、寄存器简介
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 总结-软件工程师 ( 编程能力 )
总结-软件工程师 ( 编程能力 ) 软件工程师编程能力前言 /* 编码现状 */ 程序猿现状: 现项目不是白做的,的确知道怎么写代码,怎么做出一个界面,怎么发起一个网络请求... 仅此而已了.不知道如 ...
- 云巴创始人张虎:一个优秀的软件工程师必然是全栈工程师
张虎,云巴 (yunba.io) 创始人兼CEO,致力于为开发者提供优质云后端服务.他有十几年的软件研发经验,精通嵌入式系统.服务器端架构.虚拟化等.张虎曾就职于华为.Oracle,他是Oracle ...
- 软件工程师不可不知的10个概念
出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求.除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模式,软件工程师应当从更广的范围内明白这 ...
- 构建之法第三章软件工程师的成长
1.现在的我以及我的同学们都还不能够被称之为软件工程师,在各个方面我们都有很多的不足,与那些计算机大佬相比我们也就是大菜鸟,所以我会朝着自己的目标努力. ①我会选择C,但是我希望无论他的技术有多么娴熟 ...
- 作为软件工程师,你必须知道的20个常识
1.针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发, 简短的 OOAD 与它的 SOLID 原则对于每一个软件工程师来说都是该牢记的. 2.软件品质因素:软件工程的好坏与软件 ...
- 软件工程师所需掌握的“终极技术”是什么?
最近,我在微博上看到@程序员邹欣老师发的一条微博 - "不少大学同学都有一个想法:先做几年技术,然后做管理:也有一些同学说:我技术不行,希望直接找到一个管理的工作,就像PM那样.请看 PM ...
- 工程计算软件_软件工程师的计算机基础理论知识体系
想要成为一名合格的软件工程师,需要学习的计算机方面的很多知识和理论,这里给大家通俗的说下需要知道的基础理论知识体系有哪些. 以某大学的计算机相关专业的四年课程举例: Java语言.C语言.Python ...
最新文章
- feed流和瀑布流_Feed流和瀑布流 - kathy829的个人空间 - OSCHINA - 中文开源技术交流社区...
- 为什么地磅的读数有进制么_谈谈二进制(三)——位运算及其应用
- moss 与SAP iView web part 整合
- Maven-Build Lifecycle(构建生命周期)
- NHibernate中的API
- 机房收费系统——总结
- 6个座位办公室最佳位置_四人办公室座次的首选最佳座位在哪儿
- RCP:如何移除Toolbar中的Quick Access
- 读书笔记-简单叙述对象关系
- python3 os.system 异步执行_《sentos python教程》 Python os.system(command),这样执行的command命令,和主程序是异步的吗?...
- oracle rman 备份与还原
- Excel函数、快捷键等
- 服务器不能用pe安装win7系统安装,使用PE安装win7系统失败了怎么办
- 每日打卡:等式方程的可满足性
- 【数据库连接池】数据库连接池
- 什么是idc,什么又是idc机房?
- python标准库模块路径_Python3的系统标准库pathlib模块的 Path 对路径的操作会更简单...
- c语言怎么快速读出函数作用,读文件fread函数的用法
- HTML 点击查看更多,微信小程序加载更多和点击查看更多的实现方法
- 竞品分析5步法教你如何分析竞争对手网站