【进程管理】初识进程

一.何为进程

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

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

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

二.先描述,再组织

我们编译完成,运行之前的程序是放在哪的呢?不用说,肯定在磁盘上。我们常常听说,要想运行一个程序,首先要将它加载到内存,这是由冯诺依曼体系结构决定的,因为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.xdnf.cn/news/149359.html

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

相关文章

typescript: Builder Pattern

/*** file: CarBuilderts.ts* TypeScript 实体类 Model* Builder Pattern* 生成器是一种创建型设计模式, 使你能够分步骤创建复杂对象。* https://stackoverflow.com/questions/12827266/get-and-set-in-typescript* https://github.com/Microsoft/TypeScript/wiki/…

想要精通算法和SQL的成长之路 - 验证二叉树

想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下: 对于一颗二叉树,我们需要做哪些校验? 首先…

(二)正点原子STM32MP135移植——TF-A移植

目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 (1)修改Makfile.sdk (2)设置环境变量 (3)编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…

学习记忆——方法篇——联想法+记忆宫殿+数字编码

左右脑在记忆当中的不同特点: 左脑是我们的理性脑。主要功能是处理逻辑内容、以及数字、文字等信息,擅长对知识的分析、理解、归纳、整合。缺点是处理信息速度慢、效率低,死记硬背就是用左脑记忆。 右脑是我们的感性脑。主要功能是处理节奏、…

2.2.2搭建交叉编译器

1 交叉编译器 交叉编译的存在,有2个原因,1个是不同的平台,架构不同,使用的指令集不同,ARM和MIPS的CPU无法运行X86指令休编码的程序,1个是一般arm平台上的存储/性能有限,无法提供一个可靠的编译环境。所以就出现了在x86上编译,在arm上运行的镜像,即交叉编译。在交叉编…

Linux多线程网络通信

思路:主线程(只有一个)建立连接,就创建子线程。子线程开始通信。 共享资源:全局数据区,堆区,内核区描述符。 线程同步不同步需要取决于线程对共享资源区的数据的操作,如果是只读就不…

网络是什么?(网络零基础入门篇)

1.如何理解局域网和广域网? 2.路由器和交换机是怎么样工作的? 3.三层交换机能不能代替路由器? -- 局域网 广域网 -- 企业网架构,运营商架构,数据中心架构 -- 局域网 通过 交换机连接的 转发 相同的ip地址…

stable diffusion学习笔记【2023-10-2】

L1:界面 CFG Scale:提示词相关性 denoising:重绘幅度 L2:文生图 女性常用的负面词 nsfw,NSFW,(NSFW:2),legs apart, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, (…

ubuntu下源码编译方式安装opencv

基础条件 ubuntu 20.04 opencv 3.4.3 opencv 源码编译的安装步骤 第一步, 首先clone源码 git clone https://github.com/opencv/opencv.git第二步,依赖包,执行下面的命令 sudo apt-get install build-essential sudo apt-get install cmak…

使用华为eNSP组网试验⑸-访问控制

今天练习使用华为sNSP模拟网络设备上的访问控制,这样的操作我经常在华为的S7706、S5720、S5735或者H3C的S5500、S5130、S7706上进行,在网络设备上根据情况应用访问控制的策略是一个网管必须熟练的操作,只是在真机上操作一般比较谨慎&#xff…

机器学习必修课 - 如何处理缺失数据

运行环境:Google Colab 处理缺失数据可简单分为两种方法:1. 删除具有缺失值的列 2. 填充 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 import pandas as pd from sklearn.model_selection import train_test_split导…

微信公众号模板消息First,Remark字段不显示,备注字段不见了

今天在开发公众号过程中有个需求发模板消息我设置的如下 成绩单打印通知!姓名:{{name.DATA}} 学号:{{stuid.DATA}}状态:{{status.DATA}}时间:{{date.DATA}} 备注:{{remark.DATA}} 然后发完通知发现《…

天地无用 - 修改朋友圈的定位: 高德地图 + 爱思助手

1,电脑上打开高德地图网页版 高德地图 (amap.com) 2,网页最下一栏,点击“开放平台” 高德开放平台 | 高德地图API (amap.com) 3,在新网页中,需要登录高德账户才能操作。 可以使用手机号和验证码登录。 4&#xff0c…

制作 3 档可调灯程序编写

PWM 0~255 可以将数据映射到0 75 150 225 尽可能均匀电压间隔

5个适合初学者的初级网络安全工作,网络安全就业必看

前言 网络安全涉及保护计算机系统、网络和数据免受未经授权的访问、破坏和盗窃 - 防止数字活动和数据访问的中断 - 同时也保护用户的资产和隐私。鉴于公共事业、医疗保健、金融以及联邦政府等行业的网络犯罪攻击不断升级,对网络专业人员的需求很高,这并…

计算机网络 (中科大郑烇老师)笔记(一)概论

目录 0 引言1 什么是Internet?1.1 网络、计算机网络、互联网1.2 什么是Internet?:从服务角度看 2 什么是协议?3 网络的结构(子系统)3.1 网络边缘3.2 网络核心:分组交换、线路交换3.3 接入网、物…

【软件测试】软件测试的基础概念

一、一个优秀的测试人员需要具备的素质 技能方面: 优秀的测试用例设计能力:测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效的发现缺陷,保证产品质量的优秀测试用例。这就需要我们掌握设计测试用例的方…

GPT系列论文解读:GPT-2

GPT系列 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型: GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer…

关于内存对齐你需要了解的事

简介 这篇文章的目的是带你了解什么是内存对齐,具体的内存对齐的细节、处理方式、不同架构则不会去详细讲解,只做科普文用。 1、什么是内存对齐 内存对齐和数据在内存中的位置有关。内存对齐以字节为单位进行,一个变量的内存地址如果正好等于…

代码随想录第35天 | ● 01背包问题,你该了解这些! ● 01背包问题—— 滚动数组 ● 416. 分割等和子集

01背包 题目 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 代码 function testWeightBagProblem (weight, value, size) {// 定义 d…