当前位置:文档之家› XP下开启4G内存的方法+RAMDISK使用方法

XP下开启4G内存的方法+RAMDISK使用方法

XP下开启4G内存的方法+RAMDISK使用方法
XP下开启4G内存的方法+RAMDISK使用方法

如何在XP下开启4G内存的方法

1.首先检查主板是否支持,下载everest检测软件,在主板-内存一项中,Physical

Address Extension(PAE)查看“操作系统支持”“处理器支持”是否为“是”,如果是“是”的话,继续操作,关于什么事PAE,请参阅本文后面所述。

Everest下载路径:

thunder://QUFodHRwOi8vd3d3Lm15ZmlsZXMuY29tLmNuL2NvdW50L2Rvd25sb2FkLmFzcHg/a WQ9MzY1MzgmdXJsPWZ0cDovL2ZpbGUuZHJpdmVycy5jb20uY246MjIvU3lzdGVtL2V2ZXJlc3R1 bHRpbWF0ZV92MjE4My56aXBaWg==

2.我的电脑-属性-高级-启动和故障恢复-设置-编辑,这里编辑操作的是c盘根目录

下隐藏的boot.ini文件,也可以通过在c盘显示隐藏文件的方法找到它,一般boot.ini 里的内容如下:

[boot loader]

timeout=5

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

那么接下来在“multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" 后面加上“/PAE”

“multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /PAE /noexecute=optin /fastdetect”

这样保存关闭,系统就打开了PAE,重新启动后,电脑属性的下方多了“物理地址扩展”几个字,虽然显示的还是3.25g内存,但实际上4g内存已经完全启用了。

这样,重新启动后,电脑属性的下方多了“物理地址扩展”几个字,虽然显示的还是3.25g 内存,但实际上4g内存已经完全启用了,但怎么证明这一点呢?就用ramdisk虚拟硬盘软件来测试

ramdisk是一款将内存转换为虚拟硬盘的小软件,内存的速度是硬盘的几十倍,所以在我处理ps等需要大量暂存盘的软件时,通常都会用它来充当软件的暂存盘,这样软件的速度会倍增,在系统没有开启PAE只能识别3.25g内存的情况下,使用ramdisk会直接占用这3.25g 的内存,而开启PAE后,用ramdisk设置768mb的内存作为虚拟硬盘,再调出任务管理器,会发现内存使用丝毫没有减少,也就是说,ramdisk调用的768mb内存是系统没有显示出来的768mb,还而言之,系统已经找到了4g内存啦,关于ramdisk,请参阅后续文档。

什么是PAE?

PAE ( 物理地址扩展Physical Address Extension )

PAE 提高了 IA32 处理器处理大于 4 GB 的物理内存的能力。Windows 2000 Advanced Server、 Windows 2000 Datacenter Server、Windows Server 2003, Enterprise Edition 和 Windows Server 2003, Datacenter Edition 可以使用 PAE 来利用超出 4 GB 的物理内存。若要启用 PAE,需要在 Boot.ini 文件中使用 /PAE 参数。

典型情况是,在 Windows 2000 或 Windows Server 2003 下运行的进程最多可以访问 2 GB 的内存地址空间(假设未使用 /3GB 参数),其中一些内存是物理内存,另一些是虚拟内存。运行的程序越多(因而进程也越多),占用的内存地址空间也就越接近 2 GB 这一最大值。

当出现这种情况时,分页进程将显著增加并且会对性能产生负面影响。Windows 2000 和Windows Server 2003 内存管理器使用 PAE 向程序提供更多的物理内存。这会降低对交换页面文件内存的需要,从而提高了性能。程序本身并不知道实际的内存大小。所有的内存管理和 PAE 内存分配都由内存管理器处理,与运行的程序无关。

当使用 /3GB 参数时,上述信息对于运行的程序有效。要求 3 GB 内存的程序更有可能让其所需的内存有更多部分在物理内存中,而不是在分页的虚拟内存中。这将增强那些能够使用/3GB 参数的程序的性能。但例外情况是当 /3GB 参数与 /PAE 参数一起使用时。在这种情况下,操作系统将不使用任何超过 16 GB 的内存。此行为是由内核虚拟内存空间考虑导致的。因此,如果系统使用 Boot.ini 文件中的 /3GB 项重新启动,并且系统的物理内存超过16 GB,则操作系统不使用额外的物理随机存取内存 (RAM)。重新启动计算机时如果不使用/3GB 参数,将能够使用所有的物理内存。

物理内存到4G后,使用Ramdisk如何提升计算机性能?

使用Ramdisk之后,就可以把32位Windows未认出的内存,变成系统里速度最快的硬盘,物尽其用。当然,这个硬盘在关机后,里面的东西也没了,这正好用来放临时文件。软件是很聪明的,你也可以设置成退出时保存,那么下次再开机,内存硬盘的东西,也是可以保留的。

还有,如果怕BT伤硬盘,那就用它直接把电影下载到内存去吧。另外Ramdisk配合SSD也不错喔,SSD的写入寿命较差,那就不给它写东西,不就完了嘛。临时文件夹和虚拟页面文件,统统挪到性能更好的内存盘上。让SSD老老实实当只需要读的系统盘。另外一个用途是Ramdisk配合沙盘,才可以做到真正的无痕浏览。另写了个帖子,大家可以搜。当然如果你是64bit的windows,直接跳过教程吧,点加号,直接设定内存盘大小就可以了。

Ramdisk下载地址:ftp://221.236.13.108/soft.down/attach/2008/17/ramdisk4g.rar

以下是操作步骤:

首先要下载2个软件,1个是EVEREST,1个是RAMDISK4G

首先打开EVEREST,看内存选项,有个 physical Address Extension (APE)

看最下面有没有开启,XP SP3 是默认开启的。也就是下图最下面的选项

然后下载RAMDISK4G,解压出来后,先运行里面ram4g,写入注册表

然后运行 ramdisk

点右上角的install ramdisk

然后左边已经可以选择容量了,这个根据自己用途定吧,我是4G-3.25 所有选了 768M 在下面的选择是选择盘符,我选默认R盘

点OK,RAMDISK自动关闭,进我的电脑查看,多出个R盘

如果只是出现RamDisk字样,说明没有利用到那些没利用上的内存,如果出现RamDisk-PAE,

说明已经完全利用了

然后安全起见先重起下系统.到这里只是基本的做出虚拟内存盘,下面在说几个主要常用的方法

第一个就是虚拟内存了,设置到这个R盘

右键点击我的电脑--属性--高级——性能设置——高级——虚拟内存更改,见下图设置

重起好虚拟内存就设置好了

二个就是将临时文件夹设置到Ramdisk

我们浏览网页时,浏览器都要先把网页的内容下载到我们硬盘的IE临时文件夹上,并且这些内容是一直长期保存在硬盘上,需要我们定期清理。

如果把IE临时文件夹放在Ramdisk上,也就是R盘,可以提高网页的浏览速度,关机后这些内容就自动消失。具体方法如下:

右键点击IE--属性--设置--移动文件夹到R盘,见下图

设置完确定后系统会自动注销,然后在进系统就OK了。

第三个就是将系统临时文件设置到Ramdisk

多数软件在运行时,都会生成临时文件,程序很多时候执行的也是这些临时文件,如果把临时文件夹设置到Ramdisk,同样能提升运行速度。具体方法如下:

右键点击我的电脑--属性--高级--环境变量,将TEMP和TMP设置到Ramdisk,见下图设置:

当然你也可以把PS,甚至BT路径都放在这个盘,BT的话文件大了就不行了

都会有速度提升的,另外说下这个软件在VISTA下可能无法使用或者有兼容性问题

VISTA下有专用的RAMDISK

关于VB内存映射文件的使用

VB内存映射文件的使用 引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。目前,对于上述这种大文件的操作一般是以内存映射文件的方式来加以处理的,本文下面将针对这种Windows核心编程技术展开讨论。 内存映射文件 内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。 内存映射文件并不是简单的文件I/O操作,实际用到了Windows的核心编程技术--内存管理。所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识非常复杂,超出了本文的讨论范畴,在此就不再赘述,感兴趣的读者可以参阅其他相关书籍。 内存映射文件使用方法 1) 首先要通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内 存映射文件的文件。 2)在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径, 映像的长度还没有指定。为了指定文件映射对象需要多大的物理存储空间还需要通过 CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式。 3)在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,并把文件数据作为映射到该 区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。此时,对内存映射文件的使用和处理同通常加载到内存中的文件数据的处理方式基本一样。 4)在完成了对内存映射文件的使用时,还要通过一系列的操作完成对其的清除和使用过资源的释放。 这部分相对比较简单,可以通过UnmapViewOfFile()完成从进程的地址空间撤消文件数据的映像、通过CloseHandle()关闭前面创建的文件映射对象和文件对象。 内存映射文件相关函数 在使用内存映射文件时,所使用的API函数主要就是前面提到过的那几个函数,下面分别对其进行介绍:

机械手说明书

电气控制与PLC 课程设计说明书 题目机械手控制 院系机械工程学院 专业机械工程及自动化(电梯工程) 班级0722112 学号072211221 学生姓名孙奇 指导教师胡朝斌、易风 机械工程学院 2014年6月

目录 一、绪论 (3) 二、机械手的工作原理 (4) 2.1机械手的概述 (4) 2.2机械手的工作原理 (5) 三、机械手的工作流程图 (7) 四、输入和输出点分配图及原理接线图 (8) 五、元器件选型清单 (10) 六、控制程序 (14) 6.1初始化流程图设计 (14) 6.2手动操作梯形图 (15) 6.3回原点方式顺序功能图 (16) 6.4自动方式顺序功能图 (17) 6.5 PLC总程序梯形图 (18) 七、总结 (23) 参考文献 (24)

一、绪论 1.1 可编程序控制器的应用和发展概况 可编程序控制器(programmable controller),现在一般简称为PLC (programmable logic controller),它是以微处理器为基础,综合了计算机技术、半导体集成技术、自动控制技术、数字技术、通信网络技发展起来的一种通用的工业自动控制装置。以其显著的优点在冶金、化工、交通、电力等领域获得了广泛的应用,成为了现代工业控制三大支柱之一。 1.2 PLC的应用概况 PLC的应用领域非常广,并在迅速扩大,对于而今的PLC几乎可以说凡是需要控制系统存在的地方就需要PLC,尤其近几年来PLC的性价比不断提高已被广泛应用在冶金、机械、石油、化工、轻功、电力等各行业。 按PLC的控制类型,其应用大致可分为以下几个方面。 (1)用于逻辑控制 这是PLC最基本,也是最广泛的应用方面。用PLC取代继电器控制和顺序控制器控制。例如机床的电气控制、包装机械的控制、自动电梯控制等。 (2)用于模拟量控制 PLC通过模拟量I/O模块,可实现模拟量和数字量之间转换,并对模拟量控制。 (3)用于机械加工中的数字控制 现代PLC具有很强的数据处理功能,它可以与机械加工中的数字控制(NC)及计算机控制(CNC)紧密结合,实现数字控制。 (4)用于工业机器人控制 (5)用于多层分布式控制系统 高功能的PLC具有较强的通信联通能力,可实现PLC与PLC之间、PLC与远程I/O之间、PLC与上位机之间的通信。从而形成多层分布式控制系统或工厂自动化网络。 1.3 PLC概况及在机械手中的应用 (1)可靠性高、抗干扰能力强 (2)控制系统构成简单、通用性强 由于PLC是采用软件编程来实现控制功能,对同一控制对象,当控制要求改变需改变控制系统的功能时,不必改变PLC的硬件设备,只需相应改变软件程序。

主板芯片和内存映射

astrotycoon 大道至简,贵在恒久力行

Diagram for modern motherboard. The northbridge and southbridge make up the chipset.

(补充: 北桥芯片用于与CPU、内存和AGP视频接口,这些接口具有很高的传输速率。北桥芯片还起着存储器控制作用,因此Intel把该芯片标号为MCH(Memory Controller Hub)芯片。南桥芯片用来管理低、中速的组件,例如,PCI总线、IDE硬盘接口、USB端口等,因此南桥芯片的名称为ICH(I/O Controller Hub)) As you look at this, the crucial thing to keep in mind is that the CPU doesn’t really know anything about what it’s connected to. It talks to the outside world through its pins bu t it doesn’t care what that outside world is. It might be a motherboard in a computer but it could be a toaster, network router, brain implant, or CPU test bench. There are thre e main ways by which the CPU and the outside communicate: memory address space, I/O address space, and interrupts. We only worry about motherboards and memory for now. 正如你所看到的,其实CPU是完全不知道自己与哪些外部器件相连接的。 CPU仅仅通过自己的引脚与外界沟通,而它并不关心自己是与什么设备在沟通。或许是另一台计算机的主板,或许是烤面包机,网络路由器,脑植入医疗设备,又或许是CPU测试仪。 CPU主要通过三种方式与外界通信:内存地址空间,IO地址空间,和中断。我们目前只关注主板和内存。 In a motherboard the CPU’s gateway to the world is the front-side bus connecting it to the northbridge. Whenever the CPU needs to read or write memory it does so via this b us. It uses some pins to transmit the physical memory address it wants to write or read, while other pins send the value to be written or receive the value being read. An Intel Core 2 QX6600 has 33 pins to transmit the physical memory address (so there are 233 choices of memory locations) and 64 pins to send or receive data (so data is transmitte d in a 64-bit data path, or 8-byte chunks). This allows the CPU to physically address 64 gigabytes of memory (233 locations * 8 bytes) although most chipsets only handle up to 8 gigs of RAM. CPU通过前端总线与北桥芯片连接,作为与外界通信的桥梁。无论何时,CPU都可以通过前端总线来读写内存。 CPU通过一些引脚来传送想要读写物理内存的地址,同时通过另一些引脚来发送将要写入内存的数据或者接收从内存读取到的数据。 Intel Core 2 QX6600 用33个引脚来传送物理内存地址(因此共有233 个内存地址),并且用64个引脚来发送或接收数据(所以数据在64位通道中传输,也就是8字节的数据块)。因此C PU可以访问64G的物理内存(233*8字节),尽管多数芯片组只能处理8G大小的物理内存。 Now comes the rub. We’re used to thinking of memory only in terms of RAM, the stuff programs read from and write to all the time. And indeed most of the memory requests from the processor are routed to RAM modules by the northbridge. But not all of them. Physical memory addresses are also used for communication with assorted devices on t he motherboard (this communication is called memory-mapped I/O). These devices include video cards, most PCI cards (say, a scanner or SCSI card), and also the flash mem ory that stores the BIOS. 那么现在的问题是,通常一提起内存我们仅仅联想到RAM,以为程序一直读写的就只是RAM。的确,绝大多数来自CPU的内存访问请求都被北桥芯片映射到了RAM。但是,注意,不是全部。物理内存同样可以用来与主板上的各种设备通信(这种通信方式被称为I/O内存映射)。这些设备包括显卡,大多数PCI卡(比如,扫描仪,或者是SCSI卡),也包括存储BIOS的flash存储器。 When the northbridge receives a physical memory request it decides where to route it: should it go to RAM? Video card maybe? This routing is decided via the memory addres s map. For each region of physical memory addresses, the memory map knows the device that owns that region. The bulk of the addresses are mapped to RAM, but when the y aren’t the memory map tells the chipset which device should service requests for those addresses. This mapping of memory addresses away from RAM modules causes the c lassic hole in PC memory between 640KB and 1MB. A bigger hole arises when memory addresses are reserved for video cards and PCI devices. This is why 32-bit OSes have pr oblems using 4 gigs of RAM. In Linux the file /proc/iomem neatly lists these address range mappings. The diagram below shows a typical memory map for the first 4 gigs of p hysical memory addresses in an Intel PC:

内存映射文件

内存映射文件: 内存映射文件有三种,第一种是可执行文件的映射,第二种是数据文件的映射,第三种是借助页面交换文件的内存映射.应用程序本身可以使用后两种内存映射. 1.可执行文件映射: Windows在执行一个Win32应用程序时使用的是内存映射文件技术.系统先在进程地址空间的0x00400000以上保留一个足够大的虚拟地址空间(0x00400000以下是由系统管理的),然后把应用程序所在的磁盘空间作为虚拟内存提交到这个保留的地址空间中去(我的理解也就是说,虚拟内存是由物理内存和磁盘上的页面文件组成的,现在应用程序所在的磁盘空间就成了虚拟地址的页面文件).做好这些准备后,系统开始执行这个应用程序,由于这个应用程序的代码不在内存中(在页面文件中),所以在执行第一条指令的时候会产生一个页面错误(页面错误也就是说,系统所访问的数据不在内存中),系统分配一块内存把它映射到0x00400000处,把实际的代码或数据读入其中(系统分配一块内存区域,把它要访问的在页面文件中的数据读入到这块内存中,需在注意是系统读入代码或数据是一页一页读入的),然后可以继续执行了.当以后要访问的数据不在内存中时,就可以通过前面的机制访问数据.对于Win32DLL的映射也是同样,不过DLL文件应该是被Win32进程共享的(我想应该被映射到x80000000以后,因为0x80000000-0xBFFFFFFF是被共享的空间). 当系统在另一个进程中执行这个应用程序时,系统知道这个程序已经有了一个实例,程序的代码和数据已被读到内存中,所以系统只需把这块内存在映射到新进程的地址空间即可,这样不就实现了在多个进程间共享数据了吗!然而这种共享数据只是针对只读数据,如果进程改写了其中的代码和数据,操作系统就会把修改的数据所在的页面复制一份到改写的进程中(我的理解也就是说共享的数据没有改变,进程改写的数据只是共享数据的一份拷贝,其它进程在需要共享数据时还是共享没有改写的数据),这样就可以避免多个进程之间的相互干扰. 2.数据文件的内存映射: 数据文件的内存映射原理与可执行文件内存映射原理一样.先把数据文件的一部分映射到虚拟地址空间的0x80000000 - 0xBFFFFFFF,但没有提交实际内存(也就是说作为页面文件),当有指令要存取这段内存时同样会产生页面错误异常.操作系统捕获到这个异常后,分配一页内存,映射内存到发生异常的位置,然后把要访问的数据读入到这块内存,继续执行刚才产生异常的指令(这里我理解的意思是把刚才产生异常的指令在执行一次,这次由于数据已经映射到内存中,指令就可以顺利执行过去),由上面的分析可知,应用程序访问虚拟地址空间时由操作系统管理数据在读入等内容,应用程序本身不需要调用文件的I/O函数(这点我觉得很重要,也就是为什么使用内存映射文件技术对内存的访问就象是对磁盘上的文件访问一样). 3.基于页面交换文件的内存映射: 内存映射的第三种情况是基于页面交换文件的.一个Win32进程利用内存映射文件可以在进程共享的地址空间保留一块区域(0x8000000 - 0xBFFFFFFF),这块区域与系统的页面交换文件相联系.我们可以用这块区域来存储临时数据,但更常见的做法是利用这块区域与其他进程通信(因为0x80000000以上是系统空间,进程切换只是私有地址空间,系统空间是所有进程共同使用的),这样多进程间就可以实现通信了.事实上Win32多进程间通信都是使用的内存映射文件技术,如PostMessage(),SentMessage()函数,在内部都使用内存映射文件技术. 使用内存映射文件的方法: 1.利用内存映射文件进行文件I/O操作: CreateFile()-->CreateFileMapping()-->MapViewOfFile()......

内存映射和普通文件访问的区别

在讲述文件映射的概念时, 不可避免的要牵涉到虚存(SVR 4的VM). 实际上, 文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施, 好似用户将文件映射到自己地址空间的某个部分, 使用简单的内存访问指令读写文件;另一方面, 它也可以用于内核的基本组织模式, 在这种模式种, 内核将整个地址空间视为诸如文件之类的一组不同对象的映射. 中的传统文件访问方式是, 首先用open系统调用打开文件, 然后使用read, write以及lseek等调用进行顺序或者随即的I/O. 这种方式是非常低效的, 每一次I/O操作都需要一次系统调用. 另外, 如果若干个进程访问同一个文件, 每个进程都要在自己的地址空间维护一个副本, 浪费了内存空间. 而如果能够通过一定的机制将页面映射到进程的地址空间中, 也就是说首先通过简单的产生某些内存管理数据结构完成映射的创建. 当进程访问页面时产生一个缺页中断, 内核将页面读入内存并且更新页表指向该页面. 而且这种方式非常方便于同一副本的共享. VM是面向对象的方法设计的, 这里的对象是指内存对象: 内存对象是一个软件抽象的概念, 它描述内存区与后备存储之间的映射. 系统可以使用多种类型的后备存储, 比如交换空间, 本地或者远程文件以及帧缓存等等. VM系统对它们统一处理, 采用同一操作集操作, 比如读取页面或者回写页面等. 每种不同的后备存储都可以用不同的方法实现这些操作. 这样, 系统定义了一套统一的接口, 每种后备存储给出自己的实现方法. 这样, 进程的地址空间就被视为一组映射到不同数据对象上的的映射组成. 所有的有效地址就是那些映射到数据对象上的地址. 这些对象为映射它的页面提供了持久性的后备存储. 映射使得用户可以直接寻址这些对象. 值得提出的是, VM体系结构独立于Unix系统, 所有的Unix系统语义, 如正文, 数据及堆栈区都可以建构在基本VM系统之上. 同时, VM体系结构也是独立于存储管理的, 存储管理是由操作系统实施的, 如: 究竟采取什么样的对换和请求调页算法, 究竟是采取分段还是分页机制进行存储管理, 究竟是如何将虚拟地址转换成为物理地址等等(Linux中是一种叫Three Level Page Table的机制), 这些都与内存对象的概念无关. 下面介绍Linux中 VM的实现. 一个进程应该包括一个mm_struct(memory manage struct), 该结构是进程虚拟地址空间的抽象描述, 里面包括了进程虚拟空间的一些管理信息: start_code, end_code, start_data, end_data, start_brk, end_brk等等信息. 另外, 也有一个指向进程虚存区表(vm_area_struct: virtual memory area)的指针, 该链是按照虚拟地址的增长顺序排列的. 在Linux进程的地址空间被分作许多区(vma), 每个区(vma)都对应虚拟地址空间上一段连续的区域, vma是可以被共享和保护的独立实体, 这里的vma就是前面提到的内存对象. 下面是vm_area_struct的结构, 其中, 前半部分是公共的, 与类型无关的一些数据成员, 如: 指向mm_struct的指针, 地址范围等等, 后半部分则是与类型相关的成员, 其中最重要的是一个指向vm_operation_struct向量表的指针 vm_ops, vm_pos向量表是一组虚函数, 定义了与vma类型无关的接口. 每一个特定的子类, 即每种vma类型都必须在向量表中实现这些操作. 这里包括了: open, close, unmap, protect, sync, nopage, wppage, swapout这些操作. 1.struct vm_area_struct { 2./*公共的, 与vma类型无关的 */ 3.struct mm_struct * vm_mm;

内存映射文件

内存映射文件 内存映射文件是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数(CreateFileMapping)。这样,文件内的数据就可以用内存读/写指令来访问,而不是用ReadFile和WriteFile这样的I/O系统函数,从而提高了文件存取速度。 这种函数最适用于需要读取文件并且对文件内包含的信息做语法分析的应用程序,如对输入文件进行语法分析的彩色语法编辑器,编译器等。把文件映射后进行读和分析,能让应用程序使用内存操作来操纵文件,而不必在文件里来回地读、写、移动文件指针。 有些操作,如放弃“读”一个字符,在以前是相当复杂的,用户需要处理缓冲区的刷新问题。在引入了映射文件之后,就简单的多了。应用程序要做的只是使指针减少一个值。 映射文件的另一个重要应用就是用来支持永久命名的共享内存。要在两个应用程序之间共享内存,可以在一个应用程序中创建一个文件并映射之,然后另一个应用程序可以通过打开和映射此文件把它作为共享的内存来使用。 VC++中使用内存映射文件处理大文件(1) 关键词:VC++ 内存映射 阅读提示:本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍。 引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC 提供的CFile类等。一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。目前,对于上述这种大文件的操作一般是以内存映射文件的方式来加以处理的,本文下面将针对这种Windows核心编程技术展开讨论。 内存映射文件 内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。 内存映射文件并不是简单的文件I/O操作,实际用到了Windows的核心编程技术--内存管理。所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识非常复杂,超出了本文的讨论范畴,

虚拟内存与物理内存的地址映射解析

在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。 一早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存的呢?下面通过实例来说明当时的内存分配方法: 某台计算机总的内存大小是128M,现在同时运行两个程序A和B,A需占用内存10M,B需占用内存110。计算机在给程序分配内存时会采取这样的方法:先将内存中的前10M分配给程序A,接着再从内存中剩余的118M中划分出110M分配给程序B。这种分配方法可以保证程序A和程序B都能运行,但是这种简单的内存分配策略问题很多。

图一早期的内存分配方法 问题1:进程地址空间不隔离。由于程序都是直接访问物理内存,所以恶意程序可以随意修改别的进程的内存数据,以达到破坏的目的。有些非恶意的,但是有bug的程序也可能不小心修改了其它程序的内存数据,就会导致其它程序的运行出现异常。这种情况对用户来说是无法容忍的,因为用户希望使用计算机的时候,其中一个任务失败了,至少不能影响其它的任务。 问题2:内存使用效率低。在A和B都运行的情况下,如果用户又运行了程序C,而程序C需要20M大小的内存才能运行,而此时系统只剩下8M的空间可供使用,所以此时系统必须在已运行的程序中选择一个将该程序的数据暂时拷贝到硬盘上,释放出部分空间来

供程序C使用,然后再将程序C的数据全部装入内存中运行。可以想象得到,在这个过程中,有大量的数据在装入装出,导致效率十分低下。 问题3:程序运行的地址不确定。当内存中的剩余空间可以满足程序C的要求后,操作系统会在剩余空间中随机分配一段连续的 20M大小的空间给程序C使用,因为是随机分配的,所以程序运行的地址是不确定的。 二分段 为了解决上述问题,人们想到了一种变通的方法,就是增加一个中间层,利用一种间接的地址访问方法访问物理内存。按照这种方法,程序中访问的内存地址不再是实际的物理内存地址,而是一个虚拟地址,然后由操作系统将这个虚拟地址映射到适当的物理内存地址上。这样,只要操作系统处理好虚拟地址到物理内存地址的映射,就可以保证不同的程序最终访问的内存地址位于不同的区域,彼此没有重叠,就可以达到内存地址空间隔离的效果。 当创建一个进程时,操作系统会为该进程分配一个4GB大小的虚拟进程地址空间。之所以是4GB,是因为在32位的操作系统中,一个指针长度是4字节,而4字节指针的寻址能力是从 0x00000000~0xFFFFFFFF,最大值0xFFFFFFFF表示的即为4GB大小的容量。与虚拟地址空间相对的,还有一个物理地址空间,这个地址

通过VC++内存映射修改大文件方法

通过VC++内存映射修改大文件方法 本文介绍利用VC++内存映射文件修改大文件的方法:在大文件内存前加入一段数据,若要使用内存映射文件,必须执行下列操作步骤: 1.创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存 映射文件的文件; 2.创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访 问该文件; 3.让系统将文件映射对象的全部或一部分映射到你的进程地址空间中;当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除: 1.告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像; 2.关闭文件映射内核对象; 3.关闭文件内核对象; 下面将用一个实例详细介绍这些操作步骤,(本实例的目的就是将一个文件A其内容前面加入一些内容存入文件B,我想大家在程序开发当中会遇到这种情况的)。 一、我们打开关于A文件内核对象,并创建一个关于B文件的内核对象若要创建或打开一个文件内核对象,总是要调用CreateFile函数: HANDLE CreateFile( PCSTR pszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, PSECURITY_ATTRIBUTES psa, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); CreateFile函数拥有好几个参数,这里只重点介绍前3个参数,即szFileName,dwDesiredAccess 和dwShareMode。你可能会猜到,第一个参数pszFileName用于指明要创建或打开的文件的名

linux下的内存映射函数mmap详解及示例代码

自:https://www.doczj.com/doc/568759638.html,/flying5/blog 不错的博客,大家可以去看看 Linux的mmap文件内存映射机制 mmap: memory map 在讲述文件映射的概念时, 不可避免的要牵涉到虚存(SVR 4的VM). 实际上, 文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施, 好似用户将文件映射到自己地址空间的某个部分, 使用简单的内存访问指令读写文件;另一方面, 它也可以用于内核的基本组织模式, 在这种模式种, 内核将整个地址空间视为诸如文件之类的一组不同对象的映射. 中的传统文件访问方式是, 首先用open系统调用打开文件, 然后使用read, write以及lseek等调用进行顺序或者随即的I/O. 这种方式是非常低效的, 每一次I/O操作都需要一次系统调用. 另外, 如果若干个进程访问同一个文件, 每个进程都要在自己的地址空间维护一个副本, 浪费了内存空间. 而如果能够通过一定的机制将页面映射到进程的地址空间中, 也就是说首先通过简单的产生某些内存管理数据结构完成映射的创建. 当进程访问页面时产生一个缺页中断, 内核将页面读入内存并且更新页表指向该页面. 而且这种方式非常方便于同一副本的共享. VM是面向对象的方法设计的, 这里的对象是指内存对象: 内存对象是一个软件抽象的概念, 它描述内存区与后备存储之间的映射. 系统可以使用多种类型的后备存储, 比如交换空间, 本地或者远程文件以及帧缓存等等. VM 系统对它们统一处理, 采用同一操作集操作, 比如读取页面或者回写页面等. 每种不同的后备存储都可以用不同的方法实现这些操作. 这样, 系统定义了一套统一的接口, 每种后备存储给出自己的实现方法. 这样, 进程的地址空间就被视为一组映射到不同数据对象上的的映射组成. 所有的有效地址就是那些映射到数据对象上的地址. 这些对象为映射它的页面提供了持久性的后备存储. 映射使得用户可以直接寻址这些对象. 值得提出的是, VM体系结构独立于Unix系统, 所有的Unix系统语义, 如正文, 数据及堆栈区都可以建构在基本VM系统之上. 同时, VM体系结构也是独立于存储管理的, 存储管理是由操作系统实施的, 如: 究竟采取什么样的对换和请求调页算法, 究竟是采取分段还是分页机制进行存储管理, 究竟是如何将虚拟地址转换成为物理地址等等(Linux中是一种叫Three Level Page Table的机制), 这些都与内存对象的概念无关. 下面介绍Linux中VM的实现. 一个进程应该包括一个mm_struct(memory manage struct),该结构是进程虚拟地址空间的抽象描述, 里面包括了进程虚拟空间的一些管理信息: start_code, end_code, start_data, end_data, start_brk, end_brk等等信息. 另外, 也有一个指向进程虚存区表(vm_area_struct: virtual memory area)的指针, 该链是按照虚拟地址的增长顺序排列的. 在Linux进程的地址空间被分作许多区(vma), 每个区(vma)都对应虚拟地址空间上一段连续的区域, vma是可以被共享和保护的独立实体, 这里的vma就是前面提到的内存对象. 下面是vm_area_struct的结构, 其中, 前半部分是公共的, 与类型无关的一些数据成员, 如: 指向mm_struct的指针, 地址范围等等, 后半部分则是与类型相关的成员, 其中最重要的是一个指向vm_operation_struct向量表的指针vm_ops, vm_pos向量表是一组虚函数, 定义了与vma类型无关的接口. 每一个特定的子类, 即每种vma类型都必须在向量表中实现这些操作. 这里包括了: open, close, unmap, protect, sync, nopage, wppage, swapout这些操作. struct vm_area_struct { /*公共的, 与vma类型无关的*/ struct mm_struct * vm_mm; unsigned long vm_start; unsigned long vm_end; struct vm_area_struct *vm_next;

Linux设备驱动程序学习(20)-内存映射和DMA-基本概念

Linux设备驱动程序学习(20)-内存映射和DMA-基本概念 (2011-09-25 15:47) 标签: 虚拟内存设备驱动程序Linux技术分类:Linux设备驱动程序 这部分主要研究 Linux 内存管理的基础知识, 重点在于对设备驱动有用的技术. 因为许多驱动编程需要一些对于虚拟内存(VM)子系统原理的理解。 而这些知识主要分为三个部分: 1、 mmap系统调用的实现原理:它允许设备内存直接映射到一个用户进程地址 空间. 这样做对一些设备来说可显著地提高性能. 2、与mmap的功能相反的应用原理:内核态代码如何跨过边界直接存取用户空间的内存页. 虽然较少驱动需要这个能力. 但是了解如何映射用户空间内存到内 核(使用 get_user_pages)会有用. 3、直接内存存取( DMA ) I/O 操作, 它提供给外设对系统内存的直接存取. 但所有这些技术需要理解 Linux 内存管理的基本原理, 因此我将先学习VM子 系统的基本原理. 一、Linux的内存管理 这里重点是 Linux 内存管理实现的主要特点,而不是描述操作系统的内存管理理论。Linux虚拟内存管理非常的复杂,要写可以写一本书:《深入理解Linux 虚拟内存管理》。学习驱动无须如此深入, 但是对它的工作原理的基本了解是必要的. 解了必要的背景知识后,才可以学习内核管理内存的数据结构. Linux是一个虚拟内存系统(但是在没有MMU的CPU中跑的ucLinux除外), 意味着在内核启动了MMU 之后所有使用的地址不直接对应于硬件使用的物理地址,这些地址(称之为虚拟地址)都经过了MMU转换为物理地址之后再从CPU的内存总线中发出,读取/写入数据. 这样 VM 就引入了一个间接层, 它是许多操作成为可能: 1、系统中运行的程序可以分配远多于物理内存的内存空间,即便单个进程都可拥有一个大于系统的物理内存的虚拟地址空间. 2、虚拟内存也允许程序对进程的地址空间运用多种技巧, 包括映射程序的内存到设备内存.等等~~~ 1、地址类型 Linux 系统处理几种类型的地址, 每个有它自己的含义: 用户虚拟地址:User virtual addresses,用户程序见到的常规地址. 用户地址在长度上是 32 位或者 64 位, 依赖底层的硬件结构, 并且每个进程有它自己 的虚拟地址空间.

百灵气动AirTAC型气源处理件说明书

百灵气动AirTAC型气源处理件说明书 一.使用条件(技术参数) 气源处理件使用的系统压力,介质温度及调压范围应符合下表规定的数值: 最高使用压力 1.0Mpa(10.2kgf/㎝2) 环境及流体温度5~60 建议用油透平1号油(ISOVG32) 滤芯精度40u 调压范围0.05~0.85Mpa(0.51~8.7kgf/ ㎝2) 工作介质空气 杯防护罩1000~2000无2500~6000有 阀型带溢流型 二.安装使用 1.安装应注意清洗连接管道与接头,避免将脏物带入气路。 2.安装应注意气流方向与本体上的箭头方向一致,注意接管及牙型是否正确。 3.压力调节:将调压旋钮向上拉起,顺时针旋转,压力上升。逆时针旋转,压力下降。调整至所需压力,将调压旋钮按下呈锁紧状态. 4.水分排出:无空气压力时,水分自动排出。有空气压力时,将排水柱向上推,水分排出,排水完毕,将排水柱放开,排水柱自动弹下,排水结束。当水位超过上限时,请及时排水,否则将造成除湿不良。 5.油量调整:旋转调油旋盖,将旋盖上数字对准▲箭头方向:数字0为油量最小,9为油量最大。自9到0位置不能逆时针旋转,需顺时针旋转。 设定数字后,空气流量大,滴油量大,空气流量小,滴油量小。 (顺时针旋转针阀,滴油量减少;逆时针旋转针阀,滴油量增加。空气量调整,设定针阀后空气流量大,滴油量大,空气流量小,滴油量小。) 6.加油方法;可以不关闭空气管路而进行加油作业,逆时针旋起加油螺丝,加油时加油量不用超过杯子80%.加完油后,将加油螺丝锁紧;不可直接将油杯卸下进行加油。 三.保养 1。清洗/更换滤网:取出滤网,用空气由内向外吹,即可以重复使用。 2.透明PC杯:卸下PC杯,用干净干布擦拭即可,不可使用任何会破坏PC杯材质的化学物品来清洗。 四.使用注意事项 1.使用压力请勿超过1Mpa. 2.禁止接近或在有机溶剂环境中使用 3.给油雾器油杯中加油时,要关闭进入油雾器的压缩空气 4.其他详细资料参产品样本 五.定购代码示例 1. AC------2000-------M ↓↓↓ 型号接管口径排水方式 AC:A系列三联件1500:PT1/8 空白:差压排水式 AFC:A系列二联件2000:PT1/4 M:标准手排式

内存映射文件使用方法

内存映射文件 要点:MapViewOfFile函数中映射文件的偏移地址必须为系统分配粒度的整数倍,但一次映射的文件长度则不受此限制。 摘要:本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍。 引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。目前,对于上述这种大文件的操作一般是以内存映射文件的方式来加以处理的,本文下面将针对这种Windows核心编程技术展开讨论。 内存映射文件 内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。 内存映射文件并不是简单的文件I/O操作,实际用到了Windows的核心编程技术--内存管理。所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识非常复杂,超出了本文的讨论范畴,在此就不再赘述,感兴趣的读者可以参阅其他相关书籍。下面给出使用内存映射文件的一般方法: 首先要通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径,映像的长度还没有指定。为了指定文件映射对象需要多大的物理存储空间还需要通过CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式。在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,并把文件数据作为映射到该区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。此时,对内存映射文件的使用和处理同通常加载到内存中的文件数据的处理方式基本一样,在完成了对内存映射文件的使用时,还要通过一系列的操作完成对其的清除和使用过

亚德客选型电子手册

标题:亚德客选型电子手册 亚德客是全球知名专业生产各类气动器材的大型企业集团,致力于向客户提供满足其需求的气动控制元件、气动执行元件、气源处理元件、气动辅助元件等各类气动器材、服务和解决方案,为客户创造长期的价值和潜在的增长。 亚德客始创于1988年,现辖三大生产基地和一家营销中心,亚德客生产基地厂房面积达37万8千平方米,全球员工总计超过4500人,专业研发技术人员300多人,亚德客选型电子手册总投资1.5亿美元,年生产能力达5,000万件套,产品畅销中国、东南亚、欧美等国家和地区。 亚德客在中国大陆地区拥有近百家直销分公司/营业部,亚德客选型电子手册在全球更是有数千家经销商,主要位于欧洲、美洲及亚洲,形成了完善的销售网络和售后服务体系,可随时为客户提供便捷的服务。

亚德客以拓展集团生产和服务为未来发展的战略目标,坚持走人本优先、改革创新和集团化道路。秉承“人本、共享、发展、责任”的企业核心价值观,亚德客始终如一地贯彻“以客为尊”的经营理念,始终如一地坚持“以技术创新为核心,亚德客选型电子手册以市场需求为导向”的经营方针,藉以不断完善“建立共好、责任承担、赏罚分明、学习成长”的集团文化,努力奋斗,自强不息,长久致力于全球工业自动化的持续发展。 台湾亚德客工业股份有限公司(简称台亚)成立于1988年11月,前身系健良股份有限公司,1990年更名为台亚。早期的台亚主要生产电磁阀,此后亚德客选型电子手册陆续研发生产气缸、气源处理等产品。目前,台亚产品以特殊规格气缸为主,拥有七大类十余系列数百个品种,年产量达到20万件套,主要供应台湾本地市场,满足客户需求及时效性。

相关主题
文本预览
相关文档 最新文档