版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于c语言的小型PC操作系统的设计与实现摘要现代社会,计算机的重要性越发凸显出来,计算机操作系统作为不可缺少的一部分,也得到飞速发展。而市面上的操作系统基本都是国外开发,国内的操作系统还处于萌芽阶段,为了计算机和用户信息安全,国产操作系统的开发非常必要。主要是介绍了操作系统的基本特征以及主要功能,操作系统的硬件和软件相结合,着重研究在80386英特尔CPU上整个系统的工作情况,本次以同样的方式来设计与开发操作系统的各项功能和各个模块,通过Makefile工具来管理工程中的源文件,实现工程的编译、连接等规则。通过QEMU模拟器来进行系统的测试和运行。本次设计的的系统虽然简单但仍具备了内存管理、多任务管理、输入输出管理等基本功能。并在32位保护模式下运行,设计了API接口并在此基础上设计实现了多种应用程序。通过本次从零开发一个简易操作系统,作为一个大型系统的雏形,开发者可以更为透彻学习操作系统,积累代码开发经验,加深对C语言,计算机组成原理,数据结构等知识的理解,从长远看,为将来可能的国产操作系统的开发打下基础。关键词PC/操作系统/C语言
目录TOC\o"1-3"\h\u21989摘要 I1绪论1.1研究背景从1946年,世界上第一台现代电子数字计算机埃尼阿克(ENIAC)诞生以来,计算机科学领域就开始不断的进步与发展,呈现出快速不可逆的发展势头。尤其是步入21世纪的现代社会,计算机已经覆盖人类社会生活的方方面面,为整个人类发展史做出了不可替代的作用。在可预见的未来,计算机科学将持续的高速发展并做出巨大贡献。与此同时,时代和科技不断发展,硬件方面也如此,操作系统这一区别于硬件的软件也在一步步形成与完善,操作系统在计算机中有很高地位。操作系统的诞生大大降低了计算机的使用难度,简化了其繁琐的操作,其特有的图形化操作界面使得任何人都可以以极低的时间成本学会计算机的使用方法,可谓是计算机的传播与发展过程中不可忽视的力量。操作系统作为管理计算机软件和硬件的计算机程序,自然拥有强大功能的同时伴随着较大的复杂性,往往包含大量有关CPU和内存的指令。这些代码之间往往相互联系,想要理解颇有难度,需要开发者动手去实际开发一个小型的操作系统,一步一步从最简单的基本功能开始构筑,直到积累成一个具备多种功能的操作系统。本文通过对一个“简而精”的操作系统的开发,加深对操作系统的理解以及提升自身的C语言编程技能,复习并总结了如操作系统、计算机组成原理、微机技术等许多科目,在毕设与论文撰写的过程中,对这些内容有了更高的理解,使得之前所学的知识可以集合起来,通过设计和实现一个简单的操作系统来使其得到实际的应用和落实,同时培训了自己对系统操作系统的代码分析和编写能力。1.2国内外研究现状操作系统的出现远远晚于计算机硬件的的诞生,人们为了提高计算机性能,获得更高的利用率,从而诞生了操作系统,并跟随计算机硬件技术的发展的脚步,逐渐成型并完善。操作系统的发展历经手工操作、批处理操作、多道程序操作、分时系统操作、实时系统、通用操作系统几个阶段,现在,操作系统的概念已经变成了把各式功能,各种类的包以及多种不同应用程序的合集,集合与一个操作系统之中。而在计算机不断发展和完善的过程中,计算机逐步实现了小型化,便捷化。人们在使用计算机的过程中越来越追求高效和直观体验使得人们开始开发具备图形交互界面的操作系统。现如今的各式各样的操作系统已经具备了图形界面,在便捷、直观和美观度上不断提高。另一方面,操作系统的发展与计算机硬件技术的发展相互影响,从计算机的发展视角来看,计算机已经从大型机逐渐小型化、便捷化,从军用转变为民用,小型机已经逐步取代大型机。PARC影响了小型机时代下的新兴操作系统如UNIX的XWindow系统,微软Windows系统,苹果MacOS系统。至此,计算机操作系统走上了图形化,便捷化,多功能的发展之路。1.2.1国外操作系统Windows操作系统是微软公司研发的一套操作系统,通过最初的MS-DOS环境模拟,不断进行迭代和升级[7]。Windows从16位架构到32位,再到64位,Windows操作系统通过自身优异的人机操作性,大量的应用软件支持,良好的硬件支持性,已经成为了应用最广泛的操作系统,并拥有了庞大的用户群。毫无疑问Windows在操作系统领域取得了技术和商业上的巨大成功。MacOS是苹果公司开发的第一个在商用领域取得成功的图形用户界面操作系统,突出表现人与机器的交互性。MacOS是基于XNU混合内核的图形化操作系统,与Windows的架构截然不同,很少受到电脑病毒的攻击,具有极高的安全性,但同时也使得系统的封闭性大大提升,在这种情况下,苹果公司建立了一套完整的生态环境,培养了一批忠诚用户,从而使其在市场上达到了9.68%的占有率。Liunx是一个完全开源的操作系统,有着没有版权,技术社区用户数量庞大的特点。其系统继承Unix以网络为核心的设计思想,成功打造出了一个性能优异稳定的的多用户网络操作系统。对开发者而言,Liunx功能强大,具有高度灵活性,成本低,高安全性,同时拥有用户社区供开发者进行技术交流,使Liunx成为技术开发的理想平台,同时保证了用户间的交流和活跃度。1.2.2国内操作系统国产操作系统主要是以Linux内核进行二次开发,以Linux为内核的国产操作系统的研发和应用呈现出快速发展的态势,国产Liunx操作系统和windowsXP系统的操作与布局上相似,对用户而言实用性相差不大,且大多都为不用单独为其付费,在价格上更占优势。从安全方面考虑,国产系统能最大程度上保证用户的个人信息和重要数据不会流向国外。现如今市面上也涌现出诸多不同方向的操作系统如中标麒麟Liunx,一铭操作系统,红旗Liunx,起点操作系统等。其中不乏优秀的设计和理念,有支持同时适用于桌面电脑和移动终端的操作系统,也有基于服务器开发的专有操作系统[6]。1.2.3国内外操作系统差异Liunx,微软等操作系统具有起步早,发展时间长的特点,已经具备了非常完整的用户生态,具有十分先进的技术,并且处于不断的迭代之中,处于该领域的顶端位置。而国产操作系统多为以Liunx为内核进行二次开发。国内没有自主内核不是因为技术问题,而是环境生态问题,想要有先进的自主的内核,就需要有一套完整的行业硬件产业链的支持,没有生态自然也就没有用户,形成了一个恶性循环。国产操作系统要想突破重围,需要从开源来,回开源中去,大力投入建设生态,培养上下游各厂商,积极提升技术,摆脱技术受制于人的局面。同时遵守开源协议,加速自身发展,才能实现突破,使中国拥有自主内核的操作系统,在该领域取得一席之地。1.3研究内容(1)实现能在裸机上运行的简易操作系统。该系统是在32位保护模式下运作,具备多任务调度和通信功能。(2)系统能够对内存进行管理操作,查看和修改内存的使用情况。(3)系统自身具有硬盘功能,并能实现系统调度文件的基本读写操作。(4)实现系统的图形化界面,通过输入输出功能,将键盘、鼠标和显示器作为系统的交互设备。(5)以命令行作为用户界面,实现系统的操作行为。(6)进行系统测试,在运行环境中对系统各项功能和程序进行测试,确保其能达实际效果。1.4章节结构本人在实现了基于c语言的小型PC操作系统后,论文根据系统从研究内容,计算机原理,硬件组成和系统实现与设计等四个方面,总体上分为七章,论文的具体章节结构如下:第一章:绪论。绪论部分主要是对论文的研究背景、国内外现状和国内外在该领域存在的差异进行论述。第二章:操作系统硬件组成及功能。主要对系统的硬件组成部分进行介绍,分析操作系统应该具备的基础功能。第三章:32位模式分析。对两种不同的32位模式的优点和缺点进行分析,选择其中合适的进行使用,同时介绍模式中的多种机制的作用。第四章:系统设计。主要是系统的整体设计,对涉及运行原理的内容和内核设计的详细部分进行介绍。第五章:系统实现。对操作系统的详细程序功能进行展示,通过图片和解释的方法进行系统功能展示。第六章:系统测试。对系统所具备的功能进行测试,测试其是否能达到预想中的功能。第七章:总结与展望。对系统和全文进行总结,分析系统开发过程中出现的不足和缺点,提出改进方法,在此基础上展望发展。1.5本章小结此部分对该领域在国内外的相关发展和研究进行探讨,分析国内外操作系统的差距,提出本文的主要研究内容和文章的结构。
2操作系统硬件组成及功能2.1计算机硬件组成部分计算机系统硬件是一个复杂结构,要想理解不同设备之间的关系我们需要一个简单的模型。计算机系统硬件组成如图2-1所示。图2-1计算机系统硬件组成2.1.1总线计算机各部件之间的连接靠的是一条公共通信干线,被称作“总线”。总线按照固定路线,来回传输不停运作的比特(bit)。总线可以传送定长字节块,总线宽度越大,传输性能就越强,外部设备通过对应的接口接入电路中,然后再与总线进行连接,共同形成了计算机硬件系统。在各个系统中,机器字长并不一定相同。2.1.2主存主存是暂时存放cpu运算数据的设备,与硬盘等外部存储器进行数据的交换,为外部存储器交换信息提供缓冲作用。从物理角度来看,主存是由动态随机存取存储器芯片所构成的,在逻辑方面,主存是线性数组,其中的每个字节都有其相对于且唯一的地址。组成程序的机器指令的字节数往往数量不一样,C语言编写的程序变量其中的数据项跟随其类型而呈现出不同的大小。2.1.3I/O设备I/O设备主要功能是管理操作系统的所有输入和输出设备,是计算机系统与外部沟通的桥梁[1]。如图2-1,键盘和鼠标对系统进行输入,显示器把系统信息输出传达给用户,而磁盘同时进行两个功能,提供信息的传递交换。如图2-1所示,所有I/O设备都需要一个“控制器”或“适配器”,通过这两个设备来连接I/O总线。根据其封装方式的不同,区分为“控制器”以及“适配器”。前者主要是集成与计算机硬件系统的主板的芯片组里,后者属于一个独立设备,通过插槽连接到硬件主板上,这两者共同构成了I/O设备系统中重要的一环,共同负责对I/O设备进行信息传递和翻译。2.1.4处理器处理器(CPU)是计算机的核心组成部分,由多种寄存器共同组成,为计算机操作系统提供信息处理、程序运行的功能。从系统启动,处理器就不断的执行和解释主存中的指令,处理器是按照指令来执行模型对系统进行操作,指令集的结构共同构成了模型的类型状态。CPU具备解释与转换功能,主要针对机器语言,内存中保存的数据通过CPU就可以得到运算。几乎所有冯诺依曼结构的计算机的CPU,其指令的执行过程都大致可以分为五个步骤:(1)取指令:处理器从内存中取出需要使用的对应指令,放入CPU的寄存器中。(2)指令译码:对从内存中得到数据然后对其区分,确定指令的用途。(3)执行指令:执行寄存器中指令的相应功能。(4)访问取数:内存中不仅存放着指令也存放着数据,在上几步取出算术符之后,还需要在内存中取出算术数据,如a+b取出相加指令之后,还要从内存中取出a和b放入寄存器中。(5)结果写回:经过取指令和数据进行算术运算之后,将结果保存到CPU内部中。2.2操作系统的基本功能2.2.1存储器管理存储器管理为操作系统的多道程序的运行提供环境,存储器管理的主要目的是方便用户,为用户提供安全、高效和大容量的存储器。存储器管理的功能主要有:存储器空间的分配和回收;地址变换:又称为地址映射或者重定位(relocation)。有两种形态,分为静态和动态。前者无需硬件的支持,运作执行过程中地址是不能发生变化的,运行中需要不间断的存储空间,共享难度大;后者需要来自硬件方面的支持,但空间是可以有间断的,能够实现虚拟存储。存储保护:防止程序意外出现损坏导致系统受到破坏,影响用户,同时防止各个程序间相互干扰的情况。通过对各个进程设置一个上界寄存器和一个下界寄存器。在程序运行过程中,每个地址在访问内存时,都需要与上下界寄存器中内容比较,若是超出了两者的范围,则产生越界中断。存储扩充:在逻辑上分配空间,可以获得一个比实际内存更大的存储空间,方便用户使用。在单一连续分配中分为系统区和用户区,分别提供给操作系统和用户来使用。单一连续分配运行方式如图2-2所示。
图2-2单一连续分配运行方式图分区存储管理:对内存进行划分操作,像一个个房间一样相互隔开,操作系统会独自占用一个房间,其他房间可以互联起来来实现共享。固定分区任务完成后,固定内存释放,分区中的数据会清除出去以便后来的数据使用。但这种方法降低了内存效率,使用过后内存产生影响系统工作的碎片。分区说明表如表2-1所示。表2-1固定分区分区说明表分区号大小起始地址状态1234510KB32KB32KB120KB300KB20KB30KB62KB94KB214KB已分配已分配未分配未分配已分配使用固定分区会将内存划分并指定不同区域承担不同职责,被用于操作系统使用或者用户使用,固定分区内存布局如如图2-3所示。图2-3固定分区内存布局图动态分区又称为可变分区存储管理系统,可以根据程序的需要动态的为其分配分区,使其分区大小刚好能适应作业需要,在此系统中分区中的大小和数目都是可以有动态变化的。动态分区布局如图2-4所示。
图2-4动态分区分区布局2.2.2文件管理在系统运行状态下,进程是计算机的基本单位,将资源进行统筹管理,用户的输入、输出行为则以文件为基本单位[2]。大多数应用程序的输入和输出都是通过文件来实现的,以文件为基本单位可以使信息长期保存以便于以后用户的访问。文件是文件管理系统的直接管理对象,同时还有目录,是为了方便用户对文件进行存取和检索。高组织度的目录往往有着强大的管理能力。这样的组织结构能发挥出高效的处理数据能力。文件管理的基本操作有:(1)创建文件,当创建新文件时,系统会给新文件分配所需的外存空间,在目录中创建一个目录项,新文件的文件名和文件在外存中的地址等信息会记录在目录项中。(2)删除文件,某文件需要被删除时,系统从目录之中寻找到被删除文件的目录项,先把目录项变为空项,然后把文件之前所使用的空间部分收回。(3)读文件,给出文件的文件名和读写的内存目标地址。系统首先查找目录,找到外存中存在该文件相对应的位置。用指针来完成对文件的读写操作。(4)写文件,须在系统中找到文件的文件名和内存源地址,与读文件过程相似,通过利用目录中的写指针对文件进行写入操作。(5)截断文件,当一个文件的内容需要大量更新时,一般采用将该文件删除,再创建一个新文件来写入内容。若文件名和属性没有改变,可以使用截断文件,将源文件的长度设为零,同时放弃原本文件的内容。(6)设置文件读写,通过对文件指针位置的控制,在文件进行读写操作的时候,无需从起始位置开始操作,可以从设置的位置用指针进行读写操作,存取方式为随机存取。2.2.3处理机管理进程与处理机后者对其进行操作,处理机的运行过程都是以进程为单位。进程由程序、数据和进程控制块(PCB)组成。PCB是进程最重要的数据结构,是进程的唯一标识。处理机对进程的管理主要有进程控制、进程同步、进程通信、进程调度。进程同步机制是处理机管理的主要任务,其用途是对多个相关进程在执行过程中进行协调。使不同的并发执行程序能按规则(也即时序)来共同使用系统的资源,并形成良好的相互合作。进程同步中包括进程之间的制约,分为两种,直接制约也即进程同步,是指程序间通力协作互相支援,按之前所制定的某一个规则,在操作系统中存在机制对其执行调试。除此之外还分为间接制约,即进程互斥,当临界资源被进程访问时,会采用互斥方式。2.2.4用户接口用户接口(UserInterface)是操作系统和用户之间交互和交流的桥梁,是计算机操作系统为用户提供的接口之一,提供给用户的接口。其实现信息的内部形式与人类可以理解形式的转换。用户接口通常分为三种,即程序接口、命令接口和图形接口。程序接口:程序接口是操作系统给开发者预留的接口,由一组系统的调用命令组成。用户在程序中使用系统调用命令向系统发出指令,请求系统提供相应的服务。命令接口:操作系统为用户提供命令接口,便于用户控制自己的计算机进行作业。命令是在命令提示符界面上进行输入,系统会在后台执行指令,之后会将结果反映到前台界面或者文件内。图形接口:图形化的操作界面包括窗口、图标和对话框等元素,使用高识别度的图标来指明操作系统的各项应用的功能,各种应用程序和文件都能直观,清晰的表达出来。图形接口的操作主要为菜单操作、对话框操作等。2.2.5程序接口程序接口是计算机操作系统为用户提供的另一接口,为用户在使用过程中程序执行访问系统资源的操作而创建的。采用面向过程语言,基本单元是过程和函数。程序接口就是系统指令调用,调度用来完成特定功能的子程序来完成操作系统需要完成的作业,接口的存在使得用户可以与外部沟通,同样的也决定了外部可以提供什么服务给用户。早期的系统调用大多使用汇编语言,但在高级语言的出现为系统调用提供了一个库函数,应用程序调用库函数来实现系统调用。随着计算机操作系统的发展,如今的系统调用采用c语言编写,通过函数提供给系统,所以使用c语言所编写的应用程序可以被系统直接调用,省去了汇编语言所带来的麻烦。2.3本章小结本章对计算机系统的硬件部分及其基本功能进行了详细介绍,通过对系统工作进行分析,掌握了计算机系统的运行原理和功能,为接下来的开发打下了理论基础。
3系统模式分析自从80386处理器出现,PC机的系统从16位进入到了32位,32位系统具备更强大的运算能力,逐步替代了16位操作系统,本系统就基于80386处理器,使用32位模式来作为操作系统。3.132位模式特点3.1.132位实模式实模式,又称为实地址模式,CPU是完全按照80386的实际寻址方法来进行地址访问。从00000h-FFFFFh(即1MB大小)的地址范围进行访问。寻址公式为:物理地址=左移4位的段地址+偏移地址。物理地址是由16位的段地址和16位的段内偏移地址组成的。但是在这种模式下,CPU只能进行单任务运行。3.1.232位保护模式保护模式,也即内存保护模式,在此模式下80386处理器的32个地址线都会运行工作。即寻址采用32位段和偏移量,最大寻址4GB的空间。在32位保护模式下,系统运行支持多任务模式,增加段页式寻址机制的内存管理。在该机制的作用下,应用程序和操作系统的核心部分和代码部分得到保护,提高了系统的整体安全性。保护模式支持80386存储器,具备虚拟执行80386程序的方式。同时具备快速的资源共享功能,使得32位保护模式的高效性得到极大提升。综上32位保护模式的实用性、安全性和高效性上要优于32位实模式,本文将在32位保护模式的基础上进行研究。3.2分段机制3.2.1段定义及虚拟地址到线性地址的映射在32位保护模式下,需要实现虚拟地址的转换,段就是前者转换到线性地址这一机制的基础[10]。段是由三个基本参数定义的:段基地址(BaseAddress),它相当于一个起点位置,处于80386保护模式下,段基地址32位长。基址长度等同于寻址长度,段基地址中任意段都可以从32位线性地址空间中任意地址位置开始。段界限(Limit),规定了一个段的上下界大小,保护模式下,段界限为20位。段界限以字节为单位,在其属性中定义该位的被称为粒度位,记为G。同时存在公式:LIMIT=limit*4K+0FFFH=(LimitSHL12)+0FFFH。已知段界限为20位,其范围为4K字节至4G字节,增量为4K,可以通过公式将Limit计算出来。段属性(Attributes),规定一个段的主要特征,上文段界限中提到的段粒度G就是也属于段属性中。当需要对一个段进行访问操作时,操作系统将会依据段属性来判断此次的访问操作是否合法。地址映射如图3-1所示。图3-1虚拟地址到线性地址的映射3.2.2分段的作用分页是一个逻辑上的概念,因为在实际上程序和内存在物理上没有存在于不同的位置。而分段是一个逻辑实体,它可以是一个变量、源代码或者堆栈。正常情况下,每个段中只会包含同一个类型的内容。分段主要有以下作用:编译问题:分段管理机制可以解决编译时的地址覆盖问题,达到简化程序复杂性和编译难度的问题。内存共享:分页机制会将数据代码集合在一起,难以共享,而分段管理机制会便于将其中代码和数据分享给其他程序使用。安全性:分段机制将内存分段后,其中每一段的内容和类型不相同,它们能进行的操作也不一样。某些代码的内容一旦经过加载就无法再进行写入操作。分页系统中因为代码以及数据被整合在一起,难以进行安全上的操作和控制。动态链接:当作业在运行前,各个目标程序处于分散状态。作业得到操作指令需要进行运行时,会将过程中需要的目标子程序放入内存中,在运行过程中需要其他分散的数据段或代码段时,会将目标程序的段加入内存再链接起来。3.3分段管理机制寄存器3.3.1控制寄存器分段管理机制主要是由80386控制寄存器和系统地址寄存器来进行控制的。控制寄存器中存在四个不同控制器,控制寄存器结构如图3-2所示。图3-2控制寄存器结构图在80386中存在四个控制寄存器,即CR0、CR1、CR2以及CR3。通常情况下工作的系统中,CR1一般是不发挥作用的,在80386中,如果使用CR1会导致指令输入无效,使系统操作异常。但CR1在后来开发出来的处理器中仍有着重要作用。CR0:在控制寄存器中的CR0中的位0使用PE标记,位31用PG标记,前者用来控制分段管理机制,后者用来控制分页管理机制。我们把它称为保护控制位。PG与PE处理器工作模式如表3-1所示。表3-1PG与PE处理器工作模式PGPE处理器工作方式00110100实模式保护模式,禁用分页机制非法保护模式,启用分页机制CR2和CR3被分配给分页管理机制,CR2用于页产生异常时进行工作,产生异常时,并生成错误报告。CPU把生成的错误信息的线性地址保存在CR2中。CR3的功能是保存页目录表的初始物理地址,当任务进行切换的时候,CR3也会相应的改变。如果新任务的CR3的值与之前任务的相同,那么CPU将不会刷新分页系统的高速缓存,这样会使任务执行速度加快。3.3.2系统地址寄存器系统地址寄存器是一类特殊寄存器,用于快速定位一些特殊数据段。其中有全局描述符表GDT、局部描述符表LDT、中断描述符表IDT。(1)全局描述符表寄存器(GDTR)GDT在整个系统中只有一个,可以存放在内存的任何位置,CPU需要知道GDT的入口,即GDT所在位置的基地址,而GDTR就存放着GDT入口地址的信息,CPU就根据其中的内容来寻找GDT的入口。GDTR中32位为基地址,16位为界限。在段选择子中只有13位使描述符索引,每个描述符长度为8个,所以GDTR中界限的16位使足够的。一般情况下,对含N个描述符的的段界限设为8*N-1。基地址和界限如图3-3所示。32位基地址16位界限GDTRGDT低地址高地址图3-3GDTR中的基地址和界限(2)局部描述符表寄存器(LDTR)局部描述符寄存器规定了当前任务的局部所使用的LDT。寄存器中包含LDT选择子,同时LDTR选择子会选定GDT中的类型为LDT的系统,同时处理器装入部分可见选择子,从GDT中得到描述符,把基地址、界限和属性存入到LDTR的高速缓冲寄存器中。(3)中断描述符表寄存器(IDTR)中断描述符寄存器与IDT相链接,IDTR的数据段为48位,基地址即为IDT的基地址,长度为32位。IDT规定的段界限为16位。在80386处理器中,IDT表的最大长度为2k,原因为其最多支持256个中断/异常。3.4控制转移控制转移对于同一任务来说,他们的特权级有两种,分为任务内和任务间的。同任务的转移进一步划分:段间转移、特权级不变的段间转移、特权级变换的段间转移。实模式与上述相似,上文中提到的16位实模式不会有特权级和任务的转换。3.4.1向目标代码段间转移的步骤(1)判别目标地址的指针中显示的描述符为空与否。空描述符不同于其他,代码段的描述符是绝不为空的。(2)全局或者局部描述表读取代码和数据段,其中选择子的TI位,将决定使用局部或者全局描述表。(3)根据作业运作中的实际情况,检测描述符类型正确与否,是否合乎规则,同时调整TPL。(4)CS寄存器在控制转移中十分重要,特点是高速缓冲,相关程序数据会存到其中。(5)对指针正确性进行判断,确保在正确的范围之中。3.4.2任务内无特权级转移的转换任务内无特权级转移的转换:转移到新代码段,CPL保持不变,通过JMP来执行段间转移指令、段间调用指令CALL、段间返回指令RET来实现任务内无特权转移的转换。同样的,使用INT和IRET也可以实现,无特权级转移的转换可以不更改CPL,部分时候RPL=CPL[3]。3.4.3任务内不同特权级的转换任务内往往会出现不同程序的不同特权级的转换情况。当一个外层应用需要读写内部操作系统时,就需要获得如内存分配、修改管理等操作系统的指令,这种情况出现时就需要进行不同特权级的转换,当这一过程完成后,会从内部返回到外层应用程序。特权级在同一任务下,内层需要到外层时,段间调用指令会通过调用门进行特权级的转移。外层需要到内层时,段间返回指令就会发挥作用。在实现不同特权级转移时往往使用的是段间调用指令CALL和段间返回指令RET,不能够使用JMP指令来进行转移。3.5本章小结本章介绍了32位系统的实模式和保护模式的优缺点,对其中的分段机制进行了介绍。同时,控制转移机制也能为系统运行的优先级进行划分,负责系统中不同任务之间执行顺序的切换。
4系统设计4.1系统开发流程环境本文将对作者自行开发的简易PC操作系统进行简述,方便期间下文中将对SimpleOS简称为OS。在OS的整个开发研究过程中主要使用两种语言,一个为汇编语言,一个是C语言。考虑到C语言更简洁,具有更高的普及度,所以在OS的整个编写过程减少对汇编语言的使用,主要使用C语言编写,保证了系统的简洁性和稳定性,减少了维护和调试过程中的难度。由于在32位保护模式下是不能使用BIOS的,BIOS中所有代码段都是16位,无法使用,在这个情况下,汇编语言主要负责前期整个系统从16位实模式到32位保护模式跳转的过程。在跳转之前,通过汇编语言可以从16位实模式中得到BIOS中的有关于计算机硬件的信息,并将其进行保存在内存的某个地址中。当系统变为32位保护模式时,仍然可以调用到这些信息。整个OS的开发流程主要有这几个流程组成。(1)整个OS的程序源代码是在Windows平台上进行编写的,使用c语言和汇编语言。(2)使用二进制编辑器进行编程,生成需要的机器语言文件。(3)需要将映像文件写入磁盘中,通过对机器语言进行链接,然后制作成系统的启动区。(4)虚拟映像文件。映像文件是把原本的光盘、硬盘或者磁盘上的数据和程序一一对应的一种文件,它的存储内容和格式与原本的实体文件完全一致,即虚拟映像文件可以反映出存储介质保存的的实际内容。虚拟映像文件可以通过系统程序的虚拟机QEMU进行加载,以启动盘分区的方法读取其中内容,可以得到与读取实体存储介质完全一样的结果。以这种方式来进行开发,降低开发难度,提高了开发的效率。(5)Makefile工具,Windows系统的IDE往往代替了Makefile的功能,导致很多使用Windows的程序员对其不了解。在OS的开发过程中用到了必须大量软件,如c语言和汇编语言编译器、虚拟映像写入读取文件以及链接器等。这些软件都是通过代码来使用的,每次使用一个软件的功能都需要输入一次指令,效率低下。而如果使用批处理文件,会导致在OS开发后期存在大量文件之间的依赖,进行改动时批处理文件需要运行多次才能完成。而Makefile文件可以管理整个工程的的编译规则,定义那些文件需要先编译,哪些后编译或者重新编译。Makefile最大的好处就是“自动化编译”,完成后,只要一个指令就可以让工程自动编译,加快了整个工程的开发效率。(6)在OS开发过程中,汇编语言的编写使用的是Notepad++,c语言的编译使用的是vscode。4.2运行原理4.2.1引导扇区计算机启动时,操作系统会对计算机各个重要参数进行自检,硬盘的主引导扇区,分区引导扇区和分区表。如果启动时任何参数出现错误,都会使系统无法启动或者数据的丢失。系统启动时会将系统权利移交给启动扇区,启动扇区会引导OS的内核,也即是说引导扇区之后操作系统才能正常工作起来。从上文中可以知道由于16位实模式的的弊端,但在BIOS之中都为16位数据段,32位保护模式无法运行。这时候引导扇区就可以在BIOS中读出计算机的信息。确保了OS在32位保护模式的情况下仍然能通过BIOS得到机器信息。4.2.2内核的加载和执行当操作系统在引导扇区后,存在一个Loader,这个模块用来加载内核,同时管理模式之间的转换[14]。在加载内核时,BIOS中的读取磁盘中断程序,将磁盘内容复制到内存中,同时把定位到处理器的EIP寄存器的当前位置,系统才能够运行。地址空间是一个固定结构,对于每个应用程序来说,也同样有着相同的虚拟地址空间,可以保证各个应用进程都能够调用操作系统内核来执行和完成自己的工作。在保护模式下,依然可以从内存中得到引导扇区过程中保存的计算机信息,可以在32位保护模式下使用。系统内存分布如图4-1所示。图4-1系统内存分布情况图4.3内核设计4.3.1内存管理机制总的来说,操作系统内存管理分为两个,物理和虚拟内存。物理内存管理有程序装入、交换技术、连续分配管理方式和非连续分配管理方式[13]。虚拟内存管理中又有分页管理方式,工作集和抖动灯功能。OS内存管理主要为系统提供内存的检查、分配和释放,也管理容量,减少磁盘运作过程中产生的碎片。4.3.2定时器定时器(Timer)在整个操作系统中占有重要地位,它的作用是每经过一段时间向处理器发送一个中断信号,有了定时器,处理器就可以提升效率,不用承担计时功能。定时器的存在可以让系统使用HLT指令,让一个指令的时钟周期定位一个固定值,HLT指令执行时,程序可以准确知道时间。同时避免了时间的浪费,也避免了电能浪费。想要使用定时器,就需要用8254芯片,也称为PIT,即可编程的间隔型定时器。PIT是独立芯片,安装在硬件主板上。现在已经与PIC一同集成在同一芯片上了。PIT连接着IRQ0,PIT通过对IRQ设定中断时间就可以进行整体控制。IRQO的中断周期变更:AL=0x34:OUT(0x43,AL);AL=中断周期的低八位;OUT(0x40,AL);AL=中断周期的低八位;OUT(0x40,AL);在上文中的32位保护模式中,我们详细提到过IDT。在使用定时器时我们需要设置中断频率,并将这个中断频率注册到处理器的中断控制器IRQ中,其中IRQ的0号引脚用来控制中断频率。4.3.3FIFO缓冲区FIFO缓冲区是一个用于数据缓冲的地址区域,通常情况下在读取大数据的时候,主控没办法及时进行处理,就会先把这个大数据存入到FIFO缓冲区中储存起来。FIFO缓冲区是一个先进先出的队列容器,在数据告诉传输过程中用于输出和输入难以同步的场合。缓冲区运行方式如图4-2所示。图4-2FIFO缓冲区的运行方式如果next不是0,说明至少存在一个数据,将初始数据放在data[0]中,将数据放入i中,这样数就减少了,相应的next-1。如图4-3所示,将内部存放的数据全都向前移动一位,如果数据不前移的话,data[0]的空间就会被占用,无法读入数据。4.3.4输入控制鼠标作为计算机操作的关键设备,早期是不会产生中断信号的,即数据从鼠标发出,向处理器传达的过程中,CPU对此次数据传输不进行接收。所以鼠标控制系统需要用到上文中的FIFO缓冲区来接收中断信号。不同之处是只有PIC能收到通知。首先会通知IRQ中的IRQ-12,接下来才会通知主PIC。PIC无法靠自身来完成数据上的协调,程序需要告知PIC如何执行,否则PIC就会忽略掉接下来的中断请求。而键盘的处理运作方式和鼠标基本相同,甚至代码部分也可以共用,也即鼠标控制的过程与键盘一致。鼠标相较于键盘,会更快更密集的输出巨量的信息,所以FIFO缓冲区的大小必须足够,否则就会发生溢出的情况,于是将FIFO缓冲区的大小设置为128字节。为了确保利用率,FIFO缓冲区一般情况下都是满的,如果出现了FIFO缓冲区变空的情况,系统将执行HLT,因为鼠标和键盘都会使用这个缓冲区,在执行时,会先检测keyinfo,有数据就会将其显示,反之就会去检测mouseinfo,同样也会显示出来。这样就能使数据显示出来。鼠标键盘控制运行如图4-3所示。图4-3鼠标键盘控制运行情况4.3.5多任务管理多任务就是能让计算机系统操作系统同时执行多个任务的机制,一个计算机硬件系统中只有一个CPU,通过对CPU进行设置让其每间隔一段极短的时间就切换到不同程序运行,使其看上去是在同时执行多个任务。当CPU执行任务切换的指令,CPU会将寄存器中的值加载到内存中,这样一来,下次切换回到该程序的时候就能从中断处准确恢复运行。下一个程序运行前,CPU会把寄存器中的数据从内存中取出。这一个对内存进行读写的操作过程就是任务切换所需要花费的时间[8]。(1)多任务自动化任务管理自动化能提高OS的运行效率,它是通过一个计时器来完成这个操作的。计时器是全局变量,将其定义成externstructTIMER*task_timer。计时器每经0.01s就会切换任务,每个任务占用处理器时,会把自身的优先级priority赋给task_timer用来计时。这样一来,通过该计时器,就能实现多任务自动化。(2)任务休眠当经过一段时间队列中没有需要执行的程序,比如键盘或者鼠标没有进行输入操作,那么接收程序就不需要运行,否则会浪费CPU性能,此时就需要任务进入休眠状态。任务休眠不是将任务删掉,是将TASK移除队列,是将指针移除,并非移出实体。(3)任务优先级OS中所设置的的优先级,参考了其他系统的方式,整个系统按照1000个任务到100个等级再到10个任务。在数据结构上由level属性控制。优先级priority是控制一次任务运行时间的属性。(4)闲置任务上文中提到,当队列中没有任务时,CPU会进行休眠,实际上在休眠之前我们需要一个指令来管理这个机制,通过使用汇编语言中的HIL指令来让CPU完成休眠操作。函数io_hit()中就存在着HIL指令。我们设计了特殊任务,任务的优先级排为最低,这样就可以系统没有运行其他任务时,就会运行这个特殊任务,它负责让CPU进入休眠状态。当有其他任务输入,如鼠标或键盘数据输入,就会重新唤醒CPU。这一机制十分有利于整个系统的高效性和稳定性,从长远看降低了CPU的损耗,延长了计算机硬件的寿命。4.3.6API在C语言中,文件的运行过程对与用户来说其实是一种黑箱状态,我们看不到其中的运作模式,大致流程是对硬盘数据进行读取最后呈现给用户。对于整个过程,OS把所有复杂过程和操作数据装进一个盒子里,可以把盒子称为组成动态链接库组件。当需要使用时直接把盒子拿出即可使用。盒子的本质就是API。API具有三个特点:(1)API接口具有定义明确的特点,能够为其他软件提供指定类型服务。(2)API的容量可大可小,可以只有一个单独函数,也可以包含大量的类、方法、常量和数据类型等。(3)API可以私有也可以开源。在OS系统中,编程接口API通过模拟windows的DOS中的中断指令来实现系统代码的调用,使OS可以使用API,过程在IDT中进行函数的注册和执行,同时设置对应中断信号,用户能通过中断指令INT调用系统,且它的参数分散在不同寄存器里。中断描述符表IDT最多有256个函数,在0x30—0xFF这个范围都是空的,中断信号作用于这个范围内。编程接口在OS中占有很高地位,设计整个系统,数量十分庞大,如果一个中断信号只对应一个调用指令,显然不够。我们可以通过上文中提到的DOS,在其中放入功能号,使单个INT中断信号就能调用大量API函数。在实际代码编写中,我们用调用函数asm_hrb_api,CPU会跳转到该函数,它的主要功能是存入寄存器,其中有寄存器原本的值,通过堆栈为hrb_api传递参数。hrb_api主要对EDX进行判别,在不同的分支中使用不同参数做处理。API的调用过程如图4-4所示图4-4系统API调用过程
4.4本章小结本章对系统的底层功能进行了原理上的分析和实际操作,保证了最基本的系统能成功稳定的启动。通过对操作系统的底层构建,才能在这之上为系统添加各式功能,尤其是加入了API接口功能,丰富了系统的内容,提高实用性,使得在操作系统上添加各种小程序成为了可能。
5系统实现5.1键鼠控制键盘和鼠标的功能对于图形化操作系统必不可少,操作系统主要是以命令行窗口来使用各种功能,虽然由于QEMU模拟器的限制,小部分字符存在错位的现象,但对于正常使用并不影响,主要使用场景为键盘的输入功能以及鼠标的光标功能来拖动窗口。键鼠操作效果如图5-1所示。图5-1键鼠操作图效果图5.2多命令行窗口但命令行窗口会限制用户在实际使用过程中的效率,通过对sht_cons[]函数进行赋值,由该函数将值传递给key_win函数,通过使用start命令开启新的窗口[4]。这样在足够的内存空间内,可以无限量打开窗口。当执行完后窗口需要关闭,可以在命令行内输入exit命令来关闭对应的窗口。当界面上没有窗口时,使用shift+F2唤起一个新窗口。(1)通过start命令来打开多个窗口,如图5-2所示。图5-2多窗口运行图(2)通过exit命令关闭不需要的窗口,如图5-3所示。图5-3关闭窗口5.3命令行内容管理本系统的各种功能主要是通过在命令行窗口输入指令来调用不同的功能,正确的指令会被系统执行对应程序,当用户输入错误的指令,命令行窗口会给用户相应的反馈提示用户输入的指令出现了错误。当窗口中的内容过多时,在不开启新的窗口的情况下,用户仍然可以通过指令来完成清屏操作。(1)当用户输入了错误的指令,窗口会反馈“Badcommand”错误提示信息告知用户。命令行窗口错误信息如图5-4所示。图5-4命令行错误信息(2)长时间使用同一窗口导致信息过多时,用户可以输入cls指令来完成清屏操作。命令行窗口清屏如图5-5所示。图5-5命令行窗口清屏
5.4磁盘文件读取管理操作系统的磁盘上所保存的内容,我们需要查看文件的文件名、扩展名和文件大小,通过在命令行中输入dir命令来调用这一功能,读取出来的信息会暂时保存在内存中。磁盘文件读取结果如图5-6所示。图5-6磁盘文件内容图5.5内存容量检查在操作系统实际运行过程中,内存用量关系到系统运行速度,本操作系统是在QEMU模拟器上运行的,模拟器的运行设定内存为32MB,我们可以通过mem指令来查看剩余内存用量。内存容量检查如图5-7所示。图5-7内存容量检查5.6文字支持对于一个操作系统,我们所使用的命令都是以英文形式呈现,为了系统更方便使用,加入了系统对中文字符的支持,同时为系统加入了文本阅览器功能,因为机能限制主要查看以nas格式的系统文本文件,用来查询系统的磁盘用量,分区,扇面和内存等基本信息,通过tview指令打开nas文件。文字显示效果如图5-8所示。图5-8文字支持效果图5.7命令行计算器我们计算器在代码中使用了strtol函数,可以将字符串形式的数值转换为整数,字符串地址用s,base为进制,10就是十进制,而16代表十六进制[5]。在计算器中最重要的函数就是getnum,它将以字符串为形式的算式加以解释,最终获得一个数值,除此外还负责管理不同运算符之间的优先级顺应(比如乘除法的优先级要高于加减法)。用于运算的算术符有+-*/%()^|,结果为十进制和十六进制,计算都是按整数计算。并且计算中可以出现负数。实际计算器运行状态如图5-9所示。图5-9命令行计算器运行图由于OS的命令行计算器使用了C语言的语法规则,在运算时^代表XOR异或运算,比如2^3即为2XOR3,2的二进制为10,3的二进制为11,异或运算后会得到1。和C语言一样,我们也可以输入十六进制运算,在数字前加上0X即可。5.8计时器本节中将制作一个定时器的API用作计时器作用,让程序具备计时功能。我们的API主要分为四个方面:获取计时器(alloc)EDX=16EAX=计时器句柄设置计时器的数据发送(init)EDX=17EBX=计时器句柄EAX=数据计时器时间设定(set)EDX=18EBX=计时器句柄EAX=时间释放计时器(free)EDX=19EBX=计时器句柄在之前的OS中,对时间的显示我们一直用秒来表示,在次计时器中,需要去显示时、分、秒,这样做会让计时器更直观,符合正常的使用逻辑。当计时器出现超时的情况时,会产生一个值128,当且只当用户控制键盘时会产生这个值,那么在这个时候计时器的应用程序就会退出。通过noodle命令来执行。计时器实际运行如图5-10所示图5-10计时器实际运行图5.9图片阅览器通过系统的图片阅览器功能,可以查看保存在本地磁盘上的图片文件。通过对程序源码的的bmp.nasm和jpeg.c的使用,使得系统可以识别打开bmp和jpeg格式的图片。在系统中通过命令行中输入指令gview加上文件名和后缀的方式,用图片阅览器打开图片。图片阅览器效果图如图5-11所示。图5-11图片阅览器效果图5.10娱乐功能在保证操作系统的基本应用程序功能后,提升系统的整体完成度和趣味性,加入了不同的休闲程序。(1)质数查询可以让用户通过输入sosu指令,命令行会输出100以内的全部质数,通过输入sosu2指令可以在命令行中显示出1000以内的全部质数,sosu3会显示出10000以内的全部质数。质数查询效果如图5-12所示。图5-12质数查询效果图(2)加入射击游戏,在游戏中玩家可以通过键盘方向键或者是小键盘的“4”和“6”键控制左右移动,使用空格键进行射击。同时玩家的得分将会被记录。消灭所有目标或当目标到达最下方一行时游戏结束,玩家可以通过回车键来开启新一局游戏,也可以按Shitf+F1关闭窗口。游戏效果如图5-13所示。图5-13游戏效果图5.11本章小结本章实现了PC简易操作系统的应用程序开发,首先实现了对影响后续的关键的键鼠控制和多命令行窗口模块,对后续其他程序奠定基础。随后对系统的磁盘文件读取和内存管理功能进行开发,最后在此基础上开发出计算器等丰富操作系统内容的程序,提高了操作系统完成度。
6系统测试6.1测试介绍系统测试通常为了提高系统的整体质量,对预想中系统的功能进行测试、审核和评估,以此来检查系统的各个功能指标是否正常,是否存在漏洞和不足,以此来对系统进行修改和维护。主要测试操作系统是否可以正常的运行,图形化界面和布局是否正常,命令行中的字符等是否显示正常。其次测试各个应用程序中的代码、数据结构、变量声明是否正确,所对应的应用程序能否正常运行,能否达到应用程序的预想效果。在此过程中对测试对象进行记录,遇到错误问题及时进行修复,避免对其他应用程序的影响。6.2功能测试本文主要采用的测试方法是黑盒测试。黑盒测试确定了系统中应该具有的功能,再对应的对每个具体的功能进行单独测试,检查其能否正常运行。它的好处是测试者只用按照对应的操作方法对系统中的每个功能进行测试,不需要对系统中的逻辑结构有所了解,本系统中的各个功能大部分是相对独立的,因此黑盒测试非常适合本系统的系统测试。对操作系统的程序功能如表6-1所示。表6-1操作系统功能测试表测试对象测试方法预期结果实际结果系统启动FIFO缓冲区定时器内存管理API接口键盘控制鼠标控制命令行窗口
多命令行窗口多任务管理
窗口关闭
命令行内容管理
文件读取文字支持
命令行计算器计时器图片阅览器质数查询
小游戏用makerun_full指令使用count函数计时设置一个时间间隔使用dir指令
运行应用程序
键盘输入各类字符
移动鼠标
拖动输入内容使用sta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/SXJP 046-2023煤矿用整芯阻燃输送带
- T/SXZX 012-2024绿色铸造专业镇评价通则
- T/DYZYXH 001-2024医养结合机构等级评定规范
- T/CI 1238-2025核电厂阀门阀杆密封组件检维修技术导则
- T/AIITRE 21011-2025能源企业数据开发能力建设与管理要求
- T/CNIDA 020-2024核电工程爆破振动监测技术规程
- 2025~2026学年河南濮阳市范县度人教版第一册一年级数学阶段学情自测卷【附答案】
- 2025~2026学年安徽滁州市天长市苏教版三年级下册期末数学试卷【附答案】
- 2025-2026学年江苏省宜兴市初中历史七年级期末下册自测经典测试题(附答案)
- PHP架构师面试题及详细答案(企业真实版)
- 2026联勤保障部队第926医院社会用工招聘58人备考题库及参考答案详解1套
- 汽车救援人员培训及考核规范
- 低钾血症诊治管理专家共识摘要2026
- 2026年34届ymo六年级初赛试题答案
- 高考数学复习-概率与统计中的综合问题(附答案)
- JJF 2309-2025 重点排放单位碳计量审查规范
- (新版)三级调饮师技能鉴定理论考试题库(附答案)
- 2026年智慧养老机构老人行为分析与异常预警应用案例
- 公寓消防培训课件
- 【新课标部编人教版】小学一年级上册语文:一天一过关拼音练习
- 混合痔诊疗临床路径指南
评论
0/150
提交评论