当前位置: 首页 > web >正文

【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选项);

  1. ps -axj:以作业控制格式显示各个进程的属性,侧重于进程间的关系;

     

    PPID:当前进程父进程的id,父进程指的是生成该进程的进程;在打开Xshell后会自动加载一个进程---bash命令行解释器到内存中,我们在命令行上输入的所有指令都是bash的子进程,使用getppid在程序中获得ppid。

    STAT:当前进程的状态。

  2. ps -axu: 以用户格式显示各个进程的属性,着重体现进程的资源占用情况和所有者。

     

    USER:运行该进程的用户;

    %CPU:CPU占用百分比;

    %MEM:内存占用百分比;

top动态显示进程的属性 

进程属性是在时刻变化的,使用top命令可以持续对进程属性进行观察。

补充/proc

Linux下有一个特殊的目录,/proc其中存放着各个进程的信息,将不同进程根据进程的PID进行划分。

每一个文件都存储这一个进程的各个信息。

 上面我进入了一个目录,该目录下有两个很重要的信息:exe存储这可执行程序的所在目录,cwd存储可执行程序的工作目录。当代码运行的时候如果创建一个文件没有指定路径就会在代码所在路径下进行创建,就是通过cwd找到代码的工作目录的。

总结

直接说进程是正在运行的可执行程序就太片面了,进程可以理解为:描述进程的PCB结构体对象+代码和数据。

关于进程的知识还有很多,在后续文章中还会继续补充。 

http://www.xdnf.cn/news/13746.html

相关文章:

  • 智慧养老与数字健康:科技赋能老年生活,构建全方位养老体系
  • Redis核心数据结构详解与应用
  • arduino通过控制器,精准控制24V电动轮毂转动
  • 解锁Scrapy爬虫:从入门到实战的Python秘籍
  • 图像分割技术:像素级的精准识别(superior哥深度学习系列第12期)
  • 关于MySql深分页的问题及优化方案
  • 软件测试的艺术与科学:构建商业级产品的优雅草卓伊凡
  • 微信小程序渗透测试指北(附案例)
  • ATM 模拟器 Golang 程序--示例
  • 【二分答案1-----切木棒】
  • 基于YOLOv11与单目测距的实战教程:从目标检测到距离估算
  • 嵌入式通信模块实战新范式:基于虚拟仿真平台的NB-IoT核心技能训练——零硬件损耗的全栈式实验方案,重构物联网通信教学逻辑
  • 基于多面体模型的编译优化技术
  • Ubuntu 绑定Conda
  • 在 Vue 3 中修改 el-select 组件接收的 prop 值
  • Parasoft C++Test软件集成测试(部件测试)_操作指南
  • 【3D插件推荐】PolyCloth v2.07 超强布料模拟工具(附图文安装教程与下载)
  • 力扣面试150题--单词接龙
  • stm32cubeide中编译非flash起始地址开始的程序
  • 解决vscode中使用debuger运行app.py但是报错No module named app的方法
  • kali2024 由于没有公钥,无法验证下列签名---解决方案
  • docker compose搭建elk 8.6.2
  • AS610x奇力科技电池管理系统(BMS)模拟前端(AFE)
  • Linux 与 Windows 系统挖矿程序清理
  • nt!CcGetDirtyPages函数分析
  • 如何将 iPhone 中的短信导出为 PDF
  • [vela os_5] 中断系统 | 任务调度 | 日志系统
  • C++代码随想录刷题知识分享-----替换数字字符 —— 字符串空间扩展与逆向填充技巧
  • AI大模型从0到1记录学习 大模型技术之机器学习 day27-day60
  • 大数据学习(137)-大数据组件运行时角色