个人简单操作系统的实现与设计

Livealone

发布日期: 2019-04-24 19:40:48 浏览量: 441
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

摘 要

在计算机世界里,研究操作系统的人越来越小众化的。因为我们现在使用的操作系统,是如此的绚丽多彩,用户的体验又是如此的完美。“所见即所得”的设计使不是计算机专业的人也能很容易的使用计算机。操作系统种类也繁多,有苹果公司的OS x 操作系统,微软的windows操作系统,还有针对银行的稳定需求的UNIX操作系统,甚至也有开源的Linux操作系统。有这么多的操作系统,自己一个人或几个人去开发一个新的系统似乎没有必要。

其次现在的操作系统功能齐全,作用强大。从而也导致了其背后的源代码量也是迅速的暴增。比如Linux kernel 2.6.2.7系统的源代码将近1000万行。如此庞大的源代码也让初学者用户望而却步。

在模拟开发个人简单操作系统的过程中,系统主要参考了赵炯编写的《linux内核完全剖析—基于linux0.12》和《30自制操作系统》。选择这两本书的主要原因是赵炯的书,内容条理清晰,基本功能描述完整;更为主要的是linux0.12的源代码不超过2万行,这样使阅读源代码成为可行,但是由于linux0.12的版本过早,参考了最新出版的《30自制操作系统》。

由于操作系统功能模块清晰,也只是做验证性的实践。故在操作系统开发时,主要思考如何才能更加快的开发程序,软件工程学是否能够应用于此等问题。在系统开发过程中,系统主要实现进程管理和多任务处理;创建系统库;能够与外设交互,例如鼠标、键盘和显示器;实现了与操作系统交互的命令行。

关键字:操作系统,软件工程学,内核,模拟,验证性

Abstract

In the world of computer , the number of people who like to study operating systems or just implement the OS module is becoming smaller and smaller. Because the operating system we use now are so colorful and the experience of users is so perfect. The design of “WYSIWYG” is so convenient that the people who don’t know about computer are also easy to use it. And a wide variety of operating systems made it possible that the consumers get more chances to choose the operating systems they like or need . For Example, they can choose OS X which belongs to Apple or windows which belongs to Microsoft. Even like the bank which need high stability, we can choose the UNIX operating system and if we are keen to open source system,we can choose LINUX operating system. So many operating system we can choose. It is no meaning for us to create a new operating system.

Secondly, the functions of operating system are integral and powerful. Indirectly, it leads to quickly increasing the amount of the sources about the operating system,Such as the LINUX kernel 2.6.2.7 whose lines of the code has been beyond 10 Million. So it is not so easy for junior programmers to learn and read the sources. Gradually, they give up and get to be afraid of the operating system mechanism.

In the procedure of development my own simple operating system, I refer the book named “Linux kernel completely dissect” written by qiong zhao and the book named “30 homemade operating system”. I use zhao’s book because the orderliness of content is clear and basic functions is integral. And it is the most important that the code-line of LINUX 0.12 is less than 20 thousand which makes it possible to read the source code. The second book I choose is that the first book is too old to practice in real computer system.

As the function models of the operating system are clear,I just practice it and compare it with what I think. When I mange to develop the operating system,I always ask myself that how I can do it more quickly and how I can combine it with the knowledge about Software Engineering. After the development, I achieve the functions— Process Management and Multi-task handling; Interacting with peripherals such as mouse,keyboard and monitor;implementing the console that can communicate with operating system kernel.

Key Words: operating system, software engineering, kernel, simulation, confirmatory

第一章 绪论

操作系统是一门计算机专业课程中的一门必要的基础性学科。同时,它作为连接硬件与软件桥梁,大多数程序员都梦想自己去开发一个属于自己操作系统,以便扎实自己的基础知识。

开发一个模拟操作系统,可以实践软件工程方面的知识,而且它有一下几个优点。首先,操作系统主要功能稳定清晰。目前市场上主流的,如Windows、Linux、Unix等操作系统,尽管版本在不断改进,用户体验不断增强,但是其主要功能模块,如内存管理,文件系统,i/o输入输出等概念模块并没有改变多少。其次,拥有相对完整的资料。从Unix操作系统诞生,到开源系统的兴起Minix,Linux等操作系统;从Windows几乎垄断PC市场,到Mac OS x插足。同时也产生了各种关于操作系统的资料。例如《操作系统:设计与实现》,《莱昂氏UNIX源代码分析》和各种GNU Linux/FreeBSD等操作系统的开源资料。其三,能够理解操作系统运行的原理。尽管有很多书,是关于操作系统原理介绍的,然而实践能够对理论知识有更好的理解。

尽管模拟开发操作系统有这么优点,但是同样也存在的不少问题。首先,汇编语言不太流行。目前,我们更加喜欢学习JAVA[10],C++这样的高级语言,来开发我们的应用程序,而且它们的开发速度也确实比汇编语言开发应用程序快。其次,开发自己操作系统的很少,因为实际利益不大,全靠个人兴趣。资料尽管全,但是很多资料都是很老,且不符合现在的硬件环境。

总之,模拟开发操作系统是一个有一定挑战性的软件项目,也是一个好的实践软件工程知识的项目。

在整个论文中,我主要介绍的操作系统所依赖的PC模型与intel x86架构,其次设计了操作系统的功能模块和介绍系统执行的原理,其三,介绍了模拟开发操作系统的开发环境和运行环境。其四,介绍了操作系统文件组织结构,主要是源码组织结构和文件系统组织结构。其五,对操作系统软件进行编码和测试,介绍了一些开发工具。最近,对整个操作系统开发过程进行了总结。

第二章 计算机组成结构

Niklaus Wirth曾经说过,“程序=数据结构+算法”。尽管现在程序可能还包含其它的内容,不过这两样的本质需求,始终没有改变过。而这部分,我将说明在这个操作系统开发中,系统所依赖的模型——从宏观上来讲,模型也可被看作数据结构。

2.1 计算机的整体架构

这里我们主要从整体简要地来描述与该系统相关的计算机组成结构。如图2-1所示,计算机整体结构主要由CPU通过地址线、数据线和控制信号线组成的本地总线(或称为内部总线)与系统的其他部分进行数据通信。地址线用于提供内存或I/O设备的地址,既指明需要读/写的具体位置。数据线用于CPU与内存或者是I/O设备之间提供数据传输的通道。而控制总线则负责如何进行具体的读/写操作。而Intel IA-32架构地址总线和数据总线分别是32根,表示32位。所以地址寻址空间的范围是 B,就是4G。

2.2 I/O端口和寻址

I/O端口地址(简称“端口”)是指CPU为了访问I/O接口控制器或数据卡上的状态和数据信息,而设立指定它们的地址。一般情况下,一个I/O控制器包含访问数据的数据端口、输出命令的命令端口和访问控制的执行状态的状态端口。端口地址通常有两种设置方法:统一编址(即把I/O控制器中端口地址归入存储器寻址地址空间范围内—存储器映像编址)和独立编址(即把I/O控制器和控制卡的寻址空间单独作为一个独立的地址空间对待—I/O地址空间)。

IBM PC及其兼容机主要使用独立编址方式,采用一个独立的地址空间对控制设备中的寄存器进行寻址和访问。而本系统所有的PC机就是IBM PC 的兼容机。I/O地址空间默认范围为0x000~0x3ff,总共有1024个I/O端口可供使用。分配如下表。

端口的地址范围 分配说明 端口的地址范围 分配说明
0x000~0x01f 8237A DMA控制器1 0x1f0~0x1f7 IDE硬盘控制器0
0x020~0x03f 8259A 可编程中断控制器1 0x287~0x27f 并行打印机端口2
0x040~0x05f 8253/8254A定时计数器 0x2f8~0x2ff 串行控制器2
0x060~0x06f 8042 键盘控制器 0x378~037f 并行打印机端口1
0x070~0x07f 访问CMOSS RAM/实时时钟RTC(Real Time clock)端口 0x3b0~0x3bf 单色MDA显示控制器
0x080~0x09f DMA页面寄存器访问端口 0x3c0~0x3cf 彩色CGA显示控制器
0x0a0~0x0bf 8259A 可编程中断控制器2 0x3d0~0x3df 彩色EGA/VGA显示控制器
0x0c0~0x0df 8237A DMA控制器2 0x3f0~0x3f7 软盘控制器
0x0f0~0x0ff 协处理器访问端口 0x3f8~0x3ff 串行控制器1
0x170~0x177 IDE硬盘控制器1

2.3 接口访问控制

PC的I/O接口数据传输控制方式通常分为3中:程序循环查询方式、中断处理方式与DMA传输方式。程序循环查询方式是指CPU通过程序中循环查询指定设备控制器的状态来判断是否可以与设备进行数据交换。这种方式能够用软件就能直接实现,不需要额外的硬件设备,但是比较消耗CPU时间。所以在这个系统中,一般不使用这种方式,除非等待时间极端或者必须这么做。

中断处理方式需要中断控制器设备的支持。在这种控制方式下,只有当I/O设备通过中断向CPU提出处理请求时,CPU才会暂时中断当前执行的程序转而去执行相应的I/O中断处理服务程序。

此图表示中断处理过程,CPU执行的过程为A-B-A,I/O设备仅仅是向CPU发送一个中断请求(也就是中断向量),然后等待中断服务程序来处理。

直接存储器访问(Direct Memory Access)是针对中断处理的一种优化。CPU的主要能力是计算。而像将大量数据从硬盘转移到内存的处理,其实并不需要用到CPU计算能力。故为了提高效率,就专门用DMA控制器。

在本系统开发,主要相关I/O设备有键盘,鼠标,显示器,软盘。

2.4 主存储器和BIOS

主存储器主要指内存(memory)。任何数据想被CPU处理,都必须将数据复制到内存中。目前PC机的内存一般为4GB,系统一般为64-bit系统。而由于本系统开发是以32-bit Intel IA-32为基础,使用Bochs模拟器。故内存仅仅设置为32M。

BIOS程序是放在ROM中,主要用于计算机开机时执行系统各部分的自检,建立起操作系统需要使用的各种配置表,如中断向量表,硬盘参数表等等。但是由于BIOS提供的服务不具备可重入行(即程序不可并发运行),故从访问效率考虑,仅仅在初始化阶段使用。

本系统在引导程序中,会利用BIOS。当计算机系统上电开机或重启时,CPU会自动把代码段寄存器(CS)设置为0xF000,段长度为64KB( B),指令寄存器(IP)被设置为0xFFF0。故CPU的代码指针指向0xFFFF0,而这里会放一条JMP指令,跳转到BIOS代码中64KB范围内的某一条指令。

2.5 控制器与控制卡

与本系统相关控制器或控制卡有一下几种:中断控制器、DMA控制器、定时/计数器、键盘控制器、显示控制、软盘和硬盘控制器。

中断向量控制器,当计算机加电的时候,硬件中断请求会被ROM BIOS设置成如表2-2所示的对应中断向量号。但本系统在初始化操作之时,就重新设置中断请求号和中断向量号的对应关系。

中断请求号 BIOS设置中断号 用途
IRQ0 0x08 8253发出的100Hz时钟频率
IRQ1 0x09 键盘中断
IRQ2 0x0A 接连从芯片

DMA控制器主要是通过让外部设备直接与内存传输数据来增强系统的性能。主要由机器上的Intel芯片或其兼容芯片实现。通过对DMA控制器进行编程,外设与内存之间的数据传输能在不受CPU控制的条件下进行。因此在数据传输期间,CPU可以做其他事情,从而提高CPU的效率。

定时/计数器是通过Intel 8253/8254芯片来实现。该芯片用于处理计算机中的精确时间延迟。本系统用定时器来时钟计时中断信号。

键盘控制器是专门用来对接受到的键盘扫描码进行解码,并把解码后的数据发送到操作系统的键盘数据上。因为每个按键的接通和断开码都是不同的,所以键盘控制器根据扫描码就可以确定用户在操作哪个键。本系统在字符设备驱动程序中,对键盘控制器进行了处理。

显示控制,目前市场上的显卡很多,而且都是独立编址。但在本系统开发时,运行环境是bochs模拟器。故应用EGA/VGA显示标准。增强型图形适配器(EGA)和视频图形阵列(VGA)不但兼容和支持MDA和CGA的显示方式,而且还支持其他在图形显示方面的增强显示。

软盘和硬盘控制器,软盘和硬盘是计算机主要保存数据持久的工具。尽管目前硬盘的价格已经很便宜。480元左右就能买到1TB的硬盘空间,软盘的已经在我们的视线中不复存在。但由于早请的系统开发,将数据写入软盘中,故在本系统的开发时,仍然使用软盘来做系统的启动工具。

2.6 总结

这一部分主要讲了微机的组成结构。将与本系统相关一些存储器、控制器进行了分类介绍。并说明了本系统采用显示标准、引导盘的问题等问题。

第三章 Intel架构

在讲微机组成的时候,我并没有的过多的讲CPU的原理,而这一个部分,我将描述与本系统相关,需要利用的CPU元素和原理。我将从两个方面来描述与这个操作系统相关主要部分,其一,基本架构,主要来描述AI-32处理器基本执行环境,说明处理器如何处理执行指令,如何存储和操作数据。它的执行环境描述包括了内存(地址空间)、通用数据(general-purpose data)寄存器、段(segment)寄存器、标志(flag)寄存器和指令指针(instruction pointer)寄存器。这一部分的介绍,主要是因为在操作系统的开发时,引导部分(boot),几个基本库函数和一些设备驱动都必须用到汇编语言。其二,系统编程指导,虽然这里讲得是编程,实际上是告诉我们利用第一部分的基本元素(内存、通用数据寄存器、段寄存器、标志寄存器和指令指针寄存器),实现或表示的一些硬件系统的功能,例如内存管理(memory management)、软件模块保护(Protection of Software modules)、多任务(Multi-tasking)和异常和中断处理(Exception and Interrupt handling)等等。在开发操作系统时,利用这些硬件提供的功能,来帮我们实现操作系统的多任务处理。

3.1 基本架构

早期的CPU是由运算器和控制器两部分组成的。但是随着ULSI技术的发展,早期放在CPU芯片外部的一些逻辑功能部件,如浮点数运算器、cache、总线仲裁等等移入了CPU内,因而使CPU的内部组成月来越复杂。这样基本组成就变成了运算器、cache、控制器三大部分。那么如何让这三大部分协调处理,这里我们就来描述系统开发时用到的基本元素。

3.1.1 寄存器

像AX 、BX等等这些标识在汇编语言中经常看到。而它们就是所谓的寄存器。一般寄存器分为四类:通用寄存器(General-purpose register),段寄存器(Segment register),标志寄存器(EFLAGS register)和指令寄存器(Instruction register)。其他也有一些寄存器,但它们往往针对某些特殊的功能,而在本系统开发时,它也不是主要的,故这里仅仅解释与本系统主要相关的这4类。

通用寄存器:8个32-bit通用寄存器。它们通常指寄存器EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI。由于它们向16-bit向下兼容,又是你也会看到如此表示,如AX,BX等等,更甚至你会看到AL,AH这样表示8-bit的寄存器。这些是由于历史的原因。可以去阅读相关资料,作更深的了解。

段寄存器:有6个16-bit的段寄存器,它们存储的是段指针,在访问内存中时,指向的内存中的段基址。段产生的原因是为了多道程序的处理,防止数据干扰。

标志寄存器:一个32-bit的标志寄存器,用来提供基本算术,比较,和系统操作的状态和信息。

指令寄存器:一个32-bit的指令寄存器,包含当前指令指针。

3.1.2 数据类型

无论是C语言还是其他汇编语言都有数据类型。而这些数据类型是怎么实现的呢?它们又具体怎么表示?这些问题,对不同的架构来说,可能有不同的答案,但是本系统的硬件架构Intel IA-32来说,硬件系统它自动定义了多种数据类型。例如数值类型,指针数据类型,位域数据类型,字符串数据类型等等。而这些类在本系统中经常用到。

3.1.3 指令集

尽管在实际写操作系统中,用到的汇编并不多,但是跟硬件相关的还是都或多或少要用到汇编。
而且在C语言中内嵌汇编语言。故在这里介绍了常用指令的类型。通用的指令类型主要有数据转移指令,二进制算术指令,十进制算术指令,逻辑算术指令,移位和旋转指令,位与字节指令,控制转移指令,字符串指令,I/O指令另,Enter和Leave指令,标识控制指令和段寄存器指令等等。这些指令组成了我们系统的程序,实现了各种各样的功能。

3.1.4 过程调用、中断和异常处理

过程调用、中断和异常处理是重用性和多道程序设计的基础。重用性在系统开发时,提供了更高的效率。中断比起程序循环控制更加节约时间,异常能够让我们控制问题的恶化。

3.2 系统编程指导

这些硬件的结构,帮助系统开发者能够实现更加强大的操作系统。它们不用尝试用软件去实现,因为那样太浪费CPU的时间。下面描述的是本操作系统在Intel IA-32上用到的硬件结构。

3.2.1 保护模式内存管理

英特尔硬件系统,提供了实模式,保护模式等几种系统操作模式。在本系统开发中,主要涉及的是保护模式。而在保护模式中,没有模式位来让段不可用,分页是可选的。因为在内存管理模式中,内存设备主要分为两个部分,段和分页。段提供了一种机制关于数据、代码和栈相关信息的分离,是多任务可以运行于同一个处理器上,而不影响其他任务。分页提供了按一定大小分页的虚拟内存。被分成多页的程序,都是按页来映射到相应的物理内存。这样可以在逻辑上增加内存的容量。

3.2.1.1 分页

分页是将线性地址转化为物理地址的过程,所以通过它也能能够访问内存和I/O设备,而且它还能决定线性地址的访问权限和用于这种访问的缓存类型。

3.2.1.2 保护

当保护机制被使用时,每次内存的引用将都要去确认满足保护检查。所有所做的检查开始在内存被循环开始之前。一种违反结果是发生异常,而在性能上并没有惩罚,因为所有检查在地转换时都是并行的。

3.2.2 中断和异常处理

中断和异常有处理过程可分为三步骤:即事件(events)、处理(handlers)和动作(action)。事件表示引起处理器注意的原因。处理表示对事件相应的结果。动作表示如何处理这个事件。它们组成了中断处理的架构。

3.2.3 任务管理

任务管理设备只能运行在处理在保护模式的情况下。

第四章 系统运行原理与功能模块设计

我从系统运行原理和功能模块设计两个方面来描述我的系统的整体设计。系统运行原理描述了本系统启动到系统正常运行的过程。系统功能模块的描述是我对系统相关功能的实现。前一部分我主要描述它的执行过程的系统;后一部分我主要描述相关要实现概念的表示。两者的整体的关系图4-1如下。

操作系统的有三个基本概念,分别为进程、文件、命令解释器,又结合上图。我把操作系统设计为由元素和进程组成。元素包括子程序(主要系统函数和中断函数)、硬件元素(像寄存器,内存等)。进程由元素和进程(本身和其他)组成的。而系统建立在进程之上。

4.1 系统的运行原理

这一个部分主要讲述了图4-1中t1-t2(引导),t2-t3(执行引导程序)和t3-t4(进入32为模式)的三个过程。

t1-t2为引导过程,可以看如下的流程图:

当计算机系统上电后,CPU会自动把代码段的寄存器CS设置为0xf000,其段基址设置为0xffff0000,段长度被设置为64KB。而IP被设置为0xfff0,因此此时CPU代码指针指向0xfffffff0处,即4GB空间的最后64KB的最后16B处。此时是计算机系统在加电后自动完成的。然后BIOS进行一系列的硬件检测和初始化操作之后,就会把与原来系统兼容的64KB BIOS代码和数据复制到内存低端1MB末端的64KB处,然后跳转到这个地方并让CPU真正运行在实地址模式下。最后BIOS就会从硬盘或其他块设备把操作系统引导程序加载到内存0x7c00处。然后代码指针就指向0x7c00处。

t2-t3在本系统开发中是相当简单,做了两件事情。继续从软盘中加载源代码和关闭中断。也就是执行第一部分加载那部分512个字节的代码。

t3-t4在本系统开发中算是比较复杂。如图下图:

这里关掉中断的原因是防止在重置内存代码时,用户按键盘而产生I/O中断,而影响重置代码的过程。初始化GDT/LDT/IDT是为了在重开中断做准备。系统进入32位模式后将不在原生的BIOS。

t4-t5…表示系统进入32位后的具体操作,因为前面部分主要参考Linux系统的启动过程。而后面的部分,以自主设计为主,将在4.2部分描述相关的概念。

4.2 系统的功能模块描述

如第4章开头部分所描述的,操作系统基本的三个概念为进程、文件和命令解释器。在这里主要讲述进程。而把文件和命令解释器也看作是进程 。进程的结构设计如下图:

在这里要提的一个关键点是进程可以引用其它进程,这是一个复制的过程。

在考虑了进程的设计之后,接下来描述的是进程的表示。进程可以形象的表示为运行代码的过程,就像一个厨师一边看烹饪书籍(相当于代码),一边按书里的介绍做事。而在硬件中,我们对特定范围的内存的自动读取过程,看作一个进程的过程,这特定范围的内存的名字,表示进程名。

第五章 系统环境

系统开发环境主要分为两个部分:开发环境和运行环境。开发环境相关的有操作系统、汇编器、编译器等等。运行环境主要介绍了BOCHS。

5.1 开发环境

5.1.1 操作系统

操作系统 64-bit Ubuntu 11.10
处理器 Intel i5 3210M 2.5GHz
内存 DDR3

5.1.2 汇编器

本系统开发时,我使用NASM汇编器,参考nasmdoc.pdf文档。

5.1.3 编译器

本系统参考的编译器为Ubuntu/Linaro 4.6.1-9ubuntu3,即gcc 4.6.1。

5.1.4 文件管理器

本系统的文件编译管理器使用Make工具。

5.2 运行环境

5.2.1 bochs模拟器

本系统开发后生存img镜像,将它运行与bochs上。而我们对bochs的环境设置如下。

Megs 表示内存大小 32M
Romimage 表示BIOS ROM镜像文件名 BIOS-bochs-latest
Vgaromimage 表示VGA ROM 镜像文件 VGABIOS-elpin-2.40
floppya 表示软盘 myos.img
Boot 表示哪种方式启动 floppy

这些为主要的配置信息,其它如键盘,鼠标等设置为可用的,cpu方面的设置,以默认值为主。

第六章 文件结构

本系统在开发时,主要参考了linux0.12的源代码管理结构,并针对自己系统的特性,进行了有目的的增减。

  • boot文件夹:表示系统引导文件的放置位置

  • conf文件夹:表示配置文件夹的放置位置,例如bochsrc.txt

  • doc文件夹: 表示参考文档的放置目录

  • include文件夹:表示头文件的放置位置

  • init文件夹:表示系统引导后,从实模式进入32位保护模式时,对相关内容进行设置

  • kernel文件夹:表示系统的基本功能,比如进程等功能实现

  • lib文件夹:表示在系统中可调用的库

  • mm文件夹:表示对内存管理

  • pic文件夹:与doc文件夹相关,放置一些图片

  • test文件夹:用来存放一些测试文件

  • tools文件夹:表示可以放一些自定义的工具

第七章 编码与测试

这一部分主要描述了我在开发系统是用到的工具。这些工具保护版本控制工具git,文本编辑器工具emacs,调试工具gdb。

使用git的目的是因为这个东西与命令行兼容,而且还能够将代码放到github上,进行远程备份。
而对git的学习过程,也影响了我在本系统开发时的过程,而且利用git还可以对文档编辑进行版本控制。

emacs的编辑器是因为它能够用Elisp进行个性话的配置,从而代码提供编辑的效率。而且它是在Ubuntu环境中,几个比较好的c程序编辑器。多窗口能够让我更加容易的参考其它源代码。

gdb调试器算是linux中最流行的命令行调试器。在本系统编辑时,碰到不少问题,都是通过写test代码,调试test程序来实现的。在不断的试错和修改之后,才对操作系统有了更加深刻的理解。

本章主要讲得是编码,但是在这里却重点介绍了工具。似乎是南辕北辙,但我个人认为代码本质,就是设计。如果理解设计了,就可以直接去看源代码。而这里仅仅介绍我使用的相关工具和想法。

第八章 总结

模拟开发简单的个人操作系统,这个项目与其说是一个操作系统的项目,还不如说它是一个应用程序开发的过程的软件工程实践。操作系统对我个人来说实在是一个太大了。它不但只是内容范围广,例如它包括进程、文件、网络、图形图像等等内容(我在这里仅仅实现了很小的一部分),而且它所相关的工具和环境也很多,例如编译器,汇编器,make(包括这些工具的用法,及语法),cpu 的环境,输入输出设备的环境等等。这些对于一些不太了解它们的程序来说,利用它们来开发操作系统太难。这样的话,更别谈用什么开发模式,写什么的需求文档。所以由实践总结的软件工程学的使用原理如下:

  • 理解基本架构

  • 熟练工具

  • 了解基本原理

  • 定义问题

  • 分析和设计

  • 利用软件工程的技术

传统的软件工程过程分为六个步骤:可行性研究——需求分析——总体设计——详细设计——实现——维护。而很多软件工程学技术的改进都是在这六基础上。但是,这六个步骤并没有定义问题起点(或者说问题的基础)。所以会出现拥抱变化和TDD起手困难的问题。尽管拥抱变化是向未来兼容考虑,但是事实上,我们经常会碰到向未来的准备往往是没有用的。而对TDD这种测试优先的开发模式来说,编写测试用例是尤其困难。故我增加了1~5的步骤。把软件工程看作是基于已分析与设计上设计。

那么,最后我们来谈谈软件工程学的使用原则。对于一个程序员来说(可能以后去做了分析师),碰到的问题一般分为两类:业务过程非常熟悉和业务过程不甚了解。对于前者,我们就能够直接使用软件工程的技术,而对于后者,建议使用原型法,忽略所有软件工程技术的要求。而这个过程,也是重构技术的本质。总之,软件工程的使用原则是对基础情况的把握和自我能力的判断。

参考文献

[1] 汤小丹, 梁红兵, 哲凤屏, 等. 计算机操作系统[M]. 西安电子科技大学出版社, 2007.

[2] 张海藩. 软件工程导论[M]. 清华大学出版社, 1998.

[3] 郑人杰, 殷人昆, 陶永雷. 实用软件工程[M]. 清华大学出版社, 1991.

[4] Microsoft Windows http://zh.wikipedia.org/wiki/Windows

[5] Bovet D P, Cesati M. Understanding the Linux kernel[M]. O’Reilly Media, 2008.

[6] Bach M J. The design of the UNIX operating system[M]. Prentice-Hall, Inc., 1986.

[7] Tanenbaum A S, Woodhull A S, 陈渝, 等. 操作系统设计与实现: 第三版[M]. 电子工业出版社, 2007.

[8] Lions J, 尤晋元. 莱昂氏 UNIX 源代码分析[M]. 机械工业出版社, 2000.

[9] McKusick M K, Neville-Neil G V. FreeBSD 操作系统设计与实现[J]. 2006.

[10] Arnold K, Holmes D, Lindholm T, et al. Java Language Specification[J]. 2000.

[11] Stroustrup B. C++ Programming Language, 3/e[M]. Pearson Education India, 1994.

[12] Wirth N. Algorithms+ data structures= programs[M]. Prentice Hall PTR, 1978.

[13] Null L, Lobur J. Computer organization and architecture[J]. 2003.

[14] Intel I. and IA-32 Architectures Software Developer’s Manual[J]. Volume-1: Basic Architecture, 64.

[15] 赵炯. Linux 内核完全剖析: 基于 0.12 内核[M] p19-p28. 机械工业出版社, 2009.

[16] Aivazian T. Linux kernel 2.4 internals[J]. The Linux Documentation Pro, 2002.

[17] 白中英主编.《计算机组成原理》[M] p127. 北京: 科学出版社, 2008.1

[18] Silberschatz A, Galvin P B, Gagne G. Operating system concepts[M]. J. Wiley & Sons, 2009.

[19] Beck K, Andres C, 雷剑文, 等. 解析极限编程: 拥抱变化[M]. 机械工业出版社, 2011.

[20] 贝克, Beck K, 孙平平, 等. 测试驱动开发[M]. 中国电力出版社, 2004.

[21] Fowler M. 重构: 改善既有代码的设计[J]. 2003.

上传的附件 cloud_download 个人简单操作系统的实现与设计.7z ( 2.20mb, 1次下载 )
error_outline 下载需要12点积分

发送私信

只有过着不安稳得日子,日子才能不纠结

8
文章数
8
评论数
最近文章
eject