
操作系统里面的每一个任务都有自己独立使用的页表,当操作系统切换任务来执行的时候,也要对应的切换页表,另外每一个任务都有自己独立的虚拟地址空间,而每个任务 虚拟地址空间中数据的分布肯定是不一样的,因此会出现这样的情况:同一个虚拟地址 在不同的页表的映射下 ,被转换成了不同的物理地址。

切换页表实验
%include "inc.asm"
;两个页目录 子页表 起始地址 对应两个不同的任务
;简单的分页构建方法,所有的子页表顺序的连续排列
;页目录起始地址
PageDirBase0 equ 0x200000
;子页表起始地址
PageTblBase0 equ 0x201000
;页目录起始地址
PageDirBase1 equ 0x300000
;子页表起始地址
PageTblBase1 equ 0x301000
org 0x9000
jmp ENTRY_SEGMENT
[section .gdt]
; GDT definition
; 段基址, 段界限, 段属性
GDT_ENTRY : Descriptor 0, 0, 0
CODE32_DESC : Descriptor 0, Code32SegLen - 1, DA_C + DA_32
VIDEO_DESC : Descriptor 0xB8000, 0x07FFF, DA

这篇博客详细介绍了操作系统中任务切换时如何通过切换页表实现不同任务的独立虚拟地址空间管理,探讨了同一虚拟地址在不同页表映射下的物理地址变化。通过实例演示了页目录和子页表的设置以及GDT和GDTR的使用,帮助读者理解内存保护和地址转换原理。
最低0.47元/天 解锁文章
368

被折叠的 条评论
为什么被折叠?



