"内存初始化过程init/main.c-存储管理分析" 在Linux 0.11内核中,内存管理是一个至关重要的部分,它涉及到系统的稳定性和效率。内存初始化过程主要在`init/main.c`文件中进行,这个过程是操作系统启动过程中的一部分,用于设置和规划内存的使用布局。 内存初始化首先通过读取BIOS提供的信息来确定扩展内存的大小。扩展内存的实际大小以k为单位存储在地址0x90002开始的2字节中。计算内存结束地址`memory_end`时,会加上1MB的基础内存(即`(1<<20)`),然后加上扩展内存的大小`(EXT_MEM_K<<10)`。这样的设计确保了内存在物理地址空间中的正确位置。 为了简化内存管理和页的计算,操作系统会忽略不足4KB的内存块,通过将`memory_end`与`0xfffff000`进行按位与操作,使得内存大小对齐到4KB的页边界。这样做是因为内存管理通常是基于4KB页面进行的。 内存大小的限制设定在16MB,如果`memory_end`超过这个值,会被强制设为16MB,以防止超出硬件实际支持的范围。此外,根据内存大小的不同,系统会为缓冲区分配不同数量的空间: - 如果内存大于12MB,缓冲区`buffer_memory_end`分配4MB。 - 如果内存介于6MB和12MB之间,分配2MB。 - 否则,如果内存小于或等于6MB,分配1MB。 缓冲区主要用于文件系统,为文件缓冲机制提供存储空间。主内存区位于缓冲区之后,是新进程可以使用的内存区域,这部分内存由操作系统管理,包括分配和回收。 内存的这种布局设计使内核区、缓冲区、虚拟盘(如果有)和主内存区各司其职,确保了系统资源的有效利用。内核区存放内核代码,由于经常被调用,所以常驻内存。缓冲区为文件系统服务,提高文件操作的效率。虚拟盘(RAMDISK)是可选的,如果启用,会占用一部分内存作为虚拟磁盘使用。主内存区则是进程运行的舞台,其大小根据系统总内存自动调整。 在内存管理的其他关键文件中,如`mm/memory.c`和`mm/page.s`,包含了更深入的内存管理逻辑,比如页表的维护、页面的分配和回收等。而在`kernel/fork.c`和`lib/malloc.c`中,我们可以看到如何处理进程创建时的内存复制以及动态内存分配的实现。 Linux 0.11的内存管理策略充分考虑了早期硬件的限制,通过精心的布局和初始化,确保了系统在有限的内存资源下能高效运行。内存初始化是这一策略的起点,它为后续的内存分配、进程管理和系统运行奠定了基础。
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 23
- 资源: 2万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)