【进程概念】进程控制块task_struct-PCB

文章目录

  • 进程的概念
  • 如何描述进程?
    • **为什么要描述一个进程**?
    • 进程描述--PCB
    • task_struct
  • 组织进程
  • 查看进程
  • 通过系统调用获取进程标示符
    • getpid()以及getppid()

进程的概念

在【百度百科】中,关于进程----
狭义定义:进程是 正在运行 的程序的实例
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元
根据以上定义我们可以得到关于经程的两个基本概念:
1.进程是一个实体
实体,也就是意味着具有自己的地址空间,包括常量区、静态区、堆栈。
2.进程是动态执行的程序。
单单一个程序是没有生命的实体,如果被操作系统赋予了生命,那么就成为了一个进程。
总结:进程=PCB+程序(代码段、数据段)

如何描述进程?

为什么要描述一个进程

何谓描述?描述就是把某个抽象的概念用一种形式表示出来,让我们能知道被描述对象到底是什么。

对于一个学校的管理层来说,要想更好的管理我们所有的学生,就需要了解我们学生的基本信息,并将其信息登记在学生表里面。学号、年级、姓名以及考试成绩等就是对我们学生的描述。

情景假设1现在假设某个领导想去1班成绩最好的同学家访。

那么就只需要找到1班的学生表,再去找表里面的关键信息–成绩,比对一下就很容易找到目标学生了。
如果没有这张1班的学生表,排除其他因素干扰下,想找到成绩最好的学生就只能一个一个问了。这样显然不利于管理。
在这里插入图片描述

而对于操作系统来说,身为进程的管理员,操作系统同样也需要用统一的方式去描述一个进程。将某一个进程的基本信息提取出来并打包,存放在某个“表”(队列)的某一行里:PID、PPID、页表地址、进程状态等关键字就是对某个进程的描述。这样一来操作系统就能快速的知道目标进程的信息,也就能很好的管理进程了

情景假设2假如现在操作系统需要找到将键盘资源分配给某个进程

那么我们就需要知道有哪些进程在等待键盘资源。于是,操作系统就拿到了类似成绩表的一个东西(等待队列),在这个“表”里面找到最前面的进程,根据描述信息“PID”快速找到进程A,再给进程A键盘资源。这就是操作系统为什么要描述进程的原因----方便管理

以上例子可能跟实际情况有差别,但是想表达的意思是很清晰的,那就是:为了便于管理进程,在生成一个进程的时候操作系统就需要描述这个进程

回归正题:操作系统是如何描述一个进程的?

进程描述–PCB

为了描述控制进程的运行,系统中存放进程的管理控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消

本质上PCB就是一个结构体,只不过在不同的操作系统中,其结构体的名称有所区别,比如windows下就叫做PCB,但是在Linux中的叫做==task_struct==。
在这里插入图片描述

task_struct

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

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

组织进程

我们知道了进程是如何被描述的,那么对于这么多进程操作系统又是如何将这些进程组织起来的呢?这里的组织,其实就是某种数据结构。就像每一个学生被描述成了一个包含“年级、姓名、成绩”的“元素”,将这些元素都组织在一个表里面。这里的组织方式就是一个类似线性表的“表格”。

在这里插入图片描述

查看进程

linux下进程的信息可以通过 /proc 系统文件夹查看,该文件夹存放了所有进程的信息,每一个进程的信息都是一个文件夹
在这里插入图片描述
在这里插入图片描述
大多数的进程我们同样可以使用top和ps这些用户级工具来获取

1.创建一个进程,运行以下代码
在这里插入图片描述
2.使用ps ajx|grep test|grep -v grep指令查看test进程
在这里插入图片描述

通过系统调用获取进程标示符

进程id–PID (进程的身份证号,唯一标识一个进程)
父进程id–PPID

getpid()以及getppid()

观察以下代码:
在这里插入图片描述
哪个进程调用getpid(),就会得到哪个进程的PID.

当我们运行以上代码,就会建立相应的进程,通过getpid()获取到当前进程的PID,getppid()获得当前进程的父进程的PID.
在这里插入图片描述
test程序的父进程是谁呢?
bash,也是基本上所有指令进程的父进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475551.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue中的状态管理Vuex,基本使用

1.什么是Vuex? Vuex是专门为Vue.js设计的状态管理模式;特点:集中式存储和管理应用程序中所有组件状态,保证状态以一种可预测的方式发生变化。 1.1.什么是状态管理模式? 先看一个单向数据流的简单示意图 state:驱动应用的数据源 view:以声明方式将state映射到视图 actions:…

JetPack之LiveData粘性原因分析及hook解决

目录 前言一、LiveData粘性原因分析1.1 发送消息流程1.2 监听消息流程1.3 根因分析 二、hook解决 前言 在 Android 中,LiveData 的默认行为是粘性的,即 LiveData 在设置数据后,即使观察者订阅时已经有数据存在,观察者仍会立即收到…

通过人工智能驱动的交互提升客户体验

用AI创造无限可能:打造极致客户体验的秘诀 在当今竞争激烈的市场中,客户体验至关重要。 企业正在迅速采用人工智能驱动的交互来彻底改变与客户的互动。 人工智能技术不仅简化了运营,还带来了以前无法达到的个性化和效率水平。 对于寻求满足客…

权限管理系统-0.5.0

六、审批管理模块 审批管理模块包括审批类型和审批模板&#xff0c;审批类型如&#xff1a;出勤、人事、财务等&#xff0c;审批模板如&#xff1a;加班、请假等具体业务。 6.1 引入依赖 在项目中引入activiti7的相关依赖&#xff1a; <!--引入activiti的springboot启动器…

【Java Web基础】一些网页设计基础(二)

文章目录 1. Bootstrap导航栏设计1.1 代码copy与删减效果1.2 居中属性与底色设置1.3 占不满问题分析1.4 字体颜色、字体大小、字体间距设置1.5 修改超链接hover颜色&#xff0c;网站首页字体颜色 1. Bootstrap导航栏设计 1.1 代码copy与删减效果 今天设计导航栏&#xff0c;直…

round函数使用后,小数点前的0不见了

ROUND函数用于将数字四舍五入到指定的小数位数。 其基本语法为ROUND(number, num_digits)&#xff0c;其中number是要进行四舍五入的数字&#xff0c;num_digits是保留的小数位数。如果num_digits大于0&#xff0c;则四舍五入到指定的小数位&#xff1b;如果num_digits等于0&a…

【算法】 LRU Cache

目录 一、什么是LRU Cache 二、LRU Cache的实现 三、 LRU算法的运用场景 一、什么是LRU Cache LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法。 什么是 Cache&#xff1f;狭义的Cache指的是位于CPU和主存间的快速RAM&am…

vue2源码学习01配置rollup打包环境

1.下载rollup相关依赖 npm i rollup rollup-plugin-babel babel/core babel/preset-env --save-dev 2.新建rollup.config.js配置打包选项 //rollup可以导出一个对象&#xff0c;作为打包的配置文件 import babel from rollup-plugin-babel export default {input: ./src/ind…

CI/CD脚本简介,YAML介绍,Editor解析

说明&#xff1a; 此篇文章纯概念&#xff0c;没有实际操作&#xff0c;实际操作请蹲下一篇&#xff01; CI/CD理解 这段代码是用于配置GitLab CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;的YAML语法。GitLab CI/CD是一种自动化软件&#xff0…

【MySQL】对数据库的操作以及数据库备份相关操作

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习计网、mysql和算法 ✈️专栏&#xff1a;MySQL学习 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

上榜|美创入选《2024年网络与信息安全行业全景图》32个细分领域

近日&#xff0c;深圳市网络与信息安全行业协会正式发布《2024年网络与信息安全行业全景图》&#xff08;以下简称“全景图”&#xff09;&#xff0c;定位展现我国网络与信息安全行业整体生态及细分领域代表性厂商。 美创科技凭借硬核实力&#xff0c;成功入选数据安全、安全服…

外卖项目:使用AOP切面,完成公共字段自动填充(断点调试详细讲解)

文章目录 一、问题描述二、实现思路三、实现步骤四、断点实操五、代码演示 一、问题描述 我们已经完成了后台系统的员工管理功能和菜品分类功能的开发&#xff0c;在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间、修改人等字段&#xff0c;在编辑员工或者编…

西井科技与安通控股签署战略合作协议 共创大物流全新生态

2024年3月21日&#xff0c;西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势&#xff0c;积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用&#xff0c;以及绿色物流链等领域的深度探索、强强联…

Pudgy Penguins交易量一路攀升 多次创下历史新高

日前&#xff0c;一个名为胖企鹅&#xff08;Pudgy Penguins&#xff09; NFT 项目交易量持续攀升&#xff0c;一度在3月9日成为NFT市场的“销冠”。事实上&#xff0c;从2023年下半年开始&#xff0c;Pudgy Penguins的地板价就在不断上升&#xff0c;进入2024年更是多次创下历…

练习题+题解:链表+dp

目录 1.链表指定区间反转题目描述输入格式:输出格式:输入样例:输出样例:题目分析代码实现 2.hxj和他的甜品盲盒I输入格式:输入样例:输出样例:样例解释 输入样例:输出样例:样例解释 题目分析Java代码实现 3.First 50 Prime Numbers输入格式输出格式输入样例输出样例题目解析代码…

MySQL之索引与事务

一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址无须对整个表进行扫描&#xff0c;通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…

【干货】Java开发者快速上手.NET指南

前言 前几天有小伙伴在技术群里发了一个微软官方出的&#xff1a;适用于Java开发人员的.NET快速入门免费电子书&#xff0c;今天大姚来分享一下Java开发者想要快速上手.NET有哪些教程和优质资料。 微软适用于Java开发人员的.NET快速入门指南 下载阅读地址&#xff1a;适用于 …

惟客数据CTO 钱勇:数据资产运营创新和实践

​企业如何做好数据资产运营&#xff0c;有效挖掘和利用数据资产&#xff1f; 近日&#xff0c;在由华东江苏大数据交易中心主办的“第四届数字经济科技大会”上&#xff0c;WakeData惟客数据CTO、星光数智CEO 钱勇 给出了自己的观点。 在演讲环节&#xff0c;钱勇以《数据资…

用tp6写的简单的eml的登录和curd

项目地址&#xff1a; 企业管理eml: 这是一个简单的eml (gitee.com) 1.登录和主页显示 1.1 登录功能逻辑图 1.2 控制器 app/controller/index.php php think make:validate LoginValidate <?php namespace app\controller;use app\BaseController; use app\model\User; …