虚拟存储器作为计算机系统中重要概念,很多操作系统书籍都已经详细地阐述了具体技术理论。但是,要真正地理解和明白,其实还是有一定难度的。本文将以linux 虚拟存储器系统来阐述虚拟存储器系统的相关知识,如果本人理解有误,希望大家指正。
1、 linux 可执行文件的格式(ELF),
计算机系统中,虚拟存储器肯定与运行的程序(即进程)息息相关。可执行程序是文件系统中的一个可执行文件,因此首先将可执行文件的格式ELF简要介绍下。本文讲述的可执行文件,并不是所有linux 下面具有执行权限的文件,而是利用C/C++ 语言编写,C/C++ 编译器生成的ELF 格式的可执行文件。比如,利用gcc –o hello hello.c 程序生成的hello 文件就是ELF 格式的。ELF 格式如下图所示(摘取自深入计算机系统):
可执行文件被划分为段,以段结构进行组织,每一段都对应不同的内容。其中.text 段就是程序代码经过编译以后形成的。.rodata 就是程序中的只读数据,.data 段是程序中声明的全局的可变变量等。
2、运行可执行目标文件
当在shell 窗口敲入如下命令:> ./hello 时,操作系统就会创建一个进程,有自己的虚拟地址空间(其实就是一个地址范围,并且每个进程的范围都一样),操作系统会将该进程相关信息与可执行文件进行关联。关联过程如下:
左边的图片可以理解为一个linux 进程的虚拟存储器,它的虚拟地址空间(即计算机指令的地址范围)为:0-2的32次方(64位机器就是2的64次方),这个虚拟地址空间范围告诉大家可以去使用这个空间的任何地址,但是一般一个程序只会使用其中一部分。既然是“虚拟”,说明它不是真实存在的,是逻辑上的概念,用于说明计算机中如何去组织这些信息。在计算机中不存在实际空间存放图片中左边这样的结构。操作系统是这样实现的:利用数据结构分别记录.text 段,.data段等的相关信息,当程序执行的时候,再利用这些记录的信息去将可执行文件的信息加载到内存中进行运行(具体参考深入理解计算机系统的9.7.2)。
a、可执行文件中的text 段的内容如何知道对应到左边的哪个地址范围之内?
这是因为可执行文件中的text段中有虚拟地址信息。所有进程能使用的虚拟地址空间范围都是一样的(0-2的32次方),所有可执行程序的text 段中的地址完全有可能相同。它通过这些虚拟地址信息,映射到进程的虚拟地址空间的相应范围,实际的实现过程就是在数据结构中记录这个地址范围。
b、为什么同样的地址在内存中不会产生冲突呢?
这是因为这些地址都是虚拟存储器中的地址,程序在运行的过程中,操作系统通过一定的地址翻译机制(参考深入理解计算机系统9.6节)将虚拟地址翻译为实际内存中的地址。
3、虚拟内存(linux中叫交换空间)
a、内存才256M,为什么运行比256M 大的可执行文件都能运行呢?
操作系统运行程序的时候,并不是将所有的信息都加载到内存中,它是按需加载,先加载程序现在运行所需的代码和数据到内存中,当程序运行一段时间后,如果需要别的代码和数据时,操作系统会将该进程目前在内存的某一部分代码换出来存储在磁盘的某个空间(也就是虚拟内存或交换空间,注意这个空间并不是可执行文件的硬盘空间),并将所需的代码加载到内存中。这种方式就解决了程序比内存大的情况,而刚才的那个交换空间默默地作为内存的扩展,因此称为虚拟内存。
4、参考文献
a、Playing with Virtual Memory (这篇文章从程序的角度讲解了虚拟内存)
翻译地址:http://blog.nosqlfan.com/html/2956.html
b、Computer Systems-A Programmer’s Perspective(深入理解计算机系统第二版,主要参考第7章和第9章)–很好的一本书,强烈推荐
看完这篇文档,大家可能还是云里雾里,希望大家留言进行交流!
相关推荐
**申请地址**: [http://www.po-star.http://www.mcu-memory.comcom/sample.asp](http://www.po-star.http://www.mcu-memory.comcom/sample.asp) #### 十一、深圳市英蓓特信息技术有限公司 **简介**: 英蓓特专注于...
存储器可以分为内存储器(RAM)和外存储器(ROM)。内存储器可以读写,而外存储器只能读不能写。 4. 输入/输出设备 输入/输出设备是计算机与外部世界交流信息的部件。常见的输入/输出设备包括键盘、鼠标、显示器、...
操作系统课程设计任务书的核心主题是“存储器管理”,在这一任务中,学生被要求通过多进程同步方法解决经典的生产者-消费者问题。该问题属于并发控制领域的基础问题,旨在演示如何在多线程或多进程环境下有效地共享...
### STM8L15x微控制器家族参考手册详解 #### 引言 STM8L15x是一款由意法半导体(STMicroelectronics)设计并生产的微...通过深入理解其架构和功能,开发者能够充分利用STM8L15x的优势,构建高效、节能的电子设备。
- **网站**: [http://www.huazhoucn.com/mianfei.aspx](http://www.huazhoucn.com/mianfei.aspx) - **提供产品**: - FRAM (铁电随机存取存储器) - ROM (只读存储器) - TRAM (暂存器访问存储器) - NOR (非门) - ...
6. **存储器管理**:理解ROM和RAM的使用,以及如何通过编程访问外部存储器。 7. **串行通信**:如UART(通用异步收发传输器),用于单片机与其他设备间的通信,例如显示字符或接收指令。 8. **编译环境与调试工具*...
根据提供的文件信息,本文将对其中提及的各个网站及其所提供的资源进行详细介绍,特别是与铁电存储器(FRAM)、集成电路(IC)以及相关电子元件样品申请有关的信息。 ### 1. 铁电存储器(FRAM) #### 介绍 铁电存储器...
思维导图:2020.10.23-计算机操作系统(第四版)(汤小丹)-第四章:存储器管理 #P120.png 原文:http://t.csdn.cn/vAY4Q
以下评论转自 元鹰 的空间: http://hi.baidu.com/%D4%AA%D3%A5 简介: 中国石油大学远程教育课件 授课教师:张柳村 学时:30 所用教材:数据结构(C语言版)严蔚敏.吴伟民编 清华大学出版社 《数据结构》在...
虚拟存储器是一种技术,允许程序使用比实际物理内存更大的地址空间,通过将不常用的数据交换到磁盘上的交换区(也称为交换文件)来实现。 3. **文件管理**:操作系统对文件进行组织、命名、存储、保护和检索,如...
4.存储器:4GB eMMC高速Flash 5.显示分辨率:1280*720P PC客户端: 1.CPU处理器:Intel Pentium 4 1.6GHz以上 2.内存:1GB以上 3.硬盘:80GB以上 4.显示器分辨率:1280*720P以上 软件配置 Web服务端: 1.操作系统:...
硬盘和U盘安装Linux指南 本文档提供了使用硬盘和U盘安装Linux的详细指南,涵盖了硬盘安装和U盘安装两种方式。硬盘安装部分详细介绍了硬盘的分区说明、vmlinuz和initrd.img文件的使用、grub引导的配置等内容。U盘...
云存储器网址 https://demo.owncloud.org/ test test Android代码路径 https://github.com/owncloud/android https://github.com/owncloud/android-library https://github.com/JakeWharton/ActionBarSherlock ...
使用TrackAudio与Jlayer播放AES加密的mp3,不必保存到外部存储器上。 github:https://github.com/54wall/EncryptionAudioTrackMP3 csdn:...简书:http://www.jianshu.com/p/456e455d64ab
[root@localhost yaffs2]# ./patch-ker.sh c /root/linux-test/linux-2.6.32.2 注意第二个参数 m/s,要特别注意如果不是最新的 Linux 内核就要使用参数 m 而不是 s,否则内核编译时就会发生错误。 YAFFS2 文件系统...
实验二 虚拟存储器 一. 实验内容 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。 二. 实验目的 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主...
- 文档中提及的网址(http://www.vcc-gnd.com/)可能是一个与电路板设计相关的技术论坛或社区,用户可以在这里获取更多关于STM32F103C8T6的使用和支持。 这个电路原理图详细展示了STM32F103C8T6的核心板设计,包括...
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制 ...
如果有其他疑问或建议,请联系:E-mail: WJW-Davy@QQ.com 或 登陆我的主页:http://hi.baidu.com/wjwdavy<br><br> iSecurity Fill 是iSecurity Suite 软件套装中一员,用于填充存储器上的空闲字节。一个小小的...