APP下载

小型操作系统的设计与开发

2018-09-05赵敏强

关键词:操作系统多任务

赵敏强

【摘 要】论文首先简单介绍了小型操作系统和开发该系统的主要目的,其次阐述了操作系统重要的软硬件知识,通过查阅相关资料和技术文档,对其中主要的问题,例如缓冲区、内存管理、CPU任务調度等方面进行了阐述和探讨,明确了主要需要实现的功能,最后通过实际的测试不断改进,得到一个成型的小型操作系统。

【Abstract】Firstly,the paper introduces the small operating system and the main purpose of developing the system, and then describes the important knowledge of software and hardware of the operating system.Through consulting relevant materials and technical documents, the main problems, such as buffer, memory management, CPU task scheduling and so on, are expounded and discussed.The main functions that need to be realized are defined. Finally, a miniature operating system is obtained by continuous improvement of the actual test.

【关键词】操作系统; 多任务; 内存管理

【Keywords】operating system; multitask; memory management

【中图分类号】TP311 【文献标志码】A 【文章编号】1673-1069(2018)05-0156-03

1 小型操作系统概述

1.1 操作系统的本质

时至今日,在所参考的资料上并未发现关于操作系统的完整的统一定义。本文认为软件的产生是为了更好地使用硬件设备,操作系统作为底层系统软件,为应用软件与硬件提供了接口,为用户与应用软件提供接口。因此,本质上操作系统就是为了解决计算机系统问题的一套解决方案。

简而言之,不论解决方案是否完善,是否高效,当它确实起到解决计算机系统关键问题的作用,那么就可以被称为操作系统。

1.2 小型操作系统简介

本文阐述的小型操作系统是一种功能简易,构造简单的操作系统。

1.2.1 小型操作系统的特点

①体量小

一般的现代操作系统功能完备,因此体量都比较大。而本文设计的操作系统相对简陋,很多核心功能的实现策略都采用了较为简单的种类,因此体量很小,根据实际测试检验,本文的操作系统核心小于40KB。

②对硬件要求低

本文开发的操作系统是一款成本低廉的操作系统,其需要的存储介质是市场上淘汰的便宜软盘,由于设计系统为32位系统,所以对于CPU有一定要求,要等于或高于Intel 80386版本。

1.2.2 小型操作系统的应用范围

由于体量小,对硬件的要求低,小型操作系统可以运行在严酷的硬件环境中,32M左右的存储空间就足以运行。需要注意的是,本文所阐述的操作系统主要用于加强对操作系统理论的理解,因此商业应用并不在设计的需求内。

2 操作系统的发展

2.1 发展历史简述

历史上,最早的计算机使用的是人工操作,数据和程序都需要穿孔在纸带或卡片上,然后通过输入输出设备送入计算机。这种方式烦琐且容易出错,设备利用率也很低,所以后来人们创造了执行系统,用以控制和管理计算机,并对重复的操作实现自动化,在这个阶段,已经可以同时提交多个作业了,但是在处理上一次只会有一个作业被处理,这样处理设备的能力就被浪费了。

后面,就出现了多道程序设计的理论,该理论允许多个程序进入内存,实质上处理器仍然是在处理单个程序,但是在宏观上,多个程序处于运行中但尚未结束的状态。虽然这样做会导致作业的处理周期变长,但对设备资源的利用率极大地提高了。

从半自动的执行系统到自动化的多道批处理,这个转变花费了很长的时间,主要是存储介质的问题。之后多数书籍上提到的三类操作系统(多道批处理、分时、实时)就逐次问世了,本文认为这三类操作系统的出现其实与时代环境相关。多道批处理出现较早,其理论早在执行系统时代就有雏形。分时操作系统建立于一个网络相对发达,但计算机设备昂贵的时代,分时的核心就是让多个用户共同使用一台计算机,但要让每个人都感觉自己在独享资源。解决办法就是时间片轮转策略。实时操作系统建立于一个信息发达的时代,它需要系统快速稳定地获取数据处理结果,并快速地反馈给对应设备,以此来实时控制某些生产或处理过程。比较常见的例子就是金融行业用的操作系统[1]。

2.2 总结与展望

操作系统发展一直与社会需求有关,不同的需求会导致对应的操作系统不同特性。从目前来看,人工智能、量子通信、云计算、混合现实技术正当社会的关注热点,为了支撑这些技术的进一步发展与普及,对应的操作系统也将成为社会资源和开发者们关注与研究的目标。

3 小型操作系统的设计原理与实现方法

3.1 多任务调度

CPU进程调度有很多算法,这里主要采用多级队列调度算法和时间片轮转算法。通俗解释,人为划分多个队列,按进程的特性和对资源的需求程度划分入队列,每个队列都有自己的优先级,一般来说,优先级的设置与用户体验有很大关系,比如键盘鼠标的信息读取这一类就要设置较高优先级,以便及时反应。

在队列内采取时间片轮转的策略,当优先级较高的队列内已没有进程时,才开始执行低一级的队列。如果低优先级队列的任务运行时出现了更高优先级的任务,则在下次任务切换时必须无条件切换回该优先级队列的任务。

时间片轮转算法的效率很大程度上依赖时间片的划分,一般操作系统的切换动作间隔10ms到100ms。切换动作本身也有消耗,大概平均消耗时间在0.01ms左右。假设时间片只有0.02ms,那么处理器处理能力的50%都会被消耗在自身的切换动作上。反言之,若时间片太长,就会退化为FCFS策略。

采用这种方式可以有效地防止输入输出设备的进程被应用程序抢占,极大地提高用户体验,同时保障了系统的稳定运行。

3.2 内存管理

本文采取的策略是可变分区存储管理。在内存中设置一张内存地址管理表,记录可用内存和不可用内存的起始地址。一开始,所有内存可用于用户进程,当新进程需要内存时就为它查找一块足够大的内存,进程运行完释放内存。长期运转之后,内存就会被分隔成大小不一的块,相邻内存块合并,左右不相邻的就将该信息弃置最后。

实现上相对较繁杂,首先是给内存管理表划分约32KB的存储空间,接下来创建2个结构体,分别为可用内存信息和内存管理。

在实现过程中最麻烦的是释放内存后的可用内存信息合并。为了方便整理,free[ ]会按照结构体中的地址变量addr排序。释放内存函数被调用后会先进行排序,排序法为插入排序。以此决定新纪录将要防置的位置。此时新纪录并未被放入记录表。然后判断自身所记录的地址是否与前面记录的地址合并,用free[i-1].addr+free[i-1].size==free[i].addr来判断。然后被前面的记录合并,接下来和后一位记录判断是否可以合并,公式与左侧合并类似,合并完成后销毁所有被合并的记录。将后方的记录向前移1位。

在第二次判断时,有可能无法与右侧合并,此时就可以结束释放过程。

如果左侧无法归纳合并,就与右侧判断,然后不需要后续记录的移位。

如果左右皆不可以归纳合并,则将其置入记录表,其右侧的向右移1位,并更新可用状况表的最大值。此处还需要增加一个判断,以确定是否有溢出问题,如果有则在记录表的错误报告数上累加。

3.3 缓冲区

缓冲区设计为FIFO型缓冲区,在最开始的设计中,FIFO缓冲区只维护最后写入的数据的位置,读取最先进去的数据后进行数据向前移送。但这种做法的效率很低,且移送数据处于禁止中断中。所以最后采取的策略是維护两个位置。一个是下一个要写入的数据的位置,另一个是下一个要读取的数据的位置。同时用程序设置,当下一个要操作的位置为缓冲区的终点时,强制将操作位置跳转到缓冲区的起点。

首先将缓冲区定义为可变的,缓冲区总字节数保存在变量size中,设置一个变量free保存缓冲区里没有数据的字节数,变量buff保存缓冲区的地址,p表示下一个写入地址,q表示下一个读出地址。

3.4 屏幕与字符显示

操作系统是人机交互的接口,对于机器语言必须转化成操作者可以看懂的字符。显示字符需要先显示出一个屏幕。先不考虑鼠标等设备,只绘制一个屏幕,并显示英文字符。

3.4.1 屏幕绘制

屏幕的显示需要处理颜色,一般使用RGB方式的颜色是用24位二进制指定颜色,而本文采取的是调色板模式,采用8位二进制,由程序员指定0~255的数字所对应的颜色。

写入调色板的具体流程:记录中断许可标志位的值→禁止中断→将想要设定的调色板号码写入0x03c8→按R、G、B顺序写入0x03c9→恢复许可标志的值。

读取与之类似,但调色板号码写入的是0x03c7地址,读取仍然按照R、G、B顺序从0x03c9读取。

之后只要利用显存(VRAM)与画面模式中像素点的关系绘制直线,重复绘制直线,变为有填充色的矩形。这就构成了操作系统的屏幕[2]。

3.4.2 字符显示

本质上,所有的图标都是用二进制数描绘的,字符也不例外。在使用32位模式显示字符前可以调用BIOS的函数显示字符。字符的显示使用像素点阵,用8*16的二进制数表示一个字符,即16字节表示一个字符。绘制鼠标图案也是同理,唯一的区别就是鼠标的规划大小是16*16.

3.5 键盘与鼠标信息的获取

鼠标与键盘和操作系统主要依靠中断的方式实现,键盘的中断号码是IRQ1,鼠标的中断号码是IRQ12,从中断号码来看,鼠标的出现相对较晚。从参考资料来看,由于鼠标动一下就会产生中断,所以最初的鼠标几乎不被多数操作系统支持。所以在后来的设计中,虽然在主板上制作了鼠标的电路,但如果不激活鼠标的指令,就不会产生鼠标的中断信号。

而最关键的鼠标激活指令需要先完成键盘的初始化。换句话说就是要先激活键盘。

除此以外,鼠标还需要一些额外的操作。这是因为鼠标的IRQ12在从PIC上,主/从PIC协调不会自动完成,所以需要在通知IRQ12受理完成后,通知主PIC IRQ2受理完成。

4 演示效果

用QEMU模拟,结果如下图3所示,光标闪烁正常,鼠标移动正常,键盘输入正常。

上图3中主要参数是测试使用的,第一行是鼠标位于的屏幕坐标值,第二行第一个参数是键盘按键后返回值,键盘按键在按下和弹起两个动作显示的值不同。中括号里的值是鼠标相对位移(与前一次刷新相比)。第三行是内存检查。显示的是开机后内存使用情况。

本文所设计的小型操作系统主要以命令行的形式控制。因此设计并制作了控制台窗口。

5 结语

本文介绍了一个小型操作系统的设计与开发过程。本文的主要目的是通过实现一个功能简陋的操作系统,在试错过程中不断学习相关知识点,更好的理解操作系统概念。本文的小型操作系统虽然简陋,但是仍然可以继续开发进一步完善。小型操作系统的很多设计思想与现代商用操作系统基本一致,但在源码编写难度上却大大降低了,且在多处采用了较为简单的思路,易于理解。

【参考文献】

【1】郭景,陈贤富.一种符合OSEK标准的操作系统微内核设计[J].微电子学与计算机, 2017,34(11):16-20.

【2】陈云龙.小型微内核操作系统内核模型设计与实现[J].信息与电脑(理论版), 2011(05):80-82.

猜你喜欢

操作系统多任务
基于中心化自动加权多任务学习的早期轻度认知障碍诊断
基于判别性局部联合稀疏模型的多任务跟踪
基于多任务异步处理的电力系统序网络拓扑分析
一类完全由内积构造的多任务核的几个性质
基于单片机应用系统的多任务程序结构设计
未知环境下基于粒子群优化的多任务联盟生成