社区
Linux/Unix社区
帖子详情
who懂x386下的内存管理机制?
yadang
2003-05-08 05:52:10
逻辑地址: 出现在机器指令中,用来制定操作数的地址。段:偏移
线性地址:逻辑地址经过分段单元处理后得到线性地址,这是一个32位的无符号整数,可用于定位4G个存储单元。
我记得是把段地址左移4位,再和偏移相加。这样怎么会寻到4G呢?
比如:0000:4010的线性地址=04010
0001:4000的线性地址=04010
其实这2个地址是一样的。也就是说里面有很多线性地址是重合的,怎么可以说是寻到4G呢?
...全文
54
8
打赏
收藏
who懂x386下的内存管理机制?
逻辑地址: 出现在机器指令中,用来制定操作数的地址。段:偏移 线性地址:逻辑地址经过分段单元处理后得到线性地址,这是一个32位的无符号整数,可用于定位4G个存储单元。 我记得是把段地址左移4位,再和偏移相加。这样怎么会寻到4G呢? 比如:0000:4010的线性地址=04010 0001:4000的线性地址=04010 其实这2个地址是一样的。也就是说里面有很多线性地址是重合的,怎么可以说是寻到4G呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qqchen79
2003-05-09
打赏
举报
回复
GDT和LDT是需要操作系统提供的,存在于系统内存当中,操作系统只要把它们的基地址设置到CPU的GDTR和LDTR寄存器里面就行了。
Windows使用的Flat模式没有使用LDT,只使用了GDT(因为所有进程的描述都一样),GDT表一般就保存在系统内存起始的地方(0x80036000); Linux使用LDT描述进程用户空间,GDT描述Kernel内存空间。
yadang
2003-05-09
打赏
举报
回复
hs_guanqi(关七),tkit(熊熊520), qqchen79(知秋一叶 [MS MVP])果然高手。
顺便问一下:GDT和LDT是操作系统自己在内存中建立的一段区域,还是CPU本身就存在这个一段东东?
qqchen79
2003-05-09
打赏
举报
回复
>> 难道现在linux版本中的段和偏移都是32位的吗?那样还要段干什么?
>> 我就一个偏移就可以寻址4G,干脆把段设置为0算了
有想法。:)
Linux和Windows都是这么干的(简单忽略分段机制,只使用分页),Intel把这种内存管理方式称为Flat Mode。
你会发现所有的程序运行期间CS、DS的值分别在Kernel和User模式下都相同,只不过不是0,在系统问建立可以找到定义。进一步,所有这些CS/DS(其实是指向系统描述表GDT的索引)都描述了一个从0x00000000开始,到0xffffffff的地址空间。CS和DS不同只是因为Code和Data段的读写权限不一样。
在你的例子当中,偏移地址本身就有32位,所以已经可以寻址4G了,Intel x86号称可以寻址64G (2^36,使用实模式),但是好像没有操作系统这么用过。
wollya
2003-05-09
打赏
举报
回复
CPU本身就存在
它有MMU内存管理单元
tkit
2003-05-08
打赏
举报
回复
Linux使用的是三级分页机制,分段对其而言是多余的东冬,所以在Intel386上,linux简单的将分段单元做了一个透明的映射,32位逻辑地址映射出来仍然是32位的线性地址,后者再经过分页机制的处理,转换成真正的物理地址。
在386的保护模式下,存在段寄存器中的不再是为了搂主希望的移位相加,也即不再是段地址,而只是一个段选择符,通过这个段选择符作为索引,最终到一个描述符表中去查找,这个描述符表的每个表项可以指定这个段的粒度(字节还是页),通过这个间接的方式,就可以对4G的空间寻址,搂主说的只是实模式 下的寻址方式
hs_guanqi
2003-05-08
打赏
举报
回复
:)
保护模式下,段是有权限的,比如用户程序不能访问系统段
另外段也有多种,代码段,任务段等等,各有各的作用。
保护模式,字面意思,就是让内存空间受保护,不被任意访问。
实模式下,任何地址都可以在用户程序中直接读写,一个不慎,比如数租越界,非法指针,系统就咔嚓了。
保护模式下,同样的问题,可能会弹出一个非法操作对话框,或者提示Segment fault,系统照转。
yadang
2003-05-08
打赏
举报
回复
难道现在linux版本中的段和偏移都是32位的吗?那样还要段干什么?
我就一个偏移就可以寻址4G,干脆把段设置为0算了
hs_guanqi
2003-05-08
打赏
举报
回复
你写的偏移都是16位的,
实际上段内偏移可以达到32位,你写一个32位数再来试试?
Linux 物理
内存管理
涉及的三大结构体之struct zone
本文主要介绍了
内存管理
三大结构体中的struct zone结构体。详细介绍了其中的每个参数的含义。其中这些参数:_watermark[],lowmem_reserve[],pageset,lock,vm_stat[],free_area[]和内存规整系列参数是相对重要。在日常中经常能够遇到。如free_area[]是struct zone的核心,也是buddy system的核心结构;vm_stat[]统计了该zone的内存使用情况;内存规整参数在内存规整/压缩中有重要作用。
Linux实际内存占用率算法,以及使用Python实现内存监控
这两天我们的一个核心系统,一套集群,逐台开始报警,内容是内存占用超阈值。按说这应该是一个非常紧急且需要立即处理的报警,但实际是不是这样,待我们拨云见日。以下为模拟实验,了解了下监控系统这条内存占用超阈值报警的计算方法,是用used/total*100%=1949/1988*100%=98%,即内存占用量超过了98%。网上学习了一番,其实这种计算方法不很准确,原因就是Linux的
内存管理
机制
和Win
Linux
内存管理
3(基于6.1内核)
Linux
内存管理
3(基于6.1内核)---内存区域zone
linux 内核
内存管理
物理内存 相关数据结构 page(页) Linux 内核
内存管理
的实现以 page 数据结构为核心,其他的
内存管理
设施都基于 page 数据结构,如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h 头文件中,大量使用了 C 语言的联合体(union)来优化其数据结构的大小,因为每个物理页面都需要一个 page 数据结构来跟踪和管理这些物理页面的使用情况,所以管理成本很高。 struct page { // 第一部分,
内存
机制
的建立
内存
机制
的建立 (2011-04-24 17:34) 分类: Linux http://blog.chinaunix.net/uid-1701789-id-263951.html kernel是怎么管理内存的呢?从启动的角度来看,怎么看kernel怎么建立
内存管理
模块。还是需要从全局变量的角度来看。 1. early_ioremap--固定映射FIXMAP ior
Linux/Unix社区
23,222
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章