码迷,mamicode.com
首页 > 其他好文 > 详细

Lab 2 内存管理

时间:2018-10-12 14:57:30      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:转换   启动   ble   线性   概述   cto   hang   tables   状态   

技术分享图片

常见的操作系统 只使用了 0 和3
技术分享图片

技术分享图片

段选择子

技术分享图片

技术分享图片
DPL 是段描述符的内容 段的信息

技术分享图片
中断和陷入的 大致特权级的展现

技术分享图片

技术分享图片

RPL 当前要访问数据段对饮给的特权级
CPL 当前代码段的特权级
技术分享图片

DPL 全局的
技术分享图片
通过门区访问特权级更高的段

特权级的切换

通过中断切换特权级
基于中断的特权级的转换
中断门
技术分享图片

技术分享图片
压栈信息

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

内核栈中产生压栈 step1
技术分享图片

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

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

技术分享图片

从ring3 调到 ring0

中断描述符 中断服务历程

技术分享图片
在被打断的那一刻 所保存下来的信息
处理完 ISR IRET就返回了ring3
但是我们可以修改堆栈信息 ,执行完ISR 后留在 ring0就ok 了

技术分享图片
LAb1 的changellage 的方式

x86 特权级 TSS 格式

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

技术分享图片

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

操作系统要设置好TSS

TSS 特殊的一个段 Task State Segment 任务状态段
技术分享图片
有一个 TSS 的段

技术分享图片

优化 专门有一个 Task Register 保存Tss 的位置 、
初始化的任务
技术分享图片

特权级信息的 参考文档
技术分享图片

段/页表

x86 内存管理单元 mmu

段机制概述

技术分享图片

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

技术分享图片

扩展的段选择子

x86 hardward mmu -GDT tables (kernel init)
技术分享图片

Lab1 中的映射关系
技术分享图片

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

不是很懂?

如何建立页的映射机制

技术分享图片
页机制概述
PDE PTE
技术分享图片
CR3 里面是页表首地址

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

页表项: page table entries

技术分享图片

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

页表就两级

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

技术分享图片

技术分享图片

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

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

给一个 虚地址一映射到 物理地址
技术分享图片

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

技术分享图片

技术分享图片
intel 对应的章节

Lab 2 内存管理

标签:转换   启动   ble   线性   概述   cto   hang   tables   状态   

原文地址:https://www.cnblogs.com/sfzyk/p/8992870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!