华北电力大学操作系统实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进 程同步的原理。
二、实验内容及步骤
1.实验准备
1)启动OS Labb
2)新建一个EOS Kernel项目。
3)生成EOS Kernel项目,从而在该项目文件夹中生成SDK文件夹。
4)新建一个EOS应用程序项目。
5)使用在第3步生成的SDK文件夹覆盖EO阪用程序项目文件夹中的SDK文件夹。
}
for(i=0i<10;i++){
prin tf("\nThe process %d exit with %d.\n",i,ulExitCode);
CloseHa ndle(Procl nfo[i].ProcessHa ndle);
CloseHa ndle(ProcI nfo[i].ThreadHa ndle);
btlv2-4Unj-t-lnrf11flQG事
乂三N弓Rihmi inyiOscH GOl B^fiU
戸勻NT;U<& i1■ lyOjcB-OOiK^fjB
L-l¥2-1I4oii-t itm£0X000XB2d6I>
任匸V^-4Uni-Llnri0^000fl^r-Tl
LZEsN理U<fl i ± inyi1OjcBOOISZGiD
5.调试PsCreateProcess函数”。
6.练习通过编程的方式创建应用程序的多个进程
3.
1.在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe
同时创建10个进程。提示:可以使用PROCESS_INFORMATI类型定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循 环等待10个子进程结束,得到退出码后关闭句柄。
for(j = 0; j < i; j++){
WaitForSi ngleObject(Procl nfo[j].ProcessHa ndle, INFINITE);
GetExitCodeProcess(Procl nfo[j].ProcessHa ndle,
prin tf("\nThe process %d exit with %d.\n",j,ulExitCode);
实验
「、实验目的和要求
1.调试线程在各种状态间的转换过程,熟悉线程的状态和转换
2.通过为线程增加挂起状态,加深对线程状态的理解。
[、实验内容及步骤
1.准备实验。启动OS Labo
2.调试线程状态的转换过程。
3.线程由阻塞状态进入就绪状态
4.线程由运行状态进入就绪状态
5.线程由就绪状态进入运行状态
6.线程由运行状态进入阻塞状态
2)输出EOS版本后的控制台如下图所示。
6.查看有应用程序运行时进程和线程的信息:
1)待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车。此时Hello.exe应用程序就开始执行。
2)迅速按Ctrl+F2切换到控制台2,并输入命令“pt”后按回车。输出的进程和线 程信息如下图所示
三、实验内容问题及解答
Startupl nfo.StdError=GetStdHa ndle(STD_ERROR_HANDLE);
for(i =0; i < 10; i++){
if(CreateProcess("A:\\Hello.exe",NULL,0,&Startup Info,&ProcI nfo[i]));
else {
7.为线程增加挂起状态。
COKSOLE-2 (Press CtrI+F1*F8 to switch console windoiii
Uclcame to ECS shel1
Suspend 31
Suspend threadOl) success,
8.完成Resume原语后,可以先使用suspend命令挂起loop线程,然后在控制台2中输入命令“Resume 31'(如果loop线程的ID是31)后按回车。命令执行成功的结 果如下图所示。如果切换回控制台1后,发现loop线程的执行计数恢复增长就说明Resume原语可以正常工作。
!_¥2-41LX2NVA
—士nx— — p —丁11沪00<1IL电貝ihC 11I■—ppiNN
IDJSijstrsm?F't*i-nr11ityiSf? t«±e1t'ittitF!T'n<^<rs3.D1衣「■fctATrli'u五工
N£QRyaclyJLiGjcESOOIHJLVC
p:e¥N-iuch ii;mgr丄oxtpeoxSE'gn
1.为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使 用一个可以吗?它们各自的主要功能是什么?如果将loader.b in的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于 512字节?
答:在IDE环境启动执行EOS操作系统时,会将boot.bin、loader.bin和kernel.dll三个二进制写入软盘镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统。仅使用
*丁N咆U<&alyOmUOOt>£k
KB¥N理UI^Ll-tlrifv1Ox&GOlBZ&D
pin:RceH.io^ficm 1 non<±i
一、实验目的和要求
1.使用EOS的信号量,编程解决生产者一消费者问题,理解进程同步的意义。2.通 过为线程增加挂起状态,加深对线程状态的理解。
2.调试跟踪EOS信号量的工作过程,理解进程同步的原理。
实验
一、
1.跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过 程。
2.查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。
二、使用仪器
二、实验内容
1.准备实验。
2Biblioteka Baidu调试EOS操作系统的启动过程。
<0>[0x£ff£fff0Jctxt): jmp fit*
Kboclis
pflMSni-E-l (Prftss Ctrl+FVFR switcli corisnlfi uiitdnu...)Ucleone to EOS shell
五、实验心得
这次是验证性试验,具体步骤和操作方法都是与实验教程参考书上一致, 实验很顺利, 实验过程没有遇到困难。通过这次实验,我掌握了OS Lab启动和退出操作;练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法新建项目、生 成项目、调试项目等。
IcflNSni-E—1i ikHlii-Lnin^nJ rs u> £iyrl rru 7.->
籾u1uuimefLu ECUS匕1
士n **〜n w Pf'ocjcs®L-1s*t.C 1Pr-ocess-1乂** —— ****** —
TDT't*i-nr1-■tij EriCncitti±I Pr*irnusT'ijTlir'iiT-flKl IDIi^irtrjmNj»in
华北电力大学
实验报告
|
|
实验名称操作系统综合实验
课程名称
|
|
专业班级:网络学生姓名:
学 号: 成 绩:
指导教师:王德文/姜丽梅 实验日期:2015年11月4日
实验一实验环境的使用
一、实验目的
1.熟悉操作系统集成实验环境OS Lab的基本使用方法。
2.练习编译、调试EOS操作系统内核以及EOS应用程序。
COMSDLE-2 (Press CtrI+F1*F8toswitch console windaw.»+)Ucleone to EOS shel1
>suspend 31
Suspend tbread(31) success・
三、实验内容问题及解答
1.思考一下,在本实验中,当loop线程处于运行状态时,EOS^还有哪些线程,它 们分别处于什么状态。可以使用控制台命令pt查看线程的状态。
prin tf("Create10p//rocessesa nd wait for the processes exit...\n\n");
StartupI nfo.Stdl nput = GetStdHa ndle(STD_INPUT_HANDLE);
Startup In fo.StdOutput = GetStdHa ndle(STD OUTPUT HANDLE);
四、实验过程
1.新建Windows控制台应用程序
生成项目:
执行项目:
调试项目:
intFunc(Int口〕,// 芦明Fuek函数
i.nxn-0,n=FunjcdO);
printfCHello World
查看EOS SDK( Software Development Kit)文件夹:
修改EOS应用程序项目名称:
序的进程如图:
9OS L^b PC-Microsoft Virtual PC 2007巳
3.练习通过编程的方式让应用程序创建另一个应用程序的进程。应用程序创建另一 个应用程序的进程的执行结果如图:
5»OS Lab PC-Microsoft Virtual PC 2007
4.调试CreateProcess函数。
二、实验内容
1.启动OS Lab;
2.学习OS Lab的基本使用方法:练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等);
3.EOS内核项目的生成和调试:对EOS内核项目的各种操作(包括新建、生成和各 种调试功能等)与对Windows控制台项目的操作是完全一致的;
CloseHa ndle(Proc In fo[j].ProcessHa ndle);
CloseHa ndle(Proc In fo[j].ThreadHa ndle);
}
prin tf("CreateProcess Failed,Error code:0x%X.\n",
GetLastError());
4.EOS应用程序项目的生成和调试;
5.退出OS Labo
三、实验内容问题及解答
1.练习使用单步调试功能(逐过程、逐语句),体会在哪些情况下应该使用“逐过 程”调试,在哪些情况下应该使用“逐语句”调试。练习使用各种调试工具(包括“监 视”窗口、“调用堆栈”窗口等)。
答:逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。 而逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。因此,在需要进 入函数体时用逐语句调试,而不需要进入函数体时用逐过程调试。
其中一个是不能运行的。
实验
一、
1.练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理 解进程和程序的区别。
2.调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资 源分配的单位。
2.
1.准备实验。启动OS Labo
2.练习使用控制台命令创建EOS应用程序的进程。使用控制台命令创建EO阪用程
答:修改代码为:
STARTUPINFO StartupI nfo;
PROCESS」NF ORMATION ProcI nfo[10];
ULONG ulExitCode;
INT nResult=0;。
int i,j;//#ifdef_DEBUG__asm("i nt $3\n nop");#e ndif
nResult = 1; return nResult;
}
for(i=0;i<10;i++){
WaitForSi ngleObject(Proc In fo[i].ProcessHa ndle, INFINITE);
GetExitCodeProcess(ProcI nfo[i].ProcessHa ndle,&ulExitCode);
3.调试加载程序。Loader程序的主要任务是将操作系统内核(kernel.dll文件)加
载到内存中,然后让CPUS入保护模式并且启用分页机制,最后进入操作系统内核开始 执行(跳转到kernel.dll的入口点执行)。
4.调试内核。
5.EOS启动后的状态和行为。查看EOS的版本号:
1)在控制台中输入命令“ver”后按回车。
}
retur n n Result; &ulExitCode);
}
4.
本实验主要的问题就是用hello.exe同时创建10个进程:因为编程基础不好,刚开 始的程序很难通过编译•最后使用PROCESS_INFORMAT类型定义一个有10个元素的数 组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等 待10个子进程结束,得到退出码后关闭句柄。并对细节做了部分修正才成功。
二、实验内容及步骤
1.实验准备
1)启动OS Labb
2)新建一个EOS Kernel项目。
3)生成EOS Kernel项目,从而在该项目文件夹中生成SDK文件夹。
4)新建一个EOS应用程序项目。
5)使用在第3步生成的SDK文件夹覆盖EO阪用程序项目文件夹中的SDK文件夹。
}
for(i=0i<10;i++){
prin tf("\nThe process %d exit with %d.\n",i,ulExitCode);
CloseHa ndle(Procl nfo[i].ProcessHa ndle);
CloseHa ndle(ProcI nfo[i].ThreadHa ndle);
btlv2-4Unj-t-lnrf11flQG事
乂三N弓Rihmi inyiOscH GOl B^fiU
戸勻NT;U<& i1■ lyOjcB-OOiK^fjB
L-l¥2-1I4oii-t itm£0X000XB2d6I>
任匸V^-4Uni-Llnri0^000fl^r-Tl
LZEsN理U<fl i ± inyi1OjcBOOISZGiD
5.调试PsCreateProcess函数”。
6.练习通过编程的方式创建应用程序的多个进程
3.
1.在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe
同时创建10个进程。提示:可以使用PROCESS_INFORMATI类型定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循 环等待10个子进程结束,得到退出码后关闭句柄。
for(j = 0; j < i; j++){
WaitForSi ngleObject(Procl nfo[j].ProcessHa ndle, INFINITE);
GetExitCodeProcess(Procl nfo[j].ProcessHa ndle,
prin tf("\nThe process %d exit with %d.\n",j,ulExitCode);
实验
「、实验目的和要求
1.调试线程在各种状态间的转换过程,熟悉线程的状态和转换
2.通过为线程增加挂起状态,加深对线程状态的理解。
[、实验内容及步骤
1.准备实验。启动OS Labo
2.调试线程状态的转换过程。
3.线程由阻塞状态进入就绪状态
4.线程由运行状态进入就绪状态
5.线程由就绪状态进入运行状态
6.线程由运行状态进入阻塞状态
2)输出EOS版本后的控制台如下图所示。
6.查看有应用程序运行时进程和线程的信息:
1)待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车。此时Hello.exe应用程序就开始执行。
2)迅速按Ctrl+F2切换到控制台2,并输入命令“pt”后按回车。输出的进程和线 程信息如下图所示
三、实验内容问题及解答
Startupl nfo.StdError=GetStdHa ndle(STD_ERROR_HANDLE);
for(i =0; i < 10; i++){
if(CreateProcess("A:\\Hello.exe",NULL,0,&Startup Info,&ProcI nfo[i]));
else {
7.为线程增加挂起状态。
COKSOLE-2 (Press CtrI+F1*F8 to switch console windoiii
Uclcame to ECS shel1
Suspend 31
Suspend threadOl) success,
8.完成Resume原语后,可以先使用suspend命令挂起loop线程,然后在控制台2中输入命令“Resume 31'(如果loop线程的ID是31)后按回车。命令执行成功的结 果如下图所示。如果切换回控制台1后,发现loop线程的执行计数恢复增长就说明Resume原语可以正常工作。
!_¥2-41LX2NVA
—士nx— — p —丁11沪00<1IL电貝ihC 11I■—ppiNN
IDJSijstrsm?F't*i-nr11ityiSf? t«±e1t'ittitF!T'n<^<rs3.D1衣「■fctATrli'u五工
N£QRyaclyJLiGjcESOOIHJLVC
p:e¥N-iuch ii;mgr丄oxtpeoxSE'gn
1.为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使 用一个可以吗?它们各自的主要功能是什么?如果将loader.b in的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于 512字节?
答:在IDE环境启动执行EOS操作系统时,会将boot.bin、loader.bin和kernel.dll三个二进制写入软盘镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统。仅使用
*丁N咆U<&alyOmUOOt>£k
KB¥N理UI^Ll-tlrifv1Ox&GOlBZ&D
pin:RceH.io^ficm 1 non<±i
一、实验目的和要求
1.使用EOS的信号量,编程解决生产者一消费者问题,理解进程同步的意义。2.通 过为线程增加挂起状态,加深对线程状态的理解。
2.调试跟踪EOS信号量的工作过程,理解进程同步的原理。
实验
一、
1.跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过 程。
2.查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。
二、使用仪器
二、实验内容
1.准备实验。
2Biblioteka Baidu调试EOS操作系统的启动过程。
<0>[0x£ff£fff0Jctxt): jmp fit*
Kboclis
pflMSni-E-l (Prftss Ctrl+FVFR switcli corisnlfi uiitdnu...)Ucleone to EOS shell
五、实验心得
这次是验证性试验,具体步骤和操作方法都是与实验教程参考书上一致, 实验很顺利, 实验过程没有遇到困难。通过这次实验,我掌握了OS Lab启动和退出操作;练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法新建项目、生 成项目、调试项目等。
IcflNSni-E—1i ikHlii-Lnin^nJ rs u> £iyrl rru 7.->
籾u1uuimefLu ECUS匕1
士n **〜n w Pf'ocjcs®L-1s*t.C 1Pr-ocess-1乂** —— ****** —
TDT't*i-nr1-■tij EriCncitti±I Pr*irnusT'ijTlir'iiT-flKl IDIi^irtrjmNj»in
华北电力大学
实验报告
|
|
实验名称操作系统综合实验
课程名称
|
|
专业班级:网络学生姓名:
学 号: 成 绩:
指导教师:王德文/姜丽梅 实验日期:2015年11月4日
实验一实验环境的使用
一、实验目的
1.熟悉操作系统集成实验环境OS Lab的基本使用方法。
2.练习编译、调试EOS操作系统内核以及EOS应用程序。
COMSDLE-2 (Press CtrI+F1*F8toswitch console windaw.»+)Ucleone to EOS shel1
>suspend 31
Suspend tbread(31) success・
三、实验内容问题及解答
1.思考一下,在本实验中,当loop线程处于运行状态时,EOS^还有哪些线程,它 们分别处于什么状态。可以使用控制台命令pt查看线程的状态。
prin tf("Create10p//rocessesa nd wait for the processes exit...\n\n");
StartupI nfo.Stdl nput = GetStdHa ndle(STD_INPUT_HANDLE);
Startup In fo.StdOutput = GetStdHa ndle(STD OUTPUT HANDLE);
四、实验过程
1.新建Windows控制台应用程序
生成项目:
执行项目:
调试项目:
intFunc(Int口〕,// 芦明Fuek函数
i.nxn-0,n=FunjcdO);
printfCHello World
查看EOS SDK( Software Development Kit)文件夹:
修改EOS应用程序项目名称:
序的进程如图:
9OS L^b PC-Microsoft Virtual PC 2007巳
3.练习通过编程的方式让应用程序创建另一个应用程序的进程。应用程序创建另一 个应用程序的进程的执行结果如图:
5»OS Lab PC-Microsoft Virtual PC 2007
4.调试CreateProcess函数。
二、实验内容
1.启动OS Lab;
2.学习OS Lab的基本使用方法:练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等);
3.EOS内核项目的生成和调试:对EOS内核项目的各种操作(包括新建、生成和各 种调试功能等)与对Windows控制台项目的操作是完全一致的;
CloseHa ndle(Proc In fo[j].ProcessHa ndle);
CloseHa ndle(Proc In fo[j].ThreadHa ndle);
}
prin tf("CreateProcess Failed,Error code:0x%X.\n",
GetLastError());
4.EOS应用程序项目的生成和调试;
5.退出OS Labo
三、实验内容问题及解答
1.练习使用单步调试功能(逐过程、逐语句),体会在哪些情况下应该使用“逐过 程”调试,在哪些情况下应该使用“逐语句”调试。练习使用各种调试工具(包括“监 视”窗口、“调用堆栈”窗口等)。
答:逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。 而逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。因此,在需要进 入函数体时用逐语句调试,而不需要进入函数体时用逐过程调试。
其中一个是不能运行的。
实验
一、
1.练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理 解进程和程序的区别。
2.调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资 源分配的单位。
2.
1.准备实验。启动OS Labo
2.练习使用控制台命令创建EOS应用程序的进程。使用控制台命令创建EO阪用程
答:修改代码为:
STARTUPINFO StartupI nfo;
PROCESS」NF ORMATION ProcI nfo[10];
ULONG ulExitCode;
INT nResult=0;。
int i,j;//#ifdef_DEBUG__asm("i nt $3\n nop");#e ndif
nResult = 1; return nResult;
}
for(i=0;i<10;i++){
WaitForSi ngleObject(Proc In fo[i].ProcessHa ndle, INFINITE);
GetExitCodeProcess(ProcI nfo[i].ProcessHa ndle,&ulExitCode);
3.调试加载程序。Loader程序的主要任务是将操作系统内核(kernel.dll文件)加
载到内存中,然后让CPUS入保护模式并且启用分页机制,最后进入操作系统内核开始 执行(跳转到kernel.dll的入口点执行)。
4.调试内核。
5.EOS启动后的状态和行为。查看EOS的版本号:
1)在控制台中输入命令“ver”后按回车。
}
retur n n Result; &ulExitCode);
}
4.
本实验主要的问题就是用hello.exe同时创建10个进程:因为编程基础不好,刚开 始的程序很难通过编译•最后使用PROCESS_INFORMAT类型定义一个有10个元素的数 组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等 待10个子进程结束,得到退出码后关闭句柄。并对细节做了部分修正才成功。