虚拟地址空间
  
  ​ 当处理器读取或写入存储器位置时,它使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存具有以下优势:
  
  程序可以使用连续范围的虚拟地址来访问在物理内存中不连续的大内存缓冲区。
  
  程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。随着物理内存的供应变小,内存管理器将物理内存页(通常为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. 【转】iOS学习笔记(八)——iOS网络通信http之NSURLConnection

    移动互联网时代,网络通信已是手机终端必不可少的功能.我们的应用中也必不可少的使用了网络通信,增强客户端与服务器交互.这一篇提供了使用NSURLConnection实现http通信的方式. NSURLC ...

  2. Airflow 调度基础

    1. Airflow Airflow是一个调度.监控工作流的平台.用于将一个工作流制定为一组任务的有向无环图(DAG),并指派到一组计算节点上,根据相互之间的依赖关系,有序执行. 2. 安装 pip安 ...

  3. python __getattr__ __setattr__

    class Rectangle: def __init__(self): self.width = 0 self.height = 0 def __setattr__(self, key, value ...

  4. python_31_集合

    # 集合是一个无序的,不重复的数据组合,它的主要作用如下: # 去重,把一个列表变成集合,就自动去重了 # 关系测试,测试两组数据之前的交集.差集.并集等关系 s = set([3, 5, 9, 10 ...

  5. python_26_dictionary

    #key-value 字典无下标 所以乱序,key值尽量不要取中文 info={ 'stu1101':'Liu Guannan', 'stu1102':'Wang Ruipu', 'stu1103': ...

  6. 如何在Mac上创建.txt文件

    cd ~/Desktoptouch test.txt cd 需要创建的文件夹目录vi 需要创建文件的文件名.txt

  7. click

    click简介 Click是一个Python包,用于以可组合的方式创建漂亮的命令行界面,只需要很少的代码.这是“命令行界面创建工具包”.它具有高度可配置性,但具有开箱即用的合理默认值. 点击三点: 任 ...

  8. OO终章

    一,第四单元架构设计 第一次作业:只有类图 1,重置MyClass,MyOperation等类,为使里面只有必要数据(name,id,visibility等).或方便组织数据(如MyClass作为其底 ...

  9. 安装mysql提示This application requires .NET framework 4.0.

    问题描述:安装MySQL社区版时遇到This application requires .NET framework 4.0. 解决方法:在http://search.microsoft.com/zh ...

  10. 关于微信小程序 textarea组件在fixed定位的模块中随页面移动问题

    具体的情况: 在模拟器中没问题,可是在真机下就出现以下问题,  <textarea  />在一个view盒子中,view盒子是固定定位,页面滑动时候,固定定位的盒子会定在屏幕的相对位置,但 ...