⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handbook.htm

📁 虚地址空间基于文件OS内核源代码和文件
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<html>

<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>编程手册</title>
<meta name="Microsoft Theme" content="axis 111, default">
<meta name="Microsoft Border" content="tlb, default">
</head>

<body background="../_themes/axis/axibkgnd.gif" bgcolor="#FFFFFF" text="#000000" link="#00CC00" vlink="#996666" alink="#FF9933"><!--msnavigation--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td><!--mstheme--><font face="宋体">

<center>
<h1><!--mstheme--><font color="#666633">

<!--mstheme--></font></h1>
<!--msthemeseparator--><p align="center"><img src="../_themes/axis/aaxirule.gif" width="600" height="10"></p></center>

<!--mstheme--></font></td></tr><!--msnavigation--></table><!--msnavigation--><table dir="ltr" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td valign="top" width="1%"><!--mstheme--><font face="宋体">

<p><font face="Trebuchet MS" size="4">

</font></p>

<!--mstheme--></font></td><td valign="top" width="24"></td><!--msnavigation--><td valign="top"><!--mstheme--><font face="宋体">

<h1 align="center" style="text-align: center; line-height: 125%"><!--mstheme--><font color="#666633">
<span style="font-family: 宋体">编程手册</span><!--mstheme--></font></h1>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">1</span><span style="font-family: 宋体">虚地址空间基于文件操作系统中应用程序编程模型</span><!--mstheme--></font></h3>
<p class="MsoBodyTextIndent" style="line-height: 125%">
<span style="font-family: 宋体">
和传统操作系统相比,虚地址空间基于文件操作系统具有不同的体系结构,因此也就具有不同的编程模型,其和传统操作系统最大的不同就是:虚地址空间基于文件操作系统实现了单一数据存储模型,实现了数据存储、数据计算和资源管理的分离。</span></p>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">1.</span><span style="font-family: 宋体">1单一数据存储模型</span><!--mstheme--></font></h3>
<p class="MsoBodyTextIndent" style="line-height: 125%">
<span style="font-family: 宋体">
在虚地址空间基于文件操作系统中,所有的数据都存在于文件中,线程就通过虚拟地址空间直接访问文件数据,内存的作用仅仅实现对文件数据的缓冲。当应用程序访问文件数据时,如果文件数据在内存中不存在,线程将产生一个异常(存储访问失效异常),异常处理程序调用内存管理器,内存管理器分配页框,再迁移至文件系统进程或者调用驱动程序执行文件数据的读写,当线程从文件系统或者驱动程序返回内存管理器后,内存管理器建立地址映射,因此当从内存管理器返回后,线程就可以通过虚拟地址空间直接访问文件数据了。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 41.25pt">
<span lang="EN-US">1.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">虚拟地址空间和文件窗口的对应关系</span></p>
<p class="MsoBodyTextIndent" style="line-height: 125%">
<span style="font-family: 宋体">在我们当前的实现中,在4</span><span lang="EN-US">G</span><span style="font-family: 宋体">的虚拟地址空间(线性地址空间)中,0-3G分别对应线程的六个已经打开的文件窗口,高端的一个</span><span lang="EN-US">G</span><span style="font-family: 宋体">由操作系统使用。如果线程运行于核心态(0态),线程也可以访问高端的数据;如果线程运行于用户态(3态),线程仅仅可以访问高端的操作系统代码(读取或执行),不能访问操作系统数据。</span></p>
<p class="MsoBodyTextIndent" style="line-height: 125%"><span lang="EN-US">LDT</span><span style="font-family: 宋体">没有使用,在</span><span lang="EN-US">GDT</span><span style="font-family: 宋体">中,仅仅包含20项内容。描述符</span><span lang="EN-US">0</span><span style="font-family: 宋体">未用,描述符</span><span lang="EN-US">0x08</span><span style="font-family: 宋体">指向任务的</span><span lang="EN-US">tss</span><span style="font-family: 宋体">,描述符</span><span lang="EN-US">0x10</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x18</span><span style="font-family: 宋体">直接映射到</span><span lang="EN-US">4G</span><span style="font-family: 宋体">的线性地址空间,只能在核心态下使用,描述符</span><span lang="EN-US">0x10</span><span style="font-family: 宋体">用于读取和执行,描述符</span><span lang="EN-US">0x18</span><span style="font-family: 宋体">用于读取和修改。</span></p>
<p class="MsoBodyTextIndent" style="line-height: 125%">
<span style="font-family: 宋体">描述符</span><span lang="EN-US">0x23</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x2b</span><span style="font-family: 宋体">及其以下的描述符由运行于用户态的应用程序使用,描述符</span><span lang="EN-US">0x23</span><span style="font-family: 宋体">映射区域从线性地址0至操作系统代码的终止,因此通过描述符</span><span lang="EN-US">0x23</span><span style="font-family: 宋体">,应用程序可以读取和执行操作系统内核代码,但是不能修改操作系统内核代码,也不能访问操作系统数据。描述符</span><span lang="EN-US">0x2b</span><span style="font-family: 宋体">映射区域从线性地址0开始,长度为</span><span lang="EN-US">3G+8K</span><span style="font-family: 宋体">,低端的</span><span lang="EN-US">3G</span><span style="font-family: 宋体">对应六个文件窗口,每个文件最大长度窗口为</span><span lang="EN-US">512M</span><span style="font-family: 宋体">,</span><span lang="EN-US">3G</span><span style="font-family: 宋体">-</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+</span><span lang="EN-US">4K</span><span style="font-family: 宋体">的页面用于向操作系统内核传递参数。当线程调用内核提供的系统功能调用时,如果需要传递的参数很多,无法全部放在寄存器,则把其它的参数放在</span><span lang="EN-US">3G</span><span style="font-family: 宋体">-</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+</span><span lang="EN-US">4K</span><span style="font-family: 宋体">的页面中。</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+</span><span lang="EN-US">4K</span><span style="font-family: 宋体">-</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+8</span><span lang="EN-US">K</span><span style="font-family: 宋体">的页面由文件系统使用,当内存管理器通过线程迁移调用请求文件系统执行文件读写时,文件系统不需要知道数据的具体存放位置,只需从区间</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+</span><span lang="EN-US">4K</span><span style="font-family: 宋体">-</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+</span><span lang="EN-US">8K</span><span style="font-family: 宋体">读或向区间</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+</span><span lang="EN-US">4K</span><span style="font-family: 宋体">-</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+8</span><span lang="EN-US">K</span><span style="font-family: 宋体">写即可。</span></p>
<p class="MsoBodyTextIndent" style="line-height: 125%">
<span style="font-family: 宋体">描述符</span><span lang="EN-US">0x033</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x03b</span><span style="font-family: 宋体">,描述符</span><span lang="EN-US">0x043</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x04b</span><span style="font-family: 宋体">,描述符</span><span lang="EN-US">0x053</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x05b</span><span style="font-family: 宋体">,描述符</span><span lang="EN-US">0x063</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x06b</span><span style="font-family: 宋体">,描述符</span><span lang="EN-US">0x073</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x07b</span><span style="font-family: 宋体">,描述符</span><span lang="EN-US">0x083</span><span style="font-family: 宋体">、</span><span lang="EN-US">0x08b</span><span style="font-family: 宋体">分别对应六个文件窗口,描述符</span><span lang="EN-US">0x0X3</span><span style="font-family: 宋体">用于读取和执行,描述符</span><span lang="EN-US">0x0Xb</span><span style="font-family: 宋体">用于读取和修改。</span></p>
<p class="MsoBodyTextIndent" style="line-height: 125%">
<span style="font-family: 宋体">描述符</span><span lang="EN-US">0x093</span><span style="font-family: 宋体">、描述符</span><span lang="EN-US">0x09b</span><span style="font-family: 宋体">分别映射至线性地址</span><span lang="EN-US">3G</span><span style="font-family: 宋体">-</span><span lang="EN-US">3G</span><span style="font-family: 宋体">+8</span><span lang="EN-US">K</span><span style="font-family: 宋体">的两个页面。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 41.25pt">
<span lang="EN-US">2.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">和文件有关的几个概念</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">
存储体:在虚地址空间基于文件操作系统中,把物理地址空间划分为几个存储体,每个存储体由一个内存管理器负责管理和维护(内存管理器是一个在核心态下运行的程序),应用程序打开文件窗口时需要确定在哪个存储体中打开文件窗口,当发生存储访问失效异常时,操作系统系统内核利用存储体信息确定线程迁移到哪个进程。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">
系统文件窗口:内存管理器管理和维护的文件窗口。当打开文件时,内存管理器建立系统文件窗口。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">线程文件窗口:当线程运行时,对线程而言,</span><span lang="EN-US">GDT</span><span style="font-family: 宋体">中各个段描述符对应的文件窗口</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">进程文件窗口:当线程运行时,对进程而言,</span><span lang="EN-US">GDT</span><span style="font-family: 宋体">中各个段描述符对应的文件窗口。当线程访问地址空间中的数据时,如果当前进程设定了进程文件窗口,访问进程文件窗口中的数据,否则访问线程文件窗口中的数据。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 41.25pt">
<span lang="EN-US">3.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">和文件窗口有关的几个系统功能调用</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">设置进程文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验(</span><span lang="EN-US">21</span><span style="font-family: 宋体">号功能):该系统功能调用用来建立进程文件窗口和系统文件窗口的对应关系,同时设置进程文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">设置线程文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验(</span><span lang="EN-US">22</span><span style="font-family: 宋体">号功能):该系统功能调用用来建立线程文件窗口和系统文件窗口的对应关系,同时设置线程文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 62.25pt">
<span lang="EN-US" style="font-family: Wingdings">l<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">检查线程是否可以访问某个文件窗口:只有进程文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验和系统文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验相同,或者线程文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验和系统文件窗口的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">校验相同,应用程序才能访问相应的系统文件窗口。</span></p>
<p class="MsoBodyTextIndent" style="text-indent: -21.0pt; line-height: 125%; margin-left: 41.25pt">
<span lang="EN-US">4.<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7.0pt; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体">
进程文件窗口和系统文件窗口的对应关系,线程文件窗口和系统文件窗口的对应关系:当应用程序在系统中运行时,如果访问虚拟地址空间对应的文件窗口,系统首先判断相应的进程文件窗口和系统文件窗口的对应关系,判断二者的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">是否相同,如果相同则认为应用程序访问进程文件窗口对应的系统文件窗口,否则判断相应的线程文件窗口和系统文件窗口的对应关系,判断二者的</span><span lang="EN-US">capability</span><span style="font-family: 宋体">是否相同,如果相同则认为应用程序访问线程文件窗口对应的系统文件窗口,否则说明应用程序不能访问虚拟地址空间对应的文件窗口。</span></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -