Linux 0.11内核中的物理内存管理
需积分: 10 156 浏览量
更新于2024-12-12
收藏 222KB PDF 举报
"Linux 0.11内存管理主要涉及在保护模式下如何管理和访问物理内存。在保护模式中,硬件提供了虚拟存储的基础,但实际的内存管理任务仍由操作系统完成。Linux 0.11通过一种巧妙的方式在内核中直接操作物理内存,即让内核使用的线性地址与物理地址重合,以避开线性地址映射的障碍。
在进入保护模式前,需要初始化页目录表和页表。在Linux 0.11中,由于仅处理16MB物理内存和4GB线性空间的情况,只需要一个页目录表和四个页表。页目录表置于物理地址0x0000,页表分别位于pg0(0x1000)、pg1(0x2000)、pg2(0x3000)和pg3(0x4000)。
关键代码片段位于`linux/boot/head.s`,首先清零5页内存,包括页目录表和4个页表。接着,设置页表项以映射物理内存:
```
200 movl $_pg_dir, %eax /*pg_dir*/
201 movl %eax, %ebx /*base address*/
202 movl $_pg_zero, %esi /*pg_zero*/
203zero_loop:
204 movl (%esi), %edx /*clear page table entry*/
205 movl %edx, (%ebx)
206 addl $4, %ebx /*next entry*/
207 addl $4, %esi /*next pg_zero byte*/
208 loop zero_loop
```
这段代码将页目录表和页表的每个条目清零,然后进行初始化。初始化过程中,每个页表项被设置为指向物理内存的特定段,从而实现线性地址与物理地址的映射。
内存的分配与回收是内存管理的另一重要方面。在Linux 0.11中,内存分配通常通过`kmalloc`函数完成,它会从空闲内存块链表中寻找合适大小的块并分配。分配后,内存块会被从链表中移除,并更新内存管理数据结构。当内存不再需要时,通过`kfree`函数进行释放,将内存块返回到空闲链表。
为了跟踪内存的使用情况,Linux 0.11维护了一个空闲页列表,每个页都有状态信息,例如是否已分配、是否可交换等。此外,还存在一个全局变量`free_pages`记录当前系统中可用的空闲页面数量。
Linux 0.11的内存管理涉及了页级的地址映射、初始化、分配和回收机制,以及内存状态的跟踪。这些机制确保了系统在保护模式下能安全、高效地管理内存资源。通过理解这些基础知识,可以更好地了解早期Linux内核的工作原理,同时为理解现代操作系统内存管理打下基础。
112 浏览量
2008-01-26 上传
301 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
222 浏览量
170 浏览量
LU142857
- 粉丝: 6
- 资源: 9
最新资源
- EXT开发的一个实用教材
- IBM官方的AIX5.2的图文安装指南
- Shell 設計入門,很详细的教学笔记
- HTML常用特殊字符的编码
- 2008年[下半年]软件设计师[下午B卷].pdf
- Arm Linux开发笔记.pdf
- 2008年[下半年]软件设计师[上午B卷].pdf
- oraclereleasenote(linuxx86)
- install oracle10g on linux
- sap人力资源配置实现
- Web_Service开发指南_2.3.1
- Getting Started with Flex 3 英文原版 Adobe 官方资源
- 人才数据库及网站的设计毕业论文
- 硬件维护试题2007年3月
- CUDA资料的学习,特别初学者
- td de xue xi