《操作系统开发的工具与技巧.ppt》由会员分享,可在线阅读,更多相关《操作系统开发的工具与技巧.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统开发的工具与技巧操作系统开发的工具与技巧演讲人:陈斌演讲人:陈斌Sunwen_Shttp:/lingix.gro.clinux.org武汉自由软件协会武汉自由软件协会http:/www.clinux.org操作系统概况操作系统概况nDOSnWINDOWSMicrosoft公司在公司在1983年春季就宣布年春季就宣布开始研究开开始研究开发发Windows,它在它在1985年年和和1987年分年分别别推出推出Windows 1.03版版和和Windows2.0版。于版。于1995年推出新年推出新一代操作系一代操作系统统Windows95(又名又名Chicago),它可以独立运行而无需它可以
2、独立运行而无需DOS支持。支持。操作系统概况操作系统概况nUNIX1965年年贝尔实验室、麻省理工学院(MIT)和通用电气(GE)联合开发新的操作系统-Multics。Multics将提供多用户、多处理器、多级(层次型)文件系统及其它一些先进性能。1969年年AT&T对开发进展不满意,放弃了Multics项目。参加Multics项目的贝尔实验室程序员Ken Thompson,Dennis Ritchie,Rude Canaday和Doug McIlroy在PDP-7上设计并安装了第一版的Unix文件系统及一些工具软件。Brian Kernighan将其命名为Unix(Multics的双关语)。
3、操作系统概况操作系统概况nLINUX(神奇的操作系统)神奇的操作系统)1991 年,年,Linus Torvalds 開始使用開始使用 MINIX,他對他對 MINIX 提供的功能不滿意,自行發展提供的功能不滿意,自行發展 Linux,他把他把 Linux 的原始碼放在的原始碼放在 Internet 上,允許人們自由使上,允許人們自由使用用(under GNU Public License)。操作系统概况操作系统概况nMINIX(用于教学用于教学的的OS)Famous Computer Scientist:Andrew S.Tanenbaum精致的代码,微内核结构,分析可读性精致的代码,微内核
4、结构,分析可读性非常好非常好!n有趣的论战:“Linux is obsolete”CPU-中央处理器中央处理器nIntel 系列(实模式、保护模式发展历程)1971 Intel 4004 4位1972 Intel 8008 8位1974 Intel 8080 第一个通用的微处理器 第二代1976 Intel 8086 16位 第三代 定型 存储器分段80186 80286 引入保护模式 80386 32位 里程碑80486 Pentium Pentium Pro n其他CPU (MIPS)INTEL P4 CPU我们的我们的GODSON(狗剩狗剩)CPU2002年9月28日,中国科学院在“中国
5、科学院计算所创新成就展”上宣布:我国第一款商品化的通用高性能CPU芯片-拥有自主知识产权的“龙芯”1号CPU流片成功,可大批量生产提供广大用户使用。实模式基本情况实模式基本情况n作为 i386 系统启动最初状态在实方式下,80386相当于一个可进行32位处理的快速8086。1.可访问内存-1M 2.存储器分段3.寻址简介物理地址=段值 X 16+偏移保护模式保护模式n保护模式保护模式这是在任何一个现代操作系统中出现频率最高的词。保护模式其实是CPU的一个工作状态,在这个工作状态下的CPU,具有很多在实模式实模式下没有的特性。我们知道WINDOWS在工作在何护模式下的一个操作系统,在一般的用户程
6、序中,是不能够访问计算机所有的硬件资源的。比如:outb(0 xfc,0 x64);这条程序是可以在DOS下让计算机重启的,但在WINDOWS下运行是不能够运行成功的。保护模式保护模式保护模式的保护特性(特权级的概念)保护模式保护模式对相关敏感资源的保护仅仅是保护模式的一个特性,它使得用户程序不能够随便访问与操作系统运行息息相关的硬件资源。但保护也是分级的,在最高特权级的程序是没有任何限制。著名的CIH病毒,就是通过特殊的方法进入到WINDOWS系统的RING0级后对BIOS进行破坏。除保护外,“保护模式”一詞还包括了非常广阔的内容,它是操作系统开发所围绕的中心。它是INTEL从80386引入
7、的,包括了内存分段、分页以及中断和异常等等众多的内容。保护模式保护模式详细的有关保护模式的文档可以从INTEL网站上得到它在操作系统开发社区中被称为“IA32三部曲”,共有三卷,其中第三卷详细讲述了保护模式的所以资料。注:IA是Intel Architecture的缩写另:IA-32的三卷从我的个人网站上也可以下载保护方式下保护方式下80 x86的编程的编程n内存寻址内存寻址寻址简单地说就是在内存中对数据进行定位。C语言里的指针,实际上就是地址。比如char ch;char*p=&ch;*p=a;/*这一句就包括了寻址操作*/在汇编语言中:MOVAX,BX同样也有寻址操作。保护方式下保护方式下
8、80 x86的编程的编程n分段(分段(SEGMENT)分段是保护模式下的最重要的一个特性,一旦在保护模式下,CPU就已经进入了分段模式。虚拟地址到物理地址的映射可以省略可以省略保护方式下保护方式下80 x86的编程的编程n分段的依据(描述符分段的依据(描述符Descriptor)CPU如何进行虚拟地址到线性地址的映射,答案是描述符表,在这张表里放着很多段描述符,用来描述每个段的属性。而CPU又是如何知道这张表呢?这要我们在进入保护模式前就在内存中构造一个描述符表,然后告诉CPU它在哪里。如何告诉?答:设置CPU内的GDTR寄存器。保护方式下保护方式下80 x86的编程的编程GDT(Global
9、 Descriptor Table)全局描述符表GDTR(Global Descriptor TableRegister)全局描述符表寄存器保护方式下保护方式下80 x86的编程的编程n分段后的内存分段后的内存Layout保护方式下保护方式下80 x86的编程的编程n与GDT相对的LDT(Local Descriptor Table)保护方式下保护方式下80 x86的编程的编程nLingix里的这些概念里的这些概念Lingix仅仅有GDT,没有使用到LDT,把64M的内存分为一个段,当然,这仅仅是为了简便。保护方式下保护方式下80 x86的编程的编程n更加详细的论述更加详细的论述在保护方式下,
10、每个段由如下三个参数进行定义:段基地址(Base Address)、段界限(Limit)和段属性(Attributes)。这些都是放在GDT中的。如果仅使用分段机制,那么我们的虚拟地址到物理地址之间的映射公式就为:Segment Base+Virtual Address=Physical Address保护方式下保护方式下80 x86的编程的编程nBible:IA32 Volume 3nChinese Bible:杨季文清华大学出版社周明德主编清华大学出版社从实模式切换到保护模式从实模式切换到保护模式n原因原因 在实模式下硬件没有提供保护机制,导致所有的程序都可以破坏OS的代码段或是数据段,直
11、接导致操作系统的崩溃,如DOS。在保护模式下,还可以方便得实现虚拟内存,这在实模式下也是不易做到的。还有一个重要的原因就是,在实模式下只能用20根地址线,即只能寻220空间的地址,即1M,1M以后的内存一般无法访问。n方法方法 打开CR0寄存器的PE位,然后用一个jmp指令按照保护方式下的寻址方式跳转到保护模式下的代码。实战一:启动实战一:启动n背景资料背景资料系统在加电之后指向的地址是我们常说的BIOS(Basic Input Output System)所映射到的地址。随后BIOS进行一系列自检操作后,就准备调入操作系统代码,把控制权交给操作系统。BIOS在这段时间里做的事情是很多的,但通
12、常我们不必理会。实战一:启动实战一:启动那么BIOS和操作系统之间过渡的桥梁在哪呢?答案是启动设备启动设备。BIOS在进行完自己的事情后,寻找启动设备,如果找不到,则HALT。找到之后,它读入该启动设备的第一个扇区到0 x7C00这个地址处。此间,BIOS还要检查这第一个扇区的最后两个字节,如果是0 x55AA则表明这个设备可以用来引导。否则,不能引导。所以我们在写启动扇区的时候一定要记住在最后的两个字节里写入0 x55 0 xAA。(INTEL 的数据存放方法 高高低低原则)实战一:启动实战一:启动n硬盘启动硬盘启动硬盘的第一个扇区(sector)被称作MBR(Master Boot Rec
13、ord)。由于硬盘可以有多个分区,所以在MBR上,不仅放置着用于启动的可执行代码master boot,还放着磁盘分区表(DPT),占用66个字节,所以MBR中的可执行代码必须在512-66=446个字节以内。这就是硬盘第一个扇区如此重要的原因,我提醒你要时常注意备份。演示演示-演示扇演示扇区区nWindows 使用的引导扇区使用的引导扇区 我们用一个磁盘工具打开硬盘的第一个扇区,来验证我们刚才的理论。工具:WinHexOK,请把桥搭好,请把桥搭好n“桥桥”启动扇区的编写启动扇区的编写启动扇区一般来说只能用汇编来写,而且这个启动程序要刚好是一个扇区的大小,即512字节。如何做到精确控制512个
14、字节呢?演示演示-演示演示扇区扇区n从软盘引导的例子从软盘引导的例子 这里,我们将自己写一个引导扇区,然后将其写到软盘的第一个扇区,最后用模拟器从这个软盘启动。n我们可以利用的资源我们可以利用的资源:BIOS中断中断用启动扇区做什么用启动扇区做什么?启动扇区(boot sector)在接过BIOS的“接力棒”后,首先要做的是把操作系统的kernel load到我们想要的位置,还要做的就是要进入保护模式。前面提到,机器初启的时候是在保护模式中的,在这个模式下,只能访问低端的1M地址,1M以上的地址不能访问。而保护模式下最多可访问的地址是4G(232)。用启动扇区做什么用启动扇区做什么?以Ling
15、ix为例,内核紧跟在boot sector后面。然后我们在启动扇区中读入内核(如果内核太大,要分几级读),读完后,我们在boot sector代码的最后用一个jmp指令跳到你把内核读到的地址处。分析分析Lingix的启动代码:的启动代码:是使用BIOS中断的磁盘功能来将磁盘一扇区后的内核读入内存中的。思考:如果BIOS没有提供这个功能乍办?实实模式下的资源层次模式下的资源层次应用程序DOS外设硬件接口BIOS开始工作开始工作n我们的代码在哪里?n从磁盘到内存n在内存运行n跳转到内存中的代码中断中断n原因:高速设备和低速设备的协同工作n举例:键盘中断万物之源中断万物之源操作系统归根结底说来是“被
16、动被动”的,它的动力之源是中断(Interrupt)。中断可分为硬件中断和软件中断。硬件中断又称外部中断,由8259A(可编程中断控制器)进行处理,然后提交给CPU。软件中断就是我们常用汇编时使用的INT系统指令。如:INT 10H中断万物中断万物之源之源中断信号CPU中断处理程序中断的过程中断的重要性中断的重要性n一句话,All things come from Interrupt!Clock InterruptHard disk interruptNet Card interruptI386的中断处理过程的中断处理过程nIDTInterrupt Descriptor Table(中断描述符
17、表)与8086/8088一样,在响应中断或者处理异常时,80386根据中断向量号转对应的处理程序。但是,在保护模式下,80386不使用实模式下的中断向量表,而是使用中断描述符表IDT。在保护模式下,80386把中断向量号作为中断描述符表IDT中描述符的索引,而不再是中断向量表中的中断向量的索引。I386的中断处理过程的中断处理过程n从设备到 CPU 到 IDT 到中断处理程序n我们使用一个函数,方便地将中断处理程序与IDT挂接nput_irq_handler(int irq_no,void*irq_fun()I386的中断处理举例的中断处理举例n键盘驱动程序驱动程序原理n分析Lingix中的键
18、盘驱动程序的源代码操作系统的输入与输出操作系统的输入与输出nOK,我们完成了键盘驱动程序,要有一个控制台,我们还需要什么?n答:显示驱动程序显示驱动程序!显示驱动的编写显示驱动的编写nVGA 显示原理VGA stands for Video Graphics Array1.图形模式It offers many different video modes,from 2 color to 256 color,and resolutions from 320 x200 to 640 x4802.字符模式 字符模式驱动程序的编写字符模式驱动程序的编写nVGA的字符模式的字符模式我们在DOS中见到的黑底
19、白字的显示模示就是VGA的字符模式,一般比较常用的是80 X 25。在这个模式下要在屏幕上写字母是相当容易的。因为对应在内存中从0 xB8000处开始,一个字符占用两个字节,共80 X 25 X 2个字节,对应地显示器上的内容。一个字符的两个字节中,第一个字节就是这个字符的ASCII码,第二个是这个字符的属性。字符模式驱动程序的编写字符模式驱动程序的编写知道了原理后,我们用C很容易就写出了一个清屏函数,相当于DOS的CLS命令:void clear_vram(void)unsigned char*p=(unsigned char*)0 xb8000;int i;/*set blank*/for
20、(i=0;i 80*25;i+)*p=;p=p+2;p=(unsigned char*)0 xb8001;/*background black*/for(i=0;i /dev/fd0最终启动最终启动你成功了吗?开源开源软件与软件与OS开发开发n开发困难在哪?调试!n好办法:开源的模拟器bochs(briefly view bochs source code)讲座回顾讲座回顾n介绍了开发一个小型操作系统所需的一些软硬件知识n演示了一些工具的使用objcopy,objdump,nasm,ldn简要分析了常见二进制文件格式参考书籍参考书籍&推荐读物推荐读物nIBM PC Assembly Langu
21、age and Programming(Fourth Edition)Peter Abel,PRENTICE HALLn80 x86汇编语言程序设计教程杨季文 等,清华大学出版社nOperating System:Design and Implementation(Second Edition)Andrew S.Tanenbaum,Albert S.WoodhullPRENTICE HALLnComputer System Architecture(Third Edition)M.Morris Mano,PRENTICE HALLnAdvanced Programming in the UNIX EnvironmentW.Richard Stevens,Addison-Wesley操作系统开发的工具与技巧操作系统开发的工具与技巧谢谢大家的参与谢谢大家的参与!