zoukankan      html  css  js  c++  java
  • 操作系统学习笔记(一) 段权限转移规则

    截图及内容参考

    《Linux内核源代码情景分析》

    《自己动手写操作系统》

    nasm boot.asm -o boot.bin 

    dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

    保护模式下各个段权限转移规则
    段分为数据段和代码段
    代码段分为一致代码段和非一致代码段

    权限分为 0 1 2 3 4
    0为核心层 权限最高
    3位应用层 权限最低

    一致代码段 只能被别自己权限低或者权限一样的特权级访问
    例如 级别为2的一致代码段 只能被 2 3 权限访问
    转移到一致代码段时候 当前权限级别不变

    非一致代码段只能被同样级别权限的特权级访问
    用于保护内核不被低特权级别访问

    数据段(总是非一致) 可以被高权限和权限一样的特权级访问

    描述符权限访问规则

    权限级别分为0 1 2 3 四种

    其中0级别最高为内核层权限

    3级别最低为用户层权限

    而描述符描述其端后分别描述其权限 DPL

    描述符描述的段有两种 数据段 代码段

    代码段又分为一致代码段  非一致代码段

    规则如下:

    当我们向一个描述权限较高的一致代码段跳转的时候,当前权限会延续。例如 当前描述权限3 向描述权限为0的一致代码段跳转

    当我们向一个描述权限较高的非一致代码段跳转的时候,会引起常规保护错误(#GP) 例如 当前描述权限3 向描述权限为0的非一致代码段跳转 引起常规保护错误(#GP)  

    非一致代码段用来保护系统代码不被低权限干扰  

    数据段总是非一致的 

    规则总结如图:

    摘录自 《自己动手写操作系统》

     在实际操作系统中

    一般分为内核数据段 内核代码段 用户数据段 用户代码段

    权限分为为0 与3

    所以段内存管理已经简化到最基本的设置

    《linux内核代码情景分析》中描述如下: 

    四个段全部是基地址为0 上限为0xffffff;

    对于Linux与Windows来说,段式内存管理是不得不进行的例行公事,而真正的重头戏在页式映射内存管理机制。

  • 相关阅读:
    C++ Primer学习笔记(三) C++中函数是一种类型!!!
    C++类的成员函数的形参列表后面的const
    C++ const总结
    简单的使用Gson (序列化 和 反序化)
    HTML 获取class里的多个值 和 dataset的使用
    SiteMesh的简单使用
    IDEA 使用LiveEdit插件
    Java 转发和重定向的区别
    Web.xml 定制URL
    java 枚举类(简单使用)
  • 原文地址:https://www.cnblogs.com/itdef/p/5822318.html
Copyright © 2011-2022 走看看