进程概念
要了解进程概念,我们首先先了解一下冯诺依曼体系
首先从这个图,我们可以很清晰的看到计算机是怎么运作的。那么根据这个图,我们先从一段代码来看程序是怎么运行的
int main(){
fork();
return 0;
- 程序起初被放在硬盘上,当程序运行起来之后,它的数据和代码被加载到内存当中。如果操作系统上运行了很多的程序,操作系统就必须去管理这些程序的运行,但是要管理这些程序,操作系统就得知道这些程序的具体信息,那么怎么去获取这些信息呢?PCB就扮演了这个角色,PCB对这些程序进行描述,然后操作系统通过看PCB的描述就知道了这些程序的具体信息,然后操作系统才能完成调度一个进程在cpu上运行的工作。
- 这段代码首先是放在硬盘上边,这个时候它只是硬盘上的一块数据,程序还没没有地址空间,只有当这段程序运行起来之后才会产生进程,并会占用内存。这个时侯为了控制程序的运行,会创建pcb。为了让cpu知道代码和数据在哪个位置,pcb会创建一个虚拟地址空间来描述程序和代码在内存中的具体存放位置。而怎么通过虚拟地址空间的虚拟地址找到物理内存中的代码和数据呢?
- 这个时候有一个牵煤拉线的人物出来了,这个人物就是页表。虚拟地址空间的虚拟地址会通过页表映射到物理内存,从而找到代码和数据的存放位置。
- 这个时候有一个牵煤拉线的人物出来了,这个人物就是页表。虚拟地址空间的虚拟地址会通过页表映射到物理内存,从而找到代码和数据的存放位置。
那么我们再返回来看到底什么是进程呢?
- 进程概念:
- 用户层面:运行起来的程序
- 操作系统层面:
程序运行需要将代码数据加载到内存中
操作系统上运行了很多的程序,操作系统就必须去管理这些程序的运行,先描述再组织进行管理。在操作系统的层面进程就是操作系统对一个运行程序的描述。
如:校长眼里看到了同学的档案就仿佛看到了真人,通过档案来管理学生。
在操作系统眼中看到了对运行程序的描述就仿佛看到了进程,通过描述管理学生。这个描述信息叫PCB(进程控制块)。—Linux下是
struct task_struct结构体。
cpu分时机制:对程序运行处理进行切换调度处理
时间片:cpu在每个程序上所运行的时间
PCB中的描述信息:内存指针,程序计数器:保存代码下一步即将执行的指令位置,上下文数据:保存当时正在cpu上正在处理的数据,标识符PID:进程ID,进程状态,进程优先级:主要是为了提高用户体验,记账信息:记录进程在cpu上运行了多长时间,IO信息。