您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 计算机操作系统实验报告
院系:计算机科学学院专业:计算机科学与技术年级:2011级课程名称:计算机操作系统指导教师:张辉学号:姓名:2014年12月10日年级2011级专业计算机科学与技术班级组号实验室9#206日期实验名称计算机操作系统实验实验内容分项内容实验级别实验一操作系统实验环境熟悉(Linux操作命令、Linux/Windows平台编程工具)操作系统使用级实验二进程控制操作系统观察级原码阅读与系统编程级实验三进程同步与通信管理操作系统使用级实验四虚拟内存管理操作系统观察级实验五文件系统与磁盘管理操作系统管理级原码阅读与系统编程级小组成员姓名学号组内分工自我评分教师评分小组成绩评定教师签名:年月日实验分项1操作系统实验环境熟悉(Linux操作命令、Linux/Windows平台编程工具)实验目的1、熟练掌握linux系统下的常用命令。2、windows平台下IDE中API的使用。实验要求具体题目实验一操作系统实验环境熟悉(Linux操作命令、Linux/Windows平台编程工具)系统平台Linux/Windows平台编程工具实验原理步骤(算法流程)Linux基本操作介绍:(1)Linux系统基本操作(启动与退出、文件和目录操作、文档备份与压缩、联机帮助等)pwd命令:此命令显示出当前工作目录的绝对路径,cd命令:改变工作目录。mkdir命令:创建一个目录。rmdir命令:删除空目录。cat命令:将文件的内容打印输出到显示器或终端窗口上。cp命令:将给出的文件或目录拷贝到另一文件或目录中。mv命令:为文件或目录改名或将文件由一个目录移入另一个目录中。rm命令:删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。ls命令:列出目录的内容。chmod命令:用于改变文件或目录的访问权限。sort命令:对文件中的各行进行排序。gzip命令:对文件进行压缩。unzip命令:用于解扩展名为.zip的压缩文件。tar命令:为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。(2)gcc的使用:gcc是linux系统的C编译器,将C/C++源程序和目标程序编译并调用链接程序ld生成可执行文件。例如:gcc–ohellohello.c#生成可执行文件hellog++命令的使用:完成C++程序的编译和链接,可以自动的完成目标代码与C++库的链接并生成可执行程序。例如:g++hello.C#hello.C是一个C++文件,生成可执行程序a.out实验原理步骤(算法流程)3)gdb命令的使用:gdb是linux系统的调试工具,是用来调试C或C++程序的功能强大的调试器,它使用户能在程序运行的时候观察程序的内部结构和内存的使用情况,它提供了一些功能:(1)监视或修改程序中变量的值;(2)设置断点,使程序指定的代码行上暂停执行;(3)单步执行或程序跟踪。例如:1.编译时使用调试参数-gcc–g–omypf1.cf2.cf3.c2.启动gdb:gdbmyp3.设置断点:(gdb)break7#在第七行设置断点4.开始执行:(gdb)run5.程序继续执行直到结束:(gdb)continue6.退出gdb:(gdb)quit实验结果及分析译时使用调试参数启动gdb设置断点开始执行.程序继续执行直到结束退出gdb心得体会1.因为有linux操作系统课程,本次实验内容比较轻松;2.复习了linux常用的指令,对shell也进一步熟悉;3.在对文件操作过程中出现较多问题,主要是在路径和文件命名上;4.掌握了linux的文件系统的基本结构。实验分项2实验二进程控制实验目的熟悉linux和windows下进程的管理,包括创建,睡眠,销毁等。实验要求具体题目1Linux系统常用进程管理命令的使用(操作系统观察级)2Linux系统常用进程创建与管理的系统调用(原码阅读与系统编程级)3Windows平台常用进线程控制API(原码阅读与系统编程级)系统平台LinuxWindows实验原理步骤(算法流程)#includesys/types.h#includeunistd.h#includeerrno.h#includestdio.hintmain(){pid_tret;intstatus,i,role=-1;ret=fork();if(ret0){printf(Parent:thisistheparentprocess(pid%d)\n,getpid());for(i=0;i6;i++){printf(Parent:Atcount%d\n,i);sleep(2);}ret=wait(&status);role=0;}elseif(ret==0){printf(Child:thisistheChildprocess(pid%d)\n,getpid());for(i=0;i6;i++){printf(Child:Atcount%d\n,i);sleep(2);}role=1;}else{printf(Parent:Errortryingtofork()(%d)\n,errno);}实验原理步骤(算法流程)printf(%s:Exiting...\n,((role==0)?Parent:Child));ntmain(intargc,char*argv[]){//用来存放快照进程信息的一个结构体PROCESSENTRY32pe32;//如果想进一步了解可以查看API文档pe32.dwSize=sizeof(pe32);//给系统内的所有进程拍照HANDLEhProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//快照中包含进程列表if(hProcessSnap==INVALID_HANDLE_VALUE){printf(CreateToolhelp32Snapshot调用失败!\n);return-1;}//遍历进程快照,轮流显示每个进程信息BOOLbMore=::Process32First(hProcessSnap,&pe32);//从第一个开始while(bMore){printf(进程ID为:%u,pe32.th32ProcessID);printf(进程名称为:%s\n,pe32.szExeFile);bMore=::Process32Next(hProcessSnap,&pe32);//遍历下一个}::CloseHandle(hProcessSnap);//清除snapshot对象cin.get();return0;intAPIShellExecute(){cin.get();coutShellExecute(NULL,\open\,\NotePad\,NULL,NULL,SW_RESTORE)endl;ShellExecute(NULL,open,NotePad,NULL,NULL,SW_RESTORE);cin.get();coutShellExecute(NULL,\open\,\\.\\test.txt\,NULL,NULL,SW_RESTORE)endl;ShellExecute(NULL,open,\.\\test.txt,NULL,NULL,SW_RESTORE);cin.get();coutShellExecute(NULL,\open\,\Calc\,NULL,NULL,SW_RESTORE)endl;ShellExecute(NULL,open,Calc,NULL,NULL,SW_RESTORE);cin.get();coutShellExecute(NULL,\explore\,\D:\,NULL,NULL,SW_RESTORE)endl;ShellExecute(NULL,explore,D:,NULL,NULL,SW_RESTORE);}//---------------------------------------------------------------------------/*BOOLCreateProcess(LPCTSTRlpApplicationName,//pointertonameofexecutablemoduleLPTSTRlpCommandLine,//pointertocommandlinestringLPSECURITY_ATTRIBUTESlpProcessAttributes,//pointertoprocesssecurityattributesLPSECURITY_ATTRIBUTESlpThreadAttributes,//pointertothreadsecurityattributesBOOLbInheritHandles,//handleinheritanceflagDWORDdwCreationFlags,//creationflagsLPVOIDlpEnvironment,//pointertonewenvironmentblockLPCTSTRlpCurrentDirectory,//pointertocurrentdirectorynameLPSTARTUPINFOlpStartupInfo,//pointertoSTARTUPINFOLPPROCESS_INFORMATIONlpProcessInformation//pointertoPROCESS_INFORMATION);*/intCreateProcess(){cin.get();coutCreateProcessendl;STARTUPINFOsi;ZeroMemory(&si,sizeof(STARTUPINFO));si.cb=sizeof(STARTUPINFO);PROCESS_INFORMATIONpi;BOOLfCreated=CreateProcess(C:\\ProgramFiles\\MicrosoftOffice\\OFFICE11\\WinWord.exe,NULL,NULL,NULL,FALSE,CREATE_NEW_PROCESS_GROUP,NULL,NULL,&si,&pi);}实验结果及分析进程调用和创建Window系统下的API当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样.当然创建两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork的返回值.当fork掉用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则fork的返回值有重要的作用.对于父进程fork返回子进程的ID,而对于fork子进程返回0.我们就是根据这个返回值来区分父子进程的.父进程为什么要创建子进程呢?前面我们已经说过了Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源.有时进程为了早一点完成任务就创建子进程来争夺资源.一旦子进程被创建,父子进程一起从fork处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻塞直到子进程完成任务.这个时候我们可以调用wait或者waitpid系统调用心得体会1.了解PCB的基本结构和使用方法;2.分析清楚线程和进程之间的区别,也了解父进程和子进程之间的调用关系3.同时也复习了gcc和gdb指令的使用;4.了解掌握在linux系统中近程的创建和销毁。实验分项3实验三进程同步与通信管理实验目的1.了解掌握进程同步和互斥原理2.掌握简单进程通信原理实验要求具体题目读者写者问题,哲学家进餐,管道系统平台Windows平台,Linux平台实验原理步骤(算法流程)intmain(intargc,char*argv[]){HANDLErMutex;//用于互斥访问count的信号量HANDLEwMutex;//用
本文标题:计算机操作系统实验报告
链接地址:https://www.777doc.com/doc-3353306 .html