为了方便、快速的运行处理器,在操作系统中提供了cache 和 寄存器 ..
在80x86中添加4个32位的控制器,cr0 、cr1 、cr2、cr3
cr0 :
PG
ET TS EM MP PE
分
处
任
摸 监 保
页
理
务
拟 控 护
允
器
转
协 协 允
许
扩
换
处 处 许
展
理 理
器 器
cr1 :
未使用
cr2
:
页故障线性地址寄存器
cr3
:
页目录机制寄存器
11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0
0 0 0 0 0 0
对于代码:如果要获取的是PG所在的那个位,要考虑你所在编译器和操作系统
- #define BIT64 64
- static int count=1;
- module_param(count,int,0664);
- static void CR(void)
- {
- register unsigned long res =0;
- asm("mov %%cr0,%0":"=a"(res));
- #ifdef BIT64
- printk("64\n");
- printk("<0>CR0 = %lx PG = %lu PE =%lx\n",res,res& 0x80000000,res&0x1);
- #else
- printk("<0>CR0 = %lx PG = %lu PE =%lx\n",res,res& 0x8000,res&0x1);
- #endif
- asm("mov %%cr2,%0":"=a"(res));
- printk("<0>CR2 = %lx \n",res);
- asm("mov %%cr3,%0":"=a"(res));
- printk("<0>CR3 = %lx \n",res);
- }
阅读(850) | 评论(0) | 转发(0) |