Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

12|内存划分:如何借助边界值划分内存?

你好,我是闪客。
书接上回,上一讲,我们回顾了一下 main.c 函数之前我们做的全部工作,给进入 main 函数做了充分的准备。
这一讲,我们将看到一个初步的内存管理方案,并通过一个巧妙的数据结构将全部内存井井有条地管理起来。

为什么要给内存划分边界

让我们从 main 函数的第一行代码开始读。
// init/main.c
void main(void) {
ROOT_DEV = ORIG_ROOT_DEV;
drive_info = DRIVE_INFO;
...
}
首先,ROOT_DEV 为系统的根文件设备号,drive_info 为之前 setup.s 程序获取并存储在内存 0x90000 处的设备信息,我们先不管这俩变量,等之后用到了再说。
我们看后面这一“坨”很影响整体画风的代码。
// init/main.c
void main(void) {
...
memory_end = (1<<20) + (EXT_MEM_K<<10);
memory_end &= 0xfffff000;
if (memory_end > 16*1024*1024)
memory_end = 16*1024*1024;
if (memory_end > 12*1024*1024)
buffer_memory_end = 4*1024*1024;
else if (memory_end > 6*1024*1024)
buffer_memory_end = 2*1024*1024;
else
buffer_memory_end = 1*1024*1024;
main_memory_start = buffer_memory_end;
...
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

内存划分:如何借助边界值划分内存? 本文介绍了一种初步的内存管理方案,通过计算边界值将内存划分为主内存、缓冲区和内核程序。文章首先讨论了为何需要给内存划分边界,然后详细解释了内存划分的具体实现。通过分析代码和数据结构,阐述了主内存的管理方式,重点介绍了mem_map结构的作用。最后,展望了内存申请与释放的操作,强调了与mem_map结构的关联。整体而言,本文通过简洁的代码分析和清晰的图示,为读者提供了对内存划分及管理的深入理解。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 小北
    看了两遍,大概看懂了,最大支持16M内存,排除1M以内的内核代码区,因此mem_map管理剩余15M大小内存区,按照4K分页,前1M缓冲区设置为100(UESD),不知道理解是否正确
    2023-03-31归属地:陕西
    2
  • ileruza
    mem_map凭什么是跟1M以上的地址一一对应的?
    2023-02-26归属地:广东
    1
    1
  • liiiiiii
    打卡
    2023-02-21归属地:广东
  • 浩仔是程序员
    打卡
    2023-02-15归属地:广东
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部