当前位置: 首页 > news >正文

做动效很好的网站房地产推广策略

做动效很好的网站,房地产推广策略,企业网站建设英文,建设银行网站可以更改个人电话一直都对内存映射文件这个概念很模糊#xff0c;不知道它和虚拟内存有什么区别#xff0c;而且映射这个词也很让人迷茫#xff0c;今天终于搞清楚了。。。下面#xff0c;我先解释一下我对映射这个词的理解#xff0c;再区分一下几个容易混淆的概念#xff0c;之后#…一直都对内存映射文件这个概念很模糊不知道它和虚拟内存有什么区别而且映射这个词也很让人迷茫今天终于搞清楚了。。。下面我先解释一下我对映射这个词的理解再区分一下几个容易混淆的概念之后什么是内存映射就很明朗了。原理首先“映射”这个词就和数学课上说的“一一映射”是一个意思就是建立一种一一对应关系在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间 中一块大小相同的区域之间的一一对应如图1中过程1所示。这种对应关系纯属是逻辑上的概念物理上是不存在的原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中并没有实际的数据拷贝文件没有被载入内存只是逻辑上被放入了内存具体到代码就是建立并初始化了相关的数据结构struct address_space这个过程有系统调用mmap()实现所以建立内存映射的效率很高。既然建立内存映射没有进行实际的数据拷贝那么进程又怎么能最终直接通过内存操作访问到硬盘上的文件呢那就要看内存映射之后的几个相关的过程了。mmap()会返回一个指针ptr它指向进程逻辑地址空间中的一个地址这样以后进程无需再调用read或write对文件进行读写而只需要通过ptr就能够操作文件。但是ptr所指向的是一个逻辑地址要操作其中的数据必须通过MMU将逻辑地址转换成物理地址如图1中过程2所示。这个过程与内存映射无关。 前面讲过建立内存映射并没有实际拷贝数据这时MMU在地址映射表中是无法找到与ptr相对应的物理地址的也就是MMU失败将产生一个缺页中断缺页中断的中断响应函数会在swap中寻找相对应的页面如果找不到也就是该文件从来没有被读入内存的情况则会通过mmap()建立的映射关系从硬盘上将文件读取到物理内存中如图1中过程3所示。这个过程与内存映射无关。如果在拷贝数据时发现物理内存不够用则会通过虚拟内存机制swap将暂时不用的物理页面交换到硬盘上如图1中过程4所示。这个过程也与内存映射无关。效率从代码层面上看从硬盘上将文件读入内存都要经过文件系统进行数据拷贝并且数据拷贝操作是由文件系统和硬件驱动实现的理论上来说拷贝数据的效率是一样的。但是通过内存映射的方法访问硬盘上的文件效率要比read和write系统调用高这是为什么呢原因是read()是系统调用其中进行了数据拷贝它首先将文件内容从硬盘拷贝到内核空间的一个缓冲区如图2中过程1然后再将这些数据拷贝到用户空间如图2中过程2在这个过程中实际上完成了 两次数据拷贝 而mmap()也是系统调用如前所述mmap()中没有进行数据拷贝真正的数据拷贝是在缺页中断处理时进行的由于mmap()将文件直接映射到用户空间所以中断处理函数根据这个映射关系直接将文件从硬盘拷贝到用户空间只进行了 一次数据拷贝 。因此内存映射的效率要比read/write效率高。下面这个程序通过read和mmap两种方法分别对硬盘上一个名为“mmap_test”的文件进行操作文件中存有10000个整数程序两次使用不同的方法将它们读出加1再写回硬盘。通过对比可以看出read消耗的时间将近是mmap的两到三倍。WR ); if( sizeof(int)*MAX ! read( fd, (void *)array, sizeof(int)*MAX ) ) { printf( Reading data failed.../n ); return -1; } for( i0; iMAX; i )array[ i ]; if( sizeof(int)*MAX ! write( fd, (void *)array, sizeof(int)*MAX ) ) { printf( Writing data failed.../n ); return -1; } free( array ); close( fd ); gettimeofday( tv2, NULL ); printf( Time of read/write: %dms/n, tv2.tv_usec-tv1.tv_usec );/*mmap*/gettimeofday( tv1, NULL ); fd open( mmap_test, O_RDWR ); array mmap( NULL, sizeof(int)*MAX, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0 ); for( i0; iMAX; i )array[ i ]; munmap( array, sizeof(int)*MAX ); msync( array, sizeof(int)*MAX, MS_SYNC ); free( array ); close( fd ); gettimeofday( tv2, NULL ); printf( Time of mmap: %dms/n, tv2.tv_usec-tv1.tv_usec );return 0; } 输出结果Time of read/write: 154ms Time of mmap: 68ms
http://wiki.neutronadmin.com/news/85368/

相关文章:

  • 阿里巴巴如何建设网站做网站需要用到什么技术
  • 深圳外贸网站建设企业广西建设厅培训中心官网
  • wordpress建淘宝客网站wordpress 51la
  • 模板网站建设价格wordpress主题和模板下载
  • 口碑好的赣州网站建设android移动应用开发
  • 钓鱼网站的制作教程中企动力邮箱官网
  • 建设网站一定要会代码吗wordpress采集ins
  • 做壁纸网站进入百度app查看
  • wordpress建站后发布网站聚合优化
  • 怎样看一个网站做的网络广告wordpress可视化编辑页面
  • 网站logo制作教程一般网站海报做一张多久
  • 罗定市住房和城乡建设局网站网站服务器时间查询工具
  • 长白山网站学做管理东莞市做网站的
  • 网站关键字怎么分割广州市新闻发布
  • 网站按钮特效深圳企业专业网站设计
  • 网站建设体会焦作市网站建设哪家好
  • 河北建设厅注册中心网站首页石景山网站建设公司哪个好
  • 网站开发第三方支付全国做膏药的网站有多少家呢
  • 淘宝网站的建设情况广东seo网站设计
  • 儋州网站建设wordpress编辑器代码
  • 网站被百度惩罚做网站业务好干吗
  • 我做的网站怎么打开很慢量品定制合伙人
  • 绵阳建网站哪家好建设网站怎么建立服务器
  • 网站建设费用支出方案苏州制作网站的公司哪家好
  • 可以做推广的门户网站wordpress 分类输出样式
  • 初中生做网站挣钱杭州网络营销推广公司
  • 网站联盟营销江苏省住房和城乡建设厅官网
  • pyton 网站开发网站的建设及维护
  • 大连 做网站公司个人主页网页设计源代码
  • 做网站的时候网站的第一个字母怎么在网站标题前面显示 比如谷歌g一样万网域名申请网站