编写实模式多任务操作系统模型之一(共23页).doc
《编写实模式多任务操作系统模型之一(共23页).doc》由会员分享,可在线阅读,更多相关《编写实模式多任务操作系统模型之一(共23页).doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上操作系统是计算机软件系统的重要组成部分,它起着管理计算机软硬件资源、控制计算机的正常运行及为各类用户提供使用接口等诸多功能,是其它各类应用软件赖以存在的基础。 由于操作系统软件多数以公司模式集体开发,并以成品软件的形式进行发售,使得用户只能局限于操作系统所提供的使用界面及系统功能调用上,对于系统底层的运行机制的理解只能局限于一些表面现象上,不能深入把握操作系统内部的运作机理,即使以源码形式提供的,也由于其规模庞大、特征繁多,使得用户不可能在短时间内完全掌握运行机制。为了能充分了解操作系统的功能实现,自己亲自动手编写一个小型的,或是实现部分功能的操作系统模型,而后逐步完
2、善不失为一种好方法。本文所述的这一操作系统模型即是在这方面的一次尝试。 功能及特点1.实现在x86实模式下分时的多任务功能。 2.PC机自检完成后可以完成机器的引导。 3.引导成功后可以使3个进程并行运行,分别运行于自身的程序空间内,完成自身计数器的计值工作,并采用直接写屏方式输出到屏幕上。 4.有一个内核级键盘中断处理程序。 5.软件规模小巧,易于研读、理解和实践,以及进行功能的增强和拓展。 6.程序分模块编写,功能明确,界限清晰。 7.对于机器的配置要求极低,以Intel 80x86 处理器为CPU的PC机、VGA彩色显示器、3英寸软驱即可。 运行机制众所周知,Intel 80386以上的
3、CPU具有实模式和保护模式两种工作方式,处于保护模式的CPU在硬件上支持存储器管理、虚拟地址、分页、保护等功能,具有多任务切换机制,是现今的多用户多任务操作系统如Windows、Linux、FreeBSD 等所采用的工作方式。而工作于实模式80386 及以上的CPU相当于高性能的8086 CPU ,本身在硬件上不具备多任务的切换机制,那末,在x86的实模式下是否可以实现现多任务功能呢?答案是肯定的,利用软件进行模拟。 本程序在系统时钟中断的驱动下,利用软件方式在x86 CPU实模式下实现了一个多任务操作系统模型,可以启动机器,并在屏幕上显示由3个并行进程输出的各自程序计数器。 在宏观上,3个进
4、程在并行运行。在微观实现上,通过时钟中断的控制,3个进程依次轮流占用CPU完成各自的工作,即每当发生时钟中断,Kernel内的调度程序被激活,顺序将下一个先前被剥夺运行权的进程赋予运行权,使其可以占用CPU运行,当再次发生时钟中断时,当前运行的进程被强行中断运行,调度程序将其断点信息保存到该进程的堆栈区,待下次运行时再将其恢复,而后调度程序选择下一进程,使其转入运行状态。整个系统循环往复,直到关机。 相关背景知识本程序全部利用汇编语言在x86实模式下编程,为能深入理解程序的工作原理,必须了解PC机相关软硬件知识。下面对相关内容进行简单叙述。 1.PC机自举过程简述 PC机在通电后至操作系统接管
5、控制前,要进行一系列的自检及初始化过程,包括对内存、外设等硬件的检测。在检测过程中若存在严重错误则停机。若无则试图根据CMOS内的配置信息读取启动盘上的引导记录bootsector。通常先从软盘启动(本文默认从软盘启动),将软盘上0面0道1扇区的512字节读入到内存0000:7c00h地址处,而后跳到该地址处执行,这时机器便由软件接管控制。 通常操作系统都由一个引导程序进行引导,引导程序的主要作用在于将操作系统的内核读入内存,而后转到内核去执行,由内核接管机器的所有控制,包括内存管理、进程管理、设备管理、处理机管理等。上述启动盘上的引导记录就是一个引导程序,在该操作系统模型的实现中,boot.
6、asm程序即起到这样功能的程序,后面将结合具体代码进行详细介绍。 2.PC机的中断向量表结构 中断是改变程序运行环境的一种机制,它可以使CPU暂停当前程序的执行,转去执行引发中断的中断源的中断服务程序。在中断服务程序执行完毕后,再接着原来的程序执行。中断可以通过中断指令int xx或由外部的硬件设备产生。中断向量表即提供当中断发生时,如何转向中断服务程序的方法。在中断向量表中存放了相应中断服务程序的入口地址,这一入口地址称为中断向量,它由段地址和偏移组成,即CS:IP。 PC机中的中断向量表位于低端内存区的1KB存储器中,绝对地址为:00000H003FFH, 其中的每个中断向量占4个字节,C
7、S占2个字节(占高地址区),IP占2个字节(占低地址区)。给定一个中断类型号,即可通过如下的方式取得中断向量的段地址及偏移: CS=中断类型号*4 IP=中断类型号*4+2 3.PC机屏蔽中断的内部处理过程 PC机中断发生时,若中断标志I=1(中断允许),则有如下的内部动作: a.将中断类型号*4,得到中断向量表的指针; b.将CPU的标志寄存器Flag入栈; c.将中断标志I和陷阱标志T清0; d.将主程序断点处的CS及IP分别压入堆栈保存; e.从中断向量表中取得中断服务程序的入口地址,分别送到CS 和IP中; f.转到中断服务程序去执行。 对于软件中断,则不判断中断标志的状态,直接执行a
8、f的处理过程。 在用户所写的中断服务程序的末尾,要有一条中断返回指令iret,控制程序流由中断服务程序返回到主程序中,它所完成的内部处理如下: 将先前压栈保存的端点从堆栈弹出,送到CS和IP中; 执行popf操作,恢复标志寄存器Flag; 从主程序的端点处继续运行。 4.PC机的过程调用 PC机的过程调用通过call指令产生,它的处理过程与中断过程相似,但无标志寄存器的处理,具体如下所示。 远过程调用:call far farentry 将返回地址(call指令的下一指令)的CS及IP压栈; 以farentry的偏移及段地址送入IP及CS; 转到farentry去执行。 远过程调用返回:RET
9、F 将返回地址弹出到IP及CS; 从返回地址处继续执行程序。 对于近过程调用,则调用时只保存返回地址的IP,过程结束时只恢复IP。 5.汇编语言相关知识 本程序在Linux下用nasm进行编译。nasm是一个功能强大的开源代码的汇编语言编译程序,其语法与Intel语法相似,可以产生纯二进制的指令代码,也可以产生a.out及ELF格式的目标代码,通过连接器连接便可生成直接由操作系统运行的程序。这里用它产生二进制格式的指令代码,这是一种内存映像,加载到内存便可直接运行。关于NASM编译器的详细信息可参考相关资料。程序模块分析本操作系统模型由两个程序组成,一个为引导程序boot.asm,另一个为内核
10、程序kernel.asm。其中引导程序位于软盘的引导扇区,主要功能为将Kernel从盘上读入内存,让其运行;Kernel则依次使3个进程占用CPU,完成各自的工作。 引导程序boot.asm 引导程序boot.asm位于引导软盘的0面0道1扇区,共计512个字节长度。该段程序在系统通电自检完成后,将由ROMBIOS读到内存的0000:7c00h地址处,并从该地址开始执行。该程序运行后将首先将自身移动到高端内存区9000:7c00h,留出低端内存区以备功能扩展时使用,而后转到高端内存区执行。接着对引导驱动器复位,利用int 13h的物理读盘功能,将位于0头0道2扇区及3扇区的kernel程序读入
11、内存 8000:0000h地址处。若读盘失败,则进行3次尝试;若仍未读出,则显示“kernel Loading failed ! Any key to reboot.” 信息,而后重新启动;若读盘成功,则跳到kernel程序的入口点8000:0000h地址处执行。程序流程如图1所示。 boot.asm执行后的内存布局如图2所示。由于在实模式下编程,程序可访问的内存空间为1MB,绝对地址从00000HFFFFFH,其中低端内存及高端内存的部分区域已经被系统占用,程序可用的内存区为位于高端及低端的中间部分。由于本程序规模较小,内存空间足够用。对于本程序,高端97C00H97DFFH为引导程序自搬移
12、后的位置,80000H803FFH为成功读入的内核代码所占的内存空间。 boot.asm的程序代码及详细注释如下: ; boot.asm - OS 引导扇区程序Bootloader; 功能: 将自身移动至内存高端,而后将启动盘上的kernel读到内存,; 接着跳转到kernel.;BITS 16 ;实模式 16bit 代码结构 ; 标号等价伪定义INITSEG EQU 0x07c0 ; 启动扇区段地址 NEWSEG EQU 0x9000 ; 引导程序移动到的高端段地址 KERNELSEG EQU 0x8000 ; kernel段地址 KERNELOFFSET EQU 0x0000 ; kern
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 写实 模式 任务 操作系统 模型 之一 23
限制150内