进程的描述与组织

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(使用前将#替换为@)

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

  • [Git & GitHub] Windows下安装git,从0开始搭建git环境(配置环境变量+设置git-ssh key...配置)(超全版)

    目录 前提准备 安装Git Git配置 配置环境变量 git配置 ssh认证配置过程 配置邮箱和用户名 个人身份 文本换行符配置 前提准备 下载地址 点击此处 点击Windows进行下载 若下载比较慢 点击此处 安装Git 下载之后 双击G
  • 计算机组成原理——存储器(一)

    存储器 一 一 存储器概述 二 存储器的分级结构 三 主存储器的技术指标 四 存储器与CPU的联系 地址总线 CPU与存储器的联系 编址方式 1 按字编址 M N 方式 2 按字节编址 五 SRAM存储器 cache 1 存储元基本结构 2
  • LRU 最近最少使用算法

    LRU 最近最少使用算法 设计LRU Cash 数据结构 设计方法 代码实现 总结 百度百科 LRU是Least Recently Used的缩写 即最近最少使用 是一种常用的页面置换算法 选择最近最久未使用的页面予以淘汰 该算法赋予每个页
  • 锁(Lock)、内存屏障(Memory barrier)与 缓存一致性( Cache coherence)

    文章目录 前言 Optimization Barrier Memory barrier Cache coherence 总结 参考资料 前言 在应用层 关于锁的使用大家应该都很熟悉了 作用就是为了保护共享变量不被同时操作而导致无法预测的情况
  • 算法——排序——归并排序图解动画

    归并排序 简介 代码示例 排序过程 分解 合并 时间复杂度 空间复杂度 稳定性 简介 归并排序分为两部分 分解 合并 分解 归并算法会把数组分成两个长度相同的子数组 直到无法再分割 每个数组只有一个元素 此过程不消耗时间资源 对应的时间复杂
  • spring-boot后端解决跨域问题

    代码 import cn hutool log Log import cn hutool log LogFactory import com alibaba fastjson JSONObject import org springfram
  • 【Linux】进程地址空间

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 虚拟地址 二 对进程地址空间的理解 三 32位下的进程
  • 【资源】小程序项目源码、项目图片素材、全栈课程、项目效果图、小程序mpvue项目实例等资源大全

    1 微信小程序源码地址链接 https pan baidu com s 1P9ISKk9YjSHbFCIqfCM pQ 提取码 g8c3 2 130个微信小程序源码地址链接 https pan baidu com s 1Hiq 6IVvzD
  • 进程信号(信号产生、注册、注销、处理),信号阻塞和volatile关键字

    文章目录 进程信号 信号产生 信号在进程中注册 信号在进程的注销 信号的处理 信号的处理方式 信号阻塞 如何阻塞一个信号 int sigprocmask int how sigset t set sigset t old int sigem
  • 【数学公式】Mathpix和MathType等等

    MathML MathML指 数学标记语言 是XML语言的一个子集 用来在web网页 甚至部分软件中显示数学公式 简言之 就是使用特殊的类似HTML的标记在网页中显示数学公式 MathType公式编辑器 MathType是一个强大的数学公式
  • uthash

    在软件开发中 不可不免的会使用到hash表 hash表的优点这里就不说了 以下介绍一个hash表的C实现 uthash是用宏实现的 使用的时候非常方便 只用包含uthash h即可 Uthash的三个数据结构 1 typedef struc
  • arm的多级流水线技术和和存储管理单元mmu

    流水线概念 流水线的概念与原理 处理器按照一系列步骤来执行每一条指令 典型的步骤如下 1 从存储器读取指令 fetch 2 译码以鉴别它属于哪一条指令 decode 3 从指令中提取指令的操作数 这些操作数往往存在于寄存器reg中 4 将操
  • 收集到的 hls rtmp rtsp 视频流测试地址

    收集到的 hls rtmp rtsp 视频流测试地址 hls https video dev github io streams x36xhzz x36xhzz m3u8 http live hkstv hk lxdns com live
  • 深入理解计算机系统-笔记

    计算机系统漫游 程序 程序的生命周期从一个源程序 源文件 开始 即程序员利用编辑器创建并保存的文本文件 如文件名为hello c的c语言程序 源程序是由0和1组成的位序列 8个位被组织成一组 称为字节 每个字节表示程序中的某个文本字符 这种
  • 计算机基础内容——网络基础

    网络基础 设备是如何上网的 网卡 有线 无线 内置天线 网线接口RJ45 usb转RJ45 交换机 路由器 外置天线 天线棒 光猫 宽带运营商 不同的宽带运营商之间是互通的 路由器发出的wifi信号 2 4GHz wifi 5 0GHz w
  • 字符编码和字符集有什么区别?Unicode是什么,和UTF-8是什么关系?你想知道的都在这篇文章了

    前言 想必大家编写代码时肯定和我一样 也遇到过汉字乱码的问题 特别是 有时候和上下游对接接口 不能统一编码格式的话 一堆乱码问题 让人头皮发麻 那么为什么会有这么多的乱码问题 什么是字符编码 什么是字符集 他们之间有什么区别和联系 什么是
  • 服务端推送SSE技术

    SSE Server Sent Events 是一种用于实现服务器主动向客户端推送数据的技术 也被称为 事件流 Event Stream 它基于 HTTP 协议 利用了其长连接特性 在客户端与服务器之间建立一条持久化连接 并通过这条连接实现
  • 【数据结构】堆、栈的区别

    heap 是堆 stack 是栈 在编程语言中 内存分配方式主要包括 栈 堆 静态存储分配 栈的内存是由操作系统自动分配 释放的 存放函数的参数值 局部变量等 堆的内存是由程序员手动申请和释放的 对应C语言中的malloc函数和C 中的ne
  • 这几个免费资源网站太强了!老司机们都收藏了!

    简介 这几个资源网站是我见过资源最牛 最全 最丰富的网站 1000000 00T都装不下 老司机们都震惊了 强烈建议老司机们收藏 关键是都是免费的 本篇文章可以用来免费看片 认真学习 安全开车 1 小纸条 开放存粹的资源网站 如图所示 资源
  • 阿里巴巴编码规范习题

    因为工作需要 公司组里要求考阿里巴巴编程规范 于是我花了一天的时间看了一遍 然后刷了一些题 终于在第三次的时候考过了 考试是基于 阿里巴巴Java开发手册 一共50道题目 包括多选和单选 题目都是选择题 目前阿里云编程规范是出到V1 5 0

随机推荐

  • 亚马逊云服务器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 进程的地址空间 进程的一个重要构成成分是进程映像 即进程所