[2.1.1]进程管理——进程的概念、组成、特征

news2024/12/23 13:23:05

文章目录

  • 第二章 进程管理
    • 进程的概念、组成、特征
      • (一)进程的概念
      • (二)进程的组成——PCB
      • (三)进程的组成——程序段、数据段
        • 补充:程序是如何运行的?
      • (四)进程的特征
    • 小结

第二章 进程管理

进程的概念、组成、特征

进程的

  • 概念

    理解“进程”和“程序”的区别

  • 组成

    一个进程由哪些部分组成

  • 特征

    进程有哪些重要的特征

  首先认识一个新的概念:进程。

  第一章中,我们经常会说,程序……,偶尔才会提到进程。不要把程序和进程这两个概念混淆了,一会儿会介绍。

(一)进程的概念

image-20230305160203218

  打开Windows系统的任务管理器,可以看到,系统中现在正在运行的进程有这么多。

image-20230305160341441

  如果打开了QQ程序,QQ会启动,同时在进程里,可以看到有一条和QQ相关的条目。

  而此时,如果我想要登录两个、三个QQ。

image-20230305160535529

  这时会发现,进程栏里,QQ相关的条目,出现了3条,表示系统中有3个QQ进程正在运行。

  虽然说,这三次我打开的都是QQ.exe这个程序,但是这一个程序的三次执行,会对应三个不同的进程。

  • 程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。

  • 进程(Process):是动态的,是程序的一次执行过程。

    同一个程序多次执行会对应多个进程。

  现在问题来了,既然这3个是不同的进程,但是它们执行的是同一个相同的程序。操作系统作为这些进程的管理者,怎么区分各个进程?不能都称之为“QQ进程”吧。

(二)进程的组成——PCB

  问题:操作系统是这些进程的管理者,它要怎么区分各个进程?

  解决方法:当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”——PID(Process ID,进程ID)

image-20230305161350029

  打开任务管理器,可以看到各个进程的PID,按照递减次序排列一下,很容易可以看出,每个进程的PID都是不重复的。

  此时,我再打开一个Google Chrome,再打开一个网易云音乐。

image-20230305161552334

  可以发现,进程列表中多了两者的进程信息,其PID分别为17184、17872。

  此时,我把这两个程序退出,然后重新再次打开。

image-20230305161717603

  可以看到,它们的PID又发生了变化,分别为18464、18224。

  可见,我们每新建一个进程,都会给它分配一个不重复的、唯一的ID。

  总之,再回到我们刚才的问题。我们运行的三个QQ进程,它们虽然都叫“腾讯QQ(32位)(2)”,但是它们背后各自有不同的PID

  此外,刚刚的图中,每个进程的详细信息除了PID还有创建者(UID)、分配了多少内存、对I/O设备的使用情况等,操作系统会根据这些进程的各个信息,为其执行相应的管理策略。

  操作系统要记录PID、进程所属用户ID(UID)——基本的描述信息,用来区分各个进程。

  还要记录给进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件)——用于实现操作系统对资源的管理。

  还要记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况等)——用于实现操作系统对进程的控制、调度。

  既然操作系统要在背后为每一个进程记录这么多信息。那么这些信息,都会被统一地放在一个叫做PCB(Process Control Block)的数据结构当中,即进程控制块

  操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中


  所以,PCB是一个很重要的结构,它是进程存在的唯一标志,当一个进程被创建时,操作系统也会为它创建相应的PCB;而当一个进程结束的时候,操作系统就会回收它的PCB。

  操作系统对进程进行管理工作所需的信息都存放在PCB中,PCB中的信息大致可按如下分类。(我们想要认识PCB当中每一个属性,是不可能的,也没必要)

image-20230305163017343

(三)进程的组成——程序段、数据段

  除了PCB之外,进程还有两个很重要的组成部分:程序段、数据段。

  刚才说过,PCB是给操作系统用的一个数据结构。而程序段、数据段其实是给进程自己用的


补充:程序是如何运行的?

  第一章当中就讲过这个问题,此处再进行扩充。

  程序要想运行,需要编译成二进制的指令。然后对这一条条的指令,再依次上CPU运行。

image-20230305163811302


  此处,我们把程序运行的过程,再进一步细致讨论一下。

  我们的高级语言程序,经过一系列的编译、链接的步骤,最终会形成一个可执行文件(如Windows电脑里就是.exe文件),这个可执行文件平时是保存在硬盘当中的。这个可执行文件里面保存的其实就是我们刚才说的那一系列的指令序列。

  而当程序要运行之前,需要把它从硬盘读入到内存当中,并且操作系统会建立一个与它相对应的进程。

  经过刚才的学习,我们知道,建立一个对应的进程,那么它会建立相对应的PCB。

  除了PCB之外,这个程序的那一系列指令序列也需要读入内存当中。这一系列指令序列,我们把它称为程序段。那么,这个程序执行的过程,或者说这个进程执行的过程,其实就是CPU从内存当中读入这样一条条的指令然后来执行这些指令。

  除了执行这些指令之外,其实在执行指令的过程当中,会有一些“中间的数据”,比如int x; x++;,我们就定义了一个变量x。那么这些变量的内容,肯定也需要放在内存当中。所以还会有另外一个叫作数据段的区域,用来存放这个程序运行过程当中所产生的、所需要使用的各种数据。

image-20230305164510432

  所以,一个进程实体(进程映像)由PCB、程序段、数据段组成。

  我们之前一直在说:进程由哪些部分组成。但是更严格的来说,应该是:一个进程实体(进程映像)由哪些部分组成。进程是动态的,进程实体是静态的。如何理解?我们可以把进程实体理解为这个进程在动态执行过程中某一时刻的一个快照,进程实体可以反映这个进程在某一时刻的状态(如:x++;后,x=2)。

  进程动态的,进程实体(进程映像)是静态的。

  进程实体反映了进程在某一时刻的状态。


image-20230305165057442

  程序段、数据段、PCB三部分组成了进程实体进程映像)。

  更确切的说,应该是“进程实体(进程映像)的组成”。不过,除非专门考察进程与进程实体的区别,不然也没必要去抠这个字眼。

  PCB是给管理者,也就是给操作系统用的。

  而程序段、数据段里面的内容,是给进程自己用的,与进程自身的运行逻辑有关。

  所以在引入了进程实体的概念之后,我们可以把进程定义为:

  进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位。

  进程是一个资源分配的独立单位,也很好理解,从刚才我们看的任务管理器的进程列表里面,很清楚的可以看到,操作系统就是以进程为单位,给各个进程分配资源的,如内存。

  还涉及到一个进程的“调度”。其实所谓的调度,就是指,操作系统决定让哪个进程上CPU运行。进程调度相关的内容会在之后的小节中进一步学习。

  一个程序运行多次,会对应多个进程。如果我们同时挂三个QQ号,那么这三个QQ进程,它们的PCB、数据段是各不相同的。PCB不相同很好理解;而数据段不相同,是因为,我们这三个QQ号,它涉及的一些信息、数据都是存放在数据段当中的,肯定是不相同的。但是,这三个QQ进程背后,它们的程序段的内容是相同的,因为它们执行的是相同的QQ程序。

  PCB是进程存在的唯一标志。

(四)进程的特征

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

image-20230305170124650

  动态性是进程最基本的特征。

  异步性会导致并发程序执行结果的不确定性。各进程独立、不可预知,但有时我们又必须让几个进程之间相互配合、协调着进行。具体会在后面“进程同步”相关部分进一步学习。

  所有的这些特性,都不要死记硬背,而是理解。

小结

image-20230305170510870

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

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

相关文章

vue3 插槽使用详解

目录1 前言2 插槽的使用2.1 基本使用2.2 具名插槽2.3 动态插槽名2.4 插槽传值3 总结1 前言 Vue 实现了一套内容分发的 API&#xff0c;将 <slot> 元素作为承载分发内容的出口&#xff0c;使用插槽使得vue组件的设计更加灵活。 在vue版本更迭中&#xff0c;尽管插槽的使…

常用的设计模式之一(创建型模式)

设计模式可分为三大类&#xff1a; 创建型模式 (Creational Patterns)结构性模式 (Structural Patterns)行为型模式 (Behavioral Patterns) 模式描述包括创建型模式工厂模式&#xff08;Factory Pattern&#xff09; 抽象工厂模式&#xff08;Abstract Factory Pattern&#…

并发编程——可见性与有序性

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 JMM即Java Memory Model&#xff0c;它定义了主存、工作内存抽象概念&#xff0c;底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。JMM体现在以下几个方面&#xff1a; 原子性&…

Web API

DOM API 1、选中页面元素 let elem document.querySelector(CSS选择器); console.log(elem); console.dir(elem); 2、事件 鼠标点击事件 onclick 鼠标移动事件 onmousemove 等等 事件源 .box&#xff0c;事件类型 onlick&#xff0c;事件处理方式 alert(hello) let d…

[Mybatis1]介绍与快速入门

文章目录 Mybatis概述 持久层 框架 Mybatis与JDBC对比 JDBC代码的缺陷 Mybatis简化JDBC Mybatis快速入门案例 整体案例项目结构 1.创建user表&#xff0c;添加数据 2.创建Maven项目&#xff0c;导入坐标 3.编写Mybatis核心配置文件 4.编写数据库返回对象的实体类 5. 编写S…

QML Button详解

1.Button简介 Button表示用户可以按下或单击的按钮控件。按钮通常用于执行一个动作&#xff0c;或回答一个问题。典型的按钮有确定、应用、取消、关闭、是、否和帮助。 Button继承自AbstractButton&#xff0c;提供了以下几种信号。 void canceled() //当按…

Python笔记 -- 列表

文章目录1、列表简介2、修改、添加、删除元素2.1、添加2.2、删除3、排序、倒序4、遍历列表5、创建数值列表6、列表切片7、列表复制8、元组1、列表简介 在Python中用方括号[]表示列表&#xff0c;用逗号隔开表示其元素 通过索引访问列表 names [aa,bb,cc,dd]print(names[0]) …

游戏项目中的程序化生成(PCG):算法之外的问题与问题

本篇讨论的是什么 从概念上讲&#xff0c;PCG&#xff08;程序化生成&#xff09;的含义很广&#xff1a;任何通过规则计算得到的内容&#xff0c;都可算作是PCG。但在很多游戏项目的资料&#xff0c;包括本篇&#xff0c;讨论PCG时特指是&#xff1a;用一些算法/工具(特别是H…

C语言-基础了解-13-C enum枚举

C enum枚举 一、C枚举 枚举是 C 语言中的一种基本数据类型&#xff0c;用于定义一组具有离散值的常量。&#xff0c;它可以让数据更简洁&#xff0c;更易读。 枚举类型通常用于为程序中的一组相关的常量取名字&#xff0c;以便于程序的可读性和维护性。 定义一个枚举类型&a…

3.2 LED闪烁流水灯蜂鸣器

LED闪烁1.1 电路连接示意图LED采用低电平点亮的方式&#xff0c;利用ST-Link的3.3V进行供电。1.2程序设计1.21知识储备GPIO配置步骤步骤&#xff1a;1. 第⼀步&#xff0c;使⽤RCC开启GPIO的时钟2. 第⼆步&#xff0c;使⽤GPIO_Init()函数初始化GPIO3. 第三步&#xff0c;使⽤输…

JavaWeb--会话技术

会话技术1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3 Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session钝化与活化3.3.2 Session销毁目标 理…

java坦克大战(1.0)

坦克大战 后面开始学习怎么使用java制造一个坦克大战游戏 但是不是直接开始做&#xff0c;而是随着这个游戏程序的制造&#xff0c;一边学习新知识融入到游戏中。包括多线程&#xff0c;反射&#xff0c;IO流… Java坐标体系 在几乎所有的坐标中都有一个x轴和y轴&#xff0c…

大数据项目实战之数据仓库:用户行为采集平台——第1章 数据仓库概念

第1章 数据仓库概念 数据仓库&#xff08;Data Warehouse&#xff09;&#xff0c;是为企业制定决策&#xff0c;提供数据支持的。可以帮助企业改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等 业务数据&#xf…

Java - 对象的比较

一、问题提出 前面讲了优先级队列&#xff0c;优先级队列在插入元素时有个要求&#xff1a;插入的元素不能是null或者元素之间必须要能够进行比较&#xff0c;为了简单起见&#xff0c;我们只是插入了Integer类型&#xff0c; 那优先级队列中能否插入自定义类型对象呢&#xf…

深入理解JDK动态代理原理,使用javassist动手写一个动态代理框架

文章目录一、动手实现一个动态代理框架1、初识javassist2、使用javassist实现一个动态代理框架二、JDK动态代理1、编码实现2、基本原理&#xff08;1&#xff09;getProxyClass0方法&#xff08;2&#xff09;总结写在后面一、动手实现一个动态代理框架 1、初识javassist Jav…

Dijkstra算法的入门与应用

目录 一、前言 二、Dijkstra算法 1、Dijkstra 算法简介 2、算法思想&#xff1a;多米诺骨牌 3、算法实现 4、例子 三、例题 1、蓝桥王国&#xff08;lanqiaoOJ题号1122&#xff09; 一、前言 本文主要讲了Dijkstra算法的概念、实现与一道模板例题。 二、Dijkstra算法…

RSTP基础要点(上)

RSTP基础RSTP引入背景STP所存在的问题RSTP对于STP的改进端口角色重新划分端口状态重新划分快速收敛机制&#xff1a;PA机制端口快速切换边缘端口的引入RSTP引入背景 STP协议虽然能够解决环路问题&#xff0c;但是由于网络拓扑收敛较慢&#xff0c;影响了用户通信质量&#xff…

分布式对象存储

参考《分布式对象存储----原理、架构以及Go语言实现》&#xff08;作者&#xff1a;胡世杰&#xff09; 对象存储简介 数据的管理方式 以对象的方式管理数据&#xff0c;一个对象包括&#xff1a;对象的数据、对象的元数据、对象的全局唯一标识符 访问数据的方式 可扩展的分…

useCallback、useMemo、React.memo

1、React.memo React.memo 是 React 中用于函数组件优化的高阶组件&#xff0c;可以在一定程度上减少组件的重渲染&#xff0c;提升应用性能。React.memo 的实现原理是对比组件的前后两次渲染传入的 props 是否相等&#xff0c;如果相等则不会触发重新渲染&#xff0c;否则会触…

使用 Nacos 搭建一个简单的微服务项目

Nacos Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 准备Nacos 将 nacos 安装成功之后&#xff0c;进入nacos的bin 目录下&#xff0c;通过命令sh startup.sh -m standalone启动nacos&#xff0c;然后…