欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    《操作系统原理》课程设计报告微型操作系统的设计.doc

    • 资源ID:4193364       资源大小:226.50KB        全文页数:22页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《操作系统原理》课程设计报告微型操作系统的设计.doc

    重庆科技学院操作系统原理课程设计报告 学 院:电气与信息工程学院 专业班级: 计科应08 学生姓名: 学 号: 设计地点(单位)_ _ _ _ _ _ _ 设计题目:_ _ 微型操作系统的设计_ 完成日期: 2011 年 6 月 17 日 指导教师评语: _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ _ 重庆科技学院课程设计任务书设计题目:微型操作系统的设计 学生姓名课程名称操作系统原理课程设计专业班级计科应08地 点I524起止时间2011年6月12日-2011年6月16日设计内容及要求(1) 配置操作系统编写的所需的环境(虚拟机的建立和相应环境建立),以准备相关的必须工具的准备,并学会相关工具的使用,为以后编写一个微操作系统奠定基础和准备平台。(2) 学习NASM汇编器在本次设计中的使用。(3) 学习裸机启动的过程,消化操作系统引导程序的结构,在此基础上,完成在实模式下从软盘引导计算机的程序编写。(4) 学习本次设计需要的实模式到保护模式切换的相关知识。理解GDT在保护模式的工作机理(5) 编写在保护模式下的引导程序,并用C语言模拟写一个“内核”,并实现在保护模下通过引导程序启动计算机并将该“内核”加载到内存中。最后切换到内核。设计参数(1) 写出编写一个操作系统所需的环境和操作说明书。(2) 总结计算机启动顺序和具体过程。(3) 实现在实模式下系统引导程序的编写。(4) 理解消化实模式到保护模式切换原理以及相关的数据结构和工作过程,并实现之。(5) 完成保护模式下的引导程序,并完成“内核”的加载,并使“内核”运行起来。附加要求:请在设计的课后完成具有进程调度和管理的内核的编写。进度要求6月12日布置任务,对各个任务的基础知识进行讲解6月12日 安装环境,并熟悉相关工具的使用。6月13日完成实模式下引导程序的编写。6月14日完成实模式与保护模式的切换代码的设计。6月15日完成实模式引导程序和内核加载程序编写。6月16日完成答辩和报告撰写。参考资料随任务布置的相关电子文档。其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师: 年 月 日摘要操作系统是用于控制和管理计算机系统内各种软硬件资源、合理有效地组织协调计算机系统的工作流程提供友好的用户接口以方便用户使用计算机的程序集合。本次设计主要基于在实模式下系统引导程序的编写,理解消化实模式到保护模式切换原理以及相关的数据结构和工作过程,并实现之,完成保护模式下的引导程序,并完成“内核”的加载,并使“内核”运行起来。所用到的设备有Windows XP系统PC机一台、装有Linux系统的PC机一台、VMware虚拟机一台、winhex以及NASM编译软件。 结合本身的实际情况,写出设计要求的操作系统。关键词:操作系统 引导 模式 内核 NASM目录摘要I1 需求分析11.1功能需求分析11.2 性能需求分析11.3 运行环境需求21.3.1 设备21.3.2 运行环境22系统设计42.1 引导程序和模式切换功能设计42.1.1 引导程序设计42.1.2 模式切换功能设计52.2 内核设计82.3 映像文件的设计113系统测试12总结14致谢15参考文献161 需求分析无论什么项目或者是软件,我们首先必需弄清它的需求分析,才能达到我们开发的目的,而不是在那盲目的开发,最后却不知道产品所需求的功能。1.1功能需求分析PC机开机后,CPU被设定为执行FFFF:0单元处的指令,此处有一条跳转指令。CPU执行该指令后,转去执行BIOS中的硬件系统测试和初始化程序。初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。如果设为从软盘启动操作系统,则int 19h将主要完成以下工作:(1) 控制0号软驱,读取软盘0道0面1扇区的内容到 0:7C00(2) 将CS:IP指向0:7C00软盘的0道0面1扇区中装有操作系统引导程序。int 19h将其装入到内存0:7C00处后,设置CPU从0:7C00开始执行此处的引导程序,操作系统被激活,控制计算机。如果在0号软驱中没有软盘,或发生软盘I/O错误,则int 19h将主要完成以下工作:(1) 读取硬盘C的0道0面1扇区的内容到0:7C00 (2) 将CS:IP指向0:7C00由以上描述可知,若我们想要控制引导过程,只需: (1) 编写程序 (2) 将该程序代码写入软盘或硬盘C的0道0面1扇区。 因为以上工作会破坏软盘或硬盘原有数据,因此本次实验,我们选择软盘存放我们自己的启动程序。1.2 性能需求分析该操作系统在性能上应达到如下要求:1)操作简单,界面友好:本系统是采用的虚拟机软盘映像文件驱动引导程序设计的启动模式,操作起来简单方便快捷;界面可以根据自己的喜好设成不同的格式和布局。2)环境稳定:该操作系统的设计主要是引导程序的引入、实模式下的运行、实模式到保护模式的转换以及保护模式下内核的加载运行,所以运行环境必须稳定可靠。3)可扩展性:系统在结构上应该具有很好的扩展性,便于以后系统功能的扩展与开发。1.3 运行环境需求1.3.1 设备基于Windows环境平台下汇编编辑工具(EditPlus)或者基于Linux环境下的文本编辑器;NASM编译器;Winhex16进制编辑器;装有虚拟机的Windows XP系统PC机一台;Linux系统PC机一台。1.3.2 运行环境本次课程设计由于是通过虚拟机演示,主要用到虚拟机的软盘通过镜像文件引导加载程序,下面简单介绍一下运行平台上的工具以及文件。1)虚拟机VMware1)关于VMware几个重要概念1. VM(Virtual Machine)虚拟机,指由Vmware模拟出来的一台虚拟的计算机,也即逻辑上的一台计算机; 2.HOST指物理存在的计算机,Hosts OS指HOST上运行的操作系统; 3. Guest OS指运行在VM上的操作系统。例如在一台安装了Windows NT的计算机上安装了Vmware,那么,HOST指的是安装Windows NT的这台计算机,其Hosts OS为Windows NT。VM上运行的是Linux,那么Linux即为Guest OS。2)软盘映像文件映像文件是将资料和程序结合而成的文件,它将来源资料经过格式转换后在硬盘上存成 与目的光盘内容完全一样的文件,然后我们可以将这个文件以一比一对应的方式刻入光盘中。 在制作映像文件之前建议先做硬盘的资料重整与磁盘扫描,除此之外,由于一个映像文件的大小相当于刻入光盘的全部内容,所以一定要预留超过这个容量的硬盘空间来存储这个映像文件。3)映像文件合成工具WinHexWinHex 是一款以通用的 16 进制编辑器为核心,专门用来对付计算机取证、数据恢复、低级数据处理、以及 IT 安全性、各种日常紧急情况的高级工具: 用来检查和修复各种文件、恢复删除文件、硬盘损坏、数码相机卡损坏造成的数据丢失等。4)Linux下的GCC编译器Linux系统下的Gcc是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。Gcc是可以在多种硬件平台上编译出可执行的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。Gcc编译器能将C、C+语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。5)NASM编译软件要将源文件demo.asm汇编为exe文件,可以在Command窗口输入如下命令:nasm demo.asm -o demo1.exe要汇编为32位Windows程序,可以在Command窗口输入如下命令:nasm -f win32 demo.asm -o demo2.exe要汇编为64位Windows程序,可以在Command窗口输入如下命令:nasm -f win64 demo.asm -o demo3.exenasm命令的-o参数用于指定输出文件的文件名,-f用于指明文件格式,如果没有指明文件格式,则默认编译为bin格式,即纯二进制代码。所以,上面的demo1.exe实际上是个.com文件。2系统设计2.1 引导程序和模式切换功能设计2.1.1 引导程序设计首先通过一个小程序作为引导程序,引导程序的主要作用是起到引导的作用,它将一个字符串输出显示到屏幕上,其源代码如下。org07c00h ; 告诉编译器程序加载到7c00处movax, csmovds, axmoves, axcallDispStr; 调用显示字符串例程jmp$ ; 无限循环DispStr:movax, BootMessagemovbp, ax ; ES:BP = 串地址movcx, 16 ; CX = 串长度movax, 01301h ; AH = 13, AL = 01hmovbx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)movdl, 0int10h; 10h 号中断retBootMessage:db"yangjing2008540330!"times 510-($-$)db0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节dw 0xaa55 ; 结束标志2.1.2 模式切换功能设计在引导程序的基础上实现模式切换功能,实现实模式到保护模式的切换,具体实现的方式和方案如下:BITS   16 ORG   0x7C00         jmp   main    -;   数据定义 bootdrive       db     0    -;   GDT   定义,此处定义段及段描述符 gdt:         gdt_null:                       ;   这是CPU要求保留的,CPU要求第一个段必须是空段,不知它                                                 ;   想用来干啥                 dd     0                 dd     0                       ;   每个段的描述符是64位(8字节),空描述符的这64位全是0         gdt_code_addr   equ   $   -   gdt       ;   求得代码段在GDT表中的位置         gdt_code:                 dw     0xffff         ;   段大小为4GB                 dw     0             ;   基地址(24位)                 db     0                 db     10011010b       ;属性描述位,指明此是代码段,可读可执行                 db     11001111b ;具体的每一位是代表什么可查Intel   CPU编程手册                 db     0            没有的可以去网上下,也可以找我要         gdt_data_addr   equ   $   -   gdt ;求得数据段在GDT表中的位置         gdt_data:                 dw     0xffff                 dw     0                 db     0                 db     10010010b       ;   指明此是数据段,可读可写                 db     11001111b                 db     0         gdt_end:         gdt_addr:                 dw     gdt_end   -   gdt   -   1    GDT   表的大小                 dd     gdt           GDT   表的位置    -main:                               ; 引导程序从此处开始执行         mov   bootdrive   ,   dl     得到启动的驱动器号         xor   ax   ,   ax           ;   设置   DS         mov   ds   ,   ax         ;   清屏         ;mov   ax   ,   3    设置清屏功能号         ;int   0x10           调用   BIOS   10   号中断清屏         .ResetFloppy         ;重置磁盘,不是必须的,主要是为了安全起见         mov   ax   ,   0                     ; 设置重置磁盘的功能号         mov   dl   ,   bootdrive         ; 选择启动磁盘         int   0x13           ;调用 BIOS 13号中断重置磁盘         jc   .ResetFloppy                   ;   如果出错则重试         .ReadFloppy                         ;   读内核到内存中   0000:9000   (es:bx)处, 为什么要读到9000处,这不是一定的, 你可以读到另外一个合适的地址 什么地址合适?怎样知道一个地址合不合适?待会再说         xor   ax   ,   ax                  设置   es   寄存器         mov   es   ,   ax         mov   bx   ,   0x9000         mov   ah   ,   2             ; 设置读磁盘功能号         mov   dl   ,   bootdrive         ; 设置欲读驱动器号         mov   ch   ,   0       磁头号         mov   cl   ,   2   ;   起始扇区号,从第二个扇区开始读,                             ;第一个扇区是引导扇区,第二个才是内核所在         mov   al   ,   17    需读入扇区的数量,此处读了17个扇区                              ;   是怕内核较大,读少了读不完         int   13h             ;调用   BIOS   13   号中断开始读扇区,                                           ;   此中断会将数据读到   es:bx   处         jc   .ReadFloppy                   ;   如果出错则重试(ah中是错误号,为0则没错)         mov   dl   ,   bootdrive         ;   停止驱动器         mov   edx   ,   0x3f2         mov   al   ,   0x0c         out   dx   ,   al         cli                                   关中断         lgdt   gdt_addr                 ;   载入   GDT   的描述符         mov   eax   ,   cr0                   下面三句设置   cr0   的第   0   位(PE位)为1,                                           ;   表示进入保护模式         or   eax   ,   1         mov   cr0   ,   eax         jmp   gdt_code_addr:code_32       ;   跳入32位的代码段中 BITS   32 code_32:         mov   ax   ,   gdt_data_addr     ;   以下三句设置   DS,ES,SS,FS,GS                                     ;  为数据段描述表的位置         mov   ds   ,   ax         mov   es   ,   ax         mov   ss   ,   ax         mov   fs   ,   ax         mov   gs   ,   ax         mov   esp   ,   0xffff             ;   设置堆栈的头指针         jmp   gdt_code_addr:0x9000         ;   跳入内核,    gdt_code_addr是定义的代码段的描述符所在的索引    由于我们先前是把内核读到了   0x9000的位置,    因此我们现在就转到内核所在去执行,;  引导程序胜利完成历史使命! - times   510-($-$)   db   0 db   0x55 db   0xAA 将此段代码存储为boot.asm文件,运用NASM编译器编译为boot.img文件。2.2 内核设计内核设计是本次课程设计最重要也是最关键的一个步骤,下面给出内核设计的源程序。#include<stdio.h>char* msg = "Hello Diqiu!" ; void one();void two();void Sleep(int x);void main() int i; unsigned char* videomem = ( unsigned char* )0xb8000 ; /* 获得显存地址 */while( *msg != '0' ) *videomem+ = *msg+ ; /* 设置显示字符的ASCII码 */ *videomem+ = 0xfa ; /* 设置文字属性(背景色,前景色,是否闪烁等)*/ Sleep(5000);i+; one(); two(); for(;); void one() char* msg = "2008540330yangjing!" ; unsigned char* videomem = ( unsigned char* )0xb80a0 ; /* 获得显存地址 */ while( *msg != '0' ) *videomem+ = *msg+ ; /* 设置显示字符的ASCII码 */ *videomem+ = 0xfb ; /*设置文字属性(背景色,前景色,是否闪烁等)*/ Sleep(5000); void two() char* msg = "Thank you!" ; unsigned char* videomem = ( unsigned char* )0xb8140 ; /* 获得显存地址 */ while( *msg != '0' ) *videomem+ = *msg+ ; /*设置显示字符的ASCII码 */ *videomem+ = 0xfc ; /*设置文字属性(背景色,前景色,是否闪烁等)*/ Sleep(5000); /*void Sleep() int i; int n=10; for(i=1;i<=n;i+) printf("%d",i); Sleep(5*1000*60); /这里修改延时时间*/void Sleep(int x) int i,j; for(i=0;i<x;i+) for(j=0;j<10000;j+) 将以上编写好的代码保存为yangjing.c形式的C语言文件,将保存好的C文件拷贝到Linux环境下的通过gcc编辑成yangjing.bin文件。2.3 映像文件的设计关于映像文件的设计其实很简单,就是将两个映像文件合并城一个映像文件,用前面所介绍的WinHex专用编辑工具来实现。首先将WinHex编辑器打开,打开boot.img文件,再打开yangjing.bin文件,将yangjing.c文件的二进制码拷贝到boot.img文件的二进制码的末尾,最后另存一个Img文件即可。3系统测试打开虚拟机,新建一个虚拟机如下图3.1所示。图3.1 新建虚拟机新建一个虚拟机后,选择Floppy软盘读取映像文件,如下图3.2所示。图3.2 软盘读取再打开虚拟机电源即可运行映像文件,下面运行第一个引导程序映像,如下图3.3所示。图3.3 引导程序运行界面图3.4 内核运行结果总结操作系统原理在本学期第一次接触到,期末进行了为期一周的课程设计,让我们自己切身的感受和实际动手写操作系统。让我学习到如何在操作系统中编写和运行引导程序,如何在实模式下切换到保护模式,如何加载内核,如何在保护模式下运行内核。由于只有一周的时间,我只能是做些简单的程序引导和内核加载,我相信通过课后更多的时间我会设计出更完美的操作系统引导程序和内核加载,还会增加更多的功能。致谢在本次课程设计能得以顺利完成,在这里感谢各位老师的指导,同时感谢各位同学的帮助。参考文献1陆丽娜,齐勇,白恩华主编,计算机操作系统原理与技术,西安:西安交通大学出版社,19952李大友主编,操作系统,北京:机械工业出版社,20003王万森等. 计算机操作系统原理. 北京: 高等教育出版社, 2001

    注意事项

    本文(《操作系统原理》课程设计报告微型操作系统的设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开