操作系统基础原理篇(一)

1.1什么是操作系统
操作系统掌握计算机执行的全部流程,掌控计算机局势的一个系统,缩写为OS,具有至高无上的权威,换一个说法:操作系统就是介于计算机应用软件和计算机硬件的之间的一个软件系统。
在这里插入图片描述
操作系统到底控制什么?当然是控制计算机里发生的一切事情!未经过操作系统允许执行的操作,都是非法的。
1.2作为管理者的操作系统
他是一个软件系统,让计算机变得好用,可以总结一下操作系统的功能:
1)替用户及其应用管理计算机上的软硬件资源
2)保证计算机资源的公平竞争与使用
3)防止对计算机资源的非法侵占和使用
4)保证操作系统自身运转正常
根据管理资源的的不同,操作系统具体功能包括:
1)CPU管理
2)内存管理
3)外存管理
4)I/O管理
1.3用户程序与操作系统
操作系统上下分别为虚拟机器界面和物理机器机器界面,处于物理机器下面的是硬件,处于虚拟机器界面的是应用软件。
操作系统为用户用户程序提供了一个虚拟的机器界面,应用程序运行在这个界面之上,也就是我们说的API调用,操作系统也是一个软件程序,应用程序也是,无非就是调用与被调用的关系!
操作系统提供给用户程序各种服务接口,来到达应用程序完成自己的任务。当调用这些服务时,控制从用户程序转移到操作系统,而操作系统在完成这些服务后将控制返回给用户程序。在这种模式下,用户程序是主程序,操作系统是子程序。
在这里插入图片描述
相反的:
系统先起来,再有应用程序调用!
在这里插入图片描述
当然,怎么好理解怎么来思考,都是相互调用的关系,从而形成一个非常复杂的动态关系!
1.4操作系统的范畴
CPU管理:
也就是进程管理,主要目的有当然,第一个是公平,每个进程都有机会使用到 CPU,第二个是阻塞,就是任何程序不能无休止的阻挠其他程序正常推进,其中阻塞可能是需要输入输出或者别的什么事情,第三个是优先级,坚决反对大锅饭,要让一小部分的人先富起来!希望我说了这句话不会被打。
内存管理:
主要是管理缓存,内存,磁盘,磁带等存储介质所形成的内存架构,也由此,出现了虚拟内存的概念。也就是将物理内存(缓存和内存)扩展到外部存储介质(硬盘,磁盘,光盘),内存管理另外一个目的就是实现让很多程序共享同一个物理内存,这就需要对物理内存进行分割和保护,不让一个程序访问另一个程序所占的内存空间,专业数据称为运行时不能越界。
存储管理:
也可以称为文件系统系统,其主要目的是将磁盘变成一个很容易使用的存储媒介提供给用户使用,这样我们在访问磁盘是无需了解磁盘的物理特性。
设备管理
管理就是管理输入输出设备,其目的有两个:一个是屏蔽不同设备的差异性,即用户用户同样的方式访问不同的设备,从而降低编程的难度。二是提供并发访问,即将那些看上去不能共享的设备变成可共享。
在这里插入图片描述
批处理管理
提供以重无需人机交互的程序运行模式,直接交给计算机,主要是想要达到吞吐量最大化,单位时间完成的任务最多。
在这里插入图片描述
1.计算机硬件基本知识
从概念上讲,计算机的结构非常简单,首先布置一根总线,然后讲各个硬件设备挂在总线上,所有这些设备都有一个控制设备,外部不设备都由这些控制器与CPU通信,所有设备之间的通信均需要通过总线。
在这里插入图片描述
计算机的功能部分分为多个梯级,并将计算机的每条指令拆分为同样多的步骤,是的每条指令在流水线上流动,到流水线最后一个梯级是指令执行完毕,流水线上的每个梯级都可以容纳一条指令同时执行。
在这里插入图片描述
在之后出现了四梯级的超标量发射结构,如图:
在这里插入图片描述
存储架构:
指令的存放单元,存储架构包括了缓存,主存,磁盘,磁带。有的情况还存在多级缓存和外部光盘。如图是一个包括寄存器的5级存储介质构成的存储架构。
在这里插入图片描述
从上到下,每一集的存储媒介的访问延迟和容量依次增大,几个从高到低,寄存器的访问速度最快,容量最小,但是成本高。反之,通过合理搭配,可以形成一个性能价格比比较高的的存储架构。
磁盘是计算机的主要存储媒介,没有磁盘,计算机就不称其为计算机
典型的磁盘结构:
在这里插入图片描述
中断时计算机里一个最为重要的机制,它是操作系统获得计算机控制权的根本保证。没有中断,很难想象操作系统如何完成人们赋予的任务。
计算机中断基本原理:设备在完成自己的任务后向CPU发出中断,CPU判断优先级,然后确定是否响应,如果响应,则执行中断,并在中断中结束后继续原来的程序,如图:
在这里插入图片描述
还可以发生软中断,即软件发生的中断。
2.内核态与用户态:
人并非平等,其所占有的资源有多有少,有的人来了,你需要让出你的资源,有的人可以使用任何资源,有的人却很少,程序也是这样。能访问任何资源的就是操作系统!为了区分权力的大小,就有了内核态与用户态。
内核态:拥有资源多,或者能访问的资源多,所以也称特权态。
用户态:非特权态,访问资源会存在confine。
比如:如果要visit OS内核数据结构(如进程表),需要在特权态下才能办到。如果访问用户程序里的数据,在用户态就行。
权力越大,也就越危险,大家都懂吧,在古代,高官抓人放火,想做就做,就会造成大家的生活很难,如果是难上加难就有点惨了,所以内核态的程序的可靠性与安全性显得尤为重要,如果内核态程序修改了操作系统的各种内核数据结构,会造成整个系统的崩溃。而运行于用户态的程序,就算出现问题,那崩溃的也是应用程序,操作系统将继续运行。
一个程序到底运行于什么状态取决于对资源和效率的需求。一般来说,一个程序能运行与用户态,就不必放置在内核态,除非迫不得已!或者这么理解,作为皇帝的我(特指小编),凡是牵扯到影响朕的江山稳定的事件,就在内核态运行,地方管辖的事情就不必我来处理,只与用户数据和应用相关的东西则放在用户态执行。另外,对时许要求特别高的事情,也应该放在内核态来做,就像,我(朕)开车出门玩,会堵车吗(提前几天道路就腾出来了)??
内核态运行程序举例:
CPU管理和内存管理都必须在内核态,为什么必须呢?如果在用户态运行,极不安全!就像朕的军队,交给读者来管理一样(一山不容二虎,现在读者不可能是皇帝,可能以后是),肯定不行啊!对我非常危险。
诊断与测试程序也需要在内核态实现,因为它要访问所有资源,才能知道有没有问题,有点像我们的安全软件(腾讯,360等等)。输入输出管理也一样,要访问各种设备和底层数据结构,也必须在内核态!
文件管理系统而言,一部分放在用户态,一部分放在内核态,文件系统本身的管理,即文件的宏数据部分的管理,必须放在内核态,编译器,网络管理的部分功能,编辑器用户程序,自然都放在用户态下执行。如图:
在这里插入图片描述
3.态势的识别
正确的作出内核态与用户态的判断对系统的正确运行至关重要,显然作出这种判断需要某种标志,这个标志就是处理器的一个状态。这个状态位是CPU状态字里面的一个字位,通过设置这个字位,可以将CPU设置为内核态与用户态,或者其他子态(有的CPU有更多种子态),一个程序运行时,CPU是什么状态。这个程序就运行在什么态。
4.如何实现内核态与用户态
前面说过,内额态是特权态,用户态是普通态,这种限制是如何实现的呢?
要限制一个程序对资源的访问,需要对每条指令进行检查,这个检查就是地址翻译,通过地址翻译的控制,就可以限制对资源的访问。为了给内核态程序赋予访问所有资源的权限,系统处于内核态时,内核程序可以绕过内存地址翻译而直接执行特权指令,如停机指令。这种绕过翻译的做法突破了对系统资源的控制。
5.操作系统结构
各种功能归为不同的功能块,每个功能块相对独立,又经过固定的界面相互联系,任意一个功能块可以调用另外一个功能块的服务,如图:
在这里插入图片描述
但是这样的操作系统存在很多缺点,修改任意功能会导致其他功能模块都需要修改,设计上增加了难度,这种没有层次的网状联系容易造成循环调用,形成死锁,从而降低了操作系统的可靠性,从而有了有层次的操作系统,低层次的功能为紧邻其上的一个层次的功能提供服务,高层次的又可以为更高层次的功能提供服务。如图:
在这里插入图片描述
上面的两张图,操作系统的所有功能都在内核态下运行,这就需要从用户态转为内核态的时间成本,而且其安全性与可靠性就会降低,加上黑客的增多,操作系统东西越多,内核态运行的代码就越多,漏洞也就越多,安全性就会降低,现在的操作系统已经达到了四千万行,采用微内核的结构,即将操作系统中核心的核心放在内核态运行,其他都放入用户态。同时提高了效率和安全性。
如图:
在这里插入图片描述
1.进程
操作系统的核心概念,一个运动中的程序(进展中的程序),一个程序一旦在计算机里动起来,它就成为一个进程。操作系统对进程的管理通过进程表来实现。因为进程表里存放的是关于进程的一切信息,在任何时候,进程所占的全部资源,包括分配给该进程的内存,内核数据结构和软件资源形成一个进程核(core)。核快照代表的是进程在某一特定时刻的状态。
进程与进程之间可以进行通信,同步,竞争,并在一定情况下会形成死锁
2.内存
它是进程存放的场所,所以对于内存的管理显得尤为重要,内存管理使得数据的读写具有高效,高安全,高空间利用率和位置透明!
3.文件
文件是操作系统提供的外部存储设备的抽象,它是程序和数据的最终存放地点,如何让用户的数据存放变得容易,方便,可靠和安全是文件系统的事。
4.系统调用
操作系统是系统程序,用系统调用的方式提供服务,也就是操作系统提供的应用程序接口(界面),也成为API。
例如:如果用户程序需要进行都磁盘操作,在程序代码里使用的是:result=read(fd,buffer,nbytes);这个read函数就是C语言提供的库函数,而这个库函数本身就是调用的操作系统的read系统调用,在编译器上看到上述语句后将read库函数扩展为read系统调用。
系统调用按照功能可以划分为:
1)进程控制类
2)文件管理类
3)设备管理类
4)内存管理类
5)信息维护类
6)通信类
系统调用一般分为三个阶段:
1)参数准备阶段
需要使用系统服务程序将系统调用所需要的参数,如上述的fd,buffer,nbytes压到栈上,然后调用库函数read,库函数read将系统调用read的代码放到一个约定好的寄存器里,通过陷入(trap,一种中断方式)将控制权交给操作系统
2)系统调用识别阶段
操作系统拿到控制权后,将系统调用代码从寄存器里取出,与操作系统维护的一张系统调用表进行比较,获得系统调用read的程序体所在的内存地址,之后跳到该地址。
3)系统调用执行阶段
执行系统调用函数,系统调用完毕后返回到用户程序
如图:
在这里插入图片描述
由图得,参数传递是通过栈来进行的,但是这不是唯一的传参方式,效率最高的是使用寄存器,寄存器的访问速度大于栈,可以提大亨喜用调用执行的效率。
5:shell(壳)
使用API需要编程,但是对于不想编程的用户,或者需要与操作系统进行交互的用户来说,就可以使用使用操作系统提供的壳,来与用户交互,每个操作系统都有。既可以是文本,也可以是文本,是覆盖在操作系统服务上面的一个用户界面,用户使用的是类似C语言库函数,是通过utilities来获取操作系统的服务。powershell是一个文本命令壳。
一个壳的功能包括如下几项:
1)显示提示符,如UNIX下的提示符$与%
2)接收用户命令并执行
3)实现间接输入输出
4)启动后台进程
5)进行工作控制
6)提供伪终端服务
这个壳一旦启动,就循环往复直到无穷
1)显示命令提示符
2)等待用户输入命令
3)使用fork创建一个子进程
4)使用execve在创建的子进程里执行用户输入的命令
5)重复上述步骤
上面简单叙述了各个概念的解释,下面我们将进行详细的说明

进程细说

操作系统对CPU进行管理和实施的手段就是进程与线程
1.解释
在这里插入图片描述
操作系统的三大核心:
1)进程管理(CPU管理)
2)内存管理
3)文件管理
进程=程序+执行
cpu使用的效率不高,使得了进程的出现,并发执行,这些同时存在在计算机内存中的程序称为进程,多进程实现了多道编程。
在这里插入图片描述
每个进程占用一片存储空间(内存),物理程序计数器可查到正在执行的具体程序代码,在物理层面上,所有进程公用一个程序计数器。从逻辑层面,每个进程都需要自己的计数器,所以程序计数器可以有很多个。从时间上看,每个进程必须向前推进,也就是一定时间内完成一定工作量。
在这里插入图片描述
进程不一定必须终结,事实上,许多系统进程是不会终结的(用来为别的进程提供服务的进程),除非强制终止或关闭计算机。
2.就能成的产生与消失:
在一个系统初始化时,将有许多进程产生,这些进程的存在使得新的进程和用户程序的执行成为可能。在系统初始化后,系统就等待用户输入命令,如果这个用户启动一个程序,如双击一个可执行文件,那么系统将为这个文件创建一个进程。此外,用户也可以载程序里面通过系统调用,如fork或者createprocess直接产生新的进程。
造成进程消亡的的时间可以分为四种情况:
1)寿终:任务完成推出//自愿
2)自杀:进程错误自行退出//自愿
3)他杀:进程呗其他进程杀死//非自愿通常为一个父进程杀死一个子进程,用户只可以杀死自己的进程,但是一个超级用户可以!
4)处决:进程因为一场而强行终结//非自愿,可能是某进程执行了非法操作,如访问出街或者除以0之后发生,这总非法操作将被操作系统捕捉,捕捉到后将终结造成异常的进程。
3.进程的层次结构
一个进程可以通过系统调用创建新的进程,这个新建出来的进程被称为你子进程,创建子进程的进程称为父进程。进程树就是循环创建进程的称呼。
UNIX中的进程有层次架构,因此有不同层次,但是Windows没有进程树的概念,所有进程地位平等。
4.进程的状态
进程可以在CPU上执行,就是执行态,如果CPU挂起呢?那得看为什么!因为OS在进行调度时要从挂起的进程里面选择一个来执行,所以清除一个进程挂起的原因对调度的有效推进很总要。
如果一个进程在执行的过程中执行了某种阻塞操作,如读写磁盘。由于阻塞需要等待结果后再继续执行,操作系统会把这个进程挂起来,让其他进程运转,另外一种就是一个进程执行时间太长了,也会被挂起,让其他进程也有机会执行。
这样我们把挂起进程分为两类:就绪态,和阻塞态
还有一个状态就是执行态。如图
在这里插入图片描述
能否相互转换看箭头指向。许多商业的操作系统进程可能不止三种。大同小异而已。
5.进程创立
步骤:
1)分配进程控制块
2)初始化机器寄存器
3)初始化页表
4)将程序代码从磁盘读进内存
5)将处理器设置为”用户态”
6)跳转到程序的起始位置(设置程序计数器)
不同的操作系统,创建方式有差异
6.进程与地址空间
进程空间也成为地址空间,也就是你进程所需要的所有资源,所有资源构成了状态的划分,不可能有两个进程完全一样。
进程与地址空间研究主要内容是如何让多个进程空间共享一个物理内存,具体来说,就是高效,安全的让所有进程共享这片物理内存。
7.进程管理需要的手段
由操作系统来管理,要维护关于进程的有一些信息,而操作系统用于维护进程记录的结构就是进程表或进程控制块,这个表或者pcb里面存放的就是关进程的资料,这个资料里面包括寄存器,程序计数器,状态子,栈指针,优先级,进程ID,信号,创立时间,所耗CPU,当前出游的各种句柄等。而采纳的数据结构主要是线性表,链表和结构。
在这里插入图片描述
这个进程表保持在操作系统所在的内核空间里,如图:
在这里插入图片描述
8.进程的缺陷
进程让我们的用户感觉到自己独享一个CPU,他只能在一个时间干一件事,如果想同时干多件事情,进程就不够用了。
另外,进程在执行的过程中如果阻塞,整个进程都将被挂起,而无法继续执行。就是因为上述两个原因,线程被发明了出来!

猜你喜欢

转载自blog.csdn.net/weixin_42271802/article/details/105947343