1 设计目标。
编写并调试一个多进程共行的进程调度程序,以加深对进程调度的理解。
要求1:高于实验:
至少有四种以上的进程调度程序供选择;
每个进程由进程控制块表示,进程控制块至少包含6个信息项;
设计一个实用的用户界面,以便选用不同的进程调度算法;
要求2:独立运行:
有能脱离外部api 、支持库及操作系统运行的可能性;
2 可行性分析。
2.1 经济可行性。
开始撰写本文档的日期为2024年12月19日,作业提交截止时间为2024年1月3日,因而时间充足,经济上可行。
2.2 技术可行性。
经过一个对计算机操作系统学期的学习以及之前对汇编、c语言、数据结构等科目学习的知识积累,从技术角度看来,设计中的各项要求均有目前所知的技术能实现的应对方案,技术方面可行。
2.3 法律可行性。
拟将采用的算法均为公共版权的算法,此外将参考开放源**的linux早期版本源**及minix早期版本的源**,可能有部分数据结构或函数引用,因本设计不用于商业用途并将在相应**上保留原作者信息等荣誉行注释,符合gpl及bsd许可证要求,开发过程所用操作系统及工具均为可免费使用的工具(包括ubuntu、gcc、nasm、vim、bochs、qemu、virtual box、libre office等),法律上可行。
3 需求分析。
3.1 概要分析。
根据设计目标的要求1,需要设计的调度程序包含用户界面、相应的数据结构和用户控制函数、内部调度函数,其中内部调度函数中包含至少四种基于不同调度算法的方法,数据结构至少包含一个不少于六个信息项的进程控制块数据结构,用户界面部分包括可供用户选择调度算法的功能模块。
根据设计目标的要求2,程序将不能依靠任何操作系统中的库函数、api实现,因而程序将设计为基于x86兼容机的系统程序,并按照相关协议让程序直接由计算机的bios引导加载,使程序能在主流x86虚拟机软件中完整运行。
根据“编写并调试一个多进程共行的进程调度程序,以加深对进程调度的理解”的要求及上述分析,初步确定设计一个严格按照操作系统运行环境运行的调度演示程序,并且每个接受调度的进程拥有自己的进程体及进程体程序,并设计能让进程主动通讯,从加深对操作系统这门课程的角度出发,考虑设计中包含对操作系统一课的大部分内容的应用。
3.2 服务流程。
3.3 服务er图。
4 概要设计。
基于需求分析(见第三部分需求分析),先设计程序如下:
1、最终生成的程序存放于一个1.44m的磁盘映像文件中,此文件可直接写入到3.5英寸1.44m软磁盘中;
2、上述磁盘镜像可直接用主流x86虚拟机软件(包括virtualbox、vmware等)加载运行主程序;
3、基于以上两点,本课程设计将包括磁盘引导区mbr程序及主体程序分别用于引导主体程序及进程调度演示;
4、从上述几点出发,同时为了顺便深入学习一下操作系统的文件系统实现等内容,本设计将包含两部分:其一为十六位实模式磁盘操作系统用于mbr引导及软磁盘本身存储管理,软磁盘文件系统采用fat12;其二为保护模式下的多进程系统(一个简易操作系统),即主体程序,将由十六位实模式磁盘操作系统引导加载;
5、面向用户概要设计为:用户把磁盘塞进计算机(或把磁盘映像放进虚拟机)后,启动计算机,计算机将从软磁盘引导,首先进入到一个磁盘操作系统中,在此磁盘操作系统中通过简单选择或者命令输入将进入进程调度主程序界面,再次界面中可完成进程管理、进程控制以及进程调度管理操作。
6、综上,本设计为一个实模式磁盘操作系统和一个多进程的简易操作系统(如下图):
4.1 进程调度演示系统整体模型。
整体模型层次图如下图:
4.2 实模式软磁盘操作系统模型。
模型概要:如上图所示,对于用户来说,引导进入进程调度系统的引导程序在磁盘中以文件形式静态存在,用户通过操作磁盘操作系统运行引导程序,而对于引导程序来说,实现引导也必须依赖于磁盘操作系统内建的操作系统中断实现读取作为单独文件存放的多进程调度系统内核。
之所以分开两个文件存放,是因为多进程调度系统设计由c和汇编语言编写并编译为elf结构文件,读入内存后还必须进行内存分页后按入口地址组织等操作。)
而对于用户来说,磁盘操作系统的内容只包括显示输出的内容和键盘操作的部分,文件系统的实现、显存操作、中断处理等部分均对其透明。
对于此系统而言,程序由实模式操作系统的引导程序从磁盘映像中读取到内存中执行,而读取到内存的操作需要定位到程序主体在磁盘中的存放位置,这就需要对文件系统进行初步的操作,因此,此系统首先是基于文件系统的。
综上,此程序主体为:文件系统、中断系统、用户终端(显示输出及键盘操作);
4.2.1 文件系统模型。
本设计中文件系统包含最终编译生成的1.44m磁盘映像中的数据内容以及实模式磁盘操作系统中对磁盘进行读写操作的部分。
数据组织上,采用fat12标准进行组织架构,即使磁盘映像中包含正确的主引导记录扇区、两个fat表、一个根目录区等,因此,此磁盘映像生成时,具备的线性结构如下:
如上图,映像中第一个扇区(头部节)中包含跳转到引导程序的指令、fat12分区的基本信息及引导程序;第一个扇区以后,是9个扇区的fat1和9个扇区的fat2,此时,这两个表均表示为分区空间全部闲置;同时根目录区为空。
对于文件系统的操作部分,设计以下几个依赖bios的13h号中断的方法:
初始化软驱;
关闭软驱;把lba转换成chs;
根据chs读取扇区;
根据chs写入扇区;
获取文件当前簇的下一簇簇号;
设置文件当前簇的下一簇簇号;
根据文件名在当前目录下搜寻文件;
根据文件名删除文件;
读取根/子目录表;
写入根/子目录表;
读入fat表;
写入fat表;
读取指定簇;
读取整个文件到内存;
创建文件;写入文件;
为文件分配一系列簇;
遍历当前目录的文件;
打印遍历的文件信息;
规格化文件条目为文件信息字符串到文件名缓冲区;
文件名缓冲区操作(含大小写规格化、清理等);
规格化目录路径;
读取规格化后的目录路径指向的目录;
考虑到此文件系统只为一张软盘即只有体积极小的fat表,而可用内存有1mb大小,且内存读写速度远远大于磁盘操作速度,因而设定为运行后直接装载fat表到内存中读写,因为读取操作远远多于写入操作,因此设定为每次写入时整个fat表写入。
4.2.2 中断系统模型。
中断向量表采用8086模式下bios默认预设的0:0内存编址开始的十六位中断向量表。其中,为了实现部分时钟相关的功能,需要设定中断向量表的8号中断、操作定时器模式、初值等;键盘中断的实现包括设置中断向量表的9号中断;
另外需要自行编写部分引导程序需要调用的操作系统中断,包括编写相应的中断服务程序(如字符串输出、文件读写等,此部分务求与ms-dos兼容)、设置中断向量表的21h号中断及设置二级中断向量表等。
4.2.3 用户终端模型。
考虑到拓展性(包括是模式操作系统日后的深入研究拓展等)及用户习惯,实模式操作系统设计为:最大限度模仿ms-dos的人机界面。
模仿ms-dos的人机界面设计。
实模式操作系统用户界面如上图,设计为用户键入指令回车后执行指令,并设计实现dir指令用于显示文件列表、cd指令用于更改当前目录、键入可执行程序名时执行程序等功能;
对于引导进入保护模式多进程调度系统的实现,设计为编写一个名为“boot”的可执行程序放进磁盘中,用户在实模式磁盘操作系统启动完毕后在命令(如上图)中键入“boot”即可完成引导,此部分利用了实模式操作系统执行程序的功能。
考虑到与ms-dos的兼容性,boot程序将参照com文件结构编写,同时对是模式操作系统加载程序的实现作出相应的设计。
4.3 保护模式下多进程系统模型。
模型概要:在本系统中,用户可见的内容只有进程管理器以及进程在运行时涉及到用户界面显示的操作,用户能操作的只有进程管理器,用户通过操作进程管理器实现进程控制、进程管理、调度控制等功能。
进程调度及涉及硬件的操作均由系统内核完成,作为进程存在的作业或任务只能通过包括消息传递、文本收发在内的系统调用完成涉及硬件的操作。
4.3.1 保护模式跳转程序概要设计。
由于进程调度系统对系统安全性有较高要求,同时需要的内存在实模式下无法获取,因此本系统需要设计在80386及其后继机型的保护模式下,因而需要一个模式切换的跳转程序。
对于多进程的系统来说,进程的内存寻址、地址编址方式不确定,为了避免冲突,需要采用虚拟内存的方式,因而跳转程序中需要开启x86的分页机制,实现段页式存储管理,因为本系统暂不需要文件系统,因而分页文件可忽略,分页直接映射所有的物理内存;
进程调度的实现、硬件操作均由系统内核完成,进程体不可直接操作硬件,同时为了避免一个进程的错误导致整个系统的崩溃,本系统中需要实现权限分级,因此引导程序中还需要利用x86的ring0和ring1两个特权级,并设置相应的gdt以划分各个内存段的权限等级,其中系统内核运行在ring0,其余运行在ring1态;
操作系统中需要获得物理内存大小从而实现内存分配等管理,而获取内存大小的兼容性最高的方法是利用bios中断,因为实模式下bios中断不可用,因而设定在跳转程序中跳转到保护模式前获取内存大小。
当然,跳转程序最重要的工作是从文件系统中查找到系统内核程序的实体文件,加载到内存中,然后按照elf结构把内核各程序段放置到准确位置上,最后跳转到内核程序入口处,涉及文件系统的操作需要依赖前面实模式操作系统的系统中断,因而读取操作在实模式下完成,而放置内核需要在开启内存分页后,因此在保护模式下完成。
综上,此跳转程序流程如下图:
4.3.2 保护模式系统初始化流程。
跳转到系统主程序之后,需要进行一系列的初始化操作,包括:
1、 设置全局描述符表(gdt)及tss;
2、 编程初始化intel 8259a
3、 设置irq映射图;
4、 设置中断描述符表(idt);
5、 初始化进程将要使用的局部描述符表(ldt)分配表及对栈;
6、 强制使用设置的gdt;
7、 初始化进程表;
8、 初始化文本消息队列;
9、 初始化用户表;
10、设置所需的全局变量;
11、插入预设进程;
12、开始进程调度;
4.3.3 进程管理器用户界面实现。
对于进程管理器的实现,有两种方案:
1、 把进程管理器本体作为一个进程实现显示;
2、 让进程管理器成为内核的一部分,实时显示当前调度情况;
《操作系统课程设计》内容要求
注意事项 要求每个同学独立完成以下三个项目中的任两个,编程语言不限。项目一 命令行解释程序。教学内容 利用c语言编写一个微型命令解释程序,体会操作系统作为用户与计算机接口的作用。巩固c语言编程能力。1 所设计的微型命令解释程序具有下列5条命令。cdir 列出当前文件和目录 ccopy 文件1 文件2...
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...