一.什么是进程
在计算机运行的过程中并不是一个一个软件的运行,是有很多软件一起进行运行,那么我们暂时可以把一个软件的运行叫一个进程。
二.进程的组成
进程 = 描述(PCB)+ 组织
1.描述(PCB)
pcb可以理解为一个c语言的结构体或者是Java的一个类
class PCB {
// 进程的唯一标识 —— pid;
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使用的各个资源
// 进度调度信息
}
其中,pid是进程的唯一的身份标识,它由以下几个属性组成
内存指针:描述了这个进程使用的内存空间是哪个范围
文件描述符表:描述了进程打开了哪些文件
进程的状态:
进程的优先级:安排时间表的时候先安排谁,后按安排谁
进程的记账信息:安排同时考虑历史记录
进程的上下文:进程可能执行了某个操作,执行了一半就被调度走了,过一段时间回来吗需要从上次的地方继续往下
2.组织
操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改的操作。
三.进程的虚拟地址空间
计算机的能存空间是有限的,那么当给进程分布内存空间的时候难免会有重复,但是我们却并没有发现进程之间的互相干扰,那么这个就得益于进程的虚拟地址。
从图中我们可以看到,通过mmu(保证访问地址的正确性),操作系统将一个地址转换为一段虚拟地址, 进程就在这一段虚拟地址上操作,确保了进程之间的互不影响。那进程就是通过我们前面所说的内存指针来找到这一段地址。
这样就体现了进程的隔离性
四.进程间的通信
上面我们可以看到了,进程都是在自己的虚拟空间中运行,那么进程之间的合作又是怎么完成的呢。我们可以想想,工厂的流水线之间都是相互独立的,相互不干涉的,那么我们就有一个公共区域,将自己做好的东西放在公共区域上,然后,另外一条流水线上的就会来拿,(外卖柜也是同理)。那么进程之间的通信也是如此,通过一个公共区域,两个进程来同时访问,就可以做到进程之间的相互合作和通信。
五.进程的调度
说到进程的调度,就不得不提到两个概念“并发”,“并行”
并发:宏观上同时,微观上不同时,轮流占用cpu
并行:两个或多个进程在cpu上同时进行
那么真正的在操作系统中,并发和并行是都存在的。进程的调度就是既有并发又有并行,操作系统会尽量让每个进程都能做上事。具体的调度过程还是比较复杂的,这里就不具体展开啦