Files
oldlinux-website/Book-Lite/code-list/html/P14-26.html
2024-02-19 01:11:57 -05:00

3371 lines
127 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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:51;
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:52;
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:53;
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>&nbsp; <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>&nbsp; <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>&nbsp; <u><span style='color:blue'>3</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>4</span></u>
#define <u><span style='color:blue'>HZ</span></u> 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// </span>定义系统时钟滴答频率<span lang=EN-US>(1</span>百赫兹,每个滴答<span
lang=EN-US>10ms)</span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>5</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>6</span></u>
#define <u><span style='color:blue'>NR_TASKS</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>系统中同时最多任务(进程)数。</p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>7</span></u>
#define <u><span style='color:blue'>TASK_SIZE</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0x04000000&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;// </span>每个任务的长度(<span
lang=EN-US>64MB</span>)。</p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>8</span></u>
#define <u><span style='color:blue'>LIBRARY_SIZE</span></u>&nbsp;&nbsp;&nbsp;
0x00400000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </span>动态加载库长度(<span
lang=EN-US>4MB</span>)。</p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>9</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>10</span></u> #if
(<u><span style='color:blue'>TASK_SIZE</span></u> &amp; 0x3fffff)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>11</span></u>
#error <i>&quot;TASK_SIZE must be multiple of 4M&quot;</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;// </span>任务长度必须是<span lang=EN-US>4MB</span>的倍数。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>12</span></u>
#endif</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>13</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>14</span></u> #if
(<u><span style='color:blue'>LIBRARY_SIZE</span></u> &amp; 0x3fffff)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>15</span></u>
#error <i>&quot;LIBRARY_SIZE must be a multiple of 4M&quot;</i>&nbsp; // </span>库长度也必须是<span
lang=EN-US>4MB</span>的倍数。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>16</span></u>
#endif</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>17</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>18</span></u> #if
(<u><span style='color:blue'>LIBRARY_SIZE</span></u> &gt;= (<u><span
style='color:blue'>TASK_SIZE</span></u>/2))</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>19</span></u>
#error <i>&quot;LIBRARY_SIZE too damn big!&quot;</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>加载库的长度不得大于任务长度的一半。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>20</span></u>
#endif</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>21</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>22</span></u> #if
(((<u><span style='color:blue'>TASK_SIZE</span></u>&gt;&gt;16)*<u><span
style='color:blue'>NR_TASKS</span></u>) != 0x10000)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>23</span></u>
#error <i>&quot;TASK_SIZE*NR_TASKS must be 4GB&quot;</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>任务长度<span lang=EN-US>*</span>任务总个数必须为<span lang=EN-US>4GB</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>24</span></u>
#endif</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>25</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>在进程逻辑地址空间中动态库被加载的位置(<span
lang=EN-US>60MB</span>处)。</p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;<u><span style='color:blue'>27</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&nbsp;<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>)&nbsp;&nbsp; ((<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>&nbsp;<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>)&nbsp; (((<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>&nbsp;<u><span style='color:blue'>30</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<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]&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</span>任务<span lang=EN-US>0</span>比较特殊,所以特意给它单独定义一个符号。</p>
<p class=a><span lang=EN-US>&nbsp;<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]&nbsp;&nbsp;&nbsp;&nbsp;
// </span>任务数组中的最后一项任务。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>33</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>34</span></u>
#include &lt;linux/head.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>35</span></u>
#include &lt;linux/fs.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>36</span></u>
#include &lt;linux/mm.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>37</span></u>
#include &lt;sys/param.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>38</span></u>
#include &lt;sys/time.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>39</span></u>
#include &lt;sys/resource.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>40</span></u>
#include &lt;signal.h&gt;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>41</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>42</span></u> #if
(<u><span style='color:blue'>NR_OPEN</span></u> &gt; 32)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>43</span></u>
#error <i>&quot;Currently the close-on-exec-flags and select masks are in one
long, max 32 files/proc&quot;</i></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>44</span></u>
#endif</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>45</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>这里定义了进程运行时可能处的状态。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>46</span></u>
#define <u><span style='color:blue'>TASK_RUNNING</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0&nbsp;&nbsp; // </span>进程正在运行或已准备就绪。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>47</span></u>
#define <u><span style='color:blue'>TASK_INTERRUPTIBLE</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp;&nbsp; // </span>进程处于可中断等待状态。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>48</span></u>
#define <u><span style='color:blue'>TASK_UNINTERRUPTIBLE</span></u>&nbsp;&nbsp;&nbsp;
2&nbsp;&nbsp; // </span>进程处于不可中断等待状态,主要用于<span lang=EN-US>I/O</span>操作等待。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>49</span></u>
#define <u><span style='color:blue'>TASK_ZOMBIE</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3&nbsp;&nbsp; // </span>进程处于僵死状态,已经停止运行,但父进程还没发信号。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>50</span></u>
#define <u><span style='color:blue'>TASK_STOPPED</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
4&nbsp;&nbsp; // </span>进程已停止。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>51</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;<u><span style='color:blue'>53</span></u>
#define <u><span style='color:blue'>NULL</span></u> ((void *) 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>定义<span lang=EN-US>NULL</span>为空指针。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>54</span></u>
#endif</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>55</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>复制进程的页目录页表。<span
lang=EN-US>Linus</span>认为这是内核中最复杂的函数之一。<span lang=EN-US>( mm/memory.c, 105 )</span></p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;&nbsp;&nbsp; // </span>释放页表所指定的内存块及页表本身。<span
lang=EN-US>( mm/memory.c, 150 )</span></p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;<u><span style='color:blue'>58</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>调度程序的初始化函数。<span
lang=EN-US>( kernel/sched.c, 385 )</span></p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;&nbsp;&nbsp; // </span>进程调度函数。<span
lang=EN-US>( kernel/sched.c, 104 )</span></p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;<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>&nbsp;&nbsp;&nbsp; // </span>显示内核出错信息,然后进入死循环。<span
lang=EN-US>( kernel/panic.c, 16 )</span></p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;<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>&nbsp;<u><span style='color:blue'>64</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>65</span></u>
typedef int (*<u><span style='color:blue'>fn_ptr</span></u>)();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>定义函数指针类型。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>66</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>下面是数学协处理器使用的结构,主要用于保存进程切换时<span
lang=EN-US>i387</span>的执行状态信息。</p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;<u><span style='color:blue'>68</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; cwd;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</span>控制字<span lang=EN-US>(Control word)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>69</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; <u><span style='color:blue'>swd</span></u>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;// </span>状态字<span lang=EN-US>(Status word)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>70</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; twd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</span>标记字<span lang=EN-US>(Tag word)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>71</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; fip;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</span>协处理器代码指针。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>72</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; fcs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//
</span>协处理器代码段寄存器。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>73</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; foo;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>内存操作数的偏移位置。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>74</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; fos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>内存操作数的段值。</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>75</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; st_space[20];&nbsp;&nbsp; <b><i>/* 8*10 bytes for each
FP-reg = 80 bytes */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>76</span></u> };&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/* 8</span><span lang=EN-US>10</span>字节的协处理器累加器。<span lang=EN-US>*/</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>77</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>任务状态段数据结构。</p>
<p class=a><span lang=EN-US>&nbsp;<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>&nbsp;<u><span style='color:blue'>79</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; back_link;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/* 16
high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>80</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; esp0;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>81</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
ss0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>82</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; esp1;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>83</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
ss1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>84</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; esp2;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>85</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
ss2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>86</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; cr3;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>87</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; eip;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>88</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; eflags;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>89</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; eax,ecx,edx,ebx;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>90</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; esp;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>91</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; ebp;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>92</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; esi;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>93</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; edi;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>94</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
es;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>95</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
cs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>96</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
ss;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>97</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
ds;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>98</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
fs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/*
16 high bits zero */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>99</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
gs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp;
ldt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
long&nbsp;&nbsp;&nbsp; trace_bitmap;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; // </span>下面是任务(进程)数据结构,或称为进程描述符。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
state&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</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>&gt;0</span>已停止)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
counter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>任务运行时间计数<span lang=EN-US>(</span>递减<span lang=EN-US>)</span>(滴答数),运行时间片。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
priority&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>优先数。任务开始运行时<span lang=EN-US>counter=priority</span>,越大运行越长。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long signal&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>信号位图,每个比特位代表一种信号,信号值<span
lang=EN-US>=</span>位偏移值<span lang=EN-US>+1</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct sigaction
sigaction[32]&nbsp;&nbsp; </span>信号执行属性结构,对应信号将要执行的操作和标志信息。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
blocked&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>进程信号屏蔽码(对应信号位图)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // -------------------</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // int
exit_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>任务执行停止的退出码,其父进程会取。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned long
start_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>代码段地址。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned long
end_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>代码长度(字节数)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned long
end_data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>代码长度<span lang=EN-US>
+ </span>数据长度(字节数)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned long
brk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>总长度(字节数)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned long
start_stack&nbsp;&nbsp;&nbsp;&nbsp; </span>堆栈段地址。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>进程标识号<span
lang=EN-US>(</span>进程号<span lang=EN-US>)</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
pgrp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>进程组号。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
session&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>会话号。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
leader&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>会话首领。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // int
groups[NGROUPS]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>进程所属组号。一个进程可属于多个组。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // task_struct
*p_pptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>指向父进程的指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // task_struct
*p_cptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>指向最新子进程的指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // task_struct
*p_ysptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>指向比自己后创建的相邻进程的指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // task_struct
*p_osptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>指向比自己早创建的相邻进程的指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
uid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>用户标识号(用户<span
lang=EN-US>id</span>)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
euid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>有效用户<span
lang=EN-US>id</span></p>
<p class=a><span lang=EN-US>&nbsp; &nbsp;&nbsp;// unsigned short
suid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>保存的用户<span
lang=EN-US>id</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
gid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>组标识号(组<span
lang=EN-US>id</span>)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
egid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>有效组<span
lang=EN-US>id</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
sgid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>保存的组<span
lang=EN-US>id</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
timeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>内核定时超时值。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
alarm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>报警定时值(滴答数)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
utime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>用户态运行时间(滴答数)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
stime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>系统态运行时间(滴答数)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
cutime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>子进程用户态运行时间。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
cstime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>子进程系统态运行时间。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // long
start_time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>进程开始运行时刻。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct rlimit
rlim[RLIM_NLIMITS] &nbsp;</span>进程资源使用统计数组。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned int
flags;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>各进程的标志,在下面第<span
lang=EN-US>149</span>行开始定义(还未使用)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
used_math&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>标志:是否使用了协处理器。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // ------------------------</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // int tty &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>进程使用<span
lang=EN-US>tty</span>终端的子设备号。<span lang=EN-US>-1</span>表示没有使用。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned short
umask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>文件创建属性屏蔽位。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct m_inode *
pwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>当前工作目录<span
lang=EN-US>i</span>节点结构指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct m_inode *
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>根目录<span
lang=EN-US>i</span>节点结构指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct m_inode *
executable&nbsp;&nbsp; </span>执行文件<span lang=EN-US>i</span>节点结构指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct m_inode *
library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>被加载库文件<span lang=EN-US>i</span>节点结构指针。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // unsigned long
close_on_exec&nbsp;&nbsp; </span>执行时关闭文件句柄位图标志。(参见<span lang=EN-US>include/fcntl.h</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct file *
filp[NR_OPEN]&nbsp;&nbsp; </span>文件结构指针表,最多<span lang=EN-US>32</span>项。表项号即是文件描述符的值。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct desc_struct
ldt[3]&nbsp;&nbsp;&nbsp;&nbsp; </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&amp;ss</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // struct tss_struct
tss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>进程的任务状态段信息结构。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //
======================================</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long <u><span
style='color:blue'>state</span></u>;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/* -1
unrunnable, 0 runnable, &gt;0 stopped */</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>108</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long counter;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>109</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long priority;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>110</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long signal;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>111</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long
blocked;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int exit_code;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>115</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*
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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* older
sibling, respectively.&nbsp; (p-&gt;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*
p-&gt;p_pptr-&gt;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>123</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>task_struct</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int
flags;&nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
tty;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&amp;ss */</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>141</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;* 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>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /* </span>每个进程的标志<span
lang=EN-US> */&nbsp; /* </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>&nbsp;&nbsp;&nbsp;
0x00000001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;*&nbsp; 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>&nbsp;* 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>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * 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>&nbsp;&nbsp;&nbsp;&nbsp; * </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>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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, \&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//
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>&nbsp;&nbsp; 0,{{},},0, \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// 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, \&nbsp; //
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, \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// 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>,},
\&nbsp;&nbsp;&nbsp;&nbsp; // 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> &amp;<u><span style='color:blue'>init_task</span></u>.<u><span
style='color:blue'>task</span></u>,0,0,0, \&nbsp;&nbsp;&nbsp; // 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>&nbsp;&nbsp; 0,0,0,0,0,0, \&nbsp;&nbsp;&nbsp;
// 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>&nbsp;&nbsp; 0,0,0,0,0,0,0, \&nbsp; //
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>&nbsp;&nbsp; { {0x7fffffff, 0x7fffffff},
{0x7fffffff, 0x7fffffff},&nbsp; \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>166</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}, \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>167</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{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>&nbsp;&nbsp;&nbsp;&nbsp; 0, \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, \ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
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>&nbsp;&nbsp; -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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<u><span
style='color:blue'>NULL</span></u>,}, \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //
filp[20]</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>172</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// ldt[3]</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>173</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{0x9f,0xc0fa00}, \&nbsp; // </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{0x9f,0xc0f200}, \&nbsp; // </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, \</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)&amp;<u><span
style='color:blue'>init_task</span></u>,0x10,0,0,0,0,(long)&amp;<u><span
style='color:blue'>pg_dir</span></u>,\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //
tss</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>178</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{} \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>182</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, \</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>];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</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>)&nbsp;
// </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;* 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>&nbsp;* 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>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </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>&nbsp;&nbsp;&nbsp;&nbsp; * 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>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </span>宏定义,计算在全局表中第<span
lang=EN-US>n</span>个任务的<span lang=EN-US>TSS</span>段描述符的选择符值(偏移量)。</p>
<p class=a><span lang=EN-US>&nbsp; &nbsp;&nbsp;// </span>因每个描述符占<span
lang=EN-US>8</span>字节,因此<span lang=EN-US>FIRST_TSS_ENTRY&lt;&lt;3 </span>表示该描述符在<span
lang=EN-US>GDT</span>表中的起始偏移位置。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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&lt;&lt;4
</span>来表示对应</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // 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)&lt;&lt;4)+(<u><span style='color:blue'>FIRST_TSS_ENTRY</span></u>&lt;&lt;3))</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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)&lt;&lt;4)+(<u><span style='color:blue'>FIRST_LDT_ENTRY</span></u>&lt;&lt;3))</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&quot;ltr
%%ax&quot;</i>::<i>&quot;a&quot;</i> (<u><span style='color:blue'>_TSS</span></u>(n)))</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&quot;lldt
%%ax&quot;</i>::<i>&quot;a&quot;</i> (<u><span style='color:blue'>_LDT</span></u>(n)))</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>取当前运行任务的任务号(是任务数组中的索引值,与进程号<span
lang=EN-US>pid</span>不同)。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&quot;str %%ax\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;subl
%2,%%eax\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // (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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;shrl
$4,%%eax&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// (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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<i>&quot;=a&quot;</i>
(n) \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>215</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<i>&quot;a&quot;</i>
(0),<i>&quot;i&quot;</i> (<u><span style='color:blue'>FIRST_TSS_ENTRY</span></u>&lt;&lt;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>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;* 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>&nbsp;* 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>&nbsp;* 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>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * 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>&nbsp;&nbsp;&nbsp;&nbsp; * </span>如果是则什么也不做退出。如果我们切换到的任务最近(上次运行)使用过数学</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>协处理器的话,则还需复位控制寄存器<span
lang=EN-US>cr0</span>中的<span lang=EN-US>TS</span>标志。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>跳转到一个任务的<span
lang=EN-US>TSS</span>段选择符组成的地址处会造成<span lang=EN-US>CPU</span>进行任务切换操作。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>输入:<span lang=EN-US>%0
- </span>指向<span lang=EN-US>__tmp</span><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;%1 - </span>指向<span lang=EN-US>__tmp.b</span>处,用于存放新<span
lang=EN-US>TSS</span>的选择符;</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dx - </span>新任务<span lang=EN-US>n</span><span
lang=EN-US>TSS</span>段选择符;<span lang=EN-US>&nbsp; ecx - </span>新任务<span
lang=EN-US>n</span>的任务结构指针<span lang=EN-US>task[n]</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // 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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // </span>转目的地的长指针,其格式为:<span
lang=EN-US>jmp 16</span>位段选择符:<span lang=EN-US>32</span>位偏移值。但在内存中操作数的表示顺</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>序与这里正好相反。任务切换回来之后,在判断原任务上次执行是否使用过协处理器时,是通过</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>将原任务指针与保存在<span
lang=EN-US>last_task_used_math</span>变量中的上次使用过协处理器任务指针进行比较而</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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>&quot;cmpl %%ecx,_current\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;je
1f\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>是,则什么都不做,退出。</p>
<p class=a><u><span lang=EN-US style='color:blue'>226</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movw
%%dx,%1\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;xchgl
%%ecx,_current\n\t&quot;</i> \&nbsp;&nbsp;&nbsp; // 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;ljmp
%0\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>执行长跳转至<span lang=EN-US>*&amp;__tmp</span>,造成任务切换。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>在任务切换回来后才会继续执行下面的语句。</p>
<p class=a><u><span lang=EN-US style='color:blue'>229</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;cmpl
%%ecx,_last_task_used_math\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp; // </span>原任务上次使用过协处理器吗?</p>
<p class=a><u><span lang=EN-US style='color:blue'>230</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;jne
1f\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>没有则跳转,退出。</p>
<p class=a><u><span lang=EN-US style='color:blue'>231</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;clts\n&quot;</i>
\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;1:&quot;</i>
\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::<i>&quot;m&quot;</i>
(*&amp;__tmp.a),<i>&quot;m&quot;</i> (*&amp;__tmp.b), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>234</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;d&quot;</i>
(<u><span style='color:blue'>_TSS</span></u>(n)),<i>&quot;c&quot;</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>&nbsp;&nbsp;&nbsp; // </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)&amp;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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // %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>&quot;movw %%dx,%0\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;rorl
$16,%%edx\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //
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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movb
%%dl,%1\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movb %%dh,%2&quot;</i>
\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::<i>&quot;m&quot;</i>
(*((addr)+2)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>245</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;m&quot;</i>
(*((addr)+4)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>246</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;m&quot;</i>
(*((addr)+7)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>247</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;d&quot;</i>
(base) \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>248</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<i>&quot;dx&quot;</i>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp; // %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>&quot;movw %%dx,%0\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;rorl
$16,%%edx\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //
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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movb
%1,%%dh\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;andb
$0xf0,%%dh\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;orb
%%dh,%%dl\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movb
%%dl,%1&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::<i>&quot;m&quot;</i>
(*(addr)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>258</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;m&quot;</i>
(*((addr)+6)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>259</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;d&quot;</i>
(limit) \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>260</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<i>&quot;dx&quot;</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>&nbsp;&nbsp;&nbsp; // </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 *)&amp;(ldt)) , base )</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </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 *)&amp;(ldt)) ,
(limit-1)&gt;&gt;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>&nbsp;&nbsp;&nbsp; // </span>从地址<span lang=EN-US>addr</span>处描述符中取段基地址。功能与<span
lang=EN-US>_set_base()</span>正好相反。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // 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>&quot;movb %3,%%dh\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movb
%2,%%dl\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;shll
$16,%%edx\n\t&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;movw
%1,%%dx&quot;</i> \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<i>&quot;=d&quot;</i>
(__base) \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<i>&quot;m&quot;</i>
(*((addr)+2)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>273</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;m&quot;</i>
(*((addr)+4)), \</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>274</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i>&quot;m&quot;</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>&nbsp;&nbsp;&nbsp; // </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 *)&amp;(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>&nbsp;&nbsp;&nbsp; // </span>取段选择符<span lang=EN-US>segment</span>指定的描述符中的段限长值。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>指令<span lang=EN-US>lsl</span><span
lang=EN-US>Load Segment Limit</span>缩写。它从指定段描述符中取出分散的限长比特位拼成完整的</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>段限长值放入指定寄存器中。所得的段限长是实际字节数减<span
lang=EN-US>1</span>,因此这里还需要加<span lang=EN-US>1</span>后才返回。</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // %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>&quot;lsll %1,%0\n\tincl %0&quot;</i>:<i>&quot;=r&quot;</i>
(__limit):<i>&quot;r&quot;</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>&nbsp;</span></p>
<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
</div>
</body>
</html>