`
insertyou
  • 浏览: 941640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【我所認知的BIOS】—>虛擬存儲機制

阅读更多

【我所認知的BIOS—>虛擬存儲機制

By LightSeed

2009-8-1

在文章的前面我想说,如果您对全局描述符,段选择子,保护模式等,一点概念都没有的话,那么我不建议继续往下看。因为这篇文章是建立在那些基础之上的。这样的话,我建议您看看关于保护模式的资料再继续。比如说:【我所認知的BIOS—>實模式&保護模式有比较简单地介绍。

1、分段管理VS分页管理

X86上的内存管理机制我们可以分为两部分,分页管理机制和分段管理机制。其实他们都是虚拟存储机制。

不管怎么说,这两种机制都是为了能够在同一个CPU上实现多任务(而且任务与任务之间不相互干扰)而做的。我想,看到这里的人肯定会问那么既然他们都是这样的目的,那么为什么要分开来说呢?他们当中有个比较明显(不一定是最重要哦)差别就是段的大小是可变的。(当然在规定的范围内)而页管理机制则每页都是相同大小的。

而且,当我们的CPU运行在保护模式的时候,(某时)必须要用到段的形式,所以说分段管理机制是不能被disable的,而分页管理机制却是可选的。虽然两种机制的存在都是为了实现多任务,程序之间不相互干扰。然而,他们却可以在单任务的时候可以用这两种机制。

不的不再一次引用一下杨季文老师的原话,(呵呵。。。因为他表达的太经典了。)

分页管理机制把线性地址空间和物理地址空间分别划分为大小相同的块,这样的块称为页。通过在线性地址空间的页与物理地址空间的页建立之间建立的映射表,分页管理机制实现线性地址空间到物理地址空间的映射,实现线性地址到物理地址的转换。分页管理机制是可选的,在不采用分页管理机制时,线性地址空间就等同于物理地址空间,线性地址就等于物理地址。

分段管理机制所使用的可变大小的块,使分段管理机制比较适宜处理复杂系统的逻辑分段。存储块的大小可以根据适当的逻辑含义进行定义,而不用考虑固定大小的页所强加的人为限制。每个段可作为独立的单位处理,以简化段的保护及共享。分页机制使用的固定大小的块最适合于管理物理存储器,无论是管理内存还是外存都同样有效。分页管理机制能够有效地支持实现虚拟存储器。

2、逻辑地址,线性地址,物理地址

要说清楚虚拟存储机制,那么逻辑地址,线性地址,物理地址这三个概念又必须要详细讲讲。所以也专门列一个小节。让我们来看看他们的概念,不过在看概念之前,先看看这样一句话。(笔者:提醒您,如果您把这些都想像成保护模式下的内存我想会比较贴切。当然实模式下也是同样的,只是实模式下的段选择子已经被隐藏地很深了。)

分段管理机制可以把CPU能够访问到的内存空间分成更小的可以保护的地址空间。

Linear Address(线性地址):我们把上面句话中“CPU能够访问到的内存空间”叫做线性地址。[笔者:把“更小的可以保护的地址空间”叫做段(
segment
),而段又可以分成若干页。这个概念一定要牢记哦。]

Logical Address(逻辑地址):当我们要去定位自己希望定位的段(segment,不是段选择子哦)时,那么我就需要用到一个指针(pointer)。比如说08FFFFFFF0。那么这个指针就是逻辑地址。逻辑地址又叫做长指针(far pointer)。

Physical Address(物理地址):CPU要访问内存必须要通过时,要给出内存单元的地址。所有的内存单元组成在一起是一个呈线性的空间。每个空间里面存储着我们的数据,而且这每一个空间都有一个唯一的地址,我们将这个唯一的地址就称为物理地址。(笔者:这段话主要是参考《汇编语言》王爽老师着)

3、三个地址之间的联系

我列出了这三个地址的诠释,那么让我们来看看这三个地址究竟又是怎么样联系起来的呢?参见图1

1 三个地址的联系

让我来详细解释一下上面这个图,先看蓝颜色框框中,分别标注了Logical AddressLinear Address SpacePhysical Address Space。在Logical Address中,segment selectorindex的作用。(如果您记得不太清了,烦请您到《实模式与保护模式》这篇文章中去看看,我是怎么诠释的。或者去查一查programming的第三章。)经过计算可以定位所要访问的空间在Linear Address Space中的具体位置。我们先把分页管理机制抛开,那么Linear Address Space就和Physical Address Space直接挂钩了。

4、关于分页管理

4.1分页管理机制的概述

列出了上面三个概念的具体解释了以后,让我们继续深入。(本来不想把分页存储机制牵扯进来,可是后来发觉单单讲分段存储机制是说不清楚的。J

在我们写进入保护模式程序的时候,肯定还记得的,在段描述符中我们必须在相应的位上填上段的属性。(比如说:代码段的属性是只读的,数据段的属性是可读写的等等)那么这就有效地保护了各个段,并且段与段之间相互分离。

不得不提到分页管理机制,正如图1所示,当我们的逻辑地址经过计算到了线性地址了以后,(假如说我们的分页管理机制打开了,相关的寄存器会有标记的。)线性地址中的各位与分页机制翻译的具体定义见图2。不管他们中间是怎么过来的,不过我们的页也肯定是可以准确定位到我们的物理地址的。(怎么去定位,这里不是重点故不细讲,重点是怎么实现虚拟存储的。^.^

2 线性地址翻译成页

假如我们的分页机制是没有打开的,那么我们的线性地址就直接和物理地址映射。但是在我们的多任务计算机系统中往往都是线性地址要远远大于我们普通的物理地址。(笔者:您知道这是为什么么?一定要理解它的定义哦。)这个机制其实是因为我们虚拟了很多的线性地址(笔者:因为CPU确实是可以访问到的)。而虚拟出来的这些线性地址要想和物理定址对应起来,那么CPU的分页管理机制就派上了用场。

关于这些个虚拟的这些线性地址,就是我们平时口中比较常说的虚拟内存了。(笔者:这里是我个人的理解,不知道对不,不对的话还望知道的前辈指点。)

4.2分页管理机制的具体操作

当我们使用分页管理机制的时候(做了那么多的铺垫,终于讲到你了。>.<),段(segment)被分成了若干个页,而且这些页的空间是相等的,典型的就是每个页是4Kbytes。这些页是被放在了物理内存中,或者是放在了我们的硬盘上,并且会在相应的地方(其实就是page directorypage table)留下自己的踪迹。(方便需要访问这个页的时候去找到它。)当我们的任务(task)或者程序(program)要准备访问一个地址的时候,CPU就会通过上面提到的相应的地方去把线性地址翻译成物理地址。假如目前要访问的地址所在的页就在当前的内存中,这个好说,找到相应的页访问就ok了。我们可以来看看图3的示意图。当前在物理内存中的页前面都被做了标记“1当前没有在物理内存中的页都做了标记“0他们就被存储在硬盘中了。

3 页的存储方式

糟糕的是,很多时候我们要访问的页却不是在物理内存中的。这个时候CPU就会产生一个错误的提醒来告知CPU本身。(CPU小子,你要找的页目前不在内存MM那里,你看看是不是放假去了,在硬盘外婆那里?)然后CPU就会通过一系列地操作把存储在其他地方的页调到物理内存中来,当然后面的就执行了呗。不过这个虚拟存储机制究竟体现在哪里的虚拟呢?就在这个段选择子(segment selector)上!它才是重点。我们回味一下,《實模式&保護模式》中就有讲,我们回味一下,见图4是段选择子的定义。

4 段选择子的定义

从图3中我们可以清楚地看到,index其实就是该段在全局描述符表中的index,也是就是该段在其的位置。这个index一共有13bits,那么理想上来看我们可以再全局描述符中可以定义213 个段,而我们的每一个段最大又可以定义(4Gbytes = 232)的段界限,那么通过这种方法,其实我们的CPU就可以访问到213 * 232 就等246 bytes64 T bytes)的空间了,(因为CPU能够访问的到,所以也是线性地址了哦。这句话也是对网友 gssxd说的,通过这种虚拟存储方式就可以让32CPU访问到64 T bytes的空间了。不知道您理解了么?)

5、虚拟存储机制的类比

说实话,我觉得上面这段话,连我自己写的时候都觉得有点拗口,让人迷糊。但是上面的话,是从书面上讲必须要这样说才符合CPU的访问。但是我天生喜欢比较简单地用比喻的方式来表达我的想法。这次也不例外,实在太难说清楚了,所以就打个比方。这个比方就某高中来说吧。(当然为了方便叙述数据不一定是真的哈^^

5.1假设条件

①某高中目前有10个教室可以供学生上课,(类比于物理地址空间Physical Address Space

②由于每个教室可以容纳50个学生同时上课(类比于页 Page,页的容量是50个人)。那么这10个教室就可以供500个学生同时上课了(物理地址空间Physical Address Space的总大小为500)。

③但是这所高中的全部学生却有5000个(嗯,确实是所不小的中学,这5000就类比于Linear Address Space,很显然在这种情况下线性地址可比物理地址大多了。)

④这个高中的教务处真懒,只会到上课的教室去找人。

5.2教务处怎么运营

5.2.1教务处于CPU的一一类比

经过四个条件的约束,显而易见5000个学生是不能同时在10间教室里上课的。没有办法,教务处(类比于CPU)就安排这样的上课方法,学校把5000个学生以班级分开,每个班级50人(这样恰好可以再一件教室里上课呢)。每个班级都必须要到教务处这里来登记一下,你目前是在上课么?(类比于Pagedirectory)。也很显然,如果在教室上课的教务处一查登记记录就知道了。而不上课的班级就给我统统到操场(类比于硬盘很大的外围空间)以班级为单位(方便要上课的时候一起去教室^^)去看火箭队和湖人队的季后赛直播。

经过以上的安排,那么教务处就可以很轻松地安排这些学生的“上课”地方了了。那我们就来模拟一下这个操作的过程。

5.2.2教务处怎么寻找到一个同学?

教务处(CPU)需要找某个班级中的某个同学,那么首先他就去查在登记记录上他所在的班级是在上课呢?还是在操场呢?如果是在教室,那么他就直接去教室找到他,开处分也好,奖励也好随便他了。假如他所在的班级不在操场,对不起,你们这个班级都给我统统到指定教室等到我,同时之前在教室上课的班级到操场上去放松。如此这般。。。每一个班级教务处可以找到学校里的每一个学生了。

5.2.3得出总结提炼精华

最后我们反过来想想这个教务处一共可以管理多少个学生呢?那么我们就要看他的记录本(全局描述符)的大小了。虽然没有5000个位置同时给这么多学生上课,但是教务处却可以找其他地方的位置来虚拟是教室的位置,来让其他同学都在那里“上课”,这就是虚拟存储机制的精髓。到这里不知道您明白我想要表达的意思了么?


教务处管理学生的总数=记录本里班级的个数*每个班级的学生数

=100*50

=5000

有了上面的公式,我们反过来理解CPU能够访问到的所有地址就应该是

CPU能够访问到的所有地址=段选择子个数*每个段的最大界限

=213 * 232

=246 bytes64 Tbytes

备注,为什么上面没有写是页的个数,是因为每个段可以分成若干个页,所以我就用段来说明了。这样的话公式就会比较简便。

6、结束

通过这种虚拟的存储方式,CPU就可以更有效地发挥它的效能,不仅如此这还对安全机制又上了一个台阶。虚拟存储机制的好处真的是太多了。关于段与段之间的安全,等等这里就不是讨论的重点了。到这里关于虚拟存储机制的理解就暂时告一段落了,里面加入了一下我自己的元素,如果您觉得比喻或者理解不恰当的地方还希望您向我提出宝贵的意见,我会进一步完善。谢谢!

分享到:
评论

相关推荐

    【我所认知的 BIOS 】实模式&保护模式切换实例

    在计算机系统中,BIOS(基本输入输出系统)扮演着至关重要的角色,它是一组固化在计算机主板上ROM芯片中...通过阅读《我所认知的 BIOS 》实模式&保护模式切换实例文档,可以更直观地学习这一过程,并通过实践加深理解。

    高教类课件:微机原理与接口技术(第2版).zip

    4. 存储系统:RAM、ROM的工作原理,虚拟内存的概念,高速缓存(Cache)的作用。 5. 指令系统:汇编语言基础,常用指令的解释与应用。 在接口技术部分,主要涵盖以下内容: 1. 输入/输出(I/O)接口:I/O端口的概念...

    《30 天自制操作系统》读书笔记.zip

    这本书通过实践的方式,帮助读者深入理解操作系统的原理和实现过程,从而提升对计算机系统本质的认知。 在阅读这本书的过程中,你可能会接触到以下几个关键知识点: 1. **操作系统的定义与功能**:操作系统是...

    自己动手写操作系统电子书+源代码

    《自己动手写操作系统》是一本深入浅出的教程,旨在帮助读者理解操作系统的运作原理,并通过实际编写操作系统来提升技术认知。这本书不仅包含了丰富的理论知识,还提供了完整的源代码,让学习过程更具实践性。 操作...

    YOLOv8-PyQt5-GUI-pred-insects-mytwu-995识别和分类昆虫种类-检测生态研究和害虫防治+数据集+训练好的模型.zip

    YOLOv8-PyQt5-GUI-pred-insects-mytwu_995识别和分类昆虫种类-检测生态研究和害虫防治+数据集+训练好的模型包含pyqt可视化界面,有使用教程 1. 内部包含标注好的目标检测数据集,分别有yolo格式(txt文件)和voc格式标签(xml文件), 共995张图像, 已划分好数据集train,val, test,并附有data.yaml文件可直接用于yolov5,v8,v9,v10,v11,v12等算法的训练; 2. yolo目标检测数据集类别名:insects(昆虫),包括 army_worm(行军虫)、legume_blister_beetle(豆类起泡叶甲)、red_spider(红蜘蛛)、rice_gall_midge(水稻瘿蚊)、rice_leaf_roller(水稻卷叶螟)、rice_leafhopper(水稻飞虱)、rice_water_weevil(水稻水象甲)、wheat_phloeothrips(小麦皮层蓟马)、white_backed_plant_hopper(白背飞虱)、yellow_rice_borer(水稻二化螟)等 3. yolo项目用途:识别和分类昆虫种类,用于生态研究和害虫防治 4. 可视化参考链接:https://blog.csdn.net/weixin_51154380/article/details/126395695?spm=1001.2014.3001.5502

    在Matlab_Simulink中使用3D动画的帆船模型仿真.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    MATLAB函数曲线图像数据提取与重绘:快速高效的数据可视化解决方案

    内容概要:本文详细介绍了如何利用MATLAB进行函数曲线图像的数据提取、复现重绘及后处理的方法。主要内容涵盖数据准备与导入、数据提取与预处理、图像复现与重绘、图像修改与后处理四个主要阶段。文中强调了程序编写的清晰性和注释的详尽性,确保即使是不熟悉MATLAB编程的用户也能快速理解和修改代码。此外,本文特别指出该服务不含曲线拟合、公式提取及FFT频谱分析等高级分析功能,但能在10分钟内快速出图,提供实惠的价格和服务质量。 适合人群:科研人员、工程师及其他需要进行数据可视化工作的专业人士,尤其是那些希望快速掌握MATLAB绘图技巧的新手。 使用场景及目标:适用于需要将原始图像数据转换为高质量函数曲线图像的各种应用场景,如实验数据分析、工程报告制作等。目标是在短时间内获得精确、美观的图表,同时提高工作效率。 其他说明:本文提供的方法和技术可以帮助用户更好地理解和应用MATLAB的基础绘图功能,为进一步深入学习打下坚实基础。虽然目前不涉及复杂的数学建模或信号处理技术,但对于大多数日常的数据可视化任务来说已经足够强大。

    移动通信复习资料全部答案.docx

    移动通信复习资料全部答案.docx

    自动驾驶领域Lanelet2高精地图解析与全局路径规划实战指南

    内容概要:本文详细介绍了Lanelet2高精地图的解析方法及其在全球路径规划中的应用。首先解释了Lanelet2作为当前主流高精度地图格式之一的特点,特别是它对车道、交通规则等元素的数据结构化表示方式。接着展示了如何利用Python和C++代码片段来加载和处理Lanelet2格式的地图,包括正确设置投影参数、遍历车道以及处理特定类型的车道(如左转车道)。然后深入探讨了全局路径规划的具体实现步骤,强调了选择合适搜索半径的重要性,并分享了一些实际项目中遇到的问题及解决方案,如坐标系转换错误导致的地图偏移、断头路引发的死循环等问题。最后提醒开发者注意地图制作过程中的常见陷阱,建议使用手动可视化工具进行细致检查。 适用人群:从事自动驾驶相关领域的工程师和技术爱好者,尤其是那些需要理解和使用Lanelet2高精地图进行开发的人群。 使用场景及目标:帮助读者掌握Lanelet2高精地图的基本概念和关键技术点,能够独立完成从地图加载到全局路径规划的一系列任务,避免常见的开发误区。 其他说明:文中提供的实例代码和实践经验对于初学者来说非常有价值,有助于快速入门并应用于实际项目中。

    第3章客户关系管理软件系统.ppt

    第3章客户关系管理软件系统.ppt

    GD32F303CCT6-LED点灯

    使用GD32F303芯片作为主控MCU,通过PB3输出1秒周期的高低电平点亮LED灯

    电子商务网站建设试题二及答案.docx

    电子商务网站建设试题二及答案.docx

    数组信号参数最大似然估计方差模拟 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    行星齿轮系统非线性动力学模型与求解策略研究

    内容概要:本文探讨了行星齿轮系统的非线性求解及其与齿轮动力学和非线性动力学的关系。首先介绍了齿轮动力学的基础概念,包括基本方程和各参数的意义。接着详细解释了行星齿轮系统中存在的非线性因素,特别是时变啮合刚度这一重要特征,并通过Python代码进行了模拟展示。最后,文章展示了如何应用Runge-Kutta方法和其他数值解法来解决含有非线性因素的行星齿轮动力学问题,强调了这类研究对于机械系统优化设计的重要意义。 适合人群:从事机械工程领域的研究人员和技术人员,尤其是关注行星齿轮系统动态特性的专业人士。 使用场景及目标:适用于需要深入了解行星齿轮非线性行为的研究项目或工程项目,旨在提高对行星齿轮系统复杂动力学特性的认识,从而改进设计和提升可靠性。 其他说明:文中提供了具体的Python代码实例用于演示关键概念,有助于读者更直观地理解理论知识并应用于实际工作中。

    基于MATLAB的教育桥梁,连接机器人领域的理论.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Python网络爬虫Scrapy框架详解:架构、组件与实战应用

    内容概要:本文全面解析了Python网络爬虫框架Scrapy。首先介绍了Scrapy的基本概念、特点及其与Requests+BeautifulSoup的区别,强调Scrapy更适合生产级别的爬虫项目,特别是需要高并发、分布式、持久化存储的场景。接着详细阐述了Scrapy的架构组件,包括Scrapy Engine、Scheduler、Downloader、Spiders、Item Pipeline等,并解释了各组件的功能及相互关系。随后讲解了Scrapy的安装与项目创建过程,包括环境准备、项目结构、创建和运行第一个Spider。文章还深入探讨了核心组件如Spider、Item、Item Pipeline、Downloader Middleware和Spider Middleware的具体实现与应用场景。此外,介绍了选择器(CSS和XPath)的使用技巧以及数据清洗方法。高级技巧部分涵盖了登录处理、JavaScript渲染页面的解决方案、分布式爬虫的实现以及性能优化策略。最后,通过实战案例展示了如何构建电商网站商品爬虫和新闻网站爬虫,同时提供了Scrapy的部署与监控方法,包括使用ScrapyD、Prometheus+Grafana等工具。; 适合人群:具备一定Python编程基础,对网络爬虫感兴趣的开发者,尤其是希望构建高效、稳定、可扩展爬虫系统的工程师。; 使用场景及目标:①理解Scrapy框架的工作原理及其优势;②掌握Scrapy的安装配置、项目创建及各组件的具体使用;③学习如何处理复杂的网页结构和动态加载的内容;④实现高并发、分布式爬虫并进行有效的性能优化;⑤部署和监控爬虫系统,确保其稳定运行。; 其他说明:本文不仅提供了理论知识,还包含了大量的代码示例和实战经验分享,帮助读者快速上手Scrapy并应用于实际项目中。此外,文中还提及了Scrapy的最佳实践、常见问题解决方法以及未来发展方向,为深入学习和研究提供了丰富的资源。

    PLC在电网备用电源自动投入中的双电源切换组态应用及其实现 全面版

    内容概要:本文介绍了PLC(Programmable Logic Controller)在电网备用电源自动投入系统中的应用,重点讨论了双电源切换组态的具体实现方法。文章首先阐述了双电源切换组态的基本原理,然后详细解析了梯形图接线图原理图、IO分配和组态画面的设计。最后,通过实际应用中的代码分析,展示了如何通过合理的程序设计来确保系统的稳定性和可靠性。 适合人群:从事电力系统自动化领域的工程师和技术人员,尤其是对PLC编程和双电源切换感兴趣的读者。 使用场景及目标:适用于希望深入了解PLC在电力系统中具体应用的技术人员,帮助他们掌握双电源切换组态的设计和实现方法,提升系统的稳定性和可靠性。 其他说明:文中提供了详细的梯形图接线图原理图、IO分配和组态画面展示,有助于读者更好地理解和实践相关技术。

    这种方法处理基于Gompertz分布函数的各向异性扩散滤波。matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics