虚拟地址空间
  
  ​ 当处理器读取或写入存储器位置时,它使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存具有以下优势:
  
  程序可以使用连续范围的虚拟地址来访问在物理内存中不连续的大内存缓冲区。
  
  程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。随着物理内存的供应变小,内存管理器将物理内存页(通常为4000 bytes)保存到磁盘文件中。根据需要,在物理内存和磁盘之间移动数据页或代码页。
  
  不同进程使用的虚拟地址彼此隔离。一个进程中的代码不能改变另一个进程或操作系统正在使用的物理内存。
  
  进程可用的虚拟地址范围称为进程的虚拟地址空间。每个用户模式进程都有自己的私有虚拟地址空间。对于32位进程,虚拟地址空间通常为2千兆字节范围0x00000000到0x7FFFFFFF。对于64位进程,虚拟地址空间为8 TB,范围为0x000’00000000到0x7FF’FFFFFFFF。一系列虚拟地址有时称为一系列虚拟内存。
  
  此图说明了虚拟地址空间的一些关键功能。
  
  virtualaddressspace01
  
  该图显示了两个64位进程的虚拟地址空间:Notepad.exe和MyApp.exe。
  
  ​ 每个进程都有自己的虚拟地址空间,从0x000’0000000到0x7FF’FFFFFFFF。每个阴影块表示一页(4千字节大小)的虚拟或物理内存。
  
  ​ 注意,记事本进程使用三个连续的虚拟地址页面,从0x7F7’93950000开始。但是这三个连续的虚拟地址页面被映射到物理内存中的不连续页面。另请注意,两个进程都使用从0x7F7’93950000开始的虚拟内存页面,但这些虚拟页面映射到物理内存的不同页面。
  
  用户空间和系统空间
  
  ​ Notepad.exe和MyApp.exe等进程在用户模式下运行。核心操作系统组件和许多驱动程序在更特权的内核模式下运行。每个用户模式进程都有自己的专用虚拟地址空间,但所有以内核模式运行的代码都共享一个称为系统空间的虚拟地址空间。用户模式进程的虚拟地址空间称为用户空间。
  
  ​ 在32位Windows中,总可用虚拟地址空间为2 ^ 32bytes(4gigabytes 节)。通常,较低的2gigabytes 字节用于用户空间,而较高的2千兆字节用于系统空间。
  
  ![virtualaddressspace02]img\virtualaddressspace02.png)
  
  在32位Windows中,您可以选择(在启动时)指定超过2千兆字节可用于用户空间。结果是可用于系统空间的虚拟地址更少。您可以将用户空间的大小增加到3千兆字节,在这种情况下,系统空间只有1千兆字节可用。
  
  在64位Windows中,理论上的虚拟地址空间量为2 ^ 64bytes(16exabytes ),但实际上只使用了16-exabyte范围的一小部分。从0x000’00000000到0x7FF’FFFFFFFF的8TB范围用于用户空间,并且从0xFFFF0800’00000000到0xFFFFFFFF’FFFFFFFF的248TB范围的部分用于系统空间。
  
  def process(string):
print('Processing:', string)

# 每次迭代一个字符
with open('fileone.txt') as f:
  while True:
char = f.read(1)
  if not char: break
  process(char)

#每次迭代一行字符
with open('fileone.txt') as f:
while True:
line = f.readline()
process(line)

#读取所有内容,使用read
with open('fileone.www.dasheng178.com txt') as f: for char in f.read():
process(char)

#使用readlines
with open('fileone.txt')www.yongshiyule178.com as f: for char in f.readlines(www.mhylpt.com/):
process(char)

# 使用fileinput实现延迟迭代,读取实际需要文本的部分
import fileinput
for line in fileinput.input(www.fengshen157.com 'fileone.txt'):
process(line)
  
  在用户模式下运行的代码可以访问用户空间,但无权访问系统空间。此限制可防止用户模式代码读取或更改受保护的操作系统数据结构。在内核模式下运行的代码可以访问用户空间和系统空间。也就是说,以内核模式运行的代码可以访问系统空间和当前用户模式进程的虚拟地址空间。
  
  在内核模式下运行的驱动程序必须非常小心,直接读取或写入用户空间中的地址。这个场景说明了原因。
  
  用户模式程序启动从设备读取某些数据的请求。程序提供缓冲区的起始地址以接收数据。
  
  在内核模式下运行的设备驱动程序例程启动读取操作并将控制权返回给其调用者。
  
  稍后,设备会中断当前正在运行的任何线程,以表示读取操作已完成。中断由在此任意线程上运行的内核模式驱动程序例程处理,该线程属于任意进程。
  
  此时,驱动程序不得将数据写入步骤1中提供的用户模式程序的起始地址。此地址位于发起请求的进程的虚拟地址空间中,这很可能与目前的进程。
  
  分页池和非分页池
  
  ​ 在用户空间中,可以根据需要将所有物理内存页面分页到磁盘文件。在系统空间中,某些物理页面可以被分页,而其他物理页面则不能。系统空间有两个用于动态分配内存的区域:分页池和非分页池。
  
  可以根据需要将页面缓冲池中分配的内存分页到磁盘文件中。在非分页池中分配的内存永远不能分页到磁盘文件。

Windows地址空间的更多相关文章

  1. .NET方向高级开发人员面试时应该事先考虑的问题

    (澄清一下,我发帖的目的不是用来专门给人评价这些问题的好坏的,实际上我所在 的公司就考察这些问题.而能够基本上答出来的可以说百里挑一.如果各位觉得这些问题很简单,那么基本上在.NET面试环节就没有什么 ...

  2. 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...

  3. 【转】牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...

  4. 面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...

  5. 笔试、面试重点总结:WIN32、MFC与Linux

    win32 1. Win32应用程序的基本类型. 2. 创建win32窗口程序的几个步骤,及使用到的函数. 3. nmake 与 makefile. 4. 有哪些字符集? Win32对于各种字符集如何 ...

  6. C#精华面试题及答案 三

    PS.学了两三年的软件开发到头来发现连一些基本的东西都没掌握,通过面试题来检验自己的水平,让学习变得更加有方向性,也为将来择业而打下基础,不至于到时候手忙脚乱. 一.选择,填空题 1. 在ADO.NE ...

  7. Asp.net简单概念知识

    1. 简述 private. protected. public. internal 修饰符的访问权限.答 . private :   私有成员, 在类的内部才可以访问.      protected ...

  8. C-sharp精华面试题

    注:红色表示答案 一.选择,填空题 1.  在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(C). a)   ...

  9. C# 面试题 (一)

    一.C# 理论 1.1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 private : 私有成员, 在类 ...

随机推荐

  1. 洛谷P1220 关路灯【区间dp】

    题目:https://www.luogu.org/problemnew/show/P1220 题意:给定n盏灯的位置和功率,初始时站在第c盏处. 关灯不需要时间,走的速度是1单位/秒.问把所有的灯关掉 ...

  2. Java构造方法经典例题

    1.在程序中,经常要对时间进行操作,但是并没有时间类型的数据.那么,我们可以自己实现一个时间类,来满足程序中的需要. 定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute) ...

  3. vue组件-使用插槽分发内容(slot)

    slot--使用插槽分发内容(位置.槽口:作用: 占个位置) 官网API: https://cn.vuejs.org/v2/guide/components.html#使用插槽分发内容 使用组件时,有 ...

  4. jfinal excel表导出

    在自己的WEB项目中要用到导出Excel,所以结合网络上的资源写了一个自己的export 工具类. 说明: JFinal 环境 WEB项目 JAVA后台生成非JS插件 好了,直接撸代码 1.设置文件保 ...

  5. linux分区之ext2,ext3,ext4,gpt

    linux分区之ext2,ext3,ext4,gpt 2013-07-10 12:00:24 标签:ext3 gpt 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明 ...

  6. P4747 D’s problem(d)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题 描述 题目描述 小D是一名魔法师,它最喜欢干的事就是对批判记者了. 这次记者招待会上,记者对 ...

  7. .net core IdentityServer4 使用query参数

    基本用法请参考官方文档:https://identityserver4.readthedocs.io/en/latest/index.html 这里不对具体用法进行说明,一般情况下,Startup添加 ...

  8. 【CSS】非常简单的css实现div悬浮页面底部

    <div id="demo_div"></div> <style> #demo_div{ left:; position: fixed; bot ...

  9. phpstudy配置SSL证书的步骤(Apache环境)以及一些注意事项

    准备工具(我自己的): 腾讯云的域名和云主机,还有SSL证书,以及phpstudy 首先要下载自己的SSL证书,会得到一个压缩包,解压以后会得到四个文件夹和一个csr文件, Apache文件夹内三个文 ...

  10. js中如何把RGB颜色转换为16进制颜色

    将RGB颜色值转换为16进制颜色值,主要是将 R.G.B 值分别转换为对应的十六进制值,填入 #RRGGBB 中. 推荐在线颜色转换工具:http://www.ecjson.com/rgbhex/ 例 ...