本栏博客目录

​软考-软件设计师 笔记一(计算机组成与体系结构)​​​

软考-软件设计师 笔记二(操作系统基本原理)
​​​软考-软件设计师 笔记三(数据库系统)​

​​​软考-软件设计师 笔记四(计算机网络)​​​​​

​软考-软件设计师 笔记五(系统安全分析与设计)​

​​​软考-软件设计师 笔记六(数据结构与算法基础)​​​​​

​软考-软件设计师 笔记七(程序设计语言与语言处理程序基础)​​​​​

​软考-软件设计师 笔记八(法律法规)​

​​​软考-软件设计师 笔记九(多媒体基础)​

​​​软考-软件设计师 笔记十(软件工程)​​​​​

​软考-软件设计师 笔记十一(面向对象设计)​​​​​

​软考-软件设计师 笔记十二(数据流图)​​​​​

​软考-软件设计师 笔记十三(数据库设计)​

​​​软考-软件设计师 笔记十四(UML建模)​

​​​软考-软件设计师 笔记十五(数据结构及算法应用)​

​软考-软件设计师 笔记十六(面向对象程序设计)​


@[TOC](文章目录)


概述

软考-软件设计师 笔记二(操作系统基本原理)_软件设计师
操作系统相当于人和硬件之间的一种接口(命令的方式,窗口的方式),(比如往硬盘里面存放数据(依赖于操作系统)),也是应用软件与硬件之间的接口(专用的API接口)

操作系统具备的管理职能: 进程管理,存储管理,文件管理,作业管理,设备管理。
软考-软件设计师 笔记二(操作系统基本原理)_软考_02

进程管理

进程状态

软考-软件设计师 笔记二(操作系统基本原理)_软件设计师_03

进程状态是指的在操作系统当中,对进程进行管理的时候,为进程指定了几种状态,以便于给进程分配相应的资源,对其进行管理。

最初将进程分为运行态,等待态和就绪态三种状态。

运行态指的是某一个进程它所需要的所有资源都已经配足了,并且给它了CPU资源,这个时候它就处于运行状态。

就绪状态: 某进程的其它所有资源都已经配足了,但缺CPU资源。

等待状态: 除了没有CPU资源还缺其它的资源(比如与外设有交互/等待用户的指令)

五态当中的运行态、活跃阻塞态(等待)、活跃就绪态(就绪),对应着三态模型。

某进程是运行态,执行挂起操作后,就会进入静止就绪态(人为的搁置)

静止就绪态的进程执行恢复或者激活操作后,则会进入活跃就绪态,然后等待CPU的调度。

前趋图

软考-软件设计师 笔记二(操作系统基本原理)_操作系统_04

前趋图可以看到哪些任务可以并行,而哪些任务有先后关系。

进程的同步与互斥

软考-软件设计师 笔记二(操作系统基本原理)_操作系统_05

互斥: 在同一时刻,只允许某一个进程去使用资源(同一个资源不能同时服务于多个进程)

(同起点、同终点)同步有速度匹配的要求,当速度拉的太大时,速度快的停下来等速度慢的。
软考-软件设计师 笔记二(操作系统基本原理)_软考_06
互斥: 同一时刻只能进行一个操作(即读写只能有一个在执行),即同一时刻生产者和消费只能一个在市场进行操作。

同步: 当生产者放了一个资源进去之后再放资源时,就会产生溢出(这是不允许的操作),只有等到消费者将商场里面的商品拿走消费掉,才允许生产者往里面放东西。

PV操作

软考-软件设计师 笔记二(操作系统基本原理)_死锁_07

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,则会在系统的进程队列中取出一个进程,唤醒它,让它继续执行。

软考-软件设计师 笔记二(操作系统基本原理)_操作系统_08

上图思想同多线程里面的生成者、消费者模式。

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操作练习题

软考-软件设计师 笔记二(操作系统基本原理)_互斥_09

购书者进程中 P(Sn)和 V(Sn)执行的操作就是书店最多允许n个购书者进入。

上面的题选AC

可以假设先执行收营员进程,如果不加任何限制条件,此时显然没有购书者,而收银员进程则循环执行,显然这样是不行的,所以我们想到在b1处加一个P操作,用来限制,当有购书者时,才会执行收银员进程,所以对应者a1肯定是一个V操作。假设先执行购书者进程时,我们刚才已经推断出a1是V操作,但是者显然不具备约束,此时如果收银员没有进行收费操作时,显然我们不能完成购书,所以a2必须是一个P操作,对应着b2是V操作。

PV操作与前趋图

软考-软件设计师 笔记二(操作系统基本原理)_软件设计师_10
软考-软件设计师 笔记二(操作系统基本原理)_死锁_11

解决上面问题的方法: 首先在每个箭头上标识一个信号量,顺序按从左到右(从上到下)的形式
软考-软件设计师 笔记二(操作系统基本原理)_软考_12

箭头的开始处一般对应V操作,结束处(目标处)一般对应P操作,可以明显推出 a处空填 V(S1) b处空填V(S2),c 处空填 P(S1)和P(S2),d 处空填V(S3)和V(S4),e处填P(S3),f处填P(S4)

死锁问题

软考-软件设计师 笔记二(操作系统基本原理)_软件设计师_13

设有k个进程,每个进程需要n个资源,不发生死锁的最少的资源数 = k(n - 1) + 1

软考-软件设计师 笔记二(操作系统基本原理)_软考_14

死锁形成的四大条件

互斥: 如果进程间不是互斥使用资源,而是同时使用属于自己的资源,那就不存在死锁的情况了。

保持和等待: 各个进程会保持自己的资源,并且等待别的进程释放更多的资源给自己。

不剥夺: 系统不会把分配给某进程的资源剥夺掉给其它的进程。

环路等待: 如 - A,B,C进程,A等待B释放资源,B等C释放资源,C又等A释放资源。

解决死锁问题的两种方案: 死锁的预防(打破四大条件)和死锁的避免。

银行家算法

软考-软件设计师 笔记二(操作系统基本原理)_软考_15
软考-软件设计师 笔记二(操作系统基本原理)_操作系统_16
软考-软件设计师 笔记二(操作系统基本原理)_互斥_17

求出剩余资源数,列出每个进程还需要的资源数,然后带选项,如果中途出现死锁则舍弃此选项。

存储管理

软考-软件设计师 笔记二(操作系统基本原理)_操作系统_18

首次适应算法: 顺次找下来,在首次能够容纳任务所需资源的地方分配内存给此任务。

最佳适应算法: 把空闲区块按大小连接成一个链,然后从小往大查找,在首个能够容纳任务的地方分配内存给任务。(可能会造成很多小碎块式的空闲区域)

最差适应算法: 把空闲区块按大小连接成一个链,然后从大往小查找,在首个能够容纳任务的地方分配内存给任务。

循环首次适应算法: 把空闲区域连成一个环状,每次都从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的空闲区为止

页式存储

软考-软件设计师 笔记二(操作系统基本原理)_死锁_19

页式存储: 将用户程序分成等分大小的页(假如是4k一个块),把内存中的存储区也分成4k一个的块,调入程序在内存运行时,不再是整个调入,而是运行哪些块,就将哪些块/页调入进来。页表记录用户程序的页和内存地址的块号的映射关系。(优点: 内存利用率高;缺点: 增加了系统的开销,可能出现抖动现象)

通过逻辑地址求物理地址: 先明确逻辑地址中的页号与页内地址(每个页中地址的编号或者说是偏移量),页内地址对应物理地址的页内地址,然后通过页号查找块号,将两部分拼接起来就得到了物理地址。
软考-软件设计师 笔记二(操作系统基本原理)_互斥_20

页面大小为: 4K = 212,说明一个页的页内地址是12位,所以逻辑地址中高于12位的地址就是页号(此题中页内地址就是后三位,四个2进制位对应一个16进制位,16个2进制位就对应3个16进制位。),页号为5,页内地址是A29,查表得页号5对应的物理块号(页帧号)是6,所以物理地址 = 块号 + 页内地址 = 6A29 H

淘汰时只能淘汰在内存中的(状态位为1的),所以需要在页号为0、1、2、5中淘汰,刚刚被访问过的(访问位为1)的不能被淘汰,所以只能淘汰1号页。

段式存储

软考-软件设计师 笔记二(操作系统基本原理)_软考_21

按逻辑方式划分段长,所以段长可以不同。

段页式存储

软考-软件设计师 笔记二(操作系统基本原理)_互斥_22

快表

软考-软件设计师 笔记二(操作系统基本原理)_互斥_23

页面置换算法

软考-软件设计师 笔记二(操作系统基本原理)_软件设计师_24

最优算法(理想模型)在实际应用中没有办法使用。

先进先出(FIFO)算法: 最先进入内存的最先淘汰。
抖动(分配给更多的资源却使效率降低)
软考-软件设计师 笔记二(操作系统基本原理)_互斥_25

最近最少使用(LRU): 刚刚被访问过的页面不会被淘汰。

软考-软件设计师 笔记二(操作系统基本原理)_死锁_26

可以将其理解为访问元素时,都在向队列尾部添加元素,淘汰时都淘汰队列头部的元素,区别在于,LRU(最近最少使用算法)在访问某元素,并且这个元素在内存中时,会更新其在队列的位置,将其更新到队列尾部。但对于FIFO算法,当访问某元素,并且此元素在队列中时,不会更新其位置。
软考-软件设计师 笔记二(操作系统基本原理)_死锁_27
没有使用快表,说明每读一次内存块,需要先查页表,查表后才能读取相应的内存块。读取每个内存块要进行两次的访问。由图可知,执行swap指令需要读取6个页,6个页就需要12次访问。对于指令,默认一次读入。由于A在2、3页中各一次,所以需要两次缺页中断。B也对应两次,总次数 = 1 + 2 + 2 = 5次。(约定操作数两次,指令一次)

文件管理

索引文件结构

软考-软件设计师 笔记二(操作系统基本原理)_软考_28

索引文件结构默认13个节点。

软考-软件设计师 笔记二(操作系统基本原理)_死锁_29

每个数据项的大小是4B,所以一个磁盘块中可以存 1 KB / 4 B = 1024 / 4 = 256,而前5个块(0~4)采用直接地址,所以,逻辑号为5的对应物理块号为58,而编号为261的对应第262个物理块,即编号为187的物理块(直接索引5个 + 90对应的256个 = 261个)。
注意: 不要被数字迷惑,58~136,这里面有256个块。


101物理块存放的是二级间接地址索引。原理同下图
软考-软件设计师 笔记二(操作系统基本原理)_操作系统_30

树形目录结构

软考-软件设计师 笔记二(操作系统基本原理)_软考_31

空闲存储空间管理

软考-软件设计师 笔记二(操作系统基本原理)_软考_32

空闲存储空间管理: 将磁盘上大量的空闲空间管理起来,以便在某一个文件要申请相应的存储空间时,能够有依据的分配给其相应的空间。

空闲区表法: 用一个表记录那些地方是空闲的,以便将其管理起来。

空闲链表法: 把空闲区连接成一条链表,需要进行空间分配的时候,在这条链表上滑出相应的空间来用。

位示图法: 1标记的区域已经被占用,0代表区域是空闲的,可以直观的看出哪些是空闲/占用的。

成组链表法: 链表结合。
软考-软件设计师 笔记二(操作系统基本原理)_操作系统_33

4195号物理块是第4196个物理块,4196 / 32 = 131.125,说明要将前131个填满,并且当前物理块所占的位在132个字当中,所以第一个选D;要占用这个物理块,肯定要置为1的,注意: 位置是从第0位置开始算的。如下图,所以第2个空选B。
软考-软件设计师 笔记二(操作系统基本原理)_软考_34

设备管理

数据传输控制方式

软考-软件设计师 笔记二(操作系统基本原理)_死锁_35

数据传输控制方式主要指内存与外设之间的数据的传输控制问题。

程序控制方式(程序查询方式):最为低级的,CPU介入最多的一种机制,整个的数据传输控制很多时候都需要CPU的介入,外设处于一种非常被动的方式,它不会主动的反馈信息(比如传输完成与否,不会自动反馈,而是由CPU发出相应的查询指令来看其是否传输完)。

程序中断方式: 主动性较第一种方式强,如果外设完成了相应数据的传输,它会发一个中断出来,系统收到后会作下一步的处理。

DMA方式(直接存取控制方式): 会有专门的DMA控制器,只要是外设与内存之间的数据交换过程中,由这个控制器(DMA)管控它,CPU只需在开始介入, 其他整个过程都由这个DMA的控制器来完成/监管。完成之后由CPU来作后续的工作。(效率就要高很多)

虚设备与Spooling技术

软考-软件设计师 笔记二(操作系统基本原理)_互斥_36

微内核操作系统

软考-软件设计师 笔记二(操作系统基本原理)_死锁_37