理解内存(1)

本文介绍了Linux系统下的虚拟内存概念及其重要组成部分——页表。文章详细解释了虚拟内存如何帮助程序避免直接竞争物理内存资源,并通过页表映射到实际物理地址,使多个进程能在同一系统中共存并高效运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我捡着比较重要的翻译了一下,文章主要是介绍虚拟内存和page table。

原文链接:http://www.ualberta.ca/CNS/RESEARCH/LinuxClusters/mem.html

其实原文主要介绍了他的一个linux下的集群产品。现在我挑着内容翻译了。



内容

·        简介

·        程序和进程

·        StorageClass and Scope

·        ProgramSize

·        MemoryMap

·        CallStack

·        PageTable

·        Libraries

·        MemoryLimits

·        MemoryAllocation

·        ImplementationDetails

·        References


简介

在Linux下,所有的程序运行在虚拟内存下. 如果一个C程序员试图打印一个指针 (在实践中这并不必要), 那么结果将会是虚拟内存的地址. 在Fortran语言中, 尽管指针不是他的特色,但是虚拟内存地址还是隐含在引用变量和子程序调用中.

当然, 一个程序的代码和数据实际上驻留在真实的物理内存中。 因此, 每一个虚拟内存地址通过操作系统中的pagetable映射到物理内存当中 (seeFigure 1).举一个例子,如果去检索或者是更新一个变量的值,那么程序必须首先在page table中找到与虚拟内存关联的真实的物理内存的地址。幸运的是, 这个步骤在Linux中的操作是透明的。Linux内核中优化了的代码和CPU中特殊的电路结合在一起将使之变成一个有效率的操作。

Fig. 1 Mapping virtual memory to real memory through the page table.

一般情况下在多用户的操作系统中,比如Linux, 所有的程序必须要共享有限的可用的物理内存。在虚拟内存的情况下,每个程序必须意识到与它相邻的内存的活动. 举个例子,两个独立的进程试图在同一时间直接的访问同一个片内存区域. 为了避免冲突, 那么程序必须运行在同步模式下,这导致了过分复杂的编码. 然而, 借助于虚拟内存, 所有底层的内存操作全部代理给操作系统去完成。从而, Linux 内核为每个程序维护着一个私有的Page table这将是每个程序产生一种在一个计算机中是独立着的错觉. 当两个并发的程序试图去引用同一个虚拟内存地址的时候,那么内核将保证每个程序被映射到了不同的真实的物理内存中as shown in Figure 2.


Fig. 2 Concurrent programs.

我们也可以把虚拟内存当做一个独立于物理内存的抽象层. 程序只需要简单的运行在抽象层之上而不用去关系具体的内存的实现细节。

我们将会在后面的章节中去熟悉有关虚拟内存的概念和术语。尽管我们关注的重点为AICT Linux 集群,但是这些规则同样适用于大多数的计算机环境下。We will become acquainted with the concepts andterminology associated with virtual memory in the sections that follow.Although our focus will be the AICT Linux cluster, the principles describedapply to most other computing environments


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值