《深入理解计算机系统》之虚拟内存总结

本文深入探讨虚拟内存,从ELF文件和进程的视角出发,阐述了虚拟内存的作用、物理与虚拟寻址、页表、内存映射等核心概念,解释了如何通过虚拟内存实现内存管理和保护,以及在Linux系统中的实现细节。
摘要由CSDN通过智能技术生成

前言

最近看了《深入理解计算机系统》,重温了许多操作系统和组原的知识。本篇博客主要介绍虚拟内存,让我们先从ELF-->进程引入。

ELF文件

对于每个程序,其在经历预处理、编译、汇编之后,都要经过链接器将其链接成一个单一的可执行文件。在现在Unix和x86-64 Linux系统上,其使用的可执行格式为ELF,如下:

 

可以看到ELF涵盖了程序中的各种信息,加载器就是通过读取ELF文件中的数据和代码,将其从磁盘复制到内存中,生成相应的进程并跳转到第一条指令或入口点来运行该程序。

进程

进程地址空间如下图所示:

 

可以看到,只读代码和数据对应于elf文件的(.init,.text,.rodata),读写段对应于elf文件的(.data,.bss)。

问题来了,如果我们有很多个程序要运行,所需内存已经超过了我们物理内存的容量,此时该怎么处理呢?

其实,当程序运行时,如果内存空间足够大,操作系统会按分页机制,将程序调入内存中。否则,操作系统会分批将程序的部分内容调入内存,再通过磁盘上的虚拟内存来实现内存置换,达到按需加载的目的。

到这里对虚拟内存有一定的概念了,似乎其作用就是“虚拟地扩充我们的内存”。

虚拟内存

由以上我们引入虚拟内存。

什么是虚拟内存

为了更加有效地管理内存,操作系统对主存提出了一种抽象的概念:虚拟内存。其通过硬件+软件的支持,为进程提供了更大的、一致的和私有的地址空间。虚拟内存主要提供一下三个能力:

  • 将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存;

  • 它为每个进程提供

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值