操作系统 ---- 进程的概念、组成、特征

学习路线: 

一、进程的概念及组成

我们通过一个例子来说明进程的概念以及程序和进程的区别。
      我们在Windows操作系统中打开任务管理器,在任务管理器当中能看到此时系统当中运行的进程有哪些,如下图所示: 

      此时,如果我想要使用QQ的话,我打开我的QQ应用程序,于是我的QQ程序就开始运行,相应的在进程这一栏里我会看到和QQ相关的一个条目,如下图所示:
      而如果说此时我想要同时登录两个甚至三个QQ,那我可以再打开两次QQ程序,那在这个时候会发现进程这一栏里QQ相关的条目出现了三条,如下图所示。也就是说,在系统当中,此时有三个QQ进程正在运行,虽然说这三次我打开的都是.exe程序,但是这个程序的三次执行会对应三个不同的进程。

那么接下来我们便可以给出程序和进程这两个概念到底是什么了?

程序:是静态的,就是存放在磁盘里的可执行文件,就是一系列的指令集合。
进程(Process) :是动态的,是程序的一次执行过程。
注意:同一个程序多次执行会对应多个不同的进程。那么就有一个问题,即:操作系统是这些进程的管理者,它要怎么区分各个进程?
答案:当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号” -- PID(Process ID,进程ID)。

操作系统除了要记录进程的PID【可以让操作系统区分各个进程】之外,还要记录给进程分配了哪些资源【可用于实现操作系统对资源的管理】(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件),还要记录进程的运行情况【可用于实现操作系统对进程的控制、调度】(如:CPU使用时间、磁盘使用情况、网络流量使用情况等)。

上述的这些信息都被保存在一个数据结构PCB(Process Control Block)中,即进程控制块。操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。PCB中可包括的信息如下图所示:


除了PCB之外,进程还有两个很重要的组成部分,即程序段、数据段,如下图所示:

PCB是给操作系统用的;程序段、数据段是给进程自己用的。

结合上面的知识,我们分析程序是如何运行的?

程序在运行之前需要编译成二进制的机器指令,如下图所示:

程序执行的过程,其实就是CPU执行一条一条指令的过程,如下图所示:

那接下来我们把程序运行的过程再进一步细化一下:
      我们把程序写完之后,经过编译链接等操作,最终会形成一个可执行文件,例如Windows系统下的.exe可执行文件,这个可执行文件一般存放在硬盘当中,这个可执行文件当中保存的其实是上图中一系列的二进制指令,而在这个程序运行之前,需要将其从硬盘读入到内存当中,并且操作系统要建立一个与他相对应的进程,在建立进程的过程中,操作系统会为其建立一个PCB,该可执行文件中所存放的一系列二进制指令也需要读入到内存之中,这一系列的指令序列我们将其称之为程序段。
      程序【指可执行应用程序】执行的过程或者说这个进程执行的过程,就是CPU从内存当中读入这些一条一条的二进制指令然后来执行这些指令。
在我们编写的程序当中,我们定义了一些变量,这些内容也需要放入内存当中,这就是数据段。

进程是动态的,进程实体(进程映像)是静态的。进程实体反映了进程在某一时刻的状态(如:x++后,x=2)。

因此,更确切的说,进程实体(进程映像)由PCB、程序段、数据段这三部分组成。

定义:
程序段、数据段、PCB三部分组成了进程实体(进程映像)。
引入进程实体的概念后,可把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

来自百度:

狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。

广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

注意:PCB是进程存在的唯一标志!

问题:若同时挂三个 QQ 号,那么三个不同的进程的PCB、程序段和数据段是否不同?
答案:同时挂三个QQ号,会对应三个QQ进程,它们的PCB、数据段各不相同,但程序段的内容都是相同的(都是运行着相同的QQ程序)。

二、进程的特征

程序是静态的,进程是动态的,相比于程序,进程拥有以下特征:


动态性是进程最基本的特征。
异步性会导致并发程序执行结果的不确定性。

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

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

相关文章

H5漂流瓶社交系统源码

一个非常有创意的H5漂流瓶社交系统源码,带完整前端h5和后台管理系统。 环境:Nginx 1.20.1-MySQL 5.6.50-PHP-7.3 代码下载

一家电子信息企业终止,前五大客户收入占比超九成,募资合理性存疑

兴天科技终止原因如下:首先,兴天科技前五大客户收入占比约超九成,客户集中度较高且高于行业平均水平,其中近期来自第一大客户收入占比超七成,单一客户依赖程度进一步上升;其次,兴天科技除第一大…

ffmpeg的安装和使用教程及案例

FFmpeg的安装与使用教程 一、FFmpeg简介 FFmpeg是一个开源的、跨平台的音视频处理工具,可以用来转换、播放、录制、流化音视频数据,以及进行多种音视频编码和解码。 二、安装FFmpeg 1. Windows系统安装 下载预编译的二进制文件:从FFmpeg…

云原生学习交流

欢迎加入技术交流群&#xff0c;与阿里、腾讯、字节、华为等运维大佬面对面交流和互相学习。 请扫码备注 加群&#xff0c;<城市>-<公司/自由职业>-<昵称>&#xff0c;如“加群&#xff0c;广州-阿里-行则”&#xff1a;

LabVIEW灵活集成与调试的方法

在LabVIEW开发中&#xff0c;为了构建一个既便于调试又能灵活集成到主VI中的控制VI&#xff0c;开发者需要采用适当的编程方式和架构。常见的选择包括模块化设计、状态机架构以及事件驱动编程。这些方法有助于简化调试过程、提高系统的稳定性&#xff0c;并确保代码的重用性和可…

分布式事务Seata原理及其项目使用

0.Seata官方文档 1.Seata概念及原理 Seata是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 Seata主要由三个重要组…

JAVA基础:值传递和址传递

1 值传递和址传递 值传递 方法调用时&#xff0c;传递的实参是一个基本类型的数据 形参改变&#xff0c;实参不变 public static void doSum(int num1,int num2){} main(){doSum(10,20);int i 10 ;int j 20 ;doSum(i,j) ; } public static void t1(int num){num 20 ;Sys…

[数据集][目标检测]街头摊贩识别检测数据集VOC+YOLO格式758张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;758 标注数量(xml文件个数)&#xff1a;758 标注数量(txt文件个数)&#xff1a;758 标注类别…

苹果手机照片被删除?如何通过不同的方法来恢复照片

手机已经成为我们生活中不可或缺的一部分&#xff0c;它不仅仅是通讯工具&#xff0c;更是我们记录生活点滴的重要工具之一。然而&#xff0c;正如其他任何设备一样&#xff0c;iPhone上存储的照片有时也会不小心被删除或丢失。 别担心&#xff0c;即使你误删了重要的照片&…

opencv 实现两个图片的拼接去重功能

基础知识介绍 cv::Mat 是OpenCV库中用来表示图像和矩阵数据的核心类之一。它是一个多维数组&#xff0c;可以存储图像像素数据、矩阵数据以及其他类型的数据。以下是关于 cv::Mat 类的一些详细解释&#xff1a; 构造函数&#xff1a;cv::Mat 类有多个构造函数&#xff0c;可以用…

安防监控/视频汇聚平台EasyCVR无法启动并报错“error while loading shared libraries”,如何解决?

安防监控/视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力&#xff0c;为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作&#xff0c;用户可以轻松地进行远程视频监控、存储和查看&#xff0c;满足…

JVM系列(五) -内存相关的调优参数

一、摘要 在上篇文章中,我们详细介绍了 JVM 的内存布局。 今天这篇文章,并结合之前的介绍知识,一起了解一下 JVM 内存相关的调优参数。 二、内存设置相关的命令 所有内存溢出的问题,除了代码可能存在问题以外,更直观的问题是内存空间不足,如何通过参数来控制各区域的…

不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信

不小心删除了一条短信&#xff0c;或者丢失了所有短信&#xff1f;希望还未破灭&#xff0c;下面介绍如何在 iPhone 上查找和恢复已删除的短信。 短信通常都是非正式和无关紧要的&#xff0c;但短信中可能包含非常重要的信息。因此&#xff0c;如果您删除了一些短信以清理 iPh…

030集——自动弹出对话框、选择文件并播放wav音频文件(winform窗体)——C#学习笔记

如图所示&#xff0c;效果如下&#xff1a; 步骤如下&#xff1a; 新建一个winform窗体&#xff0c;双击界面&#xff0c;进入代码区&#xff1a; 复制&#xff08;下面代码中命名空间内的代码&#xff09;到&#xff08;你的命名空间下&#xff09;&#xff0c;运行。 using …

ZBrush入门使用介绍——12、折边

大家好&#xff0c;我是阿赵。   继续介绍ZBrush的功能。   如果拿一个立方体&#xff0c;进行CtrlD增加细分 会出现在边缘的线会被平滑的情况&#xff0c;这时候原来立方体的形状会发生一定的变化&#xff0c;不能保持原来的形状。 如果立方体真的只有8个顶点&#xff0…

266-基于Xilinx Kintex-7 XC7K325T 的12路光纤Switch交换平台

一、板卡概述 该系统是由两块模块组成&#xff0c;分别是基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900 的模块和一个FPGA夹层卡&#xff08;FMC&#xff09;模块。前者支持64bit DDR3容量2GByte&#xff0c;USB3.0接口;HPC的FMC连…

C++: set与map容器的介绍与使用

本文索引 前言1. 二叉搜索树1.1 概念1.2 二叉搜索树操作1.2.1 查找与插入1.2.2 删除1.2.3 二叉搜索树实现代码 2. 树形结构的关联式容器2.1 set的介绍与使用2.1.1 set的构造函数2.1.2 set的迭代器2.1.3 set的容量2.1.4 set的修改操作 2.2 map的介绍与使用2.2.1 map的构造函数2.…

【尚跑】2024陕西淳化天然氧吧半程马拉松赛149顺利完赛

1、赛事背景 奔跑美丽淳化&#xff0c;畅游天然氧吧。9月8日上午&#xff0c;2024淳化天然氧吧半程马拉松赛在淳化县润镇东街鸣枪开跑&#xff0c;4000名马拉松爱好者相聚美丽淳化&#xff0c;赏荞麦花海、闻硕果飘香&#xff0c;共同开启这场挑战自我、超越极限的奔跑之旅 本次…

flask下https教程

一、定义 linux 下flask https 协议 二、实现 linux 下flask https 协议 生成SSL证书和密钥文件。您可以使用工具如openssl来生成自签名SSL证书和密钥文件。运行以下命令生成证书和密钥文件&#xff1a; openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout…

springboot 的共享session方案?

问&#xff1a;springboot 的共享session方案&#xff1f; 参考&#xff1a; https://juejin.cn/post/7195227930077691963分布式之session共享问题 4种解决方案及spring session的使用_分布式session共享方案-CSDN博客 什么是 Session &#xff1f; 答&#xff1a;因为Http协…