Linux内核学习第4天
2014-04-30 22:11
190 查看
保护模式内存管理
分页机制(支持虚拟存储技术)
(1)虚拟存储:是一种内存管理技术,“虚拟化”线性地址空间的方法
(2)使用分页将段划分成页面(通常为4K),页面存储于物理内存或硬盘上,操作系统通过维护页表或页目录来管理,当程序访问线性地址空间的一个地址位置时,处理器会使用页目录和页表来转换为物理地址。如果访问的页面不在物理内存上,处理器会产生一个中断,然后将该页面载入到物理内存。
*段表存储在线性地址空间;页表存储在物理内存中
保护
*80X86支持两种保护:一是通过给每个任务不同的虚拟地址空间来隔绝各个任务
二是通过保护机制
(1)任务之间的保护
*80X86使用的是把不同任务放在不同的虚拟地址空间中,给予每个任务不同的逻辑地址到物理地址的变换映射。
*全局地址空间:所有任务具有的相同虚拟地址空间
局部地址空间:每个任务唯一的虚拟地址空间
(2)特权级保护(定义了4个执行特权级,0最高,3最低)
*每一个内存段都与一个特权级相关联
*CPL:Current Privilege Level 当前特权级,定义了当前活动代码段的特权级,确定了哪些段能被程序访问
*每个特权级都有自己的程序栈
分段机制
段的定义:段是虚拟地址到线性地址转换机制的基础
(1)段由三个参数定义
*段基地址Base address:指定段在线性地址空间中的开始地址,基地址是线性地址,偏移为0
*段限长Limit:是虚拟地址空间中段内最大可用偏移地址,定义了段的长度
*段属性Attributes:描述了段的属性,如是否可读可写或作为程序执行以及段的特权级
(2)逻辑地址---->线性地址:
*使用段选择符中的偏移值(段索引)在GDT或LDT表中定位相应的段描述符
*利用段描述符检验段的访问权限和范围
*把段描述符中的基地址加到偏移量上,形成线性地址
![](http://img.blog.csdn.net/20140430221034843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVveWhhbmcwMDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/Jason/AppData/Local/Temp/Wiz/93301c27-7824-4db3-b010-1ceaa1a15410_4_files/16125046.png)
段描述符表:是段描述符的一个数组
(1)分类:GDT(全局描述符表)
LDT(局部描述符表)
![](http://img.blog.csdn.net/20140430221042312?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVveWhhbmcwMDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/Jason/AppData/Local/Temp/Wiz/93301c27-7824-4db3-b010-1ceaa1a15410_4_files/113177734.png)
(2)GDT
*每个系统必须定义一个GDT
*GDT本身不是一个段,是线性地址中的数据结构
*处理器不使用GDT的第一个描述符
*LDT的段描述符必须包含于GDT中
分页机制(支持虚拟存储技术)
(1)虚拟存储:是一种内存管理技术,“虚拟化”线性地址空间的方法
(2)使用分页将段划分成页面(通常为4K),页面存储于物理内存或硬盘上,操作系统通过维护页表或页目录来管理,当程序访问线性地址空间的一个地址位置时,处理器会使用页目录和页表来转换为物理地址。如果访问的页面不在物理内存上,处理器会产生一个中断,然后将该页面载入到物理内存。
*段表存储在线性地址空间;页表存储在物理内存中
保护
*80X86支持两种保护:一是通过给每个任务不同的虚拟地址空间来隔绝各个任务
二是通过保护机制
(1)任务之间的保护
*80X86使用的是把不同任务放在不同的虚拟地址空间中,给予每个任务不同的逻辑地址到物理地址的变换映射。
*全局地址空间:所有任务具有的相同虚拟地址空间
局部地址空间:每个任务唯一的虚拟地址空间
(2)特权级保护(定义了4个执行特权级,0最高,3最低)
*每一个内存段都与一个特权级相关联
*CPL:Current Privilege Level 当前特权级,定义了当前活动代码段的特权级,确定了哪些段能被程序访问
*每个特权级都有自己的程序栈
分段机制
段的定义:段是虚拟地址到线性地址转换机制的基础
(1)段由三个参数定义
*段基地址Base address:指定段在线性地址空间中的开始地址,基地址是线性地址,偏移为0
*段限长Limit:是虚拟地址空间中段内最大可用偏移地址,定义了段的长度
*段属性Attributes:描述了段的属性,如是否可读可写或作为程序执行以及段的特权级
(2)逻辑地址---->线性地址:
*使用段选择符中的偏移值(段索引)在GDT或LDT表中定位相应的段描述符
*利用段描述符检验段的访问权限和范围
*把段描述符中的基地址加到偏移量上,形成线性地址
![](file:///C:/Users/Jason/AppData/Local/Temp/Wiz/93301c27-7824-4db3-b010-1ceaa1a15410_4_files/16125046.png)
段描述符表:是段描述符的一个数组
(1)分类:GDT(全局描述符表)
LDT(局部描述符表)
![](file:///C:/Users/Jason/AppData/Local/Temp/Wiz/93301c27-7824-4db3-b010-1ceaa1a15410_4_files/113177734.png)
(2)GDT
*每个系统必须定义一个GDT
*GDT本身不是一个段,是线性地址中的数据结构
*处理器不使用GDT的第一个描述符
*LDT的段描述符必须包含于GDT中
相关文章推荐
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】深入剖析Linux中断机制之四--中断API
- 学习linux内核,都看哪些书?
- 学习linux内核的经典书籍介绍
- linux内核I2C子系统学习(三)
- linux内核学习(2)继续翻译...
- linux内核学习(3)我在寻找中...
- linux内核学习
- Linux内核分析——第六周学习笔记20135308
- linux内核学习之四:进程切换简述
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Oops在Linux 2.6内核+PowerPC架构下的前世今生
- #STM32# 学习日志-第4天
- Linux内核分析——第四周学习笔记20135308
- linux内核学习笔记之——list_for_each_entry
- linux内核学习(12)启动全过程概述之三
- Linux内核学习总结
- 学习linux内核(二)
- Linux内核学习四库全书
- Linux内核的ioctl函数学习
- Linux内核驱动学习(二)----根文件系统的构成 (root filesystem)
- linux内核学习笔记------ARP:地址解析协议