本栏博客目录
软考-软件设计师 笔记二(操作系统基本原理)
软考-软件设计师 笔记三(数据库系统)
软考-软件设计师 笔记六(数据结构与算法基础)
软考-软件设计师 笔记七(程序设计语言与语言处理程序基础)
@[TOC](文章目录)
概述
操作系统相当于人和硬件之间的一种接口(命令的方式,窗口的方式),(比如往硬盘里面存放数据(依赖于操作系统)),也是应用软件与硬件之间的接口(专用的API接口)
操作系统具备的管理职能: 进程管理,存储管理,文件管理,作业管理,设备管理。
进程管理
进程状态
进程状态是指的在操作系统当中,对进程进行管理的时候,为进程指定了几种状态,以便于给进程分配相应的资源,对其进行管理。
最初将进程分为运行态,等待态和就绪态三种状态。
运行态指的是某一个进程它所需要的所有资源都已经配足了,并且给它了CPU资源,这个时候它就处于运行状态。
就绪状态: 某进程的其它所有资源都已经配足了,但缺CPU资源。
等待状态: 除了没有CPU资源还缺其它的资源(比如与外设有交互/等待用户的指令)
五态当中的运行态、活跃阻塞态(等待)、活跃就绪态(就绪),对应着三态模型。
某进程是运行态,执行挂起操作后,就会进入静止就绪态(人为的搁置)
静止就绪态的进程执行恢复或者激活操作后,则会进入活跃就绪态,然后等待CPU的调度。
前趋图
前趋图可以看到哪些任务可以并行,而哪些任务有先后关系。
进程的同步与互斥
互斥: 在同一时刻,只允许某一个进程去使用资源(同一个资源不能同时服务于多个进程)
(同起点、同终点)同步有速度匹配的要求,当速度拉的太大时,速度快的停下来等速度慢的。
互斥: 同一时刻只能进行一个操作(即读写只能有一个在执行),即同一时刻生产者和消费只能一个在市场进行操作。
同步: 当生产者放了一个资源进去之后再放资源时,就会产生溢出(这是不允许的操作),只有等到消费者将商场里面的商品拿走消费掉,才允许生产者往里面放东西。
PV操作
P操作意味着请求一个资源,V操作意味着释放一个资源
临界资源: 进程间需要互斥访问的那些资源。
临界区: 访问临界资源的代码。
信号量: P(S),V(S)中的S,就是信号量,信号量是一种特殊的变量。
PV操作就是两大原子操作的组合
P操作: 假设执行P(S)这样一个操作,操作过程 - 首先把S作自减一的操作(S = S - 1),然后判断S是否小于零,如果S小于零(S < 0),系统将阻塞当前进程,并把这个进程放入一个进程队列中,当前进程进入等待状态。如果S不小于零,系统将继续执行此进程。
V操作: 首先把信号量自加一,然后再判断S是否小于等于0(S <= 0),如果S <= 0,则会在系统的进程队列中取出一个进程,唤醒它,让它继续执行。
上图思想同多线程里面的生成者、消费者模式。
P相当于wait,V相当于notify,假如先执行消费者进程,P(S2)导致S2先减一,此时S2 = -1 < 0,说明缓冲区里面还没有资源,所以消费者进程进入阻塞状态(进入系统进程队列),生产者进程执行(并非顺次关系,有可能一起执行),生产者生成一个产品,执行P(S1)操作,S1变为0,不满足S1<0,所以继续执行当前进程,将产品送入缓冲区(缓冲区就有了产品),继续执行当前进程的V(S2)操作,S2自加1后 S2 = 0,满足S2 <= 0,唤醒刚才由于执行P(S2)而被阻塞的消费者进程,消费者进程也开始执行…
PV操作练习题
购书者进程中 P(Sn)和 V(Sn)执行的操作就是书店最多允许n个购书者进入。
上面的题选AC
可以假设先执行收营员进程,如果不加任何限制条件,此时显然没有购书者,而收银员进程则循环执行,显然这样是不行的,所以我们想到在b1处加一个P操作,用来限制,当有购书者时,才会执行收银员进程,所以对应者a1肯定是一个V操作。假设先执行购书者进程时,我们刚才已经推断出a1是V操作,但是者显然不具备约束,此时如果收银员没有进行收费操作时,显然我们不能完成购书,所以a2必须是一个P操作,对应着b2是V操作。
PV操作与前趋图
解决上面问题的方法: 首先在每个箭头上标识一个信号量,顺序按从左到右(从上到下)的形式
箭头的开始处一般对应V操作,结束处(目标处)一般对应P操作,可以明显推出 a处空填 V(S1) b处空填V(S2),c 处空填 P(S1)和P(S2),d 处空填V(S3)和V(S4),e处填P(S3),f处填P(S4)
死锁问题
设有k个进程,每个进程需要n个资源,不发生死锁的最少的资源数 = k(n - 1) + 1
死锁形成的四大条件
互斥: 如果进程间不是互斥使用资源,而是同时使用属于自己的资源,那就不存在死锁的情况了。
保持和等待: 各个进程会保持自己的资源,并且等待别的进程释放更多的资源给自己。
不剥夺: 系统不会把分配给某进程的资源剥夺掉给其它的进程。
环路等待: 如 - A,B,C进程,A等待B释放资源,B等C释放资源,C又等A释放资源。
解决死锁问题的两种方案: 死锁的预防(打破四大条件)和死锁的避免。
银行家算法
求出剩余资源数,列出每个进程还需要的资源数,然后带选项,如果中途出现死锁则舍弃此选项。
存储管理
首次适应算法: 顺次找下来,在首次能够容纳任务所需资源的地方分配内存给此任务。
最佳适应算法: 把空闲区块按大小连接成一个链,然后从小往大查找,在首个能够容纳任务的地方分配内存给任务。(可能会造成很多小碎块式的空闲区域)
最差适应算法: 把空闲区块按大小连接成一个链,然后从大往小查找,在首个能够容纳任务的地方分配内存给任务。
循环首次适应算法: 把空闲区域连成一个环状,每次都从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的空闲区为止
页式存储
页式存储: 将用户程序分成等分大小的页(假如是4k一个块),把内存中的存储区也分成4k一个的块,调入程序在内存运行时,不再是整个调入,而是运行哪些块,就将哪些块/页调入进来。页表记录用户程序的页和内存地址的块号的映射关系。(优点: 内存利用率高;缺点: 增加了系统的开销,可能出现抖动现象)
通过逻辑地址求物理地址: 先明确逻辑地址中的页号与页内地址(每个页中地址的编号或者说是偏移量),页内地址对应物理地址的页内地址,然后通过页号查找块号,将两部分拼接起来就得到了物理地址。
页面大小为: 4K = 212,说明一个页的页内地址是12位,所以逻辑地址中高于12位的地址就是页号(此题中页内地址就是后三位,四个2进制位对应一个16进制位,16个2进制位就对应3个16进制位。),页号为5,页内地址是A29,查表得页号5对应的物理块号(页帧号)是6,所以物理地址 = 块号 + 页内地址 = 6A29 H
淘汰时只能淘汰在内存中的(状态位为1的),所以需要在页号为0、1、2、5中淘汰,刚刚被访问过的(访问位为1)的不能被淘汰,所以只能淘汰1号页。
段式存储
按逻辑方式划分段长,所以段长可以不同。
段页式存储
快表
页面置换算法
最优算法(理想模型)在实际应用中没有办法使用。
先进先出(FIFO)算法: 最先进入内存的最先淘汰。
抖动(分配给更多的资源却使效率降低)
最近最少使用(LRU): 刚刚被访问过的页面不会被淘汰。
可以将其理解为访问元素时,都在向队列尾部添加元素,淘汰时都淘汰队列头部的元素,区别在于,LRU(最近最少使用算法)在访问某元素,并且这个元素在内存中时,会更新其在队列的位置,将其更新到队列尾部。但对于FIFO算法,当访问某元素,并且此元素在队列中时,不会更新其位置。
没有使用快表,说明每读一次内存块,需要先查页表,查表后才能读取相应的内存块。读取每个内存块要进行两次的访问。由图可知,执行swap指令需要读取6个页,6个页就需要12次访问。对于指令,默认一次读入。由于A在2、3页中各一次,所以需要两次缺页中断。B也对应两次,总次数 = 1 + 2 + 2 = 5次。(约定操作数两次,指令一次)
文件管理
索引文件结构
索引文件结构默认13个节点。
每个数据项的大小是4B,所以一个磁盘块中可以存 1 KB / 4 B = 1024 / 4 = 256,而前5个块(0~4)采用直接地址,所以,逻辑号为5的对应物理块号为58,而编号为261的对应第262个物理块,即编号为187的物理块(直接索引5个 + 90对应的256个 = 261个)。
注意: 不要被数字迷惑,58~136,这里面有256个块。
101物理块存放的是二级间接地址索引。原理同下图
树形目录结构
空闲存储空间管理
空闲存储空间管理: 将磁盘上大量的空闲空间管理起来,以便在某一个文件要申请相应的存储空间时,能够有依据的分配给其相应的空间。
空闲区表法: 用一个表记录那些地方是空闲的,以便将其管理起来。
空闲链表法: 把空闲区连接成一条链表,需要进行空间分配的时候,在这条链表上滑出相应的空间来用。
位示图法: 1标记的区域已经被占用,0代表区域是空闲的,可以直观的看出哪些是空闲/占用的。
成组链表法: 链表结合。
4195号物理块是第4196个物理块,4196 / 32 = 131.125,说明要将前131个填满,并且当前物理块所占的位在132个字当中,所以第一个选D;要占用这个物理块,肯定要置为1的,注意: 位置是从第0位置开始算的。如下图,所以第2个空选B。
设备管理
数据传输控制方式
数据传输控制方式主要指内存与外设之间的数据的传输控制问题。
程序控制方式(程序查询方式):最为低级的,CPU介入最多的一种机制,整个的数据传输控制很多时候都需要CPU的介入,外设处于一种非常被动的方式,它不会主动的反馈信息(比如传输完成与否,不会自动反馈,而是由CPU发出相应的查询指令来看其是否传输完)。
程序中断方式: 主动性较第一种方式强,如果外设完成了相应数据的传输,它会发一个中断出来,系统收到后会作下一步的处理。
DMA方式(直接存取控制方式): 会有专门的DMA控制器,只要是外设与内存之间的数据交换过程中,由这个控制器(DMA)管控它,CPU只需在开始介入, 其他整个过程都由这个DMA的控制器来完成/监管。完成之后由CPU来作后续的工作。(效率就要高很多)
虚设备与Spooling技术
微内核操作系统