操作系统个人初步感受下来就是需要例子来支撑,否则光看书确实会有些晦涩

后面尽可能多利用例子解释…

操作系统管理硬件、协调资源,不管理偏软的东西

学习提示:要重点关注和理解各类操作系统主要想解决的是什么问题,各自的优缺点


这里对书上的内容做一个概况、补充、类别归纳:

直接从这边说,概念定义而言,OS这门课更多注重于资源的管理

而对硬件机器的扩充、接口并不是这门课的核心,会有一定的涉及但不是核心

从一个例子里面就可以大致上理解操作系统的意义、功能,书上也有对其比较详细的定义

然后可以看到操作系统实际上和三层相互连接,用户层、应用程序层、裸机层

书上对其的介绍也是基于这个逻辑一步步展开的


至于其具体的交互案例、逻辑,个人认为书上和PPT讲解足够好,复习只需要看这些即可

书上的目标和功能这一块本身就是按这个逻辑展开的


操作系统管理的主要是计算机资源(硬件资源、广义上的资源


操作系统的特征:

第一个,并发性:

在这门课中的“同时”意味着并发,需要和并行区分

这里可以配合计组的内容复习,如单核处理器和多核处理器的概念

单核处理器实际上在同一时间只能处理一个线程

即使采用了多线程技术,本质上也只是单线程,无非实现真正的线程并行

多核处理器能够在实际意义上完成多线程的并行处理,因为其有多个独立运行的处理核

它能够实现真正意义上的线程并行

这门课谈的并发性是广义的,因为即使是多核CPU也可能会同时干超过其核数的线程

所以自然产生了多道程序技术,也称程序并发


第二个,共享性:

互斥性是由这个资源的自身特性和对其的使用方法决定的

这边的同时,并不是真正意义上的同时,这门课里面所有的同时都只是并发

宏观上并行,微观上并发

并发性和共享性互相依存,没有并发性自然不需要共享性,没有共享性无法实现并发性


虚拟化,分为时分复用、空分复用

这门课的特点就是用例子学会比较形象很多


至于异步性,书上讲的不错,没必要用博客记录


关于操作系统的发展,我的建议是届时直接看PPT结合书本复习即可,足够详细了

重点应该放在各自的特征、优点、缺点,知道这个是什么东西

就是不断优化资源的调度

这里谈一些比较容易错的点:

手工操作阶段肯定是单用户的,无法支持多用户

在批处理阶段就可以支持多用户了,无非不能与用户进行交互而已,分为单道/多道批

课后习题里面的两个综合题个人认为是非常好的考察方法,值得好好复习

其核心大致就是,当前CPU运行的时候,能不能找到一个可并行的外设一起运行

或者反之,当前外设运行的时候,CPU能否并行运行,尽可能让两者并行运行

分时操作系统同样是支持多道程序的,也就是同时可以处理多个程序,可穿插运行

网络和分布式没什么特别可以谈的,看书就行


关于中断处理过程的进一步细化

执行中断处理程序不是内核做的事情,而恢复、保护现场,移交控制权是内核做的事

建议配合计组P310的中断处理流程来感悟


剩下的就是操作系统的运行环境一节:

首先明确一个概念,这一节所说的指令均是二进制指令,而不是一般所说的机器指令

日常所运行的程序一般都指代应用程序,运行在用户态或者说目态

而操作系统具体的实现实际上是依赖于一系列“内核程序”,这些程序组成操作系统内核

这些程序自然是运行在核心态,又称管态、内核态

先前提到过程序的运行最终均是被划分为一条条二进制指令,由CPU执行运行

至于当前到底是用户态还是核心态,是由PSW内的一个标志位来表示的


特权指令、非特权指令:

CPU在出厂后会被设置好对指令的识别,能够一眼看出哪些是特权指令哪些是非特权指令

也很明朗,特权指令只能在管态或者说内核、核心态执行

非特权指令并不是一定只能在目态或者用户态运行,它也可以在核心态运行

只是用户态不能运行特权指令而已

如何来识别并完成这个操作?CPU会通过PSW中的用户/核心态表示位来判断是否执行指令


关于用户态与核心态之间的转换:

核心态-用户态:

核心态转为用户态,需要一条特权指令才能完成

在中断处理中,“中断处理程序的最后一条指令通常是一条中断返回指令”

这里面就包含有一条转为用户态的特权指令

不过不要把这个看太粗,实际上中断返回指令需要执行多个事件

基本可以分为“恢复现场”“核心态转用户态”,这一些都是在内核中运行的,不是硬件

硬件完成的实际上是PSW/PC的恢复,而操作系统完成的是对现场信息的恢复

整个过程属于内核的功能实际上很少,内核不具备异常/中断处理的功能,必须找外援

内核是一系列“功能”的集合体

不然也就没有必要通过软件查询、硬件向量表去查询这个相应的中断处理程序

用户态-核心态:

由用户态转为核心态需要执行一条“陷入”指令或者说访管指令,是由且仅由中断实现的

注意是通过硬件中断机制实现的,说白了就是计组里面谈的隐指令

访管、陷入都是同一件事情的不同角度说法而已

陷入一般特指异常状态下的,被动的陷入,核心态强制夺取控制权

而访管一般是主动的,主动出让控制权,一般也就是一个主动性的“中断”

书上其实讲得就比较稀碎,没有单独拎出来讲,看起来虽然详细但缺乏逻辑

还是比较建议分模块、分逻辑一个个把知识点给拆出来的

另外补充一句,如果已经在了核心态你访管干嘛,所以核心态是肯定不执行访管的


这个是内核的一个基本包含架构,或者说内核的内容有这些,能完成这些功能

完成这些功能的程序被称为内核程序,多个内核程序组成了内核

一般还是习惯于把内核分为三大功能的,上面的资源管理功能一般不会列入

但如果列入了也不是什么怪事,也可以当作一个“大内核”看待

书上对这一部分实际上还有更加详细的介绍,包括各功能的细节说明


然后再对外部中断引起的用户态向核心态的转变进一步详细化、形象化:

其实书上对外中断的划分分为:可屏蔽中断与不可屏蔽中断,个人认为更加恰当一些

外部中断是硬件中断,内部中断里面的终止异常也是硬件导致的中断

对于最后这个基本实现原理稍微补充一下:

找到相应的中断处理程序这个方法,其实不一定依靠中断向量表,也可以是中断程序表

一个是硬件找,一个是软件找,之前在计组的时候也有涉及过

书上还有一块区分子程序调用和中断处理,确实是非常类似的操作


系统调用是专门给应用程序用的,给用户用的是命令接口

但广义上来说,也可以称程序接口(一组系统调用)、命令接口均是给程序员的(用户

这里对库函数稍微说一下,不同类型的库函数调用速度是不一样的

其中不需要系统调用的库函数运行速度是最快的,因为不涉及到状态的转换

一旦涉及到状态的转换,那么必然会浪费一定时间,导致运行速度下降

一般可以理解为只要涉及到共享资源的操作,一般都会涉及操作系统,一般下面几类


补充:

常见的非特权指令:

存取数,读时钟,加减乘除,寄存器清零,压栈弹栈,跳转,trap(访管)

常见的特权指令:

开关中断,写时钟,输入输出,写PSW

简洁来说就是,对于共享资源的访问需要特权指令来执行

对于独占资源的访问,非特权指令进行执行就可以了

特权指令:I/O指令、置中断指令、中断返回指令、关中断指令(清内存、置时钟、分配资源、修改页表段表、修改用户访问权限)

核心态:时钟管理、中断处理、设备驱动、进程管理、存储器管理、设备管理

系统调用:设备管理、文件管理、进程控制、进程通信、内存管理
【异常:故障(falut)、陷阱(trap)、终止(abort)】

参考该文章:

[https://blog.csdn.net/weixin_45415929/article/details/127852663]

我的建议是,多看CSDN,历朝历代的考研人已经整合出了绝对优于王道的知识点汇总

这里其实同时解决了为何主存一次只能被一个进程占用的原因,就在于总线的占用

文章:[https://blog.sunlingzhang.com/2020/01/18/%E7%89%B9%E6%9D%83%E6%8C%87%E4%BB%A4%E3%80%81%E8%AE%BF%E7%AE%A1%E6%8C%87%E4%BB%A4%E3%80%81%E9%99%B7%E5%85%A5%E6%8C%87%E4%BB%A4%E3%80%81%E5%B9%BF%E4%B9%89%E6%8C%87%E4%BB%A4/]


这样理解吧,响应判优和中断处理判优不是一个硬件完成的,没必要过于纠结硬件了

虽然还是留了那么一个坑在