内存系统

2024-05-22

内存系统(精选十篇)

内存系统 篇1

关键词:嵌入式处理器,嵌入式操作系统,内存管理

1 嵌入式系统

嵌入式系统是指以应用为中心, 以计算机技术为基础, 软件硬件可剪裁, 适应应用系统。对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件的部分组成。用于实现对其他设备的控制、监视和管理等功能, 它通常嵌入在主要设备中运行。

2 嵌入式系统对内存分配的要求

嵌入式系统在开发和应用的过程中, 由于自身的科技含量比较高, 都受到了相应的限制条件。由于其本身是一种在资源上会受到限制的系统, 所以这种系统的应用相对于其他的系统来说, 对于在内存上的使用标准要相对严格一些。在资源和成本上的受限, 使得对于这种系统的开发在研究的时候, 程序开发人员就要付出一定的精力, 考虑到系统在使用的时候对于内存的分配和使用上要做出合理的安排。由此可知, 对于这种系统的开发和应用, 在对内存的管理上一直都是一个难题, 它和别的比较常用的系统还有着不同。那么从大体上来看, 嵌入式系统在研发时主要需要考虑到以下三方面的要求:

第一, 实时性。要保证嵌入式系统的实时性, 则要求尽可能快速的分配内存。

第二, 可靠性。它是嵌入式系统内存管理机制的基本要求。

第三, 高效性。嵌入式系统中内存是一种有限并且昂贵的资源。故内存分配要尽可能的减少浪费。

3 内存分配方式

嵌入式系统中内存管理方案大致可以分为两大类:静态分配和动态分配。

静态分配的可用内存大小在编译或链接时确定, 系统初始化阶段预先分配好固定数量的内存, 用于存放所有需要使用的对象和数据结构。程序运行时能且只能使用这些内存空间。采用这种分配方案的程序段, 其大小一般在编译时就能确定。

动态分配的内存在程序运行时根据需要向系统申请后获得, 只有在需要的时候, 才分配或释放。

4 内存管理策略

4.1 简单内存管理模型

在设计之初, 最简单直接的一种技术其实就是"不管理", 即所有静态分配在栈中、动态分配在堆中的变量和数据结构, 这二者的分配、释放, 全交给编译器、链接器和运行时库去完成, 设计者只需合理设置系统栈、堆和任务栈。

4.2 静态内存分配方式

在大多数情况下, 静态分配普遍适应于嵌入式系统, 因为在操作的过程中, 有些程序段的应用和状态基本上都是固定不变的, 所以适应性比较强。

在执行程序之前, 静态内存实质上就已经进行了, 有着比较高的运行效率;对于内存在需求上的状况, 在对其进行编译的时候就能够进行准确的计算;对于在内存的分配上, 所应用的时间是比较短的, 并且这些动作基本上都是固定不变的;对于已经分配完成的内存, 一般情况下, 是不进行归还的, 而且很少有碎片;对于程序进行的测试也是比较容易的, 并且有着很高的可靠性。以上这些优点使得静态内存的分配在很多标准要求比较高的系统中都能够使用, 如果一些系统的要求特变高, 对于在使用中, 一定不能够出现延时或者是失败的分配现象产生的话, 那么静态内存分配模式就可以很好的满足这些条件, 在开始对其进行编译的时候, 就可以将这些需要的内存进行分配。

4.3 动态内存分配方式

对于静态内存分配来讲, 主要注重的方面是效率和安全方面, 而对于动态内存分配来说则比较注重于灵活性的掌握。在进行动态的内存分配模式下, 对于内存空间的要求, 程序是在目标的模块在进行链接之前就已经分配完成的, 在程序进行工作的过程当中, 是允许继续附加一定的内存或者是在内存的空间上进行移动工作的, 也就是说对内存进行分配的工作不一定是要在程序运行之前就要完成的, 在程序运行期间也是可以逐步的进行分配的。这种做法在一定程度上减少了浪费的情况, 使得很多不被使用的内存不进行分配, 对于内存的总体需求降低了要求;对于设计的质量来讲有了很大的提高, 使系统在进行编写的时候将更加的简单容易;在程序运行的过程中对内存进行分配, 这样就在系统进行启动的时候减少了运行的时间。

在对动态内存进行分配的时候, 程序员在对程序进行编写的过程中, 可以全身心的将精力放在对于程序的设计上, 而不需要对内存的分配问题倾注过多的精力。在程序和硬件系统之间关联性不是特别高的时候, 那么对于程序在进行移植方面就有了很大的便利, 比如有一些系统不是单纯的为了嵌入式系统而设计的, 那么也可以将其很容易的移植到嵌入式系统当中。如入说, 在嵌入式系统应用的条件下, 对于网络协议栈在一定的平台使用下, 为了达到一定的条件, 能够在使用系统的时候更加的灵活, 在使用系统的时候, 使得其中的每一个功能之间都能够进行平衡的选择, 那么这个系统就必须可以适应对于动态内存的分配。

4.3.1 内存碎片

内存碎片是动态分配, 尤其是直接在系统堆中分配的不分区方式的主要问题。在嵌入式实时操作系统中, 多次的分配和释放内存, 会把原来很大的一块连续内存区域逐渐分割成许多小而且互不相邻的内存区域, 也就是内存碎片。内存碎片主要有两种:一种是数据结构未用完它所分配到的内存块所产生的"内部碎片";另一种是两个已分配数据块之间的内存由于太小而无法用于存储任何东西造成的“外部碎片”。

4.3.2 内存丢失

内存丢失是一块已经分配但永远不会被释放的内存区, 是应用程序所造成的缺陷。嵌入式系统要长时间运行, 就要确保绝对没有内存丢失。内存块使用完后, 特定的块必须重新放回它以前所属的分区, 否则可能造成内存丢失。

结语

科学技术的发展在不断的进行更新, 为了适应发展快速的科技信息, 在对于系统进行开发的时候, 就要倾注更多的精力, 使其在功能上能够满足日益发展的网络需求。那么针对嵌入式系统的开发, 在实际的应用过程中, 涉及到对于内存的管理方面的问题, 这将关系到嵌入式系统对于软件运行的效率和质量问题。所以程序的设计人员要拥有很丰富的专业知识, 在思想理念上能够跟得上国际的最新趋势, 使得系统在使用的过程中可以为我国的信息产业创造出更大的成就, 为我国网络信息业的发展创造有利的环境。

参考文献

[1]J.Labrosse邵贝贝, 等译.嵌入式实时操作系统μC/OS-II[M].北京航空航天大学出版社, 2003.

内存系统 篇2

机器内存很大,但越用越少,发现执行完一些批操作命令后,内存竟不释放(vmstat看free很少)。请教大家是不是minfreemaxfreeminpermmaxperm的设置有问题?

现在的minfree/maxfree较小,maxperm偏大。

谢谢!

zhilan 回复于:2003-01-08 16:11:41我执行compress大文件的时候,内存free越来越少,paging space用了 6%。但compress完毕后,内存free还在往下掉,按说应该回到compress前的水平啊。另外paging space还是占用了6%,没有释放。

好使 回复于:2003-01-08 16:15:09如果系统运行正常的话,没问题。

系统在VM方面,有一大部分用在文件的缓存上了,建议看看关于性能调整的资料。

zhilan 回复于:2003-01-08 16:41:22谢谢!问题是上次作load database时机器死了,当时paging space满了,剩余内存为0。机器是s85, 内存24 GB, paging space  8 GB。我估计作load database时内存free就不多了。如果是file cache占用过多的话,应该可以腾出作load database啊。调整maxperm/minfree/maxfree会有用吗?

另外,我一台跑cics,另一台跑sybase,两台问题都一样。按说跑cics的应该不会有问题的啊。

zhilan 回复于:2003-01-08 16:46:57另外一台s80没有这个问题。free很多,而且做完批命令后内存free马上恢复到原来的水平。跑的应用差不多。

我准备调整minfree/maxfree/maxperm等试试,还请各位多多指教!

好使 回复于:2003-01-08 16:48:24系统的补丁全吗?是不是memory leak?

tonylau 回复于:2003-01-08 17:24:24可以设置最大永久占有内存参数,/usr/samples/kernel/vmtune -h 1

这样系统的uncompute内存最大到80%(topas),系统会有10%的内存Free

vofsky 回复于:2003-01-08 17:27:37打补丁看看

tonylau 回复于:2003-01-08 17:41:01这个现象打补丁没用。

zhilan 回复于:2003-01-08 20:41:31谢谢几位!已经解决了,除按tonylau所说做了vmtune h 1外,还改了minfree/maxfree/minperm/maxperm。感觉h 1挺管用的。

再次向大家表示衷心的谢意!

另外把这些参数修改加在了/etc/inittab中,这样reboot后也自动执行。

又碰到一个棘手的问题,再发帖请教。

ibm6000 回复于:2003-01-08 20:48:05这个帖子不错,有头有尾,加为精华:)

lljj 回复于:2003-01-08 21:06:31我还发现sybase

load数据库时!的确有这个问题!

大最新的sybase补丁!

jflong 回复于:2003-01-09 08:55:49请问一下minfreemaxfreeminpermmaxperm怎么设置?

zhilan 回复于:2003-01-09 10:00:24/usr/samples/kernel/vmtune -p ** -P ** -f **** -F **** -h 1

jinyingtao 回复于:2003-01-09 14:24:47这类问题属于内存分配问题。

类似大量文件类操作,如compress、database的dump/load会大量占有内存中的文件型内存(在AIX系统中,内存简单可以分为两类:计算型内存和文件型内存)。所以按照系统缺省的配置,文件型内存最多会占用total real memory的80%(这个可以利用nmon看到),当内存很少时,就会产生换叶到paging space的现象,主要换出文件型内存帧。

这个问题可以通过vmtune加以控制,在/etc/inittab中添加:vmtune:2nce:/usr/samples/kernel/vmtune -p 5 -P 20 -h 1将文件型内存控制在total real memory的5%~20%之间,也就是minperm和maxperm。

前提是必须安装vmtune,好像在bos.adt.samples中

tonylau 回复于:2003-01-09 16:20:33调整MAXPERM和MINPERM是SOFT LIMIT,调整后实际效果并不好,调整STRICT_MAXPERM(-h 1)是HARD LIMIT,强制。

zhilan 回复于:2003-01-14 17:51:18jinyingtao 你好! 我正是这样做的,将maxperm设置为远小于缺省值,并执行严格的maxperm策略(即h 1)。

先看参数的意义:

If percentage of RAM oclearcase/“ target=”_blank“ >ccupied by file pages falls below minperm, VMM steals both file and computational pages

If percentage of RAM occupied by file pages rises above maxperm, VMM steals only file pages

If percentage of RAM occupied by file pages is between minperm and maxperm, VMM will steal only file pages Unless file repaging rate is higher than computational repaging rate

将maxperm设小,可避免这样的情形:当执行大量文件类操作时,文件性内存耗用过多,而计算性内存将不敷使用,从而产生大量的换页操作。而事实上此时文件性内存应作为page-stealer的偷取对象,因为它被重复引用的可能性非常低。

zhilan 回复于:2003-01-14 17:53:13jinyingtao 你好! 我正是这样做的,将maxperm设置为远小于缺省值,并执行严格的maxperm策略(即h 1)。

先看参数的意义:

If percentage of RAM occupied by file pages falls below minperm, VMM steals both file and computational pages

If percentage of RAM occupied by file pages rises above maxperm, VMM steals only file pages

If percentage of RAM occupied by file pages is between minperm and maxperm, VMM will steal only file pages Unless file repaging rate is higher than computational repaging rate

将maxperm设小,可避免这样的情形:当执行大量文件类操作时,文件性内存耗用过多,而计算性内存将不敷使用,从而产生大量的换页操作。而事实上此时文件性内存应作为page-stealer的偷取对象,因为它被重复引用的可能性非常低。

zhilan 回复于:2003-01-14 17:54:19jinyingtao 你好! 我正是这样做的,将maxperm设置为远小于缺省值,并执行严格的maxperm策略(即h 1)。

先看参数的意义:

If percentage of RAM occupied by file pages falls below minperm, VMM steals both file and computational pages

If percentage of RAM occupied by file pages rises above maxperm, VMM steals only file pages

If percentage of RAM occupied by file pages is between minperm and maxperm, VMM will steal only file pages Unless file repaging rate is higher than computational repaging rate

将maxperm设小,可避免这样的情形:当执行大量文件类操作时,文件性内存耗用过多,而计算性内存将不敷使用,从而产生大量的换页操作,

而事实上此时文件性内存应作为page-stealer的偷取对象,因为它被重复引用的可能性非常低。

zhilan 回复于:2003-01-08 16:03:03

zhilan 回复于:2003-01-08 16:11:41我执行compress大文件的时候,内存free越来越少,paging space用了 6%。但compress完毕后,内存free还在往下掉,按说应该回到compress前的水平啊。另外paging space还是占用了6%,没有释放。

好使 回复于:2003-01-08 16:15:09如果系统运行正常的话,没问题。

系统在VM方面,有一大部分用在文件的缓存上了,建议看看关于性能调整的资料。

zhilan 回复于:2003-01-08 16:41:22谢谢!问题是上次作load database时机器死了,当时paging space满了,剩余内存为0。机器是s85, 内存24 GB, paging space  8 GB。我估计作load database时内存free就不多了。如果是file cache占用过多的话,应该可以腾出作load database啊。调整maxperm/minfree/maxfree会有用吗?

另外,我一台跑cics,另一台跑sybase,两台问题都一样。按说跑cics的应该不会有问题的啊。

zhilan 回复于:2003-01-08 16:46:57另外一台s80没有这个问题。free很多,而且做完批命令后内存free马上恢复到原来的水平。跑的应用差不多。

我准备调整minfree/maxfree/maxperm等试试,还请各位多多指教!

好使 回复于:2003-01-08 16:48:24系统的补丁全吗?是不是memory leak?

tonylau 回复于:2003-01-08 17:24:24可以设置最大永久占有内存参数,/usr/samples/kernel/vmtune -h 1

这样系统的uncompute内存最大到80%(topas),系统会有10%的内存Free

vofsky 回复于:2003-01-08 17:27:37打补丁看看

tonylau 回复于:2003-01-08 17:41:01这个现象打补丁没用。

zhilan 回复于:2003-01-08 20:41:31谢谢几位!已经解决了,除按tonylau所说做了vmtune h 1外,还改了minfree/maxfree/minperm/maxperm。感觉h 1挺管用的。

再次向大家表示衷心的谢意!

另外把这些参数修改加在了/etc/inittab中,这样reboot后也自动执行。

又碰到一个棘手的问题,再发帖请教。

ibm6000 回复于:2003-01-08 20:48:05这个帖子不错,有头有尾,加为精华:)

lljj 回复于:2003-01-08 21:06:31我还发现sybase

load数据库时!的确有这个问题!

大最新的sybase补丁!

jflong 回复于:2003-01-09 08:55:49请问一下minfreemaxfreeminpermmaxperm怎么设置?

zhilan 回复于:2003-01-09 10:00:24/usr/samples/kernel/vmtune -p ** -P ** -f **** -F **** -h 1

jinyingtao 回复于:2003-01-09 14:24:47这类问题属于内存分配问题。

类似大量文件类操作,如compress、database的dump/load会大量占有内存中的文件型内存(在AIX系统中,内存简单可以分为两类:计算型内存和文件型内存)。所以按照系统缺省的配置,文件型内存最多会占用total real memory的80%(这个可以利用nmon看到),当内存很少时,就会产生换叶到paging space的现象,主要换出文件型内存帧。

这个问题可以通过vmtune加以控制,在/etc/inittab中添加:vmtune:2nce:/usr/samples/kernel/vmtune -p 5 -P 20 -h 1将文件型内存控制在total real memory的5%~20%之间,也就是minperm和maxperm。

前提是必须安装vmtune,好像在bos.adt.samples中

tonylau 回复于:2003-01-09 16:20:33调整MAXPERM和MINPERM是SOFT LIMIT,调整后实际效果并不好,调整STRICT_MAXPERM(-h 1)是HARD LIMIT,强制。

zhilan 回复于:2003-01-14 17:51:18jinyingtao 你好! 我正是这样做的,将maxperm设置为远小于缺省值,并执行严格的maxperm策略(即h 1)。

先看参数的意义:

If percentage of RAM occupied by file pages falls below minperm, VMM steals both file and computational pages

If percentage of RAM occupied by file pages rises above maxperm, VMM steals only file pages

If percentage of RAM occupied by file pages is between minperm and maxperm, VMM will steal only file pages Unless file repaging rate is higher than computational repaging rate

将maxperm设小,可避免这样的情形:当执行大量文件类操作时,文件性内存耗用过多,而计算性内存将不敷使用,从而产生大量的换页操作。而事实上此时文件性内存应作为page-stealer的偷取对象,因为它被重复引用的可能性非常低。

zhilan 回复于:2003-01-14 17:53:13jinyingtao 你好! 我正是这样做的,将maxperm设置为远小于缺省值,并执行严格的maxperm策略(即h 1)。

先看参数的意义:

If percentage of RAM occupied by file pages falls below minperm, VMM steals both file and computational pages

If percentage of RAM occupied by file pages rises above maxperm, VMM steals only file pages

If percentage of RAM occupied by file pages is between minperm and maxperm, VMM will steal only file pages Unless file repaging rate is higher than computational repaging rate

将maxperm设小,可避免这样的情形:当执行大量文件类操作时,文件性内存耗用过多,而计算性内存将不敷使用,从而产生大量的换页操作。而事实上此时文件性内存应作为page-stealer的偷取对象,因为它被重复引用的可能性非常低。

zhilan 回复于:2003-01-14 17:54:19jinyingtao 你好! 我正是这样做的,将maxperm设置为远小于缺省值,并执行严格的maxperm策略(即h 1)。

先看参数的意义:

If percentage of RAM occupied by file pages falls below minperm, VMM steals both file and computational pages

If percentage of RAM occupied by file pages rises above maxperm, VMM steals only file pages

If percentage of RAM occupied by file pages is between minperm and maxperm, VMM will steal only file pages Unless file repaging rate is higher than computational repaging rate

将maxperm设小,可避免这样的情形:当执行大量文件类操作时,文件性内存耗用过多,而计算性内存将不敷使用,从而产生大量的换页操作。而事实上此时文件性内存应作为page-stealer的偷取对象,因为它被重复引用的可能性非常低。

自由诊断系统内存 篇3

首先请保存所有正在编辑的文档并关闭相关程序,进入命令提示符环境,手工输入“mdsched”,运行之后会弹出Window内存诊断对话框(如图1),建议选择“立即重新启动并检查问题”。随后系统会自动重启并进入内存诊断界面,按下F1功能键可以自行选择测试模式(如图2),系统提供了三种诊断模式:

基本:快速诊断模式,检测速度最快,包括MATS+、INVC和SCHCKR;

标准:默认执行的诊断模式,包括所有基本测试项目,外加LRAND、Stride6、CHCKR3、WMATS+和WINVC;

扩展:包括所有标准测试项目,外加MATS+、Stride38、WSCHCKR、WStride-6、CHCKR4、WCHCKR3、ERAND、Stride6、CHCKR8,检测项目最为丰富,但需要的时间也相当惊人。

此时就可根据实际情况选择自己所需要的诊断模式,默认设置下,内存诊断工具会对所选择的项目内容执行两次,当然也可以使用Tab键跳转到“传送计数 (0 -99):”位置重新设置更多的执行次数,最后按下F10功能键即可执行,诊断结束之后会自动重启系统,并在托盘区显示诊断结果。

内存系统 篇4

关键词:计算机软件,内存管理优化,综述,安卓,Java虚拟机

0 引言

android操作系统是Google公司发行的基于Linux的开放源代码操作系统。当前针对android的应用都是基于Android的Dalvik虚拟机[1]开发的。Dalvik虚拟机本身为应用程序提供默认的内存管理支持。但由于Dalvik虚拟机功能的局限性,以及系统本身针对每个Dalvik虚拟机最多只分配24M的堆空间。因此,如果工程师对Android的内存管理机制不了解,容易造成系统的OOM[2](out of memory)错误。

内存管理,是指程序运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何为进程高效快速的分配,并且在适当的时候释放和回收内存资源。一个执行中的程序在内存中主要包括代码区和数据区,以及操作系统为该程序分配的系统各种资源。操作系统对内存管理的机制直接影响程序读取数据的速度,从而间接影响程序执行的速度。如果程序执行过程中出现OOM等内存错误,用户的个人配置数据会处于不确定状态。Android操作系统多用于内存较小的手机客户端,并且提供对多个进程提供内存管理功能。

综上所述,了解Android内存管理对工程师是至关重要的。

1 Android系统对内存管理分析

1.1 Android对内存管理的整体架构综述

Android采取了一种有别于Linux的进程管理策略[3]。Linux的在进程活动停止后就结束该进程。而Android会把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。

首先介绍android程序分类:

(1) foreground:正在屏幕上显示的进程和一些系统进程。

(2) visible:可见进程是一些不再前台,但用户依然可见的进程,例如widget、输入法等,都属于visible。

(3) secondary server:目前正在运行的一些服务(主要服务,如拨号等,是不可能被终止的)。

(4) hidden:启动后被切换到后台的进程,如浏览器。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。

(5) content provider:没有程序实体,提供内容供其它程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权。

(6) empty:没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程因该是最先终止的。

Android系统决定结束进程的依据:

(1)系统会对进程的优先级进行评估,将优先级以“oom_adj”这个数值表示出来.一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高。

(2)前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_adj,一般“oom_adj”的值是根据软件在LRU列表中的位置所决定的。

(3) Android有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略。

综上所述,Android系统在选择退出程序时,并不是完全退出程序,该程序仍然会在后台驻留一个进程,以便下次更快的打开。系统会给每个类型的程序一个内存值阈[4](阀门),当运行内存低于某个值时,系统会自动按照打开的先后顺序来关闭该类型的程序。例如,当内存小于24MB时,系统才会自动关闭空进程这一类型的程序,释放出更多的内存来供新程序使用,已保证新开程序的正常运行。

1.2 Dalvilk虚拟机内存结构

从图1中可以看出,运行时区主要下面由5个部分组成:

Method Area:被装载的class的元信息存储在Method Area中,它是线程共享的。

Heap(堆):一个虚拟机实例中只存在一个堆空间,存放一些对象信息,它是线程共享的。

Java栈:虚拟机直接对java栈进行两种操作,以帧为单位的压栈和出栈(非线程共享)

程序计数器(非线程共享)。

本地方法栈(非线程共享)。

Dalvik虚拟机把对象分为Young、Tenured、Perm,对不同生命周期的对象使用不同的垃圾回收算法。

Young:分为三个区,一个eden区,两个Survivor区。程序中大部分新的对象都在Eden区中,当Eden区满时,还存活的对象将被复制到其中一个Survivor区,当此Survivor区的对象占用空间满了时,此区存活的对象又被复制到另外一个Survivor区,当这个Survivor区也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制到Tenured中。

Tenured:存放的是Young复制过来的对象,也就是在Young中还存活的对象,并且区满了复制过来的。Tenured中的对象生命周期都比较长。

Perm:用于存放静态的类和方法,对垃圾回收没有显著的影响。(如图1)

2 Android内存管理的缺点

1) Android针对每个应用程序启动一个独立的虚拟机,因此造成较大的内存消耗。

2) Android对已经关闭的进程并不立即回收内存,容易造成内存不足。

3 Android内存管理的优点

1) Android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗CPU资源,只保留了运行状态,相对于Linux操作系统对内存的消耗更小。

2)允许设定内存调度的阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西,增加系统灵活性。

3)为每个应用打开一个独立的虚拟机,避免虚拟机崩溃导致整个系统崩溃。

4 针对Android应用程序的优化策略

1)应该尽量避免static成员变量引用资源耗费过多的实例,比如Context。

2) Context尽量使用Application Context,因为Application的Context生命周期比较长,引用它不会出现内存泄露的问题。

3)用弱引用代替强引用。

4)将线程的内部类,改为静态内部类。

5)在线程内部采用弱引用保存Context引用。

6)对于比较耗内存的Bitmap对象,需要及时销毁。

参考文献

[1]Jin T Y.Research of Android Architecture[M].Beijing: Posts & Telecom Press,2012

[2]Deng F P.Research on Android[M].Beijing:China Machine Press

[3]Li N.Director of Android Developer[M].Beijing:Posts & Telecom Press

[4]Yu Z L.Google Android SDK Application[M].Beijing: Posts & Telecom Press,2012

[5]Li M H.Introduction to Memory Management[OL].[2012]. http://android.mybdqn.com/kt/5414/

[6]Liu B L.Memory Leak in Android[OL].[2012].http:// www.apkbus.com/android- 71944-1 -1.html

[7]Marko Gargenta.Learning Android[M].Publishing House of Electronics Industry,2012

双系统共用虚拟内存 篇5

不相关的Windows系统共享的前提条件是:首先需要保证有相同的文件系统(Win9x/Me不识别NTFS分区),其次这两个文件的大小必须设定一致,也就是说它们的最大值和最小值必须相同,最后这两个文件的位置应在同一个分区的同一个目录下。

我们可以有两种方法来共享虚拟内存文件:

1.共享WinNT的Pagefile.sys

启动Win98/Me系统,单击“开始→运行”,键入“systm.ini”,在[386enh]下做如下修改:“pagingDrive=c:pagefile.sys”(位置由自己设定)

“minpagingfilesize=x”(如果虚拟内存为192MB,则x=192×1024=196608,推荐设为物理内存的2.5倍)

接下来重新启动计算机,删掉“win386.swp”文件,不能删除表明设置失败,

2.共享Win98/Me的win386.swp

进入Win2000/XP,单击“开始→运行”,输入“regedit”,打开注册表,然后通过“查找”功能,查找关于“filepage.sys”的所有项,然后将所有的“filepage.sys”都更改为“win386.swp”。

相关键为:

[HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSessionManagerMemoryManagement]

[HKEY_LOCAL_MACHINESYSTEMControlSet002ControlBackupRestoreFilesNotToBackup]

[HKEY_LOCAL_MACHINESYSTEMControlSet002ControlSessionManagerMemoryManagement]

[HKEY_LOCAL_MACHINESYSTEMControlSet003ControlBackupRestoreFilesNotToBackup]

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlBackupRestoreFilesNotToBackup]

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemoryManagement]

内存系统 篇6

内存位置影响速度?

在系统运行速度缓慢的情况下,出现“虚拟缓存不足”之类的故障提示,这说明虚拟缓存的问题影响了系统运行速度。遇到这种故障现象时,很多人都会尝试将虚拟缓存的位置调整到其他位置,来测试系统运行速度有无变化;例如,为了有效节约系统分区资源,很多人都会将虚拟缓存的位置调整到系统分区以外的磁盘分区中,他们希望通过这样的调整,来加快系统读取速度;事实上,无论虚拟缓存调整到什么位置,要是本地计算机中只安装了一块硬盘的话,那么系统读取硬盘资源的速度都是不变的,毕竟在相同类型的硬盘中,系统资源被访问的速度也是相同的。

虚拟内存无关紧要?

相信有用户认为,系统访问内存资源的速度远远快于系统访问硬盘资源的速度,随意启用虚拟内存功能,反而会拖慢系统运行效率。曾经有一些有心人测试过,包括运行普通应用程序、在线观看视频、网络对战游戏等业务在内,在Windows XP系统环境下有2G大小的物理内存就绰绰有余了,在Windows Vista系统环境下有3G大小的物理内存也能够用了;这些用户认为,在物理内存容量足够大的情况下,虚拟内存基本就是摆设,根本没有任何作用,将该功能禁止运行后,反而能够提高系统运行效率,那事实又是如何呢?事实上,虚拟内存的功能是物理内存根本替代不了的,因为Windows系统自带的不少核心功能在运行时都要依赖系统缓存,一些第三方应用程序在启动运行的时候,也需要使用系统虚拟缓存,例如Photoshop应用程序如果找不到系统虚拟内存的话,就会提示内存不足的故障现象;特别是一些网络游戏,要想进入游戏界面,必须先正确设置系统虚拟缓存,要是该设置不正确的话,我们连游戏界面都不能看到。因此,在物理内存容量足够用的情况下,我们也不能将系统虚拟内存禁止掉,因为该功能被禁止运行后,不但不会提升系统运行效率,而且还会影响一些程序的正常使用;当然,要是我们很少运行游戏程序,或者那些需要虚拟缓存支持的系统功能平时根本用不到时,我们也可以暂时关闭系统虚拟缓存功能,等到日后真的出现问题的时候,再将系统虚拟缓存功能重新启动起来。

谁在偷用虚拟内存?

既然虚拟内存有的时候必须要用,那么究竟有哪些“小偷”会偷偷消耗系统虚拟缓存资源,造成系统屏幕上弹出“虚拟缓存不足”之类的故障提示呢?

用户自己

也许有人见到这样的标题,会感到疑惑不解,我们用户自己怎么会去偷用系统虚拟内存呢,我们怎么会去破坏自己使用的计算机系统呢?其实,用户自己在操作计算机的过程中出现的一些不当设置或人为错误,就可能造成这样的错误。例如,有的人为了提升系统运行安全性,在安装操作系统的时候,选用了NTFS格式的文件系统,不过要是他们没有正确设置好system用户账号的访问权限时,就可能会遇到“虚拟缓存不足”之类的故障提示,因为system用户在系统安装过程中需要往系统中写入文件信息或调整文件信息,如果这个时候我们没有将写入权限和修改权限赋予system用户账号时,那么系统就不能正确创建虚拟缓存文件,这么一来自然就会出现相关错误提示了。因此,在解决由访问权限设置不当因素引起的虚拟内存不足故障时,我们可以为system用户账号重新赋予写人权限和修改权限;在进行这种操作时,我们可以先打开“我的电脑”窗口,从中选中系统分区所在的磁盘分区图标,并用鼠标右键单击该图标,点选快捷菜单中的“属性”命令,弹出系统分区属性设置对话框;单击该对话框中的“安全”标签,打开如图1所示的标签设置页面,从该页面的“组或用户名”列表框中,选中system用户账号,检查该账号的操作权限是否设置正确,要是发现设置不当的话,我们必须确保将“写入”权限和“修改”权限都设置为“允许”,最后单击“确定”按钮保存好上述设置操作。

病毒木马

现在Internet网络中的病毒疯狂肆虐,经常上网的计算机感染网络病毒或遭遇木马攻击的可能性非常大,一些网络病毒或木马程序发作运行时,会消耗大量的物理内存空间,这会直接引起虚拟内存不足的现象出现。对待由病毒木马因素引起的虚拟内存不足故障,我们唯一能做的就是先断开本地计算机与Internet网络的连接,并使用最新版本的杀毒软件对该系统进行全面、彻底地病毒查杀操作;在清除干净病毒或木马程序后,为了防止系统日后再次遇到攻击,我们还需要在该系统中安装更新系统漏洞补丁程序,安装配置网络防火墙程序,通过这些安全工具来保护用户的上网冲浪安全。

应用程序

为了实现各种各样的应用目的,我们往往需要在计算机中安装各色各样的应用程序,一些应用程序由于自身设计方面的原因,也会引起“虚拟缓存不足”之类的故障提示。在解决由应用程序因素引起的故障现象时,我们可以先同时按下键盘中的Ctrl+Shift+Esc复合键,弹出对应系统的任务管理器窗口,点选其中的“进程”标签,在进程标签设置页面中依次单击“查看”、“选择列”选项,弹出如图2所示的设置对话框,将其中的“内存——页面缓冲池”选项选中,再单击“确定”按钮返回,如此一来我们就能发现进程标签设置页面中多了一项与虚拟内存大小有关的列信息了,在这里我们就能清楚地查看到各个应用程序需要消耗的虚拟内存大小了。对于占用虚拟内存比较多的应用程序,我们可以想办法换用其他的应用程序来替代,以确保消除“虚拟缓存不足”之类的故障提示。

事实上,应用程序设计者特别是使用C语言的设计者们,对应用程序消耗内存的大小往往把握得不是很准,在正确处理应用程序运行时消耗的虚拟内存与物理内存的比例,考虑得不是十分周全;一些应用程序在起初开发的时候就特别加入了虚拟内存的因素,这也是为什么在物理内存很大的情况下,不能轻易关闭虚拟内存的原因,除非用户自己不想使用这些对虚拟内存有天生依赖的应用程序。

虚拟内存如何优化?

在缺省状态下,Windows

系统是自动对虚拟内存进行管理的,只是缺省的管理方式比较保守,往往无法很好地发挥虚拟内存的作用,有时还会影响系统的运行效率。有鉴于此,我们可以自己动手,对系统的虚拟内存进行管理、优化,确保虚拟内存功能可以发挥出更好的作用,让系统运行得更高效一些。

启用写入缓存

如果每次都从硬盘中读取数据信息,那么数据读取效率肯定不会很高,为了提升系统读取数据的速度,我们可以将硬盘的写入缓存功能启用起来,以后读取重复的数据信息时,系统就会快速地访问硬盘缓存,而不会读取硬盘数据了。在启用磁盘的写入缓存功能时,我们可以按照下面的操作来进行:

首先打开本地系统的“我的电脑”窗口,用鼠标右键单击任意一个磁盘分区图标,从弹出的快捷菜单中执行“属性”命令,打开本地磁盘的属性设置对话框;

其次点选该对话框中的“硬件”标签,在对应标签设置页面中选中需要频繁访问信息所在的磁盘名称,继续单击“属性”按钮,展开目标硬盘的属性设置对话框,

接着继续单击“策略”标签,弹出如图3所示的标签设置页面,选中这里的“启用磁盘上的写入缓存”选项,再单击“确定”按钮,这么一来目标磁盘的写入缓存功能就被成功启用起来了,日后硬盘的访问速度就能大幅得到提升。

当然,有的时候为了保护缓存中的数据安全性,我们可以在磁盘存在备份电源的情况下,直接启用目标磁盘的“高级性能”,谨防重要数据信息在突然掉电的情况下发生丢失现象。此外。如果我们只想提升移动硬盘的插拔效率,而对数据读写速度不是太在乎的话,可以选中这里的“为快速删除而优化”选项。

设置缓存大小

由于系统默认设置的缓存大小不一定适合实际要求,为了充分发挥系统虚拟缓存的作用,我们可以自由定制系统虚拟缓存的容量大小。在设置系统虚拟缓存大小时,我们可以按照如下操作来进行:

首先用鼠标右键单击“我的电脑”图标,从弹出的快捷菜单中点选“属性”命令,弹出系统属性设置对话框,单击该对话框中的“高级”标签,在对应的高级标签页面中,单击“性能”位置处的“设置”按钮,进入对应系统的性能选项设置窗口;

其次单击该对话框中的“高级”标签,在对应的标签设置页面中(如图4所示),单击“虚拟内存”位置处的“更改”按钮,打开虚拟内存容量设置对话框,在这里我们可以根据实际访问需要,对每一个磁盘分区的虚拟内存大小进行合适设置,设置完毕后,记得单击“确定”按钮执行设置保存操作。

小提示:通常情况下,在只安装一块硬盘的情况下,系统虚拟缓存的设置很简单;可是,对于同时使用两块硬盘的计算机来说,设置合适的虚拟内存还是有一定学问的。比方说,有人比较喜欢将虚拟内存只设置在速度传输快的那个硬盘上,尽管这样可以让虚拟内存的作用发挥得更理想一些;但是,如果两块硬盘的传输速度相同的话,那我们就要考虑将虚拟内存平均分配到两块不同硬盘分区上了,如此一来就能让系统实现对硬盘同步读写数据的目的,从而实现提高整体性能的目的。

优化虚拟内存

在频繁创建、删除、移动、复制文件的过程中,硬盘中的数据文件碎片会越聚越多,随着时间的推移这些碎片将严重影响系统的运行效率,为此不少用户都养成了定期整理硬盘碎片的良好习惯。而系统虚拟内存,实际上也是存储在硬盘中的一种特殊文件,那么我们能否象整理、优化普通文件那样对系统虚拟内存文件进行优化、整理呢?由于虚拟内存文件与普通文件类型完全不同,我们在执行磁盘碎片文件整理操作时,虚拟内存文件往往不会受到影响的。其实,我们可以通过如下变通的方法,来实现间接优化、整理系统虚拟内存文件的目的:

首先右击系统桌面上的“我的电脑”图标,点选右键菜单中的“属性”命令,弹出系统属性设置框,点击其中的“高级”标签,进入高级标签设置页面,单击“性能”位置处的“设置”按钮,展开性能选项设置对话框,

其次单击性能选项框中的“高级”标签,在该页面“虚拟内存”位置处单击“更改”按钮,打开如图5所示的设置对话框;选中该对话框中的“无分页文件”选项,同时单击该选项右侧的“设置”按钮,再单击“确定”按钮保存好设置操作,最后重新启动计算机系统;

内存系统 篇7

随着对各种应用系统的需求增长,单点登陆的响应效率成为门户越来越关键的性能指标。在使用单点登录时,所有应用系统和网络资源使用一个集中的身份验证服务,一旦瘫痪,意味着用户将无法登录到任何一个接入单点登录协议的应用系统和网络资源,这要求单点登陆必须保持良好的性能曲线。如果按以往应用通常将数据保存到数据库中,随着数据量的增大、访问的集中,就会出现数据交互的负担加重、数据库响应恶化、网站显示延迟等重大影响。本方案实现了单点登陆,同时引入Memcache高性能内存对象缓存系统,用于加速应用,减轻数据库负载。

1 单点登陆设计

在采用单点登录协议时,应用系统和网络资源无法看到用户的密码,由单点登录认证服务器执行身份认证,校验用户密码,用户名和密码并不通过网络传递给其他应用系统和网络资源。

1.1 身份认证

身份认证的主要步骤如下:

1)用户尝试使用应用系统的URL访问应用系统,用户被重定向到认证平台的统一登录地址。

2)统一登录页面要求用户输入帐号和密码,进行验证。

3)如果身份验证成功,认证平台将用户重定向到目标应用系统,并在URL中附加一个PToken参数。同时身份信息保存在认证平台内存数据中,作为以后进行自动重新验证的凭据,如果内存数据库中存在这个用户就表示已经成功地登录了,用户就不需要再次输入用户名和密码了。

4)重定向到用户浏览器,发起认证平台返回的新的访问地址,附加PToken。

5)应用系统根据附带的PToken去调用认证平台服务来获取需要的参数。

6)认证平台根据PToken返回应用系统需要的参数。

图1描述了单点登录系统中身份认证交互执行过程。

1.2 已验证用户身份传递

已登陆用户在应用系统中访问其他应用是单点登陆要解决的另一个场景,主要步骤如下所示:

1)用户已通过单点登录进入到应用系统Sys A中,在应用系统中另一个系统Sys B的链接Link,用户点此链接向认证平台发起Sys B的授权访问。

2)认证平台校验用户的已登录信息后,返回给Link一个应用系统Sys B的新的访问URL,并附带PToken。

3)Link重定向到Sys B的新的URL,并附带PToken。

4)应用系统Sys B接收到PToken,据此调用认证平台服务,获取需要的参数。

5)认证平台返回Sys B需要的参数。

图2描述了单点登录系统中已验证身份的传送过程:

1.3 用户验证信息对接内存对象缓存系统

系统初次加载时,用户验证相关信息存储在关系型数据库中提供检索。设置多节点Memcache系统对象,多个节点可以协同工作,但这些节点之间默认不进行任何通讯联系的,每个节点只是对自己的数据进行管理。

1)Memcache系统从数据库中取得需要缓存的数据,以key->value对的形式保存在Memcache节点。key的值通过hash进行转换,根据hash值把value传递到对应的具体节点上。

2)客户端向SSO认证平台发起验证请求,SSO平台需要获取用户验证数据时,优先向Memcache系统请求数据。首先对key进行hash,通过获得的值可以确定它被保存在了哪台节点上,然后再向该节点发出检索请求。

3)对缓存检索过程中无法命中的请求,SSO平台重新到关系数据库中进行检索,成功后更新缓存系统数据。

2 应用系统接入登记

应用系统需要用统一认证的方式实现用户登录系统,那么需要按协议接入到认证平台,在接入时需要进行相关信息的登记,如系统的名称、访问地址、服服务器IP、需要的用户数据、允许访问的系统、联系人等等。认证平台提供一个应用系统接入登记界面,要求应用系统的管理员登录认证平台,填写如上面的应用系统接入的相关信息,经认证平台管理员审核后允许其接入认证平台。

3 用户登录到应用系统的二次开发

应用系统完成了接入登记并通过审核后,需要开发一个接收用户登录信息的页面,来完成用户经统一认证登录后进入该系统的过程,并且获取认证平台传递过来的本系统需要的用户数据。

应用系统实现统一认证登录的过程步骤:

1)应用系统判断用户是否已登录,如应用系统保存的session,cookie等。如果判断到用户没有登录,则重定向到认证平台的统一登录地址。重定向时需要带参数System ID和System Url,System ID为应用系统的ID,System Url为应用系统接收用户登录的地址。

2)用户在认证平台的统一登录页面,输入帐号密码,通过认证后浏览器又重定向到上面的应用系统接收用户登录的地址。重定向时会带ptoken参数,应用系统的login页面会利用到这个参数。

3)应用系统接收用户登录页面login得到ptoken后,调用认证平台的webservice方法,按规范传入相应xml格式的字符串参数,调用成功后会返回一个xml格式的字符串,里面包含了应用系统需要的用户数据。

调用Web服务传入参数和返回参数的XML字符串如下:

传入参数字符串

4 结束语

本系统对传统的单点登陆机制进行了改进,并已上线应用于大型企业门户网站及互联网门户网站,经连续运行在高并发访问的环境下系统反应迅速,用户体验良好,无需升级硬件即大幅提升了系统性能。单点登陆系统对门户应用整合设定了标准,用户只需要登录一次就可以进入多个系统,不仅带来了更好的用户体验,更重要的是降低开发成本和管理的消耗。

摘要:门户网站的壮大对单点登陆(Single sign-on,SSO)提出了更高的要求。系统提出了一种单点登陆的方法,并引入Memcache内存缓存对象系统提升用户验证信息数据的检索效能,以满足大负载门户网站的性能需求。

关键词:单点登陆,内存对象缓存,WebService,Memcache

参考文献

[1]杨光露.基于Shibboleth的企业信息系统统一身份认证[J].计算机系统应用,2011(11).

[2]兰木.单点登录系统方案研究[J].企业技术开发,2012(2):73-74.

[3]陈俊,黄维平.分布式Memcached在社交游戏中的应用研究[J].电脑知识与技术,2011,7(10).

内存系统 篇8

Load Runner虽然支持Unix系统服务器监控, 但是却不能监控UNIX系统服务器的可用内存。实际中, 我们通过对测试结果分析得出:在unix系统中可用内存数据对系统分析起到了举足轻重的作用。我们知道Load Runner获取UNIX资源的具体方法如下:首先, unix操作系统的服务器被一个叫rstatd的后台程序监控, 然后LR连接到unix服务器并从该后台程序处获得数据。LR不能获取unix操作系统服务器可用内存的原因是, 这个名叫rstatd的后台程序不能监控与可用内存相关的数据, 所以LR不能通过自有的功能直接获取Unix系统的可用内存数据。

2 解决方案

为了解决上述问题, 我们利用具有DAB权限的远程用户来获取相关数据, 然后把结果倒入到LR分析器。方案的主要思想如图1所示:

该方案包含以下5大模块:1.用户需要编写LR脚本 (运行测试业务流) ;2.存在一个windows BAT文件 (LR脚本需要调用这个脚本来开始或者停止监控) ;3.一个VB应用程序 (即一个用户界面来开始监控和管理配置文件) ;4.一个配置文件 (定义主机名、登陆用户名和密码等) ;5.LR RTE脚本 (进行监控工作, 利用DBA权限的用户登陆UNIX服务器, 获得内存度量)

5大模块的工作流程如图2所示:

下面分两种方式来说明监控脚本的使用:1.单台电脑模式:首先启动VB应用程序;然后选择需要监控的具体度量;接着点击开始即可。2.与LR脚本结合使用:1.复制监控脚本到LR脚本目录;2.添加如下代码到LR vuser_end活动结尾处:

在运行时设置里选择包含vuser_init和vuser_end活动, 导入最终结果到LR分析器中。

3 方法的可行性分析

当前我们所使用的监控脚本能在window系统上运行来监控Linux和HP-UNIX系统。编写一个shell脚本来获取所监控的unix操作系统服务器上内存信息是很容易实现的, 但是需要在所监控的unix服务器上手动运行该脚本, 当完成的时候还需要手动停止该脚本, 并且:1.需要在要监控的服务器上安装agent;2.需要手动开始和停止监控。

我们会继续开发更强壮的脚本来支持更多的平台。

摘要:LoadRunner是一种预测系统行为和性能的负载测试工具, 它由以下几部分组成:虚拟用户脚本生成器、压力产生器、用户代理、压力调度、监视系统和压力结果 分析工具。本文将系统介绍一种LoadRunner监控UNIX可用内存的一种方法。

关键词:HP,LoadRunner,Unix系统,性能,测试

参考文献

[1]殷联甫.UNIX系统取证分析方法[J].计算机系统应用, 2010, 19 (8) .

[2]李怡, 周国祥.基于LoadRunner的一种性能测试流程方案研究与设计倡[J].计算机应用研究, 2009, 26 (11) .

内存系统 篇9

1 云计算平台的特点分析

与传统的以计算机为基础的计算模式相比较, 云计算更为注重网络数据, 建立起一个以网络为中心、向用户提供资源的系统。根据服务层次的不同, 可以分为以下三种:

1) 基础设施即服务是用户按照自己的需要而安装的各种软件。

2) 平台即服务是通过网络提供的编程软件等。

3) 软件即服务用户在客户端需要的软件。

系统虚拟化技术就是整个基础设施服务的核心, 它是把多个计算和存储资源进行网络虚拟化处理, 有效降低成本、提高服务能力。这里所说的虚拟化包括中央处理器的虚拟化、内存的虚拟化和输入输出设备的虚拟化。目前关于在中央处理器和输入输出设备的分时复用技术的研究已经较为成熟, 但是对于内存的分时共享技术的研究还有所欠缺, 这也成为了系统虚拟技术的一个瓶颈问题, 也成为当今业界作为关注的热点。

2 云计算平台中多虚拟机内存协同优化策略

我们通过优化虚拟机的内存来达到掌握虚拟机目前的运行状态, 以及预测虚拟机近期需要负载情况的目的。合理调配虚拟机的内存, 使过度占据的内存得以有效回收, 提供给内存较为紧张的虚拟机, 这样在保证虚拟机性能的前提下对内存进行合理分配。当前对虚拟机进行合理分配的策略主要有页面服用技术、内存动态调整机制和多虚拟机内存平衡技术三种。

2.1 页面复用技术

这一技术又分为页面交换和页面共享两种技术。页面复用也就是虚拟机里面一部分物理内存页面能够跟有效与HOST OS的交换磁盘分区进行交换, 这就使得内存空间有效扩大, 能够超出实际的内存大小。通过页面复用技术虚拟机的内存资源得以优化配置, 使用效率也大大提高了。

2.2 内存动态调整机制主要包括气球驱动技术和热插拔技术两种类型

前者是对内存进行动态调整的主要方式。这种方式把虚拟机中一些闲置的页面回收回来, 去满足大量的虚拟机请求。热插拔技术是指对虚拟机的内存如果出现波动情况, 那么此项技术就可以对操作系统的内存管理接口进行处理, 使其随着需要进行增减, 从而使得虚拟机的地址空间根据需要具有了伸缩能力。

2.3 多虚拟机的平衡技术又分成了单台物理机和多台物理机间的平衡

单台物理机技术中又分为缺页率曲线技术和内存分配策略。多台物理机间平衡技术引入了双层地质空间映射机制。

3 多虚拟机内存动态管理体系结构

多虚拟机的内存管理最终目的就是要使其能够根据需要进行自动调节。合理利用内存资源, 根据实际情况给虚拟机进行内存空间分配, 从而达到虚拟机的内存发挥出最大的效率, 多个虚拟机的内存能够进行合理均衡地分配。这就要求多虚拟机内存管理系统能够具有以下几个方面的功能:

1) 有效监测功能。对内存资源的使用情况进行动态监测, 对闲置空间能够动态分配, 使内存资源能够合理调节。

2) 对客户操作系统进行有效监测功能。对所有的的客户的内存资源的使用情况进行统计。

3) 合理调节客户操作系统的内存值。在内存资源充裕的情况下, 能够根据需要进行调节。

4) 均衡各用户操作系统的内存值。在内存资源紧缺的情况下, 能够根据各用户机的使用情况进行均衡处理。

多虚拟机的内存动态管理系统又分为内存信息采集、管理策略、调节机制三个组成部分。其中内存信息采集模块分为虚拟机监视模块和物理监视模块两方面。管理策略有包括自发调节和全局调节两个方面的策略。

内存信息采集模块的主要任务就是对客户的内存使用情况进行信息的收集, 这是管理策略的的决策信息提供者。内存监视模块就是按照一定的时间周期对内存的情况进行统计, 并传达给管理模块。内存监视模块对虚拟机内存使用情况和交换空间的使用情况进行检测, 根据检测结果是内存得以合理分配。

4 结语

本文针对多虚拟机内存的管理系统进行了分析, 对它的资源管理和内存分配策略进行了详尽的阐述。总而言之, 虚拟化技术可以将各类计算机资源实现抽象化处理, 有效提升了虚拟机的运行效率, 目前, 这一技术已经在国内外得到了广泛应用, 取得了良好的成效。

参考文献

[1]郭军, 闫永明, 马安香, 张斌.云环境下基于冷点虚拟机迁移的热点消除方法[J].清华大学学报 (自然科学版) , 2016 (11) .

[2]阚运奇, 刘宏伟, 左德承, 张展.云计算系统虚拟机内存资源预留方法[J].国防科技大学学报, 2016 (05) .

[3]刘钟涛, 刘明利.云计算中基于拍卖的虚拟机动态供应和分配算法[J].计算机科学, 2016 (S2) .

内存系统 篇10

关键词:KPCR,物理内存,系统睡眠性能

近年来, 随着笔记本电脑的普及, 用户越来越多地关注笔记本的性能, 其中包括一项非常重要的指标, 即系统的开机速度。目前Windows操作系统多采用待机模式改善系统的开机速度, 待机模式分为Standby (S3) 和Hibernation (S4) 两种, 但这两种方法都有不同程度的缺点:S3速度快, 但系统不能完全断电, S4可以断电, 但速度慢。本文针对目前操作系统普遍存在的开机速度慢, 以及S3开机速度快但不能断电的缺点, 基于对Windows操作系统物理内存结构的研究和分析, 结合PCIE-SSD高速读写性能, 设计并实现了一种新型系统休眠和启动方式, 该方式介于S3与S4之间, 本文暂称为S3.5, 该方法有效解决了S3和S4存在的问题, 同时极大提升了系统的开机启动性能。

1 Windows物理内存分析研究

1.1 KPCR查找物理内存PFN基地址

由于需要支持多个CPU, Windows内核中定义了一套以处理器控制区 (Processor Control Region) , KPCR为枢纽的数据结构, 使每个CPU都有一个KPCR结构, 用来保存与线程切换有关的全局信息。KPCR结构的定义可在Ntddk.h中找到, Windows中KPCR的地址可以通过段FS寄存器找到, 通过Windows提供的汇编函数得到:

其中对于32位操作平台KPCR_OFFSET=0x1C, 对于64位操作平台KPCR_OFFSET_L=0x18, KPCR_OFFSET_ H=0x22, 该函数的返回值即为KPCR指针地址。KPCR和KPRCB在线性空间中的位置一般不会随Windows版本变动而改变。KPCR的结构描述如图1所示 ( 以Windows7 64bit为例) :

KPCR (Kernel Processor Control Region) 数据结构描述了当前运行CPU的核心信息, 包含KPRCB、内核变量块 (Kd Version Block) 、TSS等信息, 这些信息将会在内存分析中起到非常重要的作用。例如KPRCB中的Kd Version Block, 该模块下面的KDebugger Data中包含大量内存相关信息, 如Mm System Cache Start、Mm System Cache End、Mm Pfn Data Base、Mm Number Of Physical Page等。而其中的Mm Pfn Data Base正是系统内存的页帧管理数据库的虚拟地址所在, 页帧数据库以PFN Entry的形式记录了所有物理页面的使用情况。因此, 通过KPCR可以快速得到当前物理内存PFN的虚拟首地址, 即pfn Database。具体方法如图2所示。

1.2物理内存分析

对于操作系统来说, 物理内存的最小单位为物理页面, 以32位操作系统为例, 其大小为4KB, 因此, 物理内存是被分割成单个4KB大小的页面来使用, 而每一个有效的物理内存页面又都对应着一个PFN (Page Frame Number) , PFN是用来描述每一个物理内存页面的编号, 如PFN 0对应物理页面0, PFN 1对应物理页面1, 以此类推。每一个带有PFN的物理页面的状态信息被保存在一个长度为24字节的数据结构PFN entry (见图3) 中, 因此, 所有物理页面的状态信息组成了一个大的PFN Entry数组, 该数组结构的基地址为PFN Data Base。

该数据结构中成员u3中包含该物理页面的具体状态属性, 物理页面的状态属性共分为以下8种:Active、 Transaction、Standby、Modified、Modified no-write、Free、 Zeroed以及Bad。具体的属性描述如表1所示:

通过分析PFN Data Base下面所在区域内的每个PFN的状态属性, 可以清楚地分析出系统休眠时的内存使用情况。

2基于PCIE-SSD的快速睡眠启动的设计及实现

本文基于以上对Windows物理内存的分析, 采用host驱动和PCIE-SSD FW开发相结合的方式, 实现了host驱动分析物理内存分布, 同时采用FW进行物理内存属性分析, 将最少的物理内存存入PCIE-SSD, 从而降低系统睡眠时间, 提升系统启动速度。

首先, 对于host驱动的开发, 通过上述图2的KPCR方法查找到PFN Data Base, 对PFNData Base内的PFN Entry进行连续性分析, 得到多组PFN Entry数组片断。将每组片断的起始地址存储到如图4所示自定义的数据结构当中。

其中PFN_ENTRY_INFO_HEADER包含该数据结构的Signature、CRC、Total PFN region个数以及操作系统类型OS_Type等。每组PFN_REGION片断的起始地址需要转换为物理地址, 以便PCIE-SSD FW能够访问。最后该数据结构PFN_ENTRY_INFO的数据信息通过用户自定义的SCSI命令传送给FW, 而此时的FW需要将PFN_ENTRY_INFO及时写到SSD上。此时, 完成PFN Entry信息的保存工作。 如图5所示:

其次, 是对于系统BIOS的设计, 当操作系统发起Sleep命令时, 操作系统完成自身睡眠准备后, 由BIOS接管系统控制权, 此时BIOS需要实现Door Bell接口与FW相互通信, 发起Sleep的Door Bell命令。另外, 当System开始准备唤醒睡眠时, BIOS将向FW发起Resume的Door Bell命令, 从而开始FW重构SRAM的工作。

最后是FW的设计, 对于FW的设计, 本文并不涉及基本读、写操作的实现, 而是详细描述了系统睡眠和启动过程中涉及的相关部分。其包括两部分, 一个是Sleep的实现, 另一个是resume的实现。FW Sleep和Resume流程图如图6所示。对于Sleep过程, FW阶段包含两部分, 一部分是物理内存属性的Bit Map产生, 属性产生一个Bit Map表, 该表最终存储到SSD当中, 该Bit Map包含每一个物理页面的属性。Bit Map数据结构自定义如图7所示:

另一部分是实现Bit Map内属性的快速分析, 并将物理页面属性为Zero和Bad的物理页面剔除, 最终将剩余的少数有效物理内存内容从DRAM中下载到SSD, 从而实现物理内存镜像的快速存储。

当FW Side收到由系统BIOS发起的resume的Door Bell指令时, FW开始进入物理内存的恢复过程。恢复过程为睡眠的逆过程, 即将SSD中存储的物理内存镜像内容参考Bit Map的分布还原到DRAM当中。这里系统BIOS部分需要调整的是, 设计相应的Door Bell方式通知FW接管系统S3.5启动。

3设计成果

通过以上的设计及实现, 将该方法应用于一台内存为8GB, 操作系统为Window7的笔记本电脑上, 分别采用标准睡眠方式 (S4) 以及本文基于PCIE-SSD及物理内存分析的新睡眠方式 (S3.5) 测试系统睡眠和启动时间, 测试结果如表2所示:

通过测试结果可以看出, S3.5将传统休眠所用时间从原来的12s缩短到7s, 相应的唤醒时间从10s缩短到4s, 其中休眠时间提升了约40%, 而唤醒时间由于PCIE-SSD的高读取速度, 提升了约60%。实验证明, 基于PCIE-SSD及物理内存分析的系统睡眠方式, 可以有效改善系统的睡眠和启动性能, 具有一定的实际应用价值。

4结语

本文通过对物理内存的有效分析, 结合当前PCIE-SSD的高读写性能, 设计并提出了一种新型高效系统休眠模式, 并通过实验证明了其可行性, 对未来系统睡眠模式的改进有一定参考价值。

参考文献

[1]郭牧, 王连海.基于KPCR结构的Windows物理内存分析方法[J].计算机工程与应用, 2006 (18) :74-77.

上一篇:哈尔滨市资源环境问题下一篇:变式探究学习模式