Blog搭建成功后写的第一篇文章,内容是b站王道考研操作系统笔记
目标是加更多的友链(看起来好像目的是建成一个Blog快捷打开器?)
以及写一些学习过程中走过的无数弯路,所以现在的Blog还不具有任何参考意义
此篇文章中红色代表标重内容,黄底代表记忆内容
操作系统概念功能目标与特征
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
画黄线方便答题分点
一些看起来似乎没什么用的名词解释。。
命令接口:允许用户直接使用
程序接口:允许用户通过程序间接使用(如dll文件,即系统调用)
联机命令接口——交互式命令接口:说一句做一句(如cmd)
脱机命令接口——批处理命令接口:说一堆做一堆(如bat)
程序接口=系统调用=广义指令
隔离:处于安全性和稳定性考虑,用户空间程序无法直接执行内核代码(例如:I/O 读写、创建新进程/线程),也无法访问内核数据,必须通过系统调用。
没有任何软件支持的计算机称为“裸机”
覆盖了软件的机器称为“扩充机器”或“虚拟机”
操作系统的特征
并发
易混淆:并发与并行,前者宏观上同时发生(用户看起来)微观上交替发生,后者表示多事件同时发生
共享:互斥共享方式(如不能同时用qq和微信的摄像头)、同时(宏观上)共享方式
并发与共享:例子、如两程序同时使用(并发)硬盘资源(共享),所以说两者互为存在条件
e.g
虚拟:物理上的实体变为若干个逻辑上的对应物(用户感受到的)
e.g.单核CPU同时处理多个软件(其实是微观上把时间分为多个小段分别处理)
虚拟技术:空分复用技术(如虚存)、时分复用技术(如虚拟处理器)
可得,没有并发性也没有虚拟性
- 异步:资源有限,并发的程序执行速度不同不可预知(同样需要并发性)
操作系统发展与分类
- 手工操作阶段:手工速度与机器速度的矛盾导致资源利用率低
单道批处理阶段:引入“脱机输入/输出技术”,监督程序控制作业的输入、输出。矛盾略微缓解
缺点:内存中只有一道程序运行,CPU大量时间在等待程序运行
多道批处理系统:程序并发,效率提高
缺点:没有人机交互功能
分时操作系统:以时间片为单位轮流为各个用户/作业服务。解决人机交互问题
缺点:不具有优先处理紧急问题的特性
- 实时操作系统:能优先响应一些紧急任务,要在严格的时限内处理完事件(及时性和可靠性)
硬实时系统:导弹控制等
软实时系统:火车订票等
操作系统的运行机制与体系结构
指令是处理器能识别、执行的最基础命令
两种指令:
1、特权指令:不允许用户程序使用(内存清零等)
2、非特权指令:***(加法指令等)
处理器状态(用标志位识别):
1、用户态
2、核心态(特权指令与非特权指令)
两种程序:
1、内核程序
2、应用程序
两种内核:
1、大内核:高性能,代码庞大结构混乱难以维护(小体量公司)
2、微内核:与大内核相反(大体量公司的管理层)
中断和异常
本质:需要操作系统介入,开展管理工作
过程:发生时,CPU立即进入核心态(只有 核心态能处理管理工作,也就是需要特权指令)->发生后,当前进程暂停,由操作系统进行后续处理->不同中断不同处理
中断是“用户态”到“核心态”的唯一途径
核心态到用户态只需要改变程序状态字亦可(特权指令)
中断分类
来源 | 包括 | |
---|---|---|
内中断 | CPU内部 | 陷阱(如系统调用)、故障(如缺页)、终止(不可恢复的致命错误,如整数÷0) |
外中断 | CPU外部 | I/O中断请求、人工干预 |
外中断过程:
1、检查是否有外部中断信号
2、保护被中断的CPU环境(如PSW、计数器、寄存器)
3、根据中断类型处理程序
4、恢复原进程CPU环境退出中断,返回原进程继续执行
系统调用
本质:应用程序请求操作系统的服务
原因:系统中的各种共享资源都由操作系统掌管,所有与资源相关操作都由操作系统代为完成(另外:与资源有关还与特权指令相关)
作用:保证系统的稳定性和安全性,防止非法操作
过程:传递系统调用参数->执行陷入指令(用户态)->执行系统调用程序(核心态)->返回用户程序
1、 陷入指令在用户态执行,之后马上引发内中断,CPU进入核心态
2、 发出系统调用请求发生在用户态,而对系统调用相应处理在核心态进行
3、 陷入指令是唯一一个只能在用户态执行而不可在核心态执行的执行
分类:
- 进程控制(process control)
- 文件管理(file manipulation)
- 设备管理(device manipulation)
- 信息维护(information maintenance)
- 通信(communication)
- 保护(protection)
其实就是涉及堆系统资源的管理、对进程的控制,需要执行特权指令才能完成,因此系统调用的相关处理需要在核心态下进行