1.内中断与外中断
外中断:外中断与当前执行的指令无关,中断信号来源于CPU外部,如I/O中断和时钟中断等等
内中断:内中断与当前执行的指令有关,中断信号来源于CPU内部,如发生系统调用,出现异常和发生缺页等等
那么当CPU接收到中断信号的时候,操作系统就会保存中断现场,并且执行"关中断"指令,随后CPU从用户态转变为核心态并根据所接收到的中断信号来执行相对应的中断处理程序,那么处理完中断处理程序之后,CPU便会恢复中断现场同时执行"开中断"指令。
2.系统调用
所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能。如创建文件就是系统调用。当我们单击鼠标右键,然后选择新建文件,这个时候CPU便会接收到内中断信号。CPU在接收到内中断信号之后便会从用户态变为核心态,且根据所接收到的中断信号来执行相对应的中断处理程序,执行中断处理程序过程中,操作系统会在新建文件所在目录的目录表中增加一个目录表项(FCB),这个目录表项中存放着文件的名字,属性,类型以及在外存中的存储地址。那么执行完这些操作之后,我们就能看到一个新的文件被创建出来了。
3.大内核与微内核
采用大内核的操作系统的大部分功能都处于内核之中,比如进程管理,储存管理,文件管理等等,那么要运行这些功能就必须将CPU切换到核心态,如下图所示
而采用微内核的操作系统只有与硬件接触最紧密的功能才处于内核之中,比如时钟管理,中断处理和原语等等。结构图如下图所示:
大内核:优点:高性能 缺点:内核代码庞大,难以进行管理
微内核:优点:内核功能少,结构清晰 缺点:需要在核心态和用户态之间频繁切换,性能较低
4.进程与程序的区别
程序是硬盘中的代码的集合,是静态的。而进程是程序的一次执行,是动态的,而且进程由PCB,数据段,程序段构成。比如分两次执行同一程序,那么操作系统就相对应的会创建两个进程,而这两个进程虽然程序段是相同的,但数据段以及PCB都是不同的,所以是两个不同的进程,即同一程序的每一次执行创建的是不同的进程。
5.进程的状态
1.创建态
2.就绪态
3.运行态
4.阻塞态
5.结束态
6.进程之间的通信
1.共享存储
2.消息传递
3.管道通信
7.进程与线程的区别
在引入线程之前,进程是资源分配和处理机调度的基本单位,而且只能在进程间并发。而在引入线程后,进程是资源分配的基本单位,线程则是处理机调度的基本单位,一个进程内部可包含多个线程,并且各线程间也可以并发,提升了并发度。
8.线程的类型
线程分为用户级和内核级线程,用户级线程是从用户视角就能看到的线程,由线程库实现。而内核级线程则是由操作系统实现,而且内核级线程才是处理机分配的单位。若一个进程只有多个用户级线程,那么只要有一个用户级线程发生了阻塞,该进程也会随之进入阻塞态。相反,如果一个进程有多个内核级线程,那么只有所有线程都发生的阻塞的情况下,该进程才会进入到阻塞态。
9.调度的层次
1.作业调度,又称高级调度,主要任务是:从外存的后备队列中选择一批作业进入内存,并为他们建立进程,随后这些进程会被送入到就绪队列中
2.中级调度,主要任务是:当内存比较紧张时,将暂时不能运行的进程移到外存中等待;当内存空间宽松时,再将这些进程调入回内存
3.进程调度,主要认任务是:从就绪队列中选择一个进程调入中CPU中运行
10.调度的时机
不能进行调度的情况:1.处理中断过程中 2.执行原语操作过程中
应该进行调度的情况:1.中断处理结束后 2.CPU运行的进程无法继续运行下去时
11.临界资源及临界区
一次仅允许一个进程使用的资源称为临界资源,CPU其实也是一种临界资源,而访问临界资源的那一部分代码就称为临界区
12.同步与互斥
同步:同步是一种直接制约关系,多个进程之间按某种次序依次运行
互斥:互斥是一种间接制约关系,当一个进程进入临界区访问临界资源时,另一个进程必须等待
13.死锁、饥饿、死循环的区别
死锁:多个进程因争夺某种资源,而形成的永久相互等待的现象
饥饿:由于长期得不到想要的资源,导致某进程无法向前推进的现象
死循环:某进程执行过程中一直跳不出某个循环的现象
14.死锁产生的原因
1.系统资源的竞争
2.进程推进顺序非法
3.满足死锁产生的必要条件
死锁产生的必要条件:互斥条件,不剥夺条件,请求并保持条件,循环等待条件
15.死锁的处理策略
1.死锁预防:破坏死锁产生的4个必要条件之一即可
2.避免死锁 :在资源的动态分配中,用某种方法防止系统进入不安全状态,从而避免死锁,一般使用银行家算法
3.死锁检测与解除
16.银行家算法
银行家算法的主要思想是避免系统进入不安全状态。在每次分配资源时,首先检查系统是否有足够资源,若有则先进行分配,并对分配后的新状态进行安全性检查。如果新状态安全,则正式分配资源,如果新状态不安全,则拒绝分配资源。这样就能保证系统始终处于安全状态,从而避免了死锁现象的发生。
17.绝对装入,可重定位装入,动态运行时装入
绝对装入:程序装入内存之前,就将指令中的逻辑地址改为物理地址
可重定位装入:程序装入内存之后且在程序运行之前,将指令中的逻辑地址改为物理地址
动态运行时装入:程序运行时才将指令中的逻辑地址改为物理地址,这种方式需要重定位寄存器的支持
18.覆盖与交换
覆盖:覆盖技术会将内存中的用户空间分为1个固定区和多个覆盖区,固定区中存放着最活跃的程序段,其余部分则放在覆盖区或外存中,当外存中的程序段要调入到内存时,覆盖的是覆盖区中的程序段。覆盖技术打破了将一个进程的所有信息装入到内存后才能运行的限制,但内存中只能存放一个进程
交换:交换技术的思想是当内存比较紧张时,将暂时不能运行的进程移到外存中等待;当内存空间宽松时,再将这些进程调入回内存,交换可以中不同进程之间进行
19.连续分配方式
连续分配方式是指将用户程序装入连续的内存空间中,连续分配方式包括单一连续分配,固定分区分配和动态分区分配。
单一连续分配:内存中的用户空间只能存放一个进程
固定分区分配:内存中的用户空间划分为若干个固定的分区,这些分区的大小可以相等,亦可以不相等
动态分区分配:内存中的用户空间按照进程大小动态划分,分配策略包括:首次适应算法,最佳适应算法,最坏适应算法,邻近适应算法
20.非连续分配方式
非连续分配方式允许应用程序分散地装入不相邻的内存分区中,非连续分配方式按照分区的大小是否固定可分为页式存储管理方式和段式存储管理方式
分页存储管理
简单来说就是:操作系统将内存空间划分为若干个大小相等的内存块(页框),同时每个进程也划分为与内存块大小相等的进程块(页面)。所以进程在运行的时候是以进程块为单位去申请内存中的内存块,从而实现了将一个程序分散地装入不相邻的内存分区。
分页存储管理地址变换过程:
1.根据所给的逻辑地址与页面大小作运算,得出页号以及页内偏移量
2.根据页号查找页表,得到相应的物理块号
3.将物理块号与页面大小相乘,并加上页内偏移量得到物理地址
因为页表必须存放在内存中,所以存取一个数据或一条指令至少要访问两次内存,第一次是访问页表获取物理地址,第二次是根据物理地址存取数据或指令。显然这种方法比通常执行指令的速度慢了一半,所以在地址变换过程中要引入快表
在具有快表的分页机制,地址变换过程如下:
1.根据所给的逻辑地址与页面大小作运算,得到页号以及页内偏移量,并根据页号查找位于寄存器中的快表
2.若快表有对应项,则从快表中得到相应的物理块号,将物理块号与页面大小相乘,并加上页内偏移量,从而得到物理地址
3.若快表中没有对应项,则需要访问页表,并在读出页表项后,将页表项的内容存入快表中。若快表已满,则按照某种算法对旧的页表进行替换
分段存储管理
分段存储管理是将用户程序按照模块进行划分,程序运行时就将这些模块分散的装入不相邻的内存空间中
分段存储管理地址变换过程:
1.所给的逻辑地址需明确指出段号以及段内偏移量
2.根据段号到段表中查找对应的基址
3.将基址与段内偏移量相加得到实际物理地址
段页式存储管理
段页式存储管理是将用户程序按照模块进行划分,而模块内部又分为若干个大小相等的内存块,程序运行时就将这些模块分散的装入不相邻的内存空
23间中
21.虚拟存储技术
虚拟存储技术是用来解决主存容量不足的问题,例如要运行一个大小为50G的软件,如果只有当程序中所有信息都装入到内存中才能运行的话,那么相应的主存容量这要达到50G以上,显然,这不现实。那么虚拟存储技术的实现过程为:当运行一个程序的时候,并不需要把该程序的全部内容都装入到内存中,仅需要把最可能用到的部分装入即可。而在运行进程时,可能会出现想要访问的页面不在内存中的情况,在这种情况下进程就需要发送缺页中断,把所需要的页面从外存调入到内存中,这种做法就叫做页面置换。若内存中尚有空闲块,那么只需要把调入的页装入到空闲块中即可,若此时内存没有空闲块,那么就要按照某种页面置换算法把某一页给淘汰掉。
22.I/O控制方式
1.程序直接控制方式
在程序直接控制方式中,CPU一直等待
2.中断驱动方式
3.DMA方式
4.通道方式
SPOOLING技术
SPOOLING技术即假脱机技术,那么在说明什么是SPOOLING技术之前,先来讲一讲什么是脱机技术。
在手工操作阶段,主机直接从I/O设备中获取数据,由于主机较快而I/O设备相对来说慢很多,所以导致主机要浪费很多时间来等待I/O设备。如下图所示:
所以,人们为了缓解I/O设备与主机之间速度差距过大的矛盾,就引入了脱机技术。所谓脱机技术就是在I/O设备与主机之间建立缓冲区,如下图所示:
在上图中,输入数据的时候,纸带机的数据首先通过外围控制机传送到磁带机中(磁带机的速度比纸带机快很多),然后主机再从磁带机中读取数据。而在输出数据的时候,主机首先把数据放到磁带机中,随后磁带机通过外围控制机把数据传送到纸带机中。那么引入脱机技术主要有两个优点:1.缓解了主机和I/O设备之间的速度矛盾 2.即使主机在忙碌,也可以提前把数据存放在磁带中;即使慢速的输出设备在忙碌,主机也可以把数据暂时存放在I/O设备中。
那么SPOOLING技术其实就是以软件的方式来模拟脱机技术,SPOOLING系统的组成如下图所示:
上图中的输入和输出井对应着脱机技术中的磁带机,而输入进程,输出进程及输入输出缓冲区则对应着外围控制机。SPOOLING技术的工作原理:(1) 当有多个I/O设备要向主机输入数据时,这些进程会形成输入进程队列并且每个进程的数据都通过输入缓冲区放到输入井中,当主机接收数据的时候就会运行输入进程队列里面的进程,同时把该进程对应的数据从输入井中取出来。 (2)当有多个进程要向同一台I/O设备输出数据的时候,首先也会形成输出进程队列同时每个进程都把数据放到输出井中,随后主机会执行输出队列中的输出进程,并把该进程对应的数据从输出井中取出放到输出缓冲区中,最后再输出到设备中。 通过SPOOLING技术,可是实现将互斥设备改造为共享设备。
同步与异步
同步是指进程在执行某个请求时,该请求需要等待一段时间才能得到回应,那么进程会一直等待,直到收到回应为止
异步是指进程不需要一直等待下去,而是可以执行其他的操作,当请求得到回应时再通知进程进行处理