os实验指导书(新)
《计算机操作系统》实验指导书
宁夏师范学院——数学与计算机科学学院《操作系统》实验指导《OPERATING SYSTEM》2013.08前言计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。
要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。
同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。
为了收到良好的实验效果,编写了这本实验指导书。
在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。
任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。
进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。
实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。
目录操作系统实验大纲 (1)第一部分实验环境及所用系统函数介绍 (3)1.1 Linux操作系统简介 (3)1.2 Linux的使用 (3)第二部分实验内容 (7)实验一熟悉LINUX基本命令及编程环境 (7)实验二进程管理 (10)实验三进程调度 (14)实验四进程间通信 (19)实验五存储管理实验 (22)操作系统实验大纲一、教学目的和要求操作系统课程是一门理论性很强的专业课,操作系统实验是该课程的辅助课程。
操作系统实验指导书
操作系统实验指导书实验概述本次操作系统实验是为了让学生通过实践了解操作系统的基本概念,原理和使用。
通过完成实验,学生将了解操作系统内核,进程调度,文件系统和输入输出等关键组成部分。
实验环境实验要求使用 Linux 操作系统,可以选择任意一种 Linux 发行版。
可以在物理机上安装 Linux,也可以使用虚拟机软件(如 VirtualBox)来运行 Linux 虚拟机。
实验准备在进行实验之前,需要完成以下准备工作:1.安装 Linux 操作系统(如 Ubuntu、Fedora 等)或虚拟机软件(如VirtualBox)。
2.熟悉 Linux 基本命令和操作,包括文件操作、进程管理等。
实验内容本次操作系统实验分为以下几个部分:1. 实验一:进程管理本部分实验要求学生了解进程管理的基本概念和原理,掌握进程创建、终止和状态转换等操作。
学生需要完成以下任务:•编写一个简单的 C 程序,实现进程的创建、终止和状态转换功能。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析进程的状态转换过程。
2. 实验二:进程调度本部分实验要求学生了解进程调度算法的原理和实现方法,掌握优先级调度、轮转调度和最短作业优先调度等算法。
学生需要完成以下任务:•编写一个简单的 C 程序,模拟进程调度算法的执行过程。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析不同调度算法对进程执行顺序的影响。
3. 实验三:文件系统本部分实验要求学生了解文件系统的基本概念和实现原理,掌握文件的创建、读写和删除等操作。
学生需要完成以下任务:•编写一个简单的 C 程序,实现文件的创建、读写和删除功能。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析文件系统的存储结构和操作过程。
4. 实验四:输入输出本部分实验要求学生了解操作系统的输入输出机制和设备驱动程序的原理和实现方法,掌握文件读写、设备驱动和错误处理等操作。
uC_OS-II实验指导书
os实验指导书(新)
操作系统教程实验指导书目录实验一 WINDOWS进程初识 (3)1、实验目的 (3)2、实验内容和步骤 (3)3、实验结论 (4)4、程序清单 (4)实验二进程管理 (7)背景知识 (7)1、实验目的 (10)2、实验内容和步骤 (10)3、实验结论 (12)4、程序清单 (12)实验三进程同步的经典算法 (17)背景知识 (17)1、实验目的 (18)2、实验内容和步骤 (18)3、实验结论 (19)4、程序清单 (20)实验四存储管理 (24)背景知识 (24)1、实验目的 (28)2、实验内容和步骤 (28)3、实验结论 (34)4、程序清单 (34)实验五文件和设备管理 (39)背景知识 (39)1、实验目的 (41)2、实验内容与步骤 (41)3、实验结论 (44)实验一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中的程序拷贝过来,编译成可执行文件。
操作系统实验指导书
操作系统实验指导书一、实验说明1、实验目的实验是操作系统原理课程中不可缺少的重要教学环节,实验目的是使学生理论联系实际,使学生在实践探索中去发现问题、去解决问题,提高了学生获取知识和应用技术的能力,培养了学生分析和解决问题的能力。
《操作系统原理》要求理论与实践相结合,本门实验课程是对《操作系统原理》课堂教学的一个重要补充,与理论学习起着相辅相成的作用,是实施《操作系统原理》教学的一个重要组成部分。
通过本实验课的实践学习,可以增强本专业的学生对系统实现的认识。
对加深理解和掌握操作系统相关原理有重要帮助。
2、实验要求进一步了解和掌握操作系统原理,提高系统设计的能力。
对每一实验题目,应独立完成,并要求:·上机前,学生必须做好充分的实验准备工作,掌握与实验相关的背景知识,用任一种高级语言编写程序。
·上机时,认真调试,并观察、记录程序运行过程中出现的现象和问题。
·上机后,分析实验结果并写出实验报告。
3、实验报告要求每个实验(包括选做的)均应编写实验报告,学生实验后要写出严谨的、实事求是的、文字通顺的、字迹公整的实验报告。
实验报告应包括以下内容:(1)实验题目(2)实验目的(3)实验内容●程序中使用的数据结构及符号说明●流程图●源程序清单并附上注释(4)实验结果及分析●运行结果(必须是上面程序清单所对应输出的结果)●对运行情况所作的分析以及本次调试程序所取得的经验。
如果程序未能通过,应分析其原因。
二、实验内容实验一熟悉使用计算机系统一、实验名称:熟悉使用计算机系统二、实验目的与要求通过对Windows操作系统的使用,熟悉Windows操作系统中的基本概念,如单用户、多任务、进程和文件等,熟悉Windows中命令行方式下常用命令的使用方法;进一步熟悉TC语言与开发环境,为以后的实验打好基础。
三、实验内容1.开机后,熟悉Windows的界面(桌面、任务栏、开始按钮<点击后出现“开始”菜单>、我的电脑图标、回收站、我的文档)。
OS实验指导
操作系统实验指导目录1、Windows 2000 进程观测………………………………………2、Windows 2000进程控制……………………………………….3、Windows 2000线程同步……………………………………….4、Windows 2000内存结构……………………………………..5、Windows 2000虚拟内存………………………………………6、Windows 2000线程间通信实验一Windows 2000进程观测一、背景知识Windows 2000可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。
控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。
不同类型应用程序间的惟一重要区别是其启动方法。
Windows 2000是以NT的技术构建的,它提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。
当系统运行时,Windows 2000的服务通常要向系统用户提供所需功能。
服务应用程序类型需要ServiceMail() 函数,由服务控制管理器(SCM) 加以调用。
SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。
其本身负责使应用程序的行为像一个服务。
通常,服务登录到特殊的LocalSystem账号下,此账号具有与开发人员创建的服务不同的权限。
当令C++ 编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。
产生的EXE文件是装载器指令、机器指令和应用程序的数据的集合。
装载器指令告诉系统从哪里装载机器代码。
另一个装载器指令告诉系统从哪里开始执行进程的主线程。
在进行某些设置后,进入开发者提供的main() 、ServiceMain() 或WinMain() 函数的低级入口点。
机器代码中包括有控制逻辑,它所做的事包括跳转到Windows API函数,进行计算或向磁盘写入数据等。
嵌入式os实验指导书
实验一嵌入式Linux系统安装与配置1、实验目的•熟悉Linux系统安装方法•熟悉VMware虚拟机下Linux系统环境的配置2、实验设备PC 机、Redhat9.0 VMware6.0。
3、实验内容•安装虚拟机VMware。
•安装Redhat9.0•VMware虚拟机下的Redhat环境配置一、准备如下安装文件:1.VMware.Workstation.5.5中文版(虚拟机)带注册机2.FC4-i386-disc1.iso3.FC4-i386-disc2.iso4.FC4-i386-disc3.iso5.FC4-i386-disc4.iso6.FC4-i386-rescuecd.iso二、VMware软件的安装1.双击安装文件,按照提示进行下一步2.需要输入注册码时,运行注册机目录下的keygen..exe,点击generate,serial框中的即为注册码。
3.安装完成后,运行汉化补丁目录下的HF_Vmware5.5进行汉化三、Fedora Core 4 Linux发行版的安装1.在VMware软件中,新建虚拟机->下一步,选择典型->下一步,选择linux->下一步,选择linux安装的位置->下一步,使用桥接网络->下一步,完成2.编辑虚拟机->设置,选择cdrom1,使用iso映像,选中FC4-i386-disc1.iso,确定3.启动此虚拟机,进入linux安装界面4.选择skip,跳过光盘检测5.按next,选择简体中文,按next,下一步6.安装类型选择定制,下一步7.选择手工分区,下一步,弹出警告框,选择是8.新建,选择文件类型为swap,大小为1000MB,确定。
9.新建,选择文件类型为ext3,挂载点为/,大小为“使用全部可用空间”,确定,分区结果如下图所示:10.下一步,下一步,选择无防火墙,弹出警告框,点击继续11.下一步,设置用户口令,输入两次,必须相同,至少为6个字符12.下一步,选择软件包组界面,选择全部(7G左右,保证硬盘空间充足,避免今后使用时出现一些问题)13.按照提示,点击下一步,开始安装14.第一张盘FC4-i386-disc1.iso安装完后,有提示音15.编辑虚拟机->设置,选择cdrom1,使用iso映像,选中FC4-i386-disc2.iso,确定,继续第二张盘的安装16.完成四张盘的安装后,自动重启,进入系统17.按提示点击下一步,设置自己的用户名,系统默认有个超级用户root18.在提示输入用户名时,可以输入自己设置的用户名和密码(进入系统后,使用用户权限,安全),也可以输入root用户,密码为在第11步里设置的(进入系统后,使用超级用户权限)四、VMvare tools的用途:1.在Linux中方便地访问Windows系统下的文件(通过目录/mnt/hgfs)2.增强桌面图形性能,屏幕分辨率3.鼠标可以在Windows系统和虚拟机之间方便切换五、VMware tools的安装1.打开VMware软件,启动已安装的Linux系统,通过菜单虚拟机->安装vmware工具,点击install2.在Linux桌面上,点鼠标右键,打开终端3.输入以下命令:mount –t iso9660 /dev/cdrom /mnt4.cd /mnt5.cp VMwareTools-5.5.0-18463.tar.gz /tmp6.cd /tmp7.umount /dev/cdrom8.tar zxvf VmwareTools-5.5.0-18463.tar.gz9.cd vmware-tools-distrib10../vmware-install.pl11.一路回车12.虚拟机->虚拟机设置->选项->共享文件夹->添加(名称d,主机文件夹D:\,名称e,主机文件夹E:\),确定13.reboot三、验证是否安装成功1、鼠标是否能方便地在Windows和虚拟机之间切换2、在Linux中能否通过目录/mnt/hgfs访问Windows下的文件实验二 Linux基本命令的使用(2-3次)【实验目的】一、了解Linux系统中的用户管理、文件和目录管理二、掌握Linux系统中用户管理相关、文件和目录管理相关及其它常用命令【实验内容】1、超级用户与普通用户相互切换在Linux下将root用户的密码修改为Linux#1;创建用户user01,user02,user03,创建用户组group1,group2;将用户user01、user02划归group1组,将用户user03划归group2组2、在/tmp目录下建立test1和test2目录文件,然后在test目录下创建一个test.c和hello.txt文件,再将test.c复制到test2目录中,将hello.txt移动到test2目录中,最后删除test1目下的test.c文件。
os实验指导书1.docx
实验4存储管理1、实验目的存储管理的主要功能Z—是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,常握请求页式存储管理的页面置换算法。
2、实验内容(1)通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:①50%的指令是顺序执行的;②50%的指令是均匀分布在前地址部分;③50%的指令是均匀分布在后地址部分。
具体的实施方法是:①在[0, 319]的指令之间随即选取一起点m;②顺序执行一条指令,即执行地址为m+1的指令;③在前地址[0, m+1]中随机选取一条指令并执行,该指令的地址为H ;④顺序执行一条指令,其地址为H十1;⑤在后地址[N + 2, 319]中随机选収一条指令并执行;⑥重复上述步骤①-⑤,直到执行320次指令。
(2)将指令序列变换为页地址流设:①页面大小为lk;②用户内存容量为4页到32页;③用户虚存容量为32k。
在用户虚存中,按每k存放10条指令排在虚存地址,即320条指令在虚存中的存放方式为:第0条-第9条指令为第0页(对应虚存地址为[0, 9]);第10条-第19条指令为第一页(对应虚存地址为[10, 19]);• • • • • •第310条~第319条指令为第31页(对应虚地址为[310, 319])。
按以上方式,用户指令可组成32页。
(3)计算并输岀下述各种算法在不同内存容量下的命屮率。
①先进先出的算法(FIFO);②最近最少使用算法(LRR);③最佳淘汰算法(OPT)先淘汰最不常用的页地址;④最少访问页面算法(LFR);⑤最近最不经常使用算法(NUR) o其中③和④为选择内容。
命中率二1-页面失效次数/页地址流长度在本实验屮,页地址流长度为320,页而失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
3、随机数产生办法,Linux或UNTX系统提供函数strand()和rand(),分别进行初始化和产生随机数。
软件学院OS操作系统原理实验指导书_lisheng_110907
目录实验一熟悉Ubuntu环境 (1)实验二 shell脚本 (10)实验三进程控制 (14)实验四进程间通信--信号量机制实验 (18)实验五进程间通信--进程的管道通信实验 (24)实验六进程间通信--消息的发送与接收实验 (28)实验七进程通信--共享存储区通信 (34)实验六死锁避免的算法 (40)实验七存储管理 (42)一、常用页面置换算法 (42)二、动态分区分配算法(选做) (51)实验八模拟进程调度算法 (53)实验九文件操作 (54)实验一熟悉Ubuntu环境【实验目的】1.了解Ubuntu系统基本操作方法,学会独立使用该系统。
2.熟悉Ubuntu下如何编辑、编译和运行一个C语言程序。
3.学会利用gcc、gdb编译、调试C程序。
【预习内容】1.预习Ubuntu下各种应用程序的使用。
2.预习常用的SHELL命令。
3.预习vi编辑器和emacs编辑器使用方法。
4.预习Ubuntu下C程序编辑、编译和运行过程。
【实验内容】一、登陆Linux进入,再选择Ubuntu登陆窗口,输入用户名: students ,输入密码: 111111 ,进入Ubuntu图形桌面环境。
二、熟悉Ubuntu图形桌面环境桌面包含上方的菜单栏和下方的任务栏。
菜单栏包含“应用程序菜单”、“位置”、“系统”。
通过主菜单可访问应用程序。
(1) “应用程序”菜单“应用程序”菜单包含“办公”、“附件”、“互联网”、“图形”、“游戏”等。
“办公”包含了文字处理及电子表格等应用程序。
“附件”下包含了“搜索工具”、“计算器”、“文本编辑器”和“终端”等应用程序。
(2)“位置”菜单“位置”菜单包含“主文件夹”、“桌面”等信息。
(3)“系统”菜单“系统”菜单包含“首选项”和“系统管理”等信息。
(4)启动终端模拟器GNOME终端模拟器用一个窗口来模拟字符终端的行为。
终端常常被称为命令行或者shell,Linux 中绝大部分工作都可以用命令行完成。
os实验指导书(+实验提示)
操作系统实验指导书主编:杜俊俐计算机学院操作系统课程组2010年2月 20日前言操作系统是计算机系统中的核心系统软件,负责控制和管理整个系统的资源并组织用户协调使用这些资源,是计算机高效的工作。
操作系统课程是计算机科学与技术专业核心课程。
由于操作系统是最优秀、最复杂和最庞大的软件之一,所以,真正领会操作系统课程所介绍的感念、原理、方法和技巧等,是十分困难的。
经验表明,学习尤其是真正体会和掌握操作系统的最好方式是对它进行充分的实验。
为此,培养计划中为操作系统课程安排了16学时实验。
为了更好地发挥实验深入理解课程知识的学习作用及知识应用的实践方法,将课程中重要知识点设计成七个实验。
通过这些实验有助于学生全面、透彻的理解操作系统原理中的核心知识。
目录第一章、概述 (4)第二章、实验要求及注意事项 (5)第三章、实验项目 (6)实验一:进程创建与撤消 (6)实验二:进程调度 (7)实验三:进程通信 (8)实验四:分区式储器管理 (9)实验五:请求页式存储管理 (10)实验六:磁盘调度算法 (11)实验七:磁盘文件操作 (12)第四章、参考文献 (13)附录A:实验报告规范 (14)第一章、概述操作系统课程是计算机科学与技术专业核心课程。
《高级语言程序设计》、《数据结构》等课程为其前趋课程。
该课程理论性强,难以理解。
通过课程的实验,能帮助学生深透理解并真正领会操作系统课程所介绍的感念、原理、方法和技巧等。
实验学时为16,共分七个实验分别进行。
实验一:进程创建与撤消、实验二:进程调度、实验三:进程通信、实验四:分区式储器管理、实验五:请求页式存储管理、实验六:磁盘调度算法、实验七:磁盘文件操作。
其中实验五需4学时,其余均为2学时。
这七个实验对操作系统原理中的进程管理、存储器管理、文件系统等重要知识进行训练。
实现语言为Visual C++ 6.0,系统平台为Windows。
第二章、实验要求及注意事项实验环境要求:硬件:普通PC386以上微机;软件:windows操作系统;开发语言:Visual C++ 6.0;实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果,实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。
os操作系统实验指导
操作系统实验指导手册目录Linux上机预备知识 (3)Linux系统常用命令 (3)编辑器的使用 (5)GNU C编译器的使用 (6)实验中常用到的系统调用 (7)实验要求: (9)实验单元1 进程管理 (11)实验单元2 存储管理 (13)实验单元3 文件系统 (14)操作系统实验报告要求及样本 (56)1 操作系统实验报告内容要求 (56)2操作系统实验报告样本 (56)一、Linux上机预备知识内容Linux实验环境系统调用其他问题1.Linux实验环境:系统常用命令编辑器编译器调试器Linux系统常用命令显示目录文件ls执行格式:ls [-atFlgR] [name] (name可为文件或目录名称)例:ls 显示出当前目录下的文件ls -a 显示出包含隐藏文件的所有文件ls -t 按照文件最后修改时间显示文件ls -F 显示出当前目录下的文件及其类型ls -l 显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称ls -lg 同上ls -R 显示出该目录及其子目录下的文件建新目录mkdir执行格式:mkdir directory-name例:mkdir dir1新建一个名字为dir1的目录删除目录rmdir执行格式:rmdir directory-name 或rm directory-name例:rmdir dir1 删除目录dir1,但它必须是空目录,否则无法删除rm -r dir1 删除目录dir1及其下所有文件及子目录rm -rf dir1 不管是否空目录,统统删除,而且不给出提示,使用时要小心改变工作目录位置cd执行格式:cd [name]例:cd 改变目录位置至用户login时的working directorycd dir1 改变目录位置,至dir1目录cd ~user 改变目录位置,至用户的working directorycd .. 改变目录位置,至当前目录的上层目录cd ../user 改变目录位置,至上一级目录下的user目录cd /dir-name1/dir-name2 改变目录位置,至绝对路径cd - 回到进入当前目录前的上一个目录显示当前所在目录pwd执行格式:pwdLinux常用命令删除文件rm执行格式:rm filename例:rm file 删除名字为file的文件复制文件cp执行格式:cp [-r] source destination例:cp file1 file2 将file1复制成file2cp file1 dir1 将file1复制到目录dir1cp /tmp/file1 将file1复制到当前目录cp /tmp/file1 file2 将file1 复制到当前目录名为file2cp –r dir1 dir2 (recursive copy)复制整个目录。
操作系统实验指导书(完整版)
《计算机操作系统实验》指导书(第二版)实验一LINUX的安装与使用 (2)实验二进程管理与通信 (27)实验三存储管理——页面置换算法模拟 (51)实验四文件管理 (56)实验五LINUX服务器配置(选做) (62)实验报告撰写指导 (72)韶关学院信息工程学院计算机系教师:陈正铭2007-9-10实验一LINUX的安装与使用【实验目的】1、了解与掌握RED HAT LINUX 9.0的安装过程。
2、熟悉LINUX的命令及使用格式与常用基本命令。
【实验内容】1、使用图形化安装模式安装RED HAT LINUX 9.0。
2、使用WINDOWS操作系统中的远程登录程序telnet.exe 登录LINUX。
3、练习使用LINUX的常用基本命令如ls、cd、who、pwd、ps、pstree、top等。
4、掌握WINDOWS和LINUX之间的文件共享方法。
【实验指导】一、Red Hat Linux 9光盘启动安装过程1、准备工作(1)购买或下载Redhat9的安装光盘(3张盘)或镜像文件,下载地址:校园网FTP站点。
或从红帽子主站下载∶/(2)在硬盘中至少留2个分区给安装系统用,挂载点所用分区推荐4G以上,交换分区在256M 左右比较适合,文件系统格式不论,反正安装过程会重新格式化。
(假如使用虚拟机vm安装建议最少留6G存储空间)(3)记录下你电脑中下列设备型号∶鼠标、键盘、显卡、网卡、显示器。
及网络设置用到的IP地址、子网掩码、默认网关和DNS名称服务器地址等信息。
2、安装红帽子Red Hat Linux 9将光驱设为第一启动盘,放入第一张安装光盘后重新启动电脑,如果你的光驱支持自启动, 如无意外将出现如下图:直接按回车键后将出现如下图1 ,如果你不处理30秒后也会自动进入。
在图1中提示:是否测试安装CD的内容的完整性,选―OK‖开始测试安装CD;选―Skip‖不测试安装CD开始安装出现图6所示,如果是第一次安装当然要测试安装CD,选―OK‖后回车,出现如下图2选―Test‖测试安装光盘的文件,选―Eject CD‖测试光盘以外的安装文件,这里我选择―Test‖后回车,出现如下图3正在测试第一张安装CD,测试完后显示如下图4所示看到上图最后一行英文―It is OK to install from this med ia‖说明这张安装CD是OK的,按―Enter‖键回车后,显示如下图5所示选择―Continue‖并回车开始安装。
OS操作系统课程实验指导书附运行截图
实验1使用动态优先权的进程调度算法的模拟1、实验目的(1)加深对进程概念的理解(2)深入了解系统如何组织进程,创建进程(3)进一步认识如何实现处理机调度2、实验内容(1)实现对N个进程采用动态优先权优先算法的进程调度。
(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:进程标识数ID。
进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
进程已占用的CPU时间CPUTIME。
进程还需占用的CPU时间ALLTIME。
当进程运行完毕时,ALLTIME变为0。
进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,将进入阻塞状态。
进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。
进程状态STATE。
队列指针NEXT,用来将PCB排成队列。
(3)优先数改变的原则:进程在就绪队列中停留一个时间片,优先数加1。
进程每运行一个时间片,优先数减3。
(4)假设在调度前,系统中有5个进程,它们的初始状态如下:ID 0 1 2 3 4PRIORITY 9 38 30 29 0CPUTIME 0 0 0 0 0ALLTIME 3 3 6 3 4STARTBLOCK 2 -1 -1 -1 -1BLOCKTIME 3 0 0 0 0STATE ready ready ready ready ready(5)为了清楚的观察各进程的调度过程,程序应将每个时间片内的情况显示出来,参照的具体格式如下:RUNNING PROG:iREADY-QUEUE:->id1->id2BLOCK-QUEUE:->id3->id4= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == = =ID 0 1 2 3 4PRIORITY P0 P1 P2 P3 P4CUPTIME C0 C1 C2 C3 C4ALLTIME A0 A1 A2 A3 A4STARTBLOCK T0 T1 T2 T3 T4BLOCKTIME B0 B1 B2 B3 B4STATE S0 S1 S2 S3 S43、实验结果(给出编写的程序源代码和运行结果的截图)【程序代码】#include<stdio.h>#include<stdlib.h>#define N 5// 进程状态enum STATE { Ready, Run, Block, Finish };// PCB数据结构struct PCB {int id; // 标志数int priority; // 优先数int cpuTime; // 已占CPU时间int allTime; // 还需占CPU时间int blockTime; // 已被阻塞的时间int startBlock; // 开始阻塞时间STATE state; // 进程状态PCB *pre; // PCB的前指针PCB *nxt; // PCB的后指针};int id[N] = {0, 1, 2, 3, 4};int priority[N] = {9, 38, 30, 29, 0};int cpuTime[N] = {0, 0, 0, 0, 0};int allTime[N] = {3, 3, 6, 3, 4};int startBlock[N] = {2, -1, -1, -1, -1};int blockTime[N] = {3, 0, 0, 0, 0};void QuePush(PCB *process, PCB *queHead){process->pre = NULL;process->nxt = queHead->nxt;if (queHead->nxt != NULL) {queHead->nxt->pre = process;}queHead->nxt = process;}void quePop(PCB *process, PCB *queHead){if (process->pre != NULL) {process->pre->nxt = process->nxt;} else {queHead->nxt = process->nxt;}if (process->nxt != NULL) {process->nxt->pre = process->pre;}process->pre = process->nxt = NULL;}void queWalk(PCB *queHead){PCB *pro = queHead->nxt;if (pro == NULL) {printf("(没有进程啦)\n");return;}while (pro != NULL){printf("id: %d, priority: %d, cpuTime: %d, alltime: %d,blockTime: %d,state:%d,startblock: %d\n", pro->id, pro->priority, pro->cpuTime, pro->allTime, pro->blockTime, pro->state, pro->startBlock);pro = pro->nxt;}}int readyQueNum; // 就绪队列的进程数量PCB readyQueHead; // 就绪队列的头部PCB *readyMaxProcess; // 就绪队列中优先级最高的进程void readyQuePush(PCB *process){readyQueNum ++;process->state = Ready;QuePush(process, &readyQueHead);}PCB* readyQuePop(){readyQueNum --;quePop(readyMaxProcess, &readyQueHead);return readyMaxProcess;}// 每个时间片,更新就绪队列里进程的信息void readyQueUpdate(){int maxPriority = -1;PCB *pro = readyQueHead.nxt;if (pro == NULL) {// 就绪队列没有进程readyMaxProcess = NULL;return;}while (pro != NULL){pro->priority ++;if (pro->priority > maxPriority) {maxPriority = pro->priority;readyMaxProcess = pro;}pro = pro->nxt;}}// 返回就绪队列最高优先级的值int readyMaxPriority(){return readyMaxProcess->priority;}// 查看就绪队列里进程的信息void readyQueWalk(){printf("就绪队列里的进程信息为:\n");queWalk(&readyQueHead);}#define EndBlockTime 3 // 进程最长被阻塞时间int blockQueNum; // 阻塞队列的进程数量PCB blockQueHead; // 阻塞队列的头部PCB *blockMaxProcess; // 阻塞队列中优先级最高的进程// 进程插入到阻塞队列void blockQuePush(PCB *process){blockQueNum ++;process->blockTime = 0;process->state = Block;if (process->blockTime != -1) {QuePush(process, &blockQueHead);}}// 优先级最高的进程出列PCB* blockQuePop(){blockQueNum --;quePop(blockMaxProcess, &blockQueHead);return blockMaxProcess;}// 每个时间片,更新阻塞队列里进程的信息void blockQueUpdate(){int maxPriority = -1;PCB *pro = blockQueHead.nxt;while (pro != NULL){pro->blockTime ++;if (pro->blockTime >= EndBlockTime) {PCB *process = pro;pro = pro->nxt;// 阻塞时间到,调入就绪队列blockQueNum --;quePop(process, &blockQueHead);readyQuePush(process);} else if (pro->priority > maxPriority) {// 更新阻塞队列里优先级最高的进程指针maxPriority = pro->priority;blockMaxProcess = pro;pro = pro->nxt;}}}// 查看阻塞队列里进程的信息void blockQueWalk(){printf("阻塞队列里的进程信息为:\n");queWalk(&blockQueHead);}// 初始化数据void initData(){// 初始化就绪队列和阻塞队列readyQueNum = blockQueNum = 0;readyMaxProcess = blockMaxProcess = NULL;readyQueHead.pre = readyQueHead.nxt = NULL;blockQueHead.pre = blockQueHead.nxt = NULL;// 初始化进程进入就绪队列int i, maxPriority = -1;for (i = 0; i < N; i ++){// 分配一个PCB的内存空间PCB *pro = (PCB *)malloc(sizeof(PCB));// 给当前的PCB赋值pro->id = id[i];pro->priority = priority[i];pro->cpuTime = cpuTime[i];pro->allTime = allTime[i];pro->blockTime = blockTime[i];pro->startBlock = startBlock[i];if (pro->allTime > 0) {// 插入到就绪队列中readyQuePush(pro);// 更新就绪队列优先级最高的进程指针if (pro->priority > maxPriority) {maxPriority = pro->priority;readyMaxProcess = pro;}}}}// 模拟cpu执行1个时间片的操作void cpuWord(PCB *cpuProcess){cpuProcess->priority -= 3;if (cpuProcess->priority < 0) {cpuProcess->priority = 0;}cpuProcess->cpuTime ++;cpuProcess->allTime --;// 显示正执行进程的信息:printf("CPU正执行的进程信息为:\n");printf("id: %d, pri: %d, alltime: %d\n", cpuProcess->id,cpuProcess->priority, cpuProcess->allTime);}int main(){int timeSlice = 0; // 模拟时间片int cpuBusy = 0; // 模拟cpu状态PCB *cpuProcess = NULL; // 当前在cpu执行的进程initData(); // 初始化// 模拟进程调度while (1){if (readyQueNum == 0 && blockQueNum == 0 && cpuBusy == 0) { // 就绪队列、阻塞队列和cpu无进程,退出break;}if (cpuBusy == 0) {// cpu空闲,选择一个进程进入cpuif (readyQueNum > 0) {// 选择绪队列优先级最高的进程cpuProcess = readyQuePop();} else {// 就绪队列没有进程,改为选择阻塞队列优先级最高的进程cpuProcess = blockQuePop();}cpuProcess->cpuTime = 0;cpuProcess->state = Run;cpuBusy = 1;cpuProcess->startBlock --;}timeSlice ++;printf("\n第%d个时间片后:\n", timeSlice);// 模拟cpu执行1个时间片的操作cpuWord(cpuProcess);if (cpuProcess->allTime == 0) {cpuProcess->state = Finish;// 释放已完成进程的PCBfree(cpuProcess);cpuBusy = 0;}// 更新就绪队列和阻塞队列里的进程信息blockQueUpdate();readyQueUpdate();// 查看就绪队列和阻塞队列的进程信息readyQueWalk();blockQueWalk();if ((cpuProcess -> startBlock) > 0) {blockQuePush(cpuProcess);cpuProcess = readyQuePop();}else {if (cpuBusy == 1 && readyQueNum > 0 && cpuProcess->priority < readyMaxPriority()){readyQuePush(cpuProcess);cpuProcess = readyQuePop();}}}printf("\n模拟进程调度算法结束2145115 刘成路\n");return 0;}【运行截图】实验2使用动态分区分配方式的模拟1、实验目的(1)了解动态分区分配方式中使用的数据结构和分配算法(2)加深对动态分区存储管理方式及其实现过程的理解。
最新《操作系统》实验讲义--OS实验指导书
《操作系统》实验讲义计算机科学与工程学院2015年3月实验一Linux初步实验预备知识一、创建实验平台如果实验室里的计算机安装了Windows操作系统,则可以先安装VMWare软件(一般使用工作站版本)并启动它,来创建一个虚拟机,然后在其中安装Linux操作系统。
这样就可以从虚拟机中启动Linux系统,并完成相应的实验。
VMWare软件和Linux操作系统的安装十分简单,这里就不做介绍。
二、Linux下的proc文件系统在Linux操作系统中,提供了一套非常有用的在用户态检查内核状态和系统特征的机制,这就是proc文件系统。
该文件系统安装在/proc 目录中。
比起Windows的任务管理器来,proc文件系统的功能更强大:它能提供更多的系统信息,能修改部分系统信息,还能通过编程来扩充其中的内容。
该文件系统将进程的地址空间、系统的硬件信息(包括CPU、内存状态以及网卡等各种硬件设备)、系统相关机制(中断、I/O)等内容全部设置成虚拟的Linux文件。
它以一种特殊的文件系统的方式,为访问系统内核数据的操作提供接口。
也就是说,这个文件系统中所有的文件都是特殊文件,这些特殊文件一般与外部设备无关,所涉及到的介质通常室内存和CPU。
当从一个特殊文件“读”出时,所读出的数据都是由系统内部按一定的规则临时生成的,或从内存中收集、加工出来的,反之亦然。
换言之,这些文件的内容都不存在任何存储设备上,而是在读/写的时候才根据系统中的有关信息生成出来,或映射到系统中的有关变量或数据结构中。
/proc 目录中的每个文件都有一组分配给它的非常特殊的文件许可权,并且每个文件属于特定的用户标识,这里面的文件仅仅包含以下几种权限(除非root用户特别授权):●只读任何用户都不能更改该文件,它用于表示系统信息。
●root写/proc 目录中的一些文件是可写的,但通常只能由root用户来写。
●root读有些文件对一般系统用户是不可见的,而对root用户是可见的。
OS实验指导
OS课程设计实验指导每人至少选做3个实验:实验一:Linux系统基本操作(必选)熟练掌握unix环境下的常用命令、系统命令的用法,能熟练运用vi文本编辑器编辑文件。
学习unix shell的初步知识。
实验二:Linux进程调度常见算法模拟实现用c语言编写常用进程调度算法的模拟程序,如时间片轮转、优先数调度。
提示:用4个基本系统调用实现进程的创建、执行和自我终止:①fork()。
创建一个子进程。
用它创建的子进程是fork调用者进程(即父进程)的复制品,即进程映象。
除了进程标识数以及与进程特性有关的一些参数外,其它与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。
如果创建进程失败,则fork()返回值为-1:若创建进程成功,则从父进程返回值是子进程号,从子进程返回的值是0,返回值在R0。
m=fork()。
②wait()。
父进程处于阻塞(或等待)状态,等待子进程执行完成终止后继续工作。
其返回值R0为等待子进程的子进程号。
n=wait()。
③exit()。
子进程自我终止,释放所占资源,通知父进程可以删除自己。
此时它的状态变成P_state=SZOMB。
④getpid()。
获得进程的标识数(进程号),一般是正整数。
P=getpid()。
编程示例:例1. 编写一个程序,父进程生成一个子进程,父进程等待子进程wait(),子进程执行完成后自我终止exit(),并唤醒父进程。
父、子进程执行时打印有关信息。
main(){ int i,j,k;if (i=fork()) // 非零值{ j=wait();printf(“Parent process!\n”);printf(“i=%d k=%d\n,i,k);}else{ k=getpid();printf(“Child process!\n”);printf(“i=%d k=%d\n,i,k);}}例2. 编写一个程序,输入两个整数并求和输出,然后创建一个子进程,当进程调度程序调度到父进程或子进程时特输出不同的信息。
os实验指导书
操作系统实验指导书操作系统是一门理论性和时间性都很强的课程。
要学好操作系统的设计原理,除了听课、看书、做习题外,最好的方法就是在实践中进行,包括使用操作系统、阅读和分析已有操作系统的源代码、自己设计小型系统/模块或模拟算法等。
本教材安排的实验内容按深度可分为五个层次,即:使用级、观察级、系统管理级、源码阅读级和实现级。
(1)使用级:是指如何使用操作系统,包括对命令(以及菜单和shell)、系统调用和系统文件的使用。
(2)观察级:是指通过使用级的接口,从外部观察操作系统的内部工作过程和结构。
(3)系统管理级:是指系统或设备的安装、配置和性能调整。
(4)源码阅读级:是指对现有操作系统部分内核源代码的阅读。
(5)实现级:是指编程模拟实现操作系统某些功能模块。
实验的操作平台是Red Hat Linux 9.0虚拟机。
实验报告要求:实验目的实验内容实验步骤实验结果实验分析总结实验1 linux编程基础内容:a 用vi编写helloworld程序,用gcc编译运行.b 编写test程序,创建子进程用exec执行helloworld程序。
要求:通过查询网络,自己完成。
选做题用vi对200字文本进行编辑(复制、查找、替换等)。
文件编辑器vi 使用vi是在UNIX 上被广泛使用的中英文编辑软件。
vi是visual editor的缩写,是UNIX提供给用户的一个窗口化编辑环境。
进入vi,直接执行vi编辑程序即可。
例:$vi test.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。
vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。
编辑完成后,使用者可决定是否要取代原来旧有的文件。
1、vi的工作模式vi提供二种工作模式:输入模式(insert mode)和命令模式(command mode)。
使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。
os课程实验指导书
《—操作系统—》实验指导书计算机科学与技术教研室编写适用专业:计算机科学与技术计算机专升本厦门理工学院计算机科学与技术系(部)2009年9 月前言了解Windows原理,并能使用系统函数等进行进程创建与撤、通信、调度,主存储器管理、文件结构、安全管理。
为了使学生更好地理解和深刻地把握这些知识,并在此基础上,使学生掌握操作系统的基本概念、基本原理、设计方法和实现技术,具有初步分析实际操作系统的能力,设置了一定数量的实验为综合性、设计性实验。
实验一: Windows 控制台命令——系统管理1.实验目的(1)掌握命令行窗口的显示设置。
(2)学会系统的基本配置。
(3)显示系统基本信息。
、(4)掌握系统配置管理。
(5)任务管理。
2.实验工具一台装有WindowsXP或Winddows2003的机器(这里默认是WindowsXP).3.预备知识·cmd:启动Windows命令窗口。
·chcp:活动控制台代码页。
·prompt:显示更改Windows命令提示符·color:设置命令行窗口颜色。
·title:命令行窗口标题。
·date:显示或设置日期。
·time:显示或设置系统时间。
·w32tm:时间服务。
·doskey:创建宏。
·systeminfo:显示系统信息。
·mem:显示内在分配。
·tasklist:显示任务进程。
·at:结束任务进程。
命令的具体参数和使用方法参见本次实验参考资料部分。
4.实验内容1)进入Windows命令行窗口执行“开始”→“运行”→cmd2)设置活动代码页步骤一:输入命令chcp936.步骤二:输入命令ver,步骤三:输入命令chcp步骤四:输入命令ver步骤五:比较结果3)显示更改Windows命令提示符输入命令prompt$v$g,4)改变Windows命令行窗口的前景和背景色输入命令color fc5)改变命令行窗口的标题输入命令title” Windows命令行窗口”C:Documents and settings\Administrato r﹥color fc C: Documents and settings\Administrato r6)显示或设置系统日期?输入date7)显示或设置系统时间?输入命令time,8)显示当前时区设置输入命令w32tm/tz,9)创建宏输入命令doskey ls=dir/w,10)显示系统信息输入命令systeminfo |more11)显示内存分配输入命令mem12)命令tasklist:显示任务进程输入命令tasklist13)命令taskkill:结束任务进程输入命令taskkill5.实验提高1)基本命令的使用进入Windows控制台窗口并为控制台窗口设置文字和背景颜色,改变控制台窗口的名称,显示系统日期和时间并为系统设置新的时间和日期,改变Windows命令行提示符,获得Windows的版本号。
OS实验指导书
实验一UNIX/LINUIX入门实验学时:2学时实验类型:验证型一、实验目的了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下c语言程序的编写、编译、调试和运行方法。
二、实验内容熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。
练习UNIX/LINUX的文本行编辑器vi的使用方法熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。
用vi编写一个简单的显示“Hello,World!”c语言程序,用gcc编译并观察编译后的结果,然后运行它。
三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四、L inux 常用命令Linux 系统常用命令格式:command [option] [argument1][argument2] ...其中option以“-”开始,多个option可用一个“-”连起来,如“ls -l -a” 与“ls -la”的效果是一样的。
根据命令的不同,参数分为可选的或必须的;所有的命令从标准输入接受输入,输出结果显示在标准输出,而错误信息则显示在标准错误输出设备。
可使用重定向功能对这些设备进行重定向。
命令在正常执行结果后返回一个0值,如果命令出错可未完全完成,则返回一个非零值(在shell中可用变量$?查看)。
在shell script中可用此返回值作为控制逻辑的一部分。
帮助命令:例如:info info 可以获取如何使用info的详细信息。
磁盘操作:系统操作:网络通信:文件操作:实验二进程管理实验学时:2学时实验类型:验证型、设计型一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。
二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统教程实验指导书阮越许文方目录实验一WINDOWS进程初识 (4)1、实验目的 (4)2、实验内容和步骤 (4)3、实验结论 (5)4、程序清单 (5)实验二进程管理 (8)背景知识 (8)1、实验目的 (11)2、实验内容和步骤 (11)3、实验结论 (13)4、程序清单 (13)实验三进程同步的经典算法 (18)背景知识 (18)1、实验目的 (19)2、实验内容和步骤 (19)3、实验结论 (20)4、程序清单 (21)实验四存储管理 (25)背景知识 (25)1、实验目的 (29)2、实验内容和步骤 (29)3、实验结论 (35)4、程序清单 (35)实验五文件和设备管理 (40)背景知识 (40)1、实验目的 (42)2、实验内容与步骤 (42)3、实验结论 (45)试验六文件系统设计试验 (46)1、试验目的 (46)2、实验内容与步骤 (46)3、实验结论 (46)4、对试验的改进以及效果 (47)附录A:参考程序 (49)附录B:文件系统模拟程序 (52)52实验一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循环:_______________________________________________________________________________屏蔽j循环:_______________________________________________________________________________调整循环变量i的循环次数:_______________________________________________________________________________调整循环变量j的循环次数:_______________________________________________________________________________ 3、实验结论_______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ 4、程序清单清单1-1 一个简单的Windows控制台应用程序// hello项目# include <iostream>void main(){std::cout << “Hello, Win32 Consol Application” << std :: endl ;}清单1-2 核心态运行和用户态运行时间比计算// proclist项目# include <windows.h># include <tlhelp32.h># include <iostream.h>// 当在用户模式机内核模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法DWORD GetKernelModePercentage(const FILETIME& ftKernel,const FILETIME& ftUser){// 将FILETIME结构转化为64位整数ULONGLONG qwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)<<32)+ftKernel.dwLowDateTime;ULONGLONG qwUser=(((ULONGLONG)ftUser.dwHighDateTime)<<32)+ftUser.dwLowDateTime;// 将消耗时间相加,然后计算消耗在内核模式下的时间百分比ULONGLONG qwTotal=qwKernel+qwUser;DWORD dwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);return(dwPct);}// 以下是将当前运行过程名和消耗在内核模式下的时间百分数都显示出来的应用程序void main(int argc,char *argv[]){if(argc<2){cout<<"请给出你要查询的程序名"<<endl;exit(0);}// 对当前系统中运行的过程拍取“快照”HANDLE hSnapshot=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, // 提取当前过程0); // 如果是当前过程,就将其忽略// 初始化过程入口PROCESSENTRY32 pe;::ZeroMemory(&pe,sizeof(pe));pe.dwSize=sizeof(pe);BOOL bMore=::Process32First(hSnapshot,&pe);BOOL found = FALSE;while(bMore){// 打开用于读取的过程if(!strcmp(pe.szExeFile,argv[1])){found = TRUE;HANDLE hProcess=::OpenProcess(PROCESS_QUERY_INFORMA TION, // 指明要得到信息FALSE, // 不必继承这一句柄pe.th32ProcessID); // 要打开的进程if (hProcess!=NULL){// 找出进程的时间FILETIME ftCreation,ftKernelMode,ftUserMode,ftExit;::GetProcessTimes(hProcess, // 所感兴趣的进程&ftCreation, // 进程的启动时间&ftExit, // 结束时间(如果有的话)&ftKernelMode, // 在内核模式下消耗的时间&ftUserMode); // 在用户模式下消耗的时间// 计算内核模式消耗的时间百分比DWORD dwPctKernel=::GetKernelModePercentage(ftKernelMode, // 在内核模式上消耗的时间ftUserMode); // 在用户模式下消耗的时间// 向用户显示进程的某些信息cout<< "process ID: " << pe.th32ProcessID<< ",EXE file:" << pe.szExeFile<< ",%d in Kernel mode: " << dwPctKernel << endl;// 消除句柄::CloseHandle(hProcess);}}// 转向下一个进程bMore=::Process32Next(hSnapshot,&pe);}if(found==FALSE){cout<<"当前系统没有这个可执行程序正在运行"<<endl;exit(0);}}清单1-3 核心态运行和用户态运行时间测试程序#include <stdio.h>main(){int i,j;while(1){for(i=0;i<1000;i++);for(j=1;j<1000;j++) printf(“enter kernel mode running.”);}}实验二进程管理背景知识Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。