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

免费网站注册申请网站开发分站

免费网站注册申请,网站开发分站,服装设计师接单网站,太原网站建设51sole3.1.3 看对于“肮脏”页面的处理 文章目录 3.1.3 看对于“肮脏”页面的处理再看对于“肮脏”页面的处理MmPageOutVirtualMemory() 再看对于“肮脏”页面的处理 MmPageOutVirtualMemory() NTSTATUS NTAPI MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,PMEMORY_AREA Me…

3.1.3 看对于“肮脏”页面的处理

文章目录

  • 3.1.3 看对于“肮脏”页面的处理
  • 再看对于“肮脏”页面的处理
  • MmPageOutVirtualMemory()


再看对于“肮脏”页面的处理

MmPageOutVirtualMemory()


NTSTATUS
NTAPI
MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,PMEMORY_AREA MemoryArea,PVOID Address,PMM_PAGEOP PageOp)
{PFN_TYPE Page;BOOLEAN WasDirty;SWAPENTRY SwapEntry;NTSTATUS Status;DPRINT("MmPageOutVirtualMemory(Address 0x%.8X) PID %d\n",Address, AddressSpace->Process->UniqueProcessId);/** Check for paging out from a deleted virtual memory area.*/if (MemoryArea->DeleteInProgress){PageOp->Status = STATUS_UNSUCCESSFUL;KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);MmReleasePageOp(PageOp);return(STATUS_UNSUCCESSFUL);}/** Disable the virtual mapping.*/MmDisableVirtualMapping(AddressSpace->Process, Address,&WasDirty, &Page);if (Page == 0){KEBUGCHECK(0);}/** Paging out non-dirty data is easy.*/if (!WasDirty){MmLockAddressSpace(AddressSpace);MmDeleteVirtualMapping(AddressSpace->Process, Address, FALSE, NULL, NULL);MmDeleteAllRmaps(Page, NULL, NULL);if ((SwapEntry = MmGetSavedSwapEntryPage(Page)) != 0){MmCreatePageFileMapping(AddressSpace->Process, Address, SwapEntry);MmSetSavedSwapEntryPage(Page, 0);}MmUnlockAddressSpace(AddressSpace);MmReleasePageMemoryConsumer(MC_USER, Page);PageOp->Status = STATUS_SUCCESS;KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);MmReleasePageOp(PageOp);return(STATUS_SUCCESS);}/** If necessary, allocate an entry in the paging file for this page*/SwapEntry = MmGetSavedSwapEntryPage(Page);//获取该物理页面的倒换描述项//页面是脏的if (SwapEntry == 0)//分配失败{SwapEntry = MmAllocSwapPage();if (SwapEntry == 0){MmShowOutOfSpaceMessagePagingFile();MmEnableVirtualMapping(AddressSpace->Process, Address);//恢复原来的映射PageOp->Status = STATUS_UNSUCCESSFUL;KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);MmReleasePageOp(PageOp);return(STATUS_PAGEFILE_QUOTA);//因倒换页面不够而失败}}/** Write the page to the pagefile*/Status = MmWriteToSwapPage(SwapEntry, Page);//将物理页面的内容写入倒换页面if (!NT_SUCCESS(Status)){//写文件失败DPRINT1("MM: Failed to write to swap page (Status was 0x%.8X)\n",Status);MmEnableVirtualMapping(AddressSpace->Process, Address);//恢复原来的映射PageOp->Status = STATUS_UNSUCCESSFUL;KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);MmReleasePageOp(PageOp);return(STATUS_UNSUCCESSFUL);}/** Otherwise we have succeeded, free the page1 写倒换文件成功*/DPRINT("MM: Swapped out virtual memory page 0x%.8X!\n", Page << PAGE_SHIFT);MmLockAddressSpace(AddressSpace);MmDeleteVirtualMapping(AddressSpace->Process, Address, FALSE, NULL, NULL);//撤销通往目标物理页面的映射MmCreatePageFileMapping(AddressSpace->Process, Address, SwapEntry);//建立(虚存页面)通往倒换文件的映射MmUnlockAddressSpace(AddressSpace);MmDeleteAllRmaps(Page, NULL, NULL);MmSetSavedSwapEntryPage(Page, 0);//该物理页面不再映射到倒换文件MmReleasePageMemoryConsumer(MC_USER, Page);//释放该物理页面PageOp->Status = STATUS_SUCCESS;KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);MmReleasePageOp(PageOp);return(STATUS_SUCCESS);
}

先通过 MmGetSavedSwapEntryPage()获取(本页面)在页面倒换文件中的页面号。如果本页面在倒换文件中尚无映像,就通过MmAllocSwapPage()加以分配。然后就由MmWriteToSwapPage()将物理页面的内容写入倒换文件。此后的操作就无须赘述了,不过需要说明一点,就是MmCreatePageFileMapping()在将SwapEntry写入相应虚存页面的PTE,时要将其左移一位,使得PTE的最低位即PA_PRESENT位为0,说明该页面不在物理内存中。在哪里呢?只要整个PTE非0,就说明在某个倒换文件的某个页面中,此时的高31位就是倒换文件号与页面号的组合。显然,这个组合不能为0,这就是为什么这个组合中的页面号实际上是(文件内)页面号加1的原因。
关于页面映射表,还要作些说明。当内核调度一个进程运行时,需要将控制寄存器CR3设置成指向这个进程的页面映射表,此时使用的是页面映射表的物理地址,这样MMU才能找到当前进程的页面映射表,并进而将具体的表项PTE装入其高速缓存TLB。但是,如果是CPU要访问当前进程的页面映射表,则需使用其虚拟地址。不管是什么进程,其页面映射表在虚存空间的位置都是固定的,都是 0xc0000000。凡是在程序中需要访问本进程的页面映射表时,总是用这个地址作为起点。当然,对于不同的当前进程,这个虚拟地址会映射到不同的物理页面中,不同进程的页面映射表所在的物理页面当然是不同的。

http://www.yayakq.cn/news/166315/

相关文章:

  • 永久免费建个人网站为网站网站做推广
  • 百度网站推广怎么样网站开发开始阶段的主要任务包括( )。
  • 网络网站如何推广青浦人才网官网
  • meetsh网站建设wordpress菜单跳转
  • 爱站网站长seo综合查询手机怎么发wordpress
  • 合肥专业做网站的公司有哪些东道设计作品
  • 网站建设是管理费用的哪项费用网站推广营销怎么做
  • 网站地区词优化二维码制作生成器
  • 景观毕业设计作品网站西安网站到首页排名
  • 室内装修网站html源码 企业境外网站在国内做镜像
  • 网站建设类的手机软件怎么样做推广最有效
  • 事业单位网站开发工作规程青岛做网站建设价格
  • 网站建设 中企动力福州阀门网站管理员中心
  • 昆明购物网站建设招聘海报制作软件app免费
  • 长沙网站建设长沙网站制作厦门网页制作模板
  • 个人微信公众号怎么做微网站wordpress页面点赞
  • 0基础网站建设教程视频好的文化网站模板下载
  • 鹰潭北京网站建设2021不良正能量免费网站app
  • 金融网站建设公司制作企业网站得多长时间
  • 响应网站先做电脑端无限资源免费观看大全
  • 如何说服客户做网站优化seo方案
  • 建设学校网站方案佛山企业用seo策略
  • 东莞网站忧化怎么才能成功做网站
  • 三明网站开发网站顶部菜单下拉固定
  • 功能型网站 设计Python做网站 性能
  • 桥头做网站网站建设如何选择良好的服务器
  • 阿里云可以做网站么有专门学做衣服网站
  • 响应式网站制设计深圳市中心最繁华区
  • 网站建设搭建专业网站平台公司潍坊360做网站怎么样
  • cc网站域名注册roseonly企业网站优化