80386读书笔记之保护虚拟地址存储方式(—)
2011-07-24 19:08
267 查看
// 主题:80386读书笔记
// 作者:kevinjz2010@gmail.com
// 版权:kevinjz原创
// 平台:80386
// 发布日期:2011-07-24
// 最后修改:2011-08-14
// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分
//-------------------------------------------------------------------------------------------------
总概:
1、段机制以及分页机制实质上是驻留在存储器中的各种表格,叫做段表与页表,其中规定了各自的转换函数(规则)。
2、段表和页表都只能有操作系统来修改。
3、操作系统为每个任务都维护一个不同的转换表格集,可以使每个任务具有不同的虚拟空间地址(一种保护机制)。
4、虚拟地址转化过程:
16bit选择子:32bit偏移量 通过 段机制 = 32bit线性地址
开启分页功能:32bit线性地址 通过 分页机制 = 32bit物理地址
禁用分页机制:32bit线性地址 = 32bit物理地址
5、两种保护方式:
通过给每个任务分配不同的虚拟地址空间,使任务之间完全隔离;
任务内的保护(特权级别),保护操作系统存储器段及特别的处理器寄存器不能被应用程序访问;
6、每个任务各有一组独立的映射表,即具有不同的的地址转换函数。当CPU切换任务是,需要切换新任务的转换表。
7、全局地址空间
8、局部地址空间
9、操作系统可以为不同任务赋予局部地址空间中相同的虚拟地址,但由于每个任务具有不同的局部地址空间,使得不同任务对同意虚拟地址的访问会转换为不同的物理地址。
10、在一个内务内,定义有四种执行特权级别,0~3,0为最高级。
11、当前特权级:CPL;请求特权级:RPL;
2、段的三个参数:
段基址:规定段的起始线性地址,32bit
段的界限:长度20bit,当粒度G=0时,界限以1字节为单位,范围为1字节~1M字节;粒度G=1时,界限以4K字节为单位,范围为4K~4G。
段的属性:
段的扩展方向(注意堆栈段的特殊性)、
存在位P,值为1时表示该描述符有效,可以用于地址转换,否则无效;
描述符类型位DT,值为1是表示该段为一个存储段,值为0是表示该段均为一个系统段或门;
以上三个参数存储在段的描述符中,在虚拟地址-线性地址的转换过程中要对段描述符进行访问。
3、段描述符存储在存储器的段描述符表中,其实段描述符的一个数组。
4、虚拟地址分为相等的两部分,一半由GDT进行映射,一半由LDT进行映射。一共包含214个段,每个段最大可以为4G。
5、全局描述符表(GDT):系统中只有一个GDT表,由GDTR进行寻址。GDT中包含有各种全局段的描述符,其中包括了存放LDT的段的描述符、TSS的描述符。
6、局部描述符表(LDT):包含由各单个任务私有的描述符。LDT表有多个,具体视任务数量而定,并且所有存放LDT段的描述符都在GDT中。对于一个由两个任务共享的段,可以在各自的LDT中包含同一个描述符表表。当前任务的用的LDT所在段的选择子存放于LDTR中。
7、段选择子:虚拟地址两个部分中的段部分,段选择子标识一个段,可以将其视为段的名字。段选择长度为16bit,
bit15~bit3:索引index,确定描述符在指定描述符表中的位置,其值为描述符在描述符表中的偏移
bit2:TI,值为0表示段描述符在GDT中,值为1表示描述符表LDT中。
Bit1~bit0:RPL(请求特权级),表示主调程序想以什么特权级访问段。
8、当index=0而且TI=0,表示空选择子,是在GDT中的第0个表项,是一个假想的描述符。该描述符永远不会被处理。
9、使用RPL时,与所访问段的特权级相比较的不再是CPL,而是CPL与RPL中较外层的特权级。
10、CPL存放在CS寄存器中的RPL字段中,每当一个代码段选择子装入CS寄存器时,处理器自动吧CPL存储到CS的RPL字段。
11、存储段的描述符格式:
一共8个字节,假定最低字节地址为m,在最右边,最高字节地址为m+7,在最左边。
描述符属性字节:m+5、m+6。其中,
m+6的bit7为G,粒度;
m+6的bit6为D,兼容位,80386的软件此处总为1
m+6的bit5为***L,软件可利用;
m+5的bit7为P位,存在位;
m+5的bit6~bit5为DPL位,描述符特权级,定义相关段的特权级;
m+5的bit4为DT位,在存储段中其值为1;
m+5的bit3~bit0为TYPE位,类型字段,定义段描述符的类型;如读写等
基址的23bit-0bit在m+2、m+3、m+4中,bit31~bit24在m+7中;
界限的bit15~bit0在m、m+1中,bit19~bit16在m+6的低四位中。
12、系统段:格式与存储段基本一致,但DT位值为0,D不用;
13、门:门的描述符包含48位的全指针以及16位的属性。
指针的选择子:16bit,位于m+2以及m+3中;
指针的偏移分两个部分存放,低16bit位于m、m+1中;
属性字段存放在m+4、m+5中:
14、描述符投影寄存器:每个段寄存器都有一组与之相联系的描述符投影寄存器,其中容纳有段寄存器中的选择子所确定的段的描述符信息。作用是不必每次读取段时都要去译码了,可以直接读取投影机村其中的内容。要保持投影寄存器中的内容实时更新。
15、总结
虚拟地址转换为线性地址,是通过给出的选择子,确定段描述符表中的的段描述符,从而确定段基址,然后加上给出的偏移即完成转换,其中段描述符中确定了段的属性。
// 作者:kevinjz2010@gmail.com
// 版权:kevinjz原创
// 平台:80386
// 发布日期:2011-07-24
// 最后修改:2011-08-14
// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分
//-------------------------------------------------------------------------------------------------
总概:
1、段机制以及分页机制实质上是驻留在存储器中的各种表格,叫做段表与页表,其中规定了各自的转换函数(规则)。
2、段表和页表都只能有操作系统来修改。
3、操作系统为每个任务都维护一个不同的转换表格集,可以使每个任务具有不同的虚拟空间地址(一种保护机制)。
4、虚拟地址转化过程:
16bit选择子:32bit偏移量 通过 段机制 = 32bit线性地址
开启分页功能:32bit线性地址 通过 分页机制 = 32bit物理地址
禁用分页机制:32bit线性地址 = 32bit物理地址
5、两种保护方式:
通过给每个任务分配不同的虚拟地址空间,使任务之间完全隔离;
任务内的保护(特权级别),保护操作系统存储器段及特别的处理器寄存器不能被应用程序访问;
6、每个任务各有一组独立的映射表,即具有不同的的地址转换函数。当CPU切换任务是,需要切换新任务的转换表。
7、全局地址空间
8、局部地址空间
9、操作系统可以为不同任务赋予局部地址空间中相同的虚拟地址,但由于每个任务具有不同的局部地址空间,使得不同任务对同意虚拟地址的访问会转换为不同的物理地址。
10、在一个内务内,定义有四种执行特权级别,0~3,0为最高级。
11、当前特权级:CPL;请求特权级:RPL;
一、存储管理机制详解之段机制
1、段:段机制把虚拟存储器组织成大小可变的容量单位的集合。2、段的三个参数:
段基址:规定段的起始线性地址,32bit
段的界限:长度20bit,当粒度G=0时,界限以1字节为单位,范围为1字节~1M字节;粒度G=1时,界限以4K字节为单位,范围为4K~4G。
段的属性:
段的扩展方向(注意堆栈段的特殊性)、
存在位P,值为1时表示该描述符有效,可以用于地址转换,否则无效;
描述符类型位DT,值为1是表示该段为一个存储段,值为0是表示该段均为一个系统段或门;
以上三个参数存储在段的描述符中,在虚拟地址-线性地址的转换过程中要对段描述符进行访问。
3、段描述符存储在存储器的段描述符表中,其实段描述符的一个数组。
4、虚拟地址分为相等的两部分,一半由GDT进行映射,一半由LDT进行映射。一共包含214个段,每个段最大可以为4G。
5、全局描述符表(GDT):系统中只有一个GDT表,由GDTR进行寻址。GDT中包含有各种全局段的描述符,其中包括了存放LDT的段的描述符、TSS的描述符。
6、局部描述符表(LDT):包含由各单个任务私有的描述符。LDT表有多个,具体视任务数量而定,并且所有存放LDT段的描述符都在GDT中。对于一个由两个任务共享的段,可以在各自的LDT中包含同一个描述符表表。当前任务的用的LDT所在段的选择子存放于LDTR中。
7、段选择子:虚拟地址两个部分中的段部分,段选择子标识一个段,可以将其视为段的名字。段选择长度为16bit,
bit15~bit3:索引index,确定描述符在指定描述符表中的位置,其值为描述符在描述符表中的偏移
bit2:TI,值为0表示段描述符在GDT中,值为1表示描述符表LDT中。
Bit1~bit0:RPL(请求特权级),表示主调程序想以什么特权级访问段。
8、当index=0而且TI=0,表示空选择子,是在GDT中的第0个表项,是一个假想的描述符。该描述符永远不会被处理。
9、使用RPL时,与所访问段的特权级相比较的不再是CPL,而是CPL与RPL中较外层的特权级。
10、CPL存放在CS寄存器中的RPL字段中,每当一个代码段选择子装入CS寄存器时,处理器自动吧CPL存储到CS的RPL字段。
11、存储段的描述符格式:
一共8个字节,假定最低字节地址为m,在最右边,最高字节地址为m+7,在最左边。
描述符属性字节:m+5、m+6。其中,
m+6的bit7为G,粒度;
m+6的bit6为D,兼容位,80386的软件此处总为1
m+6的bit5为***L,软件可利用;
m+5的bit7为P位,存在位;
m+5的bit6~bit5为DPL位,描述符特权级,定义相关段的特权级;
m+5的bit4为DT位,在存储段中其值为1;
m+5的bit3~bit0为TYPE位,类型字段,定义段描述符的类型;如读写等
基址的23bit-0bit在m+2、m+3、m+4中,bit31~bit24在m+7中;
界限的bit15~bit0在m、m+1中,bit19~bit16在m+6的低四位中。
12、系统段:格式与存储段基本一致,但DT位值为0,D不用;
13、门:门的描述符包含48位的全指针以及16位的属性。
指针的选择子:16bit,位于m+2以及m+3中;
指针的偏移分两个部分存放,低16bit位于m、m+1中;
属性字段存放在m+4、m+5中:
14、描述符投影寄存器:每个段寄存器都有一组与之相联系的描述符投影寄存器,其中容纳有段寄存器中的选择子所确定的段的描述符信息。作用是不必每次读取段时都要去译码了,可以直接读取投影机村其中的内容。要保持投影寄存器中的内容实时更新。
15、总结
虚拟地址转换为线性地址,是通过给出的选择子,确定段描述符表中的的段描述符,从而确定段基址,然后加上给出的偏移即完成转换,其中段描述符中确定了段的属性。
相关文章推荐
- 80386读书笔记之保护虚拟地址存储方式(二)
- Linux中的虚拟地址、物理地址和内存管理方式
- 页式存储(已知系统为32位实地址,采用48位虚拟地址,页面大小4KB,页表项大小为8B;每段最大为4GB。)
- Linux中的虚拟地址、物理地址和内存管理方式详解
- 性能指标之资源指标-磁盘-评估不同存储保护方式对系统性能影响
- Linux内核访问外设I/O资源的方式(设备物理地址和设备虚拟地址),静态映射和动态映射
- 深入理解计算机系统-之-内存寻址(一)--存储管理机制(虚拟地址,线性地址,物理地址)
- 虚拟地址和地址保护
- OK6410(s3c6410)存储方式之地址存储结构详解
- 页式存储管理系统中------------虚拟地址转换为逻辑地址
- 高位低位存储方式以及数组地址细节
- Linux中的虚拟地址、物理地址和内存管理方式(一)
- 【怒转】保护模式---存储方式
- Linux中的虚拟地址、物理地址和内存管理方式(二)
- 实模式和保护模式虚拟地址映射
- 实模式和保护模式下的地址计算方式
- ceph存储 centos下添加多个虚拟ip地址的方法(一个网卡)
- 实模式和保护模式下的地址计算方式
- Linux内核访问外设I/O资源的方式(设备物理地址和设备虚拟地址),静态映射和动态映射
- 呵呵,讨论一下,理解又深刻了(虚拟地址 存储位置)