📄 操作系统引导探究.htm
字号:
<HTML xmlns:o = "urn:schemas-microsoft-com:office:office" xmlns:st1 =
<HEAD><TITLE>操作系统引导探究</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="Microsoft FrontPage 4.0" name=GENERATOR><LINK media=all
href="操作系统引导探究_files/style.css" type=text/css rel=stylesheet><LINK media=all
href="操作系统引导探究_files/customcss.aspx" type=text/css rel=stylesheet><LINK
media=print href="操作系统引导探究_files/print.css" type=text/css rel=stylesheet><LINK
title=RSS href="http://blog.csdn.net/hbzxf/rss.aspx" type=application/rss+xml
rel=alternate><LINK
<BODY>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B
style="mso-bidi-font-weight: normal"><SPAN
style="COLOR: #ff6600; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前言</SPAN><SPAN
lang=EN style="COLOR: #ff6600"><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本篇文章并不旨在完整的讨论一个多引导系统程序怎样去引导不同的操作系统,而只打算从编写操作系统的角度出发,谈谈计算机怎样从加电开始,从无到有,将操作系统运行起来,在其中将尽量详尽的描述从实模式到保护模式的过渡,目的只在于能将所学与广大爱好者更享,为希望开发操作系统的朋友留下一点资料,也为自己留下一点心得。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本篇文章将以开发中的</SPAN><SPAN
class=SpellE><SPAN lang=EN>pyos</SPAN></SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统引导程序为例,</SPAN><SPAN
class=SpellE><SPAN lang=EN>pyos</SPAN></SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个正在开发中的实验型操作系统,它并不打算以目前任何一种运行中的操作系统为模式,而只想通过自己编写一个从头到尾的操作系统来学习知识,积累技术,如果你有兴趣,非常欢迎你的加入!</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本篇纯属学习过程中的一点心得体会,如果你发现其中有错误或不当之处,非常希望你来信指教。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
lang=EN><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B
style="mso-bidi-font-weight: normal"><SPAN
style="COLOR: #ff6600; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、计算机从加<SPAN
class=GramE>电开始</SPAN>都做了什么?</SPAN><SPAN lang=EN
style="COLOR: #ff6600"><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当机算机的电源键被按下时,同这个键相联的电信号线就会送出一个电信号给主板,主板将此电信号传给供电系统,供电系统开始工作,为整个系统供电,并送出一个电信号给</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,通知</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">供电系统已经准备完毕。随后</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">启动一个程序,进行主机自检,主机自检的主要工作是确保系统的每一个部分都得到了电源支持,内存储器、主板上的其它芯片、键盘、鼠标、磁盘控制器及一些</SPAN><SPAN
lang=EN>I/O</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端口正常可用,此后,自检程序将控制权还给</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。接下来</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">读取</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置,得到引导驱动器的顺序,然后依次检查,直到找到可以用来引导的驱动器(或说可以用来引导的磁盘,包括软盘、硬盘、光盘等),然后调用这个驱动器上磁盘的引导扇区进行引导。</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是怎么知道或说分辨哪一个磁盘可以用来引导的呢?</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
lang=EN><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B
style="mso-bidi-font-weight: normal"><SPAN
style="COLOR: #ff6600; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">二、认识引导程序</SPAN><SPAN
lang=EN style="COLOR: #ff6600"><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将所检查磁盘的第一个扇区(</SPAN><SPAN
lang=EN>512B</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">)载入内存,放在</SPAN><SPAN
lang=EN>0x0000:0x<st1:chmetcnv
style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x"
tabIndex=0 UnitName="C" SourceValue="7" HasSpace="False" Negative="False"
NumberType="1" TCSC="0" w:st="on">7c</st1:chmetcnv>00</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处(见图三),如果<SPAN
class=GramE>个</SPAN>扇区的最后两个字节是“</SPAN><SPAN lang=EN>55 AA</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”,那么这就是一个引导扇区,这个磁盘也就是一块可引导盘。通常这个大小为</SPAN><SPAN
lang=EN>512B</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的程序就称为引导程序(</SPAN><SPAN
lang=EN>boot</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">)。如果最后两个字节不是“</SPAN><SPAN
lang=EN>55 AA</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”,那么</SPAN><SPAN
lang=EN>BIOS</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就检查下一个磁盘驱动器。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过上面的表述我可可以总结出如下三点引导程序所具有的特点:</SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 59.25pt; TEXT-INDENT: -37.5pt; mso-list: l1 level1 lfo2; tab-stops: list 59.25pt"><SPAN
lang=EN style="COLOR: blue; mso-fareast-font-family: 'Times New Roman'"><SPAN
style="mso-list: Ignore">1.<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN></SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它的大小是</SPAN><SPAN
lang=EN style="COLOR: blue">512B</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,不能多一字节也不能少一字节,因为</SPAN><SPAN
lang=EN style="COLOR: blue">BIOS</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只读</SPAN><SPAN
lang=EN style="COLOR: blue">512B</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到内存中去。</SPAN><SPAN
lang=EN style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 59.25pt; TEXT-INDENT: -37.5pt; mso-list: l1 level1 lfo2; tab-stops: list 59.25pt"><SPAN
lang=EN style="COLOR: blue; mso-fareast-font-family: 'Times New Roman'"><SPAN
style="mso-list: Ignore">2.<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN></SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它的结尾两字节必须是“</SPAN><SPAN
lang=EN style="COLOR: blue">55 AA</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”,这是引导扇区的标志。</SPAN><SPAN
lang=EN style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 59.25pt; TEXT-INDENT: -37.5pt; mso-list: l1 level1 lfo2; tab-stops: list 59.25pt"><SPAN
lang=EN style="COLOR: blue; mso-fareast-font-family: 'Times New Roman'"><SPAN
style="mso-list: Ignore">3.<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN></SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它总是放在磁盘的第一个扇区上(</SPAN><SPAN
lang=EN style="COLOR: blue">0</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">磁头,</SPAN><SPAN
lang=EN style="COLOR: blue">0</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">磁道,</SPAN><SPAN
lang=EN style="COLOR: blue">1</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">扇区),因为</SPAN><SPAN
lang=EN style="COLOR: blue">BIOS</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只读第一个扇区。</SPAN><SPAN
lang=EN style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21.75pt; TEXT-ALIGN: center"
align=center><SPAN lang=EN><v:shapetype id=_x0000_t75 stroked="f" filled="f"
path=" m@4@5 l@4@11@9@11@9@5 xe" o:preferrelative="t" o:spt="75"
coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f
eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -