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