IBMSystemW1500v10和W1700v10(以下简称System)提供了一种在云中运行工作负载的环境。为了做到这一点,它提供了大量具备同时运行数千个计算机程序的计算机硬件。为了有效管理并利用这种硬件,该系统采用几种行业最佳实践来虚拟化其硬件资源,并给予工作负载极大灵活性以实现在云中随处运行。通过了解这些技术以及该产品如何利用这些技术,您将更好地了解System所提供的云环境。
本文是一个三部分系列文章的第二部分,该系列文章介绍System为托管应用程序运行时环境提供的硬件和软件基础:
硬件:AtourofthehardwareinIBMSystem介绍了由System组成的硬件。
虚拟化硬件:您正在阅读的这篇文章介绍了System如何虚拟化硬件以实现基础架构即服务(IaaS)。
运行时环境:在IBMSystem中管理应用程序运行时环境介绍了如何使用System中的虚拟化硬件实现工作负载所部署到的应用程序运行时环境。
每篇文章都以上一篇为基础,全面地解释了这一基础。
为了理解System中的资源虚拟化,我们将探讨合并到云计算系统中的交付模型(该方法用于虚拟化不同类型的资源)以及该产品如何利用这些方法。
云交付模型
虚拟化硬件资源通常称为“基础架构即服务”。它是三种云交付模型(又称为云服务模型)之一:
基础架构即服务(IaaS)为计算、存储和网络提供了一种虚拟化硬件资源的环境。
平台即服务(PaaS)提供了一种虚拟化的应用程序运行时环境,包括 *** 作系统;应用服务器、数据库和消息传递之类的中间件;以及缓存、监控和安全之类的共享服务。
软件即服务(SaaS)在一个集中托管环境中提供网络可访问的业务应用程序,该环境是高度可靠且可伸缩的。
模型是渐增的,且每个模型以前一个模型为基础。图1说明了云交付模型。
图1云交付模型
如何使用虚拟机(VM)来虚拟化计算资源
文章导航IBM云,第1部分:云技术入门更加详细地介绍了云交付模型。这些交付模型不是特定技术,而是云计算系统的架构目标。本文着重介绍第一层基础架构即服务,并讲述如何在System中实现基础架构即服务。
资源虚拟化
基础架构即服务是一个可通过资源虚拟化实现的目标。资源虚拟化将工作负载(即,正在运行的程序)从其运行的底层硬件进行解耦。对于要运行的程序,它肯定需要硬件资源。但是,对于“在云中”运行的工作负载,它们肯定不能被特定硬件集所束缚。这意味着工作负载必须在多个冗余硬件集中的任何一个中运行。要实现此目标,云应该虚拟化硬件资源以将工作负载与硬件分离并使云能够管理这些资源的工作负载使用情况。
云将组织其硬件资源以使工作负载运行延续到三个主要类型,这是所有计算的基础:
计算资源:这是任意程序运行所需的CPU和内存。
网络资源:这在程序之间的连接,支持程序进行通信。
存储资源:这使程序能持续保存其状态。
System采用了虚拟化各种资源的技术:
使用虚拟机(VM)虚拟化计算资源。
使用虚拟局域网(VLAN)虚拟化网络资源。
使用存储区域网(SAN)虚拟化存储资源。
转载
一 缓存系统简介 EhCache 是一个纯 Java 的进程内缓存框架 具有快速 精干等特点 是 Hibernate 中默认的 CacheProvider EhCache 应用架构图 下图是 EhCache 在应用程序中的位置
EhCache 的主要特性有 快速 精干 简单 多种缓存策略 缓存数据有两级 内存和磁盘 因此无需担心容量问题 缓存数据会在虚拟机重启的过程中写入磁盘 可以通过 RMI 可插入 API 等方式进行分布式缓存 具有缓存和缓存管理器的侦听接口 支持多缓存管理器实例 以及一个实例的多个缓存区域 提供 Hibernate 的缓存实现 由于 EhCache 是进程中的缓存系统 一旦将应用部署在集群环境中 每一个节点维护各自的缓存数据 当某个节点对缓存数据进行更新 这些更新的数据无法在其它节点 享 这不仅会降低节点运行的效率 而且会导致数据不同步的情况发生 例如某个网站采用 A B 两个节点作为集群部署 当 A 节点的缓存更新后 而 B 节点缓存尚未更新就可能出现用户在浏览页面的时候 一会是更新后的数据 一会是尚未更新的数据 尽管我们也可以通过 Session Sticky 技术来将用户锁定在某个节点上 但对于一些交互性比较强或者是非 Web 方式的系统来说 Session Sticky 显然不太适合 所以就需要用到 EhCache 的集群解决方案 从 版本开始 Ehcache可以使用分布式的缓存了 EhCache 从 版本开始 支持五种集群方案 分别是 Terracotta RMI JMS JGroups EhCache Server 其中的三种最为常用集群方式 分别是 RMI JGroups 以及 EhCache Server 本文主要介绍RMI的方式 分布式这个特性是以plugin的方式实现的 Ehcache自带了一些默认的分布式缓存插件实现 这些插件可以满足大部分应用的需要 如果需要使用其他的插件那就需要自己开发了 开发者可以通过查看distribution包里的源代码及JavaDoc来实现它 尽管不是必须的 在使用分布式缓存时理解一些ehcahce的设计思想也是有帮助的 这可以参看分布式缓存设计的页面 以下的部分将展示如何让分布式插件同ehcache一起工作 下面列出的是一些分布式缓存中比较重要的方面 你如何知道集群环境中的其他缓存? 分布式传送的消息是什么形式? 什么情况需要进行复制?增加(Puts) 更新(Updates)或是失效(Expiries)? 采用什么方式进行复制?同步还是异步方式? 为了安装分布式缓存 你需要配置一个PeerProvider 一个CacheManagerPeerListener 它们对于一个CacheManager来说是全局的 每个进行分布式 *** 作的cache都要添加一个cacheEventListener来传送消息
二 集群缓存概念及其配置 正确的元素类型 只有可序列化的元素可以进行复制 一些 *** 作 比如移除 只需要元素的键值而不用整个元素 在这样的 *** 作中即使元素不是可序列化的但键值是可序列化的也可以被复制 成员发现(Peer Discovery) Ehcache进行集群的时候有一个cache组的概念 每个cache都是其他cache的一个peer 没有主cache的存在 刚才我们问了一个问题 你如何知道集群环境中的其他缓存?这个问题可以命名为成员发现(Peer Discovery) Ehcache提供了两种机制用来进行成员发现 就像一辆汽车 手动档和自动档 要使用一个内置的成员发现机制要在ehcache的配置文件中指定cacheManagerPeerProviderFactory元素的class属性为 net sf ehcache distribution RMICacheManagerPeerProviderFactory 自动的成员发现 自动的发现方式用TCP广播机制来确定和维持一个广播组 它只需要一个简单的配置可以自动的在组中添加和移除成员 在集群中也不需要什么优化服务器的知识 这是默认推荐的 成员每秒向群组发送一个 心跳 如果一个成员 秒种都没有发出信号它将被群组移除 如果一个新的成员发送了一个 心跳 它将被添加进群组 任何一个用这个配置安装了复制功能的cache都将被其他的成员发现并标识为可用状态 要设置自动的成员发现 需要指定ehcache配置文件中cacheManagerPeerProviderFactory元素的properties属性 就像下面这样 peerDiscovery=automatic multicastGroupAddress=multicast address | multicast host name multicastGroupPort=port timeToLive= (timeToLive属性详见常见问题部分的描述) 示例 假设你在集群中有两台服务器 你希望同步sampleCache 和sampleCache 每台独立的服务器都要有这样的配置 配置server 和server <cacheManagerPeerProviderFactoryclass= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= peerDiscovery=automatic multicastGroupAddress= />multicastGroupPort= timeToLive= 手动进行成员发现 进行手动成员配置要知道每个监听器的IP地址和端口 成员不能在运行时动态地添加和移除 在技术上很难使用广播的情况下就可以手动成员发现 例如在集群的服务器之间有一个不能传送广播报文的路由器 你也可以用手动成员发现进行单向的数据复制 只让server 知道server 而server 不知道server 配置手动成员发现 需要指定ehcache配置文件中cacheManagerPeerProviderFactory的properties属性 像下面这样 peerDiscovery=manual rmiUrls=//server:port/cacheName //server:port/cacheName … rmiUrls配置的是服务器cache peers的列表 注意不要重复配置 示例 假设你在集群中有两台服务器 你要同步sampleCache 和sampleCache 下面是每个服务器需要的配置 配置server <cacheManagerPeerProviderFactoryclass= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= peerDiscovery=manual />rmiUrls=//server : /sampleCache |//server : /sampleCache 配置server <cacheManagerPeerProviderFactoryclass= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= peerDiscovery=manual />rmiUrls=//server : /sampleCache |//server : /sampleCache 配置CacheManagerPeerListener 每个CacheManagerPeerListener监听从成员们发向当前CacheManager的消息 配置CacheManagerPeerListener需要指定一个CacheManagerPeerListenerFactory 它以插件的机制实现 用来创建CacheManagerPeerListener cacheManagerPeerListenerFactory的属性有 class – 一个完整的工厂类名 properties – 只对这个工厂有意义的属性 使用逗号分隔 Ehcache有一个内置的基于RMI的分布系统 它的监听器是RMICacheManagerPeerListener 这个监听器可以用 RMICacheManagerPeerListenerFactory来配置 <cacheManagerPeerListenerFactoryclass= net sf ehcache distribution RMICacheManagerPeerListenerFactory properties= hostName=localhost port= />socketTimeoutMillis= 有效的属性是 hostname (可选) – 运行监听器的服务器名称 标明了做为集群群组的成员的地址 同时也是你想要控制的从集群中接收消息的接口在CacheManager初始化的时候会检查hostname是否可用 如果hostName不可用 CacheManager将拒绝启动并抛出一个连接被拒绝的异常 如果指定 hostname将使用InetAddress getLocalHost() getHostAddress()来得到 警告 不要将localhost配置为本地地址 因为它在网络中不可见将会导致不能从远程服务器接收信息从而不能复制 在同一台机器上有多个CacheManager的时候 你应该只用localhost来配置 port – 监听器监听的端口 socketTimeoutMillis (可选) – Socket超时的时间 默认是 ms 当你socket同步缓存请求地址比较远 不是本地局域网 你可能需要把这个时间配置大些 不然很可能延时导致同步缓存失败 配置CacheReplicators 每个要进行同步的cache都需要设置一个用来向CacheManagerr的成员复制消息的缓存事件监听器 这个工作要通过为每个cache的配置增加一个cacheEventListenerFactory元素来完成 <! Sample cache named sampleCache ><cache name= sampleCache maxElementsInMemory= eternal= false timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false ><cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory properties= replicateAsynchronously=true replicatePuts=true replicateUpdates=true replicateUpdatesViaCopy=false replicateRemovals=true /></cache>class – 使用net sf ehcache distribution RMICacheReplicatorFactory 这个工厂支持以下属性 replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers 默认是true replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制 默认是true replicateRemovals= true | false – 当元素移除的时候是否进行复制 默认是true replicateAsynchronously=true | false – 复制方式是异步的(指定为true时)还是同步的(指定为false时) 默认是true replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制指定为true时为复制 默认是true replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制(指定为true时为复制) 默认是true 你可以使用ehcache的默认行为从而减少配置的工作量 默认的行为是以异步的方式复制每件事 你可以像下面的例子一样减少RMICacheReplicatorFactory的属性配置 <! Sample cache named sampleCache All missing RMICacheReplicatorFactory properties default to true ><cache name= sampleCache maxElementsInMemory= eternal= true overflowToDisk= false memoryStoreEvictionPolicy= LFU ><cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory /></cache> 常见的问题 Windows上的Tomcat 有一个Tomcat或者是JDK的bug 在tomcat启动时如果tomcat的安装路径中有空格的话 在启动时RMI监听器会失败 参见 bin/waA =ind &L=rmi users&P= 和 doc/faq howto bugs/l 由于在Windows上安装Tomcat默认是装在 Program Files 文件夹里的 所以这个问题经常发生 广播阻断 自动的peer discovery与广播息息相关 广播可能被路由阻拦 像Xen和VMWare这种虚拟化的技术也可以阻拦广播 如果这些都打开了 你可能还在要将你的网卡的相关配置打开 一个简单的办法可以告诉广播是否有效 那就是使用ehcache remote debugger来看 心跳 是否可用 广播传播的不够远或是传得太远 你可以通过设置badly misnamed time to live来控制广播传播的距离 用广播IP协议时 timeToLive的值指的是数据包可以传递的域或是范围 约定如下 是限制在同一个服务器 是限制在同一个子网 是限制在同一个网站 是限制在同一个region 是限制在同一个大洲 是不限制 译者按 上面这些资料翻译的不够准确 请读者自行寻找原文理解吧 在Java实现中默认值是 也就是在同一个子网中传播 改变timeToLive属性可以限制或是扩展传播的范围
三 RMI方式缓存集群/配置分布式缓存 RMI 是 Java 的一种远程方法调用技术 是一种点对点的基于 Java 对象的通讯方式 EhCache 从 版本开始就支持 RMI 方式的缓存集群 在集群环境中 EhCache 所有缓存对象的键和值都必须是可序列化的 也就是必须实现 java io Serializable 接口 这点在其它集群方式下也是需要遵守的 下图是 RMI 集群模式的结构图
采用 RMI 集群模式时 集群中的每个节点都是对等关系 并不存在主节点或者从节点的概念 因此节点间必须有一个机制能够互相认识对方 必须知道其它节点的信息 包括主机地址 端口号等 EhCache 提供两种节点的发现方式 手工配置和自动发现 手工配置方式要求在每个节点中配置其它所有节点的连接信息 一旦集群中的节点发生变化时 需要对缓存进行重新配置 由于 RMI 是 Java 中内置支持的技术 因此使用 RMI 集群模式时 无需引入其它的 Jar 包 EhCache 本身就带有支持 RMI 集群的功能 使用 RMI 集群模式需要在 ehcache xml 配置文件中定义 cacheManagerPeerProviderFactory 节点 分布式同步缓存要让这边的cache知道对方的cache 叫做Peer Discovery(成员发现) EHCache实现成员发现的方式有两种 手动查找 A 在ehcache xml中配置PeerDiscovery成员发现对象 Server 配置 配置本地hostName port是 分别监听 : 的mobileCache和 : 的mobileCache 注意这里的mobileCache是缓存的名称 分别对应着server server 的cache的配置 <xml version= encoding= gbk ><ehcache xmlns:xsi= instance xsi:noNamespaceSchemaLocation= ehcache xsd > <diskStore path= java io tmpdir /> <! 集群多台服务器中的缓存 这里是要同步一些服务器的缓存 server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache 注意 每台要同步缓存的服务器的RMI通信socket端口都不一样 在配置的时候注意设置 > <! server 的cacheManagerPeerProviderFactory配置 > <cacheManagerPeerProviderFactory class= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache /></ehcache>以上注意cacheManagerPeerProviderFactory元素出现的位置在diskStore下
同样在你的另外 台服务器上增加配置 Server 配置本地host port为 分别同步 : 的mobileCache和 : 的mobileCache <! server 的cacheManagerPeerProviderFactory配置 ><cacheManagerPeerProviderFactory class= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache />Server 配置本地host port为 分别同步 : 的mobileCache缓存和 : 的mobileCache缓存 <! server 的cacheManagerPeerProviderFactory配置 ><cacheManagerPeerProviderFactory class= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache />这样就在三台不同的服务器上配置了手动查找cache的PeerProvider成员发现的配置了 值得注意的是你在配置rmiUrls的时候要特别注意url不能重复出现 并且端口 地址都是对的 如果指定 hostname将使用InetAddress getLocalHost() getHostAddress()来得到 警告 不要将localhost配置为本地地址 因为它在网络中不可见将会导致不能从远程服务器接收信息从而不能复制 在同一台机器上有多个CacheManager的时候 你应该只用localhost来配置 B 下面配置缓存和缓存同步监听 需要在每台服务器中的ehcache xml文件中增加cache配置和cacheEventListenerFactory cacheLoaderFactory的配置 <defaultCache maxElementsInMemory= eternal= false timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false /><! 配置自定义缓存 maxElementsInMemory:缓存中允许创建的最大对象数 eternal:缓存中对象是否为永久的 如果是 超时设置将被忽略 对象从不过期 timeToIdleSeconds:缓存数据空闲的最大时间 也就是说如果有一个缓存有多久没有被访问就会被销毁 如果该值是 就意味着元素可以停顿无穷长的时间 timeToLiveSeconds:缓存数据存活的时间 缓存对象最大的的存活时间 超过这个时间就会被销毁 这只能在元素不是永久驻留时有效 如果该值是 就意味着元素可以停顿无穷长的时间 overflowToDisk:内存不足时 是否启用磁盘缓存 memoryStoreEvictionPolicy:缓存满了之后的淘汰算法 每一个小时更新一次缓存( 小时过期) ><cache name= mobileCache maxElementsInMemory= eternal= false overflowToDisk= true timeToIdleSeconds= timeToLiveSeconds= memoryStoreEvictionPolicy= LFU > <! RMI缓存分布同步查找 class使用net sf ehcache distribution RMICacheReplicatorFactory 这个工厂支持以下属性 replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers 默认是true replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制 默认是true replicateRemovals= true | false – 当元素移除的时候是否进行复制 默认是true replicateAsynchronously=true | false – 复制方式是异步的 指定为true时 还是同步的 指定为false时 默认是true replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制 指定为true时为复制 默认是true replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制 指定为true时为复制 默认是true asynchronousReplicationIntervalMillis= > <! 监听RMI同步缓存对象配置 注册相应的的缓存监听类 用于处理缓存事件 如put remove update 和expire > <cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory properties= replicateAsynchronously=true /> replicatePuts=true replicateUpdates=true replicateUpdatesViaCopy=false replicateRemovals=true <! 用于在初始化缓存 以及自动设置 > <bootstrapCacheLoaderFactory class= net sf ehcache bootstrap BootstrapCacheLoaderFactory /></cache> C 这样就完成了 台服务器的配置 下面给出server 的完整的ehcache xml的配置 <xml version= encoding= gbk ><ehcache xmlns:xsi= instance xsi:noNamespaceSchemaLocation= ehcache xsd > <diskStore path= java io tmpdir /> <!集群多台服务器中的缓存 这里是要同步一些服务器的缓存 server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache server hostName: port: cacheName:mobileCache 注意每台要同步缓存的服务器的RMI通信socket端口都不一样 在配置的时候注意设置 > <! server 的cacheManagerPeerProviderFactory配置 > <cacheManagerPeerProviderFactory class= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= hostName=localhost port= socketTimeoutMillis= peerDiscovery=manual rmiUrls=// : /mobileCache|// : /mobileCache /> <defaultCache maxElementsInMemory= eternal= false timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false /> <! 配置自定义缓存 maxElementsInMemory:缓存中允许创建的最大对象数 eternal:缓存中对象是否为永久的 如果是 超时设置将被忽略 对象从不过期 timeToIdleSeconds:缓存数据空闲的最大时间 也就是说如果有一个缓存有多久没有被访问就会被销毁 如果该值是 就意味着元素可以停顿无穷长的时间 timeToLiveSeconds:缓存数据存活的时间 缓存对象最大的的存活时间 超过这个时间就会被销毁 这只能在元素不是永久驻留时有效 如果该值是 就意味着元素可以停顿无穷长的时间 overflowToDisk:内存不足时 是否启用磁盘缓存 memoryStoreEvictionPolicy:缓存满了之后的淘汰算法 每一个小时更新一次缓存( 小时过期) > <cache name= mobileCache maxElementsInMemory= eternal= false overflowToDisk= true timeToIdleSeconds= timeToLiveSeconds= memoryStoreEvictionPolicy= LFU > <! RMI缓存分布同步查找 class使用net sf ehcache distribution RMICacheReplicatorFactory 这个工厂支持以下属性 replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers 默认是true replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制 默认是true replicateRemovals= true | false – 当元素移除的时候是否进行复制 默认是true replicateAsynchronously=true | false – 复制方式是异步的 指定为true时 还是同步的 指定为false时 默认是true replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制 指定为true时为复制 默认是true replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制 指定为true时为复制 默认是true asynchronousReplicationIntervalMillis= > <! 监听RMI同步缓存对象配置 注册相应的的缓存监听类 用于处理缓存事件 如put remove update 和expire > <cacheEventListenerFactory class= net sf ehcache distribution RMICacheReplicatorFactory properties= replicateAsynchronously=true /> replicatePuts=true replicateUpdates=true replicateUpdatesViaCopy=false replicateRemovals=true <! 用于在初始化缓存 以及自动设置 > <bootstrapCacheLoaderFactory class= net sf ehcache bootstrap BootstrapCacheLoaderFactory /> </cache></ehcache> 自动发现 自动发现配置和手动查找的方式有一点不同 其他的地方都基本是一样的 同样在ehcache xml中增加配置 配置如下 <! 搜索某个网段上的缓存timeToLive 是限制在同一个服务器 是限制在同一个子网 是限制在同一个网站 是限制在同一个region 是限制在同一个大洲 是不限制 ><cacheManagerPeerProviderFactory class= net sf ehcache distribution RMICacheManagerPeerProviderFactory properties= peerDiscovery=automatic multicastGroupAddress= multicastGroupPort= timeToLive= /> lishixinzhi/Article/program/Java/hx/201311/25706
直接恢复出厂设置就可以了。
虚拟内存是计算机系统内存管理的一种技术。使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数 *** 作系统都使用了虚拟内存,如Windows家族的"虚拟内存";Linux的"交换空间"等。
Windows 8/81 *** 作系统如出现开机时卡在Windows徽标页面,无法进入系统,必须强制关机再重启才能打开时,可适当调整虚拟内存设置解决。1磁盘缓存 磁盘缓存又称为虚拟缓存,它的读/写速度比管理磁介质快得多,是改善硬盘性能的主要手段。在硬盘空闲时会把数据预先存入缓存,一旦程序请求到此段资料,可以马上从缓存中得到,无须再读/写硬盘,特别是连续存取的 *** 作之中,Cache能够极大地提高系统的整体速度。 为了让大家更好的理解系统缓存的作用,我们可以将处理器和内存系统想象成为使用者和供货商(Client-Server模式)。CPU“消费”由硬盘及内存提供的数据。由于制造技术和设计的进步,CPU的消费能力已经大大超过了存储系统的供应能力,尽管存储系统也有些进步(UDMA、Rambus等),CPU的时钟循环相对与内存和总线而言,越来越短,于是CPU不得不在存储系统提供足够的数据前等待,什么也不能做。而且每当CPU的频率提升,这样的差距就更是明显。 2系统缓存 较慢的CPU频率 较快的CPU频率 如果将CPU比作一个城里的家具厂,而将存储系统比作郊区的木料厂,那么实际情况就是木料厂离家具厂越来越远,即使使用更大的卡车来运送木料,家具厂也得停工来等待木料送来。 在这样的情况下,一种解决方法是在市区建立一个小型仓库,在里面放置一些家具厂最常用到的木料。这个仓库实际上就是家具厂的“Cache”,家具厂就可以从仓库不停的及时运送需要的木料。当然,仓库越大,存放的木料越多,效果就越好,因为这样即使是些不常用的东西也可以在仓库里找到。如果我们需要的木料仓库里没有,就要从城外的木料厂里继续找,而家具厂就得等着了。 我想现在大家已经明白了我的意思,仓库就相对于L1缓存,可以由CPU及时快速的读写,所以存储的是CPU最常用代码和数据(后面我们会介绍一下如何挑选“最常用”)。L1缓存的速度比系统内存快的多是因为使用的是SRAM,这种内存单晶元使用四到六个晶体管。这也使得SRAM的造价相当的高,所以不能拿来用在整个存储系统上。 在大多数CPU上,L1缓存和核心一起在一块芯片上。如果在我们家具厂的例子中,就好比工厂和仓库在同一条街上。这样的设计使CPU可以从最近最快的地方得到数据,但是也使得“城外的木料厂”到“仓库”和到“家具厂”的距离差不多远。这样如果CPU需要的数据不在L1缓存中,也就是“Cache Miss”,从存储设备取数据就要很长时间了。处理器速度越快,两者之间的差距就越大。如果使用Pentium4那样的高频率处理器,从内存中取得数据就相当于“木料厂”位于另一个国家。 3虚拟内存 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。下面,就让我们一起来看看如何对虚拟内存进行设置吧。 虚拟内存的设置 对于虚拟内存主要设置两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。这样随着你的 *** 作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。 找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,d出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,d出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。 调整分页位置 Windows 9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386swp调到别的分区中,方法是在记事本中打开Systemini(C:\Windows下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin386swp”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:Win386swp”,如没有上述语句可以直接键入即可。 而对于使用Windows 2000和Windows XP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。 或者,WinXP一般要求物理内存在256M以上。如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。 如果你的硬盘空间够大,你也可以自己设置虚拟内存,具体步骤如下:右键单击“我的电脑”→属性→高级→性能 设置→高级→虚拟内存 更改→选择虚拟内存(页面文件)存放的分区→自定义大小→确定最大值和最小值→设置。一般来说,虚拟内存为物理内存的15倍,稍大一点也可以,如果你不想虚拟内存频繁改动,可以将最大值和最小值设置为一样。 4虚拟内存使用技巧 对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法: (1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是"无",则将页面文件大小设置为2MB左右,如果采用"核心内存存储"和"完全内存存储",则将页面文件值设置得大一些,跟物理内存差不多就可以了。 小提示:对于系统分区是否设置页面文件,这里有一个矛盾:如果设置,则系统有可能会频繁读取这部分页面文件,从而加大系统盘所在磁道的负荷,但如果不设置,当系统出现蓝屏死机(特别是STOP错误)的时候,无法创建转储文件 (Memorydmp),从而无法进行程序调试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。 (2)单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的15倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的 页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。 (3)其它硬盘分区不设置任何页面文件。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入 *** 作。这样系统性能将得到提高。 小提示: 允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位 *** 作系统的内存寻址范围——4GB。计算机中程序的运行速度主要受计算机硬件和软件影响。从硬件方面来说,大家都知道可通 过选用主频较高的CPU、扩充内存等方法提高计算机速度;下面笔者从软件的角度,根据 自己多年使用计算机的经验,向大家介绍一些提高计算机运行速度的方法: 1。增加硬盘剩余容量 长时间使用计算机后,硬盘剩余容量会减少,导致有些程序运行速度变慢,解决方法有 : 1)从硬盘上删掉一些不需要的文件,以使硬盘剩余容量增多。具体删除哪些文件呢? 这些文件一般包括:(1)长时间不使用的程序或文件;(2)在某些程序执行时产生的或 计算机意外故障时留在硬盘上的临时文件,如*。TMP文件;(3)不再需要的*。BA K备份文件;(4)使用CHKDSK/F命令后产生的*。CHK文件中不再使用的文件 ;(5)运行SCANDISK命令后产生的且不再使用的SCANDISK。LOG文件 ;(6)某些系统或软件中用户不再需要的帮助文件,如*。HLP。 2)使用压缩软件对硬盘中的文件进行压缩,以使硬盘剩余容量增多。现在常见的压缩 软件有DOUBLESPACE、ARJ、LHA等,DOUBLESPACE是对磁盘进 行压缩,ARJ、LHA是对文件进行压缩。 2。使用DOS *** 作系统提供的DEFRAG命令 应用程序在硬盘上创建和删除,时间长了,硬盘上的信息会变得支离破碎。为此,可使 用DOS *** 作系统提供的DEFRAG命令对硬盘中的文件进行整理,取消硬盘中的碎片, 从而减少读取文件所花费的时间,至于DEFRAG命令的使用方法,请参考有关DOS *** 作手册。 3。在运行WINDOWS时可使用交换文件提高速度 1)使用WINDOWS交换文件 在386增强方式下运行时,通过将内存中信息交换到硬盘的交换文件来释放内存和加 快速度,WINDOWS交换文件有两种:(1)永久性交换文件,包括386SPART 。PAR和SPART。PAR;(2)临时交换文件WIN386。SWP,在没有永久 性交换文件时,WINDOWS运行时在硬盘上创建此文件,并且在退出WINDOWS时 删除它。 2)使用应用程序交换文件 在非标准方式下启动非WINDOWS应用程序时,WINDOWS为此应用程序创建 一临时应用程序交换文件,在386增强方式下不用应用程序交换文件,应用程序交换文件 是以-WOA开头的隐含文件。一般WINDOWS将这些文件放在SYSTEM。INI 文件的SWAPDISK指定的目录下,但注意,最好不要把SWAPDISK设定到RA M驱动器上,如果有一个以上硬盘且硬盘速度各异,将SWAPDISK设定到速度最快的 硬盘上。 4。使用SMARTDRIVE磁盘高速缓存程序 SMARTDRIVE是一个磁盘高速缓存程序,它将从硬盘上读出的信息保存到计算 机扩展内存的磁盘高速缓存区中。当应用程序试图从硬盘上读取信息时,SMARTDRI VE代之以直接从内存中提供这些信息。在启动应用程序时,可以在MS-DOS提示符后 输入SMARTDRIVE命令或在AUTOEXEC。BAT文件中加入一命令行,即可 启动SMARTDRIVE。如果系统有至少2MB的内存,建议使用SMARTDRIV E,至于何时为最佳设置,用户可以根据不同的程序进行试验,找出适用于本系统的最佳设 置。 5。使用MS-DOS内存管理程序,提高运行速度 1)使用HIMEM扩展内存管理程序 HIMEM是一个扩展内存管理程序,此程序协调扩展内存的使用,以免两个应用程序 在同一时刻使用同一扩展内存。安装HIMEM方法是在CONFIG。SYS文件中加入 HIMEM命令行。具体参数选项请参考有关DOS *** 作手册。但必须注意:要使HIME M命令行位于使用扩展内存的应用程序或设备驱动程序的命令行之前。 2)使用RAMDRIVE RAMDRIVE是内存驻留程序,它能将一部分系统内存当作硬盘驱动器使用,这一 内存区被称作RAM驱动器。计算机从内存中读取信息比从硬盘上读取要快,所以RAM驱 动器比硬盘驱动器要快得多,真正的磁盘驱动器和RAM驱动器最重要的差别在于RAM驱 动器仅存在于内存中,所以当关掉计算机或重新启动计算机时,其中的信息会丢失。使用R AMDRIVE要注意下面几点:(1)在确实需要RAM驱动器时才安装RAMDRIV E。一般情况下,用同样数量的内存作为磁盘高速缓存区(如SMARTDR
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)