特此鸣谢王道考研
本文参考王道考研的相关课程
若有侵权请联系,立删
其余笔记链接:
【王道考研】操作系统笔记 第一章_才疏学浅743的博客-CSDN博客
【王道考研】操作系统 笔记 第二章上 进程调度_才疏学浅743的博客-CSDN博客
操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境。它是计算机系统中最基本的系统软件。
下面这个图很好的展示了,定义与功能的联系
具体功能如下
文件管理——找到文件位置
存储器管理——执行程序放入内存,或读写数据
处理机管理——执行内存中的程序
设备管理——调用I/O设备等
以QQ聊天为例:
就是实现功能的物理硬件综合体。或理解为CPU
处理机包括 中央处理器 , 主存储器 ,输入-输出接口,加接 外围设备 就构成完整的计算机系统。处理机是处理计算机系统中 存储程序 和数据,并按照程序规定的步骤执行指令的部件。程序是描述处理机完成某项任务的指令序列。指令则是处理机能直接解释、执行的信息单位。
随着微电子技术的进步和计算机系统结构的发展,已能用 大规模集成电路 构成不同结构的和适应不同用途的处理机,如阵列处理机、向量处理机、数组处理机、数据库处理机、输入-输出处理机和将整个处理机制作在几个硅片上的微处理器等。
命令接口:允许用户直接使用
联机命令接口=交互式命令接口:用户说一句,系统跟着做一句
脱机命令接口=批处理命令接口:用户说一堆,系统跟着做一堆
程序接口:允许用户通过程序代码间接使用
系统调用=广义指令 常用库函数调用
GUI 图形用户界面(Graphical User Interface):现代操作系统中最流行的图形用户接口
为上述的功能分别举例:
联机命令接口
比如cmd,命令行窗口方式的操作。输入一行命令,执行一次
脱机命令接口
比如 .bat文件,执行之后一次执行完整个文件内的命令。类似于matlab脚本和命令行的区别。
程序接口:
可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。
比如,VBS可以用代码创建一个Windows的警告弹窗。但是不用代码,也就是用图形化操作就无法实现。或者C语言的库函数printf,使用了 内核程序的write()操作
GUI
就是图形化界面。点击,拖拽等等。
只有一个功能
需要实现对硬件机器的拓展
把最底层的功能进行了封装
比如:硬件:锤子、锯子、木头、钉子....操作系统:优秀的工匠。现在用户可以直接让工匠造船,而不是用原料造船。
没有任何软件支持的计算机成为裸机。在裸机上安装的操作系统,可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强、使用更方便的机器
通常把覆盖了软件的机器成为扩充机器,又称之为虚拟机
方便性
在硬件上运行程序,用机器语言书写极其困难,OS能将高级语言翻译成机器语言。
有效性
提高操作效率、系统吞吐量。
可扩充性
为了适应硬件体系结构及应用的发展。
开放性
为了更好的推广,方便使用制定行业标准。
基本特征有如下四个
并发
共享
虚拟
异步
并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的
也就是“虚假”的同时发生,CPU同时运行两个程序,其实是短时间内分别运行
操作系统的并发是通过分时实现的
并行:指两个或多个事件在同一时刻同时发生
是系统同时执行或操作
硬件支持:多流水线或者多处理机
重要考点:
单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行。
微观上轮流执行,宏观上看上去同时在执行。
多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行
举例:
共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
共享的方式有以下两种
互斥共享方式
同时共享方式
举例来说明:
互斥共享方式
系统中的某些资源,虽然可以允许多个进程使用,但一个时间段内只允许一个进程访问该资源
比如,QQ电话和微信电话不能同时使用摄像头。但是他们共享使用摄像头的权利。
摄像头这种资源称作:临界资源或者独占资源
同时共享方式
系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问
所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)
比如:QQ和微信可以同时使用内存,在内存里面写数据。
但是微观上也可能是真正的“同时”,比如:游戏和音乐同时播放声音
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。
物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
虚拟技术有两种
空分复用——虚拟存储器技术扩大内存
时分复用——单核CPU同时运行多个进程程序
具体例子:
虚拟处理器:采用多道程序并发的方式,让每个终端用户感觉到有多个处理器 时分复用技术
虚拟存储器:将物理存储变为虚拟存储器,逻辑上扩充存储器用 空分复用技术
也可以将一台IO设备虚拟为多台逻辑上的IO设备,并允许每个用户占用一台逻辑上的IO设备
异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的, 而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
走走停停的意思就是,比如Java Socket 通信中,SocketServer监听事件,就是一个异步执行的函数。因为Socket类只会存在一个,所以 0.01s 0.02s客户端A和B都发出了请求,但是0.01s的A先接受到了,所以服务器先响应A的请求。这就是结果的不可预知性
或者如下例子中,如果老渣预约的时间变了,给谁心就不一定了(不可预知性)。另一个人就会陷入阻塞状态,直到别人归还老渣的心
并发在操作系统诞生之初就被设计了,用来解决单核CPU运行多个进程。
共享与并发互为存在意义
没有并发,虚拟就没有意义。
没有并发,就无法产生异步
二者互为存在条件
并发性:指计算机系统中同时存在着多个运行着的程序。
共享性:是指系统中的资源可供内存中多个并发执行的进程共同使用。
经典的证明方法,
如果不存在并发,则同时只能运行一个程序,就不存在多个程序同时使用一个资源(共享)
如果不存在共享,则多个并发的程序不能同时访问一个资源,即使并发了也无法存取数据,很鸡肋。
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。
如果失去了并发性,则一个时间段内系统中只需运行一道程序,不需要CPU一次运行多个进程,那么就失去了实现虚拟性的意义了。因此,没有并发性,就谈不上虚拟性
只有系统拥有并发性,才有可能导致异步性
手工操作阶段——通过打孔纸片输入代码
单道批处理系统——打孔纸片先输入给磁带,磁带再更快速的输入到计算机
有操作系统的雏形
多道批处理系统 ——没有人机交互的PC
操作系统正式诞生
分时操作系统——所有人平等时间使用电脑
实时操作系统——优先处理紧急事务
分为①硬实时操作系统——不允许规定时间内没完成任务
②软实时操作系统——允许偶尔没在规定时间内完成任务
绿框常考
主要缺点:用户独占全机、人机速度矛盾导致资源利用率极低
引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序负责控制作业的输入、输出。
外围机:功能1.可以完成把程序提前存入纸带里面,2.并控制纸带输入。
主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。
主要缺点:只有脱机命令接口=批处理命令接口,没有联机命令接口=交互式命令接口。
内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。
主要优点:多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源更能保持“忙碌”状态,系统吞吐量增大。
主要缺点:没有GUI,
用户响应时间长,没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。eg:无法调试程序/无法在程序运行过程中输入一些参数
计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。
分为两种实施系统
硬实时系统——必须在绝对严格的规定时间内完成处理
如:导弹控制系统、自动驾驶系统
软实时系统——能接受偶尔违反时间规定
如:12306火车订票系统
主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。
主要特点:是及时性和可靠性
网络操作系统:是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。(如:Windows NT 就是一种典型的网络操作系统,网站服务器就可以使用)
分布式操作系统:主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务。
个人计算机操作系统:如Windows XP、MacOS,方便个人使用。
特权指令:操作系统允许使用的中断、删除等危险操作
如:内存清零指令。这些指令影响重大,只允许“管理者”——即操作系统内核来使用
非特权指令:用户、应用程序被允许使用的简单的加减乘除等操作
内核程序:需要调用特权指令的程序
也就是实现操作系统的程序
很多内核程序组成了“操作系统内核简称"内核"(Kernel)
应用程序:不需要特权指令的程序
核心态(内核态、管态):CPU只有在核心态才能使用特权指令,才能运行内核程序。
用户态(目态):CPU不能使用特权指令,不能运行内核程序
状态的切换称为变态
执行一条特权指令——修改PSW(程序状态字)的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权
1.由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权
2.可以使用陷入指令Trap,触发“内中断”
总计一下:
操作系统体系结构包括 内核 和 非内核 部分
内核有两大部分功能,其中黄色部分是最基本的功能。橙色的是有些OS没有划分进去的内容。
内核的分类
只包含必不可少的时钟管理、中断处理、原语的内核是微内核
还包含任务管理器、进程管理、设备管理的内核是大内核
典型的大内核/宏内核/单内核 操作系统: Linux、UNIX
典型的 微内核 操作系统: Windows NT
从下图可以直观看出来,只用微内核转换状态(变态)的次数变少了
时钟管理:时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。
中断机制:中断机制是操作系统各项操作的基础。如键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等。中断机制负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。
原语
:
原语是最接近硬件的部分
这些程序的运行具有原子性,其操作只能一气呵成(主要从系统安全性和便于管理考虑)
CPU 上会运行两种程序,一种是操作系统内核程序,一种是应用程序
“中断”是让操作系统内核夺回CPU使用权的唯一途径
如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序
状态转换方式:
内核态→用户态:执行一条特权指令——修改PSW(程序状态字)的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权
用户态→内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权
分类依据是CPU中断信号的来源
举例:
外部设备请求:
比如:I/O设备请求读入,scanf()读入键盘缓冲区的时候,程序会中断停止。
人工干预:
比如:任务管理器强行关闭一个进程
陷阱、陷入(trap) 也叫自愿中断
用户态下,应用程序调用系统程序
故障(fault)
比如,外部设备打印机没有纸了
终止(abort)
比如,整数除以0
陷入指令是指用户程序所依靠的指令,用于发起系统调用,请求操作系统提供服务。
陷入指令有其中一点特殊在于,其只能在用户态下执行,而不可以在核心态下执行。
用户程序执行陷入指令,相当于把CPU的使用权主动交给了操作系统内核程序(CPU状态会从用户态切换到核心态),之后操作系统内核程序再对系统调用请求做出相应的处理。处理完成后,操作系统内核程序又会把CPU的使用权还给用户程序(即CPU状态从核心态切换到用户态)。
系统调用:是操作系统提供给应用程序(程序员/编程人员)使用的接口
可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过"系统调用"来请求获得操作系统内核的服务
系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、lO操作、文件管理等),都必须通过操作系统代为完成。防止用户进行非法操作,这样可以保证系统的稳定性和安全性。
凡是与资源有关的操作、会直接影响到其他进程的操作,一定需要操作系统介入,即需要通过系统调用来实现
库函数是高级语言中提供的与系统调用对应的函数(也有些库函数与系统调用无关),目的是隐藏“访管”指令的细节,使系统调用更为方便、抽象。库函数属于用户程序而非系统调用,是语言或应用程序的一部分,可以运行在用户态。
而系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在核心态,而许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常要比系统调用的高。因为使用系统调用时,需要上下文的切换及状态的转换(用户态->核心态)
传递系统调用参数→执行陷入指令(用户态)→执行系统调用相应服务程序(核心态)→返回用户程序
注意:
1.陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态
2.发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
3.陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令