Unix 进程基本信息

devtools/2024/9/23 11:20:16/

目录

  • 一、程序执行流程
  • 二、进程的执行状态
  • 三、进程信息记录
    • 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/devtools/16625.html

相关文章

基于GA遗传算法的PID控制器参数优化matlab建模与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1、遗传算法基本原理 4.2、基于GA的PID参数优化 5.完整程序 1.程序功能描述 基于GA遗传算法的PID控制器参数优化,对比GA优化前后的PID控制器的控制曲线。 2.测试软件版本以…

千行 MySQL 学习笔记总结大全,语法大全

Windows服务 -- 启动MySQLnet start mysql -- 创建Windows服务sc create mysql binPath mysqld_bin_path(注意:等号与值之间有空格) 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示…

HTTP 网络协议请求的消息结构,具体详解(2024-04-25)

一、简介 HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。 HTTP 消息是客户端和服务器之间通信的基础,它们由一系列的文本行组成,遵循特定的格式和…

Oracle Analytics BIEE 操作方法(六)数据格式1:百分比

问题: 有如下公式,将数据显示为按行的百分比。此时数据显示只会有一位小数。想显示两位 解决方案 在分析中找到“高级”标签,将“分析XML”中内容复制出来 替换 将:minDigits“1” maxDigits“1” 替换为:minDigits…

Pytorch:模块(Module类)

文章目录 一、Module类介绍1、主要功能2、神经网络模型使用理解a.前向传播示例代码b.关键点 在 PyTorch 中,Module 是一个非常核心的概念,它是所有神经网络层和模型的基础类。torch.nn.Module 是构建所有神经网络的基类,在 PyTorch 中非常重要…

C++之类与对象(2)

目录 一、类的六个默认成员函数简介 二、构造函数 2.1 概念 2.2 特性 三、析构函数 3.1 概念 3.2 特性 四、拷贝构造函数 4.1 概念 4.2 特性 五、运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置的重载 六、const成员 七、取地址及const取地址操作…

太速科技-多路PCIe的阵列计算全国产化服务器

多路PCIe的阵列计算全国产化服务器 多路PCIe的阵列计算全国产化服务器以国产化处理器(海光、飞腾ARM、算能RSIC V)为主板,扩展6-8路PCIe3.0X4计算卡; 计算卡为全国产化的AI处理卡(瑞星微ARM,算能AI&#x…

用Python和Pygame实现简单贪吃蛇游戏

1.pip安装pygame pygam插件安装 pip install 插件名字 # 安装 pip uninstall 插件名字 # 卸载 pip install 插件名字 -i 指定下载的镜像网址 pip show 插件名字 # 查看插件名字 pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple pip show p…