当前位置: 首页 > news >正文

【进程管理】初识进程

一.何为进程

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

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

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

二.先描述,再组织

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

相关文章:

【进程管理】初识进程

一.何为进程 教材一般会给出这样的答案: 运行起来的程序 或者 内存中的程序 这样说太抽象了,那我问程序和进程有什么区别呢?诶?这我知道,书上说,动态的叫进程,静态的叫程序。那么静态和动态又是什么意思…...

ArcGIS Maps SDK for JS:监听按钮点击事件控制图层的visible属性

文章目录 1 需求描述2 解决方案 1 需求描述 现在有这么一个需求:在地图中添加一些图层,添加图层列表按钮。打开图层列表后用户会打开某些图层使其可见,要求关闭图层列表时,隐藏某些图层(若visibletrue) 2…...

微信小程序-1

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 报错在调试器的console里找 一、结构 Ctrl 放大字体 Ctrl - 缩小 设置 - - - 外观设置 - - - 可以修改喜欢的主题颜色 index.js index.json index.wxml 》 html <view class"box&qu…...

不容易解的题10.5

31.下一个排列 31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/next-permutation/?envTypelist&envIdZCa7r67M会做就不算难题&#xff0c;如果没做过不知道思路&#xff0c;这道题将会变得很难。 这道题相当于模拟cpp的next_permu…...

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么&#xff1f;HTTP & HTTPS 2、HTTP&#xff0c;用户后续的操作&#xff0c;服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器&#xff1f;4、hashmap是线…...

使用Jest测试Cesium源码

使用Jest测试Cesium源码 介绍环境Cesium安装Jest安装Jest模块包安装babel安装Jest的VSC插件 测试例子小结 介绍 在使用Cesium时&#xff0c;我们常常需要编写自己的业务代码&#xff0c;其中需要引用Cesium的源码&#xff0c;这样方便调试。此外&#xff0c;目前代码中直接使用…...

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;…...

【逐步剖C】-第十一章-动态内存管理

一、为什么要有动态内存管理 从我们平常的学习经历来看&#xff0c;所开辟的数组一般都为固定长度大小的数组&#xff1b;但从很多现实需求来看需要我们开辟一个长度“可变”的数组&#xff0c;即这个数组的大小不能在建立数组时就指定&#xff0c;需要根据某个变量作为标准。…...

【树】树的直径和重心

目录 一.树的直径 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;思路 &#xff08;3&#xff09;例题 &#xff08;4&#xff09;std(第一小问) 二.树的重心 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;求重心 &#xff08;3&#xff09;例…...

《Attention Is All You Need》论文笔记

下面是对《Attention Is All You Need》这篇论文的浅读。 参考文献&#xff1a; 李沐论文带读 HarvardNLP 《哈工大基于预训练模型的方法》 下面是对这篇论文的初步概览&#xff1a; 对Seq2Seq模型、Transformer的概括&#xff1a; 下面是蒟蒻在阅读完这篇论文后做的一…...

C++笔记之不同buffer数量下的生产者-消费者机制

C笔记之不同buffer数量下的生产者-消费者机制 文章目录 C笔记之不同buffer数量下的生产者-消费者机制0.在不同的缓冲区数量下&#xff0c;生产者-消费者机制的实现方式和行为的区别1.最简单的生产者-消费者实现&#xff1a;抄自 https://mp.weixin.qq.com/s/G1lHNcbYU1lUlfugXn…...

编码文字使用整数xyz 三个坐标 并使用

导航 说明原始描述AI理解的实现代码说明 原始描述 而后期的,相同的s,前缀差距 和 自身权重 要对应的上,或者说 假设每个序列都是三维空间上的点集合,使用最小的空间表达这些信息,整个数据集才是重点。这些点的集合可以 是空间直线或者是曲线 整体的思路是 一个集合能在任…...

创建vue3工程

一、新建工程目录E:\vue\projectCode\npm-demo用Visual Studio Code 打开目录 二、点击新建文件夹按钮&#xff0c;新建vue3-01-core文件夹 三、右键vue3-01-core文件夹点击在集成终端中打开 四、初始化项目&#xff0c;输入npm init 一直敲回车直到创建成功如下图 npm init 五…...

Flutter笔记 - 用于描述Align的Alignment、AlignmentDirectional、AlignmentTween类

Flutter笔记 用于描述Align的Alignment、AlignmentDirectional、AlignmentTween类 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_…...

门面模式简介

门面模式简介 门面模式&#xff08;Facade Pattern&#xff09;是一种结构性设计模式&#xff0c;它提供了一个简化复杂系统的接口&#xff0c;允许客户端通过一个统一的接口与系统交互&#xff0c;而不需要了解系统内部的复杂性。这个模式的目标是降低客户端与系统之间的耦合…...

2023年7月工作经历二

invoke的翻译 C#的这个关键字很熟&#xff0c;但不知道如何翻译比较好。和网友沟通&#xff0c;并查阅多篇博文&#xff0c;觉得“同步调用&#xff08;invoke&#xff09;和异步调用(beginvoke)”比较好。 VS2022很爽 C#的类名&#xff0c;会提示命名空间。C调试的时候&…...

7.wifi开发【智能家居:终】,实践总结:智能开关,智能采集温湿,智能灯。项目运行步骤与运行细节,技术归纳与提炼,项目扩展

一。项目运行步骤与运行细节 1.项目运行步骤&#xff08;一定有其他的运行方式&#xff0c;我这里只提供一种我现在使用的编译方式&#xff09; &#xff08;1&#xff09;项目运行使用软件与技术&#xff1a; 1.Virtual linux 使用这个虚拟机进行程序的编译 2.Makefile与shl…...

学习开发一个RISC-V上的操作系统(汪辰老师) — unrecognized opcode `csrr t0,mhartid‘报错问题

前言 &#xff08;1&#xff09;此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 &#xff08;2&#xff09;该课程相关代码gitee链接&#xff1b; &#xff08;3&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 正文 &#xff08;1&#xff09;在跟着…...

【计算机网络】 心跳机制

文章目录 心跳机制应用场景什么是心跳机制心跳包的发送&#xff0c;通常有两种技术 心跳机制 应用场景 在长连接下&#xff0c;有可能很长一段时间没有数据往来。理论上说&#xff0c;这个连接是一直保持连接的&#xff0c;但是实际情况中&#xff0c;如果中间节点出现什么故…...

文心一言 VS 讯飞星火 VS chatgpt (106)-- 算法导论10.1 4题

四、用go语言&#xff0c;重写 ENQUEUE 和 DEQUEUE 的代码&#xff0c;使之能处理队列的下溢和上溢。 文心一言&#xff1a; 在 Go 语言中&#xff0c;我们可以使用切片来实现队列。下面是如何实现 ENQUEUE 和 DEQUEUE 操作&#xff0c;同时处理队列的下溢和上溢的情况&#…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...