【进程管理】初识进程

news2024/11/19 22:33:15

一.何为进程

教材一般会给出这样的答案:

运行起来的程序 或者 内存中的程序

这样说太抽象了,那我问程序和进程有什么区别呢?诶?这我知道,书上说,动态的叫进程,静态的叫程序。那么静态和动态又是什么意思呢?且听我慢慢道来。

二.先描述,再组织

我们编译完成,运行之前的程序是放在哪的呢?不用说,肯定在磁盘上。我们常常听说,要想运行一个程序,首先要将它加载到内存,这是由冯诺依曼体系结构决定的,因为CPU读取数据肯定要和内存交换,如果和外设打交道速度就太慢了。

程序本质上也就是各种各样的数据,所谓的加载就是把磁盘上的程序拷贝到内存中。所以这就变成进程了?这就有动态属性了?凭什么呢?

我们知道,当电脑开机了,肯定有一个软件肯定已经加载到内存了,那就是操作系统。那么当我们在Windows上双击一个程序或者在LInux上点斜杠启动一个程序时,操作系统就会帮我们把数据从磁盘搬到内存,这样内存中的程序就变成“进程”了。

我们还可以同时启动多个程序,所以操作系统内可能同时存在多个“进程”

当进程变得越来越多的时候,操作系统必须要将这些进程有条不紊地管理起来。怎么管理?还是上篇文章的六字箴言,“先描述,再组织”。

描述是在干什么?就是把要管理的对象的属性信息罗列出来,而操作系统是C语言写的,所以描述就是创建struct结构体,里面包含进程的各种属性,一个进程对应一个结构体。组织又是在干什么?就是将描述出来的信息以某种数据结构来组织以方便管理,所以组织就是将struct结构体以链表的方式链接起来。

所以说,操作系统对进程的管理,就变成对链表的管理,其中链表的一个个结点就对应着一个个进程。接下来,我们重点来关注这个结构体。

三.进程的PCB

这个描述进程的结构体,在大多数操作系统的教材里都把它叫做进程的PCB(process control block)。书上说一个进程被创建时,该进程必须要有对应得到PCB,但是却没有告诉我们为什么要有PCB。到这里就可以得出结论了,因为操作系统要对进程进行管理,要想管理,就得先描述再组织,而PCB就是用来描述进程的。

那么PCB结构体里有哪些信息呢?里面的信息很多,这里先简单列举几个(后续的学习都会围绕里面的信息来展开)

首先一个进程有一个id编号,这个用来标识一个进程,就像你在大学有一个自己的学号。

其次还有代码地址,通过这个地址可以找到进程对应的代码,也就是从磁盘拷贝进入内存的程序,程序在执行时会在内存中产生数据(例如创建一个个变量),因此还有数据地址。

进程未来肯定是会被CPU调度的,因此会存在状态和优先级这样的概念。比如你作为一个大学生,在学校里会有学习状态和休闲状态,什么样的状态决定你做什么样的事。你会有很多的任务,这些任务会有优先级,什么先做,什么后做。

链接字段就像我们学习链表时的prev,next指针,通过这些链接字段操作系统可以找到上一个或下一个PCB。

四.再谈进程

我们来梳理一下前面的内容,再来谈一谈什么是进程。

一个程序最开始是在磁盘上,当我们双击它时,操作系统会将代码拷贝到内存中,但操作系统还要能管理进程,所以程序加载进来之后还要为其创建PCB,其中包含能够找到代码和数据的指针字段,所以PCB指向对应的代码和数据。同时PCB里还有链接字段,所以一个个分散的PCB就被以链表的形式组织起来,这样一来操作系统对进程的管理工作就变成了对链表的增删查改。

所以未来CPU想要调度一个进程,它回去直接找拷贝到内存的程序吗?不会的,有什么可找的?一个个长的都差不多!CPU会去找PCB,然后通过PCB找到对应的代码和数据,这样就能愉快地执行了。

当有一天我想要关闭一个进程时,操作系统会把内存中的代码和数据释放,然后把这个进程的PCB从链表中移除出去,这样操作系统就不再对它进行管理了。

回到最初的问题,什么是进程?

进程 = 可执行程序 + 内核数据结构(PCB)

这里的内核数据结构不止一种,我们暂且将它就当做PCB,今后还会学习到更多

内核数据结构存在的意义就是方便操作系统对进程进行管理,今后我们一谈到进程,首先要要想到的是PCB,而不是那堆拷贝进来的代码。

五.进程和程序的区别

第一,进程在内存中,而程序在磁盘上,当然这是最浅显的

第二,进程比程序多了对应的内核数据结构(PCB)

第三,程序是静态的,进程是动态的。怎么理解这里的“动态“?

首先我想问问,大家都会有写过死循环代码的经历吧。当大家把这个死循环程序运行起来时,进程是不是就一直占着CPU不下去了呢?

但我们发现其它程序也还能运行,只不过稍稍卡了一点。所以一个进程有时候是运行的,有时候是处于等待状态的。所以PCB里才会有状态和优先级这样的概念。假设一个进程是一次性放在CPU上全部跑完,那根本就不需要状态这样的概念。

所以进程是受操作系统和CPU的调度运行的,当调度到你的时候你的代码就跑一跑,没有叫你的时候就等一等,等所有代码跑完后进程就结束了。所以以PCB为代表的进程就好像有了生命一般,具有动态运行的属性。

结语

本期分享到此结束,关注我,分享更多干货内容。

下节预告:查看进程与利用fork创建进程

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

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

相关文章

JAVA面经整理(8)

一)为什么要有区,段,页? 1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式,不过索引信息以及数据记录都是记录在文件上面的,确切来说是…

buuctf-[GXYCTF2019]禁止套娃 git泄露,无参数rce

用dirsearch扫一下&#xff0c;看到flag.php 访问一下没啥东西&#xff0c;使用githack python2 GitHack.py http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn/.git/查看index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;…

【Jmeter】性能测试脚本开发——性能测试环境准备、Jmeter脚本编写和执行

文章目录 一、常用的Jmeter元件二、性能测试环境准备三、编写Jmeter脚本四、执行测试脚本 一、常用的Jmeter元件 取样器-HTTP请求 作用&#xff1a;发送HTTP请求配置原件-HTTP请求默认值 作用&#xff1a;设置HTTP请求的默认参数配置原件-用户定义的变量 作用&#xff1a;定义…

在win10里顺利安装了apache2.4.41和php7.4.29

最近在学习网站搭建。其中有一项内容是在windows操作系统里搭建apachephp环境。几天前根据一本书的上的说明尝试了一下&#xff0c;在win10操作系统里安装这两个软件&#xff1a;apache2.4.41和php7.4.29&#xff0c;安装以后apche能正常启动&#xff0c;但是php没有正常工作。…

深入探讨前后端之争:揭秘Go语言在未来全栈Web开发中的关键角色与价值

&#x1f337;&#x1f341; 博主猫头虎&#x1f405;&#x1f43e; 带您进入 Golang 语言的新世界✨✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f…

【计算机组成原理】考研真题攻克与重点知识点剖析 - 第 2 篇:数据的表示和运算

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

Nginx搭建Rtmp流媒体服务,并使用Ffmpeg推流

文章目录 1.rtmp流媒体服务框架图2.nginx配置3.配置nginx4.使用ffmpeg推流5.实时推摄像头流 本项目在开发板上使用nginx搭建流媒体服务&#xff0c;利用ffmpeg进行推流&#xff0c;在pc上使用vlc media进行拉流播放。 1.rtmp流媒体服务框架图 2.nginx配置 下载&#xff1a;wge…

C++(STL容器适配器)

前言&#xff1a; 适配器也称配接器&#xff08;adapters&#xff09;在STL组件的灵活组合运用功能上&#xff0c;扮演着轴承、转换器的角色。 《Design Patterns》对adapter的定义如下&#xff1a;将一个class的接口转换为另一个class的接口&#xff0c;使原本因接口不兼容而…

2023年R1快开门式压力容器操作证模拟考试题库及R1快开门式压力容器操作理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年R1快开门式压力容器操作证模拟考试题库及R1快开门式压力容器操作理论考试试题是由安全生产模拟考试一点通提供&#xff0c;R1快开门式压力容器操作证模拟考试题库是根据R1快开门式压力容器操作最新版教材&#…

6.Tensors For Beginners-What are Convector

Covectors &#xff08;协向量&#xff09; What‘s a covector Covectors are “basically” Row Vectors 在一定程度上&#xff0c;可认为 协向量 基本上就像 行向量。 但不能简单地认为 这就是列向量进行转置&#xff01; 行向量 和 列向量 是根本不同类型的对象。 …

026 - STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线

026- STM32学习笔记 - 液晶屏控制&#xff08;三&#xff09; - DMA2D快速绘制矩形、直线等 上节直接操作LTDC在先视频上直接显示&#xff0c;我们直接操作显存地址空间中的内容&#xff0c;用来显示图形&#xff0c;但是相对来说&#xff0c;这种方法费时费力&#xff0c;这节…

矩阵的c++实现(2)

上一次我们了解了矩阵的运算和如何使用矩阵解决斐波那契数列&#xff0c;这一次我们多看看例题&#xff0c;了解什么情况下用矩阵比较合适。 先看例题 1.洛谷P1939 【模板】矩阵加速&#xff08;数列&#xff09; 模板题应该很简单。 补&#xff1a;1<n<10^9 10^9肯定…

进程调度算法之时间片轮转调度(RR),优先级调度以及多级反馈队列调度

1.时间片轮转调度算法(RR) round Robin 1.算法思想 公平地、轮流地为各个进程服务&#xff0c;让每个进程在一定时间间隔内都可以得到响应。 2.算法规则 按照各进程到达就绪队列的顺序&#xff0c;轮流让各个进程执行一个时间片&#xff08;如100ms&#xff09;。 若进程未…

项目_游戏|外星人入侵

导入pygame&#xff0c;设定游戏屏幕&#xff08;大小、颜色&#xff09;&#xff0c;及游戏循环、退出机制 创建设置类 导入ship&#xff0c;绘制飞船 图灵官网&#xff0c;源代码文件没法下载&#xff0c;从网上找图片&#xff0c;更改尺寸及后缀&#xff0c;存入文件导入。 …

JS-前端在dom中预览pdf等文件

1、将pdf等文件显示到dom元素中预览 pdf文件可以是blob、url、file类型等只要使用URL.createObjectURL(file)全部转为URL即可使用无需借助任何插件&#xff0c;只需要使用<object></object>标签即可实现 1.1、html <template><div class"home"…

【数据结构与算法】树、二叉树的概念及结构(详解)

前言: &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--树以及二叉树的概念与结构 目录 一.树概念及结构 1.树的概念 1.1树与非树 树的特点&#xff1…

几分钟就搞定网站速度慢、网站卡等问题

为了改善网站加载速度&#xff0c;你可以考虑以下方法&#xff1a; 优化资源压缩&#xff1a;采用gzip或其他压缩算法来压缩网页的HTML、CSS和JavaScript等资源&#xff0c;从而减小数据传输的大小&#xff0c;提高加载速度。 精心挑选图片&#xff1a;选择适当的图片格式&…

7-2 图着色问题

输入样例&#xff1a; 6 8 3 2 1 1 3 4 6 2 5 2 4 5 4 5 6 3 6 4 1 2 3 3 1 2 4 5 6 6 4 5 1 2 3 4 5 6 2 3 4 2 3 4 输出样例&#xff1a; Yes Yes No No idea 注意合理的方案需满足&#xff1a;用到的颜色数 给定颜色数 solution #include <cstdio> #include &l…

防御—IPsecVPN

目录 1. 什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 数据认证的主要作用包括&#xff1a; 实现数据认证的主要手段包括&#xff1a; 2. 什么是身份认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 3. 什…

Java小游戏:趣味猜数字

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、游戏介绍二、输入输出1、输出的控制台2、从键盘上输入 三、随机数生成四、游戏实现 Hello&#xff01;我们来用前面学过的东…