上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.1.1 深入理解进程
上面讲解的进程的概念是Linux体系的概念,非常抽象且难以理解。我们可以把整个操作系统比喻成一家软件公司,内存就是产品设计人员,CPU就是研发人员。公司每年都会接很多项目,每个项目的开展都离不开产品设计人员和研发人员。每个项目对公司来说都是一个进程,都需要产品设计人员与技术人员的参与,项目有开始,也有结束。
从进程视角来看,每个进程都有独立的内存地址空间。这个地址空间至少包括两部分内容:一部分是内核,另一部分是用户的应用程序。图1-1所示为进程结构示意图,图中有8个进程,每个进程拥有内存的整个虚拟地址空间。这个虚拟地址空间被分成了两部分:上半部分是所有进程都共享的内核资源,里面放着一份内核代码和数据;下半部分是应用程序,它们相互独立、互不干扰。
从内存视角来看,系统物理内存的大小是固定的,例如常见的4核8GB内存的服务器,其物理内存始终是8GB。有一部分物理内存是长期分配给系统内核使用的,有一部分是分配给进程间通信使用的,其他部分通过虚拟内存技术分配给每个进程使用,如图1-2所示。
图1-1 进程结构示意图
图1-2 进程共享内存
内核使用的空间是共享的,各个进程可以通过系统内核来操作这部分内存空间。进程通信空间是给多个进程或者多个线程间通信用的。每个进程可以在执行数据写入时申请自己独立的内存物理空间。
从CPU视角来看,所有的进程与线程都是需要执行的任务。Linux会将需要执行的任务放进CPU的任务队列,任务队列按照优先级进行调度。在同一个时刻一个CPU只能执行一个进程或线程的任务。当执行中的任务需要等待其他资源时,就会将任务从CPU任务队列中移除,任务会进入等待状态。CPU任务调度如图1-3所示。