这篇文章是B站上王道操作系统的学习记录以及总结
链接:https://www.bilibili.com/video/BV1YE411D7nH?p=7
目录:
第一章:
1:操作系统的概念,功能和目标
操作系统概念:操作系统是管理和协调整个计算机的硬件和软件资源,能够合理的组织调度计算机的工作,和资源的分配。以提供给用户和其他软件交互的接口和环境,它是计算机系统中最基本的系统软件
注:
1):软件,比如QQ,腾讯等软件
2):硬件包括内存,CPU,摄像头等
操作系统的功能与目标:
①:操作系统作为整个计算机资源的管理者,需要为其提供的功能如下:
a):文件管理(文件在计算机内部进行储存的管理)
b):存储器管理(文件启动时,将文件程序放入到内存之中进行管理)
c):处理机管理(文件程序运行时,为其提供CPU资源得分配)
d):设备管理(文件程序在请求与硬件设备交互时,对设备资源的分配管理)
②:操作系统作为用户与计算机硬件设备之间的接口,要为用户以及应用软件提供得服务或功能如下:
1):命令接口(允许用户直接调用硬件方式)
命令接口又分为两种形式:
a):联机命令接口:
用户说一句,程序执行一句(在cmd中,程序所执行得方式,就是根据一句命令,执行一次)
b):脱机命令接口:
用户说一堆,程序执行一堆(批处理命令接口:.bat文件,.bat文件中就存放了一堆的系统命令,一旦执行,系统就对这一堆系统命令进行执行)
2):程序接口(允许用户通过程序简洁调用)
如 C:\Windows\System32\user32.dll 。程序在调用user32.dll(该调用过程就称之为系统调用–应用程序主动向操作系统发出服务请求)即可实现生成窗口的功能,这个dll文件(dll不是直接可执行的文件,是程序的一部分,只能由所属的程序进行调用)只能通过程序进行间接调用。
程序接口就是系统调用,也就是用户通过程序间接的使用计算机硬件设备
3):GUI(图形用户接口)
用户可以使用形象的图形化界面进行操作,而不再需要记忆复杂的命令以及参数
这三个接口统称为用户接口
③:操作系统作为最接近计算机底层硬件的软件,要为其做得功能实现如下:
在裸机上安装的操作程序,可以提供资源管理功能以及方便用户的服务功能,将裸机改造为更方便以及更强的机器
2:操作系统得特征
操作系统得特征,分为并发,共享,虚拟以及异步。其中并发与共享最为基本,也相为互补关系。
①:并发
是指两个或者多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但在微观上是交替发生的。一个单核处理机(CPU)只能处理一个程序,因此操作系统会负责协调多个程序交替执行
操作系统上的并发性是指的计算机系统中存在着多个同时运行的程序
②:共享
共享即资源共享,是指系统中的资源可供内存中多个并发执行的程序共同使用
共享分为两种形式:
1):互斥共享方式
系统中某些资源,虽然可以提供给多个进程使用,但一个时间端内只允许一个进程访问该资源
2):同时共享方式
系统中某些资源,允许一个时间段内,由多个进程同时对他们进行访问(这种同时,也是等同于并发的情况–宏观同时,微观上交替执行)
并发与共享两者是最基本的特征,两者互为存在条件。如果并发不是为了资源共享,并发就毫无意义。如果共享失去了并发能力,共享也就无从谈起(如果程序无法并发执行,只能一贯到底,直至运行结束,那么也就无法在运行时与其他程序进程,共享设备资源以及信息数据)
③:虚拟
虚拟是指将物理上的实体变为若干个逻辑上的对应物。物理上的实体是真实存在的,而逻辑上的对应物是用户感受到的(比如说内存只能允许同时运行得程序总大小为4个G,但是却运行多开得程序所占用的内存却可以大于4个G,这之所以允许开的程序总大小可以超过实际内存,其中就是使用了虚拟得技术。这里的内存就可以理解为物理上得实体,对内存所使用的虚拟技术就对应是若干个逻辑上得对应物(非真实,逻辑上得产物))
虚拟的技术,有两种:
a):空分复用技术
多个程序同时使用一个资源的不同部分(进行空间上拆分。每个程序或用户持有一部分资源)
b) : 时分复用技术
多个程序或用户依此使用某个计算机资源(在时间上进行拆分,每个程序持有一段时间得资源)
CPU(处理机)就是采用的时分复用技术,在微观上,提供多个程序依次交替使用得时间。
④:异步
在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停,以不可预知的速度向前推进
3:运行机制
操作系统得运行的过程中,有些指令是不允许用户程序直接使用的,比如内存清零指令。所以将指令分为特权指令和非特权指令。而CPU根据处理器的状态来决定是否可以使用特权指令。有的程序可以使用特权指令,而有的程序不能使用特权指令。所以程序也分为了核心程序和用户程序。如果在核心程序中,可以使用特权指令以及普通指令,运行在核心态。而用户程序只能使用普通指令,运行在用户态。
两种操作系统的操作指令:
①:特权指令
具有较高得权力(主要应用于与硬件设备直接交互得场景,避免直接操作计算机硬件设备,造成一定的风险(内存清零指令))
②:非特权指令
一般得执行权力(比如进行普通运算得指令)
两种处理器状态:
①:核心态(也称管态)
标记此时得指令具有特权得状态
②:用户态(也称目态)
标记当前得指令只具有非特权得状态
这两种状态使用程序状态字寄存器中(寄存器就是内存中一个特殊的内存单元得别名)的某个标识位(标识位分为0和1)来标识当前处理器处于什么状态,如0表示用户态,1表示核心态
刚开机的时候,操作系统内核程序会先上CPU运行。当需要运行其他程序得时候,操作系统会更改自己得PSW(程序状态字寄存器)得标识位,由核心态得标识改为用户态的标识。程序得运行只能运行在用户态,在用户态下CPU会执行程序一条又一条得指令。如果此时程序中被植入一条恶意得特权指令,操作系统会检查自己PSW,发现此时自己仍然处于用户态。那么将会触发中断信号,CPU接收到这个信号后就会强行从用户态转换到核心态。进而CPU会拒绝执行这条特权指令以及程序后面的指令,并交由中断处理程序进行处理。
换句话,中断信号(需要与硬件资源交互得特权指令也会引发中断信号)会使操作系统内核重新拿到CPU得控制权。从而CPU从用户态切换到核心态,操作系统会对引发中断得事件进行处理,处理完了后,再从核心态切换到用户态,然后将CPU资源交给其他等待执行得程序进行运行。
两种程序:
①:内核程序
操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心层(唯一不可以运行得是中断(陷入指令))
②:应用程序
为了系统的安全性,普通应用程序只能执行非特权指令,运行在用户态
- 内核是计算机上配置的底层软件,是操作系统中最基本,最核心的部分。
- 实现操作系统内核功能的就是那些内核程序
大内核:
- 包括操作系统的基本功能,以及附加的功能
- 将操作系统的主要功能模块都作为系统内核,运行在核心态
优点:高性能
缺点:内核代码庞大,结构混乱,难以维护
微内核:
- 只包括操作系统最基本的结构与功能
- 只是把基本功能保留在内核(排除对系统资源进行管理的功能)
优点:
内核功能少,结构清晰,便于维护
缺点:
需要频繁的在核心态和用户态之间切换,性能低
小结:
4:操作系统的中断与异常
运行在CPU上的程序分为内核程序与应用程序。操作系统作为整个系统的管理者,在开机的时候处于内核态。只有在应用程序需要运行的时候,才会由内核态转换为用户态,一个程序会一直运行在CPU上,直至运行结束,除非遇到中断。中断让当前程序暂时停下,好让CPU去处理其他程序的请求和正常运行
本质:
只要发生了中断,就意味着需要操作系统介入,展开管理工作。
程序发出中断信号的时候的处理步骤:
1:当程序发出中断信号后,操作系统立马就进入核心态
2:当中断发生后,当前运行的进程暂停运行,并交由操作系统对中断指令进行处理
3:操作系统对于不同的中断情况,进行不同的处理
当程序发出中断信号的时候,就需要操作系统介入,开展管理工作。由于操作系统的管理工作(如I/O操作,连接打印机),需要使用特权指令,因此CPU需要从用户态转换到核心态。中断可以使CPU从用户态切换到核心态,使得操作系统获得计算机的控制权。中断实现了多道程序并发执行。中断时实现用户态切换核心态的唯一途径。从核心态到用户态的切换,通过执行一个特权指令。将程序状态字的标志位置设置为用户态
用户态到核心态的切换:中断是让CPU状态从用户态到核心态的唯一途径。
核心态到用户态的切换:是通过一个特权指令,将程序状态字(PSW)的标志位设置为用户态。
中断的作用:
中断是操作系统内核程序重新拿到CPU控制权以及进程并发的唯一途径,使CPU从用户态转换为核心态。
中断的类型:
中断分为内中断与外中断
①:内中断
与当前执行指令有关,由CPU内部发出中断信号
引发内中断的类型分为陷入,故障,终止。
a):陷入–陷入指令:
特点:
陷入指令主要是让CPU切换到核心态,在此之前陷入指令会引发内中断。
发出系统调用的请求的时候,CPU是处于用户态。而执行系统调用相应的处理程序的时候,CPU是处于核心态。
陷入指令是唯一一个只能在用户态执行,而不能在核心态执行的指令
b):故障
由错误条件引起的,切换到核心态由操作系统内核程序修复后。会将CPU使用权再交给应用程序。
c):终止
由致命原因引发的中断,内核程序无法修复该错误,会直接中断该程序进程。
②:外中断
与当前执行指令无关,由CPU外部发出的中断信号
比如时钟中断,I/O中断以及人工干预等外部因素引起的中断,都属于外中断。
a):时钟中断:
比如此时由两个程序同时在运行,而CPU只是单核的。由于一次只能执行一个程序,为了实现程序进程并发,那么每隔一段固定的时间,由时钟部件发出中断的指令。让CPU从用户态转换到核心态,处理完时钟部件引发的中断事件后,让下一个程序使用CPU的资源进行运行。如此交替往复,直至程序执行完毕。
b):I/O中断:
由输入输出设备引起的中断
每一次应用程序通过系统调用向操作系统发出请求设备资源(输入输出设备)的请求,此时都会伴随一个中断的信号。
中断机制的基本原理:
CPU检测到中断的信号后,会根据中断的类型去找中断向量表,依此来找到相应中断处理程序存放的位置。
外中断的处理过程:
外中断:比如用户通过键盘输入了一个字符
步骤:
- 执行完每一个指令后,CPU都要检查当前是否有外部的中断信号
- 如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW,程序计数器,各种通用寄存器)
- 根据中断信号的类型,转入到相应的中断处理程序进行处理
- 回复原进程的CPU环境并退出中断,返回原进程继续往下执行
小结:
5: 系统调用
系统调用是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可供应用程序调用的特殊函数。应用程序可以发出系统调用请求来获得操作系统的服务。(系统调用,可以理解为封装了操作系统功能的这么一个函数:不同的功能有不同的系统调用)
应用程序通系统调用请求操作系统的服务,系统中各种共享资源都由操作系统进行统一的协调管理,因此在用户程序中,但凡涉及到资源相关的操作(如,存储分配,I/O操作,文件管理等),都需要通过系统调用向操作系统提出服务的请求,由操作系统进行代为完成。这样可以保证操作系统的稳定性和安全性,防止用户进行非法操作
1:系统调用是什么,作用
是什么:
1):操作系统提供给应用程序使用的接口
2):系统调用会使CPU从用户态转换成核心态
3):应用程序通过系统调用来获得操作系统的服务
所有的应用程序都不直接与硬件进行交互,而是通过操作系统代为操作,主要是为了保证系统的安全性和稳定性。为此操作系统为处于用户态的程序与硬件设备之间的交互提供了一个接口,这个接口就是系统调用。
作用分类:
a): 设备管理–完成设备的请求/释放/启动等功能
b):文件管理–完成 文件的读/写/创建/删除 等功能
c): 进程管理–完成进程 的创建/撤销/阻塞/唤醒 等功能
d): 进程通信–完成进程之间 信息传递/信号传递等功能
e): 内存管理–完成进程之间 信息传递/信号传递等功能
这些对系统资源的操作,进程的管理,需要执行一些特权指令才能完成。需要操作系统
系统调用与库函数的区别:
应用程序理论上可以直接使用系统调用来请求操作系统服务的,但是因为现在的应用程序大多都是高级语言编写的,而编写系统调用的都是低级语言,所以需要通过高级语言提供的C库函数来调用系统调用
高级语言会被编译成汇编语言,比如其中一条write系统调用指令,翻译成汇编语言后,会传入一些参数,然后执行陷入指令(触发中断的一种方式)。让相关的系统调用处理程序来根据传入的参数处理这个write指令。
系统调用背后的过程:
传递系统调用参数–>将系统调用参数放到寄存器中–>执行陷入指令(内中断)–>执行系统调用相应的应用程序–>返回到应用程序
注意:
①:陷入指令是在用户态中执行的,向系统调用发出一个内中断的信号,使(CPU)进入核心态
②:向系统调用发出请求是在用户态,系统调用做出相应的处理是在核心态
③:陷入指令是唯一一个只能在用户态下运行,而不可在核心态中运行的指令
小结: