进程的描述与组织

2023-11-18

1.1.1进程的资源

进程需要一定资源才能运行,最重要的资源是内存地址空间,此外还可能需要使用文件、设备等。这些资源均由内核负责管理和分配。分配给进程的资源登记在进程的PCB中。

1.进程的地址空间

进程的一个重要构成成分是进程映像,即进程所执行的代码和数据在内存中的呈现。为了容纳进程的映像,那个进程都有一个自己的内存地址空间,这是进程运行的必备条件。在32位x86平台上,Linux系统的进程拥有4GB的地址空间。
进程由用户态和核心态两种运行模式,在不同的模式下可访问的地址空间也不相同。因此进程的地址空间被划分为用户空间和内核空间两部分,其中1GB是内核空间,3GB是用户空间。用户空间容纳进程自己的映像,内核空间容纳内核映像。当进程运行在用户态时执行的是用户空间中的进程映像,陷入核心态执行的是内核空间中的内核映像。
为便于管理,进程的映像被按类划分为多个区,包括代码区、数据区和堆栈区。代码区中包含的是可执行程序的代码;数据区中包含的是各种类型的数据;栈属于特殊的数据区,用于记录与运行相关的动态数据。在用户空间和内核空间中都包含有若干个代码区、数据区和一个栈。由于每个进程都可能会调用系统调用,因此内核空间的代码和数据区由所有进程所共享,但每个进程都单独拥有一个内核栈。所以,内核栈和用户空间是进程的私有财产,也是最重要的资源。
栈是代码运行时必须使用的内存区。内核代码使用内核栈,进程代码使用用户栈。因此在模式切换时,进程的栈也要跟着切换。内核栈的作用由为重要,除了要存放核心态下的运行数据外,还要存放进程模式切换以及进程切换时要保留的部分现场信息。更重要的是,内核栈中还嵌有有关进程运行的一些相关信息。

2.进程的文件与设备

文件是信息的永久保存形式,应用程序经常要使用或处理文件。此外,应用程序还需要使用设备来与外界传输数据。因此文件和设备都是进程的常用资源。在Linux系统中设备是被当作文件来处理,因此两者都由文件系统来管理。
在使用文件前,进程需要执行打开操作,让文件系统为其建立与文件的连接。所有被进程打开的文件都是进程可用的文件资源。文件使用完毕须执行关闭操作,释放文件资源。

3.进程的信号通信

进程并非孤立地在运行。它需要能够接收和处理系统或其他进程发来的信号,这些信号可能是通知它某个事件或控制命令,比如暂停运行、终止运行等。进程通过设定的信号处理程序来对信号作出响应。为实现信号通信,进程需要拥有信号队列以及信号处理程序。
在这里插入图片描述
以上这些资源的用途不同,因而分配策略也有所不同。文件和设备资源是按需分配,即用时分配,用完即回收;地址空间和信号是进程执行的必要资源,它们在进程创建时分配,在进程的整个运行期间都一直占有;内核栈属于进程的故有资源,它和PCB一样,在进程创建时分配,并保持在进程的整个存在期间。就是说即使是僵尸进程也会保有它的PCB和内核栈。

1.1.2进程的描述结构

在这里插入图片描述

1.1.3进程的组织

管理进程就是管理进程的PCB。一个系统中通常可能拥有数百乃至上千个进程,为了有效地管理如此多的PCB,系统需要采用适当的方式将它们组织在一起。通常采用的组织结构有数组、散列表和链表3种方式。

  • 数组方式是将所有的PCB顺序存放在一个一维数组中。这种方式比较简单,但操作起来效率低。
  • 链表方式是将PCB链成一个链表。链式结构的特点就是灵活,便于插入和删除PCB。
  • 散列表方式是通过在PCB数组或链表上设置散列表,以加快访问速度。

实际的系统中通常会综合采用这些方法,以达到最好的效率。
Linux系统采用了多种方式来组织进程PCB,主要有以下几种:

  1. 进程链表
    系统将所有的PCB链成一个双向循环链表,PCB通过它的tasks字段链入进程链表。表头指针在0号进程的PCB中。遍历该链表即可顺序地找到每个进程的PCB。
  2. PID散列表
    在许多情况下,内核需要根据进程的PID查找进程。顺序扫描进程链表并逐个检查其中的PID是相当低效的。为了加快查找速度,内核中设置了若干个散列(Hash)表,其中PID散列表用于将PID映射到进程的PCB。PID散列表是一个链式散列表,所有的PCB都通过pid_chain和pid_list字段链入到这个散列表中。用PID查找散列表就可快速找到它的PCB。
  3. 进程树链表
    Linux系统中,进程之间存在着父子和兄弟关系。每个进程都有一个父进程,即创建了此进程的进程。一个进程可以创建0至多个进程,称为它的子进程。具有相同父进程的进程称为兄弟进程。这样,系统中的所有进程形成了一棵进程树,每个进程都是书中的一个节点,树的根是int进程,它是所有进程的祖先进程。
  4. 可执行链表
    为了方便进程的调度,系统把所有处于可执行状态的PCB组成可执行队列,处于可执行状态的进程通过PCB中的run_list字段链入适当的队列中。在进程切换时,进程调度程序从可执行队列中选择一个让其运行。
  5. 等待链表
    进程因不同的原因而睡眠。系统将睡眠的进程分类管理,每类对应一个特定的事件,用一个等待队列链接。等待队列的节点并不是PCB本身,而是代表一个等待进程的节点,其中包含了指向进程PCB的指针。当某一事件发生时,内核会唤醒相应的等待队列中满足等待条件的进程,将唤醒的进程节点从队列中删除,将该进程的PCB加入到可执行队列中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程的描述与组织 的相关文章

  • 大学计算机基础 - 第十一章习题

    1 选择题 1 多媒体计算机中的媒体信息是指 D 文字 音频 音频 图形 动画 视频 视频 音频 A B c D 全部 2 多媒体技术的主要特性有 C 多样性 集成性 交互性 实时性 A 仅 B c D 全部 多媒体技术具有以下基本特征 1
  • mac下的各种sed、grep、ag命令查看日志好用

    sed命令 删除文件的前100行 注意mac上要加个空字符串 sed i 1 100d 404 log 查看文件若干行 输出文件的5 8行 sed n 5 8p 1156 success txt 输出文件的5 8行至11 txt sed n
  • 【PC】响应式HTML5网页项目

    快速完成网页设计 10个顶尖响应式HTML5网页模板助你一臂之力 为了寻找一个优质的网页模板 网页设计师和开发者往往可能会花上大半天的时间 不过幸运的是 现在的网页设计师和开发人员已经开始共享HTML5 Bootstrap和CSS3中的免费
  • sqrt函数实现之卡马克方法

    sqrt函数的实现主要有三种方式 二分法 牛顿法 卡马克方法 卡马克方法 这里主要介绍高效的卡马克方法 卡马克方法起源于 雷神之锤III竞技场 中使用的平方根倒数速算法 下列代码是平方根倒数速算法在 雷神之锤III竞技场 源代码中的应用实例
  • 如何最高效实现手机~电脑端文件传输?

    平常使用电脑办公的时候 经常会有把手机上的文件传到电脑或把电脑上的文件分发给局域网 内网 的各个伙伴的情况 通常我们会选择使用QQ或微信的文件传输功能来实现 但是当文件比较大 比较多时 就无法发送了 再者每次通过文件助手来发送文件时 其本质
  • 【Linux】对Linux操作系统中进程的理解

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 冯 诺依曼体系结构 硬件方面 举个例子加深理解 二 操
  • 算法——排序——归并排序图解动画

    归并排序 简介 代码示例 排序过程 分解 合并 时间复杂度 空间复杂度 稳定性 简介 归并排序分为两部分 分解 合并 分解 归并算法会把数组分成两个长度相同的子数组 直到无法再分割 每个数组只有一个元素 此过程不消耗时间资源 对应的时间复杂
  • 计算机操作系统之期末考试复习——进程的基本状态及转换

    进程的基本状态 就绪状态 Ready 进程已处于准备好运行的状态 即进程已分配到除CPU以外的所有必要资源后 只要获得CPU 便可立即执行 执行状态 Running 进程以获得CPU 其程序正在执行的状态 阻塞状态 Block 正在执行的进
  • EOS开发者资源的大清单

    EOS开发者资源的大清单 自主网推出仅3个多月后 EOS正迅速发展其用户和开发者社区 在撰写本文时 EOS已经达到了超过20 000 000个不可逆块 并且具有大约3996个每秒交易 TPS 的一致吞吐量 更令人印象深刻的是不断增长的活跃用
  • Redfish协议测试工具–Postman

    1 工具和资料获取 2 简单使用说明 1 GET类举例 2 PATCH类举例 3 常见命令 1 工具和资料获取 Postman工具获取 服务器Redfish接口说明文档 使用前必读接口文档中 适用的产品 查看自己的服务器是否支持此协议 2
  • 为什么32位的计算机内存最多4G

    1 计算机的最小存储单元 bit 位 一个bit用于存放一个二进制数 内存的单位 Byte 一个Byte 8bit 2 计算机会给每一个单位的内存 1Byte 分配一个地址 CPU是通过内存地址来调用内存中的数据的 调用方式是直接寻址 直接
  • 一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( ) 。

    一个栈的入栈序列是 a b c d e 则栈的不可能的输出序列是 a edcba b decbac dceab d abcde 堆栈讲究先进后出 后进先出 选项1是abcde先入栈 然后依次出栈 正好是edcba 选项2是abcd先依次入栈
  • uthash

    在软件开发中 不可不免的会使用到hash表 hash表的优点这里就不说了 以下介绍一个hash表的C实现 uthash是用宏实现的 使用的时候非常方便 只用包含uthash h即可 Uthash的三个数据结构 1 typedef struc
  • Oracle 进程结构

    Oracle进程结构 进程是动态创建的 完成任务后就消亡 而程序是静态的实体 程序是可以复制 编辑的 进程强调的是执行过程 而程序仅仅是指令的有序集合 进程在内存中 程序在外存中 ORACLE分为用户进程和ORACLE进程 l 用户进程 当
  • 图解Git

    基本用法 上面的四条命令在工作目录 暂存目录 也叫做索引 和仓库之间复制文件 git add files 把当前文件放入暂存区域 git commit 给暂存区域生成快照并提交 git reset files 用来撤销最后一次git add
  • 计算机基础——Excel 2010

    天软备考交流群 365218976 1 Excel 2010的基本操作 1 1 Excel的窗口界面 1 2 工作簿与工作表 1 3 单元格区域的管理 1 4 工作表的管理 1 5 输入和编辑数据 1 6 行 列和单元格的管理 1 7 批注
  • FLOPS、TOPS和FLOPs的区别

    FLOPS 即每秒浮点运算次数 是每秒所执行的浮点运算次数 Floating point operations per second 缩写 FLOPS 的简称 被用来评估电脑效能 FLOPs 注意s小写 是floating point op
  • 字符编码悉知

    1 查看windows系统代码页 代码页是字符集编码的别名 也有人称 内码表 早期 代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称 当时通用的操作系统都是命令行界面系统 这些操作系统直接使用BIOS供应的VGA功能来显示字符 操作
  • 计算机中的二进制表示-4和5

    十进制 二进制 5 00000000 00000000 00000000 00000101 4 11111111 11111111 11111111 11111100 负数的二进制如何得出 相信正数的二进制表示大家都懂 但是这个 4怎么来的
  • 计算机基础:网络基础

    一 网线制作 1 制作所需要工具 网线 网线制作标准 2 水晶头使用 3 网线钳使用 4 视频教学 网线制作 二 集线器 交换机介绍 1 OSI七层模型 Open System Interconnect 即开放系统互连参考模型 是由 ISO

随机推荐

  • 亚马逊云服务器aws配置ssl https证书

    文章目录 1 申请证书 1 1 搜索ssl 1 2 请求证书 1 3 请求共有证书 1 4 添加域名 1 5 选择验证方法 提交审核 等待大概10分钟 审核成功 2 配置证书 2 1 创建负载均衡器 2 2 选择https 2 3 配置负载
  • Qt创建一个自定义按钮

    1 概述 案例 编写一个自定义按钮 要求 1 给按钮添加自定义背景 2 监听按钮点击事件 2 代码案例 1 创建一个类让其继承QWidget 点击下一步下一步最后完成 2 打开MyPushButton 让其继承QPushButton 如下所
  • java 子线程 异常_Java子线程中的异常处理(通用)

    在普通的单线程程序中 捕获异常只需要通过try catch finally 代码块就可以了 那么 在并发情况下 比如在父线程中启动了子线程 如何在父线程中捕获来自子线程的异常 从而进行相应的处理呢 常见错误 也许有人会觉得 很简单嘛 直接在
  • 【数据结构】Binary Search Tree(BST) 二分搜索树

    数据结构源码 实现类 import java util import java util LinkedList import java util Queue import java util Stack 二分搜素树 BST param
  • Cannot resolve com.sun:tools:1.8

    问题描述 使用druid编译的时候说找不到这个包 解决过程 首先定位原因 通过pom可以找到对应的位置 报的是这个包找到不到 于是我也尝试着更换openjdk 但是还是不行 这两个包是在jdk当中的lib目录下 针对于这个问题一共有4个处理
  • 第十八天---IPV6

    链路聚合 可以将多个物理接口捆绑成一个逻辑接口 即将N条物理链路聚合为一条逻辑链路 可以在不升级硬件的条件下 达到增加带宽的效果 我们将逻辑链路 称为聚合链路 在华为设备中称为ETH TRUNK链路 这个技术是针对以太网技术设计的 我们将每
  • C语言-编译过程与内存分配

    一 编译过程 1 预编译 预处理 预处理过程实质上是处理 将 include包含的头文件直接拷贝到hell c当中 将 define定义的宏进行替换 同时将代码中没用的注释部分删除等 具体做的事儿如下 1 将所有的 define删除 并且展
  • 09 插件开发快速入门

    V5标准架构模型 V5平台基于三层模型开发 下面是相关架构图 建议认真阅读业务流向 入门 字符集 为了实现国际化编程 全局要求使用UTF 8的字符集编码 包括 数据库 参考安装维护手册配置字符集 文件 java properties jsp
  • Linux命令基础

    一 Linux命令新手 cd 意思是到上一级目录 cd 意思是返回到上次的目录 类似windows返回 cd 意思是回到根目录 1 增 使用mkdir 命令创建文件夹 先使用命令 cd home 意思是打开home目录 再使用命令 ls 意
  • oracle数据库 创建用户 并授权访问

    oracle数据库 创建用户 并授权访问 create user USER TEST 1 identified by USER TEST 1 创建用户 设置密码 grant connect to USER TEST 1 授权 连接 gran
  • 零经验也可以入职大厂吗,毕业生的第一份实习如何成功逆袭?

    很多小伙伴在找实习的时候都遇到了一个拷问灵魂深处的问题 第一次找实习 面试官嫌弃没有相关经验 应该怎么办 不管是刚回国的留学生还是没有经验的大二大三在校学生 在找实习的时候 很多企业连一个 第一次 的机会都不会给 在筛选简历时直接pass掉
  • Android实现支付宝支付遇到的问题记录--主要是和服务器的合作上

    一 已解决 1 客户端需要处理的很简单 跟服务器接口要带有签名的商品信息 即支付宝api需要的入参 2 服务器的联合排查工作 由于服务器工作较忙 需要联合定位 且自己对php不了解 过程比较头疼和耗时 主要出现两个问题 1 ALI64 解决
  • IOS开发笔记 - 基于wsdl2objc调用webservice

    为了方便在ios下调用webserivce 找来了wsdl2objc这样一个开源的框架来解析webservice方便在ios下引用 下面做个小例子 1 首先是用Asp net搭建一个测试的webserivce并放在IIS服务器上面 核心代码
  • Android篇——使用第三方视频框架GSYVideoPlayer时,报错:the sensor listeners size has exceeded the maximum limit 128

    背景 在列表 ListView RecyclerView 中使用GSYVideoPlayer播放视频时 闪退报错the sensor listeners size has exceeded the maximum limit 128 原因是
  • MySQL基础篇--自用笔记

    MySQL基础篇 数据库相关概念 名称 全称 简称 数据库 存储数据的仓库 数据是有组织的进行存储 DataBase DB 数据库管理系统 操纵和管理数据库的大型软件 DataBase Management System DBMS SQL
  • QT中使用 QProcess接口 执行 fmmpeg命令,实现简单的音视频处理

    QProcess 介绍 QProcess 是 Qt 框架中用于启动外部进程和与之进行交互的类 它提供了一个方便的接口 允许你执行外部命令并捕获其输出 错误信息以及监控其运行状态 通过使用 QProcess 类 你可以在你的 Qt 应用程序中
  • 安装程序的原理与制作

    安装程序其实很简单 但却是很多软件特别是商业软件不可缺少的重要组成部分 在linux这个开源的世界中大部分软件都是源码发布的 下载下来一个configure make make install就完事了 在或者在不同平台上达成rpm或者deb
  • 如何用Python实现支持向量机(SVM)?

    SVM支持向量机是建立于统计学习理论上的一种分类算法 适合与处理具备高维特征的数据集 SVM算法的数学原理相对比较复杂 好在由于SVM算法的研究与应用如此火爆 CSDN博客里也有大量的好文章对此进行分析 下面给出几个本人认为讲解的相当不错的
  • 在IDEA中使用Scala

    1 本地下载Scala安装包 解压到指定路径 2 配置环境变量 1 新增系统环境变量 此电脑 右键 属性 高级系统设置 环境变量 系统变量 新建 SCALA HOME 2 配置PATH环境变量新增 SCALA HOME bin 3 配置CL
  • 进程的描述与组织

    1 1 1进程的资源 进程需要一定资源才能运行 最重要的资源是内存地址空间 此外还可能需要使用文件 设备等 这些资源均由内核负责管理和分配 分配给进程的资源登记在进程的PCB中 1 进程的地址空间 进程的一个重要构成成分是进程映像 即进程所