中国建设银行曲江支行网站,西安注册公司在哪个网站系统,做网站怎么赚钱,wordpress 预览插件文章目录 一、内存管理1.1 内存管理的出现1.2 内存管理的用途1.2.1 虚拟内存和物理内存的定义1.2.1.1 什么是虚拟内存#xff1f; 1.2.2 虚拟内存的划分#xff1a;用户空间与内核空间 1.3 操作系统和MMU1.3.1 OS和MMU的关系1.3.2 虚拟地址到物理地址的映射流程 1.4 物理内存… 文章目录 一、内存管理1.1 内存管理的出现1.2 内存管理的用途1.2.1 虚拟内存和物理内存的定义1.2.1.1 什么是虚拟内存 1.2.2 虚拟内存的划分用户空间与内核空间 1.3 操作系统和MMU1.3.1 OS和MMU的关系1.3.2 虚拟地址到物理地址的映射流程 1.4 物理内存管理基础概念 一、内存管理
1.1 内存管理的出现
早期的计算机程序是直接运行在物理内存上。也就是程序在运行的过程中直接访问的是物理地址。如果这个系统只运行一个程序只要这个程序所需的内存不要超过该机器的物理内存就不会出现问题也就不需要考虑内存管理反正就一个程序就这么点内存够不够用就是自己的事了。现在的系统都是支持多任务多进程的这样CPU以及其他硬件的利用率会更高。这个时候就要考虑到将系统内有限的物理内存如何及时有效的分配给多个程序了这个事情就称之为内存管理。
1.2 内存管理的用途
内存管理是Linux内核通过软硬件协作来管理内存的分配及回收的一种方法。 在Linux系统上电自检POST,Power-On-Self-Test阶段使用临时内存而系统启动后正常运行阶段的内存使用又有两大类 1固定的内存分配是永久的不变的主要给内核代码及数据使用 2动态内存分配主要源于进程的创建和空间的扩张。本文主要针对操作系统正常运行时对动态内存的管理。
1.2.1 虚拟内存和物理内存的定义
1.2.1.1 什么是虚拟内存 虚拟内存是操作系统发展史上一个重要的里程碑虚拟内存的使用避免程序直接和主存物理内存打交道并且对缓存、主存和磁盘做了统一抽象这样程序就可以突破物理内存的大小限制当然程序还是要受制于虚拟内存的大小限制的。 程序中看到的内存地址是虚拟内存地址程序读写内存时会被映射到实际的物理内存中这个映射工作是由MMU内存管理单元来完成MMU接收CPU发出的虚拟地址将其转换为物理地址后发送给内存内存按照该物理地址进行相应访问后读出或写入相关数据。
1.2.2 虚拟内存的划分用户空间与内核空间
从Linux操作系统层次上可将Linux虚拟内存划分为 用户空间内存和内核空间内存。 虚拟内存的大小取决于处理器体系结构的字长。32位的CPU最大寻址范围为2^32 - 1也就是4G的线性地址空间。Linux简化了分段机制使得虚拟地址与线性地址总是一致。因此Linux的虚拟地址空间也为04G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节从虚拟地址0xC0000000到0xFFFFFFFF供内核使用称为“内核空间”。将较低的3G字节从虚拟地址 0x00000000到0xBFFFFFFF供各个进程使用称为“用户空间。因为每个进程可以通过系统调用进入内核因此Linux内核由系统内的所有进程共享。于是从具体进程的角度来看每个进程可以拥有4G字节的虚拟空间。
用户空间对应进程所以每当进程切换用户空间就会跟着变化而内核空间是由内核负责映射它并不会跟着进程变化是固定的。内核空间地址有自己对应的页表用户进程各自有不同的页表。每个进程的用户空间都是完全独立、互不相干的。Linux 内核采用了最简单的映射方式来映射物理内存即把物理地址PAGE_OFFSET按照线性关系直接映射到内核空间。PAGE_OFFSET大小为 0xC0000000 (3G)。但是Linux内核并没有把整个1G空间用于线性映射而只映射了最多896M物理内存预留了最高端的128M虚拟地址空间给IO设备和其他用途。
1.3 操作系统和MMU
实际上MMU是为满足操作系统越来越复杂的内存管理而产生的。
1.3.1 OS和MMU的关系
系统初始化代码会在内存中生成页表然后把页表地址设置给MMU对应寄存器使MMU知道页表在物理内存中的什么位置以便在需要时进行查找。之后通过专用指令启动MMU以此为分界之后程序中所有内存地址都变成虚地址MMU硬件开始自动完成查表和虚实地址转换。OS初始化后期创建第一个用户进程这个过程中也需要创建页表把其地址赋给进程结构体中某指针成员变量。即每个进程都要有独立的页表。用户创建新进程时子进程拷贝一份父进程的页表之后随着程序运行页表内容逐渐更新变化。
1.3.2 虚拟地址到物理地址的映射流程
VA到PA的映射过程MMU得到VA后先在TLB内查找若没找到匹配的PTE条目就到外部页表查询并置换进TLB根据PTE条目中对访问权限的限定检查该条VA指令是否符合若不符合则不继续并抛出exception异常符合后根据VA的地址分段查询页表保持offset(广义)不变组合出物理地址发送出去。 在这个过程中,软件的工作核心就是生成和配置页表。
1.4 物理内存管理基础概念
Linux为了用统一的代码获得最大的兼容性引入了以下物理内存管理概念
物理内存结点node物理内存区域Zone物理内存页框page Frame
只有年轻的将士才会悔恨过去熟练的将军都是在深夜里擦亮剑准备下一场战斗。