操作系统概论笔记
操作系统 (Operating System,OS) 控制和管理整个计算机环境的软件和硬件资源,并组织和调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件
我们如何理解操作系统(How can we understand OS)
我们都知道计算机的底层是通过读取二进制数据从而进行相对应的指令,假设存在一个机器码00001;我们为了给计算机传递这个信号,就必须先把这个指令打在纸带上,然后插入一个纸带,计算机开始执行这个指令,但是一个程序通常需要不止一条指令, 而且经常会出现一台计算机有多个人等着使用的情况。并且人们也十分痛恨装卸纸带,所以我们希望程序可以存在某个地方,于是就有了外存,但是,这仅仅只是将纸带换成了硬盘而已,计算机依旧不能直接传达我们的命令。于是我们的前辈们创造出了操作系统这一个概念。 简单的来说,操作系统是对硬件所暴露的接口的封装,通过操作系统,我们可以更简单去使用我们的硬件。其目的是为了向用户和其他用户提供更加方便应用的服务,也即是说。用户可以操作操作系统所暴露的接口,去更简单地操作我们底层的硬件,实现我们的目的;这便是定义中提供给用户和其他软件方便的接口和环境的理解。
我们在平时使用电脑的过程中,打开一个软件的时候,通常是打开一个exe文件,此时,我们的操作系统去调用一块未被占用的内存,然后将程序放入内存中,此时,程序开始运行,在这一个过程中,用户通过操作系统打开了软件,在这同时,调用了硬件,实现了软件到硬件的使用。 因此我们说,操作系统管理和控制整个计算机环境的软件和硬件资源。只有通过操作系统把程序的数据放入内存中,cpu才能处理这个程序。
由于操作系统是直接和硬件所接触的软件,因此它是最基本的系统软件
操作系统的好处(The Benefit of opearating system )
- 操作系统实现了一种封装的思想,操作系统把一些丑陋难用的硬件功能封装成简单易用的服务,使得用户可以更简单的去使用我们的计算机,而无需花费高昂的代价去学习计算机底层硬件原理,把重心转移到像计算机发送什么样指令上去。这是一种典型的抽象简化设计的思想。通过提供更加简洁的接口,去替代原先难以使用的接口;
操作系统的接口:
1.GUI(图形化用户接口):
通过这一接口,用户可以在形象的图形界面中进行操作,而不需要复杂的命令和参数。最出名的GUI莫过于Windows自带的视窗GUI;当然,linux的某些发型版本也存在GUI;
2.联机命令接口:
即交互式命令接口,用户输入一直指令,机器执行一句指令,最典型的案例为windows的cmd指令。
3.脱机命令接口:
即批处理命令接口,用户在批文件中输入一大堆指令,机器执行一大堆指令。最典型的案例为windows的bat文件
4.程序接口:
在程序中进行系统调用来使用程序接口,普通用户不能直接使用程序接口,例如c语言的printf就是调用了系统的程序接口,调用了显示器资源。将内容打印在显示器上。
- 操作系统实现了对硬件的拓展,使得裸机的成为了功能更加强大,使用更加方便的机器。操作系统通过对cpu、内存、磁盘、显示器、键盘等硬件的合理组织,使得他们能够协调配合,实现更多更复杂的功能,如资源管理器等。
操作系统具有以下的四个基本特征,其中最基础的特征是并发和共享,两者相互依存,互为存在条件,且是其他两个特征的基础。操作系统的四大特征如下:
- 并发 并发是指多个事件在同一时间间隔内发生,这种发生在宏观上看来是在同时发生的,但在微观上是交替发生的。操作系统的并发性是指计算机系统中同时运行着多个程序,这些程序看上去是同时运行着,但在微观上是交替运行的。
- 共享 共享即资源共享,是指系统中的资源可以被内存中的多个进程共同使用。资源共享方式分为两种,互斥共享和同时共享。 对于互斥共享来说,系统中的某些资源虽然可以提供给多个进程使用,但是一个时间段内只允许一个进程访问该资源。如手机用微信打开了视频电话就不能在QQ使用视频电话,这是因为摄像头这一硬件资源是互斥共享的。 同时共享则是指,系统中的某些资源可以提供给多个进程使用,一个时间段内允许多个进程 “同时” 访问该资源。这里的同时是指并发地访问。例如说我们可以同时使用QQ和微信发送不同的两个文件,这两个文件的读取看似是同时进行的,其实是并发执行的。
- 虚拟 虚拟是指将一个物理上的实体变为若干个逻辑上的对应物。物理实体是实际上存在的,而逻辑对应物是用户感受到的。实现虚拟技术采用了空分复用技术和时分复用技术。 举个例子说,假设你的内存只有4G,但是通过空分复用技术和虚拟存储技术可以实现运行所需内存总和超过4G的软件,本质上是对内存的分时复用,即每次输入一部分资源,输出后再把资源换出,输入下一段资源,直到程序完成。通过虚拟性,我们可以体验到超过原有物理实体的体验。
- 异步 对于临界资源的互斥访问可见,由于资源等因素的限制,使进程的执行通常都不能“一气呵成”,而是“走走停停”,即进程是以人们不可预知的速度向前推进,每道程序总共需要多少时间才能完成,这也是进程的异步性。只要在操作系统中配置完善的进程同步机制,且运行环境相同,则作业即便经过多次运行,也会获得完全相同的结果。因此异步运行方式是允许的,并且是操作系统的一个重要特征。
操作系统一般可分为三种基本类型,即批处理系统、分时系统和实时系统,随着计算机体系结构的发展,又出现了许多种操作系统,它们是嵌入式操作系统、个人操作系统、网络操作系统和分布式操作系统。
批处理系统
批处理系统具有以下的发展阶段:
- 手工处理阶段(该阶段无操作系统),在这一阶段,计算机通过纸带机输入输出结果,用户独占全机,资源利用率低下。
- 单道批处理阶段:为了提高资源的利用率,在这一阶段引入了脱机输入/输出技术,通过使用外围机和磁带将一批作业写入磁带中,并使用监督程序依次将作业装入内存并把运行控制交给该作业,处理完后作业把控制权交还给监督程序,然后监督程序将后面的作业装入内存,并重复上述过程,直到所有作业都处理完毕。缓解了一定的人机速度矛盾,但是由于内存中同一时间还是只能处理一个程序,所以资源利用率还是很低。
- 多道批处理阶段(操作系统正式诞生):在这一个阶段,可以一次性向计算机输入多个程序,并让他们并发地执行。这标志着操作系统的出现,使用多道批处理系统,可以做到多程序并发执行,共享计算机的资源。使得计算机的资源利用率上升,提升系统的吞吐量。缺点是没能实现人机交互。
分时操作系统
分时操作系统是指计算机以时间片为单位 轮流为各个用户/作业服务,各个用户可以通过终端与计算机进行交互;也即是,在一段时间内,这个计算机会被一个用户所使用,过了这段时间就会转给另外一个用户使用,优点在于用户的请求可以被即时的响应,解决了人机交互问题,允许多个用户使用同一台计算机,并且不会感知到其他用户。缺点是无法设置优先级,计算机循环地为每个用户/作业服务一个时间片,过了这个时间片就切换服务对象,不区分任务的紧急性。
实时操作系统
实时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。优点在于能够优先处理一些紧急任务,某些紧急任务不需要时间片排队;在实时操作系统的控制下计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性。
实时操作系统又分为硬实时操作系统和软实时操作系统。
- 硬实时操作系统:系统必须在绝对严格的规定时间内完成处理,如导弹控制系统,自动驾驶系统等
- 软实时操作系统:系统能够接受偶尔违反时间规定的情况,适用于那些处理结果稍晚不会出现巨大后果的系统。如12306的抢票系统。
除了以上提及的三种系统外,我们更多接触到的是个人操作系统,如我们使用的windows系列系统,Linux系统,苹果的MacOs等等。
网络操作系统 ,是一种能代替操作系统的软件程序,是网络的心脏和灵魂,是向网络计算机提供服务的特殊的操作系统。
分布式系统是用来管理分布式体系的一种操作系统。
指令的分类
在操作系统中,指令分为两种,分别是特权指令和非特权指令,其中特权指令是指只能被管理者——操作系统内核使用的一系列指令。这些指令只能出现在内核程序之中,而不能在应用程序中被调用。在cpu设计和生产前便确定了哪些是特权指令,哪些是非特权指令。特权指令一般是一些会影响到全体资源或者是很重要的指令。
内核程序和应用程序的辨析
内核程序是属于操作系统的一部分,运行在内核空间内。应用程序则运行在用户空间内。
内核程序中的函数属于被动调用,而应用程序则是顺序执行。
如何判断运行指令时程序是应用程序还是内核程序
在遇到特权指令的时候,操作系统是如何进行判断这句指令是在应用程序中的还是在内核程序中呢?显然,这是一个很重要的问题。为了解决这个问题,操作系统将cpu划分为两种状态:内核态和用户态,处于内核态,证明此时运行的程序是一个内核程序,可以执行特权指令,处于用户态,证明此时运行的程序是一个应用程序,不能调用特权指令。
为了辨别计算机属于那种状态,我们需要使用到计算机系统的一个寄存器,叫PSW(程序状态字寄存器),我们通过判断PSW中的值,如果为1,则代表CPU处于“内核态”,如果是0,则代表CPU处于“用户态”。
CPU的状态如何转换
在开机的时候,CPU会先进入“内核态”,此时执行一些计算机初始化的内核程序,当内核程序运行到结尾时,且我们运行了一个应用程序,此时操作系统会会适当的时机把CPU交给这个程序,并同时将PSW的值赋为0,当CPU处于内核态,可以随意进入用户态;而当CPU处于用户态时,用户从用户态切换到内核态只有在系统调用和中断两种情况下发生,一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就必须通过软中断机制进入内核态。
以下是遇到中断的一种情况,当CPU处于用户态的时候,调用特权指令,便会触发中断,并执行对应的内核程序。
内核一般是指操作系统最接近硬件的一部分程序,通常包含对硬件的一些直接操作,如时钟管理,中断处理以及原语程序。这部分是与硬件关联较紧密的部分。
原语程序是指处于操作系统最底层,最接近硬件的程序,这类程序的执行具有原子性,即每次执行必须完成整个程序,不可中断,是调用最频繁的程序,但运行时间普遍较短
根据大内核和微内核的不同,内核可能还含有进程管理、存储器管理、设备管理等对系统资源进行管理的功能。这部分模块更多是对数据结构进行操作,不会涉及到硬件。
大内核和微内核
大内核中的内核包括时钟管理,中断处理、原语程序、进程管理、存储器管理以及设备管理,在交互的过程中,如果应用程序想要执行上述功能, 则需要进行变换操作系统所处的状态来实现。如下图所示:
显然当应用程序需要涉及到内核的操作时,都必须通过中断将CPU的状态从用户态转换到内核态,才能完成相应的操作。
微内核中的内核只包含时钟管理,中断处理,原语程序。在微操作系统中,如果想要进行进程管理、存储器管理和设备管理,就必须通过中断进内核态。 然后进行相应的操作。
显然,在某些场景下,如果使用微内核架构的话,会导致频繁的状态切换,需要耗费大量的时间。这会导致系统的性能下降。
微内核和大内核的优劣
- 只把最核心的功能留在内核,便于维护,结构清晰
- 内核外的某个功能模块出错不会导致整个系统崩溃。
- 需要频繁从内核态与用户态之间切换,性能较差。
- 用户态下的各功能模块不能直接相互调用,需要通过内核的"消息传递"来间接通信. 大内核
- 把操作系统的主要功能都作为内核,不需要频繁切换状态,性能较好
- 内核内的所有功能都可以相互调用。
- 内核代码庞大,结构混乱,难以维护
- 大内核中的某个功能模块出错,就可能导致整个系统崩溃
以上便是两种比较常见的操作系统体系。
分层结构
分层结构是一个最底层是硬件,最高层是用户接口的一个分层模型,每层只能调用相邻下层所提供的接口。
优点
- 在软件测试的时候,可以自底向上逐层调试和验证,易于调试和验证。
- 易扩展和易维护,各层之间调用接口清晰固定
缺点
- 仅可调用相邻低层,但操作系统的某些功能难以简单的定义上下层,例如说内存管理可能需要使用到进程管理,而进程管理也可能需要使用到内存管理
- 只可调用相邻低层,不能跨层调用,这会导致效率较低,系统调用时间较长
模块化
模块化是将操作系统内核分为多个模块,各个模块之间相互协作工作。某个模块具有某方面的管理功能,并规定好各模块间的接口,模块之间通过接口进行通信。 内核=主模块+可加载内核模块。 主模块:负责核心功能的模块,包括进程管理、内存管理等。 可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核,但不影响操作系统,例如说驱动程序,即使没有驱动程序,操作系统也能运行。
优点
- 模块间逻辑清晰易于维护,确认模块间接口后即可多模块同时开发
- 支持动态加载新的内核模块,增强OS适应性。
- 任何模块都可以直接调用其他模块,不需要消息传递,效率高,
缺点
- 模块间的接口定义未必合理、实用
- 各模块的耦合度高,难以调试与验证
外核
内核负责进程调度、进程通信功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全
优点
- 外核可直接给用户进行分配“不虚拟,不抽象”的硬件资源,使用户进程可以灵活的使用硬件资源
- 减少了虚拟硬件资源的“映射层”,提升效率
缺点
- 降低了系统的一致性
- 使系统变得更加复杂
操作系统引导即在电脑开机时完成操作系统初始化的工具,在安装操作系统后,在磁盘的开头会留出一部分区域,作为主引导记录。 这部分内容包括磁盘引导程序和分区表,其中分区表是一个数据结构,用来存储磁盘中每个分区的内存大小和地址范围。 一般来说,我们将装有操作系统的盘叫做系统盘,系统盘可以分为三个部分,分别是引导记录PBR、根目录以及其他 在开机的过程中,CPU通电后,会先去内存的ROM部分读取ROM引导程序,然后执行ROM引导程序,先进行自检,如果自检通过。就将主引导记录和磁盘引导程序读入RAM, 接着执行磁盘引导程序,磁盘引导程序再通过主引导记录中的分区表找到系统盘。然后读入系统盘的第一部分即引导记录PBR到RAM中, 执行PBR,通过PBR找到根目录下的启动管理器,再将启动管理器读入RAM,并执行,然后启动管理器去完成系统的初始化工作。 如下图所示:
传统的计算机上只能运行一个操作系统,但是在一些商业化的场景中,两个进程间可能存在互相影响的可能,存在一定的安全隐患, 但如果使用另外的物理机去部署不同的项目,又会导致资源的浪费,为了解决这一问题,虚拟机应运而生。 虚拟是通过虚拟化技术,将一台物理机拆分成多台逻辑上的机器,虚拟出的这多台机器都可以独立运行一个操作系统 虚拟机一共有两种,一种直接运行在硬件上,如下图所示:
CPU的划分是通过将时间片进行划分,给予某个虚拟机若干的时间片,从而实现各个虚拟机间资源的共享机制。 而磁盘和内存空间的划分就是简单的将内存和磁盘空间进行划分,然后分配给各个虚拟机。值得一提的是, 只有虚拟机管理程序是运行在内核态中的,因此,只有虚拟机管理程序可以使用特权指令。当虚拟机中的操作系统想要执行特权指令时。 会被虚拟机管理程序截获请求,并进行处理后返回给上层操作系统,营造出已经处理成功的样子。
第二类虚拟机运行在宿主操作系统上,如下图所示: