【一起来学操作系统】——进程
文章目录
操作系统
操作系统就是一个管理员,管理者两大部分:硬件(键盘,鼠标,硬盘),软件(应用程序,文件,进程)
那它是通过什么来进行管理的呢?主要是通过描述(描述事物的属性)+组织(事务之间是怎么链接起来的)
进程
进程就是正在进行的任务,注意是正在进行的程序,而不是已经完成的程序哦
下面就是我当前时刻正在执行的任务:
当然了,大家会发现,对于每一个进程,计算机都会为它们分配一系列的资源,如给CCtalk分CPU,内存,硬盘,网络带宽,GPU等等资源
要知道资源的分配是以进程为单位的,上面也体现的很清楚
如何管理进程
上面我们提到了,可以使用描述+组织的方式来管理进程
描述就是创建一个类, 类似C语言的一个结构体,我们也叫它为PCB这个结构体中存的是关于这个进程的一些属性,如CPU,内存,硬盘的占比等内容
组织就是一个双向链表,这个双向链表中存有着一个个的进程
查看进程就是遍历这个双向链表,然后显示出这个PCB对象中所有的属性
新增进程就是创建出这个PCB对象然后将这个PCB对象插入到链表中
删除进程就是将这个PCB对象从双向链表中删除出去
PCB中都含有哪些属性呢
pid
是给这一个进程赋予一个唯一的id,同一时间的进程的id都是不同的
内存指针
内存指针指的是当前的进程占用了内存的哪些位置
文件描述符表
指明了具体打开了哪些具体的文件.
在实际的进程中,每打开一个文件,就会得到一个文件操作符,有了这个文件操作符就会方便我们去硬盘中去寻找文件了
进程调度
因为现在的计算机都是支持多任务的系统了,就是可以同时运行多个进程,那这个管理的过程就是进程调度
并发
计算机在一段小的时间内执行进程A,然后在另一个小的时间内执行进程B,然后再换别的进程,就一直这样改变执行的进程.
在这一小段时间内执行的只是一个进程,但是在整个宏观角度上,实际上多个进程正在一起执行着.
并且因为每一小段的时间对于人类来说是几乎察觉不到的,所以可以认为这样的方式就实现了多个进程一起执行的效果
并行
还有一种方法叫做并行,并行是由多个CPU执行多个进程.这是多核技术发展才实现的.
以前的计算机只是单核CPU,只能使用并发的方式来进行多任务,但是现在计算机一般都是多核的,所以就可以使用多个CPU同时工作去执行多个进程的方式.
现在计算机是使用并行和并发综合进行调度的
进程的状态
描述进程的状态的属性:
R-----ready就绪状态,时刻就会被执行的状态
S-----sleep等待状态,可能是在等待用户的某些输入
X-----结束状态,已经结束的进程
进程的优先级
在安排时间的时候,优先安排谁
看哪个的优先级高就优先安排哪一个人
进程的上下文
再想要结束当前进程的时候,开启下一个进程的时候.就要先保存了上一个进程的信息,先记录下来.
记录下此次运行到哪个指令,寄存器的信息也都保存到内存中,方便下次再调用.
对于进程来说,它是没有意识到自己其实被切换了
进程的记账信息
记录进程在CPU中被调用了多少时间,以用来决定是不是该继续执行还是应该被调度出去.
我觉得可能每一个进程的调用时间都是有限的,所以要记录一下它被调用的时间
进程的资源分配
进程的调用和执行都是需要分配具体的内存空间的,
现在我们就来看一下到底是怎么分配空间的吧!
原始的内存分配
对于原始的计算机,我们都是分配真实的物理空间,进程A对应内存中某一个特定的地址空间,进程B对应内存中一个特定的地址空间.
现在的内存分配
现在的资源分配都是根据虚拟内存进行分配的,而不是给出一个真正的地址,而是通过页表去映射出真正的内存地址
和原始的内存分配相比,当进程A越界访问的时候,可能会对该不合理的地址进行访问和修改,但是此时修改的可能就是进程B
所以可能会对别的进程有损坏.
而现在的内存分配都是使用虚拟地址,使用虚拟地址的方式就可以达到根据虚拟的地址去到页表中查找真正的地址,如果一旦出现了越界访问的情况,这样系统就会让这个进程崩溃,防止出现危害到其他的进程
这样,就让进程与进程之间的影响性变小了,隔离性增加了,进程也就更稳定了
虽然说虚拟空间可以使进程更加的稳定但是,还是有不少的缺点
缺点就是进程和进程之间的交流就变得麻烦了(进程间通信)
所以,我们就需要其他的方法来进行进程间的交流通信
比如说:文件,管道(使内核中的一个队列),消息队列,信号量,信号,socket