【Linux手册】从「程序」到「进程」:计算机世界的运行机制
目录
前言
进程是什么
操作系统如何对进程进行管理
进程的属性
ps查看进程属性
top动态显示进程的属性
补充/proc
总结
前言
进程是计算机系统中的一个重要的知识板块,学习进程对我们了解操作系统的工作原理和计算机运行程序的方式是十分必要的。本文将详细介绍进程是什么,进程与操作系统有什么联系。
进程是什么
进程简单的说就是一个正在运行的程序,一个加载到内存中的程序,进程也被称为任务。
进程就是一个正在运行的程序,这理解起来很简单,那么操作系统又是如何对进程进行管理的呢???以下将对管理方式进行详细解释。
操作系统如何对进程进行管理
在前面 【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅-CSDN博客中我们介绍了操作系统管理的方式是:先描述,再管理;对于进程来说也是一样。
任何一个进程在加入到内存中之前都需要先在操作系统中创建一个结构体对象用于描述该进程的各种属性,该结构体被统称为PCB-----process control block进程控制块,在Linux该PCB被具体称为task_struct。可以在Linux内核的源码中找到该结构体的定义,如果你正在使用Linux操作系统也可以在计算机中找一找;这个结构体一般存放在/include/linux目录中的sched.h头文件中。/usr/src/kernels/3.10.0-1160.119.1.el7.x86_64/include/linux这是我在centos中的路径。
task_struct结构体很大,内部包含大量进程的属性:
- 标识符:用于确定进程,最主要的就是PID,相当于学生的学号。
- 状态:当前进程所处的状态,运行,阻塞,挂起.......
- 优先级:决定进程先后执行的顺序;
- 程序计数器:记录程序中即将被执行的下一条指令的位置,防止代码或指令在执行过程中如果发生跳转后仍能够找到原来的位置;
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针;
- 上下文数据:进程执行时处理器的寄存器中的数据;
- I/O状态信息:I/O请求,I/O请求相关的设备;
- 记账信息:记录进行处理的时间,保证每个进程都能公平调度。
- 其他信息。
Linux中对每一个进程都创建一个task_struct结构体对象,再将这些结构体对象通过双链表(或其他结构体)的方式进行组织,这样操作系统就只需要管理双链表就能够拿到各个进程的数据,对各个进程进行管理。
进程的属性
Linux下查看进程属性的方式有很多,此处主要介绍两个指令ps和top指令。
ps查看进程属性
ps:可以查看当前终端下正在运行的进程;
- PID:不同的进程是不一样的,用于区分进程,使用gatpid在程序中可以获取pid值,类型是pid_t就是有符号整形;
- TTY:前面pts表示其是一个终端程序,/0表示是第一个终端程序,如果打开多个终端程序就会出现pts/1,pts/2......如果不是终端程序会显示 ? 问号
- TIME:进程运行时间,上面显示为0因为该进程在极短的时间内被运行了
- CMD:负责进程启动的命令,也可以理解为进程启动的名称。如果该命令不是一个shell命令就会被[]括起来,那就是一个系统进程或者内核进程。
ps -x:显示所有终端下的进程;
ps -a:显示所有用户进程信息;
ps命令中有两种进程属性的输出格式:作业控制格式(-j选项)和用户格式(-u选项);
- ps -axj:以作业控制格式显示各个进程的属性,侧重于进程间的关系;
PPID:当前进程父进程的id,父进程指的是生成该进程的进程;在打开Xshell后会自动加载一个进程---bash命令行解释器到内存中,我们在命令行上输入的所有指令都是bash的子进程,使用getppid在程序中获得ppid。
STAT:当前进程的状态。
- ps -axu: 以用户格式显示各个进程的属性,着重体现进程的资源占用情况和所有者。
USER:运行该进程的用户;
%CPU:CPU占用百分比;
%MEM:内存占用百分比;
top动态显示进程的属性
进程属性是在时刻变化的,使用top命令可以持续对进程属性进行观察。
补充/proc
Linux下有一个特殊的目录,/proc其中存放着各个进程的信息,将不同进程根据进程的PID进行划分。
每一个文件都存储这一个进程的各个信息。
上面我进入了一个目录,该目录下有两个很重要的信息:exe存储这可执行程序的所在目录,cwd存储可执行程序的工作目录。当代码运行的时候如果创建一个文件没有指定路径就会在代码所在路径下进行创建,就是通过cwd找到代码的工作目录的。
总结
直接说进程是正在运行的可执行程序就太片面了,进程可以理解为:描述进程的PCB结构体对象+代码和数据。
关于进程的知识还有很多,在后续文章中还会继续补充。