实现操作系统课程设计所要求的B、C、D三个难度。
难度B:对参考源码的文件系统和进程管理系统进行修改,
难度C:完善控制台的命令解释器,通过在shell上输入指令可以文件增删以及信息查看等功能。
难度D:实现5个应用程序,包括五子棋游戏、井字棋游戏、简易计算器、猜数字游戏、N皇后游戏。
首先我们学习了ORANGES提供的源码,分析了ORANGES中的一些缺陷,并根据这些缺陷来设计我们自己的操作系统。由于GUI设计与本次课设的学习目标不太相符,因此我们采用了控制台的形式
应用程序的设计受限于bochs版本问题,参考源码中的bochs版本为2.6,而我们组则都采用了bochs-2.6.9,所以导致用户级应用只能安装一个。但是我们已经了解了如何安装应用程序到文件系统中,因此我们将所有游戏打包为一个应用写入磁盘。
对于Shell的完善我们将控制台纳入文件系统,可以在控制台输入指令来实现对文件的管理操作。同时可以通过shell来查看操作系统的一些基本信息。
Orange的文件系统只实现了文件最基本的操作,是一个一级的文件系统。这不符合我们平时的使用习惯。所以我们在这个基础上实现了多级文件文件系统。
我们实现了进程的查看、添加和删除。通过遍历proc_table,按照一定的格式输出进程表中的信息,在屏幕上显示进程名、优先级、当前状态等信息。根据用户提供的进程id,使用系统调用,可以找到并删除当前进程表中对应的用户进程,并将该项置为空,可以用于容纳新建的进程。当接收到用户的新建进程指令时,系统将会调用内核的接口,folk一个新的进程,并使其开始像其他进程一样运行和切换。
boot(引导)
kernel(内核)
command(应用)
fs(文件系统)
lib(可用代码库)
include(头文件)
mm(内存调度系统)
ubuntu-16.04.2:1G内存、20G硬盘 64位
bochs-2.6.9
Orange中的文件系统并没有文件夹之类的概念,是一个一级的文件系统。我们对文件系统进行了修改,使得文件系统变成了多级的文件系统。该文件系统有文件和文件夹,文件夹文件里存的是该文件夹里的文件/文件夹的名称。我们通过cd操作可以很方便的进出文件夹,通过ls操作参看文件夹里的内容。
我们实现了进程的查看、添加和删除。通过遍历proc_table,按照一定的格式输出进程表中的信息,在屏幕上显示进程名、优先级、当前状态等信息。根据用户提供的进程id,使用系统调用,可以找到并删除当前进程表中对应的用户进程,并将该项置为空,可以用于容纳新建的进程。当接收到用户的新建进程指令时,系统将会调用内核的接口,folk一个新的进程,并使其开始像其他进程一样运行和切换。
控制台纳入了文件系统、进程部分以及系统信息等部分,共有15条指令。
一共有5个应用程序:五子棋游戏、井字棋游戏、简易计算器、猜数字游戏、N皇后游戏。5个应用程序用户体验良好,可以随时退出回到控制台。安装应用程序到操作系统中分为以下几步:
- 编写应用程序,并编译链接。
- 将链接好的应用程序打成一个tar包:inst.tar。
- 将inst.tar用工具dd写入磁盘(映像)的某段特定扇区(假设这一段的首扇区的扇区号为X)。
- 启动系统,这时mkfs( )会在文件系统中建立一个新文件cmd.tar,它的inode中的i_start_sect成员会被设为X。
- 在某个进程中——比如Init——将cmd.tar解包,将其中包含的文件存入文件系统。
而在本项目中,应用程序的设计受限于bochs版本问题,参考源码中的bochs版本为2.6,而我们组则都采用了bochs-2.6.9,所以导致用户级应用只能安装一个。但是我们已经了解了如何安装应用程序到文件系统中,因此我们将所有游戏打包为一个应用写入磁盘。
我们实现了进程的查看、添加和删除。通过遍历proc_table,按照一定的格式输出进程表中的信息,在屏幕上显示进程名、优先级、当前状态等信息。根据用户提供的进程id,使用系统调用,可以找到并删除当前进程表中对应的用户进程,并将该项置为空,可以用于容纳新建的进程。当接收到用户的新建进程指令时,系统将会调用内核的接口,folk一个新的进程,并使其开始像其他进程一样运行和切换。
在控制台输入welcome指令进入欢迎界面。
在控制台输入clear后清空控制台内容,展示欢迎界面。
在控制台输入print后打印相应字符串
在控制台输入information后得到相应内存等信息。
在控制台输入game后进入应用程序界面,可以选择5种不同的小游戏。输入e退出程序界面,在任何小游戏内输入e退出游戏。
文件系统的增删查改共有9条指令。可以创建删除文件、文件夹,编辑文件,使用ls指令查看所有文件、文件夹,进入文件夹或返回根目录。
可以查看进程并结束进程。