对分页,分段的一些理解
来源:互联网 发布:深圳it程序员工资多少 编辑:程序博客网 时间:2024/06/05 20:24
分段 是处理器固有 机制,即使是平坦模型也需要 段地址+偏移量 形成线性地址。
分段好处:
1.8086 16位地址只能访问64k,但是为了访问1mb内存,出现了分段,段地址*16+偏移地址 = 20位地址【这是为什么要分段】
2. 重定位。 在程序头存放至程序的大小,入口点,程序各个段的位置。系统重定位后更换这里的段描述符。
3.段保护 。 rpl,cpl,dpl就是为了保护段间转移,防止程序访问高特权级的段。【对于3个pl我说说我的理解,rpl是段选择子的最后2位,可以表示0-3,表示的就是计算机的特权级。cpl表示的是当前的程序的特权级,是cs寄存器中选择子的最后两位。实际上大多数rpl=cpl。一会说为什么。dpl是段描述符的中间某两位,表示的同样是特权级。访问的规则是rpl和cpl的值需要同时小于dpl才能访问该描述符。关于为什么需要rpl,因为调用门的存在,3特权级为了实现一些高特权0的代码需要使用调用门,可以理解为系统调用。这时候程序的cpl就是0,这时就能访问dpl为 0的段描述符,这是不对的。但是这个程序的rpl还是3,记录着使用调用门之前程序的特权。所以,rpl和cpl同时使用】
【对于其中的段选择子,段描述符这些知识需要好好看看计算机体系结构,我这里一两句话说不清,简单告诉你。段描述符8字节里面存放着段的基本信息,计算机需要使用段描述符访问段,而选择子就是段描述符在LDT/GDT中的位置或者说偏移。cs,ds等寄存器需要使用选择子来访问,而不是16位模式下的地址】
分页之后不再采用分段的 程序组织形式。程序被分为节,为的是相同部位有相同的访问权限。(.text 只有执行权限)【可以看看《程序员的自我修养》里面对各个节的介绍很详细】
32位中所有段的起始地址都是0 ,实际使用的段界限是0xFFFFFFFF 不能再享受段保护。
分页模式后,将不会享受段带来的重定位,因为段地址都是0x00000000,段地址+偏移量计算不出线性地址。需要用户程序提供重定位表。
这些基础知识需要阅读一些东西才能了解,但是不要以为这些不重要。在内核和虚拟化学习中这些知识对你非常重要,这里的一点东西是我近1年阅读东西的一点积累,写出来虽然不多,但是总算融会贯通了。
推荐几本书 《x86汇编语言 从是模式到保护模式-李忠》【理解计算机体系结构】
《程序员的自我修养》【程序的链接、装载 库】 这些都是学习os内部和虚拟化的基础。
0 0
- 对分页,分段的一些理解
- 对分页的理解
- 分页存储和分段存储的一些小问题解答
- Linux的分段分页
- 关于对分段编译中的make的理解
- 深入理解linux-分页与分段机制
- 对一些概念的理解
- 对Jazz的一些理解
- 对鼠标的一些理解
- 对委托的一些理解
- 对递归的一些理解
- 对零点的一些理解
- 对c++的一些理解
- 一些对二插树的理解
- 对监控的一些理解
- 对壳的一些理解
- 一些对GIS的理解
- 对DC的一些理解
- linux下MYSQL备份与恢复
- C# 实现百度搜索框智能提示功能
- 转载_网络基本功(三):细说VLAN与Trunk
- JAVA 注解的学习和对Spring注解的理解
- @Repository、@Service、@Controller 和 @Component
- 对分页,分段的一些理解
- Winform开发框架
- 关于类的初始化
- 转载_网络基本功(四):细说路由(上)
- 两分钟理解Fragment和Activity的生命周期
- 用shape结合selector实现点击效果
- jQuery插件的开发
- 构造函数和setdate
- SDWebImage缓存