目录
操作系统的概念
操作系统:(operating system,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境,他是计算机系统中最基本的系统软件
操作系统的功能和目标
操作系统作为系统资源的管理者需要实现的功能
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
功能目标:安全、高效
以用QQ和朋友视频聊天的过程为例
- 在各个文件夹中找到QQ的安装位置(逐层打开文件夹,找到QQ.exe这个程序存放的位置——文件管理)
- 双击打开QQ.exe(需要把该程序相关数据放入内存——存储器管理)
- QQ程序正常运行(对应的进程被处理机处理——处理机管理)
- 开始和朋友视频聊天(需要将摄像头这个设备分配给进程——设备管理)
操作系统作为用户和计算机硬件之间的接口需要实现的功能
- 命令接口:允许用户直接使用
- 程序接口:允许用户通过程序间接调用
- GUI:现代操作系统中最流行的图形用户接口
功能目标:方便用户使用
命令接口分类
- 联机命令接口:用户说一句,系统做一句(交互式命令接口)
- 脱机命令接口:用户说一堆,系统做一堆(批处理命令接口)
程序接口
含义:如C:\Windows\System32\user32.dll 程序员在程序中调用user32.dll(调用过程为系统调用)即可实现创建窗口等功能。只能通过用户程序间接使用
注意:程序接口由一组系统调用组成
图形用户界面
含义:用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令参数
操作系统作为最接近硬件的层次需要实现的功能
操作系统需要提供的功能和目标:实现对硬件机器的扩展
注意:
- 没有任何软件支持的计算机称为裸机,在裸机上安装的操作系统可以提供资源管理功能和方便用户服务的功能,将裸机改造成功能更强、使用更方便的机器
- 通常把覆盖了软件的机器称为扩充机器,又称为虚拟机
操作系统的四个特征
并发
含义:指两个或多个事件在同一时间间隔发生。这些事件宏观上是同时发生的,但微观上是交替发生的
注意:
- 操作系统的并发性:计算机系统中同时存在着多个运行着的程序,一个单核处理器(CPU)同一时间只能执行一个程序,因此操作系统会负责协调多个程序交替执行(这些程序微观上是交替执行的,但宏观上看起来就好像在同时进行)
- 当今的计算机,一般都是多核CPU,比如intel的第八代i3处理器就是4核心CPU;这就意味着同一时刻可以有4个程序并行执行,但是操作系统的并发性依然必不可少;当代人使用计算机绝对有4个以上的程序需要同时工作
共享
含义:共享即资源共享,是指系统中的资源可以供内存中多个并发执行的进程同时使用
共享的方式
- 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但同一时间段内只允许一个进程访问该资源
- 同时共享方式:系统中的某些资源,允许同一时间段内的多个进程“同时”对他们进行访问
生活实例
- 互斥共享:使用QQ和微信视频,同一时间段内摄像头只能分配给其中一个进程
- 同时共享:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替访问硬盘的
并发和共享的关系
例:使用QQ发送文件A,同时使用微信发送文件B
两个进程正在并发执行(并发性)
需要共享的访问硬盘资源(共享性)
- 并发性是指计算机系统中存在多个运行着的程序
- 共享性是指系统中的资源可供内存中多个并发执行的进程共同使用
- 若失去了并发性,则系统中只有一个程序正在运行,则共享性失去了存在的意义
- 若失去了共享性,则QQ和微信不能同时访问硬盘资源,就无法同时发送文件,就无法实现并发
总结:并发与共享,互为存在条件
虚拟
含义:虚拟是指把一个物理上的实体变为若干逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的
虚拟技术
- 空分复用技术(虚拟存储器技术)
- 时分复用技术(虚拟处理器技术)
空分复用技术
时分复用技术
注意:很显然,若失去了并发性,则同一时间段内系统中只需要运行一道程序,那么就实现虚拟性的意义了。因此,没有并发性,就谈不上什么虚拟性
异步
含义:异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性
例:你在做一件事的时候,因为这件事会花费很长时间,在做这件事的同时,你还可以处理其他事情(如做饭的异步做法:烧水的同时,利用这10分钟再去切菜,去炒菜)——在这里面你就作为被分配的资源,由于做饭和烧水这两件事可以不同步,因此可以异步的实现,这两个异步的进程都需要你这个资源
注意:显然,如果失去了并发性,则系统只能串行的处理各个进程,每个进程的执行会一贯到底。只有系统拥有并发性,才可能导致异步性
操作系统的发展和分类
手工操作阶段
理解:计算机刚被发明时使用的一种方式,该时刻没有操作系统。一个程序员写程序需要在这样一个纸带上用打孔机来写(计算机只能识别0/1);程序员将自己写好的程序写在纸带上之后需要将纸带装到纸带机上,该纸带机就会读取纸带上的数据然后把这些数据输入到计算机中;之后计算机处理完了这些数据又会把这些数据从内存通过CPU输出到纸带机上;之后用户再从纸带机上取走输出的纸带,输出的纸带上就是用户程序执行的结果
注意:在上面整个过程我们可以发现CPU处理的速度非常块,而纸带机的输入输出速度是非常慢的;所以就会导致计算机这种快速处理的设备需要等待慢速输入输出的纸带机;CPU会有大量空闲的时间等待输入输出操作的完成;除此之外,人们用手工的方式将自己的程序数据放到纸带机/从纸带机取走这是个更慢的过程,所以手工操作阶段主要缺点为用户独占全机,人机速度矛盾导致资源利用率极低
单道批处理系统
前言:其引入了脱机输入/输出技术(用磁带完成)并监督程序(操作系统的雏形)负责控制作业的输入输出
理解:程序员们提前把自己的程序放到纸带机上,然后会有一个专门的外围控制机来控制把纸带机上的数据读到磁带中(相对于从纸带机读数据速度更快)之后计算机直接从磁带这个更高速的输入输出设备上把用户的各个程序依次读到计算机的内存当中进行处理;处理完成之后再依次输入到这个磁带当中;之后通过外围机将磁带的数据通过纸带机输出到纸带上;之后纸带又被用户取走。
注意:磁带是一种比起纸带机读取纸带来讲速度要快很多的IO设备,所以比起手工输入阶段计算机在等待这些程序的输入输出的过程中这个时间花费就少了很多,所以CPU就有更多的时间用来计算;而这个磁带上的各个程序的输入和输出是由监督程序控制的,这个监督程序就是后来操作系统的雏形
多道批处理系统
理解:用户会把自己的程序输入到磁带中,计算机一次可以从磁带中读取多道程序,将这些程序都放到计算机的内存当中;然后这些程序会并发的执行,而这些程序并发执行的过程需要中断技术的支持,操作系统正式诞生,由操作系统负责管理这些程序的运行,各个程序并发执行
多道批处理系统与单道批处理系统
例:计算机需要处理三个作业
- 作业1:输入1s、计算1s、输出1s
- 作业2:输入1s、计算1s、输出1s
- 作业3:输入1s、计算1s、输出1s
单道批处理系统
注意:在这9s中cpu工作了3s
多道批处理系统
注意:在这5s中cpu工作了3s
分时操作系统
前言:多道批处理系统不提供人机交互的能力,所以出现了分时操作系统
含义:计算机以时间片为单位轮流为各个用户/作业服务,并且在各自的时间片内各个用户可以通过终端与计算机进行交互
理解:一个时间片的长度为50ms,那么他会先为第一个用户服务50ms;之后下个50ms又会分配给第二个用户,以此类推;然后所有的的用户服务完了之后又会开始第二轮的服务。而在每个用户被分配到的这50ms之中,他都可以通过终端来对计算机进行交互来控制自己的作业执行
优缺点
- 优点:用户请求可以被及时响应,解决了人机交互的问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在
- 缺点:不能优先处理紧急任务。操作系统对各个用户/作业都是完全公平的,循环的为每个用户/作业服务一个时间片,不区分任务的紧急性
实时操作系统
主要优点:能够优先响应一些紧急任务,某些紧急任务不需要时间片排队
注意:在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性
实时操作系统的分类
- 硬实时操作系统:必须在绝对严格的规定时间内完成处理
- 软实时操作系统:能接收偶尔违反时间的规定
其他几种操作系统
- 网络操作系统:伴随着计算机网络的发展而诞生,能把网络中的计算机有机的结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各个计算机之间的通信(如windows NT就是一种典型的网络操作系统,网站服务器就可以使用)
- 分布式操作系统:主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由他们并行、协同的完成这个任务
- 个人计算机系统:如windows XP、macos,方便个人的使用
操作系统的运行机制
指令
含义:指令就是指处理器(CPU)能够识别、执行的最基本命令
指令与代码的区别
问题:有的指令人畜无害,比如加、减指令;有的指令需要很高的权限,比如内存清零指令(若用户程序可以使用这个指令就意味着一个用户可以将其他用户的内存数据随意清零,这样做很危险)
指令的分类
- 特权指令:不允许普通的用户程序使用,如内存清零指令
- 非特权指令:允许普通的用户程序使用,如普通的运算指令
问题:CPU如何判断当前是否可以执行特权指令
处理器的两种状态
- 用户态(目态):此时CPU只能执行非特权命令
- 核心态(管态):CPU特权指令、非特权指令都可以执行
注意:CPU的这两种状态其实是用程序状态字寄存器(PSW)中的某个标识位来标识当前处理器处于什么状态。如0为用户态、1为内核态
两种程序
前言:系统当中存在着特权指令和非特权指令,有的程序需要使用特权指令;而有的程序只能使用非特权指令,因此计算机系统又把这些程序分为了两种(内核程序、应用程序)
- 内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态
- 应用程序:为了保证系统运行的安全性,普通的应用程序只能执行非特权指令,运行在用户态
总结
计算机的两种指令(特权指令、非特权指令)特权指令需要在处理器状态的核心态下才可以运行;而非特权指令既可以在核心态下执行,又可以在用户态下执行;需要使用特权指令的程序我们把他称之为内核程序,另外的普通程序我们把他称之为应用程序;内核程序由于需要使用特权指令,所以他需要执行在核心态
问题:操作系统的那些功能应该由内核程序实现呢
操作系统内核
前言:我们安装完计算机操作系统后,会发现操作系统提供了很多的功能,比如记事本等;然而有些功能并不是必不可少的,即使没有我们也可以使用计算机
含义:内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分;实现操作系统内核功能的那些程序就是内核程序
操作系统的体系结构
中断和异常
中断机制的诞生
理解:在早期的计算机中,各个程序只能串行的执行;一个程序放入计算机内存之后,接下来这个程序便会开始运行;当他运行结束之后需要等待IO操作结束,这个程序才可以从内存中移出;接下来再移入第二道程序,同样的第二道程序移入到内存之后开始执行,慢慢等待IO操作结束,再从程序中移出,以此类推
注意:由上面观之,各个程序他们之间只能串行的执行;在计算机的内存当中同一时刻最多只能有一道程序执行,这种方式会导致系统的资源利用率特别低。为了解决上述问题,人们发明了操作系统,引入中断机制,实现多道程序并发执行;在引入了中断机制之后就可以把这些多道程序同时放入到内存,各个程序并发的执行;如第一道程序在用户态下运行,运行了一段时间后CPU可能会受到计时部件发来的中断信号来通知CPU现在时间已经过了一个时间片;当CPU收到这个中断信号后就意味着需要操作系统的介入开展管理工作,因此CPU会立即切换到核心态,然后把CPU的使用权限交给操作系统,操作系统的内核就会开始对刚才的中断信号进行处理,操作系统的内核发现刚才的中断信号是告诉它时间片已到。那么操作系统就会决定进程1的时间片已经用完,接下来要换进程2投入运行;在完成这一系列的管理工作之后,操作系统就会把CPU的使用权交给用户进程,接下来进程2就会在用户态下开始执行
中断发生特点
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
注意:
- 发生了中断,就意味着操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程的切换、分配IO设备等)需要使用特权指令,因此CPU要从用户态转换为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
- 用户态到核心态的切换是通过中断实现的,并且中断是唯一途径
- 核心态到用户态的转换只需要通过执行一次特权指令,将程序状态字(PSW)的标志位设置为“用户态”
中断的分类
- 内中断:(也称异常、例外、陷入)(自愿中断——指令中断、强迫中断——硬件故障[缺页]/软件故障[整数除0])
- 外中断:外设请求[IO操作完成后发出的中断信号]、人工干预[用户强行中止一个进程]
注意:内外中断的本质区别在于中断信号的来源到底是CPU的内部还是CPU的外部;内中断的发生和当前执行的指令有关、而外中断和当前执行的指令是没有关系的
外中断的处理过程
- 每条指令结束后,CPU检查是否有外部中断信号
- 若有外部中断信号,则需要保护被中断进程的CPU环境(程序状态字PSW、程序计数器PC、各种通用寄存器)
- 根据中断信号的类型转入相应的中断处理程序
- 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
系统调用
系统调用是什么
前言:操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中程序接口是由一组系统调用组成
系统调用:系统调用是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务
理解系统调用
问题:你打印论文,你的论文打印一半时,另一位同学按下“打印”按钮开始打印它自己的论文。结果,你的后半部分论文与该同学的页面混杂在一起了
解决方法:操作系统提供系统调用的功能,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统发出请求。操作系统会对各个请求进行协调管理
总结:应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、IO操作、文件管理等)都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用作用
注意:系统调用相关处理涉及到对系统资源的管理、对进程的控制,这些功能需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下进行
系统调用与库函数的区别
注意:有的库函数会使用到系统调用功能,有的库函数不会使用到系统调用功能
系统调用过程
- 传递系统调用参数
- 执行陷入指令(用户态)
- 执行系统调用相关服务程序(核心态)
- 返回用户程序
注意:
- 陷入指令是在用户态执行的,执行陷入指令后会立即引发一个内中断,从而CPU进入核心态
- 操作系统通过系统调用号来分辨库函数编译后究竟使用哪种类型的系统调用
- 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
- 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令