平坦模型和分段模型

平坦模型和分段模型

平坦模型是相对于多段模型而言的。

在内存分段的环境下,8086(实模式)CPU的16位寄存器最多只能在一个内存段(内存分段)的64kb空间内寻址,要是超过64kb,它只能先变换段基址:CS,来达到长距离取指的目的。一个程序肯定包括多个段(这是程序分段),这样它就要花跟多功夫去寻址,访存。

而平坦模型之所以相对多段模型而存在,是因为它可以理解成至始至终只有一个段,它能直接访问内存空间,不用再进行段基址的变换。在保护模式下,32位环境下用一个段就能访问4GB的内存位置,所以它不用再分段,可以不用来回切换要访问的段。沟壑成坦途。

一定要搞清楚一件事:“程序分段和cpu内存分段是不同的概念”,现代操作系统一般都是在平坦模型下工作(整个4GB空间为一个段),编译器也是按照平坦模型为程序布局,程序中的代码和数据都在同一个段中整齐排列。

一般的高级语言都不允许程序员自己将代码分成各种各样的段,就是因为编译器是针对某个操作系统编写的,操作系统采用的是平坦模型,所以该编译器要编译出适合此操作系统加载运行的程序,由于处理器支持了具有分页机制的虚拟内存,操作系统也采用了分页模型,因此编译器会将程序按内容分成代码段和数据段等部分,而后操作系统会将各个段分配到不同的物理内存上,后面的事儿我们就不用操心了(平坦模型赛高)。

大家可能还是不知道,多段模型到底是什么,当我们使用汇编语言编写程序时,我们要自己定义好数据段,代码段,栈段之类的东西,这就定义了多个段,而当我们使用它们的时候(就像使用栈,都要指定栈基址,再根据需要给sp(栈顶指针寄存器)赋予相应的值,才能对数据进行正确的操作)。多个段可能在不同的内存分段中存在,大小不一,所以才需要进行相应的跳转访存。

像汇编这种低级语言,我们可以允许程序员对程序进行分段,能灵活编排布局,属于人为将程序分成段,这就是采用分段模型编程。(程序的分段是逻辑上的划分)

程序分段的好处
1.程序分段能赋予程序段不同属性,按此执行不同的安全策略(代码段read only之类的);
2.能提高cpu缓存命中,按照局部性原理,再分段的基础下对不同的段采取不同策略;
3.还能节省内存,例如在一个程序的多个副本一同执行时,没必要在内存中有多个相同的代码块,把代码段共享就好了。

平坦模型:平坦模型在程序分段的基础上将多个段统筹管理,在上面做了很多努力,让我们不用操心代码分段的事儿,解放生产力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值