操作系统进程定义和PCB详解

news2024/11/15 22:54:08

   进程的定义和PCB

      什么是进程?进程就是一个运行起来(也就是说加载到内存)的一个程序。而程序的本质就是文件,当我们写完代码保存,它便形成了一个保存在磁盘上的二进制代码文件。由于冯诺伊曼体系,cpu只和存储进行数据交流,因此要想cpu执行,必须先将外存上的文件载入内存中,而磁盘上文件加载到了内存时也就变成了进程。

    PCB:事实上由于在内存中同时运行的进程很多,操作系统需要对所有的进程进行一个统一的管理调度,就例如大学校园里学校将每个学生的学号,姓名,年龄通过excel管理在一张表上,操作系统在内部定义了一个PCB(Process Control Block)进程控制块。  PCB本质上就是一个内核用c语言定义的结构体。 当一个进程进入到内存时,操作系统就对应的创建一个进程控制块PCB对该进程进行管理,每个PCB都有一个唯一的PID。所谓创建进程,其实就是创建PCB。

    类似的,PCB将进程的各种特征通过一个struck结构体保存,操作系统通过结构体指针对进程进行操作。类似于:

struct task_struct {
          //进程所有属性
          //进程所对应的代码和地址
          struct tast_struct *next;//指向下一个进程的指针
                  }
            struct tast_struct *p1 = malloc(struct task_struct);
                  p1->进程属性;
            

而同时内存为了管理不同的PCB,操作系统创建了一个数据结构对PCB进行管理。将PCB依次首尾相连构建成一个链表。

其好处是,对进程管理就简化成对进程的PCB整个链表进行管理。进程控制就变为了对PCB链表这个内核数据结构的增删查改。

(有的内核版本管理PCB的数据结构可能不是链表,还可以是数组,索引表等数据结构)

如图所示,可以更好的理解PCB,进程,文件之间的关系。进程 = 该进程的代码 + 指向该进程的进程控制块(PCB)。

windows任务管理器就是一个直观的例子。

通过一个例子具体观察一下linux操作系统中的进程,我们可以编写一个可执行程序myproc,让它显示自己的pid:

此时我将它保存,它成为一个保存在磁盘上的一个文件而已,并没有进入内存,因此并不是进程:

通过make编译形成可执行文件,再运行该可执行文件,它就形成了一个内存上的进程:

关闭进程再开启时,进程pid会改变。

此时,在操作系统下有一个/proc目录,目录下所有子目录名均为数字,每个数字都代表一个进程的PID。很显然,进程在操作系统内核中是以文件显示出来的。

每当新进程加载进入内存时,操作系统都会在/proc目录下创建一个目录名为进程PID的文件夹,同理,退出进程会将其对应的目录删除。我们找到目录名为3271的目录,也就是我上面所执行的进程的PID:

其指向的路径是磁盘上我刚创建的可执行程序。

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

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

相关文章

RK3568笔记九: DRM显示摄像头

若该文为原创文章,转载请注明原文出处。 一、介绍 学习DRM的目的是想做类似NVR显示多路实时流,通过勇哥(Marc)的指导,大概流程是通过Zlmedia拉流,RK3568的MPP解码,DRM显示,可以使用HDMI或DIS屏幕&#xf…

数据结构学习 jz59 滑动窗口的最大值

关键词:排序 大顶堆 双端队列 题目: 望远镜中最高的海拔 方法一:维护一个辅助队列。 方法二:大顶堆。 我还在主站 239 写了找最小值的方法。 方法一:最优解 这个方法和jz30维护一个非严格递减的辅助栈是基本一样的…

15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条

15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条 progressBar2.setIndeterminate(true);//设置无限模式,运行查看动态效果 //创建并设置无限模式元素 ShapeElement element new ShapeElement(); element.setBounds(0,0,50,50); element.setRgbColor(new RgbColor(255,0,0)); …

jetson nano VNC远程桌面配置及使用(nomachine)

文章目录 jetson nano VNC远程桌面配置及使用1.Nomachine介绍2.在电脑端安装Nomachine3.在Jetson Nano端安装Nomachine4.电脑端连接及使用步骤5.修改分辨率6.NoMachine常见问题6.1 黑屏6.2 白屏 jetson nano VNC远程桌面配置及使用 本节适用于Jetson Nano没有单独显示器可以给…

数据库结构文档生成方法二(EZDML)

EZDML 下载链接:EZDML - 下载 我们常用的是数据建模有PowerDesigner,EZDML也是一款数据建模工具,而且功能很多,除了生成sql,还可以生成前端后端代码等等。 我们直接下载最新版后点击安装,打开后会默认打开示例&#…

活动 | Mint Blockchain 将于 2024 年 1 月 17 号启动 MintID 限量发行活动

MintID 是 Mint Blockchain 生态的超级权益卡,用于探索 NFT PASS 在未来各种应用场景下的可能性。MintID 将通过限时限量有价发售的方式对外释放,持有人将成为 Mint Blockchain 的核心权益用户。 MintID 总量:10,000 枚 铸造价格&#xff1a…

linux docker安装 rustdesk

这里写自定义目录标题 1:软件介绍:2:安装1. 服务器端2. 客户端 3:配置5:其他1:rustdesk 官方Docker Compose 1:软件介绍: 名称作用官网项目地址rustdesk实现多端互控https://rustdesk.com/inde…

【闯关练习】—— 1400分(构造)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:cf闯关练习 💌其他专栏: 🔴每日一题 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓…

谁知道try里面放return,finally还会执行吗?

在前面几篇文章中,我们已经了解了关于执行上下文、作用域、闭包之间的关系。 今天,我们则要说一说更为细节的部分:语句。 语句是任何编程语言的基础结构,与 JavaScript 对象一样,JavaScript 语句同样具有“看起来很像…

孤儿进程与僵尸进程以及僵尸进程的解决

孤儿进程: 定义: 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程( Orphan Process )。 过程: 每当出现一个孤儿进程的时候,内核就…

放空一下自我 free

文章目录 放空一下自我 free默认的效果使用易读的参数间隔显示内存状态查看meminfo文件更多信息 放空一下自我 free **free**这个命令在Linux系统监控的工具里面,算是使用的比较多的一个。 使用_man_查看可知,官方含义为: Display amount o…

Dockerfile: CMD与ENTRYPOINT区别

CMD和ENTRYPOINT的作用 CMD和ENTRYPOINT这两个命令,我接触到的是用在了Dockerfile中用于构建容器。 CMD:The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是为正在执行的容器提供默认值。也就是指定这个容…

D课堂 | 为什么网站搭建好了却无法访问?(上)

在上一期D课堂中,D妹教大家如何用最简单的方法快速搭建一个网站,相信很多小伙伴已经跃跃欲试,尝试去搭建自己的网站。(点击这里可以快速复习) 然而,有不少人明明每个步骤都跟着做了,但最后在浏览…

企业销售获客难?分享一个精准筛查企业客户的技巧

作为企业销售经理,曾经一直让我们很头疼的问题之一就是获客困难。回想起以往,我们需要通过各种手段,手动查找电话名单、网络搜索到各种渠道,费尽心思的去筛查才能找到潜在客户。获客流程长还耗费很多的精力,拿到手的客…

【test】wsl2和win互ping

参考: https://zhuanlan.zhihu.com/p/365058237 https://blog.csdn.net/Cypher_X/article/details/123011200

RTKlib操作手册--使用样例数据演示

简介 RTKLIB(Real-Time Kinematic Library)是一款开源的实时差分全球导航卫星系统(GNSS)软件库。它旨在提供高精度的位置解算,特别是在实时应用中,如精密农业、测绘、无人机导航等领域。 RTKLIB支持多种G…

复杂经济时期下的企业财务规划战略

多重危机、通货膨胀、外汇波动和市场变化的交汇给经济世界带来了前所未有的挑战,这使得企业对预测精准度和及时性的需求大大增加。平衡营收增长与成本输出的稳定性、在不断变化的市场行为中抓住商机提高盈利能力是现阶段财务专业人士必须掌握的技能。情景规划与财务…

Ubuntu下,Flutter安装及在VScode中的配置

1、安装flutter 在自己指定的目录下,新建文件夹,并将源码git clone到本地 $ mkdir flutter $ cd flutter$ git clone -b master https://github.com/flutter/flutter.git2、给flutter添加环境变量 #编辑配置文件 $ vi ~/.bashrc #在末尾加入以下内容&…

分布式系统中的CAP原理

分布式系统中的CAP原理 本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 简介 在分布式系统中&…

rtklib读取原始数据是一次读取了一个文件的全部数据

一般来说,rtklib读取观测值文件(o文件)和导航文件(n文件)进行解算。 读取文件的时候,并非一次读取一个历元,而是将一个文件所有历元的数据都读取完毕以后,再进行解算。 这看起来是…