【进程概念】进程控制块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,也是基本上所有指令进程的父进程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地有一个face.txt文档,里面是50条url图片链接。python做一下数据增强,额外再生成200张。

数据增强在图像处理领域通常指的是通过对原始图像进行一系列变换(如旋转、缩放、裁剪、添加噪声等)来生成新的图像样本,以增加模型的泛化能力。然而,对于URL链接来说,我们无法进行这种直接的图像变换。不过&#xff0c…

若依ruoyi-vue中的文件上传和下载

文章目录 文件上传后端实现前端实现 文件下载后端实现前端实现 在若依(Ruoyi)框架中,结合 Vue 前端框架,文件的上传和下载通常使用以下方法实现: 文件上传 若依现成的功能里面没有文件上传,但是集成了文件…

基于php健身房管理系统flask-django-python

根据现实需要,此系统我们设计出一下功能,主要有以下功能模板。 (1)前台功能:首页、运动器材、教练信息、营业信息、公告栏、在线留言、后台管理、个人中心。 (2)会员功能:首页、个人…

Lambda 表达式及线程安全最佳实践

Java Lambda表达式 Lambda表达式简介 Lambda表达式是在Java 8中引入的。Lambda表达式是一小段代码块,它接受参数并返回一个值。Lambda表达式类似于方法,但它们不需要名称,并且可以直接在方法体中实现。 Lambda表达式的语法 最简单的Lambd…

Springboot笔记(web开启)-08

有一些日志什么的后续我会补充 1.使用springboot: 创建SpringBoot应用,选中我们需要的模块;SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来自己编写业务代码; 2.SpringBoot对静态资源的映…

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一: 方法二(推荐) 将相关资源下载下来,在对应的html文件中相对路径引入。注意:css加载放在js之前

每日一练 | 华为认证真题练习Day202

1、在组播网络环境中,如果IGMPv2主机和IGMP V1路由器(以下简称版本2主机和版本1路由器)共同处于同一局域网当中,那他们是如何协同工作的?(多选) A. 版本1路由器把IGMPv2报告看作无效的IGMP信息…

Controller中接收数组参数

1、场景 需要根据用户id集合批量删除用户数据,前端使用post请求,controller中参数接收数组参数并根据用户id删除用户基本信息 2、分析处理: 2.1、前端请求类型contentType:application/json 请求体中为json字符串,后端新建一个U…

java多线程(超详细讲解)下篇

本章继续讲多线程 目录 一、线程同步1、为什么需要线程同步 二、如何实现线程同步1、同步代码块2、同步方法3、线程同步特征 三、线程安全的类型1、ArrayList是常用的集合类型,它是否线程安全的呢?2、对比 Hashtable和HashMap1、是否线程安全2、效率比较…

javaSwing愤怒的小鸟

一、简介 游戏名称是“愤怒的小鸟”,英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏,从2009年12月上市到iOS。,讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…

怎么在Linux系统下Docker部署Excalidraw白板工具并实现无公网IP远程访问?

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…

java算法题每日多道四

1. 两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你…

C++临时变量

本博客将讲述我学习过程中对临时变量的疑惑与理解 为什么写这篇文章? 我在学习C过程中,发现C在发生隐式转换时或者出现未命名的变量如字符串再或者在求值的时候,会出现C临时变量(系统自动生成),而这个临时…

PgSQL根据身份证号查询年龄

1、需求:数据库中有身份证号码,也有年龄字段,但是年龄字段不会自动更新,现在需要返回最新的年龄数据。 2、思路:获取当前年份,截取省份证中的年龄部分数据,再进行相减即可; 3、具体…

MySQL高级学习笔记

1、MySQL架构组成 1.1 高级MySQL介绍 什么是DBA? 数据库管理员,英文是Database Administrator,简称DBA; 百度百科介绍 数据库管理员(简称DBA),是从事管理和维护数据库管理系统(D…

记录新人的web3之旅

简单记录一下自己奇妙又充满热情的web3之旅,希望能勉励未来的自己 2023.10.25—— 第一次觉得对web3,币圈感到好奇是我在油管看了《隐藏的币圈亿万富翁》。这个简短的纪录片讲了郑皓升的传奇A9人生,从币圈中致富,再到被制裁,被软…

web渗透测试漏洞复现:Kibana 未授权访问

web渗透测试漏洞复现 Kibana 未授权访问漏洞复现Kibana系统概述Kibana漏洞概述Kibana漏洞复现Kibana漏洞修复Kibana 未授权访问漏洞复现 Kibana系统概述 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elastics…

搜索测试题题解(3月21号总结)

目录 1.Shufflem Up 2.Pots 3.Open the Lock 1.Shufflem Up 样例 InputcopyOutputcopy 2 4 AHAH HAHA HHAAAAHH 3 CDE CDE EEDDCC 1 2 2 -1 题意:本题要求将s1和s2合并,再将合并的s分为s1和s2,知道s为我们需要得到的期望s,输…

巨细!Python爬虫详解

爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者);它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网,那…

北航最新!基于条纹投影的半透明物体3D重建方法

作者:小柠檬 | 来源:3DCV 在公众号「3DCV」后台,回复「原论文」可获取论文pdf 添加微信:dddvision,备注:3D高斯,拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程:…