KyL*_*KyL 5 memory kernel memory-management process
每个进程都有一个页表。fork内核在或中为进程创建页表的时间是什么时候exec?
MMU应该有一个寄存器指向页表的基地址。这个基址是虚拟地址还是物理地址?
内核如何为页表分配物理页框?
在 fork 期间,使用 copy_mm() 为新任务复制当前任务的 mm_struct 的精确副本。在早期版本的内核中,每当创建子进程时,都会立即复制完整的地址空间,但是最近的版本似乎具有 COW(写入时复制)策略,仅在第一次需要修改子进程时才创建副本数据。
一般来说,MMU 负责虚拟地址到物理地址的转换。然而,MMU 中的地址转换功能/单元取决于处理器的类型以及操作系统的集成/支持类型。MMU寄存器指向当前正在执行的进程的页表/段。逻辑存储器被认为是在称为页的块中,而物理存储器被认为是在称为帧的块中。逻辑地址是页号和页偏移量的组合。页表用于操作系统将逻辑地址映射到物理地址,并确定相应页号在表中对应的帧号。该帧号与页偏移量结合起来就成为物理地址。
在 x86 的情况下,MMU 转换可以分两个阶段进行,第一步是将逻辑地址(由寄存器指向)转换为线性地址,然后在第二步中将其转换为物理地址。分页模式通过配置CR0寄存器的MSB来设置。页目录(CR3)中最多可以维护1024个页表,其信息(页表基地址和其他信息)。线性地址位A22-A31指向页目录中1024个可能的页表基地址之一。
页表和页描述符位于内存中。因此,它们应通过 TLB(翻译后备缓冲区)进行处理,TLB 是一种 4 路组关联高速缓存,最多可容纳 32 个页表条目(最近访问的条目),以避免每次内存访问时都从内存中获取。
在启动过程中,内核从 BIOS 中了解各种物理内存范围、相应的内存类型映射并创建物理地址映射/表。然后,内核将这些信息复制到适当的内核数据结构中,并认为这些页框可用。
请注意,一旦内核加载到内存中,可能就没有页表了,因为分页可能尚未在 CPU 中初始化。然而,随后,一旦分页被初始化,内核就会分两个阶段初始化自己的页表。在第一阶段,内核创建足以让内核位于 RAM 中的初始页表。在第二阶段,内核使用所有可用的 RAM 并创建完整的页表。
| 归档时间: |
|
| 查看次数: |
3611 次 |
| 最近记录: |