Unix 进程基本信息

目录

  • 一、程序执行流程
  • 二、进程的执行状态
  • 三、进程信息记录
    • 3.1 proc结构体
    • 3.2 user结构体
  • 四、内存分配
    • 4.1 代码段
    • 代码段如何管理?
    • 4.2 数据段
    • 4.3 虚拟地址空间
    • 4.4 交换地址
      • APR构成
      • APR数量
      • APR切换

内容来源:《Unix内核源码剖析》

一、程序执行流程

  • 为程序建立 #进程 并分配内存
  • 将程序从磁盘读入内存
  • 进程使用独立的虚拟地址控制,这就需要用到[[MMU控制器]]进行转换
    请添加图片描述

二、进程的执行状态

  • #用户模式 对应用户进程

  • #内核模式 对应内核进程

  • CPU通过 #PSW 改变运行模式

  • 模式切换时映射到 #虚拟地址 的物理内存区域也随之切换,通过 #MMU 实现
    请添加图片描述

  • 关于限制内存访问地址

    • 用户进程无法加载内核进程的内存空间,因此也无法执行内核所能实现的功能
    • 限制原因:内核提供的功能对系统影响很大(如涉及硬件操作),必须严加限制
    • 用户进程为了访问内核功能必须通过 #系统调用 实现
    • 处理器变化:用户模式-》内核模式-》用户模式

三、进程信息记录

  • 记录进程状态信息和控制信息等
  • 每个进程会分配一组proc和user结构体

3.1 proc结构体

  • 来自哪里?(proc.h)
    • 数组proc[]中的每个元素分别对应一个进程
    • 相当于用这个数组串起进程信息,后续遍历查询,选择下一个执行的程序
  • proc[]长度多少?(param.h)
    • proc[] 的 长度 决定了 在 系统 中 可以 同时 存在 的 进程 上限。长度 由 常量 NPROC 定义。
  • 为何常驻内存?
    • #proc结构体 管理者进程的状体、执行优先级的进程相关的经常被内核访问的信息,放在内存中加快访问速度

3.2 user结构体

  • 用于管理进程打开的文件或目录等信息
  • 当进程被换出到内存空间时,对应的user结构体也被移出内存

四、内存分配

  • 进程通过虚拟地址访问被分配的物理内存

4.1 代码段

  • 该段为只读的,存放程序指令的机器代码
  • 会不会被共享?
    • 某个进程被同时执行多次时,各进程共享一个代码段
  • 代码段如何管理?

4.2 数据段

  • 用于存放程序使用的变量数据

  • 是否会被共享?

    • 不共享,各个进程独立
      请添加图片描述
  • 数据 段的物理地址和长度分别由proc. p_ addrproc. p_ size 表示。

  • 内核栈区:

    • 内核模式处理时的临时工作区
    • USIZE在(param.h)中定义
  • 数据区域:

    • 存放全局变量或 #bss 等静态变量
    • 进程动态管理内存的堆(相当于提前为进程分配静态变量,运行时动态管理)
    • 什么是扩展堆区?(从虚拟地址的低位向高位方向进行)
  • 栈区域;

    • 暂时存放函数的参数、局部数据
    • 长度根据需要自动扩展(从虚拟地址的最高位向低位方向进行)

4.3 虚拟地址空间

虚拟地址空间16bit虚拟地址64kb容量
物理地址空间18bit物理地址256kb容量

进程的虚拟地址空间:
在这里插入图片描述

  • 代码段在最低地址
  • 数据区在8kb为边界对齐
  • 栈区在最高地址
  • 数据区域和栈区中间为生长区域

虚拟地址空间在不同进程中的体现:
请添加图片描述

  • 代码段可以共用(需要时)(代码段运行时只读的)
  • 数据段相互独立

为何使用虚拟地址?

  • 程序能自定地址点,不受物理内存限制(开发人员不用考虑底层问题)
  • 便于实现对内存的访问
  • 限制越界访问(MMU触发异常)
  • 提高内存使用效率

Unix V6的虚拟地址与物理内存的对应关系?

  • 代码段和数据段本身与连续的物理内存区域相对应
  • 进程被分配了代码段及数据段的两个连续的物理内存区域
  • 未进行将细小的物理内存区域的集合映射为连续的虚拟地址区域的处理。

4.4 交换地址

  • MMU通过APR寄存器将虚拟地址转化为物理地址

APR构成

请添加图片描述

  • PAR
bit11~0
含义基地址
  • PDR
bit14~8632~1
含义页内块的数量更新标志== 1时按高位向低位方向分配页的访问控制方法;01只读、11读写、00未分配

APR数量

请添加图片描述

  • PDP-1/40拥有两套APR
    通过PSW切换当前模式,可以在硬件MMU上切换APR,进而切换虚拟地址空间
  • APR共八组,0到7编号,1组APR对应1页

APR切换

  • 内核将进程使用的APR设定适当的值以保证各进程拥有独立的虚拟空间
  • 用户进程APR的值保存在user结构体中,当进程执行时读取值到用户进程用APR中

虚拟地址说明:
请添加图片描述

  • 高3bit对应页(APR)

如何通过变量u(0140000)访问user结构体?

  • 内核对供内核使用的APR做了相应的设定
  • 编号为6的PAR设为执行进程的数据段的物理地址
    请添加图片描述
  • u指向内核空间第六页的起始位置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python学习笔记(集合)

知识点思维导图 # 直接使用{}进行创建 s{10,20,30,40} print(s)# 使用内置函数set()创建 sset() print(s)# 创建一个空的{}默认是字典类型 s{} print(s,type(s))sset(helloworld) print(s) sset([10,20,30]) print(s) s1set(range(1,10)) print(s1)print(max:,max(s1)) print(m…

Java web第四次作业

要求:读取xml文件并在页面中显示出来。 采用三种方式实现,并体会其中的原理: 1.常规方式,controlller控制器不分层 代码:RestController public class PoetController { RequestMapping("/listPoet") pu…

STL::string简单介绍

目录 1、什么是STL STL6大组件:仿函数、算法、容器、空间配置器、迭代器、配接器 推荐文档(必须学会看文档) 2、string常用接口 a、初始化 1、什么是STL 标准模板库 STL(Standard Template Library),主要是数据结构…

如何带好一个开发小团队?

俗话说:授人以鱼不如授人以渔,这句话强调的是教会别人解决问题的方法比单纯给予一次性帮助更有价值。提倡教育和培养团队成员,使其具备自我解决问题的能力。带领一个开发小团队需要综合考虑管理、沟通和技术能力等方面。以下是一些建议&#…

2024年电子商务与大数据经济国际会议 (EBDE 2024)

2024年电子商务与大数据经济国际会议 (EBDE 2024) 2024 International Conference on E-commerce and Big Data Economy 【会议简介】 2024年电子商务与大数据经济国际会议即将在厦门召开。本次会议旨在汇聚全球电子商务与大数据经济领域的专家学者,共同探讨电子商务…

实验五 Spark SQL编程初级实践

Spark SQL编程初级实践 Spark SQL基本操作 将下列JSON格式数据复制到Linux系统中,并保存命名为employee.json。 { "id":1 , "name":" Ella" , "age":36 } { "id":2, "name":"Bob","a…

STM32学习和实践笔记(21):定时器中断实验

通用定时器配置步骤如下: 第一步:使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟 第二步:初始化定时器参数,包含自动重装值,分频系数,计数方式等 voidTIM_TimeBaseInit(TIM_T…

C++编译器如何实现 const(常量)?

C编译器如何实现 const(常量)? 表面上看,我们在讨论 “编译器怎么保证一个常量不会被程序员强行改变呢?”;其实,我们说的是:如果你表明自己就是要强行修改一个常量,那么…

每日一题:托普利茨矩阵

给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。 如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。 示例 1: 输入:matrix…

【原创教程】EPLAN如何制作专属的封面

想要给EPLAN制作专属封面吗?没问题,我来给你支个招。在EPLAN设计电气图纸时,封面就是第一印象,得好好弄。咱们以口罩机项目为例,来看看怎么做吧! 首先,得新建个封面。在项目属性里找到表格名称,点那个数值下拉菜单,选择“查找”。在弹出的表格里挑个你喜欢的模版,点击…

【IC设计】边沿检测电路(上升沿、下降沿、双沿,附带源代码和仿真波形)

文章目录 边沿检测电路的概念上升沿检测电路下降沿检测电路双边沿检测电路代码和仿真RTL代码Testbench代码仿真波形 参考资料 边沿检测电路的概念 边沿检测指的是检测一个信号的上升沿或者下降沿,如果发现了信号的上升沿或下降沿,则给出一个信号指示出来…

OurBMC开源大赛高校获奖队伍专访来啦!

精彩纷呈的 OurBMC 开源大赛已告一段落,经历为期四个月的实战,各个参赛队伍也积淀了丰富的实践经验与参赛心得。本期,社区特别邀请 OurBMC 开源大赛获奖高校团队分享「走进OurBMC开源大赛,共同践行开放包容、共创共赢的开源精神」…

【春秋云境】文件上传漏洞合集

CVE-2022-30887 1.题目简介 2.CVE-2022-30887简介 使用工具: 蚁剑 burpsuite 一句话木马 3.渗透测试 输入用户名密码进行抓包 猜测账号密码 无有用信息,根据页面现有信息找到作者邮箱: mayuri.infospacegmail.com,猜测密码为&a…

每日一题:跳跃游戏II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

YOLOv3没有比这详细的了吧

YOLOv3&#xff1a;目标检测基于YOLOv2的改进 在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列以其出色的性能和速度而闻名。YOLOv3作为该系列的第三个版本&#xff0c;不仅继承了前身YOLOv2的优势&#xff0c;还在多个方面进行了创新和改进。…

机器学习理论基础—支持向量机的推导(一)

机器学习理论基础—支持向量机的推导 算法原理 SVM:从几何角度&#xff0c;对于线性可分数据集&#xff0c;支持向量机就是找距离正负样本都最远的超平面&#xff0c;相比于感知机&#xff0c;其解是唯一的&#xff0c;且不偏不倚&#xff0c;泛化性能更好。 超平面 n维空间…

如何拿取 macOS 系统中的图标文件

如何拿取 macOS 系统中的图标文件 比如在 Finder 中看到这个文件夹图标很好看&#xff0c;想用一下&#xff0c;就是不知道它在什么位置&#xff0c;我来告诉你。 它在系统中的位置是 /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/如何打开这个位置&am…

计算机网络物理层思维导图+大纲笔记

大纲笔记&#xff1a; 物理层的基本概念 解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是具体的传输媒体 主要任务 确定与传输媒体接口有关的一些特性 机械特性 电气特性 功能特性 规程特性信道上传送的信号 基带信号 来自信源的信号&#xff0c;直接表…

【CLI命令行接口和Java连接openLooKeng查询数据 】

CLI命令行接口和Java连接openLooKeng查询数据 一、摘要二、正文0. 环境说明1. CLI命令行工具的使用2. Java API 的使用三、小结一、摘要 通过CLI命令行接口工具连接openLooKeng,可帮助初学者能够使用SQL语句的方式快速操作openLooKeng,任何只要熟悉SQL的人都可以快速切换到op…

解决 uniapp uni.getLocation 定位经纬度不准问题

【问题描述】 直接使用uni.getLocation获取经纬度不准确&#xff0c;有几百米的偏移。 【解决办法】 加偏移量 //加偏移 let x longitude let y latitude let x_pi (3.14159265358979324 * 3000.0) / 180.0 let z Math.sqrt(x * x y * y) 0.00002 * Math.sin(y * x_pi)…