赞
踩
进程地址空间是一个抽象概念,为运行中的程序提供了虚拟内存空间,包括代码、数据和堆栈等部分。操作系统通过进程地址空间管理不同进程的内存访问,确保它们互相隔离。
进程地址空间的分配如图:
虚拟地址: 进虚拟地址是一种计算机中用于访问内存的抽象地址,它并不直接对应着计算机内存中的实际存储位置。这使得程序员可以使用相对简单的虚拟地址进行内存访问。
物理地址: 实际存在于计算机硬件上的地址,用于在RAM(内存)中定位存储的数据。
为了实现虚拟地址到物理地址的映射,操作系统使用页表这一数据结构。页表将虚拟地址划分成页(通常大小为4KB),并将每个页映射到物理内存的相应位置。
定义: MMU是一种硬件组件,嵌入在计算机的中央处理器(CPU)中。它负责实际的地址转换工作,将程序使用的虚拟地址转换为物理地址。
作用: MMU的主要作用是执行页表中定义的虚拟地址到物理地址的转换。当程序试图访问内存中的数据时,MMU会检查页表,找到相应的物理地址,并将数据加载到CPU的寄存器中。
虚拟地址通过页表和MMU的映射机制,被映射到物理地址。这种映射关系使得程序员能够使用相对简单的虚拟地址来访问内存,而无需考虑实际的硬件细节。
以下是一个父进程和其子进程的地址空间的映射图
多道程序设计: 允许多个进程同时运行,每个进程都有独立的地址空间,防止彼此干扰。
地址隔离: 防止程序直接访问其他程序的内存,提高系统的安全性和稳定性。
简化编程: 程序员可以使用相对简单的虚拟地址进行内存访问,而不必考虑实际硬件细节.
地址空间限制: 物理地址空间有限,而虚拟地址提供了更大的地址空间,支持更大的程序和更多的并发执行。
灵活性: 虚拟地址允许操作系统在物理内存上动态调整程序的位置,提高系统的灵活性和性能。
虚拟地址到物理地址的映射:
在程序执行之前,操作系统会加载可执行文件并创建进程。操作系统使用页表来管理虚拟地址到物理地址的映射。每个进程都有自己的页表,它负责将程序使用的虚拟地址映射到实际的物理地址。
当一个函数的虚拟地址被引用时,操作系统会使用进程的页表查找虚拟地址对应的物理地址。如果页表中没有相应的映射关系,可能会触发缺页中断。
缺页中断处理:
如果出现缺页中断,操作系统会从硬盘或其他存储介质中加载相应的页面到内存中。这可能涉及到将某个磁盘上的页加载到内存中的某个位置,并在页表中建立映射关系。这个过程确保了只有在需要时才会将数据加载到内存,从而节省内存空间。这个过程类似于写时拷贝。
函数加载到内存:
一旦页表中建立了虚拟地址到物理地址的映射关系,函数的代码段和相关的数据就会被加载到内存中的相应位置。这通常包括代码段、全局变量、静态变量等,也可能是其他函数的调用,那么加载的就是该函数在进程中的虚拟地址(又会形成一个循环)。
CPU 执行:
CPU 在执行程序时,会根据指令寄存器中的值,从内存中读取指令。由于操作系统通过页表将虚拟地址映射到了物理地址,CPU 访问的实际上是物理地址上的指令。CPU 从这些物理地址中读取指令,并按照程序计数器的值逐条执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。