①操作系统是系统软件,而不是硬件
②负责管理协调软硬件等计算机资源的工作
③为上层的应用程序、用户提供接口和环境
进程:程序执行过程,执行前需要将该程序放入内存中,接着被CPU处理
命令接口:允许用户直接使用
分为:联机命令接口:用户说一句系统做一句(交互式命令)
脱机命令接口:用户说一堆系统做一堆(批处理命令)
程序接口:允许用户通过程序间接使用
动态链接dll文件
GUI:用户图形接口
易混淆:系统调用=系统调用命令=广义指令
没有任何软件支持的计算机称为“裸机”
覆盖了软件的机器称为:扩充机器(虚拟机)
两个/多个事件在统一时间间隔内发生(宏观是同时发生,微观上是交替发生)
操作系统和程序并发是同时诞生的。
易混淆:并行-->多个事件在同一时刻发生
系统中的资源可以供多个并发执行的程序共同使用
分为:互斥共享(仅允许一个) & 同时共享(微观上可能是交替访问)
并发和共享的关系(互为条件)
若失去并发性,则系统共享性将失去意义
若失去共享性,则系统并发性将无法实现
将物理上的实体变为(多个)逻辑上的对应物,
典型案例:虚拟内存--使用的空分复用技术
虚拟处理器--多线程(时分复用)
虚拟性服务于并发性
多程序并发执行,但是由于资源有限,进程的执行不是一贯到底的(以不可预知的速度向前推进--可能资源被锁定了,需要等待资源释放)
系统的并发性才可能导致异步性
使用纸带作为程序载体和输出结果载体
缺点:用户独占全机,人机速度矛盾-->资源利用率低。
引入脱机输入/输出技术(载体为磁带),由监督程序(操作系统的雏形)负责控制输入、输出
需要先使用外围机将纸带转换为磁带,再将磁带输入
优点:一定程度上缓解了人机速度矛盾,提升了资源利用率
缺点:同一时刻仅单个程序在执行,CPU有大量时间是空闲的,资源利用率依旧底下
计算机从磁带中读取多道程序。由终端技术实现这些程序的并发执行。(操作系统正式诞生)
优点:程序并发执行,共享计算机资源,极大的提升了资源利用率。
缺点:用户响应时间过长,无人机交互功能。
计算机以时间片为单位轮流为各个用户/作业服务。在时间片内用户可以与计算机进行交互。
优点:解决了人机交互问题,允许多个用户同时使用同一台计算机(各用户相互独立)
缺点:无法优先处理紧急任务
优点:可以优先响应紧急任务
要求要在严格的时限条件内处理完事件
主要特点:及时性、可靠性
分为: 硬实时系统:绝对严格在规定时间内处理完成
软实时系统:偶尔违反时间规定
网络操作系统
分布式操作系统
个人计算机系统
指令:CPU能识别、执行的基本命令
高级程序语言需要通过翻译转换为指令(可能一条语言对应多条指令)
特权指令:不允许普通用户程序使用
非特权指令:普通指令
用户态(目态):仅可执行非特权指令
核心态(管态):可以执行特权指令和非特权指令
用程序状态寄存器(PSW)中的标志位来确认(0为用户态、1为核心态)
内核程序:系统资源的管理者,运行在核心态
应用程序:运行在用户态
内核是计算机的底层软件,操作系统中最基本、最核心的部分。以内核程序的形式实现
操作系统 | 非内核功能 | |||||
内核 | 进程管理、存储器管理、设备管理等 | |||||
时钟管理 | 中断处理 | 原语(设备驱动、CPU切换等)<具有原子性> |
将操作系统的主要功能模块全部作为内核,运行在核心态
优点:性能高
缺点:内核代码庞大,结构复杂,不利于维护
只保留基本功能在内核
优点:内核功能少、结构清晰、方便维护
缺点:需要频繁的在核心态和用户态之间切换,性能低
当中断发生后,CPU立即进入核心态;当前进程暂停运行,由操作系统内核进行处理;
中断可以使CPU从用户态切换为核心态,使操作系统拥有计算机控制权。
用户态->核心态是实现中断的唯一途径
核心态->用户态通过执行一个特殊指令,将程序状态字(psw)标志设置为用户态
区分方式:信号的来源,是否与当前执行的指令有关
其他分类方式:陷入(有意为之的异常)、故障(由错误条件引起的)、终止(不可恢复的致命错误);
信号来自CPU内部,与当前执行的指令有关
自愿中断
指令中断:系统调用访问指令
强迫中断
硬件故障:缺页
软件故障:整数÷0
中断;信号来自CPU外部,与当前执行的指令无关
外设请求:I/O发送的中断信号
人工干预:用户强制终止一个进程
①执行完指令后,CPU会检查当前是否有外部中断信号
②如检测到外部中断信号,则需要保护被中断进程的CPU环境
③根据中断信号类型转入对应的中断处理程序
④恢复原进程的CPU环境并退出中断
可以理解为一种供应用程序调用的特殊函数;程序接口由系统调用组成;
应用程序通过系统调用请求计算机资源,可以保证系统的稳定性和安全性,防止非法操作。
设备管理:设备的请求/释放/启动
文件管理:文件的读/写/创建/删除
进程控制:进程的创建/撤销/阻塞/唤醒
进程通信:进程之间的消息/信号传递
内存管理:内存的分配/回收
系统调用需要一些特权指令来实现,因此其运行在核心态。
如果使用高级程序语言,则需要通过库函数来获取系统调用(进行过封装)
普通程序 | 直接使用系统调用 / 使用库函数(并非所有库函数都涉及系统调用) |
编程预言 | 向上提供库函数(封装系统调用,隐藏细节) |
操作系统 | 向上提供系统调用 |
裸机 |
高级语言 --编译--> 汇编语言 --系统调用-->
高级语言和汇编语言运行在用户态,系统调用运行在核心态
传递系统调用参数 --> 执行陷入命令(用户态) -->执行系统调用相关服务(核心态)-->返回应用程序
陷入指令执行在用户态,执行后会立刻引起一个内中断,从而使CPU进入核心态
陷入指令是唯一一个只能在用户态,不能在核心态下执行的指令