詹雯婷近况:进程描述符存储的寄存器信息 物理内存布局

来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 21:51:19
进程描述符存储的寄存器信息
2010-04-19 21:10
1.程序计数器(PC)和栈指针寄存器(SP)
2.通用寄存器
3.浮点寄存器
4.包含CPU状态信息的处理器控制寄存器(PSW)
5.用来跟踪RAM访问的内存管理寄存器。
进程虚拟地址空间处理通常用一组内存区描述符描述,当进程通过exec()类系统调用开始某个程序的执行时,内核分配给进程的虚拟地址空间由以下内存区域组成:
1. 程序的可执行代码
2. 程序的初始化数据
3. 程序的未初始化数据
4.初始程序栈(用户态栈)
5. 所需共享库的可执行代码和数据
6.堆(由程序动态请求的内存)
物理内存布局
在初始化阶段,内存必须建立一个物理地址映射来指定物理地址是不是可用。
一般内核将下列页框记为保留:
1)在不可用的物理地址范围内的页框
2)含有内核代码和已经初始化的数据结构的页框
一般来说,Linux内核安装在RAM第二个MB开始的地方,而不是直接安装在第一个MB开始的地方,原因如下:
1)页框0由BIOS使用,存放加电自检期间检查到的系统硬件配置
2)物理地址0x000a0000 到0x000fffff的范围通常需要保留给BIOS例程,并且映射到ISA图形卡上的内部内存。
3)特定的计算机模型也肯能保留部分地址
最终内核映射方案
由内核页表所提供的最终映射必须把从0xc0000000开始的线性地址转化为从0开始的物理地址
宏__pa用于把从PAGE_OFFSET开始的线性地址转换成相应的物理地址,而宏__va做相反的转化。
主内核页全局目录仍然存在swapper_pg_dir变量中,他由paging_init()函数初始化。该函数进行如下操作:
1. 调用pagetable_init()适当地建立页表项
2. 把swapper_pg_dir的物理地址写入cr3控制寄存器中。
3. 如果CPU支持PAE并且如果内核编译时支持PAE,则将cr4控制寄存器的PAE置位。
4. 调用__flush_tlb_all()使TLB的所有项无效