虚拟内存

Lab3:虚拟内存管理

吃可爱长大的小学妹 提交于 2019-12-05 07:29:30
前言 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 覆盖和技术 覆盖 依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域 但是由于需要程序员来划分功能模块和确定模块之间的覆盖关系,所以增加了编程难度,并且也增加了执行时间 交换 交换技术和覆盖技术讨论的不一样的是,交换技术讨论的是当前内存足够当前的单个程序运行的内存,但是对于多道程序可能会有运行内存不够的情况 实现方法可以将暂时不能运行的程序放到外存当中,再运行时来执行换入换出操作 虚拟内存 在装载程序时,只将当前指令执行需要的部分页面或段装入内存,指令执行中需要的指令或数据不在内存(称为缺页)时,处理器通知操作系统将相应的页面调入内存,操作系统将内存中暂时不同的页面保存到外存 虚拟内存在页机制的基础上,也就是增加了请求调页和页面置换 当用户程序要装载到内存运行时,只装入部分页面,就启动程序运行 进程在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求 操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续运行 页表项结构 驻留位:表示该页是否在内存 修改位:表示在内存中的该页是否被修改过 访问位

查看进程使用swap的状态

对着背影说爱祢 提交于 2019-12-05 06:45:20
转自 https://blog.csdn.net/xiangliangyu/article/details/8213127 在Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下的smaps文件中 ,一看内容发现是进程内存映像信息,比同一目录下的maps文件更详细些。 cat /proc/1/smaps 命令会返回很多上图中的信息,这里给出各字段解释: bfdca000-bfddf000 是该虚拟内存段的开始和结束位置 rw-p 内存段的权限,rw是指可读写,p是指私有,如果是s则为共享 bffea000 该虚拟内存段在对应的映射文件中的偏移量 00:00 文件的主设备和次设备号 0 被映射到虚拟内存的文件的索引节点号 [stack] 被映射到虚拟内存的文件名称 Size 是进程使用内存空间,并不一定实际分配了内存(VSS) Rss是实际分配的内存(不需要缺页中断就可以使用的) Shared_Clean 和其他进程共享的未改写页面 Shared_Dirty 和其他进程共享的已改写页面 Private_Clean 未改写的私有页面页面 Private_Dirty 已改写的私有页面页面 Swap 存在于交换分区的数据大小(如果物理内存有限,可能存在一部分在主存一部分在交换分区) Pss是平摊计算后的使用内存(有些内存会和其他进程共享

操作系统之存储管理_2019-11-20

眉间皱痕 提交于 2019-12-05 05:36:50
存储管理  早期计算机编程并不需要过多的存储管理  随着计算机和程序越来越复杂,存储管理成为必要   在存储管理中分为连续存储和非连续存储,非连续存储又分为分页存储、分段存储和段页式存储。  存储管理的目的:   确保计算机有足够的内存处理数据   确保程序可以从可用内存中获取一部分内存使用   确保程序可以归还使用后的内存以供其他程序使用  内存分配与回收   内存分配的过程    单一连续分配:     把内存分为系统区(被系统所使用)和用户区     只能在单用户、单进程的操作系统中使用    固定分区分配:     内存空间被划分为若干固定大小的区域,每个分区只提供给一个程序使用,互不干扰     支持多道程序的最简单存储分配方式     动态分区分配(最常用的内存分配方法):     根据进程实际需要,动态分配内存空间     相关 数据结构 (计算机存储、组织数据的方式 ):      (1)动态分区 空闲表 数据结构        存储使用情况,是否被使用,是否容量足够              (2)动态分区 空闲链 数据结构        把所有的空闲节点首尾相连,形成一个双向链表        可以把连续的空闲区合并为一个节点来减少节点数量              动态分区相关 分配算法:      首次适应算法(FF算法):      

十问 Linux 虚拟内存管理 (glibc) (二)

僤鯓⒐⒋嵵緔 提交于 2019-12-04 23:41:07
版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qcloud.com/community 接上篇: 十问 Linux 虚拟内存管理 (glibc) (一) 五.free 的内存真的释放了吗(还给 OS ) ? 前面所有例子都有一个很严重的问题,就是分配的内存都没有释放,即导致内存泄露。原则上所有 malloc/new 分配的内存,都需 free/delete 来释放。但是, free 了的内存真的释放了吗? 要说清楚这个问题,可通过下面例子来说明。 初始状态:如图 (1) 所示,系统已分配 ABCD 四块内存,其中 ABD 在堆内分配, C 使用 mmap 分配。为简单起见,图中忽略了如共享库等文件映射区域的地址空间。 E=malloc(100k) :分配 100k 内存,小于 128k ,从堆内分配,堆内剩余空间不足,扩展堆顶 (brk) 指针。 free(A) :释放 A 的内存,在 glibc 中,仅仅是标记为可用,形成一个内存空洞 ( 碎片 ) ,并没有真正释放。如果此时需要分配 40k 以内的空间,可重用此空间,剩余空间形成新的小碎片。 free(C) : C 空间大于 128K ,使用 mmap 分配,如果释放 C ,会调用

1.C#基础(上)

左心房为你撑大大i 提交于 2019-12-04 15:34:24
类最基本的要素:字段+方法(变量+函数) 构造方法主要作用是完成对象的初始化。方法名与方法名类名相同 方法的重载:参数个数及类型不同 this:指这个对象本身 a.访问这个对象的字段及方法;b.区分字段与局部变量;c.用于构造方法调用另一个构造方法 因此写程序主要是定义类,将类中的字段和方法写好 1、类型 分为值类型(结构和枚举)和引用类型(类、接口、指针、字符串、委托、数组) 类型可以拥有0或多个成员,这些成员分为字段、方法、嵌套类型。 字段成员:常量;字段和属性;事件(例如,点击事件) 方法成员:构造函数和析构函数;方法;操作符重载 嵌套类型:一个类型中定义其他类型 2、堆和栈 堆:托管堆和非托管堆——基于进程,属于进程内存空间的一部分。 栈:——基于线程 延伸:进程与线程 进程:一个执行中的程序的实例。将程序的可执行文件从磁盘加载到内存中,如果内存不够,Windows通过虚拟内存解决;进程调度,通过上下文切换,保证进程不会损失之前工作的数据。(虚拟内存:是计算机内存管理的一种技术--虚拟内存映射,使得应用程序认为它拥有连续的可用的内存。虚拟内存还包括硬盘上的一个虚拟内存分页文件。*当Windows发现某个进程占据的内存实际上是虚拟内存时,它会将硬盘上对应的页换入物理内存,以提高该进程的性能;进程隔离:保护操作系统中进程互不干扰,使用虚拟内存,虚拟地址不同;进程调度

0day2安全——笔记1

北慕城南 提交于 2019-12-04 12:13:01
第一章 PE和内存之间的映射 节偏移 文件偏移地址(File Offset Address): 数据 在PE文件中的地址 装载地址(Image Base):PE装入内存的基地址 虚拟内存地址(Virtual Address,VA):PE文件中的 指令 被装入内存后的地址 相对虚拟地址(Relative Virtual Address,RVA):相对虚拟地址是虚拟内存地址相对于映射基址(装载地址)的偏移量 关系: VA = Image Base + RVA节偏移=文件虚拟地址偏移量-文件物理地址偏移量文件偏移地址=虚拟内存地址-装载基址-节偏移 例:虚拟内存地址为0x4010D4, 文件虚拟地址偏移量为1000h,文件物理地址偏移量为200h 0x4010D4-0x400000(1000h-200h)=0x2D4 来源: https://www.cnblogs.com/luocodes/p/11863368.html

加密与解密day1

点点圈 提交于 2019-12-04 09:07:46
1.1、静态分析技术和动态分析技术 1.2、字节序 1.3、wow64(可运行32位环境) 1.4、虚拟内存 1.5、汇编引擎和反汇编引擎 1.6、32位程序中函数调用的栈(4.1.2) 1.7、全局变量(4.1.3) 1.8、64位程序中函数调用栈(4.2.2) 1.9、C++中的this_call 1.10、攻击序列号    来源: https://www.cnblogs.com/Ccluck-tian/p/11849258.html

linux vmstat命令

时光毁灭记忆、已成空白 提交于 2019-12-04 08:45:08
mstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。 物理内存和虚拟内存区别 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。 物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间( Swap Space )。 作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。 linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。 要深入了解linux内存运行机制,需要知道下面提到的几个方面: 首先,Linux系统会不时的进行页面交换操作

分页内存管理——虚拟地址到物理地址的转换【转】

大城市里の小女人 提交于 2019-12-04 06:05:27
转自: https://blog.csdn.net/qq_39755395/article/details/78380942 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_39755395/article/details/78380942 引子: 这是逻辑地址(虚拟地址),包括程序中打印的变量地址显示的都是逻辑地址,并不是内存空间上的物理地址。 每条指令在被执行时,读取操作数时需要给出操作数所在的内存地址,这个地址不能是物理主存地址,因为该程序在哪种硬件设置的机器上运行并不能事前确定,那操作系统就不能在此给出对应于某台机器的物理地址。 一、物理内存和虚拟内存 我们先来了解一下,什么是物理内存,什么又是虚拟内存? 1.物理内存:指通过物理内存条而获得的内存空间,主要作用是在计算机运行时为操作系统和各种程序提供临时储存。 2.虚拟内存:对内存架构(内存、缓存、硬盘)进行管理(内存管理系统)的一种手段。简单理解就是在硬盘上划分出一块区域作为内存使用。 2.1 对于用户: 计算机主要面向的是对操作系统等计算机知识几乎没有了解的普通大众,他们大多是不了解什么主存外存的,所以为了方便用户的使用,就有必要使得程序不管是位于内存架构的哪个层次,对于用户来说都是一样的

电脑的虚拟内存介绍

霸气de小男生 提交于 2019-12-04 01:57:55
虚拟内存是计算机系统内存管理的一种技术。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽,内存空间不足会影响程序的正常运行。 为解决该问题,Windows中运用了虚拟内存 技术,即 匀出一部分硬盘空间来充当内存使用 。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 温馨提示: 工具中”初始大小” 建议设置为您电脑内存,”最大值”可以根据您的使用需要设置; 虚拟内存会占用硬盘空间,根据硬盘剩余空间酌情设置; 如果您当前使用的是固态硬盘+机械硬盘(SSD+HDD )的硬盘组合, 虚拟内存设置在SSD固态硬盘分区上效果会比设置在机械硬盘分区效果好 ; 操作完成后需要将电脑重启后才能生效 ; 来源: https://www.cnblogs.com/chenshc/p/11827573.html