




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北科大操作系统实验报告(总19
页)--本页仅作为文档封面,使用时请直接删除即可内页可以根据需求调整合适字体及大小--操作系统实验报告学院: 计算机与通信工程学院专业:计算机与科学技术班级: 学号: 姓名: 指导教师:王成耀成绩: 2015年1月4日实验一线程的状态和转换(5分)1实验目的和要求目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。要求:(1) 跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码;(2) 修改EOS的源代码,为线程增加挂起状态。2完成的实验内容EOS线程状态转换过程的跟踪与源代码分析(分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等)5OSLabPC・MicrosoftVirtualPC2007IActionEdit~~CDFloppyHelpC0MS0LE-1(PressCtrtoswitchconsolewindou...)LoopthreadID31:932137hi3OSLabPC-MicrosoftVirtu』PC2007ActionEditCDFloppyHelpCUHSOLE-1CPressCtrl+F1™"F3toswitchconsoleuindou...JCunsumEaZZProducea£3CansuneruaitforfullProduceaZ4CansuneruaitforfullProducea25Cansuneruaitforful1Producea£6CansuneruaitforfullProducea27Consuncrunitforful1ProduceaZBCansuneruhitforfullProducea29CansiimEa23semaphoretineoutConsumeaZ4semaphoretineoutConsunea25semaphoretineoutConsumea26semaphoretineoutConsumeaZ?scnaphorctineoutConsumea28semaphoretineoutConsuneaZ3A:SEOS^pp.excexitwith0x00000000.ext,THREAD,StateListEntry);ObRefObject(PspCurrentThread);PspUnreadyThread(PspCurrentThread);PspCurrentThread->State=Running;为EOS添加时间片轮转调度的实现(给出实现方法的简要描述、源代码、测试和结果等){n",MiZeroedPageCount);fprintf(StdHandle,"FreePageCount:%d.\n",MiFreePageCount);fprintf(StdHandle,"UsedPageCount:%d.\n",MiTotalPageFrameCount-MiZeroedPageCount-MiFreePageCount);n",MiZeroedPageCount);fprintf(StdHandle,"FreePageCount:%d.\n",MiFreePageCount);fprintf(StdHandle,"UsedPageCount:%d.\n",MiTotalPageFrameCount-MiZeroedPageCount-MiFreePageCount);KeEnableInterrupts(IntState);//开中断}EOS进程逻辑地址空间分配和回收的练习以及源代码分析(练习虚拟内存的分配和回收;分析相关源代码,简要说明EOS中进程逻辑地址空间的管理方法;在应用进程中分配虚拟页和释放虚拟页的源代码、测试和结果等;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等)INT*d;if(d=VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT))//调用API函数VirtualAlloc,分配一个整型变量所需的空间,并使用一个整型变量的指针指向这个空间。printf("Allocated%dbytesvirtualmemoryof0x%x\n\n",sizeof(int),d);printf("virtualmemoryoriginalvalue:0x%x\n\n",*d);// 输出原始整型变量的值*d=0xFFFFFFFF;//修改整型变量的值为0xFFFFFFFFprintf("virtualmemorynewvalue:0x%x\n\n",*d);//输出修改后的整型变量的值printf("\nWaitfor10seconds\n");Sleep(10000);//调用API函数Sleep,等待10秒钟。系统以毫秒为单位if(VirtualFree(d,0,MEM_RELEASE))//调用API函数VirtualFree,释放之前分配的整型变量的空间printf("\nRealeasevirtualmemorysuccess!\n");elseprintf("realeaseerror\n");printf("\nEndlessloop!");for(;;){}〃进入死循环,这样应用程序就不会结束}else{printf("error\n");return-1;//若不能成功,打印error,并返回-1。}//printf("Helloworld!\n");return0;}3OSLabPC-MicrosoftVirtualPC2007ActiooEditCDFloppyHelpCONSOLE-1(PressCtrl+Fl-rBtosuitchconsoleuindou...?UclconctuEOSshell>AutorunA:SEOSApp.exeAllacated4bytesuirtualnenaryofOylGOGOuirtualmemoryoriginalualue:GxOuirtualmemorynewualueiOxffffffffLJaitforIQsecondsRealeaseuirtualmemorysuccess?Endlessloap!_5osLabPC-MicrosoftVirtualPC2007■*czActionEditCDFloppyHelp■CONSOLE-3(PressCtrPFl~FBtoswitchconsoleuinilou…)UeleonetoEOSshell>um31TotalUpnfrom16to524271.(0x10000-。航TFEFFFF)1HUadInclude1UpnFrom16to16.C0x10000-OxlOFFFJUadInclude1ZUpnFrom1024to1035.(0x406000-Gx40BFFF)TotalUpnCount:524256.Allocatedl>pnCount:13.FreeUpnCaunt:524243.>um31TotalUpnfrom16to524271.(0x10000-0航TFEFFFF)litUadInclude12UpnFromM24to1035. -缸4GBFFF)TotalUpnCount:524256.AllocatedUpnCount:1Z.FreeUpnCaunt:524244.3其他需要说明的问题//内核文件中关于函数变量的不同值会对地址空间进行不同方式的分配STATUSMiReserveAddressRegion(INPMMVAD_LISTVadList,INPVOIDBaseAddress,INSIZE_TRegionSize,OUTPMMVAD*Vad){PLIST_ENTRYListEntry;PMMVADPointerVad;ULONG_PTRStartingVpn;ULONG_PTREndVpn;ULONG_PTRSize;ASSERT(RegionSize!=0&&BaseAddress+RegionSize-1>=BaseAddress);if(NULL!=BaseAddress){StartingVpn=MI_VA_TO_VPN(BaseAddress);EndVpn=MI_VA_TO_VPN(BaseAddress+RegionSize-1);if(StartingVpn<VadList->StartingVpn||EndVpn>VadList->EndVpn){returnSTATUS_INVALID_ADDRESS;}//找到目标区域前的已保留区域P。for(ListEntry=VadList->;ListEntry!=&VadList->VadListHead;ListEntry=ListEntry->Prev){PointerVad=CONTAINING_RECORD(ListEntry,MMVAD,VadListEntry);if(PointerVad->EndVpn<StartingVpn){break;}}//如果P之后的已保留区域和目标区域重叠则返回失败。ListEntry=ListEntry->Next;if(ListEntry!=&VadList->VadListHead){PointerVad=CONTAINING_RECORD(ListEntry,MMVAD,VadListEntry);if(PointerVad->StartingVpn<=EndVpn){returnSTATUS_INVALID_ADDRESS;}}else{//从地址空间的起始端向后查找第一个满足申请大小的未保留区域。Size=(RegionSize+PAGE_SIZE-1)>>PAGE_SHIFT;StartingVpn=VadList->StartingVpn;EndVpn=StartingVpn+Size-1;if(EndVpn>VadList->EndVpn){returnSTATUS_NO_MEMORY;}for(ListEntry=VadList->;ListEntry!=&VadList->VadListHead;ListEntry=ListEntry->Next){PointerVad=CONTAINING_RECORD(ListEntry,MMVAD,VadListEntry);if(EndVpn<PointerVad->StartingVpn){break;}//跳过已保留区域向后移动。StartingVpn=PointerVad->EndVpn+1;EndVpn=StartingVpn+Size-1;////如果地址范围溢出或者超出空间范围则失败!//if(EndVpn>VadList->EndVpn){returnSTATUS_NO_MEMORY;}}}实验五读文件和写文件(2分)1实验目的和要求目的:掌握简单文件系统的实现方法,理解磁盘存储器管理的基本原理。要求:通过调用EOSAI读取文件数据,跟踪调试FAT12文件系统的读文件功能,分析EOS中FAT12文件系统的相关源代码;修改EOS的源代码,为FAT12文件系统添加写文件功能。2完成的实验内容EOS中FAT12文件系统读文件过程的跟踪与源代码分析(分析EOS中FAT12文件系统的相关源代码,简要说明EOS实现FAT12文件系统的方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等)STATUSFatRead(INPDEVICE_OBJECTDeviceObject,INPFILE_OBJECTFileObject,OUTPVOIDBuffer,INULONGRequest,OUTPULONGResult){returnFatReadFile((PVCB)DeviceObject->DeviceExtension,(PFCB)FileObject->FsContext,FileObject->CurrentByteOffset,Request,Buffer,Result);}为EOS的FAT12文件系统添加写文件功能的实现(给出实现方法的简要描述、源代码、测试和结果等)STATUSFatWriteFile(INPVCBVcb,INPFCBFile,INULONGOffset,INULONGBytesToWrite,INPVOIDBuffer,OUTPULONGBytesWriten){STATUSStatus;//由于在将新分配的簇插入簇链尾部时,必须知道前一个簇的簇号,//所以定义了“前一个簇号”和“当前簇号''两个变量。USHORTPrevClusterNum,CurrentClusterNum;USHORTNewClusterNum;ULONGClusterIndex;ULONGFirstSectorOfCluster;ULONGOffsetInSector;ULONGBytesToWritenow;ULONGBytesToWriteReady=0;ULONGi;//写入的起始位置不能超出文件大小if(Offset>File->FileSize)returnSTATUS_SUCCESS;//根据簇的大小,计算写入的起始位置在簇链的第几个簇中 ClusterIndex=Offset/FatBytesPerCluster(&Vcb->Bpb);//顺着簇链向后查找写入的起始位置所在簇的簇号。PrevClusterNum=0;CurrentClusterNum=File->FirstCluster;for(i=ClusterIndex;i>0;i--)(PrevClusterNum=CurrentClusterNum;CurrentClusterNum=FatGetFatEntryValue(Vcb,PrevClusterNum);}//如果写入的起始位置还没有对应的簇,就增加簇if(0==CurrentClusterNum||CurrentClusterNum>=0xFF8)(//为文件分配一个空闲簇FatAllocateOneCluster(Vcb,&NewClusterNum);//将新分配的簇安装到簇链中if(0==File->FirstCluster)File->FirstCluster=NewClusterNum;elseFatSetFatEntryValue(Vcb,PrevClusterNum,NewClusterNum);CurrentClusterNum=NewClusterNum;}while(BytesToWriteReady<BytesToWrite){//计算当前簇的第一个扇区的扇区号。簇从2开始计数。FirstSectorOfCluster=Vcb->FirstDataSector+(CurrentClusterNum-2)*Vcb->;//计算写位置在扇区内的字节偏移。OffsetInSector=Offset%Vcb->;i=BytesToWrite-BytesToWriteReady;if(i+OffsetInSector>=Vcb->){BytesToWritenow=Vcb->-OffsetInSector;}else{BytesToWritenow=i;}Status=IopReadWriteSector(Vcb->DiskDevice,FirstSectorOfCluster,OffsetInSector,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机油购销合同范本x(2025版)
- 加工厂劳务承包合同(2025版)
- 国际公路货物运输合同的内容范本2025年
- 2025年高校教师资格证之高等教育心理学考前冲刺试卷A卷含答案
- 网络直播行业规范化背景下的商业模式创新与产业链协同
- 2025版房地产项目备案合同模板(含备案范围及期限)
- 2025版虚拟货币交易与投资管理合同
- 2025版建筑电气安装工程竣工验收合同
- 二零二五年度共有产权住房项目买卖合同模板
- 2025版教育培训机构分期付款合同下载
- JJG 34-2008指示表(指针式、数显式)
- 人工影响天气 作业用弹药存储安全要求 征求意见稿
- 全国重点高中自主招生考试全真试卷 物理试题(一)物理试题(一)
- 制氢站安全培训课件
- 煤矿两办意见培训课件2024
- 暴聋病中医教学查房
- 肉毒中毒的疑难病例讨论护理课件
- 生产工艺验证方案(药品)
- 工业能源管理与节能技术
- 养老机构消防安全知识培训课件
- 《软件项目质量管理》课件
评论
0/150
提交评论