请问哪位高手有Windows内核调度方面的源码?

请问哪位高手有Windows内核调度方面的源码?,第1张

摘要:随着内核WINDOWS系统的迅速发展,内核WINDOWS已发展成为内核 *** 作系统的一个重要分支。本文介绍了内核WINDOWS的设计和几种流行的内核WINDOWS系统。

关键词:内核WINDOWS

一、引言

内核系统(Embedded Systems)是根据应用的要求,将 *** 作系统和功能软件集成于计算机硬件系统之中,从而实现软件与硬件一体化的计算机系统。内核系统出现于60年代晚期,它最初被用于控制机电电话交换机,如今已被广泛的应用于工业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域。内核系统在数量上远远超过了各种通用计算机系统:计算机系统核心CPU,每年在全球范围内的产量大概在二十亿颗左右,其中超过80%应用于各类专用性很强的内核系统。

一般的说,凡是带有微处理器的专用软硬件系统都可以称为内核系统。和通用的计算平台相比,内核系统往往具有功能单一、体积小、功耗低、可靠性高、剪裁性好、软硬件集成度高、计算能力相对较低等特点。多年来,内核设备中没有 *** 作系统,其主要原因有二:首先,诸如洗衣机、微波炉、电冰箱这样的设备仅仅需要一道简单的控制程序,以管理数量有限的按钮和指示灯,没有使用 *** 作系统的必要;其次,它往往只具有有限的硬件资源,不足以支持一个 *** 作系统。

然而,随着硬件的发展,内核系统变得越来越复杂,最初的控制程序中逐步的加入了许多功能,而这些功能中有很多可以由 *** 作系统提供。于是,在70年代末期出现了内核 *** 作系统(Embedded Operating Systems),它的出现大大简化了应用程序设计,并可以有效的保障软件质量和缩短开发周期。简单的ES一般并不使用 *** 作系统,只包含一些控制流程,但是随着内核 *** 作系统在复杂性上的增长,简单的流程控制就不能满足系统的要求,这是就必须考虑使用 *** 作系统做系统软件。因此,内核 *** 作系统就应运而生。

随着EOS的广泛应用,业界已推出一些应用比较成功的EOS产品。归纳起来EOS应该具有以下几个特点:小巧、实时性、可装卸、固化代码、弱交互性、强稳定性和统一的接口。目前使用最多的EOS产品包括有:Vxwork、QNX、PalmOS、WindowsCE、pSOS、Hopen OS(国内凯思集团公司自主研制开发)等。其中,Vxwork使用最为广泛、市场占有率最高,其突出特点是实时性强(采用优先级抢占和轮转调度等机制),除此之外,其可靠性和可剪裁性也相当不错。QNX是一种伸缩性极佳的系统,其核心加上实时POSIX环境和一个完整的窗口系统还不到一兆。相比之下,Microsoft WinCE的核心体积庞大,实时性能也差强人意,但由于Windows系列友好的用户界面和为程序员所熟悉的API,并捆绑IE、Office等应用程序,正逐渐获得更大的市场份额。而与这些商业化的 *** 作系统相比,WINDOWS已经越来越受到人们的注意。

二、内核WINDOWS概述

WINDOWS是一个成熟而稳定的网络 *** 作系统。将WINDOWS植入内核设备具有众多的优点。首先,WINDOWS的源代码是开放的,任何人都可以获取并修改,用之开发自己的产品。其次,Lirmx是可以定制的,其系统内核最小只有约134kB。一个带有中文系统和图形用户界面的核心程序也可以做到不足1MB,并且同样稳定。另外,它和多数Unix系统兼容,应用程序的开发和移植相当容易。同时,由于具有良好的可移植性,人们已成功使WINDOWS运行于数百种硬件平台之上。

然而,WINDOWS并非专门为实时性应用而设计,因此如果想在对实时性要求较高的内核系统中运行WINDOWS,就必须为之添加实时软件模块。这些模块运行的内核空间正是 *** 作系统实现进程调度、中断处理和程序执行的部分,因此错误的代码可能会破坏 *** 作系统,进而影响整个系统的可靠性和稳定性。WINDOWS的众多优点还是使它在内核领域获得了广泛的应用,并出现了数量可观的内核WINDOWS系统。其中有代表性的包括:uCWINDOWS、ETWINDOWS、ThinWINDOWS、LOAF等。ETWINDOWS通常用于在小型工业计算机,尤其是PC/104模块。ThinWINDOWS面向专用的照相机服务器、X-10控制器、MP3播放器和其它类似的内核应用。LOAF是WINDOWS On A Floppy的缩略语,它运行在386平台上。

三、WINDOWS作为内核 *** 作系统的优势

WINDOWS作为内核 *** 作系统的优势主要有以下几点:

1、 可应用于多种硬件平台。WINDOWS已经被移植到多种硬件平台,这对于经费,时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到具体的硬件上,加快了软件与硬件的开发过程。WINDOWS采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。WINDOWS可以随意地配置,不需要任何的许可证或商家的合作关系,源代码可以免费得到。这使得采用WINDOWS作为 *** 作系统不会遇到任何关于版权的纠纷。毫无疑问,这会节省大量的开发费用。本身内置网络支持,而目前内核系统对网络支持要求越来越高。WINDOWS的高度模块化使添加部件非常容易。

2、 WINDOWS是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等现有的大部分芯片)等特性的一种通用 *** 作系统。其程序源码全部公开,任何人可以修改并在GUN通用公共许可证(GNU General Public License)下发行。这样,开发人员可以对 *** 作系统进行定制,适应其特殊需要。

3、 WINDOWS带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了WINDOWS上。WINDOWS还提供了强大的网络功能,有多种可选择窗口管理器(X Windows)。其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。

四、内核WINDOWS的建立

完整的内核WINDOWS解决方案应包括内核WINDOWS *** 作系统内核、运行环境、图形化界面和应用软件等。由于内核设备的特殊要求,内核WINDOWS解决方案中的内核、环境、GUI等都与标准WINDOWS有很大不同,其主要挑战是如何在狭小的FLASH、ROM和内存中实现高质量的任务实时调度、图形化显示、网络通信等功能。

1、 精简内核

WINDOWS内核有自己的结构体系,其中进程管理、内存管理和文件系统是其最基本的3个子系统。图1简单表示了它的框架。用户进程可直接通过系统调用或者函数库来访问内核资源。正因为WINDOWS内核具有这样的结构,因此修改内核时必须注意各个子系统之间的协调。

内核WINDOWS内核一般由标准WINDOWS内核裁剪而来。用户可根据需求配置系统,剔除不需的服务功能、文件系统和设备驱动。经过裁剪、压缩后的系统内核一般只有300k左右,十分适合内核设备。同标准WINDOWS不同的是内核WINDOWS必须要实现从FLASH或ROM的启动。标准WINDOWS启动代码实现了系统初始化和从软盘、硬盘O盘区引导内核。内核WINDOWS一般保存在FLASH或ROM中,标准LILO无法引导。在支持直接从FLASH设备引导的系统中,如华恒公司的uCWINDOWS,引导程序主要完成对硬件系统的初始化工作和 *** 作系统的解压、移位工作。在不支持直接从FLASH引导的系统中,FLASH设备只能作为非引导磁盘使用。此时,可采用先从硬盘或软盘加载一个小 *** 作系统,如内核DOS,然后再执行"Loadlin"加载程序从FLASH引导内核WINDOWS。

对标准WINDOWS的修改主要是虚拟内存和调度程序部分的改动。因为标准WINDOWS系统使用虚拟内存管理的目的是为了能同时运行多个进程,但是这样每个待运行的进程所能分配的CPU时间片就受限制,资源的使用效率就低。这样对于实时性要求较高的内核系统来说,实时任务往往要求CPU具有很高的突发处理能力,即在有些时候需要极高的处理效率,因此需要屏蔽内核的虚拟内存管理机制。对于无硬盘设备的内核系统,不必采用虚存管理。强实时需求的内核应用可以通过修改任务调度模块实现,主要是在内核和设备驱动程序中加入了许多切换点。在该点处,系统检测是否存在未处理的紧急中断,有则剥夺内核的运行,及时处理中断。实现实时性服务的一个较好的方法是在标准的WINDOWS内核上增加一个实时内核,标准WINDOWS内核作为一个任务运行于实时内核上,强实时性任务也直接运行在实时内核上,如RT-WINDOWS等。

文件系统是内核WINDOWS *** 作系统必不可少的。但标准WINDOWS支持大量的文件系统,因此除了满足系统的正常运行需要而保留一种外,其它的全部可以删除,利用原有的设置选项可以移除。一般内核设备文件系统主要使用RamDisk技术和网络文件系统技术。RamDisk可驻留于Flash,运行时加载到内存中。

2、 精简运行环境

WINDOWS通常的运行环境指用户运行任何应用的基础设施,主要包括函数库和基本命令集等。标准WINDOWS系统同时向用户提供了静态和动态函数库。静态函数库在生成应用时直接链接到用户应用中。动态库在应用运行时才链接。由于内核系统应用一般都是在开发平台上预先生成的,因此内核系统只需向应用提供动态函数库。WINDOWS应用运行所需的函数库主要有C库、数学库、线程库、加密库、网络通信库等。其中最基本的是C语言的运行库glib。这个库主要完成基本的输入输出,内存访问,文件处理。一个标准的glib库大约要1200kB存储空间,考虑到内核WINDOWS内核往往很小,这种运行库实在太大,我们做了一些精简的工作,方法有两种:(1)、使用静态连接的方法,完全不使用运行库动态连接;(2)、对这个库的函数进行精简。

在一个桌面系统上,使用动态连接可以带来许多好处。使用动态连接库,可以让应用程序跟函数库的更新、升级分离,便于维护,可以让同时运行的多个程序共享一段代码。但是,在内核系统中,很少有多个程序并行的可能,程序的维护,尤其是库函数的维护更新是不常见的。这时,使用静态连接的优势就极为明显。因为静态连接可以只将库中用到的部分连接进程序。在应用程序较少(小于5)的情况下,静态连接可以达到较好的结果。为了便于将来扩充的需要,我们也采用第二种方法,针对我们的需要,对库函数的内容进行精简,只保留一些基本功能,还有一种方法是采用其它的C语言运行库。但是这些库对兼容性影响很大。

基本命令集同样是运行用户应用的基础,主要包括初始化进程init,终端获取getty、Shell和基本命令等。内核系统的启动过程可能与标准WINDOWS不同,例如跳过登录过程直接启动GUI等。这就要求修改init,getty等。标准WINDOWS命令集同样由于体积问题无法直接应用于内核环境。目前,小命令集的解决方法主要有集成方法和汇编方法两种。集成方法采用集成公共部分减少命令集整体体积,用C实现,有较好的平台移植性;汇编方法则采用汇编编程减少每个命令的体积.这样可使体积很小但其平台移植性较差。

3、 内核WINDOWS下的GUI

GUI在内核系统或者实时系统中的地位越来越重要,比如PDA、DVD播放机、WAP手机等,都需要一个完整.漂亮的图形用户界面。这些系统对GUI的基本要求包括:(1)、轻型、占用资源少;(2)、高性能;(3)、高可靠性;(4)、可配置。这些也成为评价内核系统的重要指标。目前,内核WINDOWS上的GUI主要有winCE、Micro Window、紧缩的X Window、MiniGUI(国内做得较好的自由软件之一)。标准WINDOWS的Xfree86由于体积庞大,运行环境要求高,无法运行于内核环境。内核GUI主要通过削减功能,降低性能来实现体积小和占用资源少。目前内核WINDOWS上的GUI环境主要有两类:X类和win32类。X类GUI分为服务方和客户方两方。服务器方提供鼠标、键盘处理和显示功能,客户方是用户应用,服务方和客户方通过socket接口和X协议通信。采用该方式十分有利于远程网络图形化服务,客户方和服务方可通过网络实现X协议和图形显示。典型的X类GUI有Micro Window、紧缩的X Window等。win32类的GUI不存在客户方和服务方,每个任务都自成一体,任何任务间的切换、事件分发由专门的管理任务负责。如wiCE、MiniGUI就是类似于win32类的GUI。

五、当前流行的几种内核WINDOWS系统

除了智能数字终端领域以外,WINDOWS在移动计算平台、智能工业控制、金融业终端系统,甚至军事领域都有着广泛的应用前景。这些WINDOWS被统称为"内核WINDOWS"。

1、RT-WINDOWS

这是由美国墨西哥理工学院开发的内核WINDOWS *** 作系统。到目前为止,RT-WINDOWS已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域。RT-WINDOWS开发者并没有针对实时 *** 作系统的特性而重写WINDOWS的内核,因为这样做的工作量非常大,而且要保证兼容性也非常困难。为此,RT-WINDOWS提出了精巧的内核,并把标准的WINDOWS核心作为实时核心的一个进程,同用户的实时进程一起调度。这样对WINDOWS内核的改动非常小,并且充分利用了WINDOWS下现有的丰富的软件资源。

2、uCWINDOWS

uCWINDOWS是Lineo公司的主打产品,同时也是开放源码的内核WINDOWS的典范之作。uCWINDOWS主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit) 的内核系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。uCWINDOWS是一种优秀的内核WINDOWS版本,是micro-Conrol-WINDOWS的缩写。它秉承了标准WINDOWS的优良特性,经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的内核WINDOWS。虽然它的体积很小,却仍然保留了WINDOWS的大多数的优点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的API。它专为内核系统做了许多小型化的工作,目前已支持多款CPU。其编译后目标文件可控制在几百KB数量级,并已经被成功地移植到很多平台上。

3、Embedix

Embedix是由内核WINDOWS行业主要厂商之一Luneo推出的,是根据内核应用系统的特点重新设计的WINDOWS发行版本。Embedix提供了超过25种的WINDOWS系统服务,包括Web服务器等。系统需要最小8MB内存,3MB ROM或快速闪存。Embedix基于WINDOWS 2.2内核,并已经成功地移植到了Intel x86和PowerPC处理器系列上。像其它的WINDOWS版本一样,Embedix可以免费获得。Luneo还发布了另一个重要的软件产品,它可以让在Windows CE上运行的程序能够在Embedix上运行。Luneo还将计划推出Embedix的开发调试工具包、基于图形界面的浏览器等。可以说,Embedix是一种完整的内核WINDOWS解决方案。

4、XWINDOWS

XWINDOWS是由美国网虎公司推出,主要开发者是陈盈豪。他在加盟网虎几个月后便开发出了基于XWINDOWS的、号称是世界上最小的内核WINDOWS系统,内核只有143KB,而且还在不断减小。XWINDOWS核心采用了"超字元集"专利技术,让WINDOWS核心不仅可能与标准字符集相容,还含盖了1 2个国家和地区的字符集。因此,XWINDOWS在推广WINDOWS的国际应用方面有独特的优势。

5、PoketWINDOWS

由Agenda公司采用、作为其新产品"VR3PDA"的内核WINDOWS *** 作系统。它可以提供跨 *** 作系统构造统一的、标准化的和开放的信息通信基础结构,在此结构上实现端到端方案的完整平台。PoketWINDOWS资源框架开放,使普通的软件结构可以为所有用户提供一致的服务。PoketWINDOWS平台使用户的视线从设备、平台和网络上移开,由此引发了信息技术新时代的产生。在PoketWINDOWS中,称之为用户化信息交换(CIE),也就是提供和访问为每个用户需求而定制的"主题"信息的能力,而不管正在使用的设备是什么。

6、MidoriWINDOWS

由Transmeta公司推出的MidoriWINDOWS *** 作系统代码开放,在GUN普通公共许可(GPL)下发布,可以在http://midori.transmeta.com上立即获得。该公司有个名为"MidoriWINDOWS计划"。"MidoriWINDOWS"这个名字来源于日本的"绿色"---Midori,用来反映其WINDOWS *** 作系统的环保外观。

7、红旗内核WINDOWS

由北京中科院红旗软件公司推出的内核WINDOWS是国内做得较好的一款内核 *** 作系统。目前,中科院计算所自行开发的开放源码的内核 *** 作系统---Easy Embedded OS(EEOS)也已经开始进入实用阶段了。该款内核 *** 作系统重点支持p-Java。系统目标一方面是小型化,另一方面能重用WINDOWS的驱动和其它模块。由于有中科院计算所的强大科研力量做后盾,EEOS有望发展成为功能完善、稳定、可靠的国产内核 *** 作系统平台。

六、结束语

由于WINDOWS是一个内核源代码开放、具备一整套工具链、有强大的网络支持及成本低廉的 *** 作系统,因此内核WINDOWS自诞生起就秉承了这众多独特优势,这使它正在并越来越多地受到人们的关注。据Even Data数据显示,期望使用内核WINDOWS的用户从2001年的11%增到2002年27%,而同期Vxwork只是从16%到18%,Win CE从9%到14%。另外,在内核WINDOWS的各种应用市场中,通信(语音和数据)名列第一,2000年的销售额是1300万美元,而2005年预计将达到1.26亿美元,可以预见,内核WINDOWS将在未来的通信用内核 *** 作系统中占据强有力的地位

WINDOWS是目前十分火爆的 *** 作系统。它是由芬兰赫尔辛基大学的一个大学生Linus B. Torvolds在1991年首次编写的。标志性图标是一个可爱的小企鹅。

WINDOWS是一种类Unix系统,Linus当时编写它的目的是为了替代一种名叫Minix的 *** 作系统。Minix是由一个名叫Andrew Tannebaum的计算机教授编写的,当时由于Unix是一个商业软件,其源代码是不能拿来进行教学的,Andrew教授就自己编写了一个系统用于教学。最

初的Minix用一张软盘就能装下,麻雀虽小、五脏俱全,Minix具有一般 *** 作系统的特征,它同时兼容Unix系统。

WINDOWS是一个免费的 *** 作系统,用户可以免费获得其源代码,并能够随意修改。它是在共用许可证GPL(General Public License)保护下的自由软件,也有好几种版本,如Red Hat WINDOWS、Slackware,以及国内的Xteam WINDOWS等。

WINDOWS具有许多Unix系统的功能和特点,能够兼容Unix,但无需支付Unix高额的费用。比如一个Unix程序员在单位可以在Unix系统上进行工作,回到家里在WINDOWS系统上也能完成同样的工作,而不必重新购买Unix。要知道Unix的价格比常见的Windows要高出若干倍,和WINDOWS的低廉更是相距甚远。

WINDOWS的应用也十分广泛。Sony最新的PS2游戏机就采用了WINDOWS作为系统软件,使PS2摇身一变,成为了一台WINDOWS工作站。著名的电影《泰坦尼克号》的数字技术合成工作就是利用100多台WINDOWS服务器来完成的。

2001年8月17日,WINDOWS发布了最新的WINDOWS 2.4.9版,它也已经十岁了。

WINDOWS的优点

WINDOWS的流行是因为它具有许多诱人之处。

1、完全免费

WINDOWS是一款免费的 *** 作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的 *** 作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了WINDOWS的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。这让WINDOWS吸收了无数程序员的精华,不断壮大。

2、完全兼容POSIX 1.0标准

这使得可以在WINDOWS下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到WINDOWS奠定了基础。许多用户在考虑使用WINDOWS时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

3、多用户、多任务

WINDOWS支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,WINDOWS可以使多个程序同时并独立地运行。

4、良好的界面

WINDOWS同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行 *** 作。它同时也提供了类似Windows图形界面的X-Windows系统,用户可以使用鼠标对其进行 *** 作。在X-Windows环境中就和在Windows中相似,可以说是一个WINDOWS版的Windows。

5、丰富的网络功能

互联网是在Unix的基础上繁荣起来的,WINDOWS的网络功能当然不会逊色。它的网络功能和其内核紧密相连,在这方面WINDOWS要优于其他 *** 作系统。在WINDOWS中,用户可以轻松实现网页浏览、文件传输、远程登陆等网络工作。并且可以作为服务器提供WWW、FTP、E-Mail等服务。

6、可靠的安全、稳定性能

WINDOWS采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。WINDOWS由于需要应用到网络服务器,这对稳定性也有比较高的要求,实际上WINDOWS在这方面也十分出色。

7、支持多种平台

WINDOWS可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外WINDOWS还是一种内核 *** 作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的WINDOWS 2.4版内核已经能够完全支持Intel 64位芯片架构。同时WINDOWS也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。

WINDOWS的不足

由于在现在的个人电脑 *** 作系统行业中,微软的Windows系统仍然占有大部分的份额,绝大多数的软件公司都支持Windows。这使得Windows上的应用软件应有尽有,而其他的 *** 作系统就要少一些。许多用户在换 *** 作系统的时候都会考虑以前的软件能否继续使用,换了 *** 作系统后是否会不方便。虽然WINDOWS具有DOS、Windows模拟器,可以运行一些Windows程序,但Windows系统极其复杂,模拟器所模拟的运行环境不可能完全与真实的Windows环境一模一样,这就使得一些软件无法正常运行。

许多硬件设备面对WINDOWS的驱动程序也不足,不少硬件厂商是在推出Windows版本的驱动程序后才编写WINDOWS版的。但一些大硬件厂商在这方面做得还不错,他们的WINDOWS版驱动程序一般都推出得比较及时。

软件支持的不足是WINDOWS最大的缺憾,但随着WINDOWS的发展,越来越多的软件厂商会支持WINDOWS,它应用的范围也越来越广。这只小企鹅的前景是十分光明的。

认真看完这个也许你会有收获的:

Windows启动过程介绍

<序>

相信不少人碰到过装了个什么东西之后,重启Windows就发现起不来了。所以,想把Windows启动过程中作了些什么事情,分哪些stages做个介绍。

这里要介绍的是Windows 2k/xp/2k3系列的启动过程,nt系列么,很类似。

虽然Windows是非开源的(废话!:o ),不过还是有不少资料可以参考的,还包括MS的那些public的symbol。如果有机会可以试试Kernel的live debug,那么相信还是能看到不少东西的。不过话说回来,这事情我也没做过…… 等回头自己机器上装好VMWare之类的,再Try吧,到时候会把过程记录下来贴到这里的。

Windows的启动过程么,主要包括以下几个部分:

1. Master Boot Record (MBR)

2. Boot sector

3. Ntldr (这个可能有人会觉得眼熟,是不是碰到过启动的时候说找不到Ntldr呢?) )

4. Ntoskrnl.exe

5. Smss

6. Winlogon

7. Service control manager (SCM)

OK。

我将在这个帖子里依据上述的启动过程,对这些组件逐个介绍。当然,这里面大部分内容来自于《Inside Windows 2000》和《Windows Internals》这两本书的相应章节(Startup and shutdown)。我能做的事情基本上就是翻译和复述了,最多可能加上一些相关的注释。

当然,如果看过关于linux启动过程源码(分析)的朋友,估计会不满足于下面介绍这么点内容,而且这里也基本不谈到硬件相关的部分(最多可能仅补充一些我知道的硬件相关内容),谁叫咱看不到源码呢,呵呵。

欢迎大家进行讨论和补充。

p.s. 今天仅仅先占个位子,具体内容么,且听下回分解。:cool:

-----------------------------------------------------------------------------------------------------------------------

1. MBR &Boot Sector

物理硬盘是以扇区(sector)为单位来寻址的。Windows的安装程序会在安装的时候,将一些内容写入你

安装系统的那个硬盘的第一个扇区。这块内容就称为Master Boot Record(MBR).

MBR包括两块内容:

(1). Boot code

(2). Partition table

Boot code,也就是启动代码。这段代码是在系统启动的时候,BIOS完成了自检过程,选择了启动设备(

也就是你某个硬盘),然后就将该磁盘的MBR读入内存,并且跳转到MBR所在地址,从而执行其Boot code.

Partition table,也就是分区表。该表只有4项(entry),因为MS的OS允许一个磁盘最多被分为4个主分

区(primary partition)。这里的分区表里面的内容就是这4个分区的相关信息,包括其起始的sector,

相应的标志等等。

对于启动过程而言,MBR的boot code会搜寻这个分区表,在其中查找带有可启动标志(也称为Active)的

分区,然后将该分区的第一个sector(也就是Boot sector)读入,并且执行其中的代码。

在安装程序写入Boot sector之前,需要获知其所在分区的文件系统类型(FAT? FAT32? NTFS?),然后写

入不同的Boot sector。为什么对于不同的文件系统需要不同的Boot sector呢?原因在于Boot sector的

任务,就是要载入OS的系统启动文件,而载入文件的过程,是需要文件系统参与的,所以对应于不同的文

件系统,在Boot sector里面就需要不同的文件系统支持代码,以次来完成系统文件的加载。对于Windows

启动而言,需要加载的文件为Ntldr。

需要补充的是,boot sector里面对于文件系统的支持代码是“最小化”了的。毕竟boot sector的大小最多

也就只有512 bytes,要带有完整的文件系统是不大可能的。而且,我们的需求也很简单,只需要它能够

理解该文件系统,并且能够读取其中的文件就可以了,我们并没有写入文件的需求。

Boot sector将Ntldr加载完成之后,就跳转到Ntldr的入口处,接下去的任务,就交给Ntldr了。这时候,

系统还是运行在16位的实模式下,Ntldr会开启Paging,并转入32为保护模式。

这个过程中,可能碰到的错误信息是下面这个:

对于NTFS文件系统,"BOOT: Couldn't find NTLDRP";

对于FAT文件系统,"NTLDR is missing";

这个错误的意思是Boot sector在分区的根目录下没有找到Ntldr。

-----------------------------------------------------------------------------------------------------------------------

2. NTLDR

NTLDR是一个“中间人”,在Boot Sector转入NTLDR的时候,系统处于实模式下,这时候程序访问的任何地址都是实地址,也就是物理地址(虽然这其中还有80x86最基本的分段功能,学过这个实模式汇编的应该知道),并且,这个地址范围也受限在1M(20位地址)以内。所以,进入NTLDR后最先要做的事情就是转入保护模式,以便于能够完全访问32位地址范围。不过,由于此时没有设置好相应的页表,所以,还不能进行虚实地址转换(也就是还没有分页的功能)。

NTLDR需要初始化一定的页表,然后开启分页。这时候,系统已经进入了Windows的标准状态(保护模式+分页)。前面说到转入保护模式的时候,漏说了一个事情,就是初始化GDT和IDT。这里面,关键的是Windows使用的是Flat Memory Mode,也就是其保护模式下,所有段的基地址都一样。这点和其内存管理的机制息息相关,这边就先提一下。

虽然系统已经进入了保护模式,不过,此时的NTLDR还需要依赖一些BIOS调用,来访问磁盘以及显示系统。如果磁盘是SCSI的,而BIOS调用无法访问此类磁盘,那么NTLDR就加载Ntbootdd.sys来替代boot code中的磁盘访问代码。NTLDR和Boot Sector类似,也包含了NTFS和FAT文件系统的只读代码,区别么,其稍有进步,就是能访问子目录了。

由于从Windows2000开始,都有了“休眠”(Hibernation)这种关机方式。于是,NTLDR需要检查系统上是否存在有效的 Hiberfil.sys文件,如果有,那么表明最近一次关机是以“休眠”的方式关机的。于是,NTLDR就开始走“捷径”:读入 Hiberfil.sys文件,然后直接跳转到内核中“唤醒休眠”的代码,从而启动计算机。

正常启动的情况下,NTLDR读入boot.ini文件。如果该文件表明有多个可启动选项,于是就显示启动菜单,供用户选择。

这里又有一个可能的例外,虽然现在这个可能性已经很小了。这个例外就是有DOS的启动选项(包括Win9x和ME系列)。这个情况下,NTLDR 加载 Bootsect.dos文件,转回实模式,并且跳转到该文件中的MBR代码。这时候,就和最开始启动的状态(读入MBR)一样了,从而启动相应的OS。

在用户选择了启动菜单后,NTLDR还要根据该项的参数做一些相应的 *** 作。对于这些参数么,这里就不作说明和解释了。

然后我们继续往下走...

NTLDR加载并执行Ntdetect.com。该程序是一个16位保护模式的程序,通过BIOS调用,获取系统硬件的信息(比如总线类型啊,系统时间啊,磁盘驱动器啊,并口串口啊等等),然后将这些信息集中起来,返回给NTLDR,并且这些信息在启动的后期会保存到注册标的HKLM\ HARDWARE \DESCRIPTION下。

貌似上面的这些工作都是在后台做的,除了那个可能出现的启动菜单外,其他工作都是用户看不到的。嗯,接下来,就该给用户一些反馈信息了。

NTLDR先清屏,然后显示“Starting Windows”和进度条。这里,2000和XP/2003有所不同。2000会显示黑白屏的进度条,这时候屏幕上还没有Windows的logo。而 XP/2003会显示带有Windows logo的彩屏进度条(哈哈,啥都流行彩屏啊)。需要注意的是,NTLDR在开始加载任何“启动驱动”(boot driver)之前,进度条一直是空的。

还有大家可能注意到过的,就是在显示“Starting Windows”的时候,下面还会显示“For troubleshooting and advanced startup options for Windows, press F8.”,然后进度条出现并开始滚动(前进)的时候,就没有机会按F8来进入安全模式之类的了。其实想象,这里面还是有原因的。因为在系统开始加载驱动之前,主要做的事情只是加载内核文件和注册表的System hive。这两个事情和安全模式之类的其他启动方式没有关系,无论是安全模式还是标准启动,都需要加载这两部分东西。而安全模式和标准模式的区别,在于其加载的驱动有所不同。所以,一旦Windows开始加载那些boot driver之后,就无法在改变模式了。

在NTLDR从显示“Starting Windows”开始,需要经过以下步骤:

1. 加载正确的内核以及HAL(默认为Ntoskrnl.exe和Hal.dll)。如果NTLDR在加载这两个文件的过程中出错,无法完成加载,那么会显示下面这条出错信息:Windows could not start because the following file was missing or corrupt,并且会告诉你无法加载的文件名。

2. 从\Windows\System32\Config\System读入System hive。

注:hive是指一个包含了注册表中某个子树的文件。

3. 在System hive中找出所有的boot driver(这类driver的start值为0,即SERVICE_BOOT_START)。系统的所有driver都在注册表的HKLM\ SYSTEM\CurrentControlSet\Services下面有对应的子键(subkey)。

4. 加载boot drivers所在分区的文件系统驱动,以便于之后的boot driver的加载。

5. 加载boot drivers。这时候,才会开始更新屏幕上的进度条。对于Windows 2000来说,就是那个黑白进度条。

6. 设置CPU寄存器,并且跳转到Ntoskrnl.exe的入口。

好啦,NTLDR的任务总算完成了,接下去就全部交给Ntoskrnl了。当然,在转交控制权的时候,自然也将对方需要的信息(包括内存布局,硬件信息,System hive等)也都交给Ntoskrnl,这样,NTLDR才完成了它的使命

http://www.nu2.nu/bootcd/

其实就是在光盘里建立一个autorun.inf的文件

在里面写上

[autorun]

OPEN=GEGE.EXE /////////可执行文件

ICON=GEGE.EXE,0 //////图标

自己做一个gege.exe,里面写上你的安装向导,其实flash也可以,不一定是exe文件。

具体用什么语言做,什么格式,就看你自己的了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12202473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存