当前位置:   article > 正文

linux操作系统|简单介绍进程地址空间(物理地址、虚拟地址、页表、缺页中断、mmu、进程地址空间的作用)_中断服务程序是虚拟地址还是物理地址

中断服务程序是虚拟地址还是物理地址

1. 什么是进程地址空间

进程地址空间是一个抽象概念,为运行中的程序提供了虚拟内存空间,包括代码、数据和堆栈等部分。操作系统通过进程地址空间管理不同进程的内存访问,确保它们互相隔离。

进程地址空间的分配如图:

2. 虚拟地址与物理地址的概念

  • 虚拟地址:虚拟地址是一种计算机中用于访问内存的抽象地址,它并不直接对应着计算机内存中的实际存储位置。这使得程序员可以使用相对简单的虚拟地址进行内存访问。

  • 物理地址: 实际存在于计算机硬件上的地址,用于在RAM(内存)中定位存储的数据。

3. 虚拟地址和物理地址的映射

页表

为了实现虚拟地址到物理地址的映射,操作系统使用页表这一数据结构。页表将虚拟地址划分成页(通常大小为4KB),并将每个页映射到物理内存的相应位置。

内存管理单元(MMU)

  • 定义: MMU是一种硬件组件,嵌入在计算机的中央处理器(CPU)中。它负责实际的地址转换工作,将程序使用的虚拟地址转换为物理地址。

  • 作用: MMU的主要作用是执行页表中定义的虚拟地址到物理地址的转换。当程序试图访问内存中的数据时,MMU会检查页表,找到相应的物理地址,并将数据加载到CPU的寄存器中。

虚拟地址通过页表和MMU的映射机制,被映射到物理地址。这种映射关系使得程序员能够使用相对简单的虚拟地址来访问内存,而无需考虑实际的硬件细节。

以下是一个父进程和其子进程的地址空间的映射图

4. 为什么需要虚拟地址

  • 多道程序设计: 允许多个进程同时运行,每个进程都有独立的地址空间,防止彼此干扰。

  • 地址隔离: 防止程序直接访问其他程序的内存,提高系统的安全性和稳定性。

  • 简化编程: 程序员可以使用相对简单的虚拟地址进行内存访问,而不必考虑实际硬件细节.

  • 地址空间限制: 物理地址空间有限,而虚拟地址提供了更大的地址空间,支持更大的程序和更多的并发执行。

  • 灵活性: 虚拟地址允许操作系统在物理内存上动态调整程序的位置,提高系统的灵活性和性能。

5.cpu如何通过进程地址空间找到代码

虚拟地址到物理地址的映射:

在程序执行之前,操作系统会加载可执行文件并创建进程。操作系统使用页表来管理虚拟地址到物理地址的映射。每个进程都有自己的页表,它负责将程序使用的虚拟地址映射到实际的物理地址。

当一个函数的虚拟地址被引用时,操作系统会使用进程的页表查找虚拟地址对应的物理地址。如果页表中没有相应的映射关系,可能会触发缺页中断。

缺页中断处理:

如果出现缺页中断,操作系统会从硬盘或其他存储介质中加载相应的页面到内存中。这可能涉及到将某个磁盘上的页加载到内存中的某个位置,并在页表中建立映射关系。这个过程确保了只有在需要时才会将数据加载到内存,从而节省内存空间。这个过程类似于写时拷贝。

函数加载到内存:

一旦页表中建立了虚拟地址到物理地址的映射关系,函数的代码段和相关的数据就会被加载到内存中的相应位置。这通常包括代码段、全局变量、静态变量等,也可能是其他函数的调用,那么加载的就是该函数在进程中的虚拟地址(又会形成一个循环)。

CPU 执行:

CPU 在执行程序时,会根据指令寄存器中的值,从内存中读取指令。由于操作系统通过页表将虚拟地址映射到了物理地址,CPU 访问的实际上是物理地址上的指令。CPU 从这些物理地址中读取指令,并按照程序计数器的值逐条执行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/163356
推荐阅读
相关标签
  

闽ICP备14008679号