⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 01.htm

📁 linux的一个启动boot文件
💻 HTM
📖 第 1 页 / 共 4 页
字号:
          <TD align=middle><IFRAME marginWidth=0 marginHeight=0 
            src="C:\Documents and Settings\Administrator\My Documents\freeos\temp\os\01.files\ad(2).htm" 
            frameBorder=0 noResize width=132 scrolling=no 
        height=422></IFRAME></TD></TR></TBODY></TABLE><!-- 包含短信结束 --></TD>
    <TD vAlign=top width=604><!-- 包含菜单开始--><!-- 模版文件头 --><!-- 模版文件头 结束 -->
      <TABLE class=pg1 height=6 cellSpacing=0 cellPadding=0 width=605 
        border=0><TBODY>
        <TR>
          <TD width=27 bgColor=#4786bc height=22><IMG height=24 
            src="01.files/left_yuan.gif" width=33></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><A 
            onmouseover="MM_swapImage('Image171','','../images/developers/button1_bottom.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://linux.ccidnet.com/pub/disp/Column?columnID=288" 
            target=_blank><IMG height=18 src="01.files/button1_top.gif" width=66 
            border=0 name=Image171></A></DIV></TD>
          <TD bgColor=#cccc98 height=22><IMG height=13 src="01.files/line.gif" 
            width=1></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><A 
            onmouseover="MM_swapImage('Image172','','../images/developers/button2_bottom.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://linux.ccidnet.com/pub/disp/Column?columnID=290" 
            target=_blank><IMG height=18 src="01.files/button2_top.gif" width=66 
            border=0 name=Image172></A></DIV></TD>
          <TD bgColor=#cccc98 height=22><IMG height=13 src="01.files/line.gif" 
            width=1></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><A 
            onmouseover="MM_swapImage('Image173','','../images/developers/button3_bottom.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://linux.ccidnet.com/pub/disp/Column?columnID=293" 
            target=_blank><IMG height=18 src="01.files/button3_top.gif" width=66 
            border=0 name=Image173></A></DIV></TD>
          <TD bgColor=#cccc98 height=22><IMG height=13 src="01.files/line.gif" 
            width=1></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><A 
            onmouseover="MM_swapImage('Image174','','../images/developers/button4_bottom.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://linux.ccidnet.com/pub/disp/Column?columnID=296" 
            target=_blank><IMG height=18 src="01.files/button4_top.gif" width=66 
            border=0 name=Image174></A></DIV></TD>
          <TD bgColor=#cccc98 height=22><IMG height=13 src="01.files/line.gif" 
            width=1></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><IMG height=18 src="01.files/button5_bottom.gif" 
            width=50 border=0 name=Image165></DIV></TD>
          <TD bgColor=#cccc98 height=22><IMG height=13 src="01.files/line.gif" 
            width=1></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><A 
            onmouseover="MM_swapImage('Image176','','../images/developers/button6_bottom.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://linux.ccidnet.com/pub/disp/Column?columnID=315" 
            target=_blank><IMG height=18 src="01.files/button6_top.gif" width=50 
            border=0 name=Image176></A></DIV></TD>
          <TD bgColor=#cccc98 height=22><IMG height=13 src="01.files/line.gif" 
            width=1></TD>
          <TD bgColor=#cccc98 height=22>
            <DIV align=center><A 
            onmouseover="MM_swapImage('Image177','','../images/developers/button7_bottom.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://bbs.ccidnet.com/forumdisplay.php?forumid=13" 
            target=_blank><IMG height=18 src="01.files/button7_top.gif" width=80 
            border=0 name=Image177></A></DIV></TD>
          <TD width=17 bgColor=#ffffff height=22><IMG height=24 
            src="01.files/right_yuan.gif" width=18></TD></TR></TBODY></TABLE><!-- 包含菜单结束-->
      <TABLE cellSpacing=0 cellPadding=0 width=580 align=center border=0>
        <TBODY>
        <TR>
          <TD class=content vAlign=top colSpan=2 height=20><IMG height=5 
            src="" width=5><BR><!-- 包含导航开始--><!-- 模版文件头 结束 -->
            <TABLE class=content01 cellSpacing=1 width=414 border=0>
              <TBODY>
              <TR>
                <TD width="100%"><IMG height=10 src="01.files/triangle.gif" 
                  width=11> 当前页面位置:<A class=link 
                  href="http://www.ccidnet.com/">主页</A> :<A class=link 
                  href="http://linux.ccidnet.com/pub/disp/Column?columnID=287&amp;pageNO=1">开发者</A>:<A 
                  class=link 
                  href="http://linux.ccidnet.com/pub/disp/Column?columnID=301&amp;pageNO=1">Linux</A>:<A 
                  class=link 
                  href="http://linux.ccidnet.com/pub/disp/Column?columnID=303&amp;pageNO=1"><B>技术开发</B></A><B>:文章</B> 
                </TD></TR></TBODY></TABLE><!-- 包含导航结束--></TD>
        <TR>
          <TD colSpan=2 height=10></TD></TR>
        <TR bgColor=#7e99a4>
          <TD colSpan=2 height=2></TD></TR>
        <TR>
          <TD class=content vAlign=top colSpan=2 height=15>
            <DIV align=right><!-- 包含发送email开始-->
            <FORM name=sendmail 
            action=http://club.ccidnet.com/send_to_friend.php3 method=post 
            target=_blank><INPUT type=hidden value=编写实模式多任务操作系统模型之一 name=title> 
            <INPUT type=hidden value="高克强 王兴泰" name=author> <INPUT type=hidden 
            value="2002.12.31 11:23:33" name=publish_time> <INPUT type=hidden 
            value=Article?columnID=303&amp;articleID=35451&amp;pageNO=1 
            name=link> </FORM><IMG height=5 src="" width=5><BR><A 
            class=content01 href="javascript:self.print()"><IMG title=打印 
            height=18 src="01.files/printer.gif" width=24 border=0>打印</A> <A 
            class=content01 href="javascript:document.sendmail.submit()"><IMG 
            title=发给朋友 height=18 src="01.files/comment.gif" width=24 
            border=0>发给朋友</A> <A class=content01 
            href="http://club.ccidnet.com/remark.php3?channel=303&amp;title=编写实模式多任务操作系统模型之一"><IMG 
            title=发表评论 height=18 src="01.files/send.gif" width=24 
            border=0>发表评论</A> <!-- 包含发送email结束--></DIV></TD></TR><!-- 包含文章开始--><!-- 文章显示 -->
        <TR>
          <TD class=content vAlign=top width=19></TD>
          <TD class=content vAlign=top width=561><IMG height=5 src="" 
            width=5><BR><SPAN 
            class=p16><B>编写实模式多任务操作系统模型之一(1)</B></SPAN><BR>作者:高克强 王兴泰 
            &nbsp;&nbsp;&nbsp;本文选自:开放系统世界——赛迪网&nbsp;&nbsp;2002年12月31日 </TD></TR>
        <TR>
          <TD class=content vAlign=top width=19></TD>
          <TD class=content vAlign=top width=561 height=144><BR><SPAN 
            class=p11b><IFRAME align=right marginWidth=0 marginHeight=0 
            src="C:\Documents and Settings\Administrator\My Documents\freeos\temp\os\01.files\ad(3).htm" 
            frameBorder=0 noResize width=360 scrolling=no 
            height=300></IFRAME>操作系统是计算机软件系统的重要组成部分,它起着管理计算机软硬件资源、控制计算机的正常运行及为各类用户提供使用接口等诸多功能,是其它各类应用软件赖以存在的基础。 
            <BR><BR>由于操作系统软件多数以公司模式集体开发,并以成品软件的形式进行发售,使得用户只能局限于操作系统所提供的使用界面及系统功能调用上,对于系统底层的运行机制的理解只能局限于一些表面现象上,不能深入把握操作系统内部的运作机理,即使以源码形式提供的,也由于其规模庞大、特征繁多,使得用户不可能在短时间内完全掌握运行机制。为了能充分了解操作系统的功能实现,自己亲自动手编写一个小型的,或是实现部分功能的操作系统模型,而后逐步完善不失为一种好方法。本文所述的这一操作系统模型即是在这方面的一次尝试。 
            <BR><BR>
            <CENTER><FONT 
            color=#000099><STRONG>功能及特点</STRONG></FONT></CENTER><BR><BR>1.实现在x86实模式下分时的多任务功能。 
            <BR><BR>2.PC机自检完成后可以完成机器的引导。 
            <BR><BR>3.引导成功后可以使3个进程并行运行,分别运行于自身的程序空间内,完成自身计数器的计值工作,并采用直接写屏方式输出到屏幕上。 
            <BR><BR>4.有一个内核级键盘中断处理程序。 <BR><BR>5.软件规模小巧,易于研读、理解和实践,以及进行功能的增强和拓展。 
            <BR><BR>6.程序分模块编写,功能明确,界限清晰。 <BR><BR>7.对于机器的配置要求极低,以Intel 80x86 
            处理器为CPU的PC机、VGA彩色显示器、3英寸软驱即可。 <BR><BR>
            <CENTER><FONT 
            color=#000099><STRONG>运行机制</STRONG></FONT></CENTER><BR><BR>众所周知,Intel 
            80386以上的CPU具有实模式和保护模式两种工作方式,处于保护模式的CPU在硬件上支持存储器管理、虚拟地址、分页、保护等功能,具有多任务切换机制,是现今的多用户多任务操作系统如Windows、Linux、FreeBSD 
            等所采用的工作方式。而工作于实模式80386 及以上的CPU相当于高性能的8086 CPU 
            ,本身在硬件上不具备多任务的切换机制,那末,在x86的实模式下是否可以实现现多任务功能呢?答案是肯定的,利用软件进行模拟。 
            <BR><BR>本程序在系统时钟中断的驱动下,利用软件方式在x86 
            CPU实模式下实现了一个多任务操作系统模型,可以启动机器,并在屏幕上显示由3个并行进程输出的各自程序计数器。 
            在宏观上,3个进程在并行运行。在微观实现上,通过时钟中断的控制,3个进程依次轮流占用CPU完成各自的工作,即每当发生时钟中断,Kernel内的调度程序被激活,顺序将下一个先前被剥夺运行权的进程赋予运行权,使其可以占用CPU运行,当再次发生时钟中断时,当前运行的进程被强行中断运行,调度程序将其断点信息保存到该进程的堆栈区,待下次运行时再将其恢复,而后调度程序选择下一进程,使其转入运行状态。整个系统循环往复,直到关机。 
            <BR><BR>
            <CENTER><FONT 
            color=#000099><STRONG>相关背景知识</STRONG></FONT></CENTER><BR><BR>本程序全部利用汇编语言在x86实模式下编程,为能深入理解程序的工作原理,必须了解PC机相关软硬件知识。下面对相关内容进行简单叙述。 
            <BR><BR><B>1.PC机自举过程简述</B> 
            <BR><BR>PC机在通电后至操作系统接管控制前,要进行一系列的自检及初始化过程,包括对内存、外设等硬件的检测。在检测过程中若存在严重错误则停机。若无则试图根据CMOS内的配置信息读取启动盘上的引导记录bootsector。通常先从软盘启动(本文默认从软盘启动),将软盘上0面0道1扇区的512字节读入到内存0000:7c00h地址处,而后跳到该地址处执行,这时机器便由软件接管控制。 
            <BR><BR>通常操作系统都由一个引导程序进行引导,引导程序的主要作用在于将操作系统的内核读入内存,而后转到内核去执行,由内核接管机器的所有控制,包括内存管理、进程管理、设备管理、处理机管理等。上述启动盘上的引导记录就是一个引导程序,在该操作系统模型的实现中,boot.asm程序即起到这样功能的程序,后面将结合具体代码进行详细介绍。 
            <BR><BR><B>2.PC机的中断向量表结构</B> 
            <BR><BR>中断是改变程序运行环境的一种机制,它可以使CPU暂停当前程序的执行,转去执行引发中断的中断源的中断服务程序。在中断服务程序执行完毕后,再接着原来的程序执行。中断可以通过中断指令int 
            xx或由外部的硬件设备产生。中断向量表即提供当中断发生时,如何转向中断服务程序的方法。在中断向量表中存放了相应中断服务程序的入口地址,这一入口地址称为中断向量,它由段地址和偏移组成,即CS:IP。 
            PC机中的中断向量表位于低端内存区的1KB存储器中,绝对地址为:00000H~003FFH, 
            其中的每个中断向量占4个字节,CS占2个字节(占高地址区),IP占2个字节(占低地址区)。给定一个中断类型号,即可通过如下的方式取得中断向量的段地址及偏移: 
            <BR><BR>CS=[中断类型号*4] <BR><BR>IP=[中断类型号*4+2] 
            <BR><BR><B>3.PC机屏蔽中断的内部处理过程</B> 
            <BR><BR>PC机中断发生时,若中断标志I=1(中断允许),则有如下的内部动作: <BR><BR>◆ 
            将中断类型号*4,得到中断向量表的指针; <BR><BR>◆ 将CPU的标志寄存器Flag入栈; <BR><BR>◆ 
            将中断标志I和陷阱标志T清0; <BR><BR>◆ 将主程序断点处的CS及IP分别压入堆栈保存; <BR><BR>◆ 
            从中断向量表中取得中断服务程序的入口地址,分别送到CS 和IP中; <BR><BR>◆ 转到中断服务程序去执行。 
            <BR><BR>对于软件中断,则不判断中断标志的状态,直接执行a~f的处理过程。 
            <BR><BR>在用户所写的中断服务程序的末尾,要有一条中断返回指令iret,控制程序流由中断服务程序返回到主程序中,它所完成的内部处理如下: 
            <BR><BR>◆ 将先前压栈保存的端点从堆栈弹出,送到CS和IP中; <BR><BR>◆ 执行popf操作,恢复标志寄存器Flag; 
            <BR><BR>◆ 从主程序的端点处继续运行。 <BR><BR><B>4.PC机的过程调用</B> 
            <BR><BR>PC机的过程调用通过call指令产生,它的处理过程与中断过程相似,但无标志寄存器的处理,具体如下所示。 
            <BR><BR>远过程调用:call far farentry <BR><BR>◆ 
            将返回地址(call指令的下一指令)的CS及IP压栈; <BR><BR>◆ 以farentry的偏移及段地址送入IP及CS; 
            <BR><BR>◆ 转到farentry去执行。 <BR><BR>远过程调用返回:RETF <BR><BR>◆ 
            将返回地址弹出到IP及CS; <BR><BR>◆ 从返回地址处继续执行程序。 
            <BR><BR>对于近过程调用,则调用时只保存返回地址的IP,过程结束时只恢复IP。 <BR><BR><B>5.汇编语言相关知识</B> 
            <BR><BR>本程序在Linux下用nasm进行编译。nasm是一个功能强大的开源代码的汇编语言编译程序,其语法与Intel语法相似,可以产生纯二进制的指令代码,也可以产生a.out及ELF格式的目标代码,通过连接器连接便可生成直接由操作系统运行的程序。这里用它产生二进制格式的指令代码,这是一种内存映像,加载到内存便可直接运行。关于NASM编译器的详细信息可参考相关资料。 
            </SPAN>
            <P align=center>   <BR><FONT color=#ff0000>1</FONT> <A 
            class=content01 
            href="http://linux.ccidnet.com/pub/disp/Article?columnID=303&amp;articleID=35451&amp;pageNO=2">2</A> 
            <A class=content01 
            href="http://linux.ccidnet.com/pub/disp/Article?columnID=303&amp;articleID=35451&amp;pageNO=3">3</A> 
            <SPAN class=content01><A class=content01 
            href="http://linux.ccidnet.com/pub/disp/Article?columnID=303&amp;articleID=35451&amp;pageNO=2">下一页&gt;&gt;</A></SPAN> 
            </P></TD></TR><!-- 包含文章结束--></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=580 align=center border=0>
        <TBODY>
        <TR>
          <TD><A class=content 
            href="http://market.ccidnet.com/pub/disp/Column?columnID=380"><FONT 
            color=#0000ff>“中国IT市场情报中心”会员注册优惠月</FONT></A></TD></TR></TBODY></TABLE><!-- 包含相关文章开始-->
      <TABLE 
      style="BORDER-RIGHT: #e2e3e4 1px solid; BORDER-TOP: #e2e3e4 1px solid; BORDER-LEFT: #e2e3e4 1px solid; BORDER-BOTTOM: #e2e3e4 1px solid" 
      cellSpacing=0 cellPadding=0 width=580 align=center border=0>
        <TBODY>
        <TR>
          <TD class=content bgColor=#e2e3e4 height=21>相关文章</TD></TR>
        <TR>
          <TD bgColor=#ffffff>
            <TABLE class=Name02 cellSpacing=2 cellPadding=2 width="100%" 
            border=0>
              <TBODY>
              <TR>
                <TD height=23><IMG height=7 src="01.files/a_nav.gif" 
                  width=7><A class=Name02 
                  href="http://linux.ccidnet.com/pub/disp/Article?columnID=743&amp;articleID=35411&amp;pageNO=1"> 
                  推进Linux发展 服务信息化</A> <SPAN 
                class=content01>(2002.12.31)</SPAN></TD></TR>
              <TR>
                <TD height=23><IMG height=7 src="01.files/a_nav.gif" 
                  width=7><A class=Name02 
                  href="http://linux.ccidnet.com/pub/disp/Article?columnID=308&amp;articleID=35029&amp;pageNO=1"> 
                  Linux时代来临,您的企业准备好了吗?</A> <SPAN 
                  class=content01>(2002.12.26)</SPAN></TD></TR>
              <TR>
                <TD height=23><IMG height=7 src="01.files/a_nav.gif" 
                  width=7><A class=Name02 
                  href="http://linux.ccidnet.com/pub/disp/Article?columnID=302&amp;articleID=35019&amp;pageNO=1"> 
                  Linux、开放源码软件与公共政策</A> <SPAN 
                class=content01>(2002.12.26)</SPAN></TD></TR>
              <TR>
                <TD height=23><IMG height=7 src="01.files/a_nav.gif" 
                  width=7><A class=Name02 
                  href="http://linux.ccidnet.com/pub/disp/Article?columnID=382&amp;articleID=34520&amp;pageNO=1"> 
                  Linux重点行业应用市场份额统计</A> <SPAN 
                class=content01>(2002.12.23)</SPAN></TD></TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -