基于C语言的操作系统

LOSER

发布日期: 2019-06-17 16:20:51 浏览量: 890
评分:
star_border star_border star_border star_border star_border star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

项目目的

  • 通过参考、修改源码模块,实现自己的OS模块,加深对系统底层的认识

  • 理解汇编语言与底层硬件的交互

开发环境

  • 操作系统:Ubuntu 14.04

  • 虚拟机:Bochs

  • 编辑器:Vim

  • 编译器:GCC

任务描述

修改或者重新实现参考源码的一个或多个模块

系统界面

实现细节

重构alloc_imap_bit()与alloc_smap_bit()

  1. int alloc_imap_bit(int dev)//为新文件分配位置
  2. int alloc_smap_bit(int dev,int nr_sects_to_alloc)//为文件内容分配扇区空间

由于上述两个函数功能相似,可合并为一个函数,故重构,以减少重复代码。
将上述两个函数重构为:

  1. int alloc_ismap_bit(int dev,int nr_sects_to_alloc)

其中原来两个函数的第一参数相同,故保留;而<code>alloc_imap_bit()</code>不含第二参数,且<code>alloc_smap_bit()</code>的第二参数<code>nr_sects_to_alloc//要求分配的扇区数</code>不应为0,故合并后的函数保留两个参数,当<code>nr_sects_to_alloc</code>为0时转入相应代码段实现<code>alloc_imap_bit()</code>的功能,不为0时转入相应代码段实现<code>alloc_smap_bit()</code>的功能。
由此实现两个函数的合并。

实现MESSAGE收发

自行添加文件任务下的<code>MYFSMSG</code>和磁盘任务下的<code>DEV_MYFSMSG</code>两个MESSAGE。

在用户进程中调用<code>myfsmsg()</code>,此函数用于收发<code>MYFSMSG</code> MESSAGE。

文件任务接收<code>MYFSMSG</code> MESSAGE后发送<code>DEV_MYFSMSG</code> MESSAGE给磁盘任务,从而完成一次MESSAGE收发的模拟。

以下为<code>myfsmsg()</code>函数代码实现,其他相关代码略。

  1. //myfsmsg()函数代码实现
  2. PUBLIC int myfsmsg()
  3. {
  4. MESSAGE msg;
  5. msg.type = MYFSMSG;
  6. send_recv(BOTH, TASK_FS, &msg);
  7. assert(msg.type == SYSCALL_RET);
  8. return msg.FD;
  9. }

下图为文件系统测试用户进程:

其中<code>MyFSmsg gets fd=0</code>为MESSAGE收发的测试输出,
其余为文件系统创建、打开、读取、删除的测试输出。

输出磁盘信息

获取<code>hdinfo[]</code>数组,根据<a href="http://read.pudn.com/downloads97/ebook/399380/ata_atapi-6.pdf" target="\_blank">ATAPI-6文档(P115 Table-Identify device information)</a>,分别取出<code>hdinfo[]</code>数组多个元素;其中,元素为十六进制,每一位(0或1)表示不同的属性,需要通过与运算(&),提取各位的值,判断0或1,据此来判断磁盘特性,并打印输出至显示屏。

示例如下:

  1. int capabilities = hdinfo[49];
  2. printl("Timer values supported: %s\n",(capabilities & 0x2000) ? "Yes" : "No");

下图为输出节选:

修改屏幕滚动机制

源代码中,屏幕由<code>SHIFT + UP/DOWN</code>来控制屏幕信息的滚动,但是在修改中发现,如果屏幕打印信息超过一定行数时,较早打印的信息将会被清空;通过直接修改代码中<code>SCR_SIZE</code>的值,使屏幕能够容纳更多的信息,而不用担心被清空。

其他改动

美化了输出界面,使得各部分测试输出更加易于辨认,结构清晰。
修改了console相关的部分参数和常量,保证系统正常显示输出。
修改了Makefile与bochsrc,保证系统运行。


上传的附件 cloud_download 基于C语言的操作系统.zip ( 302.24kb, 6次下载 )
error_outline 下载需要5点积分

发送私信

越是憧憬,越要风雨兼程

13
文章数
9
评论数
最近文章
eject