您好,欢迎访问三七文档
《操作系统》实验报告实验题目FAT12文件系统管理的软盘学生姓名樊娇学号2013211625专业班级计算机科学与技术13-1班指导教师田卫东院系名称计算机与信息学院2016年6月8日实验11扫描FAT12文件系统管理的软盘1.实验目的与要求通过查看FAT12文件系统的扫描数据,并调试扫描的过程,理解FAT12文件系统管理软盘的方式。通过改进FAT12文件系统的扫描功能,加深对FAT12文件系统的理解。2.实验内容与步骤按照下面的步骤执行控制台命令“sd”,查看扫描的结果:1.按F7生成在本实验3.1中创建的EOSKernel项目。2.按F5启动调试。3.待EOS启动完毕,在EOS控制台中输入命令“sd”后按回车。观察命令执行的结果,如图19-1所示,可以了解FAT12文件系统的信息。3.5.2测试方法1.ConsoleCmdDir函数的源代码修改完毕后,按F7生成项目。2.在“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像。3.将本实验文件夹中的void.txt文件(大小为0)添加到软盘镜像的根目录中(将void.txt文件拖动到FloppyImageEditor窗口中释放即可)。4.点击FloppyImageEditor工具栏上的保存按钮,关闭该工具。5.按F5启动调试。6.待EOS启动完毕,在EOS控制台中输入命令“dir”后按回车。输出的内容应该与图19-3所示的内容相同,或者可以在“项目管理器”窗口中双击Floppy.img文件,////遍历所有的进程对象,输出每个进程的信息//fprintf(StdHandle,********ProcessList(%dProcess)********\n,PspProcessType-ObjectCount);fprintf(StdHandle,ID|System?|Priority|ThreadCount|PrimaryThreadID|ImageName\n);for(pListEntry=PspProcessType-ObjectListHead.Next;pListEntry!=&PspProcessType-ObjectListHead;pListEntry=pListEntry-Next){////获得对象头的指针//pObjectHeader=CONTAINING_RECORD(pListEntry,OBJECT_HEADER,TypeObjectListEntry);////对象体就是进程控制块//pProc=(PPROCESS)&pObjectHeader-Body;////输出进程的信息//fprintf(StdHandle,%d%s%d%d%d%s\n,pObjectHeader-Id,pProc-System?Y:N,pProc-Priority,ListGetCount(&pProc-ThreadListHead),ObGetObjectId(pProc-PrimaryThread),(NULL==pProc-ImageName)?N\\A:pProc-ImageName);}////遍历所有的线程对象,输出每个线程的信息//fprintf(StdHandle,\n********ThreadList(%dThread)********\n,PspThreadType-ObjectCount);fprintf(StdHandle,ID|System?|Priority|State|ParentProcessID|StartAddress\n);for(pListEntry=PspThreadType-ObjectListHead.Next;pListEntry!=&PspThreadType-ObjectListHead;pListEntry=pListEntry-Next){////获得对象头的指针//pObjectHeader=CONTAINING_RECORD(pListEntry,OBJECT_HEADER,TypeObjectListEntry);////对象体就是线程控制块//pThread=(PTHREAD)&pObjectHeader-Body;////将线程状态转换为字符串//switch(pThread-State){caseZero:ThreadState=Zero;break;caseReady:ThreadState=Ready;break;caseRunning:ThreadState=Running;break;caseWaiting:ThreadState=Waiting;break;caseTerminated:ThreadState=Terminated;break;;default:ThreadState=Undefined;}////输出线程的信息//fprintf(StdHandle,%d%s%d%s%d0x%X\n,pObjectHeader-Id,pThread-Process-System?Y:N,pThread-Priority,ThreadState,ObGetObjectId(pThread-Process),pThread-StartAddr);}KeEnableInterrupts(IntState);//开中断}3.问题与分析在ConsoleCmdScanDisk函数中扫描FAT表时,为什么不使用FAT表项的数量进行计数,而是使用簇的数量进行计数呢?而且为什么簇的数量要从2开始计数呢?2.在ConsoleCmdScanDisk函数中扫描FAT表时,统计了空闲簇的数量,然后使用簇的总数减去空闲簇的数量做为占用簇的数量,这种做法正确吗?是否还有其他类型的簇没有考虑到呢?修改ConsoleCmdScanDisk函数,统计出各种类型簇的数量。3.在FAT12文件系统中,删除一个文件只是将文件对应的目录项中文件名的第一个字节修改为0xE5,尝试修改“dir”命令函数ConsoleCmdDir的源代码,不但能够输出现有文件的信息,还能够输出已经被删除文件的信息,被删除文件的信息可以包括文件名、大小、最后改写日期、起始簇号等信息。考虑一下这种删除文件方式的优点和缺点。4.在软盘映像文件的根目录中新建一个文件夹后,尝试执行“dir”命令,看看输出的信息中是否包含文件夹的信息。修改函数ConsoleCmdDir的源代码,尝试在打印输出的信息中能够区分出哪些是文件,哪些是文件夹。5.尝试为EOS操作系统添加一个命令“delFILENAME”,使用此命令,可以将由参数“
本文标题:操作系统
链接地址:https://www.777doc.com/doc-4904292 .html