记录一下在b站看到王道操作系统考研课视频
手机,电脑有各种操作系统
操作系统的功能和目标
资源的管理者:硬件和软件都是计算机资源
操作系统扩充硬件机器,更好的服务用户
操作系统是一种系统软件。为上层的应用软件和用户提供简易服务,用户可以直接使用操作系统
操作系统控制和管理计算机资源,合理调度工作,分配资源
windows的任务管理器里的进程菜单可以看到各个软件进程占用的cpu和内存资源大小
用户和操作系统间的接口有三大类
第一类 命令接口 又分为联机命令接口(shell,有交互性)和脱机命令接口(windows中的.bat文件,批量执行命令)
第二类 程序接口(windows中的.dll文件) 由系统调用组成 系统调用又叫广义指令
第三类 GUI 其实是调用了程序接口
--------------------------------------------------------------------------------------------------------------------
操作系统的四个特征:
并发指的是宏观上的同时性,微观上是不同时的
并行则是真的围观同时发生,多核处理器可以实现并行进程,但是处理器内心仍然有很多并发(宏观同时)进程
共享分为互斥共享和同时共享两种,两种都是微观上不能同时的,这里指的是宏观上的同时性
没有并发也就不需要共享,没有共享并发就无法实现。
虚拟性体现在虚拟内存以及虚拟的独立CPU(进程并发,每个进程好像独占了cpu)
异步指的是 进程并发,各个进程的执行顺序是不可知的,走走停停,以不可知的速度向前推进
异步性是并发性导致的,没有并发也就不会产生异步了
----------------------------------------------------------------------------------------------------------------------------
脱机技术的引入,批处理阶段
多道批处理系统利用并发技术大大提升了CPU和IO设备利用率,提高了系统吞吐量
多道批处理系统可以流水线,使 输入,计算和输出 三个部件同时工作
分时操作系统则是多用户,轮流为每个用户服务
实时操作系统则提供优先级选择,确保重要进程按时完成
---------------------------------------------------------------------------------------------------------------------
指令指的是MIPS,X86这种指令架构中的指令
指令分为 特权指令和运算指令 特权指令是操作系统才能执行的(cpu处在核心态)
只有操作系统才能操作硬件,操作系统可以执行特权指令和非特权指令
用户软件只能执行非特权指令(cpu处在用户态下)
用户态也叫做目态,核心态也叫做管态
可以看到,用户只能接触到操作系统的非内核功能
操作系统内核的核心功能 包括 时钟管理,中断处理,原语(原子性程序,不可中断),进程管理,存储器管理,设备管理(后面的几章会分别讲解)
小内核: 内核中只实现时钟管理,中断处理,原语操作这三个功能(结构清晰,但是可能要在核心态和非核心态之间频繁切换,开销大)
大内核:内核中实现了时钟管理,中断处理,原语操作,进程管理,存储管理,设备管理 全部这些功能(结构混乱)
操作系统内核进程 在开机后就常驻内存
-------------------------------------------------------------------------------------------------------------------------------------
中断是伴随着多道程序技术而引入的概念。分为内存中断(又称异常)和外部中断两种。
发生中断就意味着需要操作系统的介入,cpu切换为核心态,处理中断
有了中断才能实现多道程序并发
用户态到核心态的切换 的 唯一途径是 通过中断
核心态到用户态的切换是通过执行一个特权指令,将程序状态字(PSW,即cpu中的状态寄存器,组成原理里讲过)设为用户态
内中断(异常)分为自愿中断(又称指令中断,陷入中断,如发出系统调用)和强迫中断【分为硬件中断(如缺页中断)和软件中断(如除0运算)】
即 内部中断(异常)分为 陷入(有意为之),故障,终止
外部中断处理过程
cpu每指向完一条指令都会检查是否有中断信号,有的话则切换为核心态,执行中断处理程序(先保护现场),处理完之后再恢复现场,执行之前的程序。
---------------------------------------------------------------------------------------------------------------
系统调用
应用程序通过系统调用请求操作系统服务
应用程序不能直接申请系统资源,必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样保证了系统的稳定性和安全性。
系统调用分为 设备管理,文件管理,进程控制,进程通信,内存管理
系统调用的相关处理都是在核心态下的
库函数可能是封装好的系统调用,也可能不涉及系统调用。应用程序可能发出系统调用,库函数也可能发出系统调用。
高级语言编译为汇编语言,汇编语言的指令可能需要发出系统调用请求。
linux中,系统调用实际上是0x80号中断对应的中断处理程序的子程序
系统调用陷入指令就是 int 0x80;
在执行"int 0x80;"进行中断之前,应用层会做如下准备工作:
1.把系统调用号码赋值给寄存器EAX;
2.把系统调用需要的参数按次序赋值给寄存器EBX,ECX,EDX等等。
这样,等下0x80中断发生的时候,系统调用需要的全部信息就能通过这些寄存器传递给中断处理程序了。
系统调用过程
进入80号中断处理程序后,根据系统调用号码选择相应的中断处理子程序
下图是从csdn上找的https://blog.youkuaiyun.com/yhc166188/article/details/81533185
关于系统调用的这部分,可参看https://blog.youkuaiyun.com/yhc166188/article/details/81533185