操作系统之概述
文章目录
[toc]
操作系统概念
操作系统(operation system,简称OS),是管理计算机硬件与软件资源的计算机程序。
例如,在windows上win+r
快捷键,然后在弹出输入框输入CMD,显示的黑框框也是一个操作系统。(在这个窗口里,可以控制计算机的各种资源)
计算机系统构成
由用户、应用程序、操作系统、硬件这四部分组成。
-
操作系统向用户和应用程序提供接口。
用户或应用程序可以通过这些接口访问计算机的硬件资源,如:用户开启或关闭声音、应用程序向操作系统申请磁盘空间或内存等行为。也就是说,操作系统通过封装具体的硬件细节形成接口,对于用户或应用程序而言是个黑盒,但是强大的封装性更易于被使用。
-
OS是一种系统软件,担任以下角色
- 与硬件交互
- 对资源共享进行调度管理
- 解决并发操作处理中存在的协调问题
- 数据结构复杂,外部接口多样化,便于用户反复使用
-
OS主要作用
- 管理与配置内存
- 决定系统资源供需的优先次序
- 控制输入设备与输出设备
- 操作网络与管理文件系统等基本事务
- 提供一个用户与系统交互的界面 => GUI
OS的目标和功能
-
目标
- 有效性:提高系统资源利用率、提高系统的吞吐量
- 方便性:方便用户使用
- 可扩充性:硬件不断发展,依然适配OS
- 开放性:兼容不同软件和硬件
-
功能
-
作为计算机系统资源的管理者
-
作为用户与计算机硬件系统之间的接口
接口主要体现在三个方面:操作系统提供的程序接口(也就是系统调用)、操作系统提供的命令接口、操作系统的图形用户接口(GUI)
-
实现了对计算机资源的抽象
抽象的含义就是:将复杂的硬件资源抽象成软件资源,从而提供对外接口的方式,也就是封装
-
举个例子
浏览器搜索:浏览器会将需要将发送的内容组装成报文,再通过系统调用需要使用浏览器所在设备的网络设备进行远程通信
-
OS的特征
并发特征是共享、虚拟和异步的前提,其中共享和并发互为前提
-
并发是共享的前提
如果只有单道程序运行,则不存在共享的可能。
-
共享是并发的前提
如果多道程序无法共享部分资源(比如磁盘、网卡等),显然就没有并发这一说(因为相当于只有单道程序访问资源,自然无需调度和管理啦)
-
并发是虚拟的前提
虚拟的目的就是表达出多道程序并发时的运行态。如果没有并发,自然虚拟就没有意义了
-
并发是异步的前提
如果没有并发的多道程序,那么单处理机上的多道程序的分时占用处理机的情况就不会发生,自然就谈不上异步了。
并发
指的是同一时间间隔内执行和调度多个程序的能力
- 宏观上,处理机同时执行多道程序
- 微观上,处理机在多道程序间高速切换(分时交替执行)(毕竟操作系统的核是有限的,然后程序的数量显然要大于核的数量)
主要关注**单个处理机(单个核)**在同一时间段内处理任务数量的能力
并行与并发的区别:
并行指的是同一时刻发生,并发指的是同一时间段内发生
共享
指的是资源共享,系统中的资源供多个并发执行的应用程序共同使用(显然,共享的前提是并发)
- 同时访问方式:同一时段,允许多个程序同时访问共享资源
- 互斥共享方式:也叫独占式。允许多个应用程序在同一个共享资源上独立而互不干扰地工作
虚拟
指的是使用某种技术把一个物理实体变成多个逻辑上的对应物。
-
时分复用技术
虚拟处理机技术、虚拟设备技术
多道程序宏观上同时运行在多个核上,微观上是占用核的时间片之后,就会切换下一个应用程序来占用核的时间片,这样轮流工作就保障了多道程序同时运行。
-
空分复用技术
虚拟磁盘技术(磁盘分区)、虚拟存储器技术
异步
指的是:多道程序环境下,允许多个程序并发执行;单个处理机环境下,多个程序分时交替运行;
加之程序运行的不可预知性(运行的时机、程序暂停、程序的运行时间、程序的性能)就会导致这样的状况:
- 宏观上,所有的程序好像是一直在一起在运行,但是实际上由于多道程序的存在,那么单个处理机就一定会出现多道程序的分时占用处理机运行,也就是说微观上其实是”走走停停“,也就是说多道程序不是同步完成的,而是异步完成的。
显而易见,只有并发出现的多道程序,才会导致分时占用处理机的异步情况发生
操作系统的发展与分类
1、手工操作阶段
在计算机发展的初期,没有操作系统,人们只能依靠手工操作来使用计算机。
举个栗子,很多年前,人先手工把专门的 “打孔纸” 打好孔,交给机器计算。因为计算机算的快,人手工打孔慢,这就造成了资源的浪费。如下图所示:
2、批处理阶段
单道批处理系统
单道批处理系统:一种引入了脱机输入/输出技术 ,并由监督程序负责控制作业输入和输出,但在工作期间只能对单份作业进行处理的系统。
接着举个栗子,这次我们把很多人手工打好的 “打孔纸” 先通过某种手段(卫星机/外围机)包装好,假设我们把它们包装到一盘“磁带”里。接着我们在把一盘接着一盘包装好的 “磁带” 独立地送入到计算机进行计算。如下图所示:
主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。 主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。
多道批处理系统
多道批处理系统:也是一种引入了脱机输入/输出的技术 ,并由监督程序负责控制作业输入和输出,在工作期间能对多份作业同时进行处理的系统。
它就解决了 单道批处理系统 资源利用率依然很低的缺点
在接着举个栗子,在 “磁带” 都准备好后,我们在把一盘接着一盘包装好的 “磁带” 耦合地送入到计算机进行计算。如下图所示:
主要优点:多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源更能保持“忙碌”状态,系统吞吐量增大。 主要缺点:用户响应时间长,没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。比如:无法调试程序/无法在程序运行过程中输入一些参数)。
3、分时操作系统
分时操作系统:计算机以时间片为单位,轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
它就解决了 多道批处理系统 不能人机交互的缺点
比如,由4个人在玩电脑,但他们用的是同一个分时操作系统。那么该系统就会按照 “①②③④①②③…” 的顺序轮流分 50ms 给每个用户使用。
主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。 主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
4、实时操作系统
实时操作系统:实时反映的一种操作系统,不像分时操作系统那样呆板。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性。
主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。
实时操作系统有时还可以被分为:硬实时操作系统和软实时操作系统。
5、其他几种操作系统
网络操作系统:是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。(如:Windows NT 就是一种典型的网络操作系统,网站服务器就可以使用)
分布式操作系统:主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。
个人计算机操作系统:如 Windows XP、MacOS,方便个人使用。
这些操作系统的每一个抠出来单独讲的话,都是一门学问。我们在这里只了初步的了解。
操作系统的运行环境
操作系统的运行机制
操作系统其实也是一种程序,程序的执行过程也就是CPU执行一行行机器指令的过程。区别于一般程序员开发的应用程序,实现操作系统的程序就是内核程序。
1、内核程序&应用程序
内核程序:实现操作系统的程序称为内核程序,许多内核程序结合在一起便组成了操作系统内核。
应用程序:普通程序员借助编程工具以及高级语言所完成的程序叫做应用程序。
2、特权指令&非特权指令
**特权指令:**作为系统资源的管理者,操作系统可以使用一些直接关系重大的指令(内存清零等),这些指令被称为特权指令,而且应用程序没有办法直接使用特权指令,这保证了操作系统的安全。
**非特权指令:**应用程序可以使用的指令,如加减乘除指令等。
CPU在设计的时候便已经划分出了特权指令以及非特权指令,因此在执行这条命令前CPU就可以先判断指令的内容。
3、内核态&用户态
CPU有两种状态:内核态(或称核心态,管态)以及用户态(目态)。
-
当CPU处于内核态时,说明此时正在运行的是内核程序(CPU上加载的是内核程序,是操作系统这个管理者角色在发挥作用),此时可以执行特权指令;
-
当CPU处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。在CPU中有一个寄存器叫做程序状态寄存器(PSW),该寄存器的
01
状态来表示此时处于内核态还是用户态。
下面我们来讲解一下,用户态与内核态之间是如何相互进行变化的。
内核态–>用户态:需要执行一条特权指令(指令内容是修改PSW寄存器状态),此时内核态转变为用户态,CPU主动让出使用权,CPU会去加载用户态。
用户态–>内核态:由“中断”引发,当CPU检测到中断时,操作系统会强制将CPU变为内核态夺回CPU使用权,再执行与中断有关的一系列操作。
下面我们用一个小栗子来解释一下这个过程:
- 刚开机时,CPU 为“内核态”,操作系统内核程序先上CPU运行
- 开机完成后,用户可以启动某个应用程序
- 操作系统内核程序在合适的时候主动让出 CPU,让该应用程序上CPU运行
- 应用程序运行在“用户态”
- 此时,一位黑客在应用程序中植入了一条特权指令,企图破坏系统…
- CPU发现接下来要执行的这条指令是特权指令,但是自己又处于“用户态”
- 这个非法事件会引发一个中断信号
- “中断”使操作系统再次夺回CPU的控制权
- 操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序
中断是操作系统夺回CPU使用权的唯一方式(也是由用户态切换到内核态的唯一方式)
4、操作系统的内核
当我们刚开始使用操作系统的时候,会发现一些程序并不是必需的(记事本等),这些程序称为操作系统的非内核功能,下图是将操作系统进行了更进一步的划分。
有人将内核划分为大内核以及微内核,这两种划分在不同的时期各有优势。下面用企业来类比一下操作系统:
内核就是企业的管理层,负责一些重要的工作。只有管理层(内核程序)才能执行特权指令,普通员工(应用程序)只能执行非特权指令。用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接。
大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。
微内核:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方便维护;缺点是效率低。
5、小结
需要注意的是:特权指令只能在核心态下执行; 内核程序只能在核心态下执行。
操作系统的重要部件和机制
0、时钟
操作系统的时钟是一个很重要的核心部件。CPU时间片的计时、系统本身计时等
1、中断
操作系统会响应中断信号强制夺回CPU使用权,使用户态转换为内核态。**中断是操作系统夺回CPU使用权的唯一方式,**如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,其他程序就没有办法再使用CPU,这样的话就不存在并发机制了。一般来说,中断分为两种情况即内中断和外中断。
内中断
包括:陷入(由应用程序主动引发,如应用程序的系统调用)、故障(由错误条件引发)、终止(由致命错误引发)
内中断(也称异常)与当前执行的指令有关,中断信号来源于CPU内部。比如,当用户妄图执行特权指令时,CPU便会产生中断,由用户态变为内核态;再比如,当进行除法运算除数为0时同样会发生错误,产生中断。总的来说,就是当前指令是非法的指令,那么一定会引起中断。
当应用程序想要进行一次系统调用使用内核的服务时,会执行一条**陷入(trap)**指令,陷入指令会引发一条中断信号,操作系统就会夺回CPU的使用权,也就是说,执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。
例如,一个读文件的应用程序开始运行时,并不是由应用应用程序来读取系统文件,而是该应用程序执行到读文件这一段程序时,自己会发生中断,之后操作系统产生陷入指令,再之后执行操作系统的特权指令进行读取
外中断
外中断与当前执行的指令无关,中断信号来源于CPU外部。每次在一条指令结束之后CPU都会检查是否有外中断信号。比如时钟信号,或者I/O设备都可以发出外中断信号。
中断分类
中断的原理:不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。所以,显然中断处理程序一定是内核程序,工作在内核态。
中断处理过程
-
关中断
CPU不再响应高级中断的请求
-
保存断点
断点指的是PC(或叫IP,也就是执行程序的地址)
-
引出中断程序
每个中断都会有一个中断程序,拿到中断程序的地址,但并没有开始执行中断程序
-
保存现场和屏蔽字
将中断前CPU的所有状态,包括:寄存器的值等现场数据进行保存,方便后续中断执行完毕,CPU现场的恢复
-
开中断
可以响应其他中断请求
-
执行中断程序
-
再关中断
-
恢复现场和屏蔽字
-
开中断
在上面的中断处理过程中,只有执行中断程序的过程里CPU才能去响应其他中断信号,其余阶段都不能响应。
2、原语
由若干条指令组成的一个程序段,用以完成某个特定的功能,且执行过程中不会被中断,也就是说具备原子性
本质上就是多条指令的封装,通过中断机制里的开关中断来实现
3、系统数据结构
- 进程管理:作业控制块、进程控制块
- 存储器管理:存储器分配与回收
- 设备管理:缓冲区、设备控制块
4、系统调用
- 有操作系统实现,给应用程序调用
- 是一套接口的集合
- 应用程序访问内核服务的方式
- 会导致内核从用户态切换到内核态
如拷贝问题:我如果频繁的读取某项数据,会导致用户态和内核态频繁的切换,就比较消耗资源。可以通过零拷贝的方式来避免这种情况的发生
虽然出现了用户态和内核态,比较消耗资源,但是更加安全,避免用户态的肆意妄为导致系统崩溃掉
操作系统的结构设计
大内核OS结构-传统的操作系统结构
-
无结构OS
- 设计基于功能实现和获得高的效率
- OS是为数众多的一组过程的集合
- OS整体无结构(程序之间)
- 程序内部代码无结构(goto语句非常多)
-
模块化OS
模块的独立性
- 模块大小的划分
- 衡量模块独立性的指标
- 内聚性:模块内部各部分间联系的紧密程度
- 耦合度:模块间相互联系和相互影响的程度
模块化OS的优点
- 提高OS设计的正确性、可理解性和可维护性
- 增强OS的可适应性
- 加速OS的开发过程
模块化OS的缺点
- 设计时对模块的划分与接口的规定不精确
- 模块间存在复杂依赖关系
-
分层式OS
分层设计的基本原则:每一层都仅使用其底层所提供的功能和服务。
分层设计考虑的因素
- 程序嵌套 作业调度/进程控制/内存分配
- 运行频率 频率高-> 低层(速度快)时钟管理
- 公共模块
- 用户接口 最高层
微内核OS结构
微内核技术:精心设计的、能实现现代OS核心功能的小型内核,它与一般OS不同,更小更精练,运行于核心态,开机后 常驻内存。但是微内核并不是完成的操作系统,只是抽出了操作系统最核心部分的功能
微内核OS结构的特征
- 以微内核为OS核心
- 以客户/服务器为基础
- 采用面向对象的程序设计方法
文章作者 cold-bin
上次更新 2023-08-14