常见的操作系统 只使用了 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 内存管理的更多相关文章

  1. Unity游戏开发中的内存管理_资料

    内存是手游的硬伤——Unity游戏Mono内存管理及泄漏http://wetest.qq.com/lab/view/135.html 深入浅出再谈Unity内存泄漏http://wetest.qq.c ...

  2. Unity游戏Mono内存管理及泄漏

    UWA工具 https://yq.aliyun.com/articles/435553 Unity游戏Mono内存管理及泄漏 https://wetest.qq.com/lab/view/135.ht ...

  3. MIT6.828 Lab2 内存管理

    Lab2 0. 任务介绍 你将编写一个内存管理代码.主要分为两大部分.分别对物理内存和虚拟内存的管理. 对于物理内存,每次分配内存分配器会为你分配4096bytes.也称为一个页(在大部分操作系统中一 ...

  4. XV6学习笔记(2) :内存管理

    XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...

  5. .NET基础拾遗(1)类型语法基础和内存管理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  6. PHP扩展-生命周期和内存管理

    1. PHP源码结构 PHP的内核子系统有两个,ZE(Zend Engine)和PHP Core.ZE负责将PHP脚本解析成机器码(也成为token符)后,在进程空间执行这些机器码:ZE还负责内存管理 ...

  7. linux2.6 内存管理——逻辑地址转换为线性地址(逻辑地址、线性地址、物理地址、虚拟地址)

    Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Linux运行在虚拟存储空间,并负责把系 ...

  8. linux2.6 内存管理——概述

    在紧接着相当长的篇幅中,都是围绕着Linux如何管理内存进行阐述,在内核中分配内存并不是一件非常容易的事情,因为在此过程中必须遵从内核特定的状态约束.linux内存管理建立在基本的分页机制基础上,在l ...

  9. Objective-C内存管理之引用计数

    初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存 ...

随机推荐

  1. 使用FastJson转化Json格式

    1.下载Jar包 http://repo1.maven.org/maven2/com/alibaba/fastjson/ 2.将jar包导入工程 3.示例 package nc.testFastJso ...

  2. merge存储引擎基本介绍和使用规范说明

    [以下两段截自MySql手册]: merge存储引擎,也被认识为mrg_myisam引擎,是一个"相同“的表可以被当作一个表来用的myisam表的集合.“相同”意味着所有表同样的列和索引信息 ...

  3. Flask扩展 -- flask-mail

    电子邮件是最常用的通信方式之一.虽然Python标准库中的smtplib包可用在Flask程序中发送电子邮件,但包装了smtplib的Flask-Mail扩展能更好的和Flask集成. 1.安装Fla ...

  4. 数组那些事(slice,splice,forEach,map,filter等等)

    周五,再过会要下班了,刚才把<javascript高级程序设计>数组这块又看了下,加深下记忆.今天来继续练练笔,嘿嘿!(写下自己印象不深的东西) 一.数组的定义(数组定义分为两种) 方法一 ...

  5. C#字符串、字节数组和内存流间的相互转换 - IT浪潮之巅

    定义string变量为str,内存流变量为ms,比特数组为bt 1.字符串=>比特数组 (1)byte[] bt=System.Text.Encoding.Default.GetBytes(&q ...

  6. VS2010-MFC(常用控件:编辑框Edit Control)

    转自:http://www.jizhuomi.com/software/181.html 编辑框(Edit Control)是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子 ...

  7. django中写form表单时csrf_token的作用

    之前在学习django的时候,在template中写form时,出现错误.百度,google后要加{% csrf_token %}才可以,之前一直也没研究,只是知道要加个这个东西,具体是什么也不明白. ...

  8. C# EF去除重复列DistinctBy

    在网上看了LinQ有DistinctBy方法,实际在用的时候并没有找到,后来参照了该网站才发现写的是拓展方法 https://blog.csdn.net/c1113072394/article/det ...

  9. selenium基础(获取验证信息-断言)

    获取验证信息 实际结果与预期结果进行比较称之为断言 通过获取title.URL.text等信息进行断言 text方法用于获取标签对之间的文本信息 from selenium import webdri ...

  10. webpack 简单笔记(二)CommonsChunkPlugin插件

    接下来就要使用CommonsChunkPlugin插件 (一)单一入口,模块单一引用,分文件输出,单一入口,模块重复引用,分文件输 main.js代码 require('./static/js/mai ...