什么是操作系统
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
操作系统的功能和目的
-
作为系统资源的管理者:
- 处理机管理:对应程序被处理及CPU处理
- 存储器管理:把与该程序相关的数据放入内存
- 文件管理:逐级打开文件夹,找到QQ.exe可执行文件位置
- 设备管理:将摄像头分配给进程
-
作为用户与计算机硬件之间的接口:
- 命令接口 :允许用户直接使用
- 联机命令接口:交互式,即输入一句执行一句。例:修改系统时间
- 脱机命令接口:批处理,即输入一堆执行一堆。例:*.bat文件(命令清单)
- 程序接口:*.dll文件,用户只能通过程序间接使用,由一组系统调用组成,即程序接口=系统调用
- GUI图形用户界面
- 命令接口 :允许用户直接使用
-
作为最接近硬件的层次:
- 需要提供的功能和目标:实现对硬件机器的拓展
- 在裸机上安装操作系统,可以提供资源管理功能和方便用户的服务功能
- 我们把覆盖了软件的机器成为扩充机器,又称为虚拟机
操作系统的特征
-
并发性:两个或多个事件在同一时间间隔内发生,
- 宏观上是同时发生,微观上是交替发生
- 易混:并行——两个或多个事件在同一时刻发生
-
共享性:即资源共享 ,指系统中资源可供内存中多个并发执行的进程共同使用
- 互斥共享方式:一个时间段内只允许一个进程访问资源
- 同时共享方式:允许一个时间段内由多个进程同时(宏观上)对它们进行访问
——共享与并发的关系: 互为存在条件
共享性是指系统中的资源可供内存中多个并发进程同时使用,而并发性是指计算机系统中允许同时存在多个运行着的程序。故如果失去并发性,系统中只有一个程序在运行,共享性也就失去的意义,如果失去共享性,则QQ与微信不能同时访问硬盘资源,即无法实现同时发送文件,也就无法实现并行性。
-
虚拟性:把一个物理上的实体(实际存在)变为若干个逻辑上的对应物(用户感受到的)
- 空分复用技术:如虚拟存储器技术
- 时空复用技术:如虚拟处理器
-
异步性:指多道程序环境下,允许多个程序并发执行。但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的方向向前推进。
- 如果失去了并发性,则系统中只有一个程序运行,即虚拟性就失去了意义,也不可能导致异步性
操作系统的发展阶段
-
手工操作阶段:
- 缺点:人工装填纸带速度慢,且纸带输入输出速度慢,人机速度矛盾大。
-
批处理阶段——单道批处理系统:
- 引入脱机输入输出技术(利用磁带实现),并使用监督程序(操作系统的雏形)负责控制作业的输入输出。
- 优点:缓解了人机矛盾
- 缺点:内存中仅能有一道程序运行(串行),CPU有大量的时间实在空闲等待I/O的完成。
-
批处理阶段——多道批处理系统:
- 每次往内存中输入多道程序,操作系统正式诞生,引入了中断技术,由操作系统负责管理这些程序的运行。各个程序并发执行,共享计算机资源。
- 优点:资源利用率大幅提升,CPU和其他资源处于长期忙碌的状态。
- 缺点:用户响应时间长,没有人机交互功能,用户提交作业后就只能等待计算机处理完成。
- 多道批处理资源利用效率提升的原因:输入输出设备能够并行的工作,而不是串行工作,则设备有更多的时间处于忙碌的状态。
-
分时操作系统:
- 计算机以时间片为单位,轮流为各个用户/作业服务,各个用户可以通过终端与计算机进行交互。
- 优点:用户请求可以被及时响应,解决了人机交互问题。允许用户同时使用一台计算机。
- 缺点:不能优先处理一些紧急任务,对有所有的用户、作业都是公平的,循环地为每一个用户、作业服务一个时间片,不区分任务的紧急性。
-
实时操作系统:
- 优点:能够优先响应一些紧急任务,某些任务不需要时间片排队。计算机系统在接受外部信号后可以及时进行处理,并且要在严格的时限内处理完成事件。主要特点是及时性和可靠性。
- 分类:
- 硬实时系统:必须在绝对严格的时限内完成处理,如导弹控制系统、自动驾驶系统。
- 软实时系统:能接受偶尔违反时间的规定,如火车订票系统。
-
网络操作系统:
实现网络中各种资源的共享和计算机之间的通信。 -
分布式操作系统:
主要特点是分布性与并行性。系统中各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。 -
个人计算机操作系统:
如windows xp、mac os 方便个人使用。
操作系统的运行机制
什么是指令?
一条高级语言的代码翻译过来可能会对应多条指令
简单来说,指令就是处理器CPU能识别、执行的最基本的命令,比如加法指令就是让CPU执行加法运算。
- 新的问题:有的指令有很高的权限,比如内存清零指令,如果用户程序可以使用,则会很危险,故分两种指令:
- 特权指令:如内存清零指令,不允许用户程序使用
- 非特权指令:如普通运算指令
- 新的问题:CPU怎么判断当前是否可以执行特权指令,故分两种处理器状态:
- 用户态(目态)此时CPU只能执行非特权指令
- 核心态(管态)可以执行特权指令与非特权指令
- 这两种状态用程序状态字寄存器(PSW)中的某标志位来标识。
- 所以计算机系统将程序分为两种:
- 内核程序:是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态。
- 应用程序:为了保证系统可以安全运行,普通应用程序只能执行非特权指令,运行在用户态。
操作系统内核
那么操作系统中的哪些功能应该由内核程序实现呢?
- 内核是计算机上配置的底层软件,是操作系统中最基本、最核心的部分。(必不可少)
- 实现操作系统内核功能的那些程序就是内核程序。
- 操作系统内核:
- 与硬件关联较为紧密的模块:
- 时钟管理:实现计时功能
- 中断处理:负责实现中断机制
- 原语:
- 是一种特殊的程序
- 处于操作系统最底层,最接近硬件的部分
- 这种程序的运行具有原子性——其运行一气呵成,不可中断
- 运行时间较短、调用频繁
- 对系统资源进行管理的功能:(有的操作系统不把这部分功能归为“内核功能”,即不同的操作系统对内核功能的划分并不一样)
- 进程管理
- 存储器管理
- 设备管理
- 与硬件关联较为紧密的模块:
操作系统的体系结构
- 一般分为大内核结构与微内核结构两种:
- 大内核结构:
- 将操作系统的主要功能模块都作为系统内核,运行在核心态
- 优点:高性能
- 缺点:内核代码庞大,结构混乱,难以维护
- 微内核结构:
- 只把最基本的功能保留在内核
- 优点:内核功能少,结构清晰,方便维护
- 缺点:需要频繁地在核心态和用户态之间切换,性能低
类比:
操作系统的体系结构与企业管理问题相似
- 内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令,用户态与核心态之间的切换就相当于普通员工与管理层之间的工作交接。
- 大内核:企业初创时体量小,管理层人员会负责大部分的事情,优点是人少效率高,缺点是组织混乱,出了问题难以确定是谁的责任,难以维护。
- 微内核:企业体量越来越大,管理层只负责核心的工作。优点是组织结构清晰,方便维护,缺点是效率较低,员工做一些工作时没有权限,需要不停的申请、交接。
中断与异常
- 中断机制的诞生:
- 早期计算机中各个程序只能串行执行,系统资源利用率低。
- 为了解决上述问题,发明了操作系统,引入了中断机制,实现了多道程序并发执行
- 本质:发生中断就意味着需要操作系统介入,开展管理工作
- 中断的概念和作用
- 当中断发生时,CPU会立即进入核心态,以便系统内核接手工作
- 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号(如:进程切换、分配I/O设备等),会进行不同的处理
- 发生了中断就意味着需要操作系统介入。由于操作系统的管理工作需要使用特权指令,因此 CPU需要进入核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序的并发执行。
遗留问题:用户态、核心态之间使如何实现切换的?
答:
用户态—>核心态:是通过中断实现的。并且中断是唯一途径。
核心态—>用户态:的切换是通过执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”
-
中断的分类
- 内中断(异常、例外、陷入)信号来源:CPU内部,与当前执行的指令有关。
- 自愿中断——指令中断:如 系统调用时使用的访管指令(又叫陷入指令)是一种有意为之的异常。
- 强迫中断
- 硬件故障:如 缺页
- 软件中断:如 整数除以0
- 外中断(中断)信号来源:CPU外部,与当前执行的指令无关
- 外设请求:如 I/O操作完成后发出的中断信号
- 人工干预:如 用户强制终止了一个程序
- 内中断(异常、例外、陷入)信号来源:CPU内部,与当前执行的指令有关。
-
外中断的处理过程
- 执行完每个指令后,CPU都要检查当前是否由外部中断信号
- 如果检测到有外部中断信号,则需要保护被中断的进程的CPU环境(存档)(如程序状态字、程序计数器PC、各种通用寄存器)
- 根据中断信号类型转入相应的中断处理程序
- 恢复原进程的 CPU环境并退出中断,返回原进程继续往下执行
系统调用
- 系统调用——是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。系统调用会使处理器CPU从用户态进入核心态。
操作系统为什么要提供系统调用功能?
生活场景:
在打印店,你的文档打到一半时,另一个人也在电脑上打印他的文档,并点击了打印,但你的文档后半部分并没有和他的文档混在一起,这就是因为系统提供了系统调用功能。
用户进程想要使用打印机这种共享资源,只能通过系统调用想操作系统发出请求,操作系统会对各个请求进行协调管理。
-
系统中各个共享资源都有操作系统统一掌管,因此在用户程序中,凡是与资源相关的操作(如 存储分配、I/O操作、文件管理),都必须通过系统调用的方式向操作系统提出请求服务,由操作系统代为完成。这样可以保证系统的稳定性与安全性,防止用户进行非法操作。
-
系统调用相关处理涉及到对系统资源的管理、对进程的控制,这些功能需要执行一些特权指令才能完成,所以系统调用的相关处理需要在核心态下才能完成。
-
系统调用背后的真实:
- 过程:
- 传递系统调用参数 movl指令
- 执行陷入指令(运行在用户态),运行完后立即进入核心态
- 执行系统调用相关应用服务程序(运行在核心态)
- 返回用户程序
- 注意:
- 陷入指令是在用户态执行,执行完后立即引发一个内中断,从而使CPU进入核心态
- 发出(发生)系统调用请求是在用户态,而对系统调用的相应处理是在核心态下进行的
- 陷入指令是唯一一个只能在用户态执行,而不能在核心态下执行的指令
系统调用与库函数的区别:
- 不涉及系统调用的库函数:如 取绝对值的函数
- 涉及系统调用的库函数:如 创建一个文件的函数