前言:
在学习多线程的时候我们都要接触进程和线程这样的概念,这篇文章来说一下我对进程的理解。
一、什么是进程
我们下载的应用在不适用的时候是静态的也就是不运行的,而在我们运行起来的时候他就变成动态的了被加载到我们的进程管理器中。下图就是我们正在运行的程序,也是一个个的进程。只有当程序运行起来的时候才会变成进程
二、操作系统对进程的调度
进程里面的属性/信息(状态、PID、CPU、内存、磁盘.....)是通过结构体这样的数据集合,集合起来的我们称作为进程控制块(pcb),并且通过双向链表将这些进程组织在一起形成了我们所看到的进程列表。
我们在使用qq的时候我们会点击qq将它运行起来这个期间他经历了什么?
1.操作系统给这个应用分配PID标识码和我们的身份证差不多。
2. 我们在双击qq图标时候,操作系统会将这个exe文件的操作数据以及应用的重要数据通过操作系统对这些数据分配内存空间从硬盘加载到内存中。
3.将这些信息交给cpu,cpu收到这些信息通过与操作系统配合将这个进程运行。
三、进程的创建到销毁
**** 进程PCB ****
为管理进程,操作系统先会创建一个PCB具体内容:
(1)分配进程身份:操作系统分配pid来区分每一个进程
(2)内存指针(内存资源):操作系统将文件的核心数据加载到内存中,使用指针来指向一块内存区分每块内存的作用
(3)文件描述表(文件资源):应用的运行需要对文件进行访问,文件描述表里面记录了打开了哪些文件
(4)状态:当前进程的运行状态(就绪状态/堵塞状态)
(5)进程优先级:在各个进程的优先顺序
(6)进程上下文:当前进程运行到哪里了,接下来继续干那些工作
(7)进程记账信息:进程在cpu上执行了多久(执行的条数)
**** cpu的情况 ****
2.1、我们知道一个cpu核心可以运行一个进程,那为什么我们还可以开启那么多的应用一起使用呢?
进程在cpu上的并发执行的,就像是我这会在码文章的同时我在听歌,两个不是分开的但是同时进行的。PCB中的状态/优先级/上下文/记账信息,这些是有关操作系统的调度,也就是cpu执行的优先级也就是调度,计算机的计算能力很强,所以我们在很短很短的时间先干下工作1再干下工作2在干工作3在我们看来就是同时完成的,这就是对进程的调度,所以一个cpu核心会在一个时间内完成很多的工作。
2.2、为什么进程不会轻易的挤挂其他进程?
我们了解到了进程在运行之前就会分配内存,但是他都运行起来了分配好了内存怎么对别的进程的内存好像没什么影响?这里有一个虚拟地址空间(不是真实的物理内存地址),会给进程先安排一些空间,然后将这个模拟使用的空间大小去和真正要使用的内存空间去比较大小,通过MMU完成虚拟地址到物理地址之间的映射,如果空间足够就将它放到内存上。就相当于再装修一个屋子,我先测量好他的空间大小看看我的物品是不是可以放进来,如果可以进来就将它放进来,不可以的话就不放进来了防止对其他家具抢空间
编辑
这种做法增加了进程间的隔离性保障了安全。