博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逻辑地址、线性地址、物理地址以及虚拟存储器
阅读量:6843 次
发布时间:2019-06-26

本文共 1186 字,大约阅读时间需要 3 分钟。

http://blog.csdn.net/mrbuffoon/article/details/48947267

Note:本文是基于80×86微处理器进行原理总结。

在内存地址上,我们要区分逻辑地址、线性地址以及物理地址这三个概念。

逻辑地址:包含在机器语言指令中用来指定一个操作数或者一条指令的地址。每一个逻辑地址都由一个段选择符和段偏移量组成。
线性地址:也称为虚拟地址,也不是一个真实的地址,他是对应了硬件页式内存转换前地址。
物理地址:就是物理内存中的真正地址。

内存控制单元(MMU)通过分段单元的硬件电路把一个逻辑地址转换为线性地址,接着,分页单元的硬件电路把线性地址转换为物理地址。

逻辑地址->线性地址:

逻辑地址中有段选择符和段偏移量两部分,首先通过段选择符可以得到一个线性段基址,然后加上段偏移量就能得到线性地址。这样,逻辑地址转换为线性地址。
线性地址->物理地址:
抽象出来看,线性地址可以目录、页表、偏移量三部分字段,通过页目录表和页表这两种转换表,可以将线性地址转换为物理地址。线性地址中的目录字段指明所要访问的内存处于页目录表中的哪一个页目录表项,由页目录表项中的内容可以知道要访问的内存在哪一个页表中;线性地址中的页表字段指明了所要访问的内存处于已经查到的页表中的哪一个页表项,由页表项中的内容可以知道要访问的内存在哪一页中;线性地址中的偏移量字段指明了所要访问的内存处于已经查到的页中的具体偏移位置,这个位置上就记录着对应的真正的物理地址。这样,线性地址就转换为了物理地址。

虚拟存储器:

现在机器都会有虚拟存储器这种机制,主要是用来解决机器实际内存不足的问题。计算机系统的内存主要由半导体存储器组成,由于工艺和成本的原因,内存的容量受到限制。然而,计算机系统软件和应用软件的功能不断增强,程序规模迅速扩大,要求内存的容量越大越好,这就产生了矛盾。为了给大的程序提供方便,使它们摆脱内存容量的限制,可以由操作系统把内存和辅存这两级存储系统管理起来,实现自动覆盖。也就是说,一个大作业在执行时,其一部分地址空间在内存,另一部分在辅存,当所访问的信息不在内存时,则由操作系统而不是程序员来安排I/O指令,把信息从辅存调入内存。从效果上来看,好像为用户提供了一个存储容量比实际内存大得多的存储器,用户无需考虑所编程序在内存中是否放得下或放在什么位置等问题。我们称这种存储器为虚拟存储器。
程序运行时,CPU以逻辑地址来访问内存,由辅助硬件找出逻辑地址和物理地址之间的对应关系,并判断这个逻辑地址对应的物理地址内容是否已装入内存。如果已在内存中,则CPU可直接访问内存的实际物理单元;如果不在内存中,则把包含这个字的一个存储块从外存调入内存后再由CPU访问。如果内存已满,则由替换算法从内存中将暂不运行的一块调回外存,再从外存调入新的一块到内存。

你可能感兴趣的文章
开源如何在云上存活?
查看>>
Android 网络基础之 HTTP
查看>>
ES6实现继承
查看>>
有擎企业系统v1.0.0 积木式搭建网站,页面构建更灵活
查看>>
小葵花妈妈课堂开课了:《Handler Looper Message 浅析》
查看>>
26.Azure备份服务器(下)
查看>>
Redhat 5.7登陆后提示证书丢失
查看>>
Python基础学习代码之面向对象编程
查看>>
我的友情链接
查看>>
Oracle Data Guard 理论知识(二)
查看>>
用wget一次下载所有链接, 下载文件夹
查看>>
Collect logs from the Windows servers
查看>>
HT图形组件设计之道(四)
查看>>
用vbs删除前一天创建的备份文件
查看>>
聊聊同步、异步、阻塞与非阻塞
查看>>
BlockingQueue队列生产者消费者示例
查看>>
excel VBA中如何模拟键盘输入
查看>>
YUV420查表法高效、无失真的转换为RGB32格式
查看>>
C# 程序中如何获取当前目录
查看>>
lucene初识
查看>>