Linux 0.11内存初始化:内存分块与管理分析
需积分: 0 178 浏览量
更新于2024-07-13
收藏 3.04MB PPT 举报
"内存初始化过程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的内存管理策略充分考虑了早期硬件的限制,通过精心的布局和初始化,确保了系统在有限的内存资源下能高效运行。内存初始化是这一策略的起点,它为后续的内存分配、进程管理和系统运行奠定了基础。
2019-05-08 上传
495 浏览量
2010-06-12 上传
2023-07-11 上传
点击了解资源详情
点击了解资源详情
2023-02-06 上传
2022-06-24 上传
2012-12-09 上传
条之
- 粉丝: 25
- 资源: 2万+
最新资源
- Python中快速友好的MessagePack序列化库msgspec
- 大学生社团管理系统设计与实现
- 基于Netbeans和JavaFX的宿舍管理系统开发与实践
- NodeJS打造Discord机器人:kazzcord功能全解析
- 小学教学与管理一体化:校务管理系统v***
- AppDeploy neXtGen:无需代理的Windows AD集成软件自动分发
- 基于SSM和JSP技术的网上商城系统开发
- 探索ANOIRA16的GitHub托管测试网站之路
- 语音性别识别:机器学习模型的精确度提升策略
- 利用MATLAB代码让古董486电脑焕发新生
- Erlang VM上的分布式生命游戏实现与Elixir设计
- 一键下载管理 - Go to Downloads-crx插件
- Java SSM框架开发的客户关系管理系统
- 使用SQL数据库和Django开发应用程序指南
- Spring Security实战指南:详细示例与应用
- Quarkus项目测试展示柜:Cucumber与FitNesse实践