




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统开发的工具与技巧,演讲人:陈斌Sunwen_lingSunwen武汉自由软件协会,操作系统概况,DOSWINDOWSMicrosoft公司在1983年春季就宣布开始研究开发Windows,它在1985年和1987年分别推出Windows1.03版和Windows2.0版。于1995年推出新一代操作系统Windows95(又名Chicago),它可以独立运行而无需DOS支持。,操作系统概况,UNIX1965年贝尔实验室、麻省理工学院(MIT)和通用电气(GE)联合开发新的操作系统-Multics。Multics将提供多用户、多处理器、多级(层次型)文件系统及其它一些先进性能。1969年AT这条程序是可以在DOS下让计算机重启的,但在WINDOWS下运行是不能够运行成功的。,保护模式,保护模式的保护特性(特权级的概念),保护模式,对相关敏感资源的保护仅仅是保护模式的一个特性,它使得用户程序不能够随便访问与操作系统运行息息相关的硬件资源。但保护也是分级的,在最高特权级的程序是没有任何限制。著名的CIH病毒,就是通过特殊的方法进入到WINDOWS系统的RING0级后对BIOS进行破坏。除保护外,“保护模式”一詞还包括了非常广阔的内容,它是操作系统开发所围绕的中心。它是INTEL从80386引入的,包括了内存分段、分页以及中断和异常等等众多的内容。,保护模式,详细的有关保护模式的文档可以从INTEL网站上得到它在操作系统开发社区中被称为“IA32三部曲”,共有三卷,其中第三卷详细讲述了保护模式的所以资料。注:IA是IntelArchitecture的缩写另:IA-32的三卷从我的个人网站上也可以下载,保护方式下80 x86的编程,内存寻址寻址简单地说就是在内存中对数据进行定位。C语言里的指针,实际上就是地址。比如charch;char*p=/*这一句就包括了寻址操作*/在汇编语言中:MOVAX,BX同样也有寻址操作。,保护方式下80 x86的编程,分段(SEGMENT)分段是保护模式下的最重要的一个特性,一旦在保护模式下,CPU就已经进入了分段模式。,虚拟地址到物理地址的映射,可以省略,保护方式下80 x86的编程,分段的依据(描述符Descriptor)CPU如何进行虚拟地址到线性地址的映射,答案是描述符表,在这张表里放着很多段描述符,用来描述每个段的属性。而CPU又是如何知道这张表呢?这要我们在进入保护模式前就在内存中构造一个描述符表,然后告诉CPU它在哪里。如何告诉?答:设置CPU内的GDTR寄存器。,保护方式下80 x86的编程,GDT(GlobalDescriptorTable)全局描述符表GDTR(GlobalDescriptorTableRegister)全局描述符表寄存器,保护方式下80 x86的编程,分段后的内存Layout,保护方式下80 x86的编程,与GDT相对的LDT(LocalDescriptorTable),保护方式下80 x86的编程,Lingix里的这些概念Lingix仅仅有GDT,没有使用到LDT,把64M的内存分为一个段,当然,这仅仅是为了简便。,保护方式下80 x86的编程,更加详细的论述在保护方式下,每个段由如下三个参数进行定义:段基地址(BaseAddress)、段界限(Limit)和段属性(Attributes)。这些都是放在GDT中的。如果仅使用分段机制,那么我们的虚拟地址到物理地址之间的映射公式就为:SegmentBase+VirtualAddress=PhysicalAddress,保护方式下80 x86的编程,Bible:IA32Volume3ChineseBible:杨季文清华大学出版社周明德主编清华大学出版社,从实模式切换到保护模式,原因在实模式下硬件没有提供保护机制,导致所有的程序都可以破坏OS的代码段或是数据段,直接导致操作系统的崩溃,如DOS。在保护模式下,还可以方便得实现虚拟内存,这在实模式下也是不易做到的。还有一个重要的原因就是,在实模式下只能用20根地址线,即只能寻220空间的地址,即1M,1M以后的内存一般无法访问。方法打开CR0寄存器的PE位,然后用一个jmp指令按照保护方式下的寻址方式跳转到保护模式下的代码。,实战一:启动,背景资料系统在加电之后指向的地址是我们常说的BIOS(BasicInputOutputSystem)所映射到的地址。随后BIOS进行一系列自检操作后,就准备调入操作系统代码,把控制权交给操作系统。BIOS在这段时间里做的事情是很多的,但通常我们不必理会。,实战一:启动,那么BIOS和操作系统之间过渡的桥梁在哪呢?答案是启动设备。BIOS在进行完自己的事情后,寻找启动设备,如果找不到,则HALT。找到之后,它读入该启动设备的第一个扇区到0 x7C00这个地址处。此间,BIOS还要检查这第一个扇区的最后两个字节,如果是0 x55AA则表明这个设备可以用来引导。否则,不能引导。所以我们在写启动扇区的时候一定要记住在最后的两个字节里写入0 x550 xAA。(INTEL的数据存放方法高高低低原则),实战一:启动,硬盘启动硬盘的第一个扇区(sector)被称作MBR(MasterBootRecord)。由于硬盘可以有多个分区,所以在MBR上,不仅放置着用于启动的可执行代码masterboot,还放着磁盘分区表(DPT),占用66个字节,所以MBR中的可执行代码必须在512-66=446个字节以内。这就是硬盘第一个扇区如此重要的原因,我提醒你要时常注意备份。,演示-演示扇区,Windows使用的引导扇区我们用一个磁盘工具打开硬盘的第一个扇区,来验证我们刚才的理论。工具:WinHex,OK,请把桥搭好,“桥”启动扇区的编写启动扇区一般来说只能用汇编来写,而且这个启动程序要刚好是一个扇区的大小,即512字节。如何做到精确控制512个字节呢?,演示-演示扇区,从软盘引导的例子这里,我们将自己写一个引导扇区,然后将其写到软盘的第一个扇区,最后用模拟器从这个软盘启动。我们可以利用的资源:BIOS中断,用启动扇区做什么?,启动扇区(bootsector)在接过BIOS的“接力棒”后,首先要做的是把操作系统的kernelload到我们想要的位置,还要做的就是要进入保护模式。前面提到,机器初启的时候是在保护模式中的,在这个模式下,只能访问低端的1M地址,1M以上的地址不能访问。而保护模式下最多可访问的地址是4G(232)。,用启动扇区做什么?,以Lingix为例,内核紧跟在bootsector后面。然后我们在启动扇区中读入内核(如果内核太大,要分几级读),读完后,我们在bootsector代码的最后用一个jmp指令跳到你把内核读到的地址处。分析Lingix的启动代码:是使用BIOS中断的磁盘功能来将磁盘一扇区后的内核读入内存中的。思考:如果BIOS没有提供这个功能乍办?,实模式下的资源层次,应用程序,DOS,外设硬件接口,BIOS,开始工作,我们的代码在哪里?从磁盘到内存在内存运行跳转到内存中的代码,中断,原因:高速设备和低速设备的协同工作举例:键盘,中断万物之源,操作系统归根结底说来是“被动”的,它的动力之源是中断(Interrupt)。中断可分为硬件中断和软件中断。硬件中断又称外部中断,由8259A(可编程中断控制器)进行处理,然后提交给CPU。软件中断就是我们常用汇编时使用的INT系统指令。如:INT10H,中断万物之源,中断信号,CPU,中断处理程序,中断的过程,中断的重要性,一句话,AllthingscomefromInterrupt!ClockInterruptHarddiskinterruptNetCardinterrupt,I386的中断处理过程,IDTInterruptDescriptorTable(中断描述符表)与8086/8088一样,在响应中断或者处理异常时,80386根据中断向量号转对应的处理程序。但是,在保护模式下,80386不使用实模式下的中断向量表,而是使用中断描述符表IDT。在保护模式下,80386把中断向量号作为中断描述符表IDT中描述符的索引,而不再是中断向量表中的中断向量的索引。,I386的中断处理过程,从设备到CPU到IDT到中断处理程序我们使用一个函数,方便地将中断处理程序与IDT挂接put_irq_handler(intirq_no,void*irq_fun(),I386的中断处理举例,键盘驱动程序原理分析Lingix中的键盘驱动程序的源代码,操作系统的输入与输出,OK,我们完成了键盘驱动程序,要有一个控制台,我们还需要什么?答:显示驱动程序!,显示驱动的编写,VGA显示原理VGAstandsforVideoGraphicsArray1.图形模式Itoffersmanydifferentvideomodes,from2colorto256color,andresolutionsfrom320 x200to640 x4802.字符模式,字符模式驱动程序的编写,VGA的字符模式我们在DOS中见到的黑底白字的显示模示就是VGA的字符模式,一般比较常用的是80X25。在这个模式下要在屏幕上写字母是相当容易的。因为对应在内存中从0 xB8000处开始,一个字符占用两个字节,共80X25X2个字节,对应地显示器上的内容。一个字符的两个字节中,第一个字节就是这个字符的ASCII码,第二个是这个字符的属性。,字符模式驱动程序的编写,知道了原理后,我们用C很容易就写出了一个清屏函数,相当于DOS的CLS命令:,voidclear_vram(void)unsignedchar*p=(unsignedchar*)0 xb8000;inti;/*setblank*/for(i=0;i80*25;i+)*p=;p=p+2;p=(unsignedchar*)0 xb8001;/*backgroundblack*/for(i=0;i/dev/fd0,最终启动,你成功了吗?,开源软件与OS开发,开发困难在哪?调试!好办法:开源的模拟器bochs(brieflyviewbochssourcecode),讲座回顾,介绍了开发一个小型操作系统所需的一些软硬件知识演示了一些工具的使用objcopy,objdump,nasm,ld简要分析了常见二进制文件格式,参考书籍&推荐读物,IBMPCAssemblyLanguageandProgramming(FourthEdition)PeterAbel,PRENTICEHALL80 x86汇编语言程序设计教程杨季文等,清华大学出版社OperatingSystem:Designa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铅山县葛仙山景区旅游公路开发建设工程可行性研究报告
- 提高药品生产企业环保达标率
- 技术试题及答案百度
- 防汛课件教学课件
- 2025年中学纪念九一八事变活动方案5篇
- 礼仪服务公司合同付款管理办法
- 智慧管廊运维管理平台
- 防暑降温防护知识培训课件
- 广告策划品牌整合与传播
- 金融工程行业技术规范与标准研究
- 初中物理“秒表的读数”专项练习题-专题同类题【含答案;详细解释,word版;可编辑】
- 口腔医院院感工作指导手册2022版
- 八年级物理上册《第一章 机械运动》单元测试卷及答案(人教版)
- MySQL数据库PPT完整全套教学课件
- 2023年浙江台州温岭市禁毒办招聘禁毒社工笔试备考题库及答案解析
- 2023主题学习教育知识点总结归纳(应知应会手册)
- 铜陵市绿阳建材有限责任公司《60 万吨-年磷石膏综合利用技术改造项目》环境影响报告
- 检验标本的采集
- 二氧化碳气体保护焊培训
- 生理学第九章 感觉器官的功能
- 五年级上册美术课件-15 造型别致的椅子|人美版
评论
0/150
提交评论