进程也可以说是一个任务,
是一种操作系统中非常重要的软件资源,
把一个可执行程序跑起来,系统中就会产生一个相对应的进程,如果这个程序结束了,那么相对应的进程也会被系统随之销毁,
因此,进程也可以被看作是可执行程序的“过程”
程序/可执行程序 VS 进程
可执行程序和进程不是一个概念,下面我们来具体区分一下
可执行程序
可执行程序是磁盘中的一个文件,也就是每当下载完一个软件之后,所生成的 .exe应用文件
这个文件一定是静态的,再我们电脑的磁盘中可以找到对应的可执行程序,如下
进程
进程是可执行文件跑起来的一个具体实现过程,那么当我们双击可执行程序时,可以在电脑的任务管理器中找到这个运行程序,这个就是进程
把.exe 文件中的很多内容都加载到内存中了,分配一些资源,并开始执行这个可执行程序中包含的指令
进程也是操作系统中进行资源分配的最小单位
创建进程包含信息
每创建一个进程,就同时创建了一个PCB这样的类的实例
使用双向链表把所有的PCB对象串到一起,双击一个exe,创建一个进程的时候,本质上就是在内核中,先创建了一个PCB对象,然后把这个对象加入到链表中,关闭一个程序,结束一个进程的时候,本质上就是在内核中,找到这个对应的PCB对象,然后从链表上删掉,并且释放该资源
通过任务管理器查看到的所有的进程信息,本质上 就是在遍历内核中的这个链表,依次读取对应PCB的节点信息
PCB里面包含的信息有:
1.pid(进程id)进程的身份标识
2.一组内存指针:指向该进程持有的一些重要数据在内存中的位置
3.进程的状态:表示当前的程序是在运行还是休眠…
4.优先级: 这个进程是优先上CPU执行还是放到后面上
5.进程的记账信息:记录了进程在CPU上一共执行了多长时间,通过这个事件来限制不要让某个进程霸占CPU太长时间导致的其他程序无法执行
6.上下文:保存量上次进程在CPU上执行的进度,以便下次进程上CPU的时候能继续执行
以上的3~6点都是为了实现 进程调度
一般情况都会出现 进程数量多,CPU数量少
并发和并行
CPU数量少,但是进程数量多怎么解决呢?
我们电脑中同一时间会运行多个进程,这是通过快速频繁的切换CPU来达到每个线程一起工作,
这样从宏观上看多个线程是同时进行的----------> 并发
从微观上看和从宏观上啃都是同时进行的-------> 并行
但在具体应用中,并发和并行的区分不大
状态
进程中的状态还是比较重要的,这里详细介绍一下
一个进程的状态有一下几种:
R: 就绪状态。正在CPU上执行,或是即将执行
S:睡眠状态。这些进程没法在CPU上执行,而是在等待
D: 深度睡眠状态。进程在长时间忙于IO操作,没尽力理会CPU
X:进程已经被销毁了
阻塞状态。进程不具备运行条件,正在等待某个事件的完成。
…