[066][x86汇编语言]第17章 本章代码:用定时中断实施任务切换 、刷新TLB的必要性

学习笔记

《x86汇编语言:从实模式到保护模式》
https://www.jianshu.com/p/d481cb547e9f

代码运行

  • 运行的效果就是,三个任务之间(内核任务、用户任务A、用户任务B)来回切换;
core.png
task A.png
task B.png

代码使用

  • nasmide.exe 编译源码文件 :主引导加载程序c17_mbr.asm,内核程序c17_core.asm,用户程序A c17-1.asm,用户程序B c17-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就会被覆盖掉了,因此产生错误。

你可能感兴趣的:([066][x86汇编语言]第17章 本章代码:用定时中断实施任务切换 、刷新TLB的必要性)