[原创]linux内核编程学习笔记二:linux内核体系结..
时间:2006-11-28 来源:davidbelle
5、linux内核对内存对管理
在linux0.11内核中,内存被划分为几个功能区:首先内存从起始位置开始,划分出一个内核模块区,接着是用于提供硬盘或软盘等块设备使用的高速缓冲区,最后是主内存区,如果含有RAM虚拟盘的系统,主内存区头部还要划分出一部分供虚拟盘存贮数据。
linux同时采用了intel cpu的内存分段和分页管理机制,因此我们首先要分清3种地址以及它们之间的关系:
(1)逻辑地址:有程序产生的与段相关的偏移地址部分,在intel保护模式下就是指程序执行代码段限长内的偏移地址。
(2)线性地址:是逻辑地址到物理地址变换的中间层。段中的偏移地址加上相应段段基地址就生成了一个线性地址。
(3)物理地址:指的是出现在cpu外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。
除此之外,我们还需要知道什么是虚拟内存。虚拟内存是指计算机呈现出要比实际拥有的内存大得多的内存量。一个比喻可以让我们很好的把握这个概念:假如说我们把一个大型的程序或者说整个计算机上的程序比喻成一个大型图书馆,cpu就是读者,而实际内存呢就是一个阅览用的书桌,那么假设我们有足够长的时间去看完图书馆所有的书,可是即使是这样,我们也不必一次把图书馆的所有书借来放到你看书的桌子上,当然桌子也放不下。因此,我们只把目前要看的书放到书桌上,等看完了在换另一本书。那么好,在计算机中也是这样的,一个程序的运行一般都是有一定顺序的,我们不用把整个程序全部加载到内存中,只是加载当前运行需要到部分,由cpu来执行,等这部分执行完了,在把另外需要的部分加载到内存中来。这样,虽然每次运行的程序只是内存中的部分,但是对于cpu来说,它面对的其实还是整个“图书馆”。这里的这个“图书馆‘就是虚拟内存!
在linux0.11内核中,给每个程序(进程)都划分了总量为64M的虚拟内存空间,因此程序的逻辑地址范围是0x00000000到0x40000000。
6、linux内核源代码的目录结构
由于linux内核是单内核模式,所有内核中所有程序几乎都有着紧密的联系。在linux0.11内核源代码中一共有14个子目录,总共包括102个代码文件。
linux | ||
|--- | boot | |
|--- | fs | |
|--- | include | |
| | |--- | asm |
| | |--- | linux |
| | |--- | sys |
|--- | init | |
|--- | kernel | |
| | |--- | blk_drv |
| | |--- | chr_drv |
| | |--- | math |
|--- | lib | |
|--- | mm | |
|--- | tools |
系统引导汇编程序 |
文件系统 |
头文件(*h) |
与cpu体系结构相关的部分 |
linux内核专用部分 |
系统数据结构部分 |
内核初始化程序 |
内核进程调度、信号处理、系统调用等程序 |
块设备驱动程序 |
字符设备驱动程序 |
数学协处理器仿真处理程序 |
内核库函数 |
内存管理程序 |
生成内核Image文件的工具程序 |
相关阅读 更多 +