3371 lines
127 KiB
HTML
3371 lines
127 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
|
||
<meta name=Generator content="Microsoft Word 14 (filtered)">
|
||
<style>
|
||
<!--
|
||
/* Font Definitions */
|
||
@font-face
|
||
{font-family:Wingdings;
|
||
panose-1:5 0 0 0 0 0 0 0 0 0;}
|
||
@font-face
|
||
{font-family:宋体;
|
||
panose-1:2 1 6 0 3 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:黑体;
|
||
panose-1:2 1 6 9 6 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:黑体;
|
||
panose-1:2 1 6 9 6 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:方正小标宋简体;}
|
||
@font-face
|
||
{font-family:"\@黑体";
|
||
panose-1:2 1 6 9 6 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:"\@宋体";
|
||
panose-1:2 1 6 0 3 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:"\@方正小标宋简体";}
|
||
/* Style Definitions */
|
||
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
h1
|
||
{mso-style-link:"标题 1 Char";
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:7.2pt;
|
||
text-align:center;
|
||
text-indent:-7.2pt;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
h2
|
||
{mso-style-link:"标题 2 Char";
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:0cm;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:0cm;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
h3
|
||
{mso-style-link:"标题 3 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:0cm;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
h4
|
||
{mso-style-link:"标题 4 Char";
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:28.8pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-28.8pt;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
h5
|
||
{mso-style-link:"标题 5 Char";
|
||
margin-top:14.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:14.5pt;
|
||
margin-left:36.0pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-36.0pt;
|
||
line-height:156%;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
h6
|
||
{mso-style-link:"标题 6 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:43.2pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-43.2pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
|
||
{mso-style-link:"标题 7 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:50.4pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-50.4pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
|
||
{mso-style-link:"标题 8 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:57.6pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-72.0pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
|
||
{mso-style-link:"标题 9 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:64.8pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-79.2pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.MsoIndex1, li.MsoIndex1, div.MsoIndex1
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:10.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex2, li.MsoIndex2, div.MsoIndex2
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex3, li.MsoIndex3, div.MsoIndex3
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:31.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex4, li.MsoIndex4, div.MsoIndex4
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex5, li.MsoIndex5, div.MsoIndex5
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:52.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex6, li.MsoIndex6, div.MsoIndex6
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:63.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex7, li.MsoIndex7, div.MsoIndex7
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:73.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex8, li.MsoIndex8, div.MsoIndex8
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:84.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndex9, li.MsoIndex9, div.MsoIndex9
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:94.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc1, li.MsoToc1, div.MsoToc1
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.MsoToc2, li.MsoToc2, div.MsoToc2
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc3, li.MsoToc3, div.MsoToc3
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc4, li.MsoToc4, div.MsoToc4
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:31.5pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc5, li.MsoToc5, div.MsoToc5
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc6, li.MsoToc6, div.MsoToc6
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:52.5pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc7, li.MsoToc7, div.MsoToc7
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:63.0pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc8, li.MsoToc8, div.MsoToc8
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:73.5pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoToc9, li.MsoToc9, div.MsoToc9
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:84.0pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
|
||
{mso-style-link:"脚注文本 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
|
||
{mso-style-link:"批注文字 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoHeader, li.MsoHeader, div.MsoHeader
|
||
{mso-style-link:"页眉 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
layout-grid-mode:char;
|
||
border:none;
|
||
padding:0cm;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoFooter, li.MsoFooter, div.MsoFooter
|
||
{mso-style-link:"页脚 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoIndexHeading, li.MsoIndexHeading, div.MsoIndexHeading
|
||
{mso-style-name:"索引标题\,索引类目\,索引类目1\,索引类目2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoCaption, li.MsoCaption, div.MsoCaption
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.MsoTof, li.MsoTof, div.MsoTof
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.MsoFootnoteReference
|
||
{vertical-align:super;}
|
||
p.MsoList, li.MsoList, div.MsoList
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoList2, li.MsoList2, div.MsoList2
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoList4, li.MsoList4, div.MsoList4
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.MsoDate, li.MsoDate, div.MsoDate
|
||
{mso-style-link:"日期 Char";
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:5.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
a:link, span.MsoHyperlink
|
||
{mso-style-name:"超链接\,超级链接";
|
||
color:blue;
|
||
text-decoration:underline;}
|
||
a:visited, span.MsoHyperlinkFollowed
|
||
{color:purple;
|
||
text-decoration:underline;}
|
||
p
|
||
{mso-style-name:"普通\(网站\)\,普通 \(Web\)\,普通 \(Web\)1\,普通 \(Web\)2\,普通 \(Web\)3";
|
||
margin-right:0cm;
|
||
margin-left:0cm;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
pre
|
||
{mso-style-name:"HTML 预设格式\,HTML 预先格式化\,HTML 预先格式化1\,HTML 预先格式化2\,HTML 预先格式化3";
|
||
mso-style-link:"HTML 预设格式 Char\,HTML 预先格式化 Char\,HTML 预先格式化1 Char\,HTML 预先格式化2 Char\,HTML 预先格式化3 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
tt
|
||
{font-family:黑体;}
|
||
p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
|
||
{mso-style-link:"批注主题 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
|
||
{mso-style-link:"批注框文本 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.1, li.1, div.1
|
||
{mso-style-name:样式1;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.a, li.a, div.a
|
||
{mso-style-name:代码程序;
|
||
mso-style-link:"代码程序 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
span.Char
|
||
{mso-style-name:"代码程序 Char";
|
||
mso-style-link:代码程序;
|
||
font-family:宋体;}
|
||
p.a0, li.a0, div.a0
|
||
{mso-style-name:图说明;
|
||
mso-style-link:"图说明 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char0
|
||
{mso-style-name:"图说明 Char";
|
||
mso-style-link:图说明;
|
||
font-family:宋体;}
|
||
p.0, li.0, div.0
|
||
{mso-style-name:封面0;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.10, li.10, div.10
|
||
{mso-style-name:封面1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.11, li.11, div.11
|
||
{mso-style-name:非标题1;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.a1, li.a1, div.a1
|
||
{mso-style-name:文本居中;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3CharChar, li.3CharChar, div.3CharChar
|
||
{mso-style-name:"图中文字3 Char Char";
|
||
mso-style-link:"图中文字3 Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.3CharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char";
|
||
mso-style-link:"图中文字3 Char Char";
|
||
font-family:宋体;}
|
||
p.post, li.post, div.post
|
||
{mso-style-name:邮件post;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3, li.3, div.3
|
||
{mso-style-name:图中字体3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.3CharChar1CharCharChar
|
||
{mso-style-name:"图中文字3 Char Char1 Char Char Char";
|
||
font-family:宋体;}
|
||
span.3CharChar1CharChar
|
||
{mso-style-name:"图中文字3 Char Char1 Char Char";
|
||
font-family:宋体;}
|
||
p.5Char, li.5Char, div.5Char
|
||
{mso-style-name:"图中文字5号 Char";
|
||
mso-style-link:"图中文字5号 Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.5CharChar
|
||
{mso-style-name:"图中文字5号 Char Char";
|
||
mso-style-link:"图中文字5号 Char";
|
||
font-family:宋体;}
|
||
p.5CharChar0, li.5CharChar0, div.5CharChar0
|
||
{mso-style-name:"图中文字小5号 Char Char";
|
||
mso-style-link:"图中文字小5号 Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.5CharCharChar
|
||
{mso-style-name:"图中文字小5号 Char Char Char";
|
||
mso-style-link:"图中文字小5号 Char Char";
|
||
font-family:宋体;}
|
||
p.5Char0, li.5Char0, div.5Char0
|
||
{mso-style-name:"图中文字小5号 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5, li.5, div.5
|
||
{mso-style-name:图中文字小5号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.2, li.2, div.2
|
||
{mso-style-name:代码程序2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
p.20, li.20, div.20
|
||
{mso-style-name:图说明2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.21, li.21, div.21
|
||
{mso-style-name:文本居中2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3CharCharCharCharChar, li.3CharCharCharCharChar, div.3CharCharCharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char Char Char";
|
||
mso-style-link:"图中文字3 Char Char Char Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.3CharCharCharCharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char Char Char Char";
|
||
mso-style-link:"图中文字3 Char Char Char Char Char";
|
||
font-family:宋体;}
|
||
p.a2, li.a2, div.a2
|
||
{mso-style-name:图居中;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.110, li.110, div.110
|
||
{mso-style-name:"样式 标题 1 + 居中1";
|
||
margin-right:0cm;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
span.1Char
|
||
{mso-style-name:"标题 1 Char";
|
||
mso-style-link:"标题 1";
|
||
font-weight:bold;}
|
||
p.22, li.22, div.22
|
||
{mso-style-name:"样式 列表 2 + 居中";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.23, li.23, div.23
|
||
{mso-style-name:列表2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.50, li.50, div.50
|
||
{mso-style-name:图中文字5号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.111, li.111, div.111
|
||
{mso-style-name:样式11;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.12, li.12, div.12
|
||
{mso-style-name:代码程序1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
p.13, li.13, div.13
|
||
{mso-style-name:图说明1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.01, li.01, div.01
|
||
{mso-style-name:封面01;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.112, li.112, div.112
|
||
{mso-style-name:封面11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.113, li.113, div.113
|
||
{mso-style-name:非标题11;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.14, li.14, div.14
|
||
{mso-style-name:文本居中1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3Char1, li.3Char1, div.3Char1
|
||
{mso-style-name:"图中文字3 Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.post1, li.post1, div.post1
|
||
{mso-style-name:邮件post1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.31, li.31, div.31
|
||
{mso-style-name:图中字体31;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5Char1, li.5Char1, div.5Char1
|
||
{mso-style-name:"图中文字5号 Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5CharChar1, li.5CharChar1, div.5CharChar1
|
||
{mso-style-name:"图中文字小5号 Char Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5Char10, li.5Char10, div.5Char10
|
||
{mso-style-name:"图中文字小5号 Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.51, li.51, div.51
|
||
{mso-style-name:图中文字小5号1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.120, li.120, div.120
|
||
{mso-style-name:样式12;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.02, li.02, div.02
|
||
{mso-style-name:封面02;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.121, li.121, div.121
|
||
{mso-style-name:封面12;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.122, li.122, div.122
|
||
{mso-style-name:非标题12;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.3Char2, li.3Char2, div.3Char2
|
||
{mso-style-name:"图中文字3 Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.post2, li.post2, div.post2
|
||
{mso-style-name:邮件post2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.32, li.32, div.32
|
||
{mso-style-name:图中字体32;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5Char2, li.5Char2, div.5Char2
|
||
{mso-style-name:"图中文字小5号 Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.52, li.52, div.52
|
||
{mso-style-name:图中文字小5号2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3CharCharCharChar, li.3CharCharCharChar, div.3CharCharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.130, li.130, div.130
|
||
{mso-style-name:样式13;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.30, li.30, div.30
|
||
{mso-style-name:代码程序3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
p.03, li.03, div.03
|
||
{mso-style-name:封面03;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.131, li.131, div.131
|
||
{mso-style-name:封面13;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.132, li.132, div.132
|
||
{mso-style-name:非标题13;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.33, li.33, div.33
|
||
{mso-style-name:文本居中3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3Char3, li.3Char3, div.3Char3
|
||
{mso-style-name:"图中文字3 Char3";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.post3, li.post3, div.post3
|
||
{mso-style-name:邮件post3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.330, li.330, div.330
|
||
{mso-style-name:图中字体33;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5Char20, li.5Char20, div.5Char20
|
||
{mso-style-name:"图中文字5号 Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5CharChar2, li.5CharChar2, div.5CharChar2
|
||
{mso-style-name:"图中文字小5号 Char Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.5Char3, li.5Char3, div.5Char3
|
||
{mso-style-name:"图中文字小5号 Char3";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.53, li.53, div.53
|
||
{mso-style-name:图中文字小5号3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.3Char, li.3Char, div.3Char
|
||
{mso-style-name:"图中文字3 Char";
|
||
mso-style-link:"图中文字3 Char Char5";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.3CharChar5
|
||
{mso-style-name:"图中文字3 Char Char5";
|
||
mso-style-link:"图中文字3 Char";
|
||
font-family:宋体;}
|
||
p.54, li.54, div.54
|
||
{mso-style-name:图中文字小5紧密;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
line-height:9.0pt;
|
||
text-autospace:ideograph-numeric;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.24, li.24, div.24
|
||
{mso-style-name:居中2号粗宋体;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.15, li.15, div.15
|
||
{mso-style-name:"样式 标题 1 + 居中";
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.25, li.25, div.25
|
||
{mso-style-name:"样式 标题 2 + 行距\: 单倍行距";
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:28.9pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-28.9pt;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.2Char
|
||
{mso-style-name:"标题 2 Char";
|
||
mso-style-link:"标题 2";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.34, li.34, div.34
|
||
{mso-style-name:列表3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.35, li.35, div.35
|
||
{mso-style-name:表3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.4, li.4, div.4
|
||
{mso-style-name:图说明4;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.40, li.40, div.40
|
||
{mso-style-name:列表4;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.41, li.41, div.41
|
||
{mso-style-name:表4;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.55, li.55, div.55
|
||
{mso-style-name:图说明5;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.56, li.56, div.56
|
||
{mso-style-name:列表5;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.57, li.57, div.57
|
||
{mso-style-name:表5;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.6, li.6, div.6
|
||
{mso-style-name:列表6;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.60, li.60, div.60
|
||
{mso-style-name:表6;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.61, li.61, div.61
|
||
{mso-style-name:图说明6;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.7, li.7, div.7
|
||
{mso-style-name:列表7;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.70, li.70, div.70
|
||
{mso-style-name:图说明7;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.71, li.71, div.71
|
||
{mso-style-name:表7;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.8, li.8, div.8
|
||
{mso-style-name:列表8;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.9, li.9, div.9
|
||
{mso-style-name:列表9;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.90, li.90, div.90
|
||
{mso-style-name:图说明9;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.100, li.100, div.100
|
||
{mso-style-name:列表10;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.101, li.101, div.101
|
||
{mso-style-name:图说明10;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.114, li.114, div.114
|
||
{mso-style-name:列表11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.115, li.115, div.115
|
||
{mso-style-name:图说明11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.116, li.116, div.116
|
||
{mso-style-name:表11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.123, li.123, div.123
|
||
{mso-style-name:列表12;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.124, li.124, div.124
|
||
{mso-style-name:图说明12;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.133, li.133, div.133
|
||
{mso-style-name:图说明13;
|
||
mso-style-link:"图说明13 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.13Char
|
||
{mso-style-name:"图说明13 Char";
|
||
mso-style-link:图说明13;
|
||
font-family:宋体;}
|
||
p.134, li.134, div.134
|
||
{mso-style-name:列表13;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.26, li.26, div.26
|
||
{mso-style-name:附录2;
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:0cm;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.36, li.36, div.36
|
||
{mso-style-name:附录3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.3Char0
|
||
{mso-style-name:"标题 3 Char";
|
||
mso-style-link:"标题 3";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.16, li.16, div.16
|
||
{mso-style-name:附录1;
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.17, li.17, div.17
|
||
{mso-style-name:附录表1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.42, li.42, div.42
|
||
{mso-style-name:附录4;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.4Char
|
||
{mso-style-name:"标题 4 Char";
|
||
mso-style-link:"标题 4";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.a3, li.a3, div.a3
|
||
{mso-style-name:附录图说明;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.27, li.27, div.27
|
||
{mso-style-name:序标题2;
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:28.8pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-28.8pt;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.a4, li.a4, div.a4
|
||
{mso-style-name:参考标题;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.18, li.18, div.18
|
||
{mso-style-name:索引标题1;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.19, li.19, div.19
|
||
{mso-style-name:列表1;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.1a, li.1a, div.1a
|
||
{mso-style-name:表1;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.37, li.37, div.37
|
||
{mso-style-name:图说明3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.62, li.62, div.62
|
||
{mso-style-name:表中字体6号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
layout-grid-mode:char;
|
||
font-size:7.5pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.a5, li.a5, div.a5
|
||
{mso-style-name:正文代码;
|
||
mso-style-link:"正文代码 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char1
|
||
{mso-style-name:"正文代码 Char";
|
||
mso-style-link:正文代码;
|
||
font-family:宋体;}
|
||
p.43, li.43, div.43
|
||
{mso-style-name:"样式 标题 4 +";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.140, li.140, div.140
|
||
{mso-style-name:表14;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.141, li.141, div.141
|
||
{mso-style-name:图说明14;
|
||
mso-style-link:"图说明14 Char";
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.14Char
|
||
{mso-style-name:"图说明14 Char";
|
||
mso-style-link:图说明14;
|
||
font-family:宋体;}
|
||
p.a6, li.a6, div.a6
|
||
{mso-style-name:文件目录表;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.a7, li.a7, div.a7
|
||
{mso-style-name:"样式 正文 +";
|
||
mso-style-link:"样式 正文 + Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char2
|
||
{mso-style-name:"样式 正文 + Char";
|
||
mso-style-link:"样式 正文 +";
|
||
font-family:"Times New Roman","serif";}
|
||
p.a8, li.a8, div.a8
|
||
{mso-style-name:表格题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.a9, li.a9, div.a9
|
||
{mso-style-name:列表题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.aa, li.aa, div.aa
|
||
{mso-style-name:图题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.ab, li.ab, div.ab
|
||
{mso-style-name:程序题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.ac, li.ac, div.ac
|
||
{mso-style-name:框中文字;
|
||
margin-top:0cm;
|
||
margin-right:21.0pt;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
border:none;
|
||
padding:0cm;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.125, li.125, div.125
|
||
{mso-style-name:"样式 标题 1 + 居中2";
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.ad, li.ad, div.ad
|
||
{mso-style-name:"样式 题注 + 宋体 五号 居中";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:黑体;}
|
||
p.1b, li.1b, div.1b
|
||
{mso-style-name:序标题1;
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
line-height:240%;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Times New Roman","serif";
|
||
font-weight:bold;}
|
||
p.38, li.38, div.38
|
||
{mso-style-name:序标题3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:方正小标宋简体;}
|
||
p.63, li.63, div.63
|
||
{mso-style-name:表中文字6号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:7.5pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.64, li.64, div.64
|
||
{mso-style-name:图中文字6号左对齐;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
line-height:10.0pt;
|
||
layout-grid-mode:char;
|
||
font-size:7.5pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.65, li.65, div.65
|
||
{mso-style-name:图中文字6号;
|
||
mso-style-link:"图中文字6号 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:10.0pt;
|
||
layout-grid-mode:char;
|
||
font-size:7.5pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.6Char
|
||
{mso-style-name:"图中文字6号 Char";
|
||
mso-style-link:图中文字6号;
|
||
font-family:宋体;}
|
||
p.ae, li.ae, div.ae
|
||
{mso-style-name:图标;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.28, li.28, div.28
|
||
{mso-style-name:图标2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.af, li.af, div.af
|
||
{mso-style-name:习题标题;
|
||
margin-top:6.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:黑体;}
|
||
p.1c, li.1c, div.1c
|
||
{mso-style-name:部分编号1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:16.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.af0, li.af0, div.af0
|
||
{mso-style-name:表标题;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.af1, li.af1, div.af1
|
||
{mso-style-name:"样式 题注 + 居中";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.ListTitle, li.ListTitle, div.ListTitle
|
||
{mso-style-name:ListTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.FigureTitle, li.FigureTitle, div.FigureTitle
|
||
{mso-style-name:FigureTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.TableTitle, li.TableTitle, div.TableTitle
|
||
{mso-style-name:TableTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.ProgramTitle, li.ProgramTitle, div.ProgramTitle
|
||
{mso-style-name:ProgramTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.RightText, li.RightText, div.RightText
|
||
{mso-style-name:RightText;
|
||
margin-top:0cm;
|
||
margin-right:21.0pt;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
border:none;
|
||
padding:0cm;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.af2, li.af2, div.af2
|
||
{mso-style-name:表中文字小五;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.af3, li.af3, div.af3
|
||
{mso-style-name:关键词;
|
||
mso-style-link:"关键词 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char3
|
||
{mso-style-name:"关键词 Char";
|
||
mso-style-link:关键词;
|
||
font-family:宋体;}
|
||
p.af4, li.af4, div.af4
|
||
{mso-style-name:文件名;
|
||
mso-style-link:"文件名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char4
|
||
{mso-style-name:"文件名 Char";
|
||
mso-style-link:文件名;
|
||
font-family:宋体;}
|
||
p.af5, li.af5, div.af5
|
||
{mso-style-name:选项;
|
||
mso-style-link:"选项 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char5
|
||
{mso-style-name:"选项 Char";
|
||
mso-style-link:选项;
|
||
font-family:宋体;}
|
||
p.af6, li.af6, div.af6
|
||
{mso-style-name:命令行;
|
||
mso-style-link:"命令行 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char6
|
||
{mso-style-name:"命令行 Char";
|
||
mso-style-link:命令行;
|
||
font-family:宋体;}
|
||
p.af7, li.af7, div.af7
|
||
{mso-style-name:函数名;
|
||
mso-style-link:"函数名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char7
|
||
{mso-style-name:"函数名 Char";
|
||
mso-style-link:函数名;
|
||
font-family:宋体;}
|
||
p.af8, li.af8, div.af8
|
||
{mso-style-name:寄存器名;
|
||
mso-style-link:"寄存器名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char8
|
||
{mso-style-name:"寄存器名 Char";
|
||
mso-style-link:寄存器名;
|
||
font-family:"Times New Roman","serif";}
|
||
p.af9, li.af9, div.af9
|
||
{mso-style-name:变量名;
|
||
mso-style-link:"变量名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
span.Char9
|
||
{mso-style-name:"变量名 Char";
|
||
mso-style-link:变量名;
|
||
font-family:宋体;}
|
||
p.58, li.58, div.58
|
||
{mso-style-name:图中文字小5号左;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.59, li.59, div.59
|
||
{mso-style-name:图中文字小5号靠左;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:"Times New Roman","serif";}
|
||
p.926, li.926, div.926
|
||
{mso-style-name:"样式 代码程序 + 左侧\: 9\.26 厘米";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
span.5Char4
|
||
{mso-style-name:"标题 5 Char";
|
||
mso-style-link:"标题 5";
|
||
font-weight:bold;}
|
||
span.6Char0
|
||
{mso-style-name:"标题 6 Char";
|
||
mso-style-link:"标题 6";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.7Char
|
||
{mso-style-name:"标题 7 Char";
|
||
mso-style-link:"标题 7";
|
||
font-weight:bold;}
|
||
span.8Char
|
||
{mso-style-name:"标题 8 Char";
|
||
mso-style-link:"标题 8";
|
||
font-family:"Arial","sans-serif";}
|
||
span.9Char
|
||
{mso-style-name:"标题 9 Char";
|
||
mso-style-link:"标题 9";
|
||
font-family:"Arial","sans-serif";}
|
||
span.Chara
|
||
{mso-style-name:"脚注文本 Char";
|
||
mso-style-link:脚注文本;
|
||
font-family:宋体;}
|
||
span.Charb
|
||
{mso-style-name:"批注文字 Char";
|
||
mso-style-link:批注文字;
|
||
font-family:宋体;}
|
||
span.Charc
|
||
{mso-style-name:"页眉 Char";
|
||
mso-style-link:页眉;
|
||
font-family:宋体;}
|
||
span.Chard
|
||
{mso-style-name:"页脚 Char";
|
||
mso-style-link:页脚;
|
||
font-family:宋体;}
|
||
span.Chare
|
||
{mso-style-name:"日期 Char";
|
||
mso-style-link:日期;
|
||
font-family:宋体;}
|
||
span.HTMLChar
|
||
{mso-style-name:"HTML 预设格式 Char\,HTML 预先格式化 Char\,HTML 预先格式化1 Char\,HTML 预先格式化2 Char\,HTML 预先格式化3 Char";
|
||
mso-style-link:"HTML 预设格式\,HTML 预先格式化\,HTML 预先格式化1\,HTML 预先格式化2\,HTML 预先格式化3";
|
||
font-family:宋体;}
|
||
span.Charf
|
||
{mso-style-name:"批注主题 Char";
|
||
mso-style-link:批注主题;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
span.Charf0
|
||
{mso-style-name:"批注框文本 Char";
|
||
mso-style-link:批注框文本;
|
||
font-family:宋体;}
|
||
span.3CharChar1
|
||
{mso-style-name:"图中文字3 Char Char1";
|
||
font-family:宋体;}
|
||
span.3CharChar3
|
||
{mso-style-name:"图中文字3 Char Char3";
|
||
font-family:宋体;}
|
||
span.3CharCharChar1
|
||
{mso-style-name:"图中文字3 Char Char Char1";
|
||
font-family:宋体;}
|
||
span.3CharChar1Char
|
||
{mso-style-name:"图中文字3 Char Char1 Char";
|
||
font-family:宋体;}
|
||
.MsoChpDefault
|
||
{font-size:10.0pt;}
|
||
/* Page Definitions */
|
||
@page WordSection1
|
||
{size:595.3pt 841.9pt;
|
||
margin:72.0pt 54.0pt 72.0pt 54.0pt;
|
||
layout-grid:15.6pt;}
|
||
div.WordSection1
|
||
{page:WordSection1;}
|
||
/* List Definitions */
|
||
ol
|
||
{margin-bottom:0cm;}
|
||
ul
|
||
{margin-bottom:0cm;}
|
||
-->
|
||
</style>
|
||
|
||
</head>
|
||
|
||
<body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'>
|
||
|
||
<div class=WordSection1 style='layout-grid:15.6pt'>
|
||
|
||
<p class=ab><a name="_Toc53320681"><span style='font-family:黑体'>程序</span><span
|
||
lang=EN-US>14-26 linux/include/linux/sched.h</span></a></p>
|
||
|
||
<div class=a align=center style='text-align:center'><span lang=EN-US>
|
||
|
||
<hr size=4 width="100%" align=center>
|
||
|
||
</span></div>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>1</span></u>
|
||
#ifndef <u><span style='color:blue'>_SCHED_H</span></u></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>2</span></u>
|
||
#define <u><span style='color:blue'>_SCHED_H</span></u></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>3</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>4</span></u>
|
||
#define <u><span style='color:blue'>HZ</span></u> 100
|
||
// </span>定义系统时钟滴答频率<span lang=EN-US>(1</span>百赫兹,每个滴答<span
|
||
lang=EN-US>10ms)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>5</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>6</span></u>
|
||
#define <u><span style='color:blue'>NR_TASKS</span></u>
|
||
64
|
||
// </span>系统中同时最多任务(进程)数。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>7</span></u>
|
||
#define <u><span style='color:blue'>TASK_SIZE</span></u>
|
||
0x04000000 // </span>每个任务的长度(<span
|
||
lang=EN-US>64MB</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>8</span></u>
|
||
#define <u><span style='color:blue'>LIBRARY_SIZE</span></u>
|
||
0x00400000 // </span>动态加载库长度(<span
|
||
lang=EN-US>4MB</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>9</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>10</span></u> #if
|
||
(<u><span style='color:blue'>TASK_SIZE</span></u> & 0x3fffff)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>11</span></u>
|
||
#error <i>"TASK_SIZE must be multiple of 4M"</i>
|
||
// </span>任务长度必须是<span lang=EN-US>4MB</span>的倍数。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>12</span></u>
|
||
#endif</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>13</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>14</span></u> #if
|
||
(<u><span style='color:blue'>LIBRARY_SIZE</span></u> & 0x3fffff)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>15</span></u>
|
||
#error <i>"LIBRARY_SIZE must be a multiple of 4M"</i> // </span>库长度也必须是<span
|
||
lang=EN-US>4MB</span>的倍数。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>16</span></u>
|
||
#endif</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>17</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>18</span></u> #if
|
||
(<u><span style='color:blue'>LIBRARY_SIZE</span></u> >= (<u><span
|
||
style='color:blue'>TASK_SIZE</span></u>/2))</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>19</span></u>
|
||
#error <i>"LIBRARY_SIZE too damn big!"</i>
|
||
// </span>加载库的长度不得大于任务长度的一半。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>20</span></u>
|
||
#endif</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>21</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>22</span></u> #if
|
||
(((<u><span style='color:blue'>TASK_SIZE</span></u>>>16)*<u><span
|
||
style='color:blue'>NR_TASKS</span></u>) != 0x10000)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>23</span></u>
|
||
#error <i>"TASK_SIZE*NR_TASKS must be 4GB"</i>
|
||
// </span>任务长度<span lang=EN-US>*</span>任务总个数必须为<span lang=EN-US>4GB</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>24</span></u>
|
||
#endif</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>25</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>在进程逻辑地址空间中动态库被加载的位置(<span
|
||
lang=EN-US>60MB</span>处)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>26</span></u>
|
||
#define <u><span style='color:blue'>LIBRARY_OFFSET</span></u> (<u><span
|
||
style='color:blue'>TASK_SIZE</span></u> - <u><span style='color:blue'>LIBRARY_SIZE</span></u>)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>27</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>下面宏<span lang=EN-US>CT_TO_SECS
|
||
</span>和<span lang=EN-US>CT_TO_USECS</span>用于把系统当前嘀嗒数转换成用秒值加微秒值表示。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>28</span></u>
|
||
#define <u><span style='color:blue'>CT_TO_SECS</span></u>(<u><span
|
||
style='color:blue'>x</span></u>) ((<u><span style='color:blue'>x</span></u>)
|
||
/ <u><span style='color:blue'>HZ</span></u>)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>29</span></u>
|
||
#define <u><span style='color:blue'>CT_TO_USECS</span></u>(<u><span
|
||
style='color:blue'>x</span></u>) (((<u><span style='color:blue'>x</span></u>)
|
||
% <u><span style='color:blue'>HZ</span></u>) * 1000000/<u><span
|
||
style='color:blue'>HZ</span></u>)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>30</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>31</span></u>
|
||
#define <u><span style='color:blue'>FIRST_TASK</span></u> <u><span
|
||
style='color:blue'>task</span></u>[0] //
|
||
</span>任务<span lang=EN-US>0</span>比较特殊,所以特意给它单独定义一个符号。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>32</span></u>
|
||
#define <u><span style='color:blue'>LAST_TASK</span></u> <u><span
|
||
style='color:blue'>task</span></u>[<u><span style='color:blue'>NR_TASKS</span></u>-1]
|
||
// </span>任务数组中的最后一项任务。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>33</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>34</span></u>
|
||
#include <linux/head.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>35</span></u>
|
||
#include <linux/fs.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>36</span></u>
|
||
#include <linux/mm.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>37</span></u>
|
||
#include <sys/param.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>38</span></u>
|
||
#include <sys/time.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>39</span></u>
|
||
#include <sys/resource.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>40</span></u>
|
||
#include <signal.h></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>41</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>42</span></u> #if
|
||
(<u><span style='color:blue'>NR_OPEN</span></u> > 32)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>43</span></u>
|
||
#error <i>"Currently the close-on-exec-flags and select masks are in one
|
||
long, max 32 files/proc"</i></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>44</span></u>
|
||
#endif</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>45</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这里定义了进程运行时可能处的状态。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>46</span></u>
|
||
#define <u><span style='color:blue'>TASK_RUNNING</span></u>
|
||
0 // </span>进程正在运行或已准备就绪。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>47</span></u>
|
||
#define <u><span style='color:blue'>TASK_INTERRUPTIBLE</span></u>
|
||
1 // </span>进程处于可中断等待状态。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>48</span></u>
|
||
#define <u><span style='color:blue'>TASK_UNINTERRUPTIBLE</span></u>
|
||
2 // </span>进程处于不可中断等待状态,主要用于<span lang=EN-US>I/O</span>操作等待。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>49</span></u>
|
||
#define <u><span style='color:blue'>TASK_ZOMBIE</span></u>
|
||
3 // </span>进程处于僵死状态,已经停止运行,但父进程还没发信号。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>50</span></u>
|
||
#define <u><span style='color:blue'>TASK_STOPPED</span></u>
|
||
4 // </span>进程已停止。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>51</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>52</span></u>
|
||
#ifndef <u><span style='color:blue'>NULL</span></u></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>53</span></u>
|
||
#define <u><span style='color:blue'>NULL</span></u> ((void *) 0)
|
||
// </span>定义<span lang=EN-US>NULL</span>为空指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>54</span></u>
|
||
#endif</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>55</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>复制进程的页目录页表。<span
|
||
lang=EN-US>Linus</span>认为这是内核中最复杂的函数之一。<span lang=EN-US>( mm/memory.c, 105 )</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>56</span></u>
|
||
extern int <u><span style='color:blue'>copy_page_tables</span></u>(unsigned
|
||
long from, unsigned long to, long size);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>释放页表所指定的内存块及页表本身。<span
|
||
lang=EN-US>( mm/memory.c, 150 )</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>57</span></u>
|
||
extern int <u><span style='color:blue'>free_page_tables</span></u>(unsigned
|
||
long from, unsigned long size);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>58</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>调度程序的初始化函数。<span
|
||
lang=EN-US>( kernel/sched.c, 385 )</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>59</span></u>
|
||
extern void <u><span style='color:blue'>sched_init</span></u>(void);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>进程调度函数。<span
|
||
lang=EN-US>( kernel/sched.c, 104 )</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>60</span></u>
|
||
extern void <u><span style='color:blue'>schedule</span></u>(void);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>异常<span lang=EN-US>(</span>陷阱<span
|
||
lang=EN-US>)</span>中断处理初始化函数,设置中断调用门并允许中断请求信号。<span lang=EN-US>( kernel/traps.c,
|
||
181 )</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>61</span></u>
|
||
extern void <u><span style='color:blue'>trap_init</span></u>(void);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>显示内核出错信息,然后进入死循环。<span
|
||
lang=EN-US>( kernel/panic.c, 16 )</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>62</span></u>
|
||
extern void <u><span style='color:blue'>panic</span></u>(const char * <u><span
|
||
style='color:blue'>str</span></u>);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>往<span lang=EN-US>tty</span>上写指定长度的字符串。<span
|
||
lang=EN-US>( kernel/chr_drv/tty_io.c, 290 )</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>63</span></u>
|
||
extern int <u><span style='color:blue'>tty_write</span></u>(unsigned minor,char
|
||
* <u><span style='color:blue'>buf</span></u>,int <u><span style='color:blue'>count</span></u>);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>64</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>65</span></u>
|
||
typedef int (*<u><span style='color:blue'>fn_ptr</span></u>)();
|
||
// </span>定义函数指针类型。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>66</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>下面是数学协处理器使用的结构,主要用于保存进程切换时<span
|
||
lang=EN-US>i387</span>的执行状态信息。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>67</span></u>
|
||
struct <u><span style='color:blue'>i387_struct</span></u> {</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>68</span></u>
|
||
long cwd; //
|
||
</span>控制字<span lang=EN-US>(Control word)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>69</span></u>
|
||
long <u><span style='color:blue'>swd</span></u>;
|
||
// </span>状态字<span lang=EN-US>(Status word)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>70</span></u>
|
||
long twd; //
|
||
</span>标记字<span lang=EN-US>(Tag word)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>71</span></u>
|
||
long fip; //
|
||
</span>协处理器代码指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>72</span></u>
|
||
long fcs; //
|
||
</span>协处理器代码段寄存器。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>73</span></u>
|
||
long foo;
|
||
// </span>内存操作数的偏移位置。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>74</span></u>
|
||
long fos;
|
||
// </span>内存操作数的段值。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>75</span></u>
|
||
long st_space[20]; <b><i>/* 8*10 bytes for each
|
||
FP-reg = 80 bytes */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>76</span></u> };
|
||
/* 8</span>个<span lang=EN-US>10</span>字节的协处理器累加器。<span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>77</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>任务状态段数据结构。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>78</span></u>
|
||
struct <u><span style='color:blue'>tss_struct</span></u> {</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>79</span></u>
|
||
long back_link; <b><i>/* 16
|
||
high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>80</span></u>
|
||
long esp0;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>81</span></u>
|
||
long
|
||
ss0; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>82</span></u>
|
||
long esp1;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>83</span></u>
|
||
long
|
||
ss1; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>84</span></u>
|
||
long esp2;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>85</span></u>
|
||
long
|
||
ss2; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>86</span></u>
|
||
long cr3;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>87</span></u>
|
||
long eip;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>88</span></u>
|
||
long eflags;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>89</span></u>
|
||
long eax,ecx,edx,ebx;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>90</span></u>
|
||
long esp;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>91</span></u>
|
||
long ebp;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>92</span></u>
|
||
long esi;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>93</span></u>
|
||
long edi;</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>94</span></u>
|
||
long
|
||
es; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>95</span></u>
|
||
long
|
||
cs; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>96</span></u>
|
||
long
|
||
ss; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>97</span></u>
|
||
long
|
||
ds; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>98</span></u>
|
||
long
|
||
fs; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>99</span></u>
|
||
long
|
||
gs; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>100</span></u><span
|
||
lang=EN-US>
|
||
long
|
||
ldt; <b><i>/*
|
||
16 high bits zero */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>101</span></u><span
|
||
lang=EN-US>
|
||
long trace_bitmap; <b><i>/* bits: trace 0, bitmap
|
||
16-31 */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>102</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>i387_struct</span></u> i387;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>103</span></u><span
|
||
lang=EN-US> };</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>104</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>下面是任务(进程)数据结构,或称为进程描述符。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
state
|
||
</span>任务的运行状态(<span lang=EN-US>-1</span>不可运行,<span lang=EN-US>0</span>可运行<span
|
||
lang=EN-US>(</span>就绪<span lang=EN-US>)</span>,<span lang=EN-US>>0</span>已停止)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
counter
|
||
</span>任务运行时间计数<span lang=EN-US>(</span>递减<span lang=EN-US>)</span>(滴答数),运行时间片。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
priority
|
||
</span>优先数。任务开始运行时<span lang=EN-US>counter=priority</span>,越大运行越长。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long signal </span>信号位图,每个比特位代表一种信号,信号值<span
|
||
lang=EN-US>=</span>位偏移值<span lang=EN-US>+1</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct sigaction
|
||
sigaction[32] </span>信号执行属性结构,对应信号将要执行的操作和标志信息。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
blocked
|
||
</span>进程信号屏蔽码(对应信号位图)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // -------------------</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // int
|
||
exit_code
|
||
</span>任务执行停止的退出码,其父进程会取。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned long
|
||
start_code </span>代码段地址。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned long
|
||
end_code </span>代码长度(字节数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned long
|
||
end_data </span>代码长度<span lang=EN-US>
|
||
+ </span>数据长度(字节数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned long
|
||
brk </span>总长度(字节数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned long
|
||
start_stack </span>堆栈段地址。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
pid </span>进程标识号<span
|
||
lang=EN-US>(</span>进程号<span lang=EN-US>)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
pgrp
|
||
</span>进程组号。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
session
|
||
</span>会话号。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
leader
|
||
</span>会话首领。</p>
|
||
|
||
<p class=a><span lang=EN-US> // int
|
||
groups[NGROUPS] </span>进程所属组号。一个进程可属于多个组。</p>
|
||
|
||
<p class=a><span lang=EN-US> // task_struct
|
||
*p_pptr </span>指向父进程的指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // task_struct
|
||
*p_cptr </span>指向最新子进程的指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // task_struct
|
||
*p_ysptr </span>指向比自己后创建的相邻进程的指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // task_struct
|
||
*p_osptr </span>指向比自己早创建的相邻进程的指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
uid </span>用户标识号(用户<span
|
||
lang=EN-US>id</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
euid </span>有效用户<span
|
||
lang=EN-US>id</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
suid </span>保存的用户<span
|
||
lang=EN-US>id</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
gid </span>组标识号(组<span
|
||
lang=EN-US>id</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
egid </span>有效组<span
|
||
lang=EN-US>id</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
sgid </span>保存的组<span
|
||
lang=EN-US>id</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
timeout
|
||
</span>内核定时超时值。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
alarm </span>报警定时值(滴答数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
utime
|
||
</span>用户态运行时间(滴答数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
stime
|
||
</span>系统态运行时间(滴答数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
cutime
|
||
</span>子进程用户态运行时间。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
cstime
|
||
</span>子进程系统态运行时间。</p>
|
||
|
||
<p class=a><span lang=EN-US> // long
|
||
start_time
|
||
</span>进程开始运行时刻。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct rlimit
|
||
rlim[RLIM_NLIMITS] </span>进程资源使用统计数组。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned int
|
||
flags; </span>各进程的标志,在下面第<span
|
||
lang=EN-US>149</span>行开始定义(还未使用)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
used_math </span>标志:是否使用了协处理器。</p>
|
||
|
||
<p class=a><span lang=EN-US> // ------------------------</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // int tty </span>进程使用<span
|
||
lang=EN-US>tty</span>终端的子设备号。<span lang=EN-US>-1</span>表示没有使用。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned short
|
||
umask </span>文件创建属性屏蔽位。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct m_inode *
|
||
pwd </span>当前工作目录<span
|
||
lang=EN-US>i</span>节点结构指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct m_inode *
|
||
root </span>根目录<span
|
||
lang=EN-US>i</span>节点结构指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct m_inode *
|
||
executable </span>执行文件<span lang=EN-US>i</span>节点结构指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct m_inode *
|
||
library </span>被加载库文件<span lang=EN-US>i</span>节点结构指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> // unsigned long
|
||
close_on_exec </span>执行时关闭文件句柄位图标志。(参见<span lang=EN-US>include/fcntl.h</span>)</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct file *
|
||
filp[NR_OPEN] </span>文件结构指针表,最多<span lang=EN-US>32</span>项。表项号即是文件描述符的值。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct desc_struct
|
||
ldt[3] </span>局部描述符表。<span lang=EN-US>0-</span>空,<span
|
||
lang=EN-US>1-</span>代码段<span lang=EN-US>cs</span>,<span lang=EN-US>2-</span>数据和堆栈段<span
|
||
lang=EN-US>ds&ss</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // struct tss_struct
|
||
tss </span>进程的任务状态段信息结构。</p>
|
||
|
||
<p class=a><span lang=EN-US> //
|
||
======================================</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>105</span></u><span
|
||
lang=EN-US> struct <u><span style='color:blue'>task_struct</span></u> {</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>106</span></u><span
|
||
lang=EN-US> <b><i>/* these are hardcoded - don't touch */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>107</span></u><span
|
||
lang=EN-US> long <u><span
|
||
style='color:blue'>state</span></u>; <b><i>/* -1
|
||
unrunnable, 0 runnable, >0 stopped */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>108</span></u><span
|
||
lang=EN-US> long counter;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>109</span></u><span
|
||
lang=EN-US> long priority;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>110</span></u><span
|
||
lang=EN-US> long signal;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>111</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>sigaction</span></u> <u><span style='color:blue'>sigaction</span></u>[32];</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>112</span></u><span
|
||
lang=EN-US> long
|
||
blocked; <b><i>/* bitmap of masked signals */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>113</span></u><span
|
||
lang=EN-US> <b><i>/* various fields */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>114</span></u><span
|
||
lang=EN-US> int exit_code;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>115</span></u><span
|
||
lang=EN-US> unsigned long
|
||
start_code,end_code,end_data,<u><span style='color:blue'>brk</span></u>,start_stack;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>116</span></u><span
|
||
lang=EN-US> long
|
||
pid,pgrp,session,leader;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>117</span></u><span
|
||
lang=EN-US>
|
||
int groups[<u><span style='color:blue'>NGROUPS</span></u>];</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>118</span></u><span
|
||
lang=EN-US> <b><i>/* </i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>119</span></u><span
|
||
lang=EN-US> <b><i> *
|
||
pointers to parent process, youngest child, younger sibling,</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>120</span></u><span
|
||
lang=EN-US> <b><i> * older
|
||
sibling, respectively. (p->father can be replaced with </i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>121</span></u><span
|
||
lang=EN-US> <b><i> *
|
||
p->p_pptr->pid)</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>122</span></u><span
|
||
lang=EN-US> <b><i> */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>123</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>task_struct</span></u>
|
||
*p_pptr, *p_cptr, *p_ysptr, *p_osptr;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>124</span></u><span
|
||
lang=EN-US> unsigned short
|
||
uid,euid,suid;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>125</span></u><span
|
||
lang=EN-US> unsigned short gid,egid,sgid;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>126</span></u><span
|
||
lang=EN-US> unsigned long
|
||
timeout,<u><span style='color:blue'>alarm</span></u>;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>127</span></u><span
|
||
lang=EN-US> long <u><span
|
||
style='color:blue'>utime</span></u>,<u><span style='color:blue'>stime</span></u>,cutime,cstime,start_time;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>128</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>rlimit</span></u> rlim[<u><span style='color:blue'>RLIM_NLIMITS</span></u>];
|
||
</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>129</span></u><span
|
||
lang=EN-US> unsigned int
|
||
flags; <b><i>/* per process flags, defined below */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>130</span></u><span
|
||
lang=EN-US> unsigned short
|
||
used_math;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>131</span></u><span
|
||
lang=EN-US> <b><i>/* file system info */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>132</span></u><span
|
||
lang=EN-US> int
|
||
tty;
|
||
<b><i>/* -1 if no tty, so it must be signed */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>133</span></u><span
|
||
lang=EN-US> unsigned short <u><span
|
||
style='color:blue'>umask</span></u>;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>134</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>m_inode</span></u> * pwd;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>135</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>m_inode</span></u> * root;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>136</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>m_inode</span></u> * executable;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>137</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>m_inode</span></u> * library;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>138</span></u><span
|
||
lang=EN-US> unsigned long
|
||
close_on_exec;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>139</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>file</span></u> * filp[<u><span style='color:blue'>NR_OPEN</span></u>];</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>140</span></u><span
|
||
lang=EN-US> <b><i>/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>141</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>desc_struct</span></u> ldt[3];</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>142</span></u><span
|
||
lang=EN-US> <b><i>/* tss for this task */</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>143</span></u><span
|
||
lang=EN-US> struct <u><span
|
||
style='color:blue'>tss_struct</span></u> tss;</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>144</span></u><span
|
||
lang=EN-US> };</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>145</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>146</span></u><span
|
||
lang=EN-US> <b><i>/*</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>147</span></u><span
|
||
lang=EN-US> <b><i> * Per process flags</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>148</span></u><span
|
||
lang=EN-US> <b><i> */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> /* </span>每个进程的标志<span
|
||
lang=EN-US> */ /* </span>打印对齐警告信息。还未实现,仅用于<span lang=EN-US>486 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>149</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>PF_ALIGNWARN</span></u>
|
||
0x00000001 <b><i>/* Print alignment warning msgs
|
||
*/</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>150</span></u><span
|
||
lang=EN-US>
|
||
<b><i>/*
|
||
Not implemented yet, only for 486*/</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>151</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>152</span></u><span
|
||
lang=EN-US> <b><i>/*</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>153</span></u><span
|
||
lang=EN-US> <b><i> * INIT_TASK is used to set up the first task
|
||
table, touch at</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>154</span></u><span
|
||
lang=EN-US> <b><i> * your own risk!. Base=0, limit=0x9ffff (=640kB)</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>155</span></u><span
|
||
lang=EN-US> <b><i> */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * INIT_TASK</span>用于设置第<span
|
||
lang=EN-US>1</span>个任务表,若想修改,责任自负<span lang=EN-US style='font-family:Wingdings'>J</span>!</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>基址<span
|
||
lang=EN-US>Base = 0</span>,段长<span lang=EN-US>limit = 0x9ffff</span>(<span
|
||
lang=EN-US>=640kB</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>对应上面任务结构的第<span
|
||
lang=EN-US>1</span>个任务的信息。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>156</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>INIT_TASK</span></u> \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>157</span></u><span
|
||
lang=EN-US> <b><i>/* state etc */</i></b> { 0,15,15, \ //
|
||
state, counter, priority</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>158</span></u><span
|
||
lang=EN-US> <b><i>/* signals */</i></b> 0,{{},},0, \
|
||
// signal, sigaction[32], blocked</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>159</span></u><span
|
||
lang=EN-US> <b><i>/* ec,brk... */</i></b> 0,0,0,0,0,0, \ //
|
||
exit_code,start_code,end_code,end_data,brk,start_stack</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>160</span></u><span
|
||
lang=EN-US> <b><i>/* pid etc.. */</i></b> 0,0,0,0, \
|
||
// pid, pgrp, session, leader</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>161</span></u><span
|
||
lang=EN-US> <b><i>/* suppl grps*/</i></b> {<u><span style='color:blue'>NOGROUP</span></u>,},
|
||
\ // groups[]</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>162</span></u><span
|
||
lang=EN-US> <b><i>/* proc links*/</i></b> &<u><span style='color:blue'>init_task</span></u>.<u><span
|
||
style='color:blue'>task</span></u>,0,0,0, \ // p_pptr,
|
||
p_cptr, p_ysptr, p_osptr</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>163</span></u><span
|
||
lang=EN-US> <b><i>/* uid etc */</i></b> 0,0,0,0,0,0, \
|
||
// uid, euid, suid, gid, egid, sgid</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>164</span></u><span
|
||
lang=EN-US> <b><i>/* timeout */</i></b> 0,0,0,0,0,0,0, \ //
|
||
alarm,utime,stime,cutime,cstime,start_time,used_math</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>165</span></u><span
|
||
lang=EN-US> <b><i>/* rlimits */</i></b> { {0x7fffffff, 0x7fffffff},
|
||
{0x7fffffff, 0x7fffffff}, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>166</span></u><span
|
||
lang=EN-US>
|
||
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>167</span></u><span
|
||
lang=EN-US>
|
||
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}}, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>168</span></u><span
|
||
lang=EN-US> <b><i>/* flags */</i></b> 0, \
|
||
// flags</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>169</span></u><span
|
||
lang=EN-US> <b><i>/* math */</i></b> 0, \ //
|
||
used_math, tty,umask,pwd,root,executable,close_on_exec</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>170</span></u><span
|
||
lang=EN-US> <b><i>/* fs info */</i></b> -1,0022,<u><span
|
||
style='color:blue'>NULL</span></u>,<u><span style='color:blue'>NULL</span></u>,<u><span
|
||
style='color:blue'>NULL</span></u>,<u><span style='color:blue'>NULL</span></u>,0,
|
||
\ </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>171</span></u><span
|
||
lang=EN-US> <b><i>/* filp */</i></b> {<u><span
|
||
style='color:blue'>NULL</span></u>,}, \ //
|
||
filp[20]</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>172</span></u><span
|
||
lang=EN-US> { \
|
||
// ldt[3]</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>173</span></u><span
|
||
lang=EN-US> {0,0},
|
||
\</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>174</span></u><span
|
||
lang=EN-US> <b><i>/* ldt */</i></b>
|
||
{0x9f,0xc0fa00}, \ // </span>代码长<span lang=EN-US>640K</span>,基址<span
|
||
lang=EN-US>0x0</span>,<span lang=EN-US>G=1</span>,<span lang=EN-US>D=1</span>,<span
|
||
lang=EN-US>DPL=3</span>,<span lang=EN-US>P=1 TYPE=0xa</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>175</span></u><span
|
||
lang=EN-US>
|
||
{0x9f,0xc0f200}, \ // </span>数据长<span lang=EN-US>640K</span>,基址<span
|
||
lang=EN-US>0x0</span>,<span lang=EN-US>G=1</span>,<span lang=EN-US>D=1</span>,<span
|
||
lang=EN-US>DPL=3</span>,<span lang=EN-US>P=1 TYPE=0x2</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>176</span></u><span
|
||
lang=EN-US> }, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>177</span></u><span
|
||
lang=EN-US> <b><i>/*tss*/</i></b> {0,<u><span style='color:blue'>PAGE_SIZE</span></u>+(long)&<u><span
|
||
style='color:blue'>init_task</span></u>,0x10,0,0,0,0,(long)&<u><span
|
||
style='color:blue'>pg_dir</span></u>,\ //
|
||
tss</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>178</span></u><span
|
||
lang=EN-US>
|
||
0,0,0,0,0,0,0,0, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>179</span></u><span
|
||
lang=EN-US>
|
||
0,0,0x17,0x17,0x17,0x17,0x17,0x17, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>180</span></u><span
|
||
lang=EN-US> <u><span
|
||
style='color:blue'>_LDT</span></u>(0),0x80000000, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>181</span></u><span
|
||
lang=EN-US>
|
||
{} \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>182</span></u><span
|
||
lang=EN-US> }, \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>183</span></u><span
|
||
lang=EN-US> }</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>184</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>185</span></u><span
|
||
lang=EN-US> extern struct <u><span style='color:blue'>task_struct</span></u> *<u><span
|
||
style='color:blue'>task</span></u>[<u><span style='color:blue'>NR_TASKS</span></u>];
|
||
// </span>任务指针数组。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>186</span></u><span
|
||
lang=EN-US> extern struct <u><span style='color:blue'>task_struct</span></u> *<u><span
|
||
style='color:blue'>last_task_used_math</span></u>; // </span>上一个使用过协处理器的进程。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>187</span></u><span
|
||
lang=EN-US> extern struct <u><span style='color:blue'>task_struct</span></u> *<u><span
|
||
style='color:blue'>current</span></u>;
|
||
// </span>当前运行进程结构指针变量。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>188</span></u><span
|
||
lang=EN-US> extern unsigned long volatile <u><span style='color:blue'>jiffies</span></u>;
|
||
// </span>从开机开始算起的滴答数(<span lang=EN-US>10ms/</span>滴答)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>189</span></u><span
|
||
lang=EN-US> extern unsigned long <u><span style='color:blue'>startup_time</span></u>;
|
||
// </span>开机时间。从<span lang=EN-US>1970:0:0:0</span>开始计时的秒数。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>190</span></u><span
|
||
lang=EN-US> extern int <u><span style='color:blue'>jiffies_offset</span></u>;
|
||
//
|
||
</span>用于累计需要调整的时间嘀嗒数。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>191</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>192</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>CURRENT_TIME</span></u> (<u><span
|
||
style='color:blue'>startup_time</span></u>+(<u><span style='color:blue'>jiffies</span></u>+<u><span
|
||
style='color:blue'>jiffies_offset</span></u>)/<u><span style='color:blue'>HZ</span></u>)
|
||
// </span>当前时间(秒数)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>193</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>添加定时器函数(定时时间<span
|
||
lang=EN-US>jiffies</span>滴答数,定时到时调用函数<span lang=EN-US>*fn()</span>)。<span
|
||
lang=EN-US>( kernel/sched.c )</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>194</span></u><span
|
||
lang=EN-US> extern void <u><span style='color:blue'>add_timer</span></u>(long <u><span
|
||
style='color:blue'>jiffies</span></u>, void (*fn)(void));</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>不可中断的等待睡眠。<span
|
||
lang=EN-US>( kernel/sched.c )</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>195</span></u><span
|
||
lang=EN-US> extern void <u><span style='color:blue'>sleep_on</span></u>(struct <u><span
|
||
style='color:blue'>task_struct</span></u> ** p);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>可中断的等待睡眠。<span
|
||
lang=EN-US>( kernel/sched.c )</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>196</span></u><span
|
||
lang=EN-US> extern void <u><span style='color:blue'>interruptible_sleep_on</span></u>(struct
|
||
<u><span style='color:blue'>task_struct</span></u> ** p);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>明确唤醒睡眠的进程。<span
|
||
lang=EN-US>( kernel/sched.c )</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>197</span></u><span
|
||
lang=EN-US> extern void <u><span style='color:blue'>wake_up</span></u>(struct <u><span
|
||
style='color:blue'>task_struct</span></u> ** p);</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>检查当前进程是否在指定的用户组<span
|
||
lang=EN-US>grp</span>中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>198</span></u><span
|
||
lang=EN-US> extern int <u><span style='color:blue'>in_group_p</span></u>(<u><span
|
||
style='color:blue'>gid_t</span></u> grp);</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>199</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>200</span></u><span
|
||
lang=EN-US> <b><i>/*</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>201</span></u><span
|
||
lang=EN-US> <b><i> * Entry into gdt where to find first TSS. 0-nul, 1-cs,
|
||
2-ds, 3-syscall</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>202</span></u><span
|
||
lang=EN-US> <b><i> * 4-TSS0, 5-LDT0, 6-TSS1 etc ...</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>203</span></u><span
|
||
lang=EN-US> <b><i> */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>寻找第<span
|
||
lang=EN-US>1</span>个<span lang=EN-US>TSS</span>在全局表中的入口。<span lang=EN-US>0-</span>没有用<span
|
||
lang=EN-US>nul</span>,<span lang=EN-US>1-</span>代码段<span lang=EN-US>cs</span>,<span
|
||
lang=EN-US>2-</span>数据段<span lang=EN-US>ds</span>,<span lang=EN-US>3-</span>系统段<span
|
||
lang=EN-US>syscall</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * 4-</span>任务状态段<span
|
||
lang=EN-US>TSS0</span>,<span lang=EN-US>5-</span>局部表<span lang=EN-US>LTD0</span>,<span
|
||
lang=EN-US>6-</span>任务状态段<span lang=EN-US>TSS1</span>,等。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>从该英文注释可以猜想到,<span
|
||
lang=EN-US>Linus</span>当时曾想把系统调用的代码专门放在<span lang=EN-US>GDT</span>表中第<span
|
||
lang=EN-US>4</span>个独立的段中。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>但后来并没有那样做,于是就一直把<span
|
||
lang=EN-US>GDT</span>表中第<span lang=EN-US>4</span>个描述符项(上面<span lang=EN-US>syscall</span>项)闲置在一旁。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>下面定义宏:全局表中第<span
|
||
lang=EN-US>1</span>个任务状态段<span lang=EN-US>(TSS)</span>描述符的选择符索引号。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>204</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>FIRST_TSS_ENTRY</span></u> 4</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>全局表中第<span lang=EN-US>1</span>个局部描述符表<span
|
||
lang=EN-US>(LDT)</span>描述符的选择符索引号。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>205</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>FIRST_LDT_ENTRY</span></u> (<u><span
|
||
style='color:blue'>FIRST_TSS_ENTRY</span></u>+1)</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>宏定义,计算在全局表中第<span
|
||
lang=EN-US>n</span>个任务的<span lang=EN-US>TSS</span>段描述符的选择符值(偏移量)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>因每个描述符占<span
|
||
lang=EN-US>8</span>字节,因此<span lang=EN-US>FIRST_TSS_ENTRY<<3 </span>表示该描述符在<span
|
||
lang=EN-US>GDT</span>表中的起始偏移位置。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>因为每个任务使用<span
|
||
lang=EN-US>1</span>个<span lang=EN-US>TSS</span>和<span lang=EN-US>1</span>个<span
|
||
lang=EN-US>LDT</span>描述符,共占用<span lang=EN-US>16</span>字节,因此需要 <span lang=EN-US>n<<4
|
||
</span>来表示对应</p>
|
||
|
||
<p class=a><span lang=EN-US> // TSS</span>起始位置。该宏得到的值正好也是该<span
|
||
lang=EN-US>TSS</span>的选择符值。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>206</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>_TSS</span></u>(n) ((((unsigned
|
||
long) n)<<4)+(<u><span style='color:blue'>FIRST_TSS_ENTRY</span></u><<3))</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>宏定义,计算在全局表中第<span
|
||
lang=EN-US>n</span>个任务的<span lang=EN-US>LDT</span>段描述符的选择符值(偏移量)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>207</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>_LDT</span></u>(n) ((((unsigned
|
||
long) n)<<4)+(<u><span style='color:blue'>FIRST_LDT_ENTRY</span></u><<3))</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>宏定义,把第<span
|
||
lang=EN-US>n</span>个任务的<span lang=EN-US>TSS</span>段选择符加载到任务寄存器<span lang=EN-US>TR</span>中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>208</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>ltr</span></u>(n) __asm__(<i>"ltr
|
||
%%ax"</i>::<i>"a"</i> (<u><span style='color:blue'>_TSS</span></u>(n)))</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>宏定义,把第<span
|
||
lang=EN-US>n</span>个任务的<span lang=EN-US>LDT</span>段选择符加载到局部描述符表寄存器<span
|
||
lang=EN-US>LDTR</span>中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>209</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>lldt</span></u>(n) __asm__(<i>"lldt
|
||
%%ax"</i>::<i>"a"</i> (<u><span style='color:blue'>_LDT</span></u>(n)))</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>取当前运行任务的任务号(是任务数组中的索引值,与进程号<span
|
||
lang=EN-US>pid</span>不同)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>返回:<span lang=EN-US>n
|
||
- </span>当前任务号。用于<span lang=EN-US>( kernel/traps.c )</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>210</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>str</span></u>(n) \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>211</span></u><span
|
||
lang=EN-US> __asm__(<i>"str %%ax\n\t"</i> \
|
||
// </span>将任务寄存器中<span lang=EN-US>TSS</span>段的选择符复制到<span lang=EN-US>ax</span>中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>212</span></u><span
|
||
lang=EN-US> <i>"subl
|
||
%2,%%eax\n\t"</i> \ // (eax -
|
||
FIRST_TSS_ENTRY*8)</span><span lang=EN-US style='font-family:Wingdings'>è</span><span
|
||
lang=EN-US>eax</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>213</span></u><span
|
||
lang=EN-US> <i>"shrl
|
||
$4,%%eax"</i> \
|
||
// (eax/16)</span><span lang=EN-US style='font-family:Wingdings'>è</span><span
|
||
lang=EN-US>eax = </span>当前任务号。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>214</span></u><span
|
||
lang=EN-US> :<i>"=a"</i>
|
||
(n) \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>215</span></u><span
|
||
lang=EN-US> :<i>"a"</i>
|
||
(0),<i>"i"</i> (<u><span style='color:blue'>FIRST_TSS_ENTRY</span></u><<3))</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>216</span></u><span
|
||
lang=EN-US> <b><i>/*</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>217</span></u><span
|
||
lang=EN-US> <b><i> * switch_to(n) should
|
||
switch tasks to task nr n, first</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>218</span></u><span
|
||
lang=EN-US> <b><i> * checking that n isn't the current task, in which case
|
||
it does nothing.</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>219</span></u><span
|
||
lang=EN-US> <b><i> * This also clears the TS-flag if the task we switched
|
||
to has used</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>220</span></u><span
|
||
lang=EN-US> <b><i> * tha math co-processor latest.</i></b></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>221</span></u><span
|
||
lang=EN-US> <b><i> */</i></b></span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * switch_to(n)</span>将切换当前任务到任务<span
|
||
lang=EN-US>nr</span>,即<span lang=EN-US>n</span>。首先检测任务<span lang=EN-US>n</span>不是当前任务,</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>如果是则什么也不做退出。如果我们切换到的任务最近(上次运行)使用过数学</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>协处理器的话,则还需复位控制寄存器<span
|
||
lang=EN-US>cr0</span>中的<span lang=EN-US>TS</span>标志。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>跳转到一个任务的<span
|
||
lang=EN-US>TSS</span>段选择符组成的地址处会造成<span lang=EN-US>CPU</span>进行任务切换操作。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>输入:<span lang=EN-US>%0
|
||
- </span>指向<span lang=EN-US>__tmp</span>;<span lang=EN-US>
|
||
%1 - </span>指向<span lang=EN-US>__tmp.b</span>处,用于存放新<span
|
||
lang=EN-US>TSS</span>的选择符;</p>
|
||
|
||
<p class=a><span lang=EN-US>
|
||
// dx - </span>新任务<span lang=EN-US>n</span>的<span
|
||
lang=EN-US>TSS</span>段选择符;<span lang=EN-US> ecx - </span>新任务<span
|
||
lang=EN-US>n</span>的任务结构指针<span lang=EN-US>task[n]</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>其中临时数据结构<span
|
||
lang=EN-US>__tmp</span>用于组建<span lang=EN-US>177</span>行远跳转(<span lang=EN-US>far
|
||
jump</span>)指令的操作数。该操作数由<span lang=EN-US>4</span>字节</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>偏移地址和<span lang=EN-US>2</span>字节的段选择符组成。因此<span
|
||
lang=EN-US>__tmp</span>中<span lang=EN-US>a</span>的值是<span lang=EN-US>32</span>位偏移值,而<span
|
||
lang=EN-US>b</span>的低<span lang=EN-US>2</span>字节是新</p>
|
||
|
||
<p class=a><span lang=EN-US> // TSS</span>段的选择符(高<span
|
||
lang=EN-US>2</span>字节不用)。跳转到<span lang=EN-US>TSS</span>段选择符会造成任务切换到该<span
|
||
lang=EN-US>TSS</span>对应的进程。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>对于造成任务切换的长跳转,<span
|
||
lang=EN-US>a</span>值无用。<span lang=EN-US>177</span>行上的内存间接跳转指令使用<span
|
||
lang=EN-US>6</span>字节操作数作为跳</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>转目的地的长指针,其格式为:<span
|
||
lang=EN-US>jmp 16</span>位段选择符:<span lang=EN-US>32</span>位偏移值。但在内存中操作数的表示顺</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>序与这里正好相反。任务切换回来之后,在判断原任务上次执行是否使用过协处理器时,是通过</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>将原任务指针与保存在<span
|
||
lang=EN-US>last_task_used_math</span>变量中的上次使用过协处理器任务指针进行比较而</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>作出的,参见文件<span
|
||
lang=EN-US>kernel/sched.c</span>中有关<span lang=EN-US>math_state_restore()</span>函数的说明。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>222</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>switch_to</span></u>(n) {\</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>223</span></u><span
|
||
lang=EN-US> struct {long a,b;} __tmp; \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>224</span></u><span
|
||
lang=EN-US> __asm__(<i>"cmpl %%ecx,_current\n\t"</i> \
|
||
// </span>任务<span lang=EN-US>n</span>是当前任务吗<span lang=EN-US>?(current
|
||
==task[n]?)</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>225</span></u><span
|
||
lang=EN-US> <i>"je
|
||
1f\n\t"</i> \
|
||
// </span>是,则什么都不做,退出。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>226</span></u><span
|
||
lang=EN-US> <i>"movw
|
||
%%dx,%1\n\t"</i> \
|
||
// </span>将新任务<span lang=EN-US>TSS</span>的<span lang=EN-US>16</span>位选择符存入<span
|
||
lang=EN-US>__tmp.b</span>中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>227</span></u><span
|
||
lang=EN-US> <i>"xchgl
|
||
%%ecx,_current\n\t"</i> \ // current = task[n]</span>;<span
|
||
lang=EN-US>ecx = </span>被切换出的任务。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>228</span></u><span
|
||
lang=EN-US> <i>"ljmp
|
||
%0\n\t"</i> \
|
||
// </span>执行长跳转至<span lang=EN-US>*&__tmp</span>,造成任务切换。</p>
|
||
|
||
<p class=a><span lang=EN-US>
|
||
// </span>在任务切换回来后才会继续执行下面的语句。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>229</span></u><span
|
||
lang=EN-US> <i>"cmpl
|
||
%%ecx,_last_task_used_math\n\t"</i> \ // </span>原任务上次使用过协处理器吗?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>230</span></u><span
|
||
lang=EN-US> <i>"jne
|
||
1f\n\t"</i> \
|
||
// </span>没有则跳转,退出。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>231</span></u><span
|
||
lang=EN-US> <i>"clts\n"</i>
|
||
\
|
||
// </span>原任务上次使用过协处理器,则清<span lang=EN-US>cr0</span>中的任务</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>232</span></u><span
|
||
lang=EN-US> <i>"1:"</i>
|
||
\
|
||
// </span>切换标志<span lang=EN-US>TS</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>233</span></u><span
|
||
lang=EN-US> ::<i>"m"</i>
|
||
(*&__tmp.a),<i>"m"</i> (*&__tmp.b), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>234</span></u><span
|
||
lang=EN-US> <i>"d"</i>
|
||
(<u><span style='color:blue'>_TSS</span></u>(n)),<i>"c"</i> ((long) <u><span
|
||
style='color:blue'>task</span></u>[n])); \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>235</span></u><span
|
||
lang=EN-US> }</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>236</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>页面地址对准。(在内核代码中没有任何地方引用<span
|
||
lang=EN-US>!!</span>)</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>237</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>PAGE_ALIGN</span></u>(n)
|
||
(((n)+0xfff)&0xfffff000)</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>238</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>设置位于地址<span
|
||
lang=EN-US>addr</span>处描述符中的各基地址字段<span lang=EN-US>(</span>基地址是<span
|
||
lang=EN-US>base)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // %0 - </span>地址<span
|
||
lang=EN-US>addr</span>偏移<span lang=EN-US>2</span>;<span lang=EN-US>%1 - </span>地址<span
|
||
lang=EN-US>addr</span>偏移<span lang=EN-US>4</span>;<span lang=EN-US>%2 - </span>地址<span
|
||
lang=EN-US>addr</span>偏移<span lang=EN-US>7</span>;<span lang=EN-US>edx - </span>基地址<span
|
||
lang=EN-US>base</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>239</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>_set_base</span></u>(addr,base)
|
||
\</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>240</span></u><span
|
||
lang=EN-US> __asm__(<i>"movw %%dx,%0\n\t"</i> \
|
||
// </span>基址<span lang=EN-US>base</span>低<span lang=EN-US>16</span>位<span
|
||
lang=EN-US>(</span>位<span lang=EN-US>15-0)</span><span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>[addr+2]</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>241</span></u><span
|
||
lang=EN-US> <i>"rorl
|
||
$16,%%edx\n\t"</i> \ //
|
||
edx</span>中基址高<span lang=EN-US>16</span>位<span lang=EN-US>(</span>位<span
|
||
lang=EN-US>31-16)</span><span lang=EN-US style='font-family:Wingdings'>è</span><span
|
||
lang=EN-US>dx</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>242</span></u><span
|
||
lang=EN-US> <i>"movb
|
||
%%dl,%1\n\t"</i> \
|
||
// </span>基址高<span lang=EN-US>16</span>位中的低<span lang=EN-US>8</span>位<span
|
||
lang=EN-US>(</span>位<span lang=EN-US>23-16)</span><span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>[addr+4]</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>243</span></u><span
|
||
lang=EN-US> <i>"movb %%dh,%2"</i>
|
||
\
|
||
// </span>基址高<span lang=EN-US>16</span>位中的高<span lang=EN-US>8</span>位<span
|
||
lang=EN-US>(</span>位<span lang=EN-US>31-24)</span><span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>[addr+7]</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>244</span></u><span
|
||
lang=EN-US> ::<i>"m"</i>
|
||
(*((addr)+2)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>245</span></u><span
|
||
lang=EN-US> <i>"m"</i>
|
||
(*((addr)+4)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>246</span></u><span
|
||
lang=EN-US> <i>"m"</i>
|
||
(*((addr)+7)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>247</span></u><span
|
||
lang=EN-US> <i>"d"</i>
|
||
(base) \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>248</span></u><span
|
||
lang=EN-US> :<i>"dx"</i>)
|
||
// </span>告诉<span lang=EN-US>gcc</span>编译器<span lang=EN-US>edx</span>寄存器中的值已被嵌入汇编程序改变了。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>249</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>设置位于地址<span
|
||
lang=EN-US>addr</span>处描述符中的段限长字段<span lang=EN-US>(</span>段长是<span lang=EN-US>limit)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // %0 - </span>地址<span
|
||
lang=EN-US>addr</span>;<span lang=EN-US>%1 - </span>地址<span lang=EN-US>addr</span>偏移<span
|
||
lang=EN-US>6</span>处;<span lang=EN-US>edx - </span>段长值<span lang=EN-US>limit</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>250</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>_set_limit</span></u>(addr,limit)
|
||
\</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>251</span></u><span
|
||
lang=EN-US> __asm__(<i>"movw %%dx,%0\n\t"</i> \
|
||
// </span>段长<span lang=EN-US>limit</span>低<span lang=EN-US>16</span>位<span
|
||
lang=EN-US>(</span>位<span lang=EN-US>15-0)</span><span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>[addr]</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>252</span></u><span
|
||
lang=EN-US> <i>"rorl
|
||
$16,%%edx\n\t"</i> \ //
|
||
edx</span>中的段长高<span lang=EN-US>4</span>位<span lang=EN-US>(</span>位<span
|
||
lang=EN-US>19-16)</span><span lang=EN-US style='font-family:Wingdings'>è</span><span
|
||
lang=EN-US>dl</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>253</span></u><span
|
||
lang=EN-US> <i>"movb
|
||
%1,%%dh\n\t"</i> \
|
||
// </span>取原<span lang=EN-US>[addr+6]</span>字节<span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>dh</span>,其中高<span
|
||
lang=EN-US>4</span>位是些标志。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>254</span></u><span
|
||
lang=EN-US> <i>"andb
|
||
$0xf0,%%dh\n\t"</i> \ // </span>清<span
|
||
lang=EN-US>dh</span>的低<span lang=EN-US>4</span>位<span lang=EN-US>(</span>将存放段长的位<span
|
||
lang=EN-US>19-16)</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>255</span></u><span
|
||
lang=EN-US> <i>"orb
|
||
%%dh,%%dl\n\t"</i> \
|
||
// </span>将原高<span lang=EN-US>4</span>位标志和段长的高<span lang=EN-US>4</span>位<span
|
||
lang=EN-US>(</span>位<span lang=EN-US>19-16)</span>合成<span lang=EN-US>1</span>字节,</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>256</span></u><span
|
||
lang=EN-US> <i>"movb
|
||
%%dl,%1"</i> \
|
||
// </span>并放会<span lang=EN-US>[addr+6]</span>处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>257</span></u><span
|
||
lang=EN-US> ::<i>"m"</i>
|
||
(*(addr)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>258</span></u><span
|
||
lang=EN-US> <i>"m"</i>
|
||
(*((addr)+6)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>259</span></u><span
|
||
lang=EN-US> <i>"d"</i>
|
||
(limit) \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>260</span></u><span
|
||
lang=EN-US> :<i>"dx"</i>)</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>261</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>设置局部描述符表中<span
|
||
lang=EN-US>ldt</span>描述符的基地址字段。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>262</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>set_base</span></u>(ldt,base) <u><span
|
||
style='color:blue'>_set_base</span></u>( ((char *)&(ldt)) , base )</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>设置局部描述符表中<span
|
||
lang=EN-US>ldt</span>描述符的段长字段。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>263</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>set_limit</span></u>(ldt,limit)
|
||
<u><span style='color:blue'>_set_limit</span></u>( ((char *)&(ldt)) ,
|
||
(limit-1)>>12 )</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>264</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>从地址<span lang=EN-US>addr</span>处描述符中取段基地址。功能与<span
|
||
lang=EN-US>_set_base()</span>正好相反。</p>
|
||
|
||
<p class=a><span lang=EN-US> // edx - </span>存放基地址<span
|
||
lang=EN-US>(__base)</span>;<span lang=EN-US>%1 - </span>地址<span lang=EN-US>addr</span>偏移<span
|
||
lang=EN-US>2</span>;<span lang=EN-US>%2 - </span>地址<span lang=EN-US>addr</span>偏移<span
|
||
lang=EN-US>4</span>;<span lang=EN-US>%3 - addr</span>偏移<span lang=EN-US>7</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>265</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>_get_base</span></u>(addr) ({\</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>266</span></u><span
|
||
lang=EN-US> unsigned long __base; \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>267</span></u><span
|
||
lang=EN-US> __asm__(<i>"movb %3,%%dh\n\t"</i> \
|
||
// </span>取<span lang=EN-US>[addr+7]</span>处基址高<span lang=EN-US>16</span>位的高<span
|
||
lang=EN-US>8</span>位<span lang=EN-US>(</span>位<span lang=EN-US>31-24)</span><span
|
||
lang=EN-US style='font-family:Wingdings'>è</span><span lang=EN-US>dh</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>268</span></u><span
|
||
lang=EN-US> <i>"movb
|
||
%2,%%dl\n\t"</i> \
|
||
// </span>取<span lang=EN-US>[addr+4]</span>处基址高<span lang=EN-US>16</span>位的低<span
|
||
lang=EN-US>8</span>位<span lang=EN-US>(</span>位<span lang=EN-US>23-16)</span><span
|
||
lang=EN-US style='font-family:Wingdings'>è</span><span lang=EN-US>dl</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>269</span></u><span
|
||
lang=EN-US> <i>"shll
|
||
$16,%%edx\n\t"</i> \ // </span>基地址高<span
|
||
lang=EN-US>16</span>位移到<span lang=EN-US>edx</span>中高<span lang=EN-US>16</span>位处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>270</span></u><span
|
||
lang=EN-US> <i>"movw
|
||
%1,%%dx"</i> \
|
||
// </span>取<span lang=EN-US>[addr+2]</span>处基址低<span lang=EN-US>16</span>位<span
|
||
lang=EN-US>(</span>位<span lang=EN-US>15-0)</span><span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>dx</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>271</span></u><span
|
||
lang=EN-US> :<i>"=d"</i>
|
||
(__base) \
|
||
// </span>从而<span lang=EN-US>edx</span>中含有<span lang=EN-US>32</span>位的段基地址。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>272</span></u><span
|
||
lang=EN-US> :<i>"m"</i>
|
||
(*((addr)+2)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>273</span></u><span
|
||
lang=EN-US> <i>"m"</i>
|
||
(*((addr)+4)), \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>274</span></u><span
|
||
lang=EN-US> <i>"m"</i>
|
||
(*((addr)+7))); \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>275</span></u><span
|
||
lang=EN-US> __base;})</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>276</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>取局部描述符表中<span
|
||
lang=EN-US>ldt</span>所指段描述符中的基地址。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>277</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>get_base</span></u>(ldt) <u><span
|
||
style='color:blue'>_get_base</span></u>( ((char *)&(ldt)) )</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>278</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>取段选择符<span lang=EN-US>segment</span>指定的描述符中的段限长值。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>指令<span lang=EN-US>lsl</span>是<span
|
||
lang=EN-US>Load Segment Limit</span>缩写。它从指定段描述符中取出分散的限长比特位拼成完整的</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>段限长值放入指定寄存器中。所得的段限长是实际字节数减<span
|
||
lang=EN-US>1</span>,因此这里还需要加<span lang=EN-US>1</span>后才返回。</p>
|
||
|
||
<p class=a><span lang=EN-US> // %0 - </span>存放段长值<span
|
||
lang=EN-US>(</span>字节数<span lang=EN-US>)</span>;<span lang=EN-US>%1 - </span>段选择符<span
|
||
lang=EN-US>segment</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>279</span></u><span
|
||
lang=EN-US> #define <u><span style='color:blue'>get_limit</span></u>(segment)
|
||
({ \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>280</span></u><span
|
||
lang=EN-US> unsigned long __limit; \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>281</span></u><span
|
||
lang=EN-US> __asm__(<i>"lsll %1,%0\n\tincl %0"</i>:<i>"=r"</i>
|
||
(__limit):<i>"r"</i> (segment)); \</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>282</span></u><span
|
||
lang=EN-US> __limit;})</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>283</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>284</span></u><span
|
||
lang=EN-US> #endif</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>285</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<div class=a align=center style='text-align:center'><span lang=EN-US>
|
||
|
||
<hr size=4 width="100%" align=center>
|
||
|
||
</span></div>
|
||
|
||
<p class=MsoNormal><span lang=EN-US> </span></p>
|
||
|
||
<p class=MsoNormal><span lang=EN-US> </span></p>
|
||
|
||
</div>
|
||
|
||
</body>
|
||
|
||
</html>
|