计算机系统基础 5 物理地址的形成

news2024/11/29 12:32:19

历史

        早期,程序员自己管理主存,通过分解程序并覆盖主存的方式执行程序

  •         取指令和存储操作数所有的地址都是物理地址;
  •         执行速度快,无需进行地址转换;
  •         未采用虚拟存储机制。

        1961年有人提出自动执行overlay的方式,把程序员从大量繁琐的存储管理工作中解放出来,使得程序员编程时不用管主存容量的大小。

基本思想

  • 地址空间主存容量的概念区分开来,程序员在地址空间里编写程序,程序则在真正的内存中运行;
  • 由一个专门的机制实现地址空间和实际主存之间的映射
  • CPU 中的 MMU (Memory Management Unit) 负责逻辑地址(即虚拟地址)转换为内存的物理地址

逻辑地址(即虚拟地址)转换为内存的物理地址的方式:

分页式
分段式
段页式

分段 

        根据程序的模块化性质,按程序的逻辑结构划分成多个相对独立的部分,称为段;

        一个程序可以有多个代码段;

        一个程序可以有多个数据段;

        段通常有段名、段起点、段长、段属性等信息

        C语言程序中,变量的定义和指令写在一起,无分段的概念

        机器语言层次上,是要分段的:在C程序编译时,将变量的空间分配和指令分开,分别放在不同段中。

主存分段管理

        在分段内存模型中,每个分段通常加载不同的分段选择器,以便每个段寄存器指向线性地址空间内的不同段。

主存物理地址的形成 

        实方式 

物理地址 = (段寄存器)左移4位 +偏移地址

  • 32位CPU与8086一样,只能寻址1M物理存储空间
  • 可以访问6个段:CS, DS, SS, ES, FS, GS,每个段至多64K
  • 段开始单元的物理地址 /16➡段址
  • 段中某一存储单元的地址用两部分表示——“段首地址:偏移地址”,称二维的逻辑地址。

        8086中,只有4个段寄存器 CS, DS, ES, SS 

  •         在代码段中取指令时:指令物理地址 PA= (CS) 左移四位 + (IP) ,使用的是IP, 而不是EIP
  •         在数据段中读/写数据时:数据的物理地址 PA = (DS或ES)左移四位 + 16位偏移地址  (偏移地址由寻址方式确定)
  •         在堆栈操作时:栈顶的物理地址 PA = (SS) 左移四位 + (SP)

        保护方式 

               在多任务环境下,系统中有多个程序在运行,程序之间要隔离。

        分段是存储管理的一种方式,为保护提供基础,不同程序在不同段中,一个程序可以包含多个段,段用于封闭具有共同属性的存储区域;

        描述符

                 存放为保护一个段需要的信息

  • 段的起始位置(段基地址)
  • 段的大小(段界限)
  • 段的特权级
  • 段的属性(是代码段、数据段还是堆栈段?数据段是否可写?代码段是否可读出?)
  •  段的位置(在内存还是在磁盘?)
  • 段的类型(在系统段还是用户段?)
  • 段的使用(段被访问过,还是没有?)

        描述符表

                描述符的集合。

        局部描述符表:一个LDT,是一个系统段,最大可为64KB,最多可存放8192个描述符。

        对每一个程序,都建立一个局部描述符表(LDT)

        全局描述符表:只有一个。GDT最大可为64KB,存放8192个描述符。包括:

  •         操作系统所使用的段的描述符;
  •         各个LDT段的描述

        保护方式下物理地址的形成 

                1——从虚拟地址到线性地址 
xxxx: cs、ds、ss、es、fs、gs
xxxx : yyyyyyyy 到线性地址的映射

        xxxx指出找相应段描述符的方式,称段选择符

        1. TI 位为 0 (操作系统段)

GDTR 寄存器中获取 GDT 的基址;
GDT 表中 , XXXX 的高 13 位作为索引,取出一个描述符 A
描述符 A 中的段基地址 + yyyyyyyy : 为要访问单元的 线性地址。

        2. 若TI 位为 1 (用户程序段) 

    • GDTR 寄存器中获取 GDT 的基址;
GDT 表中 , LDTR 的高 13 位作为索引,取出一个描述符 A
描述符 A 描述的段为一个 LDT (LDT_A )
XXXX 的高 13 位,作为索引,在 LDT_A 段中找到描述符 P_A
P_A 描述段的基址+ yyyyyyyy 线性地址。

                2——从线性地址到物理地址 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【动手学深度学习-pytorch】9.2长短期记忆网络(LSTM)

长期以来,隐变量模型存在着长期信息保存和短期输入缺失的问题。 解决这一问题的最早方法之一是长短期存储器(long short-term memory,LSTM) (Hochreiter and Schmidhuber, 1997)。 它有许多与门控循环单元( 9.1节&…

【学习笔记】java项目—苍穹外卖day04

文章目录 1. 新增套餐1.1 需求分析和设计1.2 代码实现1.2.1 DishController1.2.2 DishService1.2.3 DishServiceImpl1.2.4 DishMapper1.2.5 DishMapper.xml1.2.6 SetmealController1.2.7 SetmealService1.2.8 SetmealServiceImpl1.2.9 SetmealMapper1.2.10 SetmealMapper.xml1.…

HarborCDN技术分析

一、介绍 简要介绍 ​​Harbor​​ 是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker C…

NC269391 炸鸡块哥哥的粉丝题

题目描述 智乃作为炸鸡块哥哥的粉丝,做了一场炸鸡块哥哥的比赛后得出一个结论,那就是炸鸡块哥哥的话,最多只能信半句。 现在给你一个长度为N的字符串S,请输出前 个字符,表示只能相信半句话。 例如当炸鸡块哥哥说&…

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度,又有技术细节、数学原理的关于深度学习的书籍,供自己学习,也推荐给我的学生学习。虽浏览文献无数,但一直没有心仪的目标。两周前,刘升容女士将她的译作《深度学习计…

python安装删除以及pip的使用

目录 你无法想象新手到底会在什么地方出问题——十二个小时的血泪之言! 问题引入 python modify setup 隐藏文件夹 环境变量的配置 彻底删除python 其他零碎发现 管理员终端 删不掉的windous应用商店apps 发现问题 总结 你无法想象新手到底会在什么地方…

(学习日记)2024.03.27:UCOSIII第二十四节:任务状态

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

Java毕业设计 基于SSM新闻管理系统

Java毕业设计 基于SSM新闻管理系统 SSM jsp 新闻管理系统 功能介绍 用户:首页 图片轮播 查询 登录 注册 新闻正文 评论 广告 社会新闻 天下新闻 娱乐新闻 个人中心 个人收藏 管理员:登录 用户管理 新闻管理 新闻类型管理 角色:用户 管理员…

笔记本电脑上部署LLaMA-2中文模型

尝试在macbook上部署LLaMA-2的中文模型的详细过程。 (1)环境准备 MacBook Pro(M2 Max/32G); VMware Fusion Player 版本 13.5.1 (23298085); Ubuntu 22.04.2 LTS; 给linux虚拟机分配8*core CPU 16G RAM。 我这里用的是16bit的量化模型,…

python实战之进阶篇(一)

定义类 1. 构造方法 2. 实例方法 3. 类方法 类似于Java中的静态方法, 使用方式: 类名.类方法 4. 私有变量 5. 私有方法 6. 使用属性set和get

stm32再实现感应开关盖垃圾桶

一、项目需求 检测靠近时,垃圾桶自动开盖并伴随滴一声,2秒后关盖 发生震动时,垃圾桶自动开盖并伴随滴一声,2秒后关盖 按下按键时,垃圾桶自动开盖并伴随滴一声,2秒后关盖 硬件清单 SG90 舵机,…

MySQL生产环境常见故障及解决方案汇总

MySQL生产环境常见故障及解决方案汇总 1. MySQL主从同步异常故障1.1. 情景说明1.2. 排查过程1.3. 数据同步2. MySQL慢查询故障1. MySQL主从同步异常故障 1.1. 情景说明 MySQL主库网卡需要更换IP地址,并将原IP地址配置为MySQL集群的VIP地址,上层应用程序其实不需要更改连接My…

牛客练习赛123 A~C

A.炸鸡块哥哥的粉丝题 输出字符串的前 ⌈ n 2 ⌉ \lceil \frac{n}{2} \rceil ⌈2n​⌉ 个字符 void solve() {int n;string s;cin >> n >> s;cout << s.substr(0, (n 1) / 2); }B.智乃想考一道鸽巢原理 当小球总个数为奇数时&#xff0c;贪心的留下 1 个…

(C++笔试题)选择题+编程题

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 选择题 第一道 下面对析构函数的正确描述是&#xff08;&#xff09; A. 系统不能提供默认的析构函数B. 析构函数必须由用户定义C. 析构函数没有参数D. 析构函数可以设置默认参数 解析&#xff1a; 正确描述析构函数的…

【独立开发前线】Vol.27 为什么独立开发者需要一个网站?

现在很多内容创造者都把主要平台放在了第三方平台上&#xff0c;包括像知乎、B站、头条等等&#xff0c;但即使在2024年&#xff0c;我依然建议你做一个完全属于你的网站。 为什么呢&#xff1f; 你有没有在微信或知乎看到过这种拦截页面&#xff1f; 你花了好大的精力写了一…

关于github提交失败的问题

问题描述 Username for https://github.com: LAL-Better Password for https://LAL-Bettergithub.com: remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/get-started/getting-started-with-git/abo…

线程的通信

1.需求(为什么需要线程通信) 当我们需要多个线程完成同一任务时&#xff0c;并且希望他们有规律的执行&#xff0c;那么多线程之间需要一些通信机制&#xff0c;并且可以协调他们的工作&#xff0c;以此实现多个线程共同操作共享数据. 例 : A做包子&#xff0c;B吃包子&#…

SAP Fiori开发中的JavaScript基础知识9 - 代码注释,严格模式,JSON

1 背景 本文将介绍JavaScript编程中的三个小知识点&#xff1a;也即代码注释&#xff0c;严格模式&#xff0c;JSON文件。 2 代码注释 JavaScript的代码注释方式如下&#xff1a; // Single line comment/* Multi line comment */3 严格模式 JavaScript的"strict mod…

vue3封装Element表格自适应

表格高度自适应 分页跟随表格之后 1. 满屏时出现滚动条 2. 不满屏时不显示滚动条 坑 表格设置maxHeight后不出现滚动条 解决方案 表格外层元素设置max-height el-table–fit 设置高度100% .table-box {max-height: calc(100% - 120px); } .el-table--fit {height: 100%; }示例代…

rust使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令&#xff0c;就需要知道对应的平台是windows还是linux&#xff0c;如果是windows就需要调用cmd命令&#xff0c;如果是linux平台&#xff0c;就需要调用sh命令&#xff0c;所以可以通过cfg!实现不同平台的判断&#xff0c;然后调用不同…