Lab 2 内存管理

1054453-20180504191849012-661840790.png

常见的操作系统 只使用了 0 和3
1054453-20180504192000164-1217477512.png

1054453-20180504193226939-2021132037.png

段选择子

1054453-20180504193249658-1016933082.png

1054453-20180504193320555-305272801.png
DPL 是段描述符的内容 段的信息

1054453-20180504193411795-134603129.png
中断和陷入的 大致特权级的展现

1054453-20180504193542728-2052271103.png

1054453-20180504193606943-1373425199.png

RPL 当前要访问数据段对饮给的特权级
CPL 当前代码段的特权级
1054453-20180504193637380-192554709.png

DPL 全局的
1054453-20180504194132732-884602110.png
通过门区访问特权级更高的段

特权级的切换

通过中断切换特权级
基于中断的特权级的转换
中断门
1054453-20180504195239190-33545812.png

1054453-20180504195431299-1991020595.png
压栈信息

ring(0 to 3)
特权级的切换
内核态 跳转到 用户态
构造一个特殊的栈

内核栈中产生压栈 step1
1054453-20180504200451017-2001552565.png

模仿ring3 产生中断时的现场
要切换
会多存两个信息。
修改一下CPL 特权级

使用iret 指令把信息弹出栈 将信息付给其他的寄存器
然后就已经到用户态了

1054453-20180504200642427-1583177647.png

从ring3 调到 ring0

中断描述符 中断服务历程

1054453-20180504200948122-1979065809.png
在被打断的那一刻 所保存下来的信息
处理完 ISR IRET就返回了ring3
但是我们可以修改堆栈信息 ,执行完ISR 后留在 ring0就ok 了

1054453-20180504201051204-468923679.png
LAb1 的changellage 的方式

x86 特权级 TSS 格式

task state segment
保存了不同特权级所用到的信息
我们关注 不同特权级的堆栈信息

1054453-20180504201559066-1890229279.png

cpu 根据TSS 中的信息 设置新的堆栈 根据IDT表跳到新的地址

操作系统要设置好TSS

TSS 特殊的一个段 Task State Segment 任务状态段
1054453-20180504202026654-1200363196.png
有一个 TSS 的段

1054453-20180504202829086-297946272.png

优化 专门有一个 Task Register 保存Tss 的位置 、
初始化的任务
1054453-20180504203238410-468074491.png

特权级信息的 参考文档
1054453-20180504203351694-761612039.png

段/页表

x86 内存管理单元 mmu

段机制概述

1054453-20180504214839128-1931980339.png

x86 mmu -段选择子(segment selector )中的隐藏部分

1054453-20180504215129358-499796721.png

扩展的段选择子

x86 hardward mmu -GDT tables (kernel init)
1054453-20180504215221623-2043785739.png

Lab1 中的映射关系
1054453-20180504215328372-906759816.png

选择页机制 更有效一些 主流的cpu 都采用的 页机制

不是很懂?

如何建立页的映射机制

1054453-20180504215638022-1093585678.png
页机制概述
PDE PTE
1054453-20180504220008798-1247036636.png
CR3 里面是页表首地址

页表项里面村的地址是线性地址

页表项: page table entries

1054453-20180504220735662-1283246412.png

高20位是基址 低12位是一些属性

页表就两级

使能 页机制 (enable paging )
cro 第一位保护机制使能
cr0 最高位31 位 启动页机制

1054453-20180504221750517-493434263.png

1054453-20180504221959236-1451681590.png

问题:练习 pmm.c 里面实现的

x86 mmu -在页表中建立页的映射关系

给一个 虚地址一映射到 物理地址
1054453-20180504222642016-1689161287.png

x86 里面非常的全面 段页机制

1054453-20180504222725976-1738181976.png

1054453-20180504222737412-1020727908.png
intel 对应的章节

转载于:https://www.cnblogs.com/sfzyk/p/8992870.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值