【进程概念】进程控制块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,一经查实,立即删除!

相关文章

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

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

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

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

Springboot笔记(web开启)-08

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

【记录39】html element-ui 加载

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

Controller中接收数组参数

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

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…

C++临时变量

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

PgSQL根据身份证号查询年龄

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

MySQL高级学习笔记

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

搜索测试题题解(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视觉精品课程:…

雷池 WAF 社区版:下一代 Web 应用防火墙的革新

黑客的挑战 智能语义分析算法: 黑客们常利用复杂技术进行攻击,但雷池社区版的智能语义分析算法能深入解析攻击本质,即使是最复杂的攻击手法也难以逃脱。 0day攻击防御: 传统防火墙难以防御未知攻击,但雷池社区版能有效…

01_Kubernetes基础

Kubernetes为什么叫K8S:因为K和S之间有8个字母 为什么需要K8S 对于云计算来说有自己的交互标准 Paas的下一代标准就是容器化,容器的集群化有没有很好的方案?有需求就会有产品,这个产品就叫做资源管理器。 首先是Apache的MESOS&…

LeetCode每日一题【206. 反转链表】

思路:双指针,一前一后,逐个把指向后面的指针指向前面。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), ne…

刷题训练之滑动窗口

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握滑动窗口算法,并且能把下面的…

又一个城市火了,媒介盒子盘点城市爆火原因

近日,“甘肃天水麻辣烫”在各大平台频频登上热搜榜,甘肃当地也及时接住了这泼天富贵,开通“麻辣烫专线”、机场高铁免费接、免费送门票等。这些措施似曾相识,因为在天水前,已经有淄博和哈尔滨这两个城市的案例可以供天…

【Linux】实现进度条小程序

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 回车和换行3. 缓冲区4. 进度条4.1 倒计时设置4.2 进度条4.2.1 实现简单进度条4.2.2 进度条完善 5. 附进度条代码5.1 Processbar.h5.2 Processbar.c5.3 Main.c5.4 Makefile 1. 前言 在之前已经了解了 【Lin…

中文数字与阿拉伯数字:数字符号的文化交融

title: 中文数字与阿拉伯数字:数字符号的文化交融 date: 2024/3/21 17:46:31 updated: 2024/3/21 17:46:31 tags: 数字起源符号系统差异中文数字特点阿拉伯数字优势转换技术应用文化交流融合数字表达互通 中文数字与阿拉伯数字的关系起源: 中文数字是古…