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

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,他只能在一个时间干一件事,如果想同时干多件事情,进程就不够用了。
另外,进程在执行的过程中如果阻塞,整个进程都将被挂起,而无法继续执行。就是因为上述两个原因,线程被发明了出来!
线程的介绍,会在后面的文章中描述,谢谢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章