用函数简化一卡通系统c语言,课内资源

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

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

开发环境操作系统:Ubuntu 14.04

虚拟机:Bochs

编辑器:Vim

编译器:GCC

任务描述

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

系统界面

639e58ce7aef7b1ffc99aa00bec0fb49.png

21deacf5556a0fc75633627e18b4e41e.png

实现细节

重构alloc_imap_bit()与alloc_smap_bit()intalloc_imap_bit(intdev)//为新文件分配位置

intalloc_smap_bit(intdev,intnr_sects_to_alloc)//为文件内容分配扇区空间

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

将上述两个函数重构为:

intalloc_ismap_bit(intdev,intnr_sects_to_alloc)

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

由此实现两个函数的合并。

实现MESSAGE收发

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

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

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

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

//myfsmsg()函数代码实现

PUBLICintmyfsmsg()

{

MESSAGE msg;

msg.type=MYFSMSG;

send_recv(BOTH,TASK_FS,&msg);

assert(msg.type==SYSCALL_RET);

returnmsg.FD;

}

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

其中MyFSmsg gets fd=0为MESSAGE收发的测试输出,

其余为文件系统创建、打开、读取、删除的测试输出。

21deacf5556a0fc75633627e18b4e41e.png

输出磁盘信息

获取hdinfo[]数组,根据ATAPI-6文档(P115 Table-Identify device information),分别取出hdinfo[]数组多个元素;其中,元素为十六进制,每一位(0或1)表示不同的属性,需要通过与运算(&),提取各位的值,判断0或1,据此来判断磁盘特性,并打印输出至显示屏。

示例如下:

intcapabilities=hdinfo[49];

printl("Timer values supported: %s\n",(capabilities&0x2000)?"Yes":"No");

下图为输出节选:

639e58ce7aef7b1ffc99aa00bec0fb49.png

修改屏幕滚动机制

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

其他改动

美化了输出界面,使得各部分测试输出更加易于辨认,结构清晰。

修改了console相关的部分参数和常量,保证系统正常显示输出。

修改了Makefile与bochsrc,保证系统运行。

21deacf5556a0fc75633627e18b4e41e.png

639e58ce7aef7b1ffc99aa00bec0fb49.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值