【我所認知的BIOS】—>虛擬存儲機制
By LightSeed
2009-8-1
在文章的前面我想说,如果您对全局描述符,段选择子,保护模式等,一点概念都没有的话,那么我不建议继续往下看。因为这篇文章是建立在那些基础之上的。这样的话,我建议您看看关于保护模式的资料再继续。比如说:【我所認知的BIOS】—>實模式&保護模式有比较简单地介绍。
1、分段管理VS分页管理
X86上的内存管理机制我们可以分为两部分,分页管理机制和分段管理机制。其实他们都是虚拟存储机制。
不管怎么说,这两种机制都是为了能够在同一个CPU上实现多任务(而且任务与任务之间不相互干扰)而做的。我想,看到这里的人肯定会问那么既然他们都是这样的目的,那么为什么要分开来说呢?他们当中有个比较明显(不一定是最重要哦)差别就是段的大小是可变的。(当然在规定的范围内)而页管理机制则每页都是相同大小的。
而且,当我们的CPU运行在保护模式的时候,(某时)必须要用到段的形式,所以说分段管理机制是不能被disable的,而分页管理机制却是可选的。虽然两种机制的存在都是为了实现多任务,程序之间不相互干扰。然而,他们却可以在单任务的时候可以用这两种机制。
不的不再一次引用一下杨季文老师的原话,(呵呵。。。因为他表达的太经典了。)
分页管理机制把线性地址空间和物理地址空间分别划分为大小相同的块,这样的块称为页。通过在线性地址空间的页与物理地址空间的页建立之间建立的映射表,分页管理机制实现线性地址空间到物理地址空间的映射,实现线性地址到物理地址的转换。分页管理机制是可选的,在不采用分页管理机制时,线性地址空间就等同于物理地址空间,线性地址就等于物理地址。
分段管理机制所使用的可变大小的块,使分段管理机制比较适宜处理复杂系统的逻辑分段。存储块的大小可以根据适当的逻辑含义进行定义,而不用考虑固定大小的页所强加的人为限制。每个段可作为独立的单位处理,以简化段的保护及共享。分页机制使用的固定大小的块最适合于管理物理存储器,无论是管理内存还是外存都同样有效。分页管理机制能够有效地支持实现虚拟存储器。
2、逻辑地址,线性地址,物理地址
要说清楚虚拟存储机制,那么逻辑地址,线性地址,物理地址这三个概念又必须要详细讲讲。所以也专门列一个小节。让我们来看看他们的概念,不过在看概念之前,先看看这样一句话。(笔者:提醒您,如果您把这些都想像成保护模式下的内存我想会比较贴切。当然实模式下也是同样的,只是实模式下的段选择子已经被隐藏地很深了。)
分段管理机制可以把CPU能够访问到的内存空间分成更小的可以保护的地址空间。
|
Linear Address(线性地址):我们把上面句话中“CPU能够访问到的内存空间”叫做线性地址。[笔者:把“更小的可以保护的地址空间”叫做段(
segment),而段又可以分成若干页。这个概念一定要牢记哦。]
Logical Address(逻辑地址):当我们要去定位自己希望定位的段(segment,不是段选择子哦)时,那么我就需要用到一个指针(pointer)。比如说08:FFFFFFF0。那么这个指针就是逻辑地址。逻辑地址又叫做长指针(far pointer)。
Physical Address(物理地址):CPU要访问内存必须要通过时,要给出内存单元的地址。所有的内存单元组成在一起是一个呈线性的空间。每个空间里面存储着我们的数据,而且这每一个空间都有一个唯一的地址,我们将这个唯一的地址就称为物理地址。(笔者:这段话主要是参考《汇编语言》王爽老师着)
3、三个地址之间的联系
我列出了这三个地址的诠释,那么让我们来看看这三个地址究竟又是怎么样联系起来的呢?参见图1。
图1 三个地址的联系
让我来详细解释一下上面这个图,先看蓝颜色框框中,分别标注了Logical Address,Linear Address Space,Physical Address Space。在Logical Address中,segment selector起index的作用。(如果您记得不太清了,烦请您到《实模式与保护模式》这篇文章中去看看,我是怎么诠释的。或者去查一查programming的第三章。)经过计算可以定位所要访问的空间在Linear Address Space中的具体位置。我们先把分页管理机制抛开,那么Linear Address Space就和Physical Address Space直接挂钩了。
4、关于分页管理
4.1分页管理机制的概述
列出了上面三个概念的具体解释了以后,让我们继续深入。(本来不想把分页存储机制牵扯进来,可是后来发觉单单讲分段存储机制是说不清楚的。J)
在我们写进入保护模式程序的时候,肯定还记得的,在段描述符中我们必须在相应的位上填上段的属性。(比如说:代码段的属性是只读的,数据段的属性是可读写的等等)那么这就有效地保护了各个段,并且段与段之间相互分离。
不得不提到分页管理机制,正如图1所示,当我们的逻辑地址经过计算到了线性地址了以后,(假如说我们的分页管理机制打开了,相关的寄存器会有标记的。)线性地址中的各位与分页机制翻译的具体定义见图2。不管他们中间是怎么过来的,不过我们的页也肯定是可以准确定位到我们的物理地址的。(怎么去定位,这里不是重点故不细讲,重点是怎么实现虚拟存储的。^.^)
图2 线性地址翻译成页
假如我们的分页机制是没有打开的,那么我们的线性地址就直接和物理地址映射。但是在我们的多任务计算机系统中往往都是线性地址要远远大于我们普通的物理地址。(笔者:您知道这是为什么么?一定要理解它的定义哦。)这个机制其实是因为我们虚拟了很多的线性地址(笔者:因为CPU确实是可以访问到的)。而虚拟出来的这些线性地址要想和物理定址对应起来,那么CPU的分页管理机制就派上了用场。
关于这些个虚拟的这些线性地址,就是我们平时口中比较常说的虚拟内存了。(笔者:这里是我个人的理解,不知道对不,不对的话还望知道的前辈指点。)
4.2分页管理机制的具体操作
当我们使用分页管理机制的时候(做了那么多的铺垫,终于讲到你了。>.<),段(segment)被分成了若干个页,而且这些页的空间是相等的,典型的就是每个页是4Kbytes。这些页是被放在了物理内存中,或者是放在了我们的硬盘上,并且会在相应的地方(其实就是page directory,page table)留下自己的踪迹。(方便需要访问这个页的时候去找到它。)当我们的任务(task)或者程序(program)要准备访问一个地址的时候,CPU就会通过上面提到的相应的地方去把线性地址翻译成物理地址。假如目前要访问的地址所在的页就在当前的内存中,这个好说,找到相应的页访问就ok了。我们可以来看看图3的示意图。当前在物理内存中的页前面都被做了标记“1”当前没有在物理内存中的页都做了标记“0”他们就被存储在硬盘中了。
图3 页的存储方式
糟糕的是,很多时候我们要访问的页却不是在物理内存中的。这个时候CPU就会产生一个错误的提醒来告知CPU本身。(CPU小子,你要找的页目前不在内存MM那里,你看看是不是放假去了,在硬盘外婆那里?)然后CPU就会通过一系列地操作把存储在其他地方的页调到物理内存中来,当然后面的就执行了呗。不过这个虚拟存储机制究竟体现在哪里的虚拟呢?就在这个段选择子(segment selector)上!它才是重点。我们回味一下,《實模式&保護模式》中就有讲,我们回味一下,见图4是段选择子的定义。
图4 段选择子的定义
从图3中我们可以清楚地看到,index其实就是该段在全局描述符表中的index,也是就是该段在其的位置。这个index一共有13个bits,那么理想上来看我们可以再全局描述符中可以定义213 个段,而我们的每一个段最大又可以定义(4Gbytes = 232)的段界限,那么通过这种方法,其实我们的CPU就可以访问到213 * 232 就等246 bytes(64 T bytes)的空间了,(因为CPU能够访问的到,所以也是线性地址了哦。这句话也是对网友 gssxd说的,通过这种虚拟存储方式就可以让32位CPU访问到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人(这样恰好可以再一件教室里上课呢)。每个班级都必须要到教务处这里来登记一下,你目前是在上课么?(类比于Page的directory)。也很显然,如果在教室上课的教务处一查登记记录就知道了。而不上课的班级就给我统统到操场(类比于硬盘很大的外围空间)以班级为单位(方便要上课的时候一起去教室^^)去看火箭队和湖人队的季后赛直播。
经过以上的安排,那么教务处就可以很轻松地安排这些学生的“上课”地方了了。那我们就来模拟一下这个操作的过程。
5.2.2教务处怎么寻找到一个同学?
教务处(CPU)需要找某个班级中的某个同学,那么首先他就去查在登记记录上他所在的班级是在上课呢?还是在操场呢?如果是在教室,那么他就直接去教室找到他,开处分也好,奖励也好随便他了。假如他所在的班级不在操场,对不起,你们这个班级都给我统统到指定教室等到我,同时之前在教室上课的班级到操场上去放松。如此这般。。。每一个班级教务处可以找到学校里的每一个学生了。
5.2.3得出总结提炼精华
最后我们反过来想想这个教务处一共可以管理多少个学生呢?那么我们就要看他的记录本(全局描述符)的大小了。虽然没有5000个位置同时给这么多学生上课,但是教务处却可以找其他地方的位置来虚拟是教室的位置,来让其他同学都在那里“上课”,这就是虚拟存储机制的精髓。到这里不知道您明白我想要表达的意思了么?
教务处管理学生的总数=记录本里班级的个数*每个班级的学生数
=100*50
=5000
有了上面的公式,我们反过来理解CPU能够访问到的所有地址就应该是
CPU能够访问到的所有地址=段选择子个数*每个段的最大界限
=213 * 232
=246 bytes(64 Tbytes)
备注,为什么上面没有写是页的个数,是因为每个段可以分成若干个页,所以我就用段来说明了。这样的话公式就会比较简便。
6、结束
通过这种虚拟的存储方式,CPU就可以更有效地发挥它的效能,不仅如此这还对安全机制又上了一个台阶。虚拟存储机制的好处真的是太多了。关于段与段之间的安全,等等这里就不是讨论的重点了。到这里关于虚拟存储机制的理解就暂时告一段落了,里面加入了一下我自己的元素,如果您觉得比喻或者理解不恰当的地方还希望您向我提出宝贵的意见,我会进一步完善。谢谢!
分享到:
相关推荐
【虚拟BIOS模式练习工具】是一款专为学习和熟悉BIOS操作设计的实用软件,它在Windows XP环境下即可运行,提供了模拟真实BIOS环境的功能。BIOS(基本输入输出系统)是计算机启动时加载的第一个软件,它负责初始化硬件...
值得注意的是,有些电脑的BIOS可能不提供虚拟化技术的开关,或者即使CPU支持虚拟化,也可能由于其他软件的独占使用导致无法开启。例如,某些杀毒软件可能会占用硬件虚拟化资源。在这种情况下,你可能需要在软件设置...
在计算机系统中,BIOS(基本输入输出系统)扮演着至关重要的角色,它是一组固化在计算机主板上ROM芯片中...通过阅读《我所认知的 BIOS 》实模式&保护模式切换实例文档,可以更直观地学习这一过程,并通过实践加深理解。
这几年来,蛮多小伙伴都给我发邮件拿PDF版本。几年前写的文章格式什么的实在是太粗糙。最近我把所有的文章都整理了一下。其实该想法已经早就有了,只是最近才开始空闲。现在我把所有的文章整理好了以后上传到了CSDN...
在本场景中,我们将讨论如何在VM虚拟机中安装西门子S7-1507S和1505S软PLC所需的BIOS文件。 西门子S7-1507S和1505S是工业控制领域的高性能PLC(可编程逻辑控制器),常用于自动化设备和系统的控制。这些PLC可以运行...
存储产品双BIOS技术简介.doc
最近比较热门的nas系统UnRaid在intel的cpu核显直通给虚拟机时,有时需要加载核显的虚拟bios才能成功,经测试,我的UHD630集显用这个bios是可以的,希望可以帮到有同样需求的读者。
**BIOS开启虚拟化技术详解** BIOS,全称基本输入输出系统,是个人计算机启动时执行的第一套程序。它嵌入在计算机主板上的ROM芯片中,负责初始化硬件设备、加载操作系统等一系列启动过程。BIOS并非操作系统的一部分...
**虚拟BIOS练习程序** 虚拟BIOS练习程序是一款专为电脑爱好者设计的学习工具,它模拟了真实的BIOS环境,让用户能够在安全的环境中了解并实践BIOS设置,而无需担心对实际硬件造成影响。该程序特别适合那些希望深入...
随着技术的发展,传统的文本模式BIOS逐渐被更现代、用户友好的图形化BIOS(UEFI,Unified Extensible Firmware Interface)所取代。在“主流台式机主板BIOS虚拟界面”这一主题下,我们将深入探讨这些虚拟界面的特点...
虚拟BIOS练习工具和BIOS完全手册是针对计算机硬件...通过虚拟BIOS练习工具,用户可以在不影响实际系统的前提下,安全地探索和实验,而BIOS完全手册则能提供理论支持和实践经验,确保用户能够正确理解和应用所学知识。
7. 虚拟化支持:BIOS在现代计算中的角色也扩展到了虚拟化支持,如Intel的VT-x和AMD的V技术,这些技术让BIOS能够更好地配合虚拟机管理程序运行多个操作系统实例。 8. UEFI替代:随着技术的发展,传统BIOS逐渐被UEFI...
1. **BIOS中断调用**:BIOS提供了通过中断机制与硬件交互的接口。例如,`int 10h`用于视频服务,`int 16h`处理键盘输入,`int 13h`则处理磁盘I/O。`bios.h`会定义这些中断的宏,方便程序员直接调用。 2. **BIOS函数...
2. **CMOS**:CMOS存储了BIOS的配置信息,如日期、时间、硬件设置等。当计算机断电后,这些信息仍能被保留,因为CMOS芯片由主板上的电池供电。 3. **BIOS设置**:用户可以通过BIOS设置程序来更改系统的启动顺序、...
2. **增加新特性**:如标题所示,此升级文件特别指出可以开启虚拟化。虚拟化技术允许在同一台物理机器上运行多个独立的操作系统实例,极大地提高了资源利用率和灵活性,对于开发者和数据中心来说尤其重要。 3. **...
BIOS练习器是一款专门针对电脑初学者的BIOS设置学习软件,软件只有一个文件,下载解压后直接双击即可运行。软件全真模拟AWARD BIOS的设置界面,采用与AWARD BIOS设置完全相同的操作方法和快捷按键,任何对AWARD BIOS...
在清华同方X46H这款机器上,由于其早期版本的BIOS不支持硬件虚拟化功能,导致用户无法充分利用VMware这样的虚拟机软件。硬件虚拟化是一项关键的技术,允许一个物理系统模拟多个独立的虚拟环境,使得在同一台电脑上...
本资源提供的"qemu虚拟机 bios源码",主要是用于QEMU虚拟机的BIOS实现,这对于理解虚拟化技术、调试虚拟机启动问题或者定制自己的BIOS具有极高的价值。源代码可以让你深入探究BIOS的工作原理,包括如何处理中断、...