二、操作系统基本原理
一个操作系统包括:
- 进程管理
- 存储管理
- 文件管理
- 作业管理
- 设备管理
- 微内核操作系统
进程管理:
进程状态
- 就绪状态
- 运行状态
- 等待状态
前趋图
前趋图解决顺序约束关系
进程的同步与互斥
PV操作
-
临界资源
在某一个时间点,只允许一个对象操作
-
临界区
是一段代码,访问临界资源的代码片段就叫做临界区
-
信号量
一种特殊的信号量,专门使用在pv操作中,类似于Java中进制之间通信的管程法
PV操作就是对进程的一种管理
p操作:
执行某一个进程之前先将信号量s-1,若结果为负数则阻塞它,加入等待队列。否则正常执行
v操作:
执行某一个进程之前先将信号量s+1,若结果不为正数,则唤醒它,否则正常执行
PV操作结合前趋图
首先会给出前趋图,然后让你补全线程的pv操作。
死锁问题:
进程之间相互抱锁而等待对方的锁的问题,类似于Java的死锁
死锁产生的四种条件:
- 资源互斥(这个资源不共享)
- 保持和等待
- 不剥夺
- 进程之间形成回路
打破四种条件之一即可解除死锁
避免死锁问题的产生:
- 有序的资源分配
- 银行家算法
存储管理:
分区存储组织:
- 首次适应法
- 最佳适应法
- 最差适应法
- 循环首次适应法
页式存储组织:
页式存储就是将内存等大小的分成一个个块。然后将用户程序等大小的分成一个个的页,将需要用到页调入内存允许,运行完后调出。不需要用到的页不调入内存。这中间需要用到页表来映射页和内存块之间的联系
优点是:利用率高,碎片小,分配管理简单
缺点是增加了系统的开销,可能发生抖动现象
例题:
页面大小为4k可以计算到页面位数为2的12次方,12次方就是页内地址的位数。逻辑地址是页号+页内地址,物理地址是块号+页内地址。一个十六进制位对应4个二进制位,那么5A29的后三位就是页内地址。
淘汰页号要查找访问位位0的页面
段式存储:
段式存储不需要等大小划分,它是按照程序的函数需要的内存大小来划分内存块,允许各个块有不同大小
优点:多道程序共享内存,各程序修改相互不影响
缺点:内存利用率低,内存碎片浪费大
段页式存储:
快表
页面置换算法:
-
最优算法OPT
-
随机算法RAND
-
先进先出算法FIFO
产生抖动,淘汰最先进入内存的页面
-
最近最少使用LRU
不会产生抖动,淘汰最久没被访问的页面
淘汰算法例题:
首先明确一点,在考试中约定指令虽然跨两个页,但是我们只计报缺页一次。
首先完全执行这个指令,需要访问6个页面,而访问页面需要查表也就是一个页面需要访问内存2次,总共访问12次.
缺页就是内存如果没有调入页面,但是需要访问时就会报一次缺页。指令只报一次,操作数跨两个页面报两次,总共就是5次
文件管理:
索引文件结构:
例题:
首先,题目告诉我们0到4是直接索引那么这里就占了5个地址了,然后5号是一级索引大小为1kb每个地址项大小为4b。那么1kb/4b=256个地址项。加上前面的5个地址,就是261个,也就是说187号物理地址对应的是261的逻辑块号.101显而易见的是二级索引
文件和树形目录结构
绝对路径和相对路径
空闲存储空间的管理
将系统内存在的空闲内存区管理起来,方便之后的读和写的操作
- 空闲区表示法(空闲文件目录)
- 空闲链表法
- 位示图法
- 成组链接法
设备管理:
数据传输控制方式
- 程序控制方式
- 程序中断方式DMA方式
虚设备和SPOOLING
简单来说就是队列的应用,当外设在执行某项任务时,你向外设传递的任务将会进入队列等待执行,提高外设的使用效率
微内核操作系统
将操作系统的各个部分分离开,将最核心的部分做成内核,各个部分不会相互影响。
- 用户态
- 内核态