一个操作系统的实现:Descriptor 3详解

%macro Descriptor 3     ; 有三个参数:【段界限】、【段基址】、【段属性】

dw %2 & 0FFFFh     ; 段界限 1     (2 字节)

dw %1 & 0FFFFh     ; 段基址 1     (2 字节)
db (%1 >> 16) & 0FFh    ; 段基址 1     (1 字节)
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 属性 1 + 段界限 2 + 属性 2   (2 字节)
db (%1 >> 24) & 0FFh    ; 段基址 2     (1 字节)
%endmacro ; 共 8 字节

看似很简单的结构体 理解起来可不是那么简单!


【Descriptor结构体】有8个字节。


1、【第1、2字节】组合(word) 表示该段的[段界限①], dw %2 & 0FFFFh ;引用第二个参数去掉高16位


2、【第3、4、5字节】组合表示该段的[段基址①],dw %1 & 0FFFFh ;先得到第一个参数(段基址)低WORD。


3、接着把第5个字节赋值,db (%1 >> 16) & 0FFh 去掉第3第4个字节的内容.再把剩下的字节赋值


4、【第6个字节】是与【第7个字节】组合的内容可就更复杂了:


【第6个字节】的内容:


【7(p)        6(DPL)         5(DPL)          4(S)             3(Type)        2(Type)        1(Type)        0(Type)】


0-3位表示:[段属性]、说明存储段描述符所描述的存储段的具体属性。


4位表示:说明描述符的类型, 对于存储段描述符而言,S=1表示是系统段描述符。


5-6位表示:DPL 该段的特权级别也就是Ring 0-3;


7位表示:P:    存在(Present)位。

;   P=1 表示描述符对地址转换是有效的,即描述的段在内存当中.
;   P=0 表示描述符对地址转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常

【第7个字节】的内容:


【7(G)        6(D)         5(0 )          4(AVL)   3(段界限)   2(段界限)    1(段界限)   0(段界限)】


0-3位表示:[段界限②]


4位表示:软件可利用位。80386对该位的使用未做规定,Intel公司也保证今后开发生产的处理器只要与80386兼容,就不会对该位的使用做任何定义或规定。


5位表示:0 ;Intel资料也没表示


6位表示:是一个很特殊的位,在描述可执行段、向下扩展数据段或由SS寄存器寻址的段(通常是堆栈段)的三种描述符中的意义各不相同,通常置1


7位表示:    段界限粒度(Granularity)位。

          G=0 表示界限粒度为字节;
           G=1 表示界限粒度为4K 字节。
          注意,界限粒度只对段界限有效,对段基地址无效,段基地址总是以字节为单位。

那么这段宏dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh)表示:


取[段界限]参数除去低16位取 高4位,得到【段界限②】


取[段属性]参数的低8位 12-15位(AVL属性等)


属性 1 + 段界限 2 + 属性 2


【第8个字节】的内容:


[段基址②] 、db (%1 >> 24) & 0FFh 取基地址参数的最高8位


那么一个Descriptor 结构体就这样成形了.

目 录 第一章 前言 .................................................................................................... 1 1.1 关于MQX .............................................................................................. 1 1.2 关于本手册 ............................................................................................ 1 1.3 3.0和2.50版本的新特点 ...................................................................... 2 1.4 约定 ........................................................................................................ 4 1.4.1 提示 ................................................................................................ 4 1.4.2 注释 ................................................................................................ 4 1.4.3 注意事项 ......................................................................................... 4 第二章 MQX概述 .......................................................................................... 5 2.1 MQX的组织结构 .................................................................................. 5 2.2 初始化 .................................................................................................... 6 2.3 任务管理 ................................................................................................ 6 2.4 调度 ........................................................................................................ 7 2.5 存储管理 ................................................................................................ 7 2.5.1 可变大小存储块管理 ..................................................................... 7 2.5.2 固定大小存储块管理(区块) ..................................................... 7 2.5.3 高速缓存控制 ................................................................................. 8 2.5.4 存储器管理单元(MMU)控制 ................................................... 8 2.5.5 轻量级存储管理 ............................................................................. 8 2.6 任务同步 ....................................................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值