当前位置:文档之家› 2011193183何兰芳操作系统实验三

2011193183何兰芳操作系统实验三

2011193183何兰芳操作系统实验三
2011193183何兰芳操作系统实验三

2011193183何兰芳操作系统实验三

数计学院教师实验教案

班级:软件工程1111班学号:2011193183 姓名:何兰芳一、实验项目名称:

Windows 2000/XP 虚拟存储管理

二、实验目的和要求:

目的:了解Windows 2000/XP系统中虚拟存储器的实现过程。

任务:对Windows 2000/XP系统中内存分配、内存管理方法、地址映射的过程进行实例分析,了解Windows XP系统虚拟内存的标准设置方法。

三、实验内容

手动设置虚拟内存

1、普通设置虚拟内存法

2、精准设置法虚拟内存

3、测试虚拟内存的使用比率

四、实验原理:

1、什么是虚拟内存

虚拟内存是计算机系统内存管理的一种技术。虚拟内存是用硬盘空间做内存来弥补计算机RAM空间的缺乏。内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。

2、如何设置虚拟内存

1.运行“perfmon.msc”打开性能监视器,展开左侧的性能日志和警报,并点击选择记数器日志,在右侧的面板中空白处点击鼠标右键,选择新建日志设置,并命名为Pagefile,然后回车确认。

2.在常规选项卡下,点击添加记数器按钮,在新弹出的窗口的性能对

象下拉菜单中选择Paging File,并选择“从列表选择记数器”,然后点击% Usage Peak,在范例中选择“_Total”,并接着点击“添加”按钮。

3.然后关闭这个窗口,并点击图三中的“确定”按钮。点击“是”创建日志文件。接着打开“日志文件”选项卡,在日志文件类型下拉菜单中选则“文本文件(逗号分隔)”,然后记住“例如”框中显示的日志文件的路径。

4.这样,点击确定后这个记数器已经开始运行了,你可以在电脑上进行你的日常操作,并尽可能多的打开和关闭各种经常使用的应用程序和游戏。经过几个小时的使用,基本上记数器已经可以对你的使用情况做出一个完整的评估。

5.这时你需要先停止这个记数器的运行,同样是在记数器日志窗口中,选中我们新建的Page File记数器,然后右键点击,并且选择停止。用记事本打开日志文件。

6.需要注意的是,在日志中的数值并不是分页文件的使用量,而是使用率。也就是说,根据日志文件的显示,该系统一般情况下的分页文件只使用了25%左右,而系统当前设置的分页文件足有2GB,那么为了节省硬盘空间,完全可以把分页文件最大值缩小为512MB大小。而对于最小值,可以先根据日志中的占用率求出平均占用率,然后再与最大值相乘,就可以得到了。

五、实验步骤:

1、虚拟内存的普通设置方法

①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选择“属性”选项打开“系统属性”窗口。在窗口中点击“高级”选项卡,出现高级设置的对话框;

②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框;

③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值(500M)填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效;(建议:可以划分出一个小分区专门提供给虚拟内存、IE临时文件存储等使用,以后可以对该分区定期进行磁盘整理,从而能更好提高计算机的工作效率。)

2、精准设置虚拟内存及测试虚拟内存的使用比率

①先将虚拟内存自定义的“初始大小”、“最大值”设为两个相同的数值,比如500MB;

②然后依次打开“控制面板→管理工具→性能”,在出现的“性能”对话框中,展开左侧栏目中的“性能日志和警报”,选中其下的“计数器日志”,在右侧栏目中空白处点击右键,选择右键菜单中的“新建日志设置”选项;

③在弹出的对话框“名称”一栏中填入任意名称,比如“虚拟内存测试”。在出现窗口中点击“添加计数器”按钮进入下一个窗口;

④在该窗口中打开“性能对象”的下拉列表,选择其中的“Paging File”,勾选“从列表中选择计数器”,并在下方的栏目中选择“%Usage Peak”;勾选“从列表中选择范例”,在下方的栏目中选择“_Total”,再依次点击“添加→关闭”结束(如图所示)。

⑤为了能方便查看日志文件,可打开“日志文件”选项卡,将“日志文件类型”选择为“文本文件”,最后点击“确定”按钮即可返回到“性能”主界面;

⑥在右侧栏目中可以发现多了一个“虚拟内存测试”项目,如果该项目

为红色则说明还没有启动,点击该项,选择右键菜单中的“启动”选项即可(如图所示)。

⑦接下来运行自己常用的一些应用程序,运行一段时间后,进入日志文件所在的系统分区下默认目录“PerfLogs”,找到“虚拟内存测试_000001.csv”并用记事本程序打开它(如下图),在该内容中,查看每一栏中虚拟内存的使用比率,找到这项数值的最大值,比如图中的“46”,用46%乘以500MB(前面所设定的虚拟内存数值),得出数值为230MB。

⑧用该数值可以将最小值初始大小设为230MB,而最大值可以根据磁盘空间大小自由设定,一般建议将它设置为最小值的2到3倍。这样我们就可以将虚拟内存打造得更精准,使自己的爱机运行得更加流畅、更具效率了。

实验结果:

经过亲自试验后,我得出的最佳结果是900MB;

六、参考文献:

1、《操作系统教程》,第3版,孙钟秀主编,高等教育出版社。

2、《计算机操作系统教程习题解答与实验指导书》,第2版,张尧学编著,清华大学出版社。

3、《操作系统实验与课程设计》,庞丽萍编,华中科技大学出版社。

操作系统实验三

计算机操作系统实验报告 实验内容: P、V原语的模拟实现 实验类型:验证型 指导教师:毕国堂 专业班级: 姓名: 学号: 实验地点:东6E507 实验时间:2017/10/23

一、实验目的 1.理解信号量相关理论 2.掌握记录型信号量结构 3.掌握P、V原语实现机制 二、实验内容 1.输入给定的代码 2.进行功能测试并得出证正确结果 三、实验要求 1.分析signal和wait函数功能模块 ●Signal函数 在进行资源增加时,首先判断增加的资源是否存在,如果不存在则报错 并结束函数;如果存在则将需要增加的资源数量加一,然后再判断增加 后的资源数是否大于0,如果大于0则表示之前等待队列为空,没有需 要分配的进程;如果增加后的资源不大于0,表示之前等待队列中存在 进程,则将队首的进程取出并将资源分给该进程。 ●Wait 函数 在执行wait函数时,先判断请求的资源和进程是否存在,如果不存在则 报错提示;如果存在则将对应资源的资源数减一,然后判断减少后的资 源数是否小于0,如果小于0,表示该资源等待队列为空,可直接将资源 分配给请求的进程;如果不小于0则表示之前资源的等待队列不为空, 则将请求的进程插在等待队列最后。 2.画出signal和wait函数流程图

3.撰写实验报告 四、实验设备 1.PC机1台安装visual c++ 6.0 五、测试

1.首先将所有的资源分配完 2.这时再请求资源时就会出现等待现象 3.此时增加一个资源s0,则进程1对s0的等待结束直接获取资源s0 4.当再增加资源s0、s1时则进程1也结束对资源s1的等待,并且s0资源 为有空闲状态 六、实验思考 1.如何修改wait操作,使之能一次申请多个信号量? wait函数传入一个进程号和多个资源名,在wait函数中使用循环依

操作系统实验报告三

课程实验报告 课程名称姓名实验名称实验目的及要求 实验3进程并发与同步 1、加深对进程概念的理解,区分进程并发执行与串行执行; 2、掌握进程并发执行的原理,理解进程并发执行的特点; 3、了解fork()系统调用的返回值,掌握用fork()创建进程的方法;熟悉wait、exit等系统调用; 4、能利用相应的系统调用实现进程树与进程间的同 步。 实 验操作系统:linux Un bu ntu 11.10 环 境实验工具:Vmware 实验内容 1、编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father ”,儿子进 程执行时屏幕显示“ I am son ",女儿进程执行时屏幕显示“ I am daughter ”。 要求多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。要求有运行结果截图与结果分析 2、连续4个fork()的进程家族树,family1-1.c 程序清单如下: #in clude main () { fork(); fork(); fork(); fork(); printf( A\n ”); } 请根据程序运行结果,画出进程家族树,并分析原 因。

3、 修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束, 才可以输出消息。 写出相应的同 步控制,并分析运行结果。 4、 创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 写出相应的程序代码并分析程序运行结果。 1、编写一 C 语言程序,实现在程序运行时通过系统调用 fork()创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“ I am father ”, 儿子进程执行时屏幕显示“ I am son ”,女儿进程执行时屏幕显示“ I am daughter "。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 法 描 述 及 实 验 步 骤 调 试过 程及实 验结果

操作系统实验页面置换算法C++代码

#include #include #include /*全局变量*/ int mSIZE; /*物理块数*/ int pSIZE; /*页面号引用串个数*/ static int memery[10]={0}; /*物理块中的页号*/ static int page[100]={0}; /*页面号引用串*/ static int temp[100][10]={0}; /*辅助数组*/ /*置换算法函数*/ void FIFO(); void LRU(); void OPT(); /*辅助函数*/ void print(unsigned int t); int main() { int i,k,code; printf(" ╔═══════════════╗\n"); printf(" ║页面置换算法║\n"); printf(" ╚═══════════════╝\n"); printf("请输入物理块的个数(M<=10):"); scanf("%d",&mSIZE); printf("请输入页面号引用串的个数(P<=100):"); scanf("%d",&pSIZE); puts("请依次输入页面号引用串(连续输入,无需隔开):"); for(i=0;i

操作系统实验实验1

广州大学学生实验报告 1、实验目的 1.1、掌握进程的概念,明确进程的含义 1.2、认识并了解并发执行的实质 2.1、掌握进程另外的创建方法 2.2、熟悉进程的睡眠、同步、撤消等进程控制方法 3.1、进一步认识并发执行的实质 3.2、分析进程竞争资源的现象,学习解决进程互斥的方法 4.1、了解守护进程 5.1、了解什么是信号 5.2、INUX系统中进程之间软中断通信的基本原理 6.1、了解什么是管道 6.2、熟悉UNIX/LINUX支持的管道通信方式 7.1、了解什么是消息 7.2、熟悉消息传送的机理 8.1、了解和熟悉共享存储机制 二、实验内容 1.1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 1.2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及 'son ……',父进程显示'parent ……',观察结果,分析原因。 2.1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容 2.2、利用wait( )来控制进程执行顺序 3.1、修改实验(一)中的程序2,用lockf( )来给每一个进程加锁,以实现进程之间的互斥 3.2、观察并分析出现的现象 4.1、写一个使用守护进程(daemon)的程序,来实现: 创建一个日志文件/var/log/Mydaemon.log ; 每分钟都向其中写入一个时间戳(使用time_t的格式) ; 5.1、用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 5.2、用软中断通信实现进程同步的机理

操作系统实验报告三

课程实验报告

3、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的同步控制,并分析运行结果。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。写出相应的程序代码并分析程序运行结果。 算法描述及实验步骤 1、编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”, 儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。 调试过程及实验结果

总结 1、实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。这一点需要注意。返回结果时,由于每一次的不确定性,所以要想得到比较具有说服性的,就必须经过多次的测试。 2、连续4个fork()的进程家族树在进行实验的时候可能会出现进程输出信息一直一样的情况,需要多次执行输出才有可能会看到输出结果不一样的情况

操作系统-实验三

操作系统-实验三 文件系统的用户界面 一、实验目的 进一步理解、使用和掌握文件的系统调用、文件的标准子例程,能利用和选择这些基本的文件操作完成复杂的文件处理工作。 二、实验题目 1.编写一个文件复制的C语言程序:分别使用文件的系统调用read(fd, buf, nbytes), write(fd, buf, nbytes)和文件的库函数fread(buf, size, nitems, fp), fwrite(buf, size, nitems, fp),编写一个文件的复制程序(文件大小>1M ),文件可以编一个C 程序来生成,或使用/usr/bin下的二进制执行文件。 调用格式例如: copy file1 file2 #include main(int argc, char*argv[]) { … fd1=open(argv[1], O_RDONLY); //系统调用 creat (argv[2], 0660); fd2=open(argv[2], O_WRONL Y); while((n=read(fd1, buf, BUFSIZE))>0) write(fd2, buf, n); … main带参的调用方法例(含测试时间): time ./mycp infile outfile 流文件的实验程序请参考该程序完成。

上述函数中nbytes, size和nitems都取值为1时(即一次读写一个字节),比较系统调用和流文件两种程序的执行效率。当nbytes取4096字节,size取1字节且nitems取4096时(即一次读写4096字节),再次比较这两种程序的执行效率(文件大小>1M)。如: 创建大文件的方法之一,比如用creat 创建一个新文件,用open写打开该文件,用lseek将写指针移到很远处,写入随便一个字符。比如移动0x100000,用write写个“1”,就会得到一个1M大小的文件。也可到Linux的/usr/bin找一个1~3M左右的大的执行文件。 对于单独使用的速度较快的计算机,文件要10M~100M。 2.编写一个父子进程之间用无名管道进行数据传送的C程序。父进程逐一读出一个文件的内容,并通过管道发送给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。 3.在两个用户的独立程序之间,使用有名管道,重新编写一个C程序,实现题2的功能。 三、源代码 1.编写一个文件复制的C语言程序:分别使用文件的系统调用read(fd, buf, nbytes), write(fd, buf, nbytes)和文件的库函数fread(buf, size, nitems, fp), fwrite(buf, size, nitems, fp),编写一个文件的复制程序。 程序一 #define BUFSIZE 4096 #include #include #include #include int main(int argc, char *argv[]) { printf("这个是一次4096个字节的运行结果:\n");

Windows操作系统实验三实验报告

Windows操作系统C/C++ 程序实验 姓名:___________________ 学号:___________________ 班级:___________________ 院系:___________________ ______________年_____月_____日

实验三Windows 2000/xp线程同步 一、背景知识 二、实验目的 在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000/xp线程同步的理解。 1) 回顾系统进程、线程的有关概念,加深对Windows 2000/xp线程的理解。 2) 了解事件和互斥体对象。 3) 通过分析实验程序,了解管理事件对象的API。 4) 了解在进程中如何使用事件对象。 5) 了解在进程中如何使用互斥体对象。 6) 了解父进程创建子进程的程序设计方法。 三、工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 您需要做以下准备: 1) 一台运行Windows 2000/xp Professional操作系统的计算机。 2) 计算机中需安装V isual C++ 6.0专业版或企业版。 四、实验内容与步骤 1. 事件对象 清单4-1程序展示了如何在进程间使用事件。父进程启动时,利用CreateEvent() API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。在创建时,子进程通过OpenEvent() API打开事件对象,调用SetEvent() API使其转化为已接受信号状态。两个进程在发出信号之后几乎立即终止。 步骤1:登录进入Windows 2000/xp Professional。 步骤2:在“开始”菜单中单击“程序”-“Microsoft V isual Studio 6.0”–“Microsoft V isual C++ 6.0”命令,进入V isual C++窗口。 步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-1.cpp。 步骤4:单击“Build”菜单中的“Compile 3-1.cpp”命令,并单击“是”按钮确认。系统

操作系统实验六磁盘调度算法正确C代码

操作系统实验六磁盘调度算法正确C代码 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

《操作系统》实验报告 【实验题目】:磁盘调度算法 【实验目的】 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。【实验内容】 问题描述: 设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。 程序要求如下: 1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。 2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。 3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。 4)输出:每种算法的平均寻道长度。 实验要求:

1) 上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程; 2) 上机时独立编程、调试程序; 3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。 实验代码: #include #include #include<> using namespace std; const int MaxNumber=100; int TrackOrder[MaxNumber]; int MoveDistance[MaxNumber];//移动距离 int FindOrder[MaxNumber];//寻好序列 double AverageDistance;//平均寻道长度 bool direction;//方向 true时为向外,false为向里 int BeginNum;//开始磁道号 int M=500;//磁道数 int N;//提出磁盘I/O申请的进程数 int SortOrder[MaxNumber];//排序后的序列 bool Finished[MaxNumber]; void Inith() { cout<<"请输入提出磁盘I/O申请的进程数: "; cin>>N; cout<<"请依次输入要访问的磁道号: "; for(int i=0;i>TrackOrder[i]; for(int j=0;j

操作系统实验报告 实验三

昆明理工大学信息工程与自动化学院学生实验报告 (2012 —2013 学年第二学期) 课程名称:操作系统开课实验室:信自楼445 2013 年 5 月 16 日 一、实验要求 对给定的一个页面走向序列,请分别用先进先出算法和二次机会算法,计算淘汰页面的顺序、缺页次数和缺页率,具体的页面走向可参考教材例题或习题。 二、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。通过本次实验,要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解,通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 三、实验原理及基本技术路线图(方框原理图) 用C或C++语言模拟实现请求式分页管理。要求实现:页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。 提示:可先用动态申请的方式申请一大块空间,然后假设该空间为内存区域,对该空间进行

流程图:

数据结构定义: 我提供定义了两个类。第一个类就是页面类,在这类里面包括一些重要的数据成员。

有页号(page_no),页框号(frame_no),页面是否在内存的标志(flag(1表示在内存,0表示不在内存)),访问次数(times)。另一个类是进程控制块类PCB。类的数据成员有id(进程编号),name(进程名),size(进程大小),*p(页类指针)。在本类中,有一些成员函数:构造函数(用来初始化本类的所有数据),displayPCB(输出函数),convert(地址映射函数),allocation(分配函数),restore(回收函数)。另外还有一些类外的函数:initMemorySpace(初始化内存空间的函数),displayMemorySpace(输出内存空间的状态1(表示占用)0(表示空))。 四、所用仪器、材料(设备名称、型号、规格等)。 计算机一台 五、实验方法、步骤 程序代码: #include #include #include using namespace std; const int frame_size=1024;//页框长度,固定为 1k const int page_size=1024;//页面长度,固定为 1k const int memory_size=102400;//内存容量,固定为 100k const int frame_number=memory_size/frame_size;// 100k/1k=100 frames int *memory;//指针变量,用来存内存的状态1还是0。 void initMemorySpace()//初始化内存空间 { int i,ran,times; time_t t;//定义time_t对象 t t=time(0); srand(t);//随机改变每秒 times=0;//变量times初始化为0,变量的功能是检查内存空间是否有一半空了没。 memory=new int[frame_number];//申请内存空间,有frame_number 这么大的空间 for(i=0;i

操作系统B2-上机实验-进程

实验二Linux 进程实验 姓名:段叶叶班级:信息1302 学号:07131052 地点:东区实验室FF109 时间:2014年10月13日星期一 成绩: 一、实验内容 1.创建进程的系统调用fork(); 2.创建进程的系统调用vfork(); 3.执行新程序的系统调用exec(); 4.等待进程结束的系统调用wait()或waitpid()。 前三题必做,最后一题选做。 二、实验目的 熟悉进程的系统调用。 三、实验环境 登陆Linux虚拟机,进入Linux shell,提示符为$,表示普通用户提示符。 四、实验题目 1. 【题目】:编写程序forkgrandchild.c,用来创建孙子进程。 【要求】:在读懂程序forktest.c的基础上,编写程序 forkgrandchild.c(forkgrandchild.c创建在用户名(如wm)目录下的process 目录下),所创建的程序forkgrandchild.c可实现创建孙子进程,并显示孙子进程的pid,其父进程的pid,forkgrandchild.c要求可读性好,用户界面友好。 【预备知识】: 1)Linux进程状态 ●运行状态:程序正在运行或在运行队列中等待运行。 ●可中断等待状态:进程正在等待某个事件完成,等待过程可被信号或定时器 唤醒。 ●不可中断等待状态:进程正在等待某个事件完成,不可被信号或定时器唤醒, 必须等待事件的发生,才可唤醒。 ●僵死状态:进程已终止,但进程描述符依然存在,直到父进程调动wait()函 数后释放。 ●停止状态:进程因收到SIGSTOP SIGSTP SIGTIN SIGTOU信号后停止运行 或该进程正在被跟踪(调式程序时)。

操作系统实验

操作系统实验报告

实验一进程控制与描述 一、实验目的 通过对Windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows 2000中进程的“一生”。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Windows 2000 Professional、Visual C++ 6.0企业版。 三、实验内容和步骤 第一部分(共三个程序): Windows 2000 Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI 应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。 程序1-1 # include # pragma comment(lib, “user32.lib” ) int APIENTRY WinMain(HINSTANCE /* hInstance */ , HINSTANCE /* hPrevInstance */, LPSTR /* lpCmdLine */, int /* nCmdShow */ ) { :: MessageBox( NULL, “Hello, Windows 2000” , “Greetings”, MB_OK) ; return(0) ; } 实验结果 然后改变参数,运行结果如下:

1-2显示了当前进程的优先级: 1-3进一步显示进程的具体情况: 第二部分:进程的“一生”(共三个程序) 1、创建进程 本程序展示的是一个简单的使用CreateProcess() API函数的例子。首先形成简单的命令行,提供当前的EXE文件的指定文件名和代表生成克隆进程的号码。大多数参数都可取缺省值,但是创建标志参数使用了:BOOL bCreateOK标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。然后该克隆进程的创建方法关闭传

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

操作系统实验全(五个)

操作系统试验指导 —. 课程的性质、目的和任务 操作系统在整个计算机系统软件中占有中心地位。其作用是对计算机系统进行统一的调度和管理,提供各种强有力的系统服务,为用户创造既灵活又方便的使用环境。本课程是计算机及应用专业的一门专业主干课和必修课。通过本课程的学习,使学生掌握操作系统的基本概念、设计原理及实施技术,具有分析操作系统和设计、实现、开发实际操作系统的能力。 二. 实验的意义和目的 操作系统是计算机专业学生的一门重要的专业课程。操作系统质量对整个计算机系统的性能和用户对计算机的使用有重大的影响。一个优良的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 三.实验运行环境及上机前的准备 实验运行环境: C语言编程环境 上机前的准备工作包括: ●按实验指导书要求事先编好程序; ●准备好需要输入的中间数据; ●估计可能出现的问题; ●预计可能得到的运行结果。 四. 实验内容及安排 实验内容包括进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法五个实验。每个实验介绍了实习的目的要求、内容和方法。

操作系统实验三 进程的创建#(精选.)

操作系统 实验报告 哈尔滨工程大学 软件学院

第一讲实验环境的使用 一、实验概述 1. 实验名称 进程的创建 2. 实验目的 练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。 调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。 3. 实验类型(验证、设计) 验证 4. 实验内容

二、实验环境 操作系统:windows xp 编译环境:OS Lab 语言:汇编语言、C语言 三、实验过程(每次实验不一定下面6条都写,根据实际情况定) 1.设计思路和流程图

main函数流程图 2. 需要解决的问题及解答 (1)在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。提示:可以使用PROCESS_INFORMATION类型定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。 答:后文中,有此题解决方案。 尝试根据之前对PsCreateProcess函数和PspCreateProcessEnvironment函数执行过程的跟踪调试,绘制一幅进程创建过程的流程图。

PspCreateThread创建 了进程的主线程 结束 (3)在PsCreateProcess函数中调用了PspCreateProcessEnvironment函数后又先后调用了PspLoadProcessImage和PspCreateThread函数,学习这些函数的主要功能。能够交换这些函数被调用的顺序吗?思考其中的原因。 答:PspCreateProcessEnvironment 的主要功能是创建进程控制块并且为进程创建了地址空间和分配了句柄表。PspLoadProcessImage是将进程的可执行映像加载到了进程的地址空间中。PspCreateThread创建了进程的主线程。这三个函数被调用的顺序是不能够改变的就向上面描述的加载可执行映像之前必须已经为进程创建了地址空间这样才能够确定可执行映像可以被加载到内存的什么位置在创建主线程之前必须已经加载了可执行映像这样主线程才能够知道自己要从哪里开始执行,执行哪些指令。因此不能交换他们的顺序。 3.主要数据结构、实现代码及其说明 主要定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄 4.源程序并附上注释 #include "EOSApp.h" // // main 函数参数的意义: // argc - argv 数组的长度,大小至少为1,argc - 1 为命令行参数的数量。 // argv - 字符串指针数组,数组长度为命令行参数个数+ 1。其中argv[0] 固定指向当前 // 进程所执行的可执行文件的路径字符串,argv[1] 及其后面的指针指向各个命令行 // 参数。

操作系统实验报告16487

西安邮电大学 (计算机学院) 课实验报告 实验名称:进程管理 专业名称:计算机科学与技术 班级: 学生: 学号(8位): 指导教师: 实验日期:*****年**月**日

一. 实验目的及实验环境 目的:(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 环境:Linux操作系统环境: 二. 实验容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 三.方案设计 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 程序流程图如下:

操作系统实验3答案

实验三操作系统进程管理 一、实验目的 1) 掌握系统进程的概念,加深对Linux / UNIX进程管理的理解。 2) 学会使用ps命令和选项。 3) 列出当前shell中的进程。 4) 列出运行在系统中的所有进程。 5) 根据命令名搜索特定的进程。 6) 使用kill命令终止进程。 7) 根据用户名查找和终止进程。 二、实验内容和相应的答案截图,三、实验结果分析 步骤1:创建一个普通用户(参见实验二),以普通用户身份登录进入GNOME。 步骤2:打开一个“终端”窗口(参见实验二)。 步骤3:回顾系统进程概念,完成以下填空: 1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的__PID__进程标识符,用于跟踪从进程启动到进程结束。 2) 当启动新进程的时候,内核也给它们分配系统资源,如__内存_和__CPU_。 3) 永远不向父进程返回输出的进程叫做__僵进程__。 4) 由父进程派生出来的进程叫做____子___进程。 5) ___父_进程是一个派生另一个进程的进程。 6) 运行用于提供服务的Linux系统进程是_______________。 7) 如果父进程在子进程之前结束,它创建了一个______________进程。 步骤4:回顾ps命令和信息。基本的ps命令显示当前shell中的进程信息,用户只能够查看当前终端窗口中初始化的进程。输入ps命令,将结果填入表3-3中。 表3-3 实验记录 下面,在当前终端窗口中,练习使用给出的每个选项的ps命令。

输入ps -f 命令,显示运行在系统中的某个进程的完全信息,填入表3-4中。 表3-4 实验记录 步骤5:列出系统中运行的所有进程。 输入ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f 命令的输出结果对照,一致吗?有何不同? 答:不一致,后者显示了所有进程的完全可用信息,多了很多。 分析当前终端窗口中的输出结果,记录下来用于写实验报告。 a. 显示了多少个进程?答:59 b. 进程ID的PID是什么? c. 启动进程的命令(CMD) 是什么?答:sched d. 请观察,什么命令的PID号是1?答:init[5] e. 执行ps –ef >aaa命令,将ps命令的输出送到文本文件aaa。再次运行cat aaa | wc命令,计算进程的数目。其中,cat是显示文本文件命令。“|”是管道命令,就是将前一个命令的输出作为后一个命令的输入。wc 命令用来计算文本的行数,第一个数字显示的是行的数目,可以用来计算进程的数目。计算出进程数目并做记录。 执行man ps命令,可以打开Linux用户命令手册。了解ps命令的用法。输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何? 答:Man ps时出现

操作系统实验指导

计算机专业 《操作系统》实验指导书网络和信息安全教研室

计算机专业《操作系统》实验指导书 实验一 Linux系统的安装 一、实验目的 1、深入认识磁盘分区 2、掌握Linux安装的基本过程 3、掌握多系统共存的系统安装方法 二、实验任务 在现有系统安装Redhat Linux系统,注意不要破坏现有系统。 三、实验指导 参考《Linux上机实践教程》第一章内容。 实验二 Linux系统的基本使用 一、实验目的 1、熟悉linux系统的启动、登入和退出 2、熟悉linux系统文件和目录的基本使用 3、熟悉其它常用命令及虚拟终端的使用 4、体会linux系统作为分时系统的特点 二、实验任务 启动、登入和退出linux系统 练习使用文件和目录操作的基本命令 使用它常用命令及虚拟终端 练习使用Vi编辑器 三、实验指导 参考《Linux上机实践教程》第二、三章内容。 实验三 windows 2000中进程的创建和控制 一、实验目的 1、加深对进程概念的理解,明确进程和程序的区别 2、进一步认识进程并发执行的实质 3、掌握windows 2000中进程创建和控制的编程方法 二、实验任务 创建一个windows窗口程序,含有4个菜单项,分别用来创建和撤消记事本进程和计算器进程。若相应进程已经创建了,再选择创建进程菜单,则弹出对话框提示进程已经创建;若进程已经撤消了,再选择撤消进程菜单,则弹出对话框提示进程已经撤消。注意考虑从主程序外

部启动和关闭进程的情况。 三、实验指导 1、Win32的进程的概念 进程是应用程序的运行实例,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。进程要完成什么事情的话必须至少拥有一个线程,由线程来负责执行包含在地址空间的代码。 2、Win32的进程的创建 Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行。下表详细地列出了每个参数的类型和名称。 可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。 然后是标志参数,用以在dwCreationFlags参数中指明系统应该给予新进程什么行为。经常使用的标志是CREATE_SUSPNDED,告诉主线程立刻暂停。当准备好时,应该使用ResumeThread() API来启动进程。另一个常用的标志是CREATE_NEW_CONSOLE,告诉新进程启动自己的控制台窗口,而不是利用父窗口。 这一参数还允许设置进程的优先级,用以向系统指明,相对于系统中所有其他的活动进程来说,给此进程多少CPU时间。 接着是CreateProcess() 函数调用所需要的三个通常使用缺省值的参数。第一个参数是lpEnvironment参数,指明为新进程提供的环境;第二个参数是lpCurrentDirectory,可用于向主创进程发送与缺省目录不同的新进程使用的特殊的当前目录;第三个参数是STARTUPINFO数据结构所必需的,用于在必要时指明新应用程序的主窗口的外观。 CreateProcess() 的最后一个参数是用于新进程对象及其主线程的句柄和ID的返回值缓冲区。以PROCESS_INFORMA TION结构中返回的句柄调用CloseHandle() API函

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

相关主题
文本预览
相关文档 最新文档