📄 3。3.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>虚拟存储(3)</title>
<meta name="Microsoft Theme" content="arcs 011">
</head>
<body background="../images/arctile.jpg" bgcolor="#FFFFFF" text="#000000" link="#3399FF" vlink="#666666" alink="#FF9900">
<p align="center"> <font color="#000000"><font size="4">
</font>
</font>
<font size="6">虚拟存储(3) </font><font color="#000000">
</font>
</p>
<p align="right"><font color="#000000"><a href="Index.htm"><img border="0" src="IMAGES/BACK.GIF" align="left" width="60" height="45"></a> <a href="3。2.htm"><img border="0" src="IMAGES/PREV.GIF" width="60" height="45"></a>
<a href="第四节.htm"><img border="0" src="IMAGES/FORW.GIF" width="60" height="45"></a></font>
</p>
<p><font size="4" color="#000000">
</font>
</p>
<p><font size="4" color="#000000"> </font>
<font size="4" color="#000000">4.关于写操作</font>
</p>
<p><font color="#000000" size="4"> 应用copy back技术:当替换页面时,把主存中该页复制回辅存,也叫写回write back)。其优点是:磁盘的传输时间很少,而读写时间很长,所以在虚拟页表中,利用回写比 写通有效的多.为了标志某页是否需写回,可在页表中增加一位修改位(dirty bit)。当dirty位为1时,表示该页正被写入内存。<br>
</font>
</p>
<p><font color="#000000" size="4"> 5.快表TLB(translation –lookaside buffer)</font>
</p>
<p><font color="#000000" size="4"> 页表太大了,必须存放在主存中。这样的话,主存的执行时间就会增加1倍,先是 获得物理地
址,再读取数据。当一个虚页号被使用时,它通常会再度被使用。所以出现了快 表。TLB由CACHE构成,用来存放最近使用的页表项。</font>
</p>
<p><font color="#000000" size="4"> a.构成:TLB由虚页号、实页号、REFERENCE位和DIRTY位构成。</font>
</p>
<p><font color="#000000" size="4"> b.工作过程<br>
<br>
先在快表中找虚页号,如果命中,则实页号用来构成地址并将REFERENCE位置1 (写操作还需将 DIRTY位置1)。如果失效,则需判断是缺页失效,还是TLB失效。如果是缺页失效,则会发生中断。如果仅仅是TLB失效,该页存在与主存中,则需将该页调入快表,重新访问。快表的一些数据特性见下图:</font>
</p>
<div align="center">
<center>
<table border="1" width="73%" bordercolordark="#CC9966" bordercolorlight="#FFCC66">
<tr>
<td width="26%"><font color="#000000" size="4">Block size</font></td>
<td width="74%"><font color="#000000" size="4">1-2 page-table
entries(typically 4-8 bytes each)</font></td>
</tr>
<tr>
<td width="26%"><font color="#000000" size="4">Hit time</font></td>
<td width="74%"><font color="#000000" size="4">1/2 to 1 clock cycle</font></td>
</tr>
<tr>
<td width="26%"><font color="#000000" size="4">Miss penalty</font></td>
<td width="74%"><font color="#000000" size="4">10-30 clock cycles</font></td>
</tr>
<tr>
<td width="26%"><font color="#000000" size="4">Miss rate</font></td>
<td width="74%"><font color="#000000" size="4">0.01%-1%</font></td>
</tr>
<tr>
<td width="26%"><font color="#000000" size="4">TLB size</font></td>
<td width="74%"><font color="#000000" size="4">32-1.024 entries</font></td>
</tr>
</table>
</center>
</div>
<p><font color="#000000" size="4"><br>
c. 写操作</font>
</p>
<p><font color="#000000" size="4"> TLB采用回写的方法,因为我们期望TLB的失效率很低。<br>
</font>
</p>
<p><font color="#000000" size="4"> d. TLB的转换方法</font>
</p>
<p><font color="#000000" size="4"> 大多数的TLB采用全相联,因为全相联的低失效率,而且TLB比较小,代价不会很高。由于快
表的频繁的失效,我们负担不起软件算法。但有一
些系统采用LRU的硬件算法和随 机算法。</font>
</p>
<p><font color="#000000" size="4"> e. 举例(图7.19)</font>
</p>
<p><font color="#000000" size="4"> <img border="0" src="IMAGES/第三5.gif" width="485" height="650"><br>
上图显示了TLB结构和如DECStation 3100中的一个cache结构。TLB共有64个单</font>
</p>
<p><font color="#000000" size="4">
元组成,包含在PROCESSOR中。<br>
</font>
</p>
<p><font color="#000000" size="4"> 6.虚拟存储系统的保护机制。</font>
</p>
<p><font color="#000000" size="4"> 因允许多道程序共享物理存储空间,就存在保护各自的程序不被其他程序冲掉的问题。</font>
</p>
<p><font color="#000000" size="4"> 保护的目的:a.某程序不破坏其他程序执行,也就是保护其他区域</font>
</p>
<p><font color="#000000" size="4">
b.某程序保护自己的正常执行</font>
</p>
<p><font color="#000000" size="4"> 为了存储保护,硬件基本支持是:</font>
</p>
<p><font color="#000000" size="4">
a. 用户与用户进程之间保护<br>
<br>
b. 用户与系统之间的保护</font>
</p>
<p><font color="#000000" size="4">
c. 保护由谁管理-----通常由操作系统管理<br>
</font>
</p>
<p>
<font color="#000000" size="4">
A. 管态和用户态(supervisor mode and user mode)</font>
</p>
<p>
<font color="#000000" size="4"> 指示是核心进程(kernel process),还是user process。</font>
</p>
<p>
<font color="#000000" size="4">
B. 提供访问保护位,指明用户程序只能读,不能写,包括管态/用户态位和页表指针保护位。</font>
</p>
<p>
<font color="#000000" size="4">
C.提供一种状态转换机制,CPU能在用户态和管态
之间进行转换。从用户态转换到管态,由系统调用指令完成。从管态到用户态,由用户进程激活。</font>
</p>
<p><font color="#000000" size="4">
例如在MIPS机中,指令将用户态转换到管态,该指令转换到OS程序执行空间某一单元执行指令。</font>
</p>
<p>
<font color="#000000" size="4">
在页面保护机制中,访问保护有三种形式:读、写、执行。这样可以形成七种方式:<br>
000------不允许任何访问<br>
100------只读<br>
111------均可<br>
110------只许读、写,不许执行<br>
001------只许执行<br>
010------只许写<br>
101------不许写</font>
</p>
<p>
</p>
<p>
<font color="#000000" size="4">7.缺页失效和快表失效处理</font>
</p>
<p><font color="#000000" size="4"> 快表失效时有两种情况:</font>
</p>
<p><font color="#000000" size="4"> (1) 访问页在内存中,只需把该页表项调入快表中<br>
<br>
(2) 访问页不在内存中,则页失效。</font>
</p>
<p><font size="4"><font color="#000000"> 页失效是一种异常中断,需要保护断点,利用EPC(exception program counter)来保护断点。断点应该及时保存,否则会出错。例如LW$1,0($1)
指令,如果不及时阻止在$1中写,就不
能在$1重新取指令。</font></font>
</p>
<p><font color="#000000" size="4"> 如果是缺页中断,则需保护当前进程的现场。指令虚地址在EPC中,数据虚地址要检查指令以找到基地址和偏移段,才能计算出来。</font>
</p>
<p><font color="#000000" size="4"> 缺页中断一般过程如下:</font>
</p>
<p><font color="#000000" size="4"> (1) 利用虚地址查找页表,求出访问页在磁盘上的实际地址。<br>
<br>
(2) 选择一个内存页面,如果该页设置了改写位标志为1,则首先要把该</font>
</p>
<p><font color="#000000" size="4">
页写入磁盘。</font>
</p>
<p><font color="#000000" size="4"> (3) 从磁盘上读取访问页数据,存入选中的物理页面。</font>
</p>
<p><font size="4"><font color="#000000"> 第三步完成后,操作系统恢复缺页中断引起终止进程的状态,继续执行终止 的那条指令,从核心态返回到用户态。</font></font>
</p>
<p><font color="#000000" size="4"> <br>
<br>
<br>
</font>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -