OS-1
操作系统个人初步感受下来就是需要例子来支撑,否则光看书确实会有些晦涩
后面尽可能多利用例子解释…
操作系统管理硬件、协调资源,不管理偏软的东西
学习提示:要重点关注和理解各类操作系统主要想解决的是什么问题,各自的优缺点
这里对书上的内容做一个概况、补充、类别归纳:
直接从这边说,概念定义而言,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,历朝历代的考研人已经整合出了绝对优于王道的知识点汇总
这里其实同时解决了为何主存一次只能被一个进程占用的原因,就在于总线的占用
这样理解吧,响应判优和中断处理判优不是一个硬件完成的,没必要过于纠结硬件了
虽然还是留了那么一个坑在