【操作系统】王道操作系统全盘汇总
1.用户可以通过应用程序 也可以通过直接对操作系统进行操作。
2.操作系统的定义
3.操作系统的功能 举例
4.命令接口
联机命令接口(交互式):在cmd中输入time会显示当前系统时间
脱机命令接口(批处理式):执行.bat文件 里面有很多指令 一次执行
5.程序接口
由可以是ddl文件引起的系统调用组成
6.操作系统4大特征
1)并发:宏观上同时发生,微观上交替发生,计算机同时运行多个程序(并行:真同时发生)
2)共享:互斥共享(排他锁)、同时共享(共享锁)
3)虚拟:是把物理上的实体虚拟化成逻辑上的对应物。
空分复用(虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。)
时分复用(单核cpu经过时间片来执行进程)
4)异步:进程的异步性,进程以人们不可预知的速度向前推进。
7.操作系统历史
1)手工操作阶段:将手工纸带打孔然后给处理机处理(打孔的时间和处理机处理时间差距过大)
2)单道批处理阶段:引入输入输出技术,将指令放进到磁带,然后处理机处理磁带,完成批处理。(IO时间和处理机处里时间处理差距过大)
3)多道批处理阶段:多道程序并发处理,共享计算机资源,处理机和IO设备高利用率(没有人机交互 响应时间过长)
4)分时操作系统:处理机以时间片为单位进行服务的分配
5)实时操作系统:和分时差不多,但是对于外部发出的紧急请求,不需要时间片排队,马上处理。
硬实时:必须按时完成。武器、自动驾驶
软实时:可以有偶尔延迟。12306卖票
8.操作系统运行机制
9.操作系统内核
10.中断实现多道批处理系统
进程发出中断信号,cpu进入核心态。
当前进程保存现场 并暂停运行,操作系统对于中断进行处理
对于不同的信号 进行不同的处理
11.用户态 核心态转换
用户态——》核心态:中断(内 外中断)唯一途径
核心态——》用户态:更改PSW程序状态位进行更改。
12.中断的分类
13.外中断的处理过程
14.系统调用的作用:
对于每个进程来说 在想请求操作系统的服务时,需要进行系统调用,由操作系统来进行资源的分配。保证系统的安全性,稳定性 防止非法操作。
15.系统调用的分类:
16.系统调用的底层过程
系统调用发生在用户态(陷入指令 引起内中断)
对于系统调用的处理发生在核心态(中断处理程序)
17.系统调用和库函数的区别
库函数是高级语言的函数,可能是包装了系统调用,也可能没有用到系统调用。
目前的代码大多是利用库函数来进行系统调用的。
18.单道程序技术的内存
19.多道程序技术的内存
进程的内容:PCB 程序段 数据段
PCB是进程存在的唯一标志。
是资源分配和调度的独立单位。
20.PCB
21.进程的组织方式
链接方式(队列)
索引方式(索引表)
22.进程的特性
23.进程的状态 及转换
24.操作系统的原语实现
在执行原语之前 有关中断指令 中断信号无法使程序中断
运行之后有开中断指令 才可以处理中断
25.进程控制(进程状态的改变)
26.进程通信(IPC)
(1)共享内存:在内存中开辟一段空间,用来存储共享的数据,但是进程需要互斥的访问共享内存
基于数据结构:在共享内存中放一个数组(低级)
基于存储区:存储的数据形式、位置都由进程控制(高级)
(2)管道通信
管道是一个连续读写的共享文件,pipe文件,本质就是一块固定大小的缓冲区。
管道特点:半双工,各进程互斥访问管道,当管道满 write阻塞,管道空 read阻塞,只允许一个进程读管道 不然会错读,基于数字流
匿名管道:用于具有亲缘关系的父子进程间或者兄弟进程之间的通信。(父进程创建匿名管道,拥有句柄,fork创建子进程后,继承了句柄)
有名管道:有名管道严格遵循**先进先出(first in first out)**。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
(3)消息传递
直接通信:
消息队列:消息队列是接受进程独有的消息链表,具有特定的格式,存放在内存中并由消息队列标识符标识。
管道和消息队列的通信数据都是先进先出的原则。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
间接通信;
发送到中间实体(信箱),由接受实体进行拿取。
(4)套接字:
主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点。
(5)信号量
信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。这种通信方式主要用于解决与同步相关的问题并避免竞争条件。
27.线程的引入
线程:基本的CPU进行单元,程序执行流的最小单位。
进程:除了CPU外的资源分配最小单位。
28.引入线程的好处
避免了进程的频繁切换,线程的切换不需要保存现场再切换。
27.线程的实现方式
用户级线程由线程库实现,由应用程序来控制线程的切换(用户态)
内核级线程:管理工作由操作系统内核来管理,线程的切换在内核态。
内核级线程才是CPU处理的基本分配单位。
29.多线程模型‘
Java HotSpot虚拟机是以一对一模型。
30.处理机调度的概念
根据不同的队列,和调度发生的不同地方进行划分。
在中级调度中,挂起的队列是将进程映像放回外存,而在内存保留其PCB,方便操作系统管理。
七状态模型:
挂起态:将暂时不需要执行的进程放回外存的状态
31.进程调度的情况
主动调度:处理结束正常终止、发生异常而终止、主动请求阻塞
被动调度:更高优先级的进程插队、分配的时间片用完
不能进行进程调度的情况:
在处理中断过程中、在操作原语过程中、进程在操作系统内核程序临界区。
32.进程调度的方式
非抢占式:只允许进程主动放弃cpu(早期批处理)
抢占式:可以强行剥夺cpu运行的进程,来运行紧急的进程。(批处理、分时)
33.进程调度的过程
(1)选择一个要执行的进程。
(2)进程切换:1.保存当前进程的运行环境、数据,恢复选中进程的数据、环境。
34.进程调度算法评判指标
1)周转时间
2)平均周转时间
3)带权周转时间
4)cpu利用率
5)等待时间
6)响应时间
35.进程调度算法
1)先到先服务(FCFS)调度算法 : 从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
2)短作业优先(SJF)的调度算法 : 从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
3)时间片轮转调度算法 : 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
4)多级反馈队列调度算法 :前面介绍的几种进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法。
5)优先级调度 : 为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。
6)高响应比调度:非抢占式,在cpu当前进程执行之后,选取最高响应比的进程进行处理。
36.死锁、死循环、饥饿的区别
37.死锁的四个条件
1)互斥条件:每个资源只能由一个进程使用
2)不可抢占:进程的资源不能被别的进程强行剥夺
3)请求和保持:在保持一个资源下 继续请求别的资源
4)循环等待:各个进程间的有资源的循环等待链
(死锁一定存在循环等待 但是循环等待不一定发生死锁)
38.预防死锁
1)破坏互斥:将资源避免称为独占式 变为共享式的
2)破坏不剥夺条件:进程的资源可以被强行剥夺
3)破坏请求和保持:静态分配方法,当进程开始前拥有全部资源
4)破坏循环等待链:使用拓扑图,按顺序获得资源
39.安全序列:按照安全序列进行分配 可以完成分配,是安全状态。(序列:进程的执行顺序)
如果是安全状态 一定不会发生死锁。
但是如果是不安全状态有可能死锁, 不安全状态只是说有可能会发生但不一定处在死锁状态中。
40.银行家算法
三元组代表有三种资源
avalavle 目前剩余可用的资源数
request(i) 代表每个进程需要的资源
max 最大需求
allocation 已经分配的资源数
need 还需要多少资源
41.死锁的检测和解除
1)检测(代码实现)
资源结点(里面有该资源的数量)
进程结点。
算法:
1找出既不阻塞又不是孤点的进程Pi
2消去它所有边 变成孤点
3唤醒因Pi的持有资源而阻塞的进程 重复1
最后如果没有任何一条边 就证明不是死锁状态
2)解除
资源剥夺法
终止进程法
回退进程法
42.内存概念:程序数据需要放进内存里 才能被cpu处理(因为外存访问太慢了)
手机处理器有4GB内存的意思:内存有4*2的30次方的内存地址 该手机内存需要用2的32次方数来标识
43.逻辑地址和物理地址
44.逻辑地址 装入 物理地址
1)绝对装入:得到将放进内存的地址 在上图的编译过程 直接将程序里面的地址变为绝对地址(适合单道处理)
2)静态重定位:在装入过程中 ,判断装入模块的内存地址,将程序里的地址变为绝对地址。(已分配的空间很难改动)
3)动态重定位:设置重定位寄存器保存程序的内存开始的地址,在程序运行时,进行逻辑地址加寄存器的地址得到物理地址。
45.内存保护
1)
2)
45.内存管理的概念
46.内存空间的扩充
1)覆盖技术
当程序段大于内存段时,可以将内存分为覆盖区(可以被其他程序覆盖替换)和固定区(不变)。(由程序员声明覆盖结构 不适应)
2)交换技术
就是进程的中级调度(将挂起的进程从外存调回内存)在内存的叫法。
放在磁盘的交换区 而不是文件区。
3)虚拟技术
47.内存空间的分配与回收
(1)连续分配
1)单一连续分配(无外部碎片,有内部碎片)
内存分为系统区和用户区,用户区只能运行一个用户程序。
内存利用率很低,但没有外部碎片。
2)固定大小分区(无外部碎片,有内部碎片)
将内存固定的分为若干份大小,可以是均分,也可以是不均分。
使用分区说明表来进行每个分区的情况说明。
3)动态分区(有外部碎片,无内部碎片)
使用动态分区算法,根据新的进程的大小来动态的建立分区。
分区算法:
首次适应:从地址开始找第一个能满足进程大小的空闲分区。
最佳适应:按照空闲分区大小递 增 的规则开始查找,找到第一个满足要求的。(肯定是满足的分区中最小的,因为不一定正好 会留下大量小碎片)
最坏适应:按照空闲分区大小递 减 的规则开始,找出第一个满足的。(这样不会留下大量小碎片 但是大分区会慢慢变小 大进程进来就没空间了)
邻近适应(循环适应):根据空闲分区链表是双向链表,每次我们分配后 指针保留在当前位置,然后下次接着移动。
(2)非连续分配方式
1)分页存储管理:将内存分为均等的小分区,然后将进程对应分为分区大小
每个分区叫做一个页框,页框号从0开始。
分页存储的地址转换:
逻辑地址A是由程序内的逻辑地址+目前程序所在的页号
然后和页表寄存器进行加法 根据上面的公式 得出页号 通过页号在页表进行块号的查找
最后得到物理地址
页表:
操作系统为每一个进程创建了一个页表
将进程分页之后 对应的每一个页号 在页表项中都有对应的块号 ,这个块号是内存的物理地址位置。
第n个块号的起始地址为n*块空间
局部性原理:
时间局部性:某条指令被执行后 不久后可能还有执行。某些数据被访问后 不久后还可能继续访问。
空间局部性:程序访问某个地址之后,很有可能还要访问。
快表:
访问速度比内存快很多的高速缓存存储器,用来储存当前访问过的若干页表项,加速地址转换的过程。(内存的页表也称慢表)
二级页表:
因为每个进程都有一个页表 一个页表占多个页框 根据局部性原理 只会常访问特定几个页面。
分组后 使用二级页表进行页表的查询。
也可以让对应分组的页面利用虚拟内存技术 放到外存。
48.分段式储存
将进程根据程序内容进行分段 然后利用段表 放入内存中
分页式和分段式的区别:
- 共同点 :
- 分页机制和分段机制都是为了提高内存利用率,较少内存碎片。
- 页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的。
- 区别 :
- 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序,信息的逻辑单位。
分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。
49.段页式储存
49.传统方式的缺点
连续性(单一连续 固定分区 动态分区)还是非连续性(分段 分页 段页式)都必须一次性所有放进内存中 才能进行处理。
作业会一直驻留在内存中 直到运行结束。
50.虚拟内存
51.虚拟内存技术的分配(请求分页系统)
比较传统的页表 新添了很多字段
当页表中没有我们需要的页 需要将页从外存调进内存,声明一个缺页中断,然后经过进行调用。
此时缺页的进程阻塞 放进阻塞队列中,等到缺页中断完成 再唤醒。
内存的话如果有一个页框空的 直接放入。如果没有空的则使用页面置换算法 将页面置换进来。
缺页中断属于中断的内中断,里面的故障,因为是可以自动修复的异常。
52.页面置换算法
- OPT 页面置换算法(最佳页面置换算法) :最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。一般作为衡量其他置换算法的方法。
- FIFO(First In First Out) 页面置换算法(先进先出页面置换算法) : 总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。
- LRU (Least Currently Used)页面置换算法(最近最久未使用页面置换算法) :LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。
- LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法) : 该置换算法选择在之前时期使用最少的页面作为淘汰页。
53.文件有什么属性:文件名 标识符 类型 位置 创建时间 上次修改时间
操作系统对于文件的操作:
顺序文件
索引文件
索引顺序文件(结合两者)
54.文件控制块FCB
建立文件名和物理地址的映射关系
1)单级目录结构:不允许文件重名
2)两级目录结构 主目录是用户的目录表
3)多级目录结构(树形)
硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。
59.文件的分配方式
1)连续分配方式 优点:磁盘移动距离最短(查询最快) 缺点:磁盘碎片
物理块号=逻辑块号+起始块号
2)链接分配
隐式链接。缺点:要从第一块顺序查找到起始块号
显式分配 使用FAT文件分配表来快速查询 FAT是一张磁盘对于一个文件分配表
3)索引分配 每个文件自己有一个索引表,FCB文件控制块内指向索引表的块号,根据索引表来查询。
如果索引表过大 一个磁盘块装不下 可以使用链接索引表
也可以使用多级索引(类似于多级页表)
还有混合索引 有的索引直接指向块 有的指向二级索引 有的指向一级索引
60.文件储存空间管理
61.文件的操作
1)创建文件:create系统调用 1.从外存找到空间的空间 2.对于目录项插入此文件表项
2)删除文件:delete系统调用 1.根据目录的文件控制到找到外存的空间 2.回收对应磁盘块 3.删除文件项
3)打开文件:open系统调用 1.找到文件对应的目录项 判断用户权限 2.赋值目录项到打开文件表添加编号 返回编号给用户
根据系统的打开文件表的打开计数器 判断别的进程是否在用,在用则无法删除
3.1)读文件:read系统调用 1.先打开文件 拿到打开文件表 2.会使用读指针指向外存 读出指定大小的数据
3.2)写文件:write系统调用 1.先打开文件 打开文件表 2.写指针指向外存的地方 写入数据
62.文件的共享
硬链接(hard link):
A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。
软链接(soft link):
A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
63.文件保护
64.文件的层次结构
65.UNIX将I/O设备看为特殊的文件。交互的时候就用文件的输入输出操作。
66.CPU与I/O设备之间的中介——IO控制器
67.I/O控制方式
68.I/O软件层次结构
69.假脱机技术