操作系统的简易实现-需求说明书

1. 引言

本项目是要制作一个32位的简易操作系统,这里的操作系统并不是像Windows或者Linux那样十分完备、复杂的操作系统,而是具有操作系统基本功能的操作系统内核。可能并没有太多的商业价值,更多的是学习计算机低层知识。大多数软件都是在应用层上开发,操作系统对于应用层软件开发人员来说就像一个黑盒子,只需要调用操作系统提供的接口,便可以完成功能,几乎没有接触硬件的机会,而操作系统正是在应用软件之下,硬件之上,操作系统也是使用硬件提供的接口来操作硬件,然后封装成系统调用接口给软件使用。

1.1 编写的目的

本说明书主要描述该操作系统应有的那些功能,不会涉及太多原理的介绍和硬件的知识,虽然对于操作系统,原理上的知识更多更重要,但是这是一个需求说明书,并不是学习资料,因此在该说明书只介绍该系统的基本功能。

1.2背景

a. 该操作系统名字暂时未定,就叫"MyOS"吧。

b. 至于为什么要想到学习实现操作系统,主要收到一位大佬的影响。实现一个操作系统,很考验计算机基本知识,比如计算机组成原理、操作系统、汇编,能更加了解程序的本质,更能体会到计算机科学的魅力。

c. 该系统基本独立,和其他机构也没有关系,算是一个Demo。

1.3参考资料

  1. 《操作系统真象还原》

  2. 《30天自制操作系统》

  3. 《一个简易操作系统的实现》

  4. 《Linux内核艺术》

  5. 《汇编语言》

  6. 《深入理解计算机系统》

2. 运行环境

2.1 开发环境

本项目是在我的个人电脑上开发,我个人电脑系统配置如下:

操作系统:Ubuntu20.10/64bit

处理器:Intel® Core™ i7-8550U CPU

开发语言:汇编语言(NASM)、C语言

编辑器:VSCode(一般的都行,比如Vim)

2.2 运行环境

该项目是一个操作系统,既然是操作系统当然不是运行在其他操作系统之上的,那就是直接运行在物理机上的,或者运行在虚拟机中。

我这里在开发该操作系统使用的虚拟机是Bochs x86 Emulator 2.6.11,主要是Bochs比较容易调试,但是对于开发完之后,是可以运行在物理机上的。

但是运行该系统对硬件有要求,配置最低要求如下:

  1. CPU是32位或者64位,不能是16位。(即要求Intel 80386及以上的处理器)。

  2. 内存最好在1M及以上。

3. 任务概述

3.1 目标

对于操作系统的实现,涉及到的知识比较低层。其实操作系统看似很低层,其实很多操作都是由硬件提供的,比如开机时自检、BIOS、保护模式、CPU特权级、可编程中断控制器等等。

所以在编写操作系统的过程中,很多时候要去了解硬件所提供的接口,比如要操作外设,那么需要去操作外设接口里面的寄存器,通过操作接口里面寄存器的每一个位,来操作外设,但是对于具体的实现细节,就涉及到硬件了,对于操作系统编写人员是完全透明的。所以操作系统也是很大程度依赖于硬件的,因此必须要去了解硬件所提供的接口,比如不同寄存器中每一个位的含义、硬件的特殊机制等。

除了要去了解硬件提供的接口,然后通过汇编来操作以外,后面的就是使用软件来编写逻辑上的操作了,这就是操作系统内核的编写,比如设计页表、设计中断描述符表、设计进程调度、文件管理等逻辑上的操作。

操作系统和硬件发展十分迅速,对于现代操作系统来说,远不止这些内容,所以该系统很多内容是现代操作系统已经淘汰了的,但是仍然有学习价值。

这个操作系统的实现,我也是边学边写。而且操作系统的理论知识远大于代码的实现过程。

操作系统实现的要实现一个基本功能其实是十分复杂的,比如要在屏幕上输出一行字符串,都十分“艰难”,要想在屏幕上输出字符,本质上是向显存写入信息,也就是要把字符逐个字节地写入到显存中,还有设置字符的属性(比如字体颜色、背景颜色),然后还要操作显卡的端口操作光标的位置,配合字符一起显示在屏幕上,还有对字符要进行解析,比如转义字符\n,需要解析成换行回车,又需要操作显卡的缓冲区和显卡端口,来控制字符的显示位置和光标的显示位置。所以一个应用层上似乎很简单的功能,操作系统其实是经过十分复杂的操作的。

4. 系统划分

4.1 系统介绍

该操作系统的设计包含一下几个模块:操作系统内核引导、保护模式、中断、内存管理系统、线程、输入输出系统、文件系统、系统交互。

4.2 操作系统包含的子模块具体介绍

该操作系统内核的编写,主要包含以下几个模块:

4.2.1 操作系统引导

操作系统引导是用于加载操作系统内核,当计算机按下开机键,操作系统是放在硬盘中的,操作系统不会直接启动,而是由其他程序来启动。该模块包含了如何设计主引导记录MBR还有Loader,如何加载操作系统到内存中的过程。

4.2.2 保护模式

CPU从实模式发展保护模式,操作系统也配合硬件也在发展出保护模式,相比实模式更加安全,当然涉及到的内容也更多。这个模块包含了如何开启CPU的保护模式,以及如何开启操作系统的分页机制,以及对页表的设计等。

4.2.3 中断

中断是CPU提供的接口给软件使用。可以说中断是硬件和软件的沟通方式,中断是操作系统的驱动方式,比如时钟中断等外部中断,还有各种内部中断。操作系统基本是靠中断来驱动的。这个模块包含了对中断的描述,中断描述符的设计,还要编写中断处理程序等。

4.2.4 内存管理系统

这个模块是对物理内存的分配,包含对内存池的规划,页内存的分配等。

4.2.5 输入输出系统

这里的输入输出系统主要是操作系统读取外设,比如读取键盘,需要编写键盘驱动,还有在实现输入输出系统时要考虑同步机制,如何设计“锁”。

4.2.6 线程

这里的线程是操作系统内核线程,线程是操作系统的最小调度单位。本模块包含了如何实现线程,对线程设计,对线程调度以及任务切换等。除了实现操作系统的内核线程,还有用户进程的实现。

4.2.7 文件系统

该模块主要包含了创建文件控制块PCB,创建目录项,实现文件描述符,对文件读写和关闭的低层实现,以实现对文件系统的管理。

4.2.8 系统交互

该模块主要包含了各个系统之间的配合使用,通信方式,比如如何加载用户进程,封装系统调用。

项目地址

项目地址

posted on 2021-04-08 14:54  FreestyleCoding  阅读(14)  评论(0编辑  收藏

导航