本笔记为笔者观看网课王道计算机考研 操作系统 所记录。
文章目录
1.1.1、操作系统的概念、功能
1.1.2、操作系统的特征
主要有两种虚拟技术:时(时间)分复用技术 空(空间)分复用技术。
虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。
多个进程能在同一个处理器上并发执行使用了 时分复用技术,每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。
由于资源有限而导致并发时出现进程走走停停的状态即是异步。
1.2、操作系统的发展与分类
- 用户响应时间长:批处理系统按照先来先服务的顺序处理作业,每个作业在处理之前必须等待前面的作业完成。这种等待时间会使得用户的请求从提交到完成的时间较长,因此响应速度较慢。这种长时间的延迟对用户体验有很大影响,尤其是在多个作业同时排队时,用户等待时间会进一步增加。
- 没有人机交互功能:在批处理系统中,作业提交后,用户无法对其进行干预或调整。这意味着用户在作业执行过程中无法进行任何形式的交互(例如调试程序或调整参数)。例如,一旦作业开始执行,用户无法中途更改输入数据或进行其他修改。这样缺乏交互的特性导致系统只能按照预设的流程执行,灵活性较差。
这种系统设计的初衷是为了提高资源利用率(例如CPU和内存的利用率),通过让多个作业同时占用资源来保持计算机的“忙碌”状态,但牺牲了实时响应和交互性。
1.3.1、操作系统的运行机制
上面的四条机器指令是乱写的。
此处有动画1.3_1_操作系统的运行机制_哔哩哔哩_bilibili
嗯…迭代式学习,最科学的学习方式。
1.3.2、中断和异常
可屏蔽中断,不可屏蔽中断,原语???
中断是什么?
答:中断是改变处理器执行指令顺序的一种事件。这样的事件与CPU芯片内外部硬件电路产生的电信号相对应 。
此处有动画1.3_2_中断和异常_哔哩哔哩_bilibili ↓



此处有动画1.3_2_中断和异常_哔哩哔哩_bilibili ↓
由于应用程序1已经执行了50ms了,所以此时操作系统内核决定接下来让另一个应用程序上CPU运行。
应用程序2执行一段时间后,CPU又发出中断信号
然后应用程序1继续执行
由此可见两个应用程序是如何在中断机制的支持下实现并发运行的。
时钟中断信号是如何产生的?时钟中断处理程序(时钟驱动程序)的功能是什么?
答:
时钟软件—时钟驱动程序(时钟中断处理程序)的功能:
- 维护日期、时间
- 递减时间片并检查是否为零,防止进程运行超时
- 对 CPU的使用情况记帐
- 递减报警计数器。
还有一种外部中断是I/O中断,CPU接收到I/O中断信号后会执行相应的中断处理程序。
单重中断的处理流程如下:

在计算机系统的中断机制中,硬件需要完成哪些工作?操作系统需要完成哪些工作?
答:硬件需要完成的工作:产生中断信号、传递中断信号、生成中断向量等。
操作系统需要完成的工作:初始化中断向量表、执行中断处理程序等。
1.3.3、系统调用
系统调用是一群预先定义好的模块,它们提供一条管道让应用程序或一般用户能由此得到操作系统核心程序的服务。
此处有动画1.3_3_系统调用_哔哩哔哩_bilibili ↓
1.4.1、操作系统体系结构(上)
答题得时候不要说“变态”这个词,要说cpu状态的转换。
1.4.2、操作系统体系结构(下)
标星号的是有可能在选择题中作为选项的点。红色星号是全新的内容,黄色星号是涉及到之前学过的大内核微内核的内容。
层0是硬件,出场时厂家负责它的可靠性。
由于层间的调用接口固定不变,所以我们要是想在原有的两层之间新加一层也是ok的,
内核=主模块+可加载模块。主模块包括进程、内存等重要的功能,可加载内核模块包括驱动程序等。 可加载内核模块算是锦上添花的东西,没有它系统也能运行,只不过就丢失了扩展性。
模块间相互依赖,难以调试定位bug所在。
分层结构其实也是一种模块化的设计思想(每一层就是一个模块),但模块间有一个很清晰的单向依赖的关系,高层可以调用低层。所以分层结构在调试和验证时会更容易。
这种操作系统结构非常少见。
在普通的操作系统中,如果应用进程想申请一片内存空间,那么给它分配的内存空间是经过抽象的、虚拟化的,用户进程它自己的视角看到的似乎是它自己拥有了一整片连续的内存空间,但事实上这只是虚拟的内存空间,操作系统内核会把这些虚拟页面映射到实际的物理页框中,这些物理页框在内存中通常是离散的,所以普通的操作系统给进程分配的内存空间其实是经过抽象的、虚拟化的。除内存空间之外,给进程分配的外存空间也是经过抽象的。
而外核操作系统中,外核可以直接给用户进程分配未经抽象的硬件资源,这样的资源管理策略在有的时候会很有用,比如一个用户进程他很有可能知道自己的这一片存储空间是经常需要随机访问的,那如果给这个用户进程分配的磁盘空间在外存中是离散的,那么用户进程在随机访问它这些文件块的时候意味着磁头需要来回横跳,这样就会导致用户进程对自己的文件随机访问的性能变低,因为用户进程的文件在外村中到底被零散地分布到哪些位置是完全由操作系统决定的。
而如果用户进程知道自己的这个文件需要被频繁地随机访问,那它就可以向外核申请分配一整片连续的磁盘块,可以大大减小磁头每次移动的距离,性能就会提升。内存也是一样。
外核除分配未经抽象的硬件资源之外,还负责保证硬件资源的安全。即禁止进程访问已被分配给其他进程的区域。
降低了系统的一致性:对于有外核的操作系统,有些进程可能分配到的是虚拟的地址,有些进程分配到的是真实的地址,所以后续的管理会出现各种各样的情况,所以降低了系统的一致性使系统变得更加复杂。
1.5、操作系统引导
磁盘开头的位置会留出一片区域用于存储MBR。
分区表就是一个数据结构,这个数据结构说明了磁盘中每个盘/分区分别占多大空间以及地址范围。
操作系统要启动,那操作系统的数据要先放到主存中。
主存分为RAM和ROM,我们说的内存通常指的是RAM。
ROM芯片被集成在电脑主板上,里面存的使BIOS(Basic Input/Output System ),它是由一系列的程序组成的,启动最重要的一个程序就是ROM引导程序。
RAM芯片一断电,里面的数据就会被清空了。而ROM芯片里的数据是不会因断电而消失的。这就意味着我们开机时,CPU一旦通上电,CPU就可以到主存固定的位置就找ROM引导程序并执行。ROM引导程序会指示CPU去把磁盘中的MBR读入内存,然后CPU就会去执行磁盘引导程序,而磁盘引导程序会根据分区表去判断c盘所在的位置,接下来就会读入c盘中的PBR程序并执行,然后CPU就会找到存放在c盘根目录中的启动管理器程序读入主存并执行,这个启动管理器程序就会完成操作系统初始化的一系列工作。
1.6、虚拟机
这看起来似乎是合理的,但在有些商业化的环境中,这会导致硬件资源利用率不充分的问题,比如你有一台性能非常好的物理机,由于这台机器上只能运行一个操作系统,当你想要租给其他人使用时,那其他人要运行的东西只能和你的程序在同一个操作系统上运行,这样会造成争夺操作系统资源的问题以及安全隐患。
对于第一类VMM来说,只有虚拟机管理程序是运行在内核态的,只有它才能使用特权最高的那些指令。而上层的操作系统是运行在用户态的,所以上层的操作系统运行一些特权指令时,VMM会截获它的动作,并等价转换成自己调用的一系列特权指令。
第二类VMM中,运行在内核态的部分是以VM驱动程序的方式加载到操作系统内核中的。???我不理解
把特权指令划分成多级别是有好处的。
如果指令仅分为特权和非特权指令,那么虚拟机的任何一条非特权指令都会被VMM截获并且判断是否合法,如果合法则还需要VMM模拟出特权指令执行的效果。
如果对指令的特权级进行了更精细的分类如下
那么上层的虚拟机使用Ring1、Ring2的特权指令时,VMM不会拦截,直接就会让其执行。这样,VMM就只需要检查敏感指令Ring0即可。