Linux系统——进程相关的概念
1.程序和进程
程序: 是编译好的二进制文件, 存放在磁盘上, 占用的是磁盘空间, 是一个静态的概念。
进程:一个启动的程序,进程占用的是系统资源,如:物理内存,CPU,终端等,是一个动态的概念。
程序——>剧本
进程——>戏(舞台,演员,灯光,道具...)
同一个剧本可在多个舞台上演出,所以同一个程序可以在多个终端执行,但是是不同的进程,有各自的进程PID。
2.并发和并行
并发:CPU在一个时间段内同时运行多个程序。
如:若将CPU的1S时间分成1000个时间片,每个时间片无条件让出CPU使用权,所以CPU的并发为1000。
并行:CPU在同一时刻同时运行多个程序。(需要多核CPU)
3.进程控制块PCB
每个进程在内核中都有一个进程控制块来维护进程相关的信息,Linux内核的进程控制块的本质是一个task_struct结构体。
每个进程都有一个进程id,也就是pid,这是进程唯一的id,相当于人的身份证,在C语言中用pid_t类型来表示。
进程的状态有:就绪、运行、挂起、停止等状态。
进程切换时需要保存和恢复一些CPU寄存器。因为是根据时间片来轮流执行的,需要保存状态。
描述虚拟地址空间的信息。
描述控制终端的信息。
当前工作目录:getcwd -pwd
umask掩码。
文件描述符表,包含很多指向file结构体的指针。
和信号相关的信息。
用户id和组id。
会话和进程组。
进程可以使用的资源上限:ulimit -a
以上总结:一个程序在启动之后就成为了一个进程,操作系统在程序启动之后,会给进程分配一个虚拟地址空间,Linux系统32位分配4G,其中,0-3G为用户区,3-4G为内核区。操作系统在内核区为每个进程维护一个进程控制块来维护进程相关的信息,Linux内核的进程控制块本质是一个task_struct结构体。
4.进程状态(面试题)
进程基本状态有5种。分别为初始态,就绪态,运行态,挂起态和终止态。初始态为进程准备阶段,常和就绪态结合来看。
处于就绪态的进程,有执行资格,但是没有CPU的时间片,没有获得CPU,但是处于挂起态的进程,既没有执行资格,也没有CPU的时间片。
从挂起态不能直接回到运行态,必须回到就绪态,只有就绪态才能够回到运行态。
我们关心的就是运行态!