❶ 高分求高手解决计算机操作系统问题!!
虚拟内存的出发点是因为内存很贵,硬盘很便宜,所以用硬盘来“虚拟”内存。
信号量实际是防止CPU流水线执行指令造成资源冲突。
❷ 储存池是什么Win8系统存储池使用技巧
当我们的电脑有多个磁盘驱动器时,可能会同时创建出多个磁盘分区,管理起来非常繁杂。而在Win8系统中解决了这个问题,我们可以通过创建存储池,将多余的空间整合在一起并自定义设置。下面系统之家小编为大家介绍一下Win8系统存储池使用技巧。
1.要想在Win8系统中创建存储池,我们首先要打开控制面板—所有控制面板项—存储空间;接着点击"创建新的池和存储空间"
2.在新的窗口中,我们可以勾选多个驱动器,将其添加进存储池中,就可以实现统一、灵活管理磁盘分区的目的;
3.此外,我们还可以创建一个存储空间,设置"名称、驱动器号、系统文件类型"等,如果我们同时添加了多个驱动器可以选择双向、三向镜像,这样在使用时会自动生成文件备份,以防止某个驱动器损坏尔导致文件丢人哦~
4.关于Win8存储池的创建以及使用设置就介绍到这里了,大家试试吧!
本文来自于【系统之家】
www.xp85.com
❸ 简述存储池的概念
存储池是一种技术,它可以使一组存储设备连接在一起,共同构成一个内存空间,这样,用户可以更有效地使用存储设备,提高存储设备的性能和可用性。
存储池的
拓展:存储池可以提高存储设备的容量,可以提供更高的可用性,可以提高存储设备的性能,可以改善管理结构,减少成本,支持数据的恢复,提高系统的可用性。此外,存储池还可以支持虚拟存储技术,可以将多个实体存储设备组合成一个虚拟存储池。
❹ 如何实现用户自己的数据文件的分类存放策略
1 虚拟存储技术的产生
虚拟化技术并不是一件很新的技术,它的发展,应该说是随着计算机技术的发展而发展起来的,最早是始于70年代.由于当时的存储容量,特别是内存容量成本非常高,容量也很小,对于大型应用程序或多程序应用就受到了很大的限制.为了克服这样的限制,人们就采用了虚拟存储的技术,最典型的应用就是虚拟内存技术.随着计算机技术以及相关信息处理技术的不断发展,人们对存储的需求越来越大.这样的需求刺激了各种新技术的出现,比如磁盘性能越来越好,容量越来越大.但是在大量的大中型信息处理系统中,单个磁盘是不能满足需要,这样的情况下存储虚拟化技术就发展起来了.在这个发展过程中也由几个阶段和几种应用.首先是磁盘条带集(RAID,可带容错)技术,将多个物理磁盘通过一定的逻辑关系集合起来,成为一个大容量的虚拟磁盘.而随着数据量不断增加和对数据可用性要求的不断提高,又一种新的存储技术应运而生,那就是存储区域网络(SAN)技术.SAN的广域化则旨在将存储设备实现成为一种公用设施,任何人员,任何主机都可以随时随地获取各自想要的数据.目前讨论比较多的包括iSCSI,FC Over IP 等技术,由于一些相关的标准还没有最终确定,但是存储设备公用化,存储网络广域化是一个不可逆转的潮流.
2 虚拟存储的概念
所谓虚拟存储,就是把多个存储介质模块(如硬盘,RAID)通过一定的手段集中管理起来,所有的存储模块在一个存储池(Storage Pool)中得到统一管理,从主机和工作站的角度,看到就不是多个硬盘,而是一个分区或者卷,就好象是一个超大容量(如1T以上)的硬盘.这种可以将多种,多个存储设备统一管理起来,为使用者提供大容量,高数据传输性能的存储系统,就称之为虚拟存储.
虚拟存储的分类
目前虚拟存储的发展尚无统一标准,从虚拟化存储的拓扑结构来讲主要有两种方式:即对称式与非对称式.对称式虚拟存储技术是指虚拟存储控制设备与存储软件系统,交换设备集成为一个整体,内嵌在网络数据传输路径中;非对称式虚拟存储技术是指虚拟存储控制设备独立于数据传输路径之外.从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统.具体如下:
A.对称式虚拟存储
图1
图1对称式虚拟存储解决方案的示意图
在图1所示的对称式虚拟存储结构图中,存储控制设备 High Speed Traffic Directors(HSTD)与存储池子系统Storage Pool集成在一起,组成SAN Appliance.可以看到在该方案中存储控制设备HSTD在主机与存储池数据交换的过程中起到核心作用.该方案的虚拟存储过程是这样的:由HSTD内嵌的存储管理系统将存储池中的物理硬盘虚拟为逻辑存储单元(LUN),并进行端口映射(指定某一个LUN能被哪些端口所见),主机端将各可见的存储单元映射为操作系统可识别的盘符.当主机向SAN Appliance写入数据时,用户只需要将数据写入位置指定为自己映射的盘符(LUN),数据经过HSTD的高速并行端口,先写入高速缓存,HSTD中的存储管理系统自动完成目标位置由LUN到物理硬盘的转换,在此过程中用户见到的只是虚拟逻辑单元,而不关心每个LUN的具体物理组织结构.该方案具有以下主要特点:
(1)采用大容量高速缓存,显着提高数据传输速度.
缓存是存储系统中广泛采用的位于主机与存储设备之间的I/O路径上的中间介质.当主机从存储设备中读取数据时,会把与当前数据存储位置相连的数据读到缓存中,并把多次调用的数据保留在缓存中;当主机读数据时,在很大几率上能够从缓存中找到所需要的数据.直接从缓存上读出.而从缓存读取数据时的速度只受到电信号传播速度的影响(等于光速),因此大大高于从硬盘读数据时盘片机械转动的速度.当主机向存储设备写入数据时,先把数据写入缓存中,待主机端写入动作停止,再从缓存中将数据写入硬盘,同样高于直接写入硬盘的速度
(2)多端口并行技术,消除了I/O瓶颈.
传统的FC存储设备中控制端口与逻辑盘之间是固定关系,访问一块硬盘只能通过控制它的控制器端口.在对称式虚拟存储设备中,SAN Appliance的存储端口与LUN的关系是虚拟的,也就是说多台主机可以通过多个存储端口(最多8个)并发访问同一个LUN;在光纤通道100MB/带宽的大前提下,并行工作的端口数量越多,数据带宽就越高.
(3)逻辑存储单元提供了高速的磁盘访问速度.
在视频应用环境中,应用程序读写数据时以固定大小的数据块为单位(从512byte到1MB之间).而存储系统为了保证应用程序的带宽需求,往往设计为传输512byte以上的数据块大小时才能达到其最佳I/O性能.在传统SAN结构中,当容量需求增大时,唯一的解决办法是多块磁盘(物理或逻辑的)绑定为带区集,实现大容量LUN.在对称式虚拟存储系统中,为主机提供真正的超大容量,高性能LUN,而不是用带区集方式实现的性能较差的逻辑卷.与带区集相比,Power LUN具有很多优势,如大块的I/O block会真正被存储系统所接受,有效提高数据传输速度;并且由于没有带区集的处理过程,主机CPU可以解除很大负担,提高了主机的性能.
(4)成对的HSTD系统的容错性能.
在对称式虚拟存储系统中,HSTD是数据I/O的必经之地,存储池是数据存放地.由于存储池中的数据具有容错机制保障安全,因此用户自然会想到HSTD是否有容错保护.象许多大型存储系统一样,在成熟的对称式虚拟存储系统中,HSTD是成对配制的,每对HSTD之间是通过SAN Appliance内嵌的网络管理服务实现缓存数据一致和相互通信的.
(5)在SAN Appliance之上可方便的连接交换设备,实现超大规模Fabric结构的SAN.
因为系统保持了标准的SAN结构,为系统的扩展和互连提供了技术保障,所以在SAN Appliance之上可方便的连接交换设备,实现超大规模Fabric结构的SAN.
B.非对称式虚拟存储系统
图2
图2非对称式虚拟存储系统示意图
在图2所示的非对称式虚拟存储系统结构图中,网络中的每一台主机和虚拟存储管理设备均连接到磁盘阵列,其中主机的数据路径通过FC交换设备到达磁盘阵列;虚拟存储设备对网络上连接的磁盘阵列进行虚拟化操作,将各存储阵列中的LUN虚拟为逻辑带区集(Strip),并对网络上的每一台主机指定对每一个Strip的访问权限(可写,可读,禁止访问).当主机要访问某个Strip时,首先要访问虚拟存储设备,读取Strip信息和访问权限,然后再通过交换设备访问实际的Strip中的数据.在此过程中,主机只会识别到逻辑的strip,而不会直接识别到物理硬盘.这种方案具有如下特点:
(1)将不同物理硬盘阵列中的容量进行逻辑组合,实现虚拟的带区集,将多个阵列控制器端口绑定,在一定程度上提高了系统的可用带宽.
(2)在交换机端口数量足够的情况下,可在一个网络内安装两台虚拟存储设备,实现Strip信息和访问权限的冗余.
但是该方案存在如下一些不足:
(1)该方案本质上是带区集——磁盘阵列结构,一旦带区集中的某个磁盘阵列控制器损坏,或者这个阵列到交换机路径上的铜缆,GBIC损坏,都会导致一个虚拟的LUN离线,而带区集本身是没有容错能力的,一个LUN的损坏就意味着整个Strip里面数据的丢失.
(2)由于该方案的带宽提高是通过阵列端口绑定来实现的,而普通光纤通道阵列控制器的有效带宽仅在40MB/S左右,因此要达到几百兆的带宽就意味着要调用十几台阵列,这样就会占用几十个交换机端口,在只有一两台交换机的中小型网络中,这是不可实现的.
(3)由于各种品牌,型号的磁盘阵列其性能不完全相同,如果出于虚拟化的目的将不同品牌,型号的阵列进行绑定,会带来一个问题:即数据写入或读出时各并发数据流的速度不同,这就意味着原来的数据包顺序在传输完毕后被打乱,系统需要占用时间和资源去重新进行数据包排序整理,这会严重影响系统性能.
4 数据块虚拟与虚拟文件系统
以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统.
数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式.
虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式.
虚拟存储技术和这门课的结合点
本学期的这门课中,所涉及的虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术
基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术
目的:提高内存利用率
管理方式
A 请求式分页存储管理
在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面
B 请求式分段存储管理
为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理
现在团IDC网上有45元/年美国空间的团购,便宜有口碑
1 虚拟存储技术的产生
虚拟化技术并不是一件很新的技术,它的发展,应该说是随着计算机技术的发展而发展起来的,最早是始于70年代.由于当时的存储容量,特别是内存容量成本非常高,容量也很小,对于大型应用程序或多程序应用就受到了很大的限制.为了克服这样的限制,人们就采用了虚拟存储的技术,最典型的应用就是虚拟内存技术.随着计算机技术以及相关信息处理技术的不断发展,人们对存储的需求越来越大.这样的需求刺激了各种新技术的出现,比如磁盘性能越来越好,容量越来越大.但是在大量的大中型信息处理系统中,单个磁盘是不能满足需要,这样的情况下存储虚拟化技术就发展起来了.在这个发展过程中也由几个阶段和几种应用.首先是磁盘条带集(RAID,可带容错)技术,将多个物理磁盘通过一定的逻辑关系集合起来,成为一个大容量的虚拟磁盘.而随着数据量不断增加和对数据可用性要求的不断提高,又一种新的存储技术应运而生,那就是存储区域网络(SAN)技术.SAN的广域化则旨在将存储设备实现成为一种公用设施,任何人员,任何主机都可以随时随地获取各自想要的数据.目前讨论比较多的包括iSCSI,FC Over IP 等技术,由于一些相关的标准还没有最终确定,但是存储设备公用化,存储网络广域化是一个不可逆转的潮流.
2 虚拟存储的概念
所谓虚拟存储,就是把多个存储介质模块(如硬盘,RAID)通过一定的手段集中管理起来,所有的存储模块在一个存储池(Storage Pool)中得到统一管理,从主机和工作站的角度,看到就不是多个硬盘,而是一个分区或者卷,就好象是一个超大容量(如1T以上)的硬盘.这种可以将多种,多个存储设备统一管理起来,为使用者提供大容量,高数据传输性能的存储系统,就称之为虚拟存储.
虚拟存储的分类
目前虚拟存储的发展尚无统一标准,从虚拟化存储的拓扑结构来讲主要有两种方式:即对称式与非对称式.对称式虚拟存储技术是指虚拟存储控制设备与存储软件系统,交换设备集成为一个整体,内嵌在网络数据传输路径中;非对称式虚拟存储技术是指虚拟存储控制设备独立于数据传输路径之外.从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统.具体如下:
A.对称式虚拟存储
图1
图1对称式虚拟存储解决方案的示意图
在图1所示的对称式虚拟存储结构图中,存储控制设备 High Speed Traffic Directors(HSTD)与存储池子系统Storage Pool集成在一起,组成SAN Appliance.可以看到在该方案中存储控制设备HSTD在主机与存储池数据交换的过程中起到核心作用.该方案的虚拟存储过程是这样的:由HSTD内嵌的存储管理系统将存储池中的物理硬盘虚拟为逻辑存储单元(LUN),并进行端口映射(指定某一个LUN能被哪些端口所见),主机端将各可见的存储单元映射为操作系统可识别的盘符.当主机向SAN Appliance写入数据时,用户只需要将数据写入位置指定为自己映射的盘符(LUN),数据经过HSTD的高速并行端口,先写入高速缓存,HSTD中的存储管理系统自动完成目标位置由LUN到物理硬盘的转换,在此过程中用户见到的只是虚拟逻辑单元,而不关心每个LUN的具体物理组织结构.该方案具有以下主要特点:
(1)采用大容量高速缓存,显着提高数据传输速度.
缓存是存储系统中广泛采用的位于主机与存储设备之间的I/O路径上的中间介质.当主机从存储设备中读取数据时,会把与当前数据存储位置相连的数据读到缓存中,并把多次调用的数据保留在缓存中;当主机读数据时,在很大几率上能够从缓存中找到所需要的数据.直接从缓存上读出.而从缓存读取数据时的速度只受到电信号传播速度的影响(等于光速),因此大大高于从硬盘读数据时盘片机械转动的速度.当主机向存储设备写入数据时,先把数据写入缓存中,待主机端写入动作停止,再从缓存中将数据写入硬盘,同样高于直接写入硬盘的速度
(2)多端口并行技术,消除了I/O瓶颈.
传统的FC存储设备中控制端口与逻辑盘之间是固定关系,访问一块硬盘只能通过控制它的控制器端口.在对称式虚拟存储设备中,SAN Appliance的存储端口与LUN的关系是虚拟的,也就是说多台主机可以通过多个存储端口(最多8个)并发访问同一个LUN;在光纤通道100MB/带宽的大前提下,并行工作的端口数量越多,数据带宽就越高.
(3)逻辑存储单元提供了高速的磁盘访问速度.
在视频应用环境中,应用程序读写数据时以固定大小的数据块为单位(从512byte到1MB之间).而存储系统为了保证应用程序的带宽需求,往往设计为传输512byte以上的数据块大小时才能达到其最佳I/O性能.在传统SAN结构中,当容量需求增大时,唯一的解决办法是多块磁盘(物理或逻辑的)绑定为带区集,实现大容量LUN.在对称式虚拟存储系统中,为主机提供真正的超大容量,高性能LUN,而不是用带区集方式实现的性能较差的逻辑卷.与带区集相比,Power LUN具有很多优势,如大块的I/O block会真正被存储系统所接受,有效提高数据传输速度;并且由于没有带区集的处理过程,主机CPU可以解除很大负担,提高了主机的性能.
(4)成对的HSTD系统的容错性能.
在对称式虚拟存储系统中,HSTD是数据I/O的必经之地,存储池是数据存放地.由于存储池中的数据具有容错机制保障安全,因此用户自然会想到HSTD是否有容错保护.象许多大型存储系统一样,在成熟的对称式虚拟存储系统中,HSTD是成对配制的,每对HSTD之间是通过SAN Appliance内嵌的网络管理服务实现缓存数据一致和相互通信的.
(5)在SAN Appliance之上可方便的连接交换设备,实现超大规模Fabric结构的SAN.
因为系统保持了标准的SAN结构,为系统的扩展和互连提供了技术保障,所以在SAN Appliance之上可方便的连接交换设备,实现超大规模Fabric结构的SAN.
B.非对称式虚拟存储系统
图2
图2非对称式虚拟存储系统示意图
在图2所示的非对称式虚拟存储系统结构图中,网络中的每一台主机和虚拟存储管理设备均连接到磁盘阵列,其中主机的数据路径通过FC交换设备到达磁盘阵列;虚拟存储设备对网络上连接的磁盘阵列进行虚拟化操作,将各存储阵列中的LUN虚拟为逻辑带区集(Strip),并对网络上的每一台主机指定对每一个Strip的访问权限(可写,可读,禁止访问).当主机要访问某个Strip时,首先要访问虚拟存储设备,读取Strip信息和访问权限,然后再通过交换设备访问实际的Strip中的数据.在此过程中,主机只会识别到逻辑的strip,而不会直接识别到物理硬盘.这种方案具有如下特点:
(1)将不同物理硬盘阵列中的容量进行逻辑组合,实现虚拟的带区集,将多个阵列控制器端口绑定,在一定程度上提高了系统的可用带宽.
(2)在交换机端口数量足够的情况下,可在一个网络内安装两台虚拟存储设备,实现Strip信息和访问权限的冗余.
但是该方案存在如下一些不足:
(1)该方案本质上是带区集——磁盘阵列结构,一旦带区集中的某个磁盘阵列控制器损坏,或者这个阵列到交换机路径上的铜缆,GBIC损坏,都会导致一个虚拟的LUN离线,而带区集本身是没有容错能力的,一个LUN的损坏就意味着整个Strip里面数据的丢失.
(2)由于该方案的带宽提高是通过阵列端口绑定来实现的,而普通光纤通道阵列控制器的有效带宽仅在40MB/S左右,因此要达到几百兆的带宽就意味着要调用十几台阵列,这样就会占用几十个交换机端口,在只有一两台交换机的中小型网络中,这是不可实现的.
(3)由于各种品牌,型号的磁盘阵列其性能不完全相同,如果出于虚拟化的目的将不同品牌,型号的阵列进行绑定,会带来一个问题:即数据写入或读出时各并发数据流的速度不同,这就意味着原来的数据包顺序在传输完毕后被打乱,系统需要占用时间和资源去重新进行数据包排序整理,这会严重影响系统性能.
4 数据块虚拟与虚拟文件系统
以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统.
数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式.
虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式.
虚拟存储技术和这门课的结合点
本学期的这门课中,所涉及的虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术
基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术
目的:提高内存利用率
管理方式
A 请求式分页存储管理
在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面
B 请求式分段存储管理
为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理
现在团IDC网上有45元/年美国空间的团购,便宜有口碑
❺ linux中使用了什么内存管理方法,为什么
“事实胜于雄辩”,我们用一个小例子(原形取自《User-Level Memory Management》)来展示上面所讲的各种内存区的差别与位置。
进程的地址空间对应的描述结构是“内存描述符结构”,它表示进程的全部地址空间,——包含了和进程地址空间有关的全部信息,其中当然包含进程的内存区域。
进程内存的分配与回收
创建进程fork()、程序载入execve()、映射文件mmap()、动态内存分配malloc()/brk()等进程相关操作都需要分配内存给进程。不过这时进程申请和获得的还不是实际内存,而是虚拟内存,准确的说是“内存区域”。进程对内存区域的分配最终都会归结到do_mmap()函数上来(brk调用被单独以系统调用实现,不用do_mmap()),
内核使用do_mmap()函数创建一个新的线性地址区间。但是说该函数创建了一个新VMA并不非常准确,因为如果创建的地址区间和一个已经存在的地址区间相邻,并且它们具有相同的访问权限的话,那么两个区间将合并为一个。如果不能合并,那么就确实需要创建一个新的VMA了。但无论哪种情况,do_mmap()函数都会将一个地址区间加入到进程的地址空间中--无论是扩展已存在的内存区域还是创建一个新的区域。
同样,释放一个内存区域应使用函数do_ummap(),它会销毁对应的内存区域。
如何由虚变实!
从上面已经看到进程所能直接操作的地址都为虚拟地址。当进程需要内存时,从内核获得的仅仅是虚拟的内存区域,而不是实际的物理地址,进程并没有获得物理内存(物理页面——页的概念请大家参考硬件基础一章),获得的仅仅是对一个新的线性地址区间的使用权。实际的物理内存只有当进程真的去访问新获取的虚拟地址时,才会由“请求页机制”产生“缺页”异常,从而进入分配实际页面的例程。
该异常是虚拟内存机制赖以存在的基本保证——它会告诉内核去真正为进程分配物理页,并建立对应的页表,这之后虚拟地址才实实在在地映射到了系统的物理内存上。(当然,如果页被换出到磁盘,也会产生缺页异常,不过这时不用再建立页表了)
这种请求页机制把页面的分配推迟到不能再推迟为止,并不急于把所有的事情都一次做完(这种思想有点像设计模式中的代理模式(proxy))。之所以能这么做是利用了内存访问的“局部性原理”,请求页带来的好处是节约了空闲内存,提高了系统的吞吐率。要想更清楚地了解请求页机制,可以看看《深入理解linux内核》一书。
这里我们需要说明在内存区域结构上的nopage操作。当访问的进程虚拟内存并未真正分配页面时,该操作便被调用来分配实际的物理页,并为该页建立页表项。在最后的例子中我们会演示如何使用该方法。
系统物理内存管理
虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当应用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,概括地讲,地址转换需要将虚拟地址分段,使每段虚地址都作为一个索引指向页表,而页表项则指向下一级别的页表或者指向最终的物理页面。
每个进程都有自己的页表。进程描述符的pgd域指向的就是进程的页全局目录。下面我们借用《linux设备驱动程序》中的一幅图大致看看进程地址空间到物理页之间的转换关系。
上面的过程说起来简单,做起来难呀。因为在虚拟地址映射到页之前必须先分配物理页——也就是说必须先从内核中获取空闲页,并建立页表。下面我们介绍一下内核管理物理内存的机制。
物理内存管理(页管理)
Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[3],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存时还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更改,因此能降低TLB的刷新率(频繁刷新会在很大程度上降低访问速度)。
鉴于上述需求,内核分配物理页面时为了尽量减少不连续情况,采用了“伙伴”关系来管理空闲页面。伙伴关系分配算法大家应该不陌生——几乎所有操作系统方面的书都会提到,我们不去详细说它了,如果不明白可以参看有关资料。这里只需要大家明白Linux中空闲页面的组织和管理利用了伙伴关系,因此空闲页面分配时也需要遵循伙伴关系,最小单位只能是2的幂倍页面大小。内核中分配空闲页面的基本函数是get_free_page/get_free_pages,它们或是分配单页或是分配指定的页面(2、4、8…512页)。
注意:get_free_page是在内核中分配内存,不同于malloc在用户空间中分配,malloc利用堆动态分配,实际上是调用brk()系统调用,该调用的作用是扩大或缩小进程堆空间(它会修改进程的brk域)。如果现有的内存区域不够容纳堆空间,则会以页面大小的倍数为单位,扩张或收缩对应的内存区域,但brk值并非以页面大小为倍数修改,而是按实际请求修改。因此Malloc在用户空间分配内存可以以字节为单位分配,但内核在内部仍然会是以页为单位分配的。
另外,需要提及的是,物理页在系统中由页结构structpage描述,系统中所有的页面都存储在数组mem_map[]中,可以通过该数组找到系统中的每一页(空闲或非空闲)。而其中的空闲页面则可由上述提到的以伙伴关系组织的空闲页链表(free_area[MAX_ORDER])来索引。
内核内存使用
Slab
所谓尺有所长,寸有所短。以页为最小单位分配内存对于内核管理系统中的物理内存来说的确比较方便,但内核自身最常使用的内存却往往是很小(远远小于一页)的内存块——比如存放文件描述符、进程描述符、虚拟内存区域描述符等行为所需的内存都不足一页。这些用来存放描述符的内存相比页面而言,就好比是面包屑与面包。一个整页中可以聚集多个这些小块内存;而且这些小块内存块也和面包屑一样频繁地生成/销毁。
为了满足内核对这种小内存块的需要,Linux系统采用了一种被称为slab分配器的技术。Slab分配器的实现相当复杂,但原理不难,其核心思想就是“存储池[4]”的运用。内存片段(小块内存)被看作对象,当被使用完后,并不直接释放而是被缓存到“存储池”里,留做下次使用,这无疑避免了频繁创建与销毁对象所带来的额外负载。
Slab技术不但避免了内存内部分片(下文将解释)带来的不便(引入Slab分配器的主要目的是为了减少对伙伴系统分配算法的调用次数——频繁分配和回收必然会导致内存碎片——难以找到大块连续的可用内存),而且可以很好地利用硬件缓存提高访问速度。
Slab并非是脱离伙伴关系而独立存在的一种内存分配方式,slab仍然是建立在页面基础之上,换句话说,Slab将页面(来自于伙伴关系管理的空闲页面链表)撕碎成众多小内存块以供分配,slab中的对象分配和销毁使用kmem_cache_alloc与kmem_cache_free。
Kmalloc
Slab分配器不仅仅只用来存放内核专用的结构体,它还被用来处理内核对小块内存的请求。当然鉴于Slab分配器的特点,一般来说内核程序中对小于一页的小块内存的请求才通过Slab分配器提供的接口Kmalloc来完成(虽然它可分配32到131072字节的内存)。从内核内存分配的角度来讲,kmalloc可被看成是get_free_page(s)的一个有效补充,内存分配粒度更灵活了。
有兴趣的话,可以到/proc/slabinfo中找到内核执行现场使用的各种slab信息统计,其中你会看到系统中所有slab的使用信息。从信息中可以看到系统中除了专用结构体使用的slab外,还存在大量为Kmalloc而准备的Slab(其中有些为dma准备的)。
内核非连续内存分配(Vmalloc)
伙伴关系也好、slab技术也好,从内存管理理论角度而言目的基本是一致的,它们都是为了防止“分片”,不过分片又分为外部分片和内部分片之说,所谓内部分片是说系统为了满足一小段内存区(连续)的需要,不得不分配了一大区域连续内存给它,从而造成了空间浪费;外部分片是指系统虽有足够的内存,但却是分散的碎片,无法满足对大块“连续内存”的需求。无论何种分片都是系统有效利用内存的障碍。slab分配器使得一个页面内包含的众多小块内存可独立被分配使用,避免了内部分片,节约了空闲内存。伙伴关系把内存块按大小分组管理,一定程度上减轻了外部分片的危害,因为页框分配不在盲目,而是按照大小依次有序进行,不过伙伴关系只是减轻了外部分片,但并未彻底消除。你自己比划一下多次分配页面后,空闲内存的剩余情况吧。
所以避免外部分片的最终思路还是落到了如何利用不连续的内存块组合成“看起来很大的内存块”——这里的情况很类似于用户空间分配虚拟内存,内存逻辑上连续,其实映射到并不一定连续的物理内存上。Linux内核借用了这个技术,允许内核程序在内核地址空间中分配虚拟地址,同样也利用页表(内核页表)将虚拟地址映射到分散的内存页上。以此完美地解决了内核内存使用中的外部分片问题。内核提供vmalloc函数分配内核虚拟内存,该函数不同于kmalloc,它可以分配较Kmalloc大得多的内存空间(可远大于128K,但必须是页大小的倍数),但相比Kmalloc来说,Vmalloc需要对内核虚拟地址进行重映射,必须更新内核页表,因此分配效率上要低一些(用空间换时间)
与用户进程相似,内核也有一个名为init_mm的mm_strcut结构来描述内核地址空间,其中页表项pdg=swapper_pg_dir包含了系统内核空间(3G-4G)的映射关系。因此vmalloc分配内核虚拟地址必须更新内核页表,而kmalloc或get_free_page由于分配的连续内存,所以不需要更新内核页表。
vmalloc分配的内核虚拟内存与kmalloc/get_free_page分配的内核虚拟内存位于不同的区间,不会重叠。因为内核虚拟空间被分区管理,各司其职。进程空间地址分布从0到3G(其实是到PAGE_OFFSET,在0x86中它等于0xC0000000),从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页面表mem_map等等)比如我使用的系统内存是64M(可以用free看到),那么(3G——3G+64M)这片内存就应该映射到物理内存,而vmalloc_start位置应在3G+64M附近(说"附近"因为是在物理内存映射区与vmalloc_start期间还会存在一个8M大小的gap来防止跃界),vmalloc_end的位置接近4G(说"接近"是因为最后位置系统会保留一片128k大小的区域用于专用页面映射,还有可能会有高端内存映射区,这些都是细节,这里我们不做纠缠)。
上图是内存分布的模糊轮廓
由get_free_page或Kmalloc函数所分配的连续内存都陷于物理映射区域,所以它们返回的内核虚拟地址和实际物理地址仅仅是相差一个偏移量(PAGE_OFFSET),你可以很方便的将其转化为物理内存地址,同时内核也提供了virt_to_phys()函数将内核虚拟空间中的物理映射区地址转化为物理地址。要知道,物理内存映射区中的地址与内核页表是有序对应的,系统中的每个物理页面都可以找到它对应的内核虚拟地址(在物理内存映射区中的)。
而vmalloc分配的地址则限于vmalloc_start与vmalloc_end之间。每一块vmalloc分配的内核虚拟内存都对应一个vm_struct结构体(可别和vm_area_struct搞混,那可是进程虚拟内存区域的结构),不同的内核虚拟地址被4k大小的空闲区间隔,以防止越界——见下图)。与进程虚拟地址的特性一样,这些虚拟地址与物理内存没有简单的位移关系,必须通过内核页表才可转换为物理地址或物理页。它们有可能尚未被映射,在发生缺页时才真正分配物理页面。
这里给出一个小程序帮助大家认清上面几种分配函数所对应的区域。
#include<linux/mole.h>
#include<linux/slab.h>
#include<linux/vmalloc.h>
unsignedchar*pagemem;
unsignedchar*kmallocmem;
unsignedchar*vmallocmem;
intinit_mole(void)
{
pagemem = get_free_page(0);
printk("<1>pagemem=%s",pagemem);
kmallocmem = kmalloc(100,0);
printk("<1>kmallocmem=%s",kmallocmem);
vmallocmem = vmalloc(1000000);
printk("<1>vmallocmem=%s",vmallocmem);
}
voidcleanup_mole(void)
{
free_page(pagemem);
kfree(kmallocmem);
vfree(vmallocmem);
}
实例
内存映射(mmap)是Linux操作系统的一个很大特色,它可以将系统内存映射到一个文件(设备)上,以便可以通过访问文件内容来达到访问内存的目的。这样做的最大好处是提高了内存访问速度,并且可以利用文件系统的接口编程(设备在Linux中作为特殊文件处理)访问内存,降低了开发难度。许多设备驱动程序便是利用内存映射功能将用户空间的一段地址关联到设备内存上,无论何时,只要内存在分配的地址范围内进行读写,实际上就是对设备内存的访问。同时对设备文件的访问也等同于对内存区域的访问,也就是说,通过文件操作接口可以访问内存。Linux中的X服务器就是一个利用内存映射达到直接高速访问视频卡内存的例子。
熟悉文件操作的朋友一定会知道file_operations结构中有mmap方法,在用户执行mmap系统调用时,便会调用该方法来通过文件访问内存——不过在调用文件系统mmap方法前,内核还需要处理分配内存区域(vma_struct)、建立页表等工作。对于具体映射细节不作介绍了,需要强调的是,建立页表可以采用remap_page_range方法一次建立起所有映射区的页表,或利用vma_struct的nopage方法在缺页时现场一页一页的建立页表。第一种方法相比第二种方法简单方便、速度快,但是灵活性不高。一次调用所有页表便定型了,不适用于那些需要现场建立页表的场合——比如映射区需要扩展或下面我们例子中的情况。
我们这里的实例希望利用内存映射,将系统内核中的一部分虚拟内存映射到用户空间,以供应用程序读取——你可利用它进行内核空间到用户空间的大规模信息传输。因此我们将试图写一个虚拟字符设备驱动程序,通过它将系统内核空间映射到用户空间——将内核虚拟内存映射到用户虚拟地址。从上一节已经看到Linux内核空间中包含两种虚拟地址:一种是物理和逻辑都连续的物理内存映射虚拟地址;另一种是逻辑连续但非物理连续的vmalloc分配的内存虚拟地址。我们的例子程序将演示把vmalloc分配的内核虚拟地址映射到用户地址空间的全过程。
程序里主要应解决两个问题:
第一是如何将vmalloc分配的内核虚拟内存正确地转化成物理地址?
因为内存映射先要获得被映射的物理地址,然后才能将其映射到要求的用户虚拟地址上。我们已经看到内核物理内存映射区域中的地址可以被内核函数virt_to_phys转换成实际的物理内存地址,但对于vmalloc分配的内核虚拟地址无法直接转化成物理地址,所以我们必须对这部分虚拟内存格外“照顾”——先将其转化成内核物理内存映射区域中的地址,然后在用virt_to_phys变为物理地址。
转化工作需要进行如下步骤:
找到vmalloc虚拟内存对应的页表,并寻找到对应的页表项。
获取页表项对应的页面指针
通过页面得到对应的内核物理内存映射区域地址。
如下图所示:
第二是当访问vmalloc分配区时,如果发现虚拟内存尚未被映射到物理页,则需要处理“缺页异常”。因此需要我们实现内存区域中的nopaga操作,以能返回被映射的物理页面指针,在我们的实例中就是返回上面过程中的内核物理内存映射区域中的地址。由于vmalloc分配的虚拟地址与物理地址的对应关系并非分配时就可确定,必须在缺页现场建立页表,因此这里不能使用remap_page_range方法,只能用vma的nopage方法一页一页的建立。
程序组成
map_driver.c,它是以模块形式加载的虚拟字符驱动程序。该驱动负责将一定长的内核虚拟地址(vmalloc分配的)映射到设备文件上。其中主要的函数有——vaddress_to_kaddress()负责对vmalloc分配的地址进行页表解析,以找到对应的内核物理映射地址(kmalloc分配的地址);map_nopage()负责在进程访问一个当前并不存在的VMA页时,寻找该地址对应的物理页,并返回该页的指针。
test.c它利用上述驱动模块对应的设备文件在用户空间读取读取内核内存。结果可以看到内核虚拟地址的内容(ok!),被显示在了屏幕上。
执行步骤
编译map_driver.c为map_driver.o模块,具体参数见Makefile
加载模块:insmodmap_driver.o
生成对应的设备文件
1在/proc/devices下找到map_driver对应的设备命和设备号:grepmapdrv/proc/devices
2建立设备文件mknodmapfilec 254 0(在我的系统里设备号为254)
利用maptest读取mapfile文件,将取自内核的信息打印到屏幕上。
❻ (操作系统) 编写代码对存储管理部件的工作过程进行模拟
采用分页存储器允许把一个作业存放到若干不相邻的分区中,既可免去移动信息的工作,又可尽量减少主存的碎片。分页式存储管理的基本原理如下:
1、 页框:物理地址分成大小相等的许多区,每个区称为一块;
2、址分成大小相等的区,区的大小与块的大小相等,每个称一个页面。
3、 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成,页号和单元号。逻辑地址格式为 页号 单元号(页内地址) 采用分页式存储管理时,逻辑地址是连续的。所以,用户在编制程序时仍只须使用顺序的地址,而不必考虑如何去分页。
4、页表和地址转换:如何保证程序正确执行呢?
采用的办法是动态重定位技术,让程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表,页表中的每一栏指明了程序中的一个页面和分得的页框的对应关系。绝对地址=块号*块长+单元号 以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统. 数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式. 虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式. 虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术 基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术 目的:提高内存利用率 管理方式
A 请求式分页存储管理 在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面
B 请求式分段存储管理 为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理
你好,希望采纳!
❼ 存储里面,存储池到底是怎么样一个概念呢一直比较困惑~~
存储池是 Data Protection Manager (DPM) 服务器在其中存储副本、卷影副本和传输日志的一组磁盘。您必须向存储池添加至少一个磁盘才可开始保护数据。添加到存储池的磁盘应是空的。为了准备数据保护,DPM 重新格式化磁盘并擦除磁盘上的任何数据。DPM 服务器必须安装至少两个磁盘,_一个专用于启动、系统和 DPM 安装文件,而另一个专用于存储池。在 DPM
环境中,"磁盘"是指在 Windows 磁盘管理工具中显示为磁盘的任何磁盘设备。DPM 不会将含有启动文件、系统文件或 DPM
安装的任何组件的任何磁盘添加到存储池。
❽ 分页缓冲池占用高
你好,当然了,虚拟内存只是再硬盘上一块分区用来存储最缓慢的分页文件,如果不开那就直接使用物理内存做缓存啊。望采纳,欢迎追问
❾ 关闭了虚拟内存为什么任务管理器性能中仍显示占用分页缓冲池
你好,当然了,虚拟内存只是再硬盘上一块分区用来存储最缓慢的分页文件,如果不开那就直接使用物理内存做缓存啊。
望采纳,欢迎追问
❿ 请问win7 64位系统,进程管理器里面的提交大小和分页池(页面缓冲池)
Google来的:内存 - 提交大小为某进程使用而保留的虚拟内存的数量。内存 - 分页池由内核或驱动程序代表进程分配的可分页内核内存的数量。可分页内存是可写入其他存储媒体(例如硬盘)的内存。分页池是所有程序的核心模式组件使用到的内存部分。具体的是,分页池上的可以保存到磁盘上,当程序需要这些页面的时候,再读到内存里面来。在win7以前,Win32为系统中的每一个应用程序或者进程提供一个独立的2GB的用户地址空间,但是当时具体的大小是没有确定的。或者说是没有那么大。假设某个应用程序要求的内存比可用的内存更多时,Win32是这样满足这种要求的:它从这个独立的2GB用户地址空间或其他的进程把非关键内存分页到一个页文件,并且释放这些物理内存页。进程开始时,所有地址的都是自由的,意味着它们都是自由空间并且可以被提交到内存,或者为将来使用而保留起来,但是它们不能存取。在任何自由的地址能够被使用前,它必须首先被分配为保留的或已提交的。当内存被提交时,内存物理页被分配,并且该段空间被保留在在一个页文件中。也就是说,已提交的内存页总是以物理内存页或者在已经被分页的磁盘上的页文件的形式存在。当提交一个大块内存时,在初始阶段,其部分或者全部内存没有驻留在物理内存中也是有可能的。某些内存页一开始驻留在页文件中,直到它被访问。在系统中,一旦内存页已提交,虚拟内存管理器象对待所有其它的内存页一样对待它们。 按照上面的分析我认为,内存提交大小为实际内存页和虚拟内存页所提交的共同大小。