磁盘控制器(共9篇)
磁盘控制器 篇1
与Windows操作系统不同,Linux将设备视为文件处理,于是Linux中的问价大体可分为设备文件和磁盘文件,所谓磁盘文件,是指存贮在磁盘上的数据信息的集合。本文仅分析磁盘文件,因而在文中,对文件和磁盘文件不再区分。Linux系统中对磁盘文件的使用是通过文件描述符来完成的,使用open系统调用可以打开文件,也就是返回一个文件描述符,而文件存放在磁盘上,所以open系统调用实际上是在进程和磁盘文件之间创建一个连接,连接包含很多属性,这些属性则规定了连接的方式,即规定了文件的使用规则,也可以称为文件的打开方式或则文件描述符属性,本文对三种说法不加区分。一般来讲在使用open系统调用打开文件时需要指定文件的打开方式,但是文件的打开方式不仅可以在文件打开时指定,在文件打开后的使用过程中也可以通过修改连接属性来改变,以适应不同的应用情况,增加系统的灵活性。模型如图1所示。
1 修改连接属性
如上文所言,一旦打开文件,就要遵循属性规定的规则对文件进行使用,但是这无异限制了使用的灵活性,因而在文件打开后,连接属性的可以被修改以适应不同的情况,属性的修改分为三个步骤:
1)通过系统调用fcntl()将控制变量从文件描述符复制到进程,得到表示属性的位集。
2)通过位操作对属性位集进行修改。
3)将表示属性的位集写回内核。
文件描述符的属性表示成多个二进制位,一个二进制位可以代表一个属性,通过将相应的二进制位置1或者置0可以打开或者关闭一个属性,属性位组合成一个位集,位集又被表示成一个整数,系统调用fcntl()可以读取以整数形式出现的属性位集,也可以将修改过的位集写回内核,以此来改变文件的打开方式,系统调用fcntl的原型如下:
参数fd是需控制的文件描述符,cmd是需进行的操作,arg是操作的参数,lock是锁信息。Cmd的取值不同,系统调用所做的动作也不同,cmd可以取下列值:
F_SETFL用参数arg的值设置文件状态标志。参数中文件存取方式(O_RDONLY,O_WRONLY,O_RDWR)和文件创建标志(i.e.,O_CREAT,O_EXCL,O_NOCTTY,O_TRUNC)会被忽略。在Linux中能修改的标志位只有O_APPEND,O_ASYNC,O_DIRECT,O_NOATIME和O_NONBLOCK。
F_GETLK,F_SETLK和F_SETLKW用来获得,释放和测试已经存在的记录锁定。
系统内核已经为不同属性定义了相应的标志位,定义在头文件fcntl.h中,对于取出的文件描述符的属性可以与文件状态标志进行逻辑或操作来对属性进行修改,标志位及功能如表1所示。
2 缓冲控制
2.1 问题描述
缓冲是用来解决不同设备间速度不匹配的问题。磁盘读写速度较慢,CPU和内存的速度较快,如果没有缓存,就可能会造成CPU和内存等待磁盘IO完成的情况,影响系统效率,引入缓存后,write系统调用可以只需要将输出数据交给内核缓存,就可以返回,内核缓存数据积累到一定程度后会启动I/O操作,将数据写回磁盘,但是也可能会出现write系统调用已经成功返回,但是缓存中的数据在写回磁盘时出现问题,造成数据丢失的情况,可以通过修改文件的使用方式来避免这种情况的出现,即可以修改磁盘文件的连接属性来决定打开或关闭缓冲。
2.2 核心代码
2.3 代码分析
首先fcntl系统调用使用两参数的形式,int fcntl(int fd,int cmd),参数cmd设置为F_GETFL,得到当前的属性位集(被表示成整数),使用整形变量s存放属性位集。
对于得到的位集s,将s与标志O_SYNC进行逻辑或操作,将相应的属性位置1,打开属性。O_SYNC标志告诉内核,对write的调用仅能在数据写入实际的硬件时才能返回,而不是在数据复制到内核缓冲时就执行默认的返回操作。
最后使用fcntl系统调用的三地址形式,int fcntl(int fd,int cmd,struct flock*lock),将cmd设置为F_SETFL,将修改过的属性位集s作为第三个参数,把修改过的属性设置写回内核。
这样就完成了对打开的磁盘文件的缓冲的设置,但是如果没有充分的理由,建议不要关闭缓冲。
3 自动添加模式
3.1 问题描述
自动添加模式对于多个进程同时写入文件时很有帮助,以日志文件wtmp为例,wtmp保存所有用户的登录和退出的记录。当一个用户登录时,程序login在文件wtmp文件末尾追加一条登录记录。当一个用户退出时,系统在wtmp文件末尾追加一条退出的记录。多个进程对同一个共享文件的操作实际包含两个独立的步骤,lseek和write,但是系统不能保证进程能一次性完成这两个步骤,如图2所示。
如果两个用户按照如下的步骤进行登陆;
时间1——进程B的登陆进程定位到文件的末尾
时间2——B的时间片用完,A的登陆进程定位文件的末尾
时间3——A的时间片用完,B的登陆进程写入记录
时间4——B的时间片用完,A的登陆进程写入记录
此时,A的登陆进程写入的记录覆盖了B的记录,B的登陆记录丢失。
此种情况的产生源于进程之间的竞争,同样是上述两个进程,不同的执行顺序可能会有不同的结果,可能A的登陆记录丢失,可能B的登陆记录丢失,也可能都不丢失。
竞争是系统编程面临的重要问题,可以有很多种方法避免竞争,如使用信号量。但在本例所示的情况下,内核提供了一个简单的解决方法:自动添加模式,即对文件连接打开O_APPEND属性,当磁盘文件连接的O_APPEND属性被开启后,每个对该文件的write系统调用将会自动调用lseek将内容添加到文件的末尾。
3.2 示例代码
3.3 代码分析
本例和上一个例子一样,对连接属性的修改遵循三个步骤:
首先fcntl系统调用使用两参数的形式,得到当前的属性位集,使用整形变量s存放。
对于得到的位集s,将s与标志O_APPEND进行逻辑或操作,将相应的属性打开。
最后使用fcntl系统调用的三地址形式,把修改过的属性设置写回内核。
本例中使用到操作系统中一个非常重要的内容:原子操作,原子操作的特点是执行时不会被中断。原子操作可以解决竞争带来的错误问题,对lseek和write的调用是独立的系统调用,内核可以随时打断进程,从而使得操作被中断。当O_APPEND被置位,内核将lseek和write组合成一个原子操作,被连接成一个不可分的单元,由于原子操作执行时不会被中断,因而可以保证登陆信息的准确写入。
4 结束语
文件系统是操作系统的重要组成部分,对文件的打开和使用需要按照规定的方式,但是为了系统的灵活性考虑,文件的使用方式是可以修改的,Linux系统提供的fcntl系统调用使得用户可以在程序中方便的改变文件的使用方式,本文仅针对两种特定的应用描述了连接控制的一般方法,Linux系统针对连接属性提供了丰富的标志,而且可以同时使用多个标志,通过不同标志间的组合,进一步扩展文件使用的灵活性。
参考文献
[1]Stevens W R.UNIX环境高级编程[M].尤晋元,译.北京:机械工业出版社,2000:124-253.
[2]Molay B.Unix/Linux编程实践教程[M].杨宗源,黄海涛,译.北京:清华大学出版社,2004:168-206.
[3]费翔林.李敏,叶保留.Linux操作系统实验教程[M].北京:高等教育出版社,2009:72-84.
[4]张魏群.浅析Linux的文件系统和磁盘管理[J].科教文汇,2009(8):270.
[5]王侠,高胜哲.Linux的文件系统[J].辽宁税务高等专科学校学,2005(2):40-42.
[6]刘晋辉,郭玉东.Linux文件访问控制技术[J].信息工程大学学报,2004(1):67-69.
磁盘控制器 篇2
那么什么是Shell Hardware Detection服务呢?
Shell Hardware Detection 系统服务用于对“自动播放”硬件事件进行监测并提供通知。对于基准服务器策略来说,此服务不是必需的。
于是icecj就来一步步启动Shell Hardware Detection 系统服务:
1、开始→运行→输入“services.msc”;
2、选择服务中的Shell Hardware Detection选项,双击打开;
3、将启动类型改为“自动”,然后点击“启动”按钮;
4、点击“确定”或者“应用”按钮,保存所做更改,
注意:如果关闭Shell Hardware Detection服务会加速响应,但进入桌面的时间会延长,建议还是把这个服务开启并设为“自动”。
点击阅读更多学院相关文章>>
磁盘控制器 篇3
作为采集数据系统主要考虑的是存储容量、存储速率和可操作性。由于目前比较通用的FAT32或NTFS格式的采集数据系统用FPGA实现较困难,因此,在自行定义的存储格式及其传输协议的基础上设计了一种实用的IDE硬盘阵列及其采集数据系统,并且通过使用PCI传输卡就可以把磁盘阵列中的数据导入计算机,实现格式上的转化。
1 系统设计
为使系统的存储速率最大化,硬盘配置成RAID 0模式。工作时,AD采样后得到的信号首先分流成四路,然后流向四个硬盘,每一路磁盘的工作模式都相同。图1给出其中某一路的存储流程图。
由图1可知,分流后的AD数据首先暂存到FPGA内部的FIFO 0中,由于磁盘存储数据时工作在Ultra DMA模式下,所以每传输一帧数据,FPGA都需要给磁盘一个CRC校验结果,磁盘会对FPGA给出的CRC校验结果进行核对。如果正确,磁盘就会存储本帧数据;若出现错误,磁盘会抛弃本帧数据,并向FPGA报错。因此从FIFO 0读取的数据不能直接流向硬盘,而必须流向一个大容量的高速缓存器件,以便在CRC校验结果出错的情况下重新传输出错帧数据。在本系统中高速缓存器件选用HY57V561620C(L)T(P),其数据吞吐率可以达到200MB/s,容量为32MB。
数据存储完成后,需要通过PCI卡导入到计算机中进行计算和分析。导出数据的流程图和存储数据相似,如图2所示。
2 IDE协议的FPGA实现
2.1 IDE协议简介
IDE(Integrated Drive Electronics)是集成磁盘电路设备,其正式名称是AT-Attachment。它是Compaq公司为解决老式的ST506/412接口速度慢、开发成本高而开发出的硬盘标准。由于IDE接口的硬盘具有价格低廉、稳定性好、标准化程度高等优点,迅速得到普及[1]。
IDE接口硬盘的几种传输模式有很明显的区别,其经历了三个不同的技术变化,由PIO(Programmed I/O)模式,DMA(Direct Memory Access)模式,直到现在的Ultra DMA模式。其中PIO模式的传输速率最慢,最老的PIO mode 0传输速率为3.3MB/s,最新的PIO mode 4传输速率为16.7MB/s。本文存储数据时采用了Ultra DMA模式,最高速率100MB/s。在计算机上使用时,PIO传输模式会大量占用中央处理器的资源;而后IDE接口及装置开始有了DMA的支持,DMA模式有Single-DMA和Multi-DMA两种,与PIO模式相比达到了节省处理器资源的效果,但随后被性能更好的Ultra DMA所取代。
2.2 IDE协议的软件实现
FPGA对IDE硬盘的控制通过命令寄存器和控制寄存器实现,如表1所示[2]。其中带“-”的信号(如“CS0”)表示低电平有效。对磁盘进行任何操作之前首先需要读取特征寄存器,此寄存器指示磁盘是否处于空闲状态。如果磁盘空闲,可以向命令寄存器写入需要执行的命令代码。如果对磁盘进行无数据操作,只需要写入命令字然后等待磁盘执行任务结束即可。如果执行的是读(写)操作,就需要通过扇区数寄存器确定读(写)扇区总数,通过扇区号寄存器和柱面寄存器确定读(写)地址。命令执行完毕后,FPGA需要读状态寄存器。如果ERR位有效,表明执行上一个命令的过程中产生了错误,具体错误类型可以通过读错误寄存器得到。
系统上电后要对硬盘进行复位操作,检测到BSY位和DRQ位都为低电平时硬盘复位结束。然后通过Set Feature和Set Multiple Mode等命令完成对硬盘的配置。如图3,对硬盘的配置以及读(写)命令的发送都是用PIO模式实现的。图4给出PIO模式的时序图,表2给出其时序要求[2]。下面以写磁盘为例介绍磁盘工作在48位寻址时PIO命令的执行:FPGA首先连续写两次磁盘的特征寄存器,因为在PIO模式下此寄存器已经废弃,所以值可以任意。然后连续写两次扇区数寄存器,第一次写入写扇区总数的高8位,第二次写入写扇区总数的低8位。再依次写两次扇区号寄存器、柱面寄存器0、柱面寄存器1,顺序写入起始扇区地址的第24~31位、0~7位、32~39位、8~15位、40~47位、16~23位。至此,硬盘就可以确定写数据的起始地址以及写数据总量。然后FPGA需要写驱动器/磁头寄存器以确定磁盘的寻址方式。一般采用逻辑寻址。最后向命令寄存器中写入命令码34H。参数发送完毕后,FPGA至少等待400ns,然后读可选状态寄存器,一旦检测到BSY为低电平、DRQ为高电平,就说明磁盘已经就绪可以接收数据,此时只需按照PIO时序的要求向数据寄存器写入数据即可。数据写入完成后,FPGA需等待磁盘给出的中断信号INTRQ,此信号有效后FPGA读状态寄存器,整个写扇区的命令执行完毕,磁盘可以继续接收其他命令。
完成硬盘的复位和配置以后,FPGA循环检测有无读写命令。以写硬盘为例介绍,FPGA完成对硬盘的复位和配置后就进入到命令检测状态。一旦检测到写硬盘命令,程序进入到写状态。FPGA首先向硬盘命令寄存器和状态寄存器写入必要的信息,然后等待DMARQ信号有效,进而对DMA通道进行初始化。全部准备工作完成后,FPGA内部FIFO中的数据就可以存储到硬盘中。数据在传输过程中,硬盘随时可能暂停传输,一旦暂停,FPGA就只能等待硬盘再次就绪。前一帧的DMA数据传输完毕后,FPGA需要向硬盘发送CRC结果,如果CRC结果正确硬盘就会接收当前数据;如果错误,硬盘就会向FPGA报错,此时数据就需要重新传输。图5为写硬盘流程图。读硬盘的过程和写过程相似,本文不再详细介绍。
3 上位机软件设计
整个磁盘系统通过VC界面进行管理,操作界面如图6。软件提供了最多四个采集通道,用户可以根据自己的需要进行任意配置。采集数据前,可以设置采集时钟为外时钟或内时钟。触发方式分:自动触发、上升沿触发、下降沿触发、低电平采集、高电平采集。针对雷达的特殊工作方式,系统也可以工作在间断采集模式下。
数据采集过程中,磁盘系统配合PCI 9054卡可以得到当前回波的IQ数据以及脉冲压缩结果。采集结束后,可以根据需要导出任何一部分数据。
本文采用FPGA实现了符合ATA-6规范的IDE协议,将硬盘组成磁盘阵列实现了对数据的高速稳定存储,平均数据流达到200MB/s,峰值传输速率达到800MB/s。在试验阶段先后使用了希捷、迈拓、西数等厂家的硬盘进行试验。经过测试整个系统的运行比较稳定,长时间采集不会出现数据丢失的情况。如果希望增强系统的抗震性,可以在板卡上挂IDE接口的固态盘,整个系统的性能不会受到影响。
参考文献
[1]Friedhelm Schmidt.SCSI总线和IDE接口协议、应用和编程(第二版)[M].中国电力出版社,2001.
[2]Technical committee.Information Technology-AT Attachment with Packet Interface-6(ATA/ATAPI-6)[S],Revision3a14December,2001.
[3]CARDARILLI G C,LEANDRI A,MARINUCCI P,et al.Desigh of Fault Tolerant Solid State Mass Memory.IEEE TRANSACTION ON RELIABILITY[J],2003,52(4):2-5.
[4]黄新财,佃松宜,汪道辉.基于FPGA的高速连续数据采集系统的设计[J].微机计算机信息,2005,2(58):2-5.
磁盘调度算法 篇4
磁盘一般用于文件存储,设计原则是:成本低、容量大、速度高。扩大存储容量:a.增加每英寸磁道数目; b. 双面记录。
存取盘块中的信息一般要有三部分时间:系统首先要把磁头移到相应的道上或柱面上,这个时间叫做寻道时间;一旦磁头到达指定磁道,必须等待所需要的扇区转到读/写头下,这个延迟时间叫做旋转延迟时间;最后,信息实际在磁盘和内存之间进行传送也要花费时间,这部分时间叫做传送时间。一次磁盘服务的总时间就是这三者之和。
要使磁盘服务尽可能地快,操作系统要提供合适的调度算法,改善磁盘服务的平均时间。
进程需要和磁盘交换信息时必须要操作系统发出系统调用,对磁盘的请求一般要有下述几部分内容:
1. 输入和输出;
2. 磁盘地址(驱动器、柱面、面号、扇区);
3. 内存地址;
磁盘隐藏技巧 篇5
把硬盘合理分区,并进行格式化,接着把操作系统及实验中要用到各种软件都安装好,必要的话还可以将一些重要文件或暂时不用的文件存储在非系统盘中。
2 利用“组策略”隐藏磁盘法
单击“开始”按钮,指向“运行”并单击,打开“运行”对话框,在“打开”输入框中输入“gpedit.msc”命令,打开“组策略”窗口;在窗格左侧的“本地计算机策略”中,依次选择展开“用户配置”→“管理模板”→“Windows组件”→“Windows资源管理器”,再到右侧的窗口中找到“隐藏‘我的电脑’中的这些指定的驱动器”项,如图1所示。
此时对应的设置状态是“未被配置”,双击,打开“隐藏‘我的电脑’中的这些指定的驱动器属性”窗口,选中下面的“已启用”单选钮,然后在下面的“选择下列组合中的一个”中选择需要隐藏的驱动器,接着单击“应用”按钮后退出即可。
如果要限制访问硬盘,同上打开“组策略”窗口,双击右侧窗格的“防止从我的电脑中访问驱动器”选项,单击“已启用”单选钮,在“选择下列组合中的一个”中,选择需要限制的驱动器,然后单击“应用”按钮后退出即可。
说明:(1)以上对硬盘的隐藏和访问限制只是针对盘符A、B、C、D或其组合及所有驱动器;(2)硬盘隐藏后只是在资源管理器中看不到此盘符,对浏览器地址栏或“运行”对话框无效,也就是说要想浏览隐藏盘的内容,只要在地址栏中输入隐藏的盘符即可;而限制访问硬盘在资源管理器、浏览器地址栏或“运行”对话框均适用。
3 利用“磁盘管理”彻底隐藏磁盘
在“我的电脑”上右击鼠标键,在弹出的快捷菜单中选择“管理”命令,打开“计算机管理”窗口,在左侧的窗格中单击“存储”下的“磁盘管理”项。在右侧的窗格中就会出现本机硬盘的所有盘符,右击要隐藏的那个盘符(如选择E盘),在弹出的快捷菜单中选择“更改驱动器名和路径”,接着就会出现“更改本地磁盘E的驱动器号和路径”窗口,选中窗口里的“E:”再单击“删除”按钮。此时会弹出“删除驱动器号可能会导致程序停止运行。确实要删除这个驱动器名吗?”的警告提示,单击“是”按钮。
最后回到资源管理器中再也看不到E盘了。此时在地址栏中输入“E:”回车后,会弹出相应的的警告信息,从而达到隐藏硬盘的目的。
解除隐藏的方法是:在“计算机管理”窗口右侧的窗格中,找到那个没有任何标记的本地硬盘并单击鼠标右键,选择“更改驱动器名和路径”,在弹出的“更改本地驱动器号和路径”窗口中单击“添加”按钮,接着在“指派驱动器号”后选择“E:”,单击“确定”按钮即可。
4 防止从“命令提示符”访问D盘
因为当用“组策略”隐藏了D盘后,还可通过“命令提示符”方式进入D盘,所以应同时禁止通过“命令提示符”访问D盘。方法是在打开的组策略编辑器窗口中依次打开“用户配置→管理模板→系统”分支,然后在右侧窗口中将“阻止访问命令提示符”策略项启用即可。
通过“组策略”隐藏D盘后,还不能完全防止对D盘进行访问,因为登录者可以利用“运行”命令来执行“cmd.exe”命令,进入“命令提示符”状态,然后再访问D盘,所以这个命令也应禁用。方法是在打开的组策略编辑器窗口中依次打开“用户配置→管理模板→系统”分支,然后在右侧窗口中双击”不要运行指定的Windows应用程序”策略项,在策略项的“属性”窗口中选择“已启用”选项,再单击“显示”按钮,在弹出的“显示”内容对话框中添加“cmd.exe”即可。这样就无法访问本地计算机中的D盘了。
5 利用注册表隐藏磁盘
利用注册表隐藏磁盘的方法操作如下:
(1)单击“开始”按钮,指向“运行”并单击,在“打开”输入框中输入“regedit”命令,打开注册表编辑器;
(2)展开HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer子键,在“编辑”菜单中选择“新建”→“二进制值”,命名为“Nodrives”,然后将其值根据以下方式输入。对应驱动器为:A(1)、B(2)、C(4)、D(8),类推得出的数字换成16进制数,低位在前,高位在后。如隐藏C盘符,则数值为04 00 00 00,如隐藏几个驱动器,则把驱动器号码加起来,再换成16进制数即可。
6 结束语
有效地保护磁盘中操作系统和应用程序不被误删或修改,使计算机系统处于比较安全的状态。
参考文献
[1]丛刚,王建.Windows XP中文版范例入门与提高.北京:清华大学出版社,2004-06.
磁盘文件透明加密技术 篇6
随着IT技术的飞速发展,很多企业办公、设计、管理日益电子化。这些电子文档存储在计算机硬盘中,一旦被拷贝或者通过网络传播出去,在另一台计算机上就可用同样的应用软件打开这些电子文档,造成信息泄密。透明加密技术是近年来针对企业文件保密需求应运而生的一种文件加密技术。应用透明加密技术,用户在指定的计算机上操作这些文件时会自动对这些文件进行加解密,不需要输入密码,用户在环境内使用密文不影响原有的习惯,但文件已经始终处于加密状况。一旦离开环境(指定的计算机),文件将得不到解密服务,将无法正确打开,从而起到保护电子文件知识产权的效果。
1 磁盘文件加密技术原理
磁盘的透明加密主要方法有3种,第一种是BIOS接管方式,这种方式在计算机刚刚启动的时候就接管BIOS中磁盘操作的中断,类似还原卡、还原精灵这类产品就是利用这个原理工作的。这种方式工作在最底层,工作方式不够灵活,很难根据需要配置对哪些类型文件的文件进行加密。所以一般很少用在磁盘透明加密的的应用中。
第二种是HOOK(钩子)技术。所有Windows应用程序都是通过Windows API函数对文件进行读写的。程序在打开或新建一个文件时,一般要调用Windows的Create File或OpenFile、ReadFile等Windows API函数;而在向磁盘写文件时要调用WriteFile函数。通过截获这些函数的操作,就可以接管文件的操作。但是Windows的安全保护机制限制了一个任务不能随便的访问另一个任务的进程空间。利用Windows提供了一种叫钩子的消息处理机制,允许应用程序将自己安装一个子程序到其它的程序中,以监视指定窗口某种类型的消息。当消息到达后,先处理安装的子程序后再处理原程序。这就是钩子。钩子透明加密技术就是将上述两种技术组合而成的。通过Windows的钩子技术,监控应用程序对文件的打开和保存,当打开文件时,先将密文转换后再让程序读入内存,保证程序读到的是明文,而在保存时,又将内存中的明文加密后再写入到磁盘中。钩子透明加密技术与应用程序密切相关,它是通过监控应用程序的启动而启动的。一旦应用程序名更改,则无法挂钩。监视钩子程序运行在Windows应用层,很容易被操作人员发现,通过结束进程的办法关闭保护进程,使保护程序失效。
驱动加密技术基于Windows的文件系统(过滤)驱动(IFS)技术,工作在Windows的内核层。我们在安装计算机硬件时,经常要安装其驱动,如打印机、U盘的驱动。文件系统驱动就是把文件作为一种设备来处理的一种虚拟驱动。当应用程序对指定类型的文件进行操作时,文件驱动会监控到程序的文件读写操作,通过分析判断是否是需要保护的数据,如果是需要保护的数据就进行加密或者解密工作,从而达到透明加密的效果。驱动加密技术与应用程序无关,他工作于Windows的内核层。当API函数对指定类型文件进行读操作时,系统自动将文件解密;当进入写操作时,自动将明文进行加密。由于工作在受Windows保护的内核层,运行速度更快,加解密操作更稳定。驱动加密技术虽然有诸多的优点,但由于涉及到Windows底层的诸多处理,开发难度很大。如果与其它驱动的冲突、程序操作有错误,造成系统崩溃甚至还会丢失用户数据文档。
2 驱动透明加密的相关技术
驱动透明加密技术工作在Windows的内核层,根据Windows内核驱动分层设计的原理,Windows内核是一个分层驱动模型(图1)。
每一个物理设备对应着多个驱动设备对象,而这些驱动设备对象是按照分层结构堆叠的。每一层只能同上面层和下面层进行服务请求交互,这些服务请求信息被统一的设计为IRP(I/O请求包)。每一个驱动设备对象处理IRP完一次,完成一次服务。这些设备对象根据目的的不同,被设计为不同的功能。Windows的分层驱动程序模型允许用户开发第三方驱动程序,并通过Io Attach Device By Pointer或者Io Attch Device函数将自己的设备驱动程序插入到这个分层结构中,这样我们的第三方驱动程序就有机会截获IRP,然后通过分析IRP,针对自己感兴趣的IRP包进行相应的处理。这种第三方驱动程序称为过滤驱动程序。
2.1 磁盘过滤驱动程序的挂接
根据上面叙述的原理,我们可以设计一个文件系统的过滤驱动程序来完成我们的功能。首先需要把过滤驱动程序挂接在某个硬盘分区之上,可以在过滤驱动程序的入口点DriverEntry例程发送一个IRP,请求驱动程序来挂接到硬盘上。该过程的函数调用流程为:由ZwCreateFile得到硬盘分区的设备句柄,再用ObReferenceObjectByHandle得到对应的FILEOBJECT指针(Windows把每个设备当作一个文件来看待,并有一个对应的FILEOBJECT结构描述其属性),然后调用IOGetRelatedDevieeObjeet得到硬盘分区设备对象指针,然后调用IOCreateDevice来构造代表过滤器的一个设备并为它指定驱动程序也就是过滤驱动程序。最后调用IOAttachDeviceByPOinter把该设备挂接在硬盘分区设备上。
挂接上设备链后,我们的驱动就可以截获对文件的IRP请求包。根据我们磁盘过滤驱动的要求,我们只对打开文件、读文件、写文件的IRP进行处理,对于其他IRP请求,我们则统统直接传递给下层驱动程序处理。
2.2 被保护程序的判别
当通过API函数CreateFile对文件进行打开操作时候,驱动程序需要判断打开的文件是否属于需要保护的文件。我们是通过进程内核的PEB(进程环境块:Process Enviroment Block)对象来查看当前发出该请求的进程。Windows操作系统为每一个进程在内核都创建了一个PEB对象。该对象的ImageFileName成员变量就是进程的名字。驱动程序可以调用内核函数Ps GetCurrentProcess获得运行上下文环境的PEB对象,然后根据进程名就判断是否是我们需要保护的进程。需要注意的,不同版本的Windows的PEB中ImageFileName的偏移量是不确定的,为此,我们通过内核函数PsGetVersion判断Windows的版本号来决定ImageFileName的偏移量。表1是常用Windows版本的ImageFileName偏移量。
2.3 文件读写操作
对于文件读写请求,内核有两种数据传送方式,一种是缓冲I/O的方法,这种方式由Windows操作系统自动分配内核态的内存,然后将用户传递的读写磁盘数据拷贝到这个内核态UserBuffer中,然后传递给驱动程序,驱动程序处理的是这个内核态的内存数据。驱动程序处理完毕后返回用户态程序的时候,由Windows操作系统再将这个内核态的内存数据拷贝回用户态内存。显然这种方式存在着内核态和用户态内存的拷贝和状态的切换,对于文件操作这种数据量比较大的操作,速度显得很慢了。另一种是使用直接I/O,这种方式减少了Windows的数据复制。这种方式是通过Windows直接传递一个内存描述符列表(Memory descriptor list,MDL)来实现的,这个描述符列表是描述用户空间缓冲区,驱动程序可以通过相关函数操作该MDL来得到用户写磁盘数据。在实际的文件操作中两种方式的操作都要支持,通过判断IRP包中的MdlAddress和UserBuffer成员变量来判断的。如果IRP.MdlAddress不为0,则说明是采用的MDL方式,则可以通过内核函数Mm GetSystemAddressForMdlSafe来获得到需要的读写磁盘数据。如果IRP的UserBuffer成员变量不为0,则说明采用的缓冲I/O的方式,我们可以通过直接IRP的UserBuffer获得需要的读写磁盘数据指针。
2.4 加密种子的选择
对于数据加密算法,我们需要能标示计算机“身份”的信息作为加密种子,这样即使文件被拷贝走,如果加密种子不对也无法解密数据。我们可以选择CPUID、网卡序列号、硬盘序列号作为标示计算机“身份”惟一性的参数,这些参数可能在有的计算机上的设备并不支持,比如说对于老式计算机的CPU和硬盘就没有序列号,所以需要几种方式都需要支持。
使用汇编指令CPUID可以获得CPU的信息,包括CPU类型、型号、制造商信息、商标信息、序列号等信息,其中序列号是生产时的惟一序号,具有惟一性,可以用来做加密种子。
硬盘序列号是硬盘在生产的时候为每个硬盘分配的惟一标示号,要取得这个序列号我们可以在驱动层读取硬盘相应的寄存器得到信息,这种方式比较复杂繁琐,幸好绝大多数磁盘的设备驱动程序都支持通过发送相应的IRP取得磁盘序列号,其中IRP中功能号IoControlCode为0x0007c088,可以通过向硬盘驱动发送这个IRP就可以获得磁盘序列号。
网络底层的物理传输过程中,是通过物理地址来识别主机的,物理地址一般也是全球惟一的,网卡在生产的时候都在网卡上固定了一个MAC地址,通过GetAdaptersInfo函数可以获得网卡的MAC地址。
3 总结
计算机信息技术飞速发展,越来越多的电子信息被保存在计算机上,由于电子信息传播的十分方便,很容易造成信息的泄密。磁盘透明加密技术通过对保存在计算机上的信息进行实时的加解密,即不影响计算机合法使用者的使用,又防止了机密文件被拷贝,对于保护企业、政府、机关的机密数据有很好的推广价值和应用前景。本文对磁盘透明加密中的关键技术问题进行了分析和阐述。
参考文献
[1]谭文,邵坚磊.天书夜读:从汇编语言到Windows内核编程[M].电子工业出版社.2009.
[2]马林.数据重现——文件系统原理精解与数据恢复最佳实践[M].清华大学出版社.2009.
磁盘阵列技术及其选择 篇7
关键词:磁盘阵列,级别,选择
磁盘阵列(Redundan Arrayof Inexpensive Disk)简称RAID技术,是一种在多个磁盘机或光盘机按一定的规则上分散信息的方法。它使用磁盘分条(disk striping,RAID级别0)、磁盘镜像(disk mirroring,RAID级别1)和带有奇偶校验的磁盘分条(disk striping with parity,RAID级别5)之类的技术组成一个快速、超大容量的外存储器子系统,来达到冗余性,减低潜伏时间,增加磁盘读写的带宽,提高从硬盘崩溃中恢复的能力。它在阵列控制器的控制和管理下,实现快速、并行或交叉存取,并有较强的容错能力。从用户观点看,磁盘阵列组成的磁盘组就像是一个硬盘,用户可以对磁盘阵列的操作与单个硬盘一样进行分区、格式化等,不同的是磁盘阵列的存储速度要比单个硬盘快很多,而且可以提供自动数据备份,因此这一技术广泛为多媒体系统所欢迎。
1 产生原因
随着中央处理器CPU的处理速度飞速增长,内存的存取速度也随之大幅增加,而数据储存器磁盘的存取速度相对发展较为缓慢,从而造成整个存储设备的运行速度不能和其他硬件系统相匹配,形成计算机系统数据传输速度的瓶颈,降低了计算机系统的整体性能,如果不能有效地提高磁盘的存取速度,CPU、内存及磁盘间的不平衡将使CPU及内存的改进形成浪费。因此,有效地利用磁盘空间,增加磁盘的存取速度,同时要防止因磁盘的故障而造成的数据丢失,成为电脑专业人员和用户的迫切需要。磁盘阵列技术的产生解决了增加存取速度、保证数据安全性、有效地利用磁盘空间、平衡CPU、内存及磁盘的性能差异,提高电脑的整体工作性能的问题。
2 常用技术
2.1 硬件RAID与软件RAID
硬件磁盘阵列指的是硬件RAID基于硬件设备,系统独立于主机之外来管理RAID子系统,内置CPU与主机并行动作,所有的I/O都在磁盘阵列中完成,减轻主机的负担,增加系统整体性能,有SCSI总线主控与DMA通道,以加速数据的存取与传输,并且它在主机处只用一个磁盘来代表每一组RAID阵列。
软件磁盘阵列是一个程序,在内核磁盘编码中实现各类RAID级别,因此它不需要昂贵的磁盘控制器卡或热交换底盘,软件RAID提供了最廉价的解决方法。其最大的缺点是大大增加了主机的负担,对于大量输入输出的系统,很容易使系统瘫痪。
2.2 RAID级别
目前,获得广泛使用的RAID级别有RAID 0、RAID 1、RAID 10、RAID 5和RAID 6。
RAID 0将数据分条并行读/写在多个磁盘上,数据传输率高,读写速度快,有很好的性能表现,但是RAID 0没有冗余保护功能,RAID组中任何一块磁盘的损坏都会造成数据的丢失。所以RAID 0不能算真正的RAID结构,对于数据安全性要求很高的环境不适用。
RAID 1提供了最高的可靠性,一块盘上的数据都镜像到RAID组中的另外一块磁盘上,当原始数据繁忙时,可直接从镜像拷贝中读取数据。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。但是这种方式也是磁盘阵列中单位成本最高的,对磁盘的利用率不高,只有一半的磁盘空间能够存放数据,存放同样的数据要多买一倍的磁盘。
RAID 5是在所有磁盘上交叉地存取数据及奇偶校验信息,要求至少有3块硬盘,允许一块盘出现损坏,通过其他盘可以恢复数据,RAID 5改善了利用率的问题,但是因为要计算校验信息而使得写性能有所下降。RAID 5更适合于小数据块和随机读写的数据。
RAID 6和RAID 5一样采用了校验数据的方法,和RAID5不同的是RAID 6有两份检验数据,可以保证同一RAID组中两块磁盘同时故障而不丢失数据。
RAID 10是RAID 0和RAID 1的组合,是将2个独立的RAID 1组成一个RAID 0,RAID 0同样浪费了一半的磁盘,但是它提供了一倍的速度和单磁盘损坏的数据安全性,只要同一个RAID 1中2个磁盘不同时损坏,就能保证数据安全性。
3 RAID选择考虑的因素
3.1 存储速度
RAID0在读写速度上比较快,是普通不做RAID的两倍左右,所以RAID0常被用于对存储效率要求较高,但对数据安全性要求不高的应用解决方案中。RAID1存在冗余镜像,数据读写效率要比RAID0低。RAID5写入速度比较快,从整体上来看,性价比比较高,所以被大范围内采用。理论上说,RAID10有RAID1的镜像冗余,也有RAID0的速度,但经过测试发现RAID0、RAID1、RAID5、RAID10中RAID10的写入速度是最慢的,结果显示写入速度由高低的顺序是:RAID0>不做RAID>RAID1>RAID5>RAID10
3.2 数据容量价格和安全性的平衡
从容量方面来考虑,RAID 0由于没有冗余,所以没有磁盘损失,容量是所有RAID级别中利用率最高的。但是,RAID考虑主要集中在数据安全和性能方面,加强数据保护应该是第一位的。RAID1中只要有一个成员是完好的就能保证数据是完整安全的。由于RAID1有镜像冗余,所以磁盘利用效率并不高,造成磁盘浪费较大。RAID 5相比其他有冗余的阵列类型损失的容量最少。但RAID 5只能接受损失一个驱动器,对于只有3个驱动器的阵列,RAID 5所提供的数据保护能力不如RAID1。也许有人认为对3个驱动器中丢失一个驱动器数据与丢失两个驱动器中任何一个数据相比差别不大。但对于大型阵列同时出现丢失两个驱动器数据的概率就会增加,这时RAID 6是一个很好的选择。RAID 6常被用于大型阵列中,损失的存储容量和性能非常小,而且接受丢失任何两个驱动器的信息。所以在大容量磁盘比较昂贵的情况下,RAID 5和6可以提供足够“物廉价美”的存储子系统。随着驱动器存储容量不断扩大,成本不断降低,购买更多驱动器获得更高冗余以保证数据安全成为用户主要考虑的因素。RAID10继承RAID0的速度和RAID1的冗余安全,只要不出现一对磁盘损坏的情况,整个系统不会出现数据丢失。所以RAID10数据安全性要比RAID5和RAID6高,但是存储容量损失较大。
3.3 可靠性
对于RAID可靠性中,校验计算也带来风险。对于RAID1和RAID 10来说,不需要通过计算来创建带校验的条带。数据只是以一种稳定的方式被写入。当一个驱动器发生故障,它的另一个配对驱动器就会接过负载,在更换驱动器之前驱动器性能可能会有一些降低。既没有影响现有驱动器数量的重建流程,也没有校验条带的重建。带校验的RAID阵列如:RAID5和RAID6执行重建操作的时候,通常会实施一个复杂的流程,逐步检查阵列的所有内容,将丢失数据写回到被替代的驱动器上,虽然这种计算很简单,但是也有可能出错。因此,从数据的可靠性方面RAID 1和RAID 10要优于RAID5和RAID6。
除了考虑这些标准外,软硬件RAID也关系到成本和性能问题。硬RAID速度快,但价格高;软件RAID便宜,但速度慢,主要应用于基于IDE接口的中低档磁盘阵列中。
4 结语
用户在选择磁盘阵列产品时,要根据对速度、可靠性和安全性的需求选择最适合的RAID产品。当前RAID已经是一项比较成熟的技术,全世界还有很多服务器系统没有配置RAID。随着服务器存储对数据安全性、扩展性等方面的需求越来越高,以及RAID性能不断的提高和成本的不断降低,RAID技术的广泛普及将成为大势所趋。
参考文献
[1]王宇.廉价磁盘冗余阵列RAID的技术策略[J].哈尔滨商业大学学报,2002,18(3).
[2]郑平泰,等.磁盘数据安全技术与编程实例[M].水利水电出版社,2007,3.
[3]李东.磁盘阵列的安全管理[J].电力信息化,2004,(06).
快速磁盘文件检索软件的设计 篇8
现阶段, 广电行业在制作部和播出部之间通常应用安全隔离和信息交换产品进行电视节目的上传和下载。但是随着文件数量的增多, 在文件自动上传时, 会出现不能及时检测到未传输的文件或新到达的文件而导致电视节目的漏播现象。因此有时需要对目录和目录下所有的子目录以及文件进行枚举, 以找到该文件。随着文件目录的增多, 索引性能就会明显下降[1]。文献[2]提出了使用文件名Hash的方法实现文件名到索引节点的快速定位, 根据文件系统的所有文件建立一个全局Hash表[2]。但是不同的文件名可能得到相同的Hash值, 因此当文件和目录数量很大的时候, 冲突会随之增加, 这样索引效率也会随之降低[3]。同时, 当一个目录或者文件被从硬盘上删除时, 也很难快速将其记录从文件列表中清除掉。
基于以上问题, 设计了一款基于内存管理和跳表的快速磁盘检索软件, 此软件具有快速检索文件所在磁盘位置、快速恢复的功能, 并已应用于广电行业的安全隔离与信息交互产品中。
1 软件设计思想
本软件分为内存文件列表的建立和内存跳表的构建两个功能模块, 这两种功能模块都是基于自定义的内存管理方法。先申请固定大小的内存块, 里面包括32比特的位图、32个数据块; 每一比特的位图依次对应一个数据块。采用动态内存管理的最大好处就是给设计者很大的灵活性[4], 有利于提高内存管理效率, 减少内存占用, 提高系统速度。内存文件列表是磁盘文件检索的基础; 采用跳表的算法在内存中实现文件的快速检索。
2 内存管理设计
计算机操作系统的存储管理机制可分为静态存储管理和动态存储管理两种[5]。由于静态存储管理不够灵活, 动态存储管理又会产生大量内存碎片[6]。而内存碎片, 会直接导致大块内存申请无法满足, 从而更多地占用系统资源; 如果进行内存碎片整理的话, 又会增加处理器的负荷[7]。因此, 采用增量的方式向系统申请大小固定的内存块, 其中每个内存块包括4字节共32比特的位图和32个数据块, 对每一个内存块里的32个数据块, 均采用虚拟指针, 即该数据块的虚拟指针为所在内存块的块号和在该内存块中的位置, 即偏移量; 每一个数据块依次对应位图中的相应位, 为1表示该位所对应的数据块被占用, 为0则表示空闲。
2. 1 内存文件列表建立
本软件采用的是在内存中建立文件列表的方法, 对磁盘文件采用深度优先的遍历方式。在搜索当前目录时, 无论是否已搜索完所有的目录项, 只要搜索到子目录, 就进入进行递归搜索[8]。这样, 通过文件查找函数的反复递归调用, 就可以实现对整个目录, 包括子目录的遍历搜索[9]。读取磁盘下所有文件信息, 其中该信息包括文件的序号、存储路径、文件名、文件大小以及文件的最后一次访问时间。文件信息结构体定义如下:
通过内存管理中所创建的内存块, 将文件信息依次存放入内存块的数据块中, 并将内存块中所对应的位图中的相应位置“1”, 表示该数据块被占用, 其结构如图1所示, 其中指针head指向内存块的首地址, 指针next指向下一个内存块, mark作为内存块的标记位, 为1表示内存块内容发生改变, 为0表示内存块内容没有变化。当一个内存块中的全部数据块被占用后, 再将该内存块中的最后一个文件信息中的路径和文件名存储到磁盘文件currentdir. dat中, 将该内存块中的所有数据追加保存到磁盘文件memsave. bin中。
由图1可以得到每一个内存块的大小为268×32 + 4 =8 580字节, 因此, 文件列表所占内存大小m1 ( 字节) 随文件数量n的变化如式 ( 1) 所示:
在内存文件列表的建立过程中, 如果用户退出了程序, 当下次用户再启动时, 不必再从头开始建立文件列表, 而是应该从上一次停止的位置 ( 通过读取文件current Dir. dat中所存内容确定) 继续开始建立文件列表。具体的步骤为:
( 1) 从文件curren Dir. dat中获取上次中断的文件名和文件路径;
( 2) 将文件memsave. bin恢复到内存;
( 3) 进入该中断文件所在目录, 开始遍历该文件后面的子目录和文件, 并把文件名和文件路径写入文件current Dir. dat, 文件信息追加写入文件memsave. bin, 继续完成文件列表的建立操作。
内存文件列表保存到文件memseve. bin中, 因此, 该文件的大小s1为:
2. 2 内存跳表建立
跳表是一种随机化的数据结构, 由William Pugh在1990年发明的, 列表基于平行的链接列表[10]。跳表的单个节点的插入、删除、搜索操作平均需要O ( log n) 时间[11]。跳表结构的创建是在内存中进行的, 通过内存管理中的内存块来存放跳表结构。由于在跳表中查找某一特定节点所需的时间和跳表的节点总数之间成线性关系, 当跳表中节点个数增加时, 查找节点的时间也随之增加。因此采用在跳表的查找基础上加上折半查找的特性, 跳表的行数就是把折半查找的次数减1。跳表的行数越多则查找的效率越高, 同时所需要的内存空间越大。因此, 考虑在保证查找效 率并节约 空间, 跳表行数MAXLEVEL取为lg ( n) , 其中n为文件列表中的文件个数, 即跳表的列数。跳表的构建步骤为:
( 1) 空跳表的建立: 创建一个具有MAXLEVEL的跳表结构, 该跳表结构的第一列中设置MAXLEVEL个头结点, 最后一列设置有MAXLEVEL个空节点。其中节点的内容包括文件信息所在的内存块的块号、所在内存块的偏移地址、该节点所在的内存块块号, 向后指针 ( 即任意节点的后向指针指向跳表结构中该节点所在行后相邻的结点) 以及向下指针 ( 即任一节点的向下指针指向跳表结构中该节点所在列向下相邻的节点) ;
( 2) 从内存文件列表中的数据块依次读取文件信息, 并将一个文件信息对应一列中的n个节点作为插入节点, 其中n在1和MAXLEVEL之间随机选择;
( 3) 当要向跳表结构中插入第一列节点时, 将该列节点插入到头节点的后一列, 其中n个节点的排列方式为从该列的最后一行依次向上排列, 插入节点后, 更新每一个节点的后向指针和下向指针;
( 4) 从插入第二列节点开始, 针对每一列要插入的节点, 首先找到跳表结构中的第一行的第二个节点, 作为对比节点, 判断对比节点与插入节点的值的大小。如果插入节点的值比对比节点的值小, 则将该列插入节点插入到对比节点所在列的前一列, 反之, 则插入到后一列;
( 5) 按照步骤 ( 4) 将文件列表中的每一个文件作为一个节点插入到跳表结构中, 生成跳表, 并将跳表写入磁盘文件sl-save. bin中。
跳表构建完成后, 其结构与图2所示的结构相似。
跳表的存储结构和文件列表的存储结构相同, 每一个数据块的大小为16字节, 每一个内存块的大小为16×32 + 4 = 516字节。由于每个 节点插入 的层数是 随机产生 的 ( 1 ~MAXLEVEL) , 因此跳表占用内存的大小m2 ( 字节) 随文件数量n的变化如式 ( 3) 和式 ( 4) 所示:
内存跳表保存到文件slsave. bin中, 因此, 该文件的大小s2为:
因此, 跳表占用内存大小m2和文件slsave. bin大小s2的范围在之间。
采用该内存管理方法虽然加快了文件列表的建立速度, 但是在内存和磁盘中分别产生了m1+ m2的开销。
3 查找算法
本软件将要查找的每一个文件作为一个查找节点, 在跳表中, 除头结点外, 将跳表的第一列第一行的节点作为对比节点, 判断查找结点的值与对比节点的值的大小, 有以下几种情况:
( 1) 如果查找节点的值小于跳表中第一列第一行的对比节点的值, 则跳表中找不到该查找节点;
( 2) 当对比节点的后向指针指向的节点为空节点或查找节点的值小于对比节点的后向指针的节点的值时, 将对比节点的下向指针指向的节点更新为比对节点, 并与查找节点继续比较, 当查找结点的值大于对比节点的后向指针指向的节点的值时, 此时将此比对节点更新为其后向指针指向的节点, 并与查找节点继续比较;
( 3) 重复执行步骤 ( 2) , 直到找到与查找节点相同的节点, 返回该节点的描述信息; 如果查找节点的值大于跳表中最后一列节点的值, 则跳表中找不到该查找节点。
本查找算法的思路如图3所示。
4 功能实现与测试
4. 1 功能实现
本软件具有3个功能:
( 1) 文件快速检索功能。根据实时监控磁盘所提供的文件状态变化信息, 快速找到变化文件所在位置, 并在内存列表中更新其状态。
( 2) 断点恢复功能。在建立内存文件列表时, 如果发生非正常退出, 则在下次启动时, 不再从头开始建立文件列表, 而是从文件current Dir. dat里读取断点文件位置, 并且从断点文件位置向下继续建立内存文件列表。
( 3) 快速恢复功能。此功能是对系统再次启动时, 将内存文件列表及内存跳表直接从磁盘文件memsave. bin和slsave. bin中恢复到内存, 这样可以节省内存文件列表建立和构建跳表的时间, 以达到快速恢复的目的。
4. 2 测试结果
将本软件应用于广电行业的安全隔离与信息交换产品, 以5万个文件为例, 对软件的功能进行测试, 与Windows文件系统 ( NTFS) 进行比较, 测试记录结果如表1所示。
注:*测试用例Test01, 在Windows系统下, 对5万文件列举一次所用的时间为71 000 ms;测试用例Test02, Windows文件系统再次启动时, 还要重新列举文件;测试用例Test03, 在列举文件时中断了, 再次列举文件时, Windows系统需要从头开始列举文件。因此, 测试用例Test01、Test02、Test03中出现3个相同测试结果71 000 ms。**对于本软件所做的检索任一文件所用时间的测试, 分别对深度为2、5、6、9的文件进行测试, 测试时间分别为130、140、190、500 ms, 平均时间为240 ms。
将1万、3万、5万、7万文件分别在Windows文件系统和本软件对文件列表建立时间进行测试, 测试结果如图4所示。
选取不同目录深度的文件分别在Windows文件系统和本软件对文件检索时间进行测试, 测试结果如图5所示。
测试结果表明, 快速磁盘文件检索软件能快速构建文件列表, 并且大大提高文件检索效率, 当软件再次启动时, 缩短了文件列表建立时间, 并迅速为文件目录同步提供文件列表。
5 结 语
本文提出了基于自定义内存管理的磁盘文件快速检索方法, 通过在内存中构建跳表来建立文件列表, 在文件数量较大的情况下, 能够显著提高文件检索速率。该方法现已应用于广电行业安全隔离与信息交换产品中, 并已申请发明专利。测试结果及产品应用效果表明, 该检索方法稳定可靠, 检索效率高。本软件能够迅速提供文件列表, 实现快速同步, 适用于需要文件同步的应用场合, 如内网和外网之间的文件同步, 具有很好的工程应用价值。
摘要:目前广电行业使用的安全隔离与信息交换产品在进行自动上传文件任务时, 会出现不能及时检测到未传输的文件或是新增加文件的现象。因为很难快速定位这些文件所在的磁盘位置, 从而导致电视节目的漏播。基于此问题, 提出了快速检索磁盘文件的方法。当磁盘文件改变时, 能够快速检索到该变化文件所在位置, 并实时更新文件列表。快速磁盘文件检索软件采用自定义的内存管理, 建立磁盘文件列表, 利用跳表数据结构, 实现磁盘文件的快速检索功能, 文件列表快速恢复、断点恢复的功能。测试结果表明, 该软件能有效提高文件检索效率, 并迅速为文件目录同步提供文件列表。所涉及的磁盘文件快速检索方法已申请发明专利。
关键词:快速检索,内存管理,跳表
参考文献
[1]王玲惠, 李小勇, 张轶彬.海量小文件存储文件系统研究综述[J].计算机应用与软件, 2012, 29 (8) :106-109.
[2]刘贤焯, 王劲林, 朱明, 等.Hash表与B+树相结合的高效目录索引结构[J].西安交通大学学报, 2013, 47 (4) :105-121.
[3]王荣德, 荆一楠, 王欢, 等.基于时间戳索引的日志文件并行检索技术研究[J].计算机应用与软件, 2011, 28 (2) :146-147.
[4]Matthew Campbell.Objective-C Recipes:A Problem-Solution Approach[M].Apress.2012:261-281.
[5]姜力波.Linux内存管理分析与研究[D].四川:电子科技大学, 2011.
[6]常铁原, 孙学儒.TBS算法在μC/OS-Ⅱ内存管理中的应用[J].计算机应用与软件, 2012, 29 (9) :261-264.
[7]董文生, 沈春峰.内存大小可控的高速内存管理算法[J].控制工程, 2013, 20 (增刊) :69-71.
[8]闫融.递归遍历目录树的两个C函数[J].六盘水师范高等专科学校学报, 2004, 16 (6) :26-30.
[9]廖远来, 徐文义, 周永福.VC++6.0中遍历目录树查找文件的应用[J].宁波职业技术学院学报, 2008, 12 (2) :69-71.
[10]William Pugh.Skip lists:a probabilistic alternative to balanced trees[J].Communications of the ACM, 1990, 33 (6) :668-676.
磁盘阵列技术应用实践 篇9
网络服务器由于其自身的功能特点, 需要高速大容量的数据处理能力, 因此在硬件配置时, 均使用磁盘阵列 (简称RAID) 。简单地说, RAID是一种把多块独立的硬盘 (物理硬盘) 按不同的方式组合起来形成一个硬盘组 (逻辑硬盘) , 从而提供比单个硬盘更高的存储性能和提供数据备份技术。组成磁盘阵列的不同方式成为RAID级别 (RAID Levels) 。数据备份的功能是在用户数据一旦发生损坏后, 利用备份信息可以使损坏数据得以恢复, 从而保障了用户数据的安全性。在用户看来, 组成的磁盘组就像是一个硬盘, 用户可以对它进行分区, 格式化等等。
RAID技术有7种基本的级别, 分别是 RAID 0 到 6。另外, 还有一些基本RAID级别的组合形式, 如RAID 10 (RAID 0与RAID 1的组合) , RAID 50 (RAID 0与RAID 5的组合) 等。不同RAID 级别代表着不同的存储性能、数据安全性和存储成本。
本文以IBM X235服务器为基础, 并使用SCSI控制器, 来完成安装和配置RAID磁盘阵列的实践工作。由于, IBM X235服务器的RAID控制器只支持RAID 0, 1, 5三个级别, 所以本文仅介绍这3种磁盘阵列。
1 磁盘阵列配置详述
1.1 准备工作
硬件:5块SCSI硬盘, 硬盘大小为36G, 一台测试服务器。对该服务器分配5块硬盘, 做Raid 5, 取消热拔插的功能, 做好阵列之后可以用于安装操作系统的实际分区大小预估为144G。IBM X235或者其他服务器, 只要支持RAID 功能, 在安装操作系统之前都必须进行磁盘的RAID阵列设置。
1.2 通过服务器BIOS查看RAID控制器的阵列配置信息
第一步:开机后按CTRL+I 组合键, 选择“View Controller Status”, 显示服务器上RAID控制器编号信息, 具体名称分列显示如图1所示。
其中0-15表示的是控制器支持16个SCSI类型的设备 (包括SCSI控制本身) 。若SID号为1的对应内容为空, 说明该接口没有接SCSI设备;若SID号为2的对应内容为 ONL A ONL (online) 说明该设备已经被设置为Raid的一部分, 并且是逻辑阵列A的一个物理磁盘。若SID号为7的对应内容为 INI, 说明此设备就是Raid 控制器的ID。配置好的RAID 阵列可以在此查验配置信息。
第二步:查看RAID控制器芯片的类型。
选择“Advanced functions ”-->“View Controller and PCI Information”, 显示信息如下:
此处可查看“Controller type”的值, 因为其显示的是RAID控制器的芯片类型。
第三步:开机按 Ctrl+C, 显示“LST Logic MPT SCSI SETUP Utility version:…”。由于IBM X235服务器标准配置只带一个支持RAID 0/1的内置Raid控制器, 为了支持RAID 5, 需要另行添置一个RAID控制器, 本文选择芯片LSI1030, 在其官网下载该芯片的驱动信息。
1.3 配置RAID阵列
做硬件RAID阵列, 可以通过ServerGuid CD或者ServerRAID CD进行配置。如图2所示, 具体配置时, 是以控制器 (Controller) 为单位, 一个控制器可以配置多个队列 (Arrays 下面包含又多个Array) 。
为某一个Array选择一个物理SCSI硬盘, 这样每一个SCSI硬盘会在连接RAID控制器时被分配一个ID号。为某一个队列选择了物理硬盘之后就要配置RAID等级, 比如RAID 0/1/5, 具体要看实际需求和硬盘个数。队列分配完成后, 进行阵列序列化, 就是利用RAID控制器使刚才的配置信息生效。还可以通过服务器的BIOS查看硬盘配置信息。
配置完RAID阵列之后就可以把配置好的某一个阵列中的所有SCSI硬盘当做一个硬盘使用, 进行分区等操作, 不过在装操作系统之前 (特别是Windows家族) , 需要安装响应的驱动, 具体是指RAID控制器上的芯片对应的操作系统驱动, 如本机的芯片LSI1030。
2 安装和测试
2.1 安装
安装Windows Server 2003操作系统, 使用IBM ServerRaid 4.84 Support CD , 进行磁盘队列配置, 选择各个Array的磁盘队列, 分别进行RAID级别的选择, 配置完成后RAID控制器会更新阵列信息。
做完这些之后需要一张“LSI SCSI驱动程序 (Windows Server 2003) ”的软盘, 安装操作系统之前可以使用DOS下的磁盘工具, 比如diskgen, PQ等等进行分区, 但是此时不能进行格式化磁盘。随后在安装Windows Server 2003时, 按F6加载软盘里面的RAID控制器的驱动, 随后的步骤和一般PC的操作系统安装过程一样。由于本机的控制器芯片为 LSI 1030, 因此必须在安装过程中, 重新安装RAID控制器芯片的驱动。
若安装Linux操作系统, 则只需要一张FC 5的安装盘, 就可以做软RAID配置 (FC操作系统自带的功能) , 不需要RAID驱动软盘也可以直接安装。这样就省去了前面复杂的配置过程。
2.2 RAID 5 性能测试
安装完成后, 可以通过一些简单的测试来验证 RAID 5 的性能, 可以选择HD Tach 这类简单易用的硬盘测试软件。HD Tach 是一款硬盘物理性能测试软件, 利用VXD特定模式来获得测试最大精确度的硬盘性能测试工具, 这是目前硬盘测试必备的一款工具。
如图3所示, 五块硬盘构成 RAID 5 磁盘阵列后突发读取速度为106.3MB/S.右图为一块硬盘的突发读取速度为89.2MB/S。可见相比于未作RAID5前的硬盘来看, 突发读取效能约有将近18%性能提升。
3 结束语
磁盘阵列的优点是, 不仅可以整合磁盘空间成为一个整体, 提高磁盘读取效率, 当磁盘阵列在写入数据时, 会把数据拆解成若干等分, 同时写入到各个磁盘中, 在读取数据时, 又从各个磁盘中读取所需数据, 而且容错性也较强。但在进行阵列配置时, 会遇到某个磁盘损坏等很多问题, 需要进一步研究和改进。
摘要:以IBM X235服务器为设备, 详细介绍安装和配置磁盘阵列的全过程, 并通过测试, 证实磁盘阵列对提高磁盘读取效率有帮助。
关键词:磁盘阵列,SCSI,控制器
参考文献
[1]吴素贞.磁盘阵列高可用技术研究[D].武汉:华中科技大学, 2010.
[2]李颖.磁盘阵列技术及其选择[J].电脑编程技巧与维护, 2011 (16) .
【磁盘控制器】推荐阅读:
虚拟磁盘12-29
实时磁盘调度10-09
磁盘阵列11-17
磁盘管理器11-23
共享磁盘阵列12-16
磁盘阵列技术01-02
磁盘碎片时经常重复05-14
实验一:磁盘与文件管理08-25
磁盘清理,教您如何清理C盘空间09-22
如何为Win7系统多添加一个磁盘分区08-20