[CSAPP9]虚拟存储器/虚拟内存/VM学习笔记

对于每个进程来说,其在运行时需要一定大小的(物理)内存(DRAM),一个最简单的方法就是进程需要多大内存,就“抢占”多大的(物理)内存 。举一个简单的例子,假设某计算机的内存大小为128MB,进程A、B、C运行时分别需要100MB、10MB、30MB的内存,如果按照A、B、C的运行顺序,则进程A运行时抢占100MB的内存,进程B需要10MB,则进程A、B可以同时运行;当进程C需要运行的时候,由于系统内存空间仅剩余18MB,不够进程C运行,则此时系统需要将进程A终止并释放进程A的内存以便供进程C进行运行,其简化的图标如下所示。

从上图我们可以看到以下几个内容

(1)不同进程之间的内存并不一定是连续的;

(2)如果进程C是恶意的进程,则其可以通过某种方式访问(例如指针)进程B并对其进行破坏。

对于这种内存管理方式有几个弊端,首先在内存受限的情况下,如果出现某一占用内存较大的进程,则需要进行大规模的内存释放以便此进程可以运行;其次,在物理内存上,不同进程之间属于“可见”的,即某一进程可以通过某种方式“访问”其它进程,这产生了极大的不安全性。虚拟内存/虚拟存储器可以说是解决了上述的问题,成为了操作系统内存管理的一个重要机制。相比于直接“抢占”物理内存,其为各个进程提供了一个位于磁盘上的、大的、连续的以及私有的、“虚拟”存储空间——虚拟存储器。同时将此虚拟存储器划分成“小块”,当运行到此部分的时候,将其交换到物理内存上,具体的原理将在后面论述。

在此进行一下小的总结:虚拟存储器(VM)可以说是操作系统内存管理的一个重要机制,为进程提供了一个大的、一致的和私有的地址空间,提供了几个重要的能力:

(1)其将主存(DRAM)看成存储在磁盘上的地址空间的高速缓存;

(2)为每个进程提供了一致的地址空间;

(3)保护了每个进行的地址空间不被其它进程破坏。

其实说了这么多,最主要的就是这样一个过程。当我们创建了一个进程时候,操作系统会为我们分配一个虚拟内存

时间: 2024-10-10 09:34:51

[CSAPP9]虚拟存储器/虚拟内存/VM学习笔记的相关文章

加壳学习笔记(一)-基础知识

1.预备知识 1.关于栈,在windows里面的堆栈其实很简单,当学了才知道哈,呵呵,第一要记住的是windows里面的栈是向低地址生长的(extended,延伸,呵呵,顺便丰富下英语的单词量,确实是少的可怜),你可以这样认为,栈就像是一个倒立的箱子,箱子的口子是向下的,底是向上的,这里就表明了系统栈的分布也是延伸方向是由高地址向低地址extended,在最初的空栈阶段,栈顶(extended stack pointer,简称是esp)在栈底的低一个位置,呵呵,其实很好理解,就是说最初的箱子是空

Linux shell脚本-基础学习笔记

Linux脚本能力不是太强,最近再补习下,毕竟linux shell在日常工作中还是很普遍的, 用起来更方便.省时省力. 以下是学习笔记,偏理论,后面有几个例子,供参考. shell脚本组成元素系统命令.文本处理工具(grep\sed等).变量.条件判断.循环结构和函数 -------------------------------------------- 三剑客:grep,sed,awk,还有wc,sort,head等 ------------------------------------

velocity-1.7学习笔记

Velocity是由Apache软件组织提供的一项开放源码项目,它是一个基于Java的模板引擎.通过Velocity模板语言(Velocity Template Language,VTL)定义模板(Template),并且在模板中不包含任何Java程序代码.Java开发人员编写程序代码来设置上下文(Context),它包含了用于填充模板的数据.Velocity引擎能够把模板和上下文合并起来,生成相关内容.Velocity是一种后台代码和前台展示分离的一种设计. velocity由以下几部分组成:

vsphere学习笔记系列-cluster&resources pool

cluster集群  要实现vmotion.DRS.HA等功能,EXSI主机必须是两台或以上的数量.那怎么判断vmotion等漂移功能在哪些主机执行的呢?这就引出了集群cluster的概念.所有基于vmotion的功能都是在集群内的EXSI主机实现的,VM只会在集群内做漂移. 所有EXSI主机加入集群后,CPU.内存等资源都会池化成集群的资源,由集群分配资源给VM.因此,我们可以看到在集群中,EXSI主机和VM是同等级别的排序,而不像在非集群环境中VM和EXSI是从属关系. 值得注意的是虽然由集

Java NIO、NIO.2学习笔记

相关学习资料 http://www.molotang.com/articles/903.html http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html 目录 1. NIO.NIO.2简介 2. NIO中的关键技术 1. NIO.NIO.2简介 Java中的输入流.输出流都是阻塞式的输入.输出.不仅如此,传统的输入流.输出流都是通过字节的移动来处理的(即使是字符流,在底层也是通过字节流来进行处理的),也就是说,面向

react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置

参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup.html#content 1.安装Jdk(最好默认安装路径尽量别改) http://jingyan.baidu.com/article/a24b33cd59b58e19fe002bb9.html http://www.jb51.net/article/36811.htm(三个环境变量都配置)  Ja

Linux 学习笔记 更多的bash shell命令

一  监测程序 1.ps 输出运行在系统上的所有程序的许多信息 运行ps命令,也会开启一个进程 默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程. Unix风格的参数(单破折号) -e  显示所有进程 -f   显示完整格式的输出 -H  用层级格式来显示进程(树状,用来显示父进程) PPID: 父进程的进程号 TTY: 进程启动时的终端设备 C:进程生命周期中的CPU利用率 S:进程的状态(0代表正在运行:S 休眠: R 可运行:Z 僵化,即进程已结束,父进程无响应或已不存在

Redis学习笔记4-Redis配置具体解释

在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server   xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redis学习笔记中Redis的依照方式依照后,Redis的配置文件是/etc/redis/6379.conf.以下是Redis2.8.9的配置文件各项的中文解释. #daemonize no 默认情况下, redis 不是在后台运行的.假设须要在后台运行,把该项的值更改为 yes daemonize ye

Linux学习笔记033_11进程

ps:(process information,静态的) 显示进程信息,不加参数显示当前终端的进程 a:包括所有终端的进程 x:不属于任何终端的进程,和任何用户无关系的进程 u:显示出进程的拥有人 f:显示进程的附属关系(依赖关系,父子进程) USER:进程的拥有人 PID:进程ID,默认用进程ID排序 VSZ:程序在运行时调用多少虚拟内存 RSS:真实内存 TTY:?不属于任何终端,进入终端之前就运行 STAT:状态,s为睡眠 TIME:进程持续时间 COMMAND:运行这个进程的指令 ps