一、多进程并发运行

在计算机上运行的绝不是只有一个进程,而是很多进程同时并发运行,进程在并发运行时

  • 所有进程都是交替运行的,每个进程只运行一个 ms 级的时间片。
  • 调度器会根据调度优先级算法,决定下一个时间片运行哪一个进程
  • 从宏观上看,所有进程是同时并发运行的,但在微观上,在每个时刻,CPU 只运行一个进程。

区别并发与并行:

1)并发

多个进程相互交替运行,表面上看所有进程似乎都是同时在运行,但是实际上在每个时间片里,CPU 只运行一个进程。
在早期单核 CPU 时代,所有的进程都是并发运行的,因为 CPU 只有一个,所以 CPU 在每个时间片内也只能运行一个进程。

2)并行

并行的意思就是,所有进程同时被 CPU 执行,在每个时刻CPU同时运行多个进程。

当然对于单核 CPU 来说,是不可能做到并行的,只能是并发,不过对于现在多核 CPU 来说,可以做到并行,
不同的 CPU 核可以同时并行的运行不同的进程,对于现在多核 CPU 来说,并发与并行是同时存在的。

二、进程控制信息(PCB)

我们说进程是在 OS 控制下运行的,OS 会使用 PCB 管理各种进程信息,

Linux 系统为例,PCB 就是一个 C 结构体,该结构体名叫 task_struct
该结构体非常大,成员项达 300 个左右,用于记录该进程被 OS 控制运行时的各种管理信息。


task_struct 中的各种进程管理信息

(1)进程基本信息

  • 进程 ID:用于唯一标识进程的编号,好比人的身份证号
  • 程序名称:
    就是可执行文件的名字
    因为进程由程序得到,程序的代码数据被放在了可执行文件中,
    所以运行的进程名字就是程序名字,而程序名字也就是可执行文件的名字。
  • 可执行文件的格式:
    程序的代码和数据放在了可执行文件中,我们在前面介绍编译器的课程中就说过,
    在不同操作系统下,需要的可执行文件的格式是不同的,如果操作系统识别到该可执行文件格式不是自己要的,将无法运行。
    格式其实就是一个可执行文件身份识别,比如 Windows 要求 PE 格式、Linux 要求 ELF 格式,在前面的课程中介绍过。
  • 进程时间:
    进程什么时候开始运行的

(2)进程调度信息

  • 进程运行状态:
    就绪态,执行态,等待态等
  • 优先级:
    进程被调度的优先级,优先级高的会被优先被调度
  • 调度标志:
    标记该进程是否被调度
  • 时间片:运行时间片大小

(3)文件信息:
记录正在被进程操作文件的各种信息


(4)内存信息:
进程运行时所需内存的管理信息


(5)休眠时间:
比如当进程调用 sleep 函数,进程就会进入休眠。