📄 5-4.htm
字号:
<o:entry new="13" old="12"/>
<o:entry new="14" old="12"/>
<o:entry new="15" old="12"/>
<o:entry new="16" old="0"/>
<o:entry new="17" old="0"/>
<o:entry new="18" old="17"/>
<o:entry new="19" old="18"/>
<o:entry new="20" old="19"/>
<o:entry new="21" old="20"/>
<o:entry new="22" old="21"/>
<o:entry new="23" old="22"/>
<o:entry new="24" old="23"/>
<o:entry new="25" old="24"/>
<o:entry new="26" old="0"/>
</o:regrouptable>
</o:shapelayout></xml><![endif]-->
</head>
<body lang=ZH-CN link=blue vlink=purple style='tab-interval:21.0pt;text-justify-trim:
punctuation'>
<div class=Section1 style='layout-grid:15.6pt'>
<p class=MsoNormal align=right style='text-align:right'><a name="_top"></a><b><span
style='font-size:26.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman";color:#993366'>实验</span></b><b><i
style='mso-bidi-font-style:normal'><span lang=EN-US style='font-size:55.0pt;
mso-bidi-font-size:12.0pt;color:#993366'>5</span></i><span lang=EN-US
style='color:#993366'><o:p></o:p></span></b></p>
<p class=MsoNormal align=right style='text-align:right;word-break:break-all'><!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_s1609" type="#_x0000_t75" style='position:absolute;
left:0;text-align:left;margin-left:0;margin-top:0;width:546.85pt;height:34.15pt;
z-index:-1;mso-wrap-edited:f;mso-position-horizontal:left;
mso-position-vertical:top;mso-position-vertical-relative:line' wrapcoords="-26 0 -26 21176 21600 21176 21600 0 -26 0"
o:allowoverlap="f">
<v:imagedata src="5-4.files/image001.jpg" o:title="image_bk"/>
<w:wrap type="square" anchorx="page"/>
</v:shape><![endif]--><![if !vml]><img width=729 height=46
src="5-4.files/image002.jpg" align=left hspace=12 v:shapes="_x0000_s1609"><![endif]><b><span
style='font-size:24.0pt;mso-bidi-font-size:12.0pt;font-family:黑体;mso-ascii-font-family:
"Times New Roman";color:navy'>存储管理</span></b><b><span lang=EN-US
style='font-size:16.0pt;mso-bidi-font-size:12.0pt;mso-fareast-font-family:黑体;
color:navy'><span style='mso-spacerun:yes'> </span></span></b></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<h2><a name="_Toc45715750"><span lang=EN-US>5.4<span
style='mso-spacerun:yes'> </span>Linux用户程序的内存管理</span></a></h2>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US><span
style='mso-spacerun:yes'> </span>(</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>实验估计时间:</span><span
lang=EN-US>90</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>分钟</span><span lang=EN-US>)</span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo2;
tab-stops:list 21.0pt'><![if !supportLists]><span lang=EN-US style='font-family:
Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings;
mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>Ø<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><b><span lang=EN-US><a href="#_背景知识"><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>背景知识</span></a><o:p></o:p></span></b></p>
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo2;
tab-stops:list 21.0pt'><![if !supportLists]><span lang=EN-US style='font-family:
Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings;
mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>Ø<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><b><span lang=EN-US><a href="#_实验目的"><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>实验目的</span></a><o:p></o:p></span></b></p>
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo2;
tab-stops:list 21.0pt'><![if !supportLists]><span lang=EN-US style='font-family:
Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings;
mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>Ø<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><b><span lang=EN-US><a href="#_工具/准备工作"><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>工具</span>/<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>准备工作</span></a><o:p></o:p></span></b></p>
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo2;
tab-stops:list 21.0pt'><![if !supportLists]><span lang=EN-US style='font-family:
Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings;
mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>Ø<span
style='font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><b><span lang=EN-US><a href="#_实验内容与步骤"><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>实验内容与步骤</span></a><o:p></o:p></span></b></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<h3><a name="_Toc45715751"></a><a name="_背景知识"></a><span style='mso-bookmark:
_Toc45715751'>背景知识</span></h3>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>现代操作系统允许多个程序同时运行,因此,内存中需要同时存放这些程序。操作系统采用的存储管理方案主要有分区式存储管理、分页式存储管理、分段式存储管理和段页式存储管理等。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>本实验以一个</span><span
lang=EN-US>Linux</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>实例程序说明应用程序如何通过系统调用来管理自己用的空闲内存,目的在于加深读者对操作系统存储管理内容的理解。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>本实验实例由</span><span
lang=EN-US>my-<span class=SpellE>malloc.h</span></span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>、</span><span
lang=EN-US>my-<span class=SpellE>malloc.c</span></span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>和</span><span
class=SpellE><span lang=EN-US>test.c</span></span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>三个文件组成。为阅读程序方便,对其中的主要函数作了说明,读者可结合程序注释理解该程序。</span><span
lang=EN-US style='color:blue'><a href="#_top"><span style='text-decoration:
none;text-underline:none'><!--[if gte vml 1]><v:shape id="_x0000_i1025" type="#_x0000_t75"
style='width:45pt;height:17.25pt'>
<v:imagedata src="5-4.files/image003.gif" o:title="02"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=60 height=23
src="5-4.files/image003.gif" v:shapes="_x0000_i1025"><![endif]></span></a></span></p>
<h3><a name="_Toc45715752"></a><a name="_实验目的"></a><span style='mso-bookmark:
_Toc45715752'>实验目的</span></h3>
<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>1) </span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>了解通过利用操作系统调用实现用户程序分配内存以及回收所用内存的程序过程,加深对操作系统存储管理机制的理解。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>2) </span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>通过阅读和分析</span><span lang=EN-US>Linux</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>实验程序,学习</span><span lang=EN-US>Linux</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>程序设计、调试和运行的方法。</span><span lang=EN-US style='color:blue'><a
href="#_top"><span style='text-decoration:none;text-underline:none'><!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" style='width:45pt;height:17.25pt'>
<v:imagedata src="5-4.files/image003.gif" o:title="02"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=60 height=23
src="5-4.files/image003.gif" v:shapes="_x0000_i1026"><![endif]></span></a></span></p>
<h3><a name="_Toc45715753"></a><a name="_工具/准备工作"></a><span style='mso-bookmark:
_Toc45715753'>工具<span lang=EN-US>/准备工作</span></span></h3>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>在开始本实验之前,请回顾教科书的相关内容。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>需要准备一台运行</span><span
lang=EN-US>Linux</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>操作系统的计算机。</span><span lang=EN-US
style='color:blue'><a href="#_top"><span style='text-decoration:none;
text-underline:none'><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
style='width:45pt;height:17.25pt'>
<v:imagedata src="5-4.files/image003.gif" o:title="02"/>
</v:shape><![endif]--><![if !vml]><img border=0 width=60 height=23
src="5-4.files/image003.gif" v:shapes="_x0000_i1027"><![endif]></span></a></span></p>
<h3><a name="_Toc45715754"></a><a name="_实验内容与步骤"></a><span style='mso-bookmark:
_Toc45715754'>实验内容与步骤</span></h3>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>本实验程序主要定义了一个描述自由存储块的结构,每一个<span
class=GramE>自由块都</span>包含块的大小、指向下一块的指针<span class=GramE>以及块区本身</span>,所有的<span
class=GramE>自由块以</span>地址增加顺序排列,并用链表链接起来。这一链表是本程序维护的一个空闲区域,对于操作系统的当前记录来说是已分出去的区域。因为本程序是运行在用户态的程序。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><b style='mso-bidi-font-weight:
normal'><span style='font-family:楷体_GB2312;mso-ascii-font-family:"Times New Roman"'>步骤</span></b><b
style='mso-bidi-font-weight:normal'><span lang=EN-US style='mso-fareast-font-family:
楷体_GB2312'>1</span></b><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:单击红帽子,在“</span><span lang=EN-US>GNOME</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>帮助”菜单中单击“附件”</span><span lang=EN-US>-</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>“文本编辑器”命令,在文本编辑中键入清单</span><span lang=EN-US>5-4</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>程序并保存为</span><span lang=EN-US>my-<span class=SpellE>malloc.h</span></span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>。</span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt;font-family:黑体'><span
style='mso-spacerun:yes'> </span>清单5-4<span
style='mso-spacerun:yes'> </span>my-<span class=SpellE>malloc.h</span>文件<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'> </span># include <<span
class=SpellE>stdlib.h</span>><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'> </span><span
class=SpellE><span class=GramE>typedef</span></span> long Align;<span
style='mso-tab-count:5'> </span>/*
for alignment to long boundary */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'> </span><span
class=GramE>union</span> header {<span style='mso-tab-count:6'> </span>/*
block header: */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'>
</span><span class=SpellE><span class=GramE>struct</span></span> {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'>
</span><span class=GramE>union</span> header *next;<span style='mso-tab-count:
3'> </span>/*
next block if on Free list */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'>
</span><span class=GramE>unsigned</span> <span class=SpellE>int</span> size;<span
style='mso-tab-count:4'> </span>/*
size of this block */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'>
</span>} s;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='font-size:9.0pt'><span
style='mso-spacerun:yes'>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -