学习笔记
《x86汇编语言:从实模式到保护模式》
https://www.jianshu.com/p/d481cb547e9f
代码运行
- 运行的效果就是,三个任务之间(内核任务、用户任务A、用户任务B)来回切换;
代码使用
-
nasmide.exe 编译源码文件 :主引导加载程序
c17_mbr.asm
,内核程序c17_core.asm
,用户程序Ac17-1.asm
,用户程序Bc17-2.asm
; -
fixvhdwr.exe 写扇区二进制
.bin
文件:c17_mbr.asm.bin(逻辑扇区号LBA:0)
、c17_core.bin(LBA:1)
、c17-1.bin(LBA:50)
,c17-2.bin(LBA:100)
; -
运行
VM virtual box
.
本章习题
本章习题 一
1、思考一下,在没有刷新TLB的情况下,为什么第二次调用
load_relocate_program
过程时会出现错误?
我的思考
-
0、TLB:(translation lookaside buffer),又称转换后援缓冲器、转换旁路缓冲器、转换后备缓冲器、快表;
-
1、在分页模式下,当段部件发出一个线性地址时,处理器用线性地址的高20位来查找TLB,如果找到匹配项(命中),则直接使用其数据部分的物理地址作为转换用的地址;如果检索不成功(不中),则处理器还得花时间访问内存中的页目录表和页表,找到那个页表项,然后将它填写到TLB中,以备后用。
-
2、TLB的格式
图17—19 TLB的结构
- 3、既然如此,第二次调用的
load_relocate_program
的时候,我们知道,由于每个用户任务都会有自己的TCB
,并且线性地址都从0x00000000
开始分配虚拟内存(大家都可以用0~4GB的虚拟空间),那么对于任务B而言,它也要从硬盘读扇区把自己的数据读入内存,同样是使用线性地址0x00000000
,如果不刷新TLB,那么此时的TLB里面已经有与这个线性地址对应的物理页了,换言之,全部的任务B的数据会被读到原先放着任务A的物理页中,任务A就会被覆盖掉了,因此产生错误。
网友评论