操作系统实验报告附思考题

合集下载

操作系统实验报告(全)

操作系统实验报告(全)

操作系统实验报告书院系名称:电子工程学院电子指导教师:班级:学号:学生姓名:实验题目一:进程一、实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。

二、实验内容(1)补充POSIX 下进程控制的残缺版实验程序(2)回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。

3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。

进程怎样能主动退出?这两种退出方式哪种更好一些?三、实验步骤1.根据题意进入DOC环境中编写程序。

2.编译,链接,运行程序,进行调试。

3.分析实验结果及回答问题。

四、调试情况,回答问题及体会1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。

2、在设计过程中的感受。

调试情况:回答上述实验内容中的问题1.预期结果:会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际结果:与预期差不多,因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。

随机输出0-9号进程,sleep(SLEEP_INTERV AL),循环输出,直到输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。

分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。

操作系统实验报告 附思考题

操作系统实验报告 附思考题

课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名称:操作系统综合实验题目:oslab综合实验院系:计算机系班级:学号:学生姓名:指导教师:设计周数:分散进行成绩:日期:2015 年10 月29 日实验1 实验环境的使用一、综合实验的目的与要求熟悉操作系统集成实验环境OS Lab 的基本使用方法。

练习编译、调试EOS 操作系统内核以及EOS 应用程序。

二、实验正文1.启动 OS Lab2.1 执行项目Windows 控制台窗口内容显示2.2 调试项目2.2.1 使用断点中断执行2.2.2 单步调试2.2.2 .3单步调试结果显示:练习使用“逐语句”功能和“跳出”功能2.2.3 查看变量的值快速监视添加监视2.2.4 调用堆栈调用堆栈显示内容进入Func 函数双击 main 函数所在的行表示此函数是当前调用堆栈中的活动函数。

3 新建EOS 内核项目4 EOS 应用程序项目的生成和调试4.1 新建EOS 应用程序项目4.2 调试项目添加断点后单步调试结果显示4.3 查看软盘镜像文件中的内容4.4修改EOS 应用程序项目名称5 退出OS Lab6 保存EOS 内核项目三、综合实验总结或结论思考与练习:1.在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。

答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。

而逐过程碰到函数时不进入函数,把函数调用当成一条语句去执行。

2. 生成EOS SDK 文件夹的目的和作用。

明白文件夹的组织结构和各个文件的来源和作用。

查看EOS 应用程序包含了SDK 文件夹中的哪些头文件,是如何包含的?(1)EOS SDK为应用程序调用系统API提供服务,可作为用户编程中使用的工具包集合。

(2)其主要包括INC头文件LIB文件夹、导入库文件和BIN文件夹、动态链接库、可执行程序、二进制文件。

(3)包含的头文件有:eos.h负责导出API函数,eosdef.h声明负责导出函数类型的定义,error.h负责导出错误码。

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。

在这个实验中,我们使用C++编写程序来创建和管理进程。

通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。

首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。

然后,使用等待函数来等待子进程的结束,并获取其返回值。

在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。

2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。

在这个实验中,我们研究了动态内存分配和释放的机制。

使用 C++中的 new 和 delete 操作符来分配和释放内存。

通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。

同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。

通过模拟内存访问过程,理解了页表的作用和地址转换的过程。

3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。

在这个实验中,我们对文件的创建、读写和删除进行了操作。

使用 C++的文件流操作来实现对文件的读写。

通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。

此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。

4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。

《操作系统》实验报告(3) (2)

《操作系统》实验报告(3) (2)
任务四:修改后的程序代码是:
#include <stdio.h>
main(){
int p1, p2;
while ((p1=fork())==-1);
if (p1==0)
printf(“this is the child1 process!\n”);
else {
while ((p2=fork())==-1);
exit(0);}
else if(pid==0)
{execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
exit(0);}
else
{pid=waitpid(pc,NULL,0);
printf(“the child process:%d\n”,pid);}
while ((p2=fork())==-1);/*父进程创建第二个进程,直到成功*/
if (p2==0)/* 0返回给子进程2*/
putchar(‘c’);/*子进程2的处理过程*/
else putchar(‘a’);/*子进程2创建完成后,父进程的处理过程*/}
}
多次运行结果大多数都是bca,偶尔会出现bac或者cab。进程的处理过程太短,多次运行可能出现差错。
任务6:编写一段程序,使用系统调用fork( )创建一个子进程。子进程通过系统调用exec系列函数调用命令ls,调用exit( )结束。而父进程则调用waitpid( )等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。
创建进程的系统调用:
fork( ),创建一个新进程。
系统调用格式:pid=fork( );
}
任课教师签名:2011年4月日

《操作系统》课内实验报告

《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。

实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。

三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。

在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。

2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。

在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。

3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。

在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。

4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。

在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。

四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。

(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。

(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。

系统业务操作实验报告(3篇)

系统业务操作实验报告(3篇)

第1篇一、实验目的1. 熟悉系统业务操作流程;2. 掌握系统业务操作的基本方法;3. 提高实际操作能力,为今后的工作打下基础。

二、实验环境1. 操作系统:Windows 102. 浏览器:Chrome3. 实验系统:XX企业资源计划系统(ERP)三、实验内容1. 系统登录与退出2. 基础信息管理3. 财务管理4. 供应链管理5. 人力资源管理6. 实验总结与反思四、实验步骤1. 系统登录与退出(1)打开浏览器,输入实验系统网址,进入登录页面。

(2)输入用户名、密码,点击“登录”按钮。

(3)登录成功后,系统进入主界面。

(4)点击右上角“退出”按钮,退出系统。

2. 基础信息管理(1)点击主界面左侧菜单中的“基础信息管理”模块。

(2)查看基础信息列表,包括部门、岗位、人员等信息。

(3)新增部门信息:点击“新增”按钮,填写部门名称、负责人等基本信息,保存。

(4)修改部门信息:选中要修改的部门,点击“修改”按钮,修改相关信息,保存。

(5)删除部门信息:选中要删除的部门,点击“删除”按钮,确认删除。

3. 财务管理(1)点击主界面左侧菜单中的“财务管理”模块。

(2)查看财务报表,包括资产负债表、利润表、现金流量表等。

(3)新增报销单:点击“新增”按钮,填写报销单信息,提交审批。

(4)查看报销单:查看已提交的报销单,包括报销金额、报销日期、审批状态等信息。

(5)审批报销单:对报销单进行审批,同意或拒绝报销。

4. 供应链管理(1)点击主界面左侧菜单中的“供应链管理”模块。

(2)查看采购订单列表,包括采购订单号、供应商、采购金额等信息。

(3)新增采购订单:点击“新增”按钮,填写采购订单信息,提交审批。

(4)查看采购订单:查看已提交的采购订单,包括采购订单号、供应商、采购金额等信息。

(5)审批采购订单:对采购订单进行审批,同意或拒绝采购。

5. 人力资源管理(1)点击主界面左侧菜单中的“人力资源管理”模块。

(2)查看员工信息列表,包括姓名、部门、岗位、入职日期等信息。

操作系统实验报告3篇

操作系统实验报告3篇

课程设计说明书设计题目:操作系统课程设计班级:信息管理与信息系统2011级学号:姓名:山东科技大学2013年12 月25 日课程设计任务书学院信息科学与工程专业信息学管理与信息系统班级2011-1姓名一、课程设计题目:操作系统课程设计二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育出版社. 2007.3.(2)计算机操作系统(第三版)西安电子科技大学出版社(3)三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现(2)死锁相关算法的实现(3)磁盘调度算法的实现四、课程设计相关附件(如:图纸、软件等):(1)程序源代码(2)五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1指导教师签字:指导教师对课程设计的评语成绩:指导教师签字:年月日设计1 CPU调度算法的模拟实现一、设计目的1、根据系统的资源分配策略所规定的资源分配算法2、利用编程语言,模拟实现先来先服务(FCFS)、最短作业优先(非抢占SJF)、非抢占优先调度算法、时间片轮转调度算法(RR)3、针对模拟进程,利用CPU调度算法进行调度4、进行算法评价,计算平均周转时间和平均等待时间二、设计要求1、调度所需的进程参数由输入产生(手工输入或者随机数产生)2、输出调度结果3、输出算法评价指标三、设计说明1、定义public类:class program{public:char name;//进程名int atime;//进程到达的时间int stime;//进程服务的时间int btime;//进程开始执行的时间int ftime;//进程完成的时间int rtime;//进程的周转时间float qrtime;//进程的带权周转时间};2、冒泡排序:class program t;for( i=1;i<m;i++)for(int j=0;j<m-i;j++)if(p[j].atime>p[j+1].atime){t=p[j];p[j]=p[j+1];p[j+1]=t;}3、流程图:(1)①先来先服务调度流程图:②主要程序p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(float)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}①短作业优先进程(非抢占优先权)调度流程图:②(SJF)主要代码int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].stime<p[min].stime){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}③优先权调度算法(非抢占):int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].youxianquan<p[min].youxianquan){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}①时间片轮转调度算法:②主要算法int time=p[0].atime;int Max=p[0].stime1;for(i=0; i<m; i++){p[i].stime2=p[i].stime1;if(p[i].stime1>Max)Max=p[i].stime1; }for(int j=0; j<Max; j++){for(i=0; i<m; i++){if(p[i].stime2==0)continue;if(p[i].atime<=time){p[i].stime2-=1;time+=1;}elsei=-1;if(p[i].stime2==0)p[i].ftime=time;}}4、输出p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(double)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}cout<<"进程******到达时间**服务时间**开始执行时间*完成时间**周转时间**带权周转时间"<<endl;for(i=0;i<m;i++){cout<<setiosflags(ios::left)<<setw(10)<<p[i].name<<setw(10)<< p[i].atime<<setw(10)<<p[i].stime<<setw(13)<<p[i].btime<<setw(10) <<p[i].ftime<<setw(10)<<p[i].rtime<<setw(13)<<p[i].qrtime<<endl;}}四、运行结果及分析1、先来先服务(FCFS)测试数据2、短作业优先(SJF)测试数据3、优先权(非抢占)测试数据4、时间片轮转(RR)测试数据五、总结通过这次试验,我进一步的理解了冒泡排序的算法,而且,对进程作业先来先服务、短进程优先、非抢占优先、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!了解到算法很重要,又更加明白算法本身可以节约时间。

哈尔滨工业大学(威海)操作系统实验报告及答案

哈尔滨工业大学(威海)操作系统实验报告及答案

哈尔滨工业大学(威海)操作系统实验报告说明:本实验报告实验答案,是本人在上实验时的测试数据,由于操作系统实验中后面实验与当时所做实验的计算机的配置有关,因此本实验报的数据仅供参考。

实验1进程的描述与控制Windows 2000编程(实验估计时间:100分钟)1.1 背景知识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函数,进行计算或向磁盘写入数据等。

Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库(DLL)代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告附思考题文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名称:操作系统综合实验题目: oslab综合实验院系:计算机系班级:学号:学生姓名:指导教师:设计周数:分散进行成绩:日期: 2015 年 10 月 29 日实验1 实验环境的使用一、综合实验的目的与要求熟悉操作系统集成实验环境OS Lab 的基本使用方法。

练习编译、调试EOS 操作系统内核以及EOS 应用程序。

二、实验正文1.启动 OS Lab执行项目Windows 控制台窗口内容显示调试项目使用断点中断执行单步调试.3单步调试结果显示:练习使用“逐语句”功能和“跳出”功能查看变量的值快速监视添加监视调用堆栈调用堆栈显示内容进入Func 函数双击 main 函数所在的行表示此函数是当前调用堆栈中的活动函数。

3 新建EOS 内核项目4 EOS 应用程序项目的生成和调试新建EOS 应用程序项目调试项目添加断点后单步调试结果显示查看软盘镜像文件中的内容修改EOS 应用程序项目名称5 退出OS Lab6 保存EOS 内核项目三、综合实验总结或结论思考与练习:1.在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。

答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。

而逐过程碰到函数时不进入函数,把函数调用当成一条语句去执行。

2. 生成EOS SDK 文件夹的目的和作用。

明白文件夹的组织结构和各个文件的来源和作用。

查看EOS 应用程序包含了SDK 文件夹中的哪些头文件,是如何包含的(1)EOSSDK为应用程序调用系统API提供服务,可作为用户编程中使用的工具包集合。

(2)其主要包括INC头文件LIB文件夹、导入库文件和BIN文件夹、动态链接库、可执行程序、二进制文件。

(3)包含的头文件有:负责导出API函数,声明负责导出函数类型的定义,负责导出错误码。

(4)EOS应用程序在项目的头文件中只是包含了文件,在文件中又包含了和文件。

实验 2 操作系统的启动一、综合实验的目的与要求跟踪调试 EOS 在 PC 机上从加电复位到成功启动全过程,了解操作系统的启动过程。

查看 EOS 启动后的状态和行为,理解操作系统启动后的工作方式。

二、实验正文1. 准备实验新建一个 EOS Kernel 项目。

打开和两个汇编文件。

生成项目。

找到文件,记录下此文件的大小 1566 字节。

2 调试 EOS 操作系统的启动过程使用 Bochs 做为远程目标机找到“远程目标机”属性,将此属性值修改为“BochsDebug”调试 BIOS 程序在 Console 窗口中输入调试命令 sreg 后按回车,其中 CS 寄存器信息行中的“ s=0xf000”表示 CS 寄存器的值为 0xf000。

输入调试命令 r 后按回车,显示当前 CPU 中各个通用寄存器的值。

其中“ rip:0x00000000:0000fff0”表示 IP 寄存器的值为 0xfff0。

输入调试命令 xp /1024b 0x0000,查看开始的 1024 个字节的物理内存。

在 Console 中输出的这1K 物理内存的值都为 0,说明 BIOS 中断向量表还没有被加载到此处。

输入调试命令 xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。

输出的内存值都为 0,说明软盘引导扇区还没有被加载到此处。

可以验证 BIOS 第一条指令所在逻辑地址中的段地址和 CS 寄存器值是一致的,偏移地址和 IP 寄存器值是一致的。

由于内存还没有被使用,所以其中的值都为 0。

调试软盘引导扇区程序输入调试命令 vb 0x0000:0x7c00,添加断点输入调试命令 c 继续执行输入调试命令 sreg 验证 CS 寄存器( 0x0000)的值。

输入调试命令 r 验证 IP 寄存器( 0x7c00)的值。

输入调试命令 xp /1024b 0x0000 验证此时 BIOS 中断向量表已经被载入。

输入调试命令 xp /512b 0x7c00 显示软盘引导扇区程序的所有字节码。

输入调试命令 xp /512b 0x0600 验证图 3-2 中第一个用户可用区域是空白的。

输入调试命令 xp /512b 0x7e00 验证图 3-2 中第二个用户可用区域是空白的。

自己设计两个查看内存的调试命令,验证这两个用户可用区域的高地址端是空白的。

(1) xp /512b 0x7f00 (2) xp /512b0x0700输入调试命令 xp /512b 0xa0000 验证图 3-2 中上位内存已经被系统占用。

自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。

xp /512b 0xb0000输入调试命令 xp /8b 0x1000 查看内存0x1000 处的数据,验证此块内存的前三个字节和文件中的第一条指令的字节码是相同的。

根据之前记录的文件的大小,自己设计一个查看内存的调试命令文件的大小为1566个字节,转换为十六进制的61E,所以程序最后八个字节在物理内存的0x1616到0x161D的位置,所以调试命令为xp/8b 0x1616。

经检验,程序结束位置字节码与反汇编命令相同。

注:查看文件的大小应在“属性”对话框中看。

调试加载程序在“监视”窗口中可以看到KiSystemStartup 函数地址为{void (PVOID)} 0x800***** KiSystemStartup>EOS 启动后的状态和行为三、综合实验总结或结论1.为什么 EOS 操作系统从软盘启动时要使用和两个程序使用一个可以吗它们各自的主要功能是什么如果将的功能移动到文件中,则文件的大小是否仍然能保持小于512 字节答:在IDE环境启动执行EOS操作系统时,会将,,三个二进制写入软件镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统,使用其中一个是不能运行的。

2.为什么软盘引导扇区程序选择将加载到第一个可用区域的 0x1000 处呢这样做有什么好处这样做会对文件的大小有哪些限制。

答:用户只用两个可用区域,加载位置非此即彼。

第一个可用用户区是低地址区,且空间大小比较小,适合容纳小文件,所以我们选择将占用空加载到第一用户区。

优点:低地址开始,便于搜索查找小文件占用小空间,节约资源。

限制:文件必须小于 1c00k。

实验 3 进程的创建一、综合实验的目的与要求练习使用 EOS API 函数 CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。

调试跟踪 CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。

二、实验正文1 准备实验2 练习使用控制台命令创建 EOS 应用程序的进程应用程序输出结果3 练习通过编程的方式让应用程序创建另一个应用程序的进程可知子进程结束后,父进程继续执行4 调试 CreateProcess 函数在“反汇编”窗口的左侧显示的虚拟地址中5 调试 PsCreateProcess 函数进程执行的结果:绘制一幅进程创建过程的流程图。

6 练习通过编程的方式创建应用程序的多个进程多个进程并发执行的结果:有结果显示可知有两个进程在执行三、综合实验总结或结论1. 在源代码文件提供的源代码基础上进行修改,要求使用同时创建 10 个进程。

修改结果如下图所示:部分修改代码如下图所示:(“……”部分为相似的4-9进程代码)if (CreateProcess("A:\\", NULL, 0, &StartupInfo, &ProcInfoOne)&& CreateProcess("A:\\", NULL, 0, &StartupInfo, &ProcInfoTwo)&& CreateProcess("A:\\", NULL, 0, &StartupInfo, &ProcInfo3)……&& CreateProcess("A:\\", NULL, 0, &StartupInfo, &ProcInfo10)) {WaitForSingleObject, INFINITE);WaitForSingleObject, INFINITE);WaitForSingleObject, INFINITE);……WaitForSingleObject, INFINITE);GetExitCodeProcess, &ulExitCode);……GetExitCodeProcess, &ulExitCode);printf("\nThe process 3 exit with %d.\n", ulExitCode);……GetExitCodeProcess, &ulExitCode);printf("\nThe process 10 exit with %d.\n", ulExitCode);CloseHandle;……CloseHandle;CloseHandle;CloseHandle;……CloseHandle;CloseHandle;2.在 PsCreateProcess 函数中调用了 PspCreateProcessEnvironment 函数后又先后调用了PspLoadProcessImage 和 PspCreateThread 函数,学习这些函数的主要功能。

能够交换这些函数被调用的顺序吗答:PspCreateProcessEnvironment创建了进程控制块,地址空间和分配了句柄表,PspLoadProcessImage将进程的可执行映象加载的到了进程的地址空间中,PspCreateThread 创建了进程的主线程。

这三个函数知道自己从哪里开始执行,执行哪些指令,因此不能交换它们的顺序。

实验 4 线程的状态和转换一、综合实验的目的与要求调试线程在各种状态间的转换过程,熟悉线程的状态和转换。

通过为线程增加挂起状态,加深对线程状态的理解。

二、实验正文1 准备实验2 调试线程状态的转换过程线程由阻塞状态进入就绪状态“ *Thread”State 域的值为 3( Waiting),双向链表项 StateListEntry 的 Next 和 Prev 指针的值都不为 0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中; StartAddr 域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。

相关文档
最新文档