简单来说就是:一个程序跑起来就是一个进程
一个应用没跑起来叫做程序,跑起来了就叫作进程.
打开任务资源管理器就可以看到有哪些程序在运行,即进程;进程也可以叫做任务(task);
进程是操作系统资源分配的基本单位
举个例子:小明要开一个纺织厂,纺织厂里面又有许多条生产线,而一个纺织厂就相当于一个进程,即小明所拥有的资源
进程是由操作与系统进行管理的,管理主要是描述进程 (进程有哪些属性特征) +组织 (将这些进程串起来)
描述+组织=>调度
描述:主要使用结构体来描述进程我们把他叫做PCB(进程控制块)
组织:通过一个双向链表,把多个PCB串在一起
创建一个进程,本质上就是创建一个PCB结构体对象,并将它插入链表中;
销毁一个进程,本质上就是把链表上的PCB结点删除
在任务管理器上查看到的进程列表,本质上就是遍历这个PCB链表;
操作系统里面有一个很重要的模块调度器,就是负责让有限的CPU来调度执行很多进程;
下面来描述一个非常容易混淆的概念
因为cpu的资源不好分割,但是我们的现在CPU都是多核心CPU,本质上是希望这些进程可以"同时运行",“分时复用”
下面就有个很容易混淆的概念:并行和并发
并行:微观上是同一时刻,两个核心上的进程同时执行(因为一个核心同一时刻只能运行一个进程)
并发:微观上同一时刻只能运行一个进程,但是一个核心可以在多个进程之间进行快速切换,从而在宏观给我们一种多个进程同时运行的错觉
另外,程序获取的内存空间并非真正的内存空间,而是虚拟内存空间,主要是为了防止地址越界,一个程序的崩溃从而导致另外一个程序的崩溃:
如图所示:
问题:
既然进程之间的地址都是虚拟的,那么各个进程之间如何进行数据交互的呢?
实际上,进程之间的通信方式有很多,但是核心思想都是一样的.即搞一个多个进程都能访问到的"公共空间",基于这个公共空间来进行数据的交互