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

Linux 系统进程理解——标识符,状态

目录

进程描述-pcb

并行与并发


概念:
课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体

这短短的两行就概括了进程,但是进程的内在其实有更过东西,这就像我们说一个人有巨大的成就,但是呢?对于他的经历我们却很少去提及。进程就有点类似的感觉。对于进程我们还要去深入了解他的经历的。
 

进程描述-pcb

对于一个进程,操作系统为了更好的去管理,也是用了先描述再组织的做法,pcb就是他的描述。

task_struct是PCB的一种
在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

task_ struct内容分类
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器 :程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息

标识符:我们再运行的每一个进程都有自己的pid,pid就是相当于他的唯一标识,类似于进了监狱你的名字就被剥夺了,只能有数字编号。而C语言有个函数叫做getpid就可以获得到这个程序标识符。

我们写这样的代码:

运行起来

然后我们要知道根目录下有个proc的目录,这是个内存级的目录当系统运行时才会才会加载信息,里面的内容是实时更新的,记录的是当前内存里存在的进程。我们来查看。

果然是有一个pid为21774的进程

我们可以进入proc里查看更详细的信息。

父进程与子进程

在linux系统当中像什么ls,pwd以及我们自己创建的进程,父进程都是bash(命令解释器),通过bash我们才可以对系统进行系统调用。为什么会有父进程这个东西呢?

其实很好理解,当我们想运行一个进程时当他崩掉之后但是我们并不像让他影响别的进程,所以我们就会去创建子进程,如果子进程崩掉了他也不会影响我们的子进程。
我们用getpid就可以查看父进程编号

运行起来:

我们再查看pid为16408就是bash

当然我们也可以用fork来创建子进程。

并行与并发

首先我们要知道并行和并发,我们一般的电脑只有一个cpu,当然也有很多个cpu的电脑。而我们的cpu执行代码并不是把进程代码执行完再进行下一个,而是给进程分配一个时间片,基于时间片轮流进行调换,而cpu运行速度是非常快的,我们人是感受不到的快。

并发:进程在一个cpu上运行
并行:进程在多个cpu上运行

时间片

所谓时间片呢,其实上面就已经提到了,一般在我们Linux/window系统下调度任务每次的时间。所以这可以解释我们的电脑为什么会卡了,就是进程太多了,cpu每次将所有进程的时间增加了。让你感受到了卡顿。这种呢?一般叫做分时操作系统。
当然也有实时操作系统,当然这种系统就与上面所说的相反了,这种系统一般在车载系统很常见,比如我们要进行自动刹车,就不能说是要分时了对吧,毕竟刹车是一辈子的事。

等待的本质:

所以等待本质就是:进入输入设备
阻塞本质:不同进程进如不同队列

还有一个概念叫做挂起:挂起呢其实是在阻塞时进行的。

当我们的内存空间严重不足时,且我们进程在不同队列,我们的进程就会先进入swap分区,当我们输入之后,当我们空间缓解后再加载到内存当中

进程状态:

R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠
D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。


http://www.kler.cn/news/312921.html

相关文章:

  • uniapp中使用echarts 完整步骤,包括报错以及解决方案
  • 实验一:Windows下的IIS服务器配置和管理
  • 50页PPT麦肯锡精益运营转型五步法
  • 考研报名确认上传身份证户口本学历证明照片如何压缩裁剪
  • 聊聊Thread Local Storage
  • 代码随想录训练营第34天| 62.不同路径 、63. 不同路径 II
  • 【STL】map和set相关知识详细梳理
  • 4、论文阅读:基于深度学习和成像模型的水下图像增强
  • 21、Tomato
  • weblogic CVE-2017-3506 靶场攻略
  • 【随手笔记】使用J-LINK读写芯片内存数据
  • C++——类和对象
  • 鸿蒙HarmonyOS之使用ArkTs语言获取应用版本等信息
  • AI健身体能测试之基于paddlehub实现引体向上计数个数统计
  • 享元模式详解:解锁高效资源管理的终极武器
  • 技术美术百人计划 | 《4.1 Bloom算法》笔记
  • 【图像检索】基于傅里叶描述子的形状特征图像检索,matlab实现
  • 新品亮相|美格智能SLM530/SLM530P智能模组,助力金融新零售智慧升级
  • 线性规划中可行域为什么一定是凸的--证明
  • Vue2中路由的使用
  • 软件设计画图,流程图、甘特图、时间轴图、系统架构图、网络拓扑图、E-R图、思维导图
  • 高速CT滑环的特点分析
  • 在Python中优雅地打开和操作RDS
  • macOS平台(intel)编译MAVSDK安卓平台SO库
  • 《Discriminative Class Tokens for Text-to-Image Diffusion Models》ICCV2023
  • 【GitHub】如何将本地项目推送到GitHub 终端 or IDEA
  • 使用 Docker 容器化 .NET 应用:从进阶到高深
  • 【高分系列卫星简介——高分一号(GF-1)】
  • Spring MVC 启动与请求处理流程解析
  • STM32G431RBT6(蓝桥杯)串口(发送)