基本原理:
1.指令执行的基本指令周期:
开始->pc取到指令,存入IR,pc指向下一条指令地址->执行IR中的指令->停止
2.中断分类和中断处理过程:
(1)程序中断,软件实现
(2)时钟中断,由系统时钟产生的中断,固定时间触发,可以视作时钟周期
(3)IO中断,由输入/输出设备产生,发起中断请求
(4)硬件故障中断,优先级高,特殊情况下保护数据完整和硬件安全
中断执行过程:
无中断:执行用户程序和IO程序
有中断:执行用户程序,IO程序不执行
开始->pc->IR->检查中断,初始化中断程序;
3.处理中断的两种方法:
中断技术并不是单独地由软件或硬件实现的,而是通过软硬件结合技术相互配合,协同实现的,这些参与到中断实现过程中的装置或程序统一称为中断系统
(1)禁止中断(顺序处理):
中断控制器:控制中断寄存器,中断寄存器中存放来自中断源发起的中断请求
正在处理一个中断时,禁止中断,也称关中断
对所有中断严格按照顺序依次执行,实现起来较为简单,但是没有考虑优先级和实时访问的情况
(2)中断嵌套:
嵌套处理多中断,高级中断可以打断低级中断
4.存储器层次:计算内存的平均存取时间
二级存储器(cache-内存)
三级存储(cache-主存-外存)
存储器金字塔:寄存器->cache(三级缓存)->内存->外存(辅助性存储)
5.高速缓存:
目的:缓解cpu和内存之间的巨大速度差异
作用:加快内存访问速度(通过cache实现),cache是通过SRAM进行实现的,SRAM(通过触发器进行实现)比DRAM(通过电容进行实现,需要定时进行刷新,维持内部存储的电平状态)快,但制造成本高
6.程序的局部性原理(考虑时空局部性)
程序局部性原理从两部分来看,时间局部性和空间局部性:
(1)时间局部性原理是指:短时间内,被访问过的指令和数据有很大的概率很快会被再次访问
(2)空间局部性原理是指:短时间内,处于某一区域的指令和数据会被程序频繁访问
为什么cache与局部性原理有关:
cache是为了缓解cpu与内存之间的速度差异过大的矛盾的,cache的实现方式是在cpu和内存之间增加了一小块支持高速访问的SRAM存储区域,存储cpu短时间内访问的内存指令或数据地址。由于程序局部性原理,cpu能从cache中取得需访问的指令或数据,节省了访问内存而浪费的大量时间
7.操作系统的发展过程:从cpu和资源上看,cpu只不能代表电脑的全部算力
手工操作阶段:人机交互,用户独占全机,人机速度矛盾导致资源利用率极其低下。
批处理系统:引入了脱机输入/输出技术(使用磁带)完成,用监督程序复制控制作业的输入,输出(有点像daemon,用与守护进程)
单批道程序处理系统:只支持同时执行一段程序或指令,内存中只能装入一个作业,导致大量时间浪费在等待io操作程序上。
多批道程序处理系统:多道程序并发执行,多个作业同时放入内存中执行,共享计算机资源,资源利用率大幅提升的同时cpu也能保持busy状态,缺点在于响应时间长
分时操作系统:分时(多用户),独立(各用户互不干扰),及时(响应快),交互性(直接控制程序执行)
计算机以时间片尾单位轮流为各个用户作业服务,各个用户可以通过终端与计算机进行交互,解决了人机交互响应慢的问题,但是不能处理一些高优先级的任务
实时操作系统(RTOS):实时,可靠,安全,专用,有限交互
能够优先相应一些紧急任务,某些紧急任务不需要时间片排队,必须要在严格的时限中处理完对应事件,具有高可用性,及时性和可靠性
9.多道程序设计如何提升效率:
多道程序设计可以同时将多个程序加载到内存中,在一个程序执行io操作的时间段时切换到另一个程序执行,大大提高了cpu的执行效率
10.多个作业并发执行时资源利用率如何计算
进程管理:进程是动态的,程序是静态的,现成
五状态进程模型:
新建态->进程处于刚刚被创建的状态,但还未加载到内存中
就绪态->进程已经在内存中,具备了一切可以执行的条件
运行态->进程正在占用处理器执行状态
阻塞态->进程在等待某些事件发生之前不能被执行的状态,比如等待I/O操作完成
退出态->进程已经处于结束状态
进程控制块(PCB):
对进程的各项信息加以描述并保存,可以理解为元进程,是进程属性的集合
进程的创建和终止:
创建:所有的进程都是由操作系统进行创建的,对用户透明,允许一个进程产生另外一个进程,进程派生
终止:分为两种情况:1.正常完成其所执行的程序 2.因各种原因导致还未完成而提前结束
进程切换:
是指进程调度时新旧进程的切换
执行模式的切换:
执行模式有两种,一种是用户态,一种是内核态
用户态:在进程用户空间运行的线程库创建并管理,操作系统未知,高效,不涉及到状态切换
内核态:内核级线程由内核创建并管理,一个进程的线程可以在多个处理器上并行,但涉及到模式切换
进程和线程的区别:
进程是资源分配的最小单位,线程是cpu执行的最小单位
线程的优点和三种状态:
优点:1.减少管理开销,创建和终止花费时间比进程少
2.线程之间可以快速切换,切换速度比进程快
3.线程之间的通信较容易实现
4.线程的并发程度高,可以在多处理器系统上并行,并发性能强
三态:
1.就绪 2.执行 3.阻塞
内核级线程和用户级线程特点
内核级:1.内核可以将同一进程的不同线程调度到多个处理器上,并行执行
2.单一线程被阻塞并不会导致该进程被阻塞
3.切换速度快;缺点:线程转移需要进行用户-内核-用户的模式切换,系统开销大
用户级:1.高效,线程切换不需要内核态特权
2.可移植性高,可以在任何操作系统执行
3.调度与应用程序相关
互斥
只允许同一时间内只有一个进程访问临界区的临界资源
临界资源与临界区:
临界资源:1.同一时间内仅仅允许一个进程独占使用的资源
临界区:1.同一时间内仅允许一个进程运行的一段代码
信号量:
信号量是用于表示系统中某种资源数量的一个变量
semWait()表示占用一个信号量,分配给运行的进程的信号量
semSignal()表示释放一个信号量
信号量原语定义:
struct semaphore{
int count;
queueType queue;
}
void semWait(semaphore s){
s.count--;
if(s.count < 0){
/*把当前进程插入到等待队列s.queue,阻塞当前进程*/
}
}
void semSignal(semaphore s){
s.count++;
if (s.count <= 0){
/*从等待队列中唤醒一个进程,将其插入就绪队列*/
}
}
用信号量实现互斥和同步
设置多个信号量,表示不同资源的数量
有限缓冲的生产者/消费者问题:
增加信号量s来记录空闲缓冲的数量
死锁概念:
一组相互竞争系统资源或通信的进程间“永久”阻塞
资源分配图:
注意资源的数量,大概率有环路,有环路不一定会导致死锁,死锁一定存在环路
死锁的四个必要条件:
1.互斥
2.占有且等待
3.不可抢占
4.循环等待
内存管理:
固定分区:
将内存划分为固定数量的区块,这些区块可大小可以相同或不同,但一但划分好,分区数量不变,缺点是容易产生内存碎片
动态分区:
根据进程的大小动态生成分区,分区大小正好等于进程大小,分区数量会实时变化
首次适配,下次适配,最佳适配:
首次适配:将空闲区按起始地址递增排列,从链首开始匹配,匹配到大小
下次适配:将空闲区按起始地址递增排列,从上一次放置进程的内存位置开始扫描
最佳适配:空闲区按分区大小递增顺序排列,从链首开始查找,第一个满足要求的空闲区就是满足要求的最小空闲区。
内部碎片:
加载的数据块小于分区大小而导致内存空间浪费
外部碎片:
由于进程多次换入换出而出现多个无法利用的小空闲块,称作外部碎片
伙伴系统的分配与回收:
伙伴系统是指分配两个相邻的帧块,每块大小相同
首先查找是否有长度为s的空闲块,有则直接分配;无则查找是否有2s,4s的空闲块,直到找到一个空闲块,将该块分裂为两个伙伴:左伙伴L和右伙伴R,R保留作为新空闲块。如果长为s直接分配,过大则分裂为s/2.
回收:系统释放该进程所占据的内存空间,检查对应的伙伴是否为空闲块,是,则合并为更大的伙伴空闲块,否,则不能合并为更大的空闲块
重定位:
逻辑地址转换为物理地址
线程的地址分布不一定连续,
设备管理与磁盘:
中断I/O方式和DMA有什么区别
中断IO:可以实现cpu和I/O设备并行操作,但是需要cpu需要时间处理中断,导致中断次数增加后会使cpu利用率降低
DMA:使设备与内存直接进行交互,只有在数据传输结束后才会向cpu发送中断信号,大幅减轻了cpu负担
通道方式:相对独立的IO控制系统,当cpu发出IO命令后,由设备驱动程序生成通道程序,通道完成全部的通道指令后才会向cpu发出中断信号
中断I/O的优点和缺点:
优点:各种设备通用
缺点:中断次数多
缓存buffer的作用:
缓解cpu和IO设备之间巨大的速度差异,提高cpu利用率,提高cpu和IO之间的并行性