第二版linux操作系统原理与应用chp4
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内核空间(1GB)
虚
进程1 进程2
的用 的用
户空 户空
间
间
(3GB) (3GB)
拟
进程n 的用
地
户空
址
间
空
(3GB)
间
虚拟内存、内核空间和用户空间
❖ 虚拟内存-共4G字节,分为内核空间 (最高的1G字节)和用户空间(较低的 3G字节)两部分,每个进程最大拥有3G 字节私有虚存空间
❖ 地址转换-通过页表把虚存空间的一个 地址转换为物理空间中的实际地址。
扩大了的记忆-虚拟内存
❖ 虚拟内存的基本思想:在计算机中运行 的程序,其代码、数据和堆栈的总量可 以超过实际内存的大小,操作系统只将 当前使用的程序块保留在内存中,其余 的程序块则保留在磁盘上。必要时,操 作系统负责在磁盘和内存之间交换程序 块。
虚地址到实地址转换
虚拟地址
虚拟内存、内核空间和用户空间
#define __pa(x)
((unsigned long)(x)-PAGE_OFFSET)
#define __va(x)
((void *)((unsigned long)(x)+PAGE_OFFSET))
➢ 给定一个虚地址x,其物理地址为x-PAGE_OFFSET ➢ 给定一个物理地址x,其虚地址为x+PAGE_OFFSET
第四章 内存管理
Linux的内存管理 进程的用户空间管理 请页机制 物理内存的分配与回收 交换机制 内存管理实例
内存管理 内存管理
本章将围绕以下两个问题展开:
一个源程序编译链接后形成的地址空间是虚地址 空间还是物理地址空间?如何管理?
程序装入内存的过程中,虚地址如何被 转换为物理地址?
内存的层次结构
内核空间到物理内存的映射
❖ 内核空间由所有进程共享,其中存放 的是内核代码和数据,即“内核映象”
❖ 进程的用户空间中存放的是用户程序 的代码和数据
❖ 内核空间映射到物理内存总是从最低
地址(0x00000000)开始,使之在内
核空间与物理内存之间建立简单的线 性映射关系。
<>
内核空间到物理内存的映射
指针,每个vm_area_struct代表进程的一个虚拟 地址区间。
<>
相关数据结构间的关系
< > 相关数据结构之间 的关系示意图
创建进程用户空间
• fork()系统调用在创建新进程时也为该 进程创建完整的用户空间
• 具体而言,是通过拷贝或共享父进程 的用户空间来实现的,即内核调用 copy_mm()函数,为新进程建立所有页 表和mm_struct结构
struct list_head mmlist;
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long rss, total_vm, locked_vm;
unsigned long def_flags;
……
};
<>
mm_struct 结构主要域
VM_AREA_STRUCT 结构
struct vm_area_struct { struct mm_struct * vm_mm; unsigned long vm_start; unsigned long vm_end; struct vm_area_struct * vm_next; pgprot_t vm_page_prot; unsigned long vm_flags; struct rb_node_t vm_rb; struct vm_operations_struct * vm_ops; unsigned long vm_pgoff; struct file * vm_file; void * vm_private_data; …… };
虚拟地址空间 4G
3G
物理内存 X
0
0
图4.1 内核的虚拟地址空间到物理地址空间的映射
<>
内核空间到物理内存的映射
page.h头文件中对内核空间中地址映射的 说明及定义:
#define __PAGE_OFFSET
(0xC0000000)
……
#define PAGE_OFFSET
((unsigned long)__PAGE_OFFSET)
图4.2 虚拟内存实现机制及之间的关系
<>
进程的用户空间管理
• 每个进程经编译、链接后形成的二进制 映像文件有一个代码段和数据段
• 进程运行时须有独占的堆栈空间
<>
进程用户空间
• Linux把进程的用户空间划分为一个个区间,便 于管理
• 一个进程的用户地址空间主要由mm_struct结构 和vm_area_structs结构来描述。
• mm_struct结构对进程整个用户空间进行描述 • vm_area_structs结构对用户空间中各个区间(简
称虚存区)进行描述
<>
mm_struct 结构
struct mm_struct {
struct vm_area_struct * mmap;
/*核心数据结构*/
rb_root_t mm_rb;
struct vm_area_struct * mmap_cache;
pgd_t * pgd;
atomic_t mm_users;
atomic_t mm_count;
int map_count;
struct rw_semaphore mmap_sem;
spinlock_t page_table_lock;
<>
VM_AREA_STRUCT 结构主要域
<>
相关数据结构间的关系
• 进程控制块是内核中的核心数据结构。 • 在进程的task_struct结构中包含一个mm域,它
是指向mm_struct结构的指针。 • 而进程的mm_struct结构则包含进程的可执行映
像信息以及进程的页目录指针pgd等。 • 该结构还包含有指向vm_area_struct结构的几个
<>
内核映像
保留 内核映像
动态内存
0
0x100000 start_mem
ຫໍສະໝຸດ Baidu
end_mem
系统启动以后的物理内存布局
<>
虚拟内存实现机制
• Linux虚拟内存的实现需要多种机制 的支持 –地址映射机制 –请页机制 –内存分配和回收机制 –交换机制 –缓存和刷新机制
<>
虚拟内存实现机制及之间的关系
地址映射