Unix 进程基本信息

server/2024/9/25 10:34:40/

目录

  • 一、程序执行流程
  • 二、进程的执行状态
  • 三、进程信息记录
    • 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指向内核空间第六页的起始位置

http://www.ppmy.cn/server/22631.html

相关文章

什么是云手机?云手机有什么用?

过去,我们手中的手机是我们生活、工作、娱乐的得力助手,但随着时代的变迁和技术的发展,我们需要的不仅仅是一部手机,而是一个更强大、更灵活的工具。在这个时候,云手机横空出世,成为了我们手机使用的新选择…

将pdf转化为图片的方法

将pdf转化为图片的方法 package com.pdf.change2img;import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.springframework.util.Base64Utils;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; im…

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ③

DRQ什么时候调度Node去填写dependency ::Pipeline调度Node的sequenceId 0执行 Pipeline::ProcessRequest() { for (UINT nodeIndex 0; nodeIndex < m_orderedNodeCount ; nodeIndex) m_pDeferredRequestQueue->AddDef…

Go语言在Web开发中有哪些常用框架?

文章目录 1. Gin原因和解决方案示例代码 2. Echo原因和解决方案示例代码 3. Revel原因和解决方案示例代码 4. Buffalo原因和解决方案示例代码 总结 Go语言在Web开发中拥有许多优秀的框架&#xff0c;这些框架帮助开发者快速构建稳定且高效的Web应用。下面是一些常用的Go语言Web…

学习笔记:能量信号与功率信号(一)

目录 一、能量信号&#xff08;Energy Signal&#xff09; 二、功率信号&#xff08;Power Signal&#xff09; 三、信号关系图 四、总结 能量信号和功率信号是信号分析中两个基本的概念&#xff0c;它们主要用来描述信号在时间域中能量分布的特性&#xff0c;对于理解信号…

上海鑫吉百数——让制造型食品企业焕发新生机!

随着全球化和互联网的普及&#xff0c;食品行业的竞争也日益激烈。数字化转型有助于企业打破地域限制&#xff0c;拓宽市场渠道&#xff0c;提升品牌影响力和竞争力。在信息化、网络化的时代背景下&#xff0c;数字化转型成为企业适应社会发展的必然选择。消费者对于食品的需求…

SSH远程直连服务器docker容器的jupyter

SSH远程直连服务器docker容器的jupyter 动机&#xff1a;最近在公司服务器使用jupyter出现了点问题&#xff0c;也不知道怎么回事&#xff0c;jupyter lab打开都没问题&#xff0c;但是准备打开一个ipynb文件时就卡住了&#xff0c;啥反应没有&#xff0c;ctrlC 也不能关掉jupy…

黑马点评(五) -- 分布式锁-redission

1 . 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;他的方法都…