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

📄 handbook.htm

📁 介绍操作系统的毕业论文
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<span lang="EN-US">call_kernel(&amp;r);</span></p>
<p class="MsoNormalIndent" style="line-height: 125%">
<span style="font-family: 宋体">}</span></p>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">3</span><span style="font-family: 宋体">内核中系统功能调用的格式</span><!--mstheme--></font></h3>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">3.1</span><span style="font-family: 宋体">线程迁移:</span><span lang="EN-US">0</span><span style="font-family: 宋体">号功能</span><!--mstheme--></font></h3>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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><span lang="EN-US">ax.</span><span style="font-family: 宋体">寄存器的值为零,</span><span lang="EN-US">bx</span><span style="font-family: 宋体">寄存器的绝对值为进程</span><span lang="EN-US">ID</span><span style="font-family: 宋体">。</span></p>
<p class="MsoNormal" style="text-indent: 23.75pt; line-height: 125%; margin-left: 42.0pt">
<span style="font-family: 宋体">如果当前的进程为管程,</span><span lang="EN-US">bx&gt;0</span><span style="font-family: 宋体">表示线程离开当前进程进入目标进程后,允许其它线程进入当前进程;</span><span lang="EN-US">bx 
&lt;0</span><span style="font-family: 宋体">表示即使线程迁移离开当前进程进入目标进程,也不允许其它线程进入当前进程,因此当线程从目标进程返回后,可以保证数据的一致性;</span><span lang="EN-US">bx</span><span style="font-family: 宋体">=</span><span lang="EN-US">0</span><span style="font-family: 宋体">为非法。</span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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><span lang="EN-US">ax.</span><span style="font-family: 宋体">寄存器的值小于零,表示失败;否则,</span><span lang="EN-US">ax.</span><span style="font-family: 宋体">寄存器的值为同时返回了几次,因此如果大于零也表示失败;</span><span lang="EN-US">bx.</span><span style="font-family: 宋体">寄存器的值为</span><span lang="EN-US">TRUE</span><span style="font-family: 宋体">表示正常返回,为</span><span lang="EN-US">FALSE</span><span style="font-family: 宋体">表示异常返回(例如,线程在目标进程中运行时发生了不可恢复的异常而返回)。</span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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">#include”../include/os.h”</span></p>
<p class="MsoNormalIndent" style="line-height: 125%; margin-left: 42.0pt">
<span lang="EN-US">{</span></p>
<p class="MsoNormalIndent" style="line-height: 125%"><span lang="EN-US">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REG r;</span></p>
<p class="MsoNormal" style="line-height: 125%; margin-left: 21.0pt">
<span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.ax=0;</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt; line-height: 125%; margin-left: 63.0pt">
<span lang="EN-US">r.bx=2;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*</span><span style="font-family: 宋体">迁移至2号进程,从其初始执行点开始运行</span></p>
<p class="MsoNormal" style="line-height: 125%; margin-left: 168.0pt">
<span style="font-family: 宋体">线程离开当前进程进入目标进程后,允许其它线程进入当前进程。</span><span lang="EN-US">*</span><span style="font-family: 宋体">/</span></p>
<p class="MsoNormal" style="line-height: 125%; margin-left: 21.0pt">
<span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call_kernel(&amp;r);</span></p>
<p class="MsoNormal" style="line-height: 125%; margin-left: 21.0pt">
<span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">3.2</span><span style="font-family: 宋体">线程迁移:</span><span lang="EN-US">1</span><span style="font-family: 宋体">号功能</span><!--mstheme--></font></h3>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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><span lang="EN-US">0</span><span style="font-family: 宋体">号功能不同的是:线程不能再次返回到原来的进程中。</span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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><span lang="EN-US">ax.</span><span style="font-family: 宋体">寄存器的值为</span><span lang="EN-US">1</span><span style="font-family: 宋体">,</span><span lang="EN-US">bx</span><span style="font-family: 宋体">寄存器的绝对值为进程</span><span lang="EN-US">ID</span><span style="font-family: 宋体">。</span></p>
<p class="MsoNormal" style="text-indent: 23.75pt; line-height: 125%; margin-left: 42.0pt">
<span style="font-family: 宋体">如果当前的进程为管程,</span><span lang="EN-US">bx&gt;0</span><span style="font-family: 宋体">表示线程离开当前进程进入目标进程后,允许其它线程进入当前进程;</span><span lang="EN-US">bx 
&lt;0</span><span style="font-family: 宋体">表示即使线程迁移离开当前进程进入目标进程,也不允许其它线程进入当前进程。只有对当前进程的管程信号量执行</span><span lang="EN-US">V</span><span style="font-family: 宋体">操作,才能允许其它线程进入当前进程;</span><span lang="EN-US">bx</span><span style="font-family: 宋体">=</span><span lang="EN-US">0</span><span style="font-family: 宋体">为非法。</span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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">#include”../include/os.h”</span></p>
<p class="MsoNormalIndent" style="line-height: 125%; margin-left: 42.0pt">
<span lang="EN-US">{</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt; line-height: 125%; margin-left: 63.0pt">
<span lang="EN-US">REG r;</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt; line-height: 125%; margin-left: 63.0pt">
<span lang="EN-US">r.ax=1;</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt; line-height: 125%; margin-left: 63.0pt">
<span lang="EN-US">r.bx=(-2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*</span><span style="font-family: 宋体">迁移至2号进程,从其初始执行点开始运行</span></p>
<p class="MsoNormal" style="line-height: 125%; margin-left: 168.0pt">
<span style="font-family: 宋体">线程离开当前进程进入目标进程后,不允许其它线程进入当前进程。</span><span lang="EN-US">*</span><span style="font-family: 宋体">/</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt; line-height: 125%; margin-left: 63.0pt">
<span lang="EN-US">call_kernel(&amp;r);</span></p>
<p class="MsoNormalIndent" style="line-height: 125%; margin-left: 42.0pt">
<span lang="EN-US">}</span></p>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">3.3 </span>
<span style="font-family: 宋体">线程迁移(修改线程可以访问的物理页框):</span><span lang="EN-US">2</span><span style="font-family: 宋体">号功能</span><!--mstheme--></font></h3>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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><span lang="EN-US">ax.</span><span style="font-family: 宋体">寄存器的值为</span><span lang="EN-US">2</span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 63.0pt">
<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 lang="EN-US">cx</span><span style="font-family: 宋体">寄存器存放存储体</span><span lang="EN-US">ID</span><span style="font-family: 宋体">,</span><span lang="EN-US">dx</span><span style="font-family: 宋体">寄存器存放参数页框</span><span lang="EN-US">ID</span><span style="font-family: 宋体">,</span><span lang="EN-US">si</span><span style="font-family: 宋体">寄存器存放线程可以直接访问的物理页框</span><span lang="EN-US">ID</span><span style="font-family: 宋体">,其它参数和格式同</span><span lang="EN-US">0</span><span style="font-family: 宋体">号功能。</span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">
<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><span lang="EN-US">0</span><span style="font-family: 宋体">号功能</span></p>
<h3 style="line-height: 125%"><!--mstheme--><font color="#666633"><span lang="EN-US">3.4</span><span style="font-family: 宋体">线程返回:</span><span lang="EN-US">3</span><span style="font-family: 宋体">号功能</span><!--mstheme--></font></h3>
<p class="MsoNormal" style="text-indent: -21.0pt; line-height: 125%; margin-left: 42.0pt">

⌨️ 快捷键说明

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