合肥工业大学操作系统实验报告
- 格式:doc
- 大小:4.91 MB
- 文档页数:41
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。
实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。
三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。
在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。
通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。
2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。
通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。
在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。
(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。
通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。
2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。
在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。
(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。
篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
合肥工业大学程序设计基础实验报告姓名:班级: 计算机科学与技术学号:合肥工业大学计算机与信息学院1实验七类与对象1(实验目的要求(1) 掌握类的定义和实现。
(2) 掌握对象创建及使用的基本方法。
2(实验设备硬件环境:微型计算机软件环境:操作系统: Windows语言环境: Visual C++3(预习要求学习教材有关类的定义与实现、对象创建与应用等有关内容,对实验基本要求应在上机实验前仔细阅读,程序应事先编制完成,上机时录入调试,同时还应设计相应的测试用例集,检查程序的正确性、可靠性、完备性和容错能力。
4(实验内容(1)下面程序定义了一个以hours, minutes和seconds作为数据成员的Time 类。
设计了成员函数将两个Time对象相加(即时间相加),并进行相应的检查,查看增加的分钟数及秒数是否大于59。
如果秒数大于59,则分钟数向前递增1。
类似地,如果分钟数大于59,则小时数向前增1。
#include <iostream>using namespace std;class Time{private:int hours, minutes, seconds;public:void get_time(){2cin>>hours>>minutes>>seconds;}void display_time(){cout<<hours<<':'<<minutes<<':'<<seconds<<endl;}void add_time(Time & t1, Time & t2){hours=t1.hours+t2.hours;minutes=t1.minutes+t2.minutes;seconds=t1.seconds+t2.seconds;if(seconds>=60){seconds-=60;minutes++;}if(minutes>=60){minutes-=60;hours++;}}};void main(){Time one, two, three;cout<<"\nEnter the first time(hours minutes seconds):"; one.get_time();cout<<"\nEnter the second time(hours minutes seconds):"; two.get_time();three.add_time(one,two);cout<<"the result is:"<<endl;three.display_time();}[基本要求], 上机录入、调试上面程序。
操作系统实验报告模板一、实验目的本次操作系统实验的主要目的是通过实际操作和观察,深入理解操作系统的核心概念和功能,包括进程管理、内存管理、文件系统、设备管理等方面。
同时,培养学生的动手能力、问题解决能力和团队合作精神,提高对操作系统原理的掌握程度和实际应用能力。
二、实验环境1、操作系统:_____(具体操作系统名称及版本)2、开发工具:_____(如编译器、调试器等)3、硬件环境:_____(处理器型号、内存大小等)三、实验内容(一)进程管理实验1、进程创建与终止使用系统调用创建多个进程,并观察进程的创建过程和资源分配情况。
实现进程的正常终止和异常终止,观察终止时的系统行为。
2、进程调度研究不同的进程调度算法,如先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。
通过编程模拟实现这些调度算法,并比较它们的性能。
3、进程同步与互斥利用信号量、互斥锁等机制实现进程之间的同步与互斥。
编写多进程程序,模拟生产者消费者问题、读者写者问题等经典同步场景。
(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法、最坏适应算法等。
观察内存分配和回收的过程,分析算法的优缺点。
2、虚拟内存了解虚拟内存的概念和实现原理。
通过设置页表、进行页面置换等操作,模拟虚拟内存的管理过程。
(三)文件系统实验1、文件操作实现文件的创建、打开、读写、关闭等基本操作。
研究文件的属性(如权限、大小、创建时间等)的设置和获取。
2、目录管理创建、删除目录,遍历目录结构。
实现文件和目录的重命名、移动等操作。
(四)设备管理实验1、设备驱动程序了解设备驱动程序的结构和工作原理。
编写简单的设备驱动程序,实现对特定设备的控制和数据传输。
2、设备分配与回收研究设备分配的策略,如独占式分配、共享式分配等。
实现设备的分配和回收过程,观察系统的资源利用情况。
四、实验步骤(一)进程管理实验步骤1、进程创建与终止编写程序,使用系统调用创建指定数量的进程。
《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 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 进程的创建一、实验目的练习使用EOS API 函数CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。
调试跟踪CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。
二、实验过程记录1./*Hello.c*/#include "EOSApp.h"int main(int argc, char* argv[]){int i;for (i = 1; i <= 5; i++) {printf("Hello,world! %d\n", i);Sleep(1000);}printf("Bye-bye!\n");return 0;}作用:测试软盘镜像中的程序。
输出"Hello,world! I”并循环输出五次,每次挂起1000ms,最后输出” Bye-b ye!”。
结果:2./*NewProc.c*/#include "EOSApp.h"int main(int argc, char* argv[]){STARTUPINFO StartupInfo;PROCESS_INFORMATION ProcInfo;ULONG ulExitCode; // 子进程退出码INT nResult = 0; // main 函数返回值。
0 表示成功,非0 表示失败。
#ifdef _DEBUG__asm("int $3\n nop");#endifprintf("Create a process and wait for the process exit...\n\n");//// 使子进程和父进程使用相同的标准句柄。
//StartupInfo.StdInput = GetStdHandle(STD_INPUT_HANDLE);StartupInfo.StdOutput = GetStdHandle(STD_OUTPUT_HANDLE);StartupInfo.StdError = GetStdHandle(STD_ERROR_HANDLE);//// 创建子进程。
一.设计题目第9题:进程死锁的检测:绘制资源分配图要求:1)建立资源分配图的数据结构描述;2)建立绘制资源分配图的历程,包括结点和有向边;3)可以删除、添加节点或有向边。
4)可以鼠标在串口的任意位置指点,确定结点或者有向边的位置;5)可以拖动现有结点的位置,使之相关的结点移动6)可以存入文件和从文件中读取。
二.设计原理及算法描述UNIX命令:ls [选项]列出文件信息(默认为当前目录)ls无参显示一个目录中的文件和子目录ls -l每行仅显示一个目录或名称ls --help 显示此帮助信息并离开mkdir目录若目录不存在则创建目录mkdir --help显示此帮助信息并离开rmdir目录若目录没有数据则删除目录rmdir --help显示此帮助信息并离开cp来源文件目的文件将来源文件复制到目的文件cp --help显示此帮助信息并离开cat文件或:cat 文件1 >> 文件2显示文件内容或连接两个文件,并将结果输出到显示屏上cat文件将文件的内容输出到显示屏上cat 文件1 >> 文件2将文件1连接到文件2的结尾,并输出到显示屏上cat --help 显示此帮助信息并离开more文件使文件能逐行(回车键)或逐页(空格键)显示并显示当前文件所占总文件的百分比more --help显示此帮助信息并离开mv文件1 文件2或:mv 文件目录重命名或移动文件mv 文件1 文件2将文件1名字改为文件2的名字mv 文件目录将指定文件移动到指定目录下mv --help显示此帮助信息并离开sort文件将文本文件内容加以排序sort --help显示此帮助信息并离开按照每个命令的功能编写一个实现函数。
通过c++字符串操作从输入流获得指令以及参数,通过对指令以及参数的判别调用对应指令的函数,实现对windows内文件的各项操作。
三.开发环境硬件环境:个人PC机软件环境:Microsoft Windows XPMicrosoft Visual C++ 6.0四.重要算法和设计思路描述命令以及参数的获取:由于命令加参数最多能有四部分,所以申请4个字符串数组。
实验一主板架构的测试一、实验目的及要求了解Internet系列主板的基本构架二、实验设备(环境)及要求多核计算机,windows os ,CPU-Z,GPU-Z。
三、实验内容与步骤1.执行计算机硬件检测程序CPU-Z,GPU-Z;2.记录所用计算机的CPU ID号,Cache大小,指令集,CPU型号,电压,内存,主板,SPD和GPU等所有显示的信息;3.在任务和设备管理器中查看CPU是否为双核?四、实验结果与数据处理1.执行计算机硬件检测程序CPU-Z,GPU-Z;2.记录所用计算机的CPU ID号,Cache大小,指令集,CPU型号,电压,内存,主板,SPD和GPU等所有显示的信息;3.在任务和设备管理器中查看CPU是否为双核?在任务管理器中可以看到CPU为双核:在设备管理器中可以看到CPU为4线程:五、分析与讨论结论:对电脑的构架有的更深的了解。
1.此台电脑CPU是Inter i5,3.20GHz,三级缓存;2.从CPU-Z中的核心时钟频率可以判断计算机的性能,时钟频率越高越好;3.从任务管理器和系统属性上并不能准确的判断CPU的核数,需要用CPU-Z进行检测才能真正确定计算机的核数。
实验一熟悉WinDLX的使用一、实验目的1.熟练掌握WinDLX模拟器的操作和使用2.熟悉DLX指令集结构及其特点二、实验内容1.用WinDLX模拟器执行求阶乘程序fact.s。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
2.用WinDLX模拟器执行求最大公约数程序gcm.s。
该程序从标准输入读入两个整数,求他们的最大公约数,然后将结果写到标准输出。
该程序中调用了input.s中的输入子程序。
3.通过上述使用WinDLX,总结WinDLX的特点。
三、实验报告认真记录实验数据或显示结果。
如实填写实验报告。
《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。
二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。
同时,实现进程的正常终止和异常终止,并分析其对系统的影响。
2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。
通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。
(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。
2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。
(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。
四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。
(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。
(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。
2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。
(2)创建多个进程,模拟对共享资源的并发访问。
(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。
(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。
合肥工业大学计算机与信息学院实验报告课程:计算机操作系统专业班级:计算机科学与技术2班学号:姓名:实验1 实验环境的使用一.实验目的1.熟悉操作系统集成实验环境OS Lab的基本使用方法。
2.练习编译、调试EOS操作系统内核以及EOS应用程序。
二.实验内容1.启动OS Lab2. 学习OS Lab的基本使用方法2.1新建Windows控制台应用程序项目2.2生成项目2.3执行项目2.4调试项目2.4.1 使用断点中断执行2.4.2单步调试2.4.3查看变量的值2.4.4调用堆栈3. EOS内核项目的生成和调试3.1新建EOS内核项目3.2生成项目3.3调试项目3.4查看软盘镜像文件中的内容3.5查看EOS SDK(Software Development Kit)文件夹4. EOS应用程序项目的生成和调试4.1新建EOS应用程序项目4.2生成项目4.3调试项目4.4查看软盘镜像文件中的内容4.5修改EOS应用程序项目名称5 退出OS Lab6 保存EOS内核项目三.实验结果本实验主要是熟悉EOS操作系统的基本操作,练习了:(1)新Windows控制台应用程序项,1.“文件”菜单中选择“新建”,然后单击“项目”。
2. 在“新建项目”对话框中,选择项目模板“控制台应用程序 (c)”。
3. 在“名称”中输入新项目使用的文件夹名称“oslab”。
4. 在“位置”中输入新项目保存在磁盘上的位置“C:\test”。
新建完毕后, OS Lab 会自动打开这个新建的项目。
(2)在“生成”菜单中选择“生成项目”。
结果如图(3)执行项目:选择“调试”菜单中的“开始执行”(4)调试项目:1. 右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。
2. 在弹出的“添加新文件”对话框中选择“C 源文件”模板。
3. 在“名称”中输入文件名称“func”。
4. 点击“添加”按钮,添加并自动打开文件func.c,此时的“项目管理器”窗口会如图:(5). 在 func.c 文件中添加函数:int Func (int n) { n = n + 1;return n; }(6). 点击源代码编辑器上方的console.c标签,切换到console.c文件。
将 main 函数修改为:int main (int argc, char* argv[]){ int Func (int n); // 声明Func函数int n = 0; n = Func(10);printf ("Hello World!\n");return 0; }代码修改完毕后按F7实验结果为输出:Hello World!(7). 在main函数中定义变量n的代码行int n = 0; 上点击鼠标右键,在弹出的快捷菜单中选择“插入/删除断点”,会在此行左侧的空白处显示一个红色圆点,表示已经成功在此行代码添加了一个断点练习使用“逐过程”,“逐语句”,“跳出”功能(8).在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中选择“快速监视”,进行单步测试,观察n结果依次为0,11(9)调用堆栈,选择“调试”菜单“窗口”中的“调用堆栈”,激活“调用堆栈”窗口。
可以看到当前“调用堆栈”窗口中只有一个main函数(显示的内容还包括了参数值和函数地址)。
按F11(“逐语句”功能的快捷键)调试,直到进入Func函数,其中当前正在调试的Func函数在栈顶位置,main函数在栈底位置。
说明是在main函数中调用了Func函数。
(10)查看软盘镜像文件中的内容,在“项目管理器”窗口中双击软盘镜像文件Floppy.img四.实验总结今天第一次进行操作系统这门课的实验,这也是将抽象的理论知识应用到实践的一个很好的机会,同时,我们也学习了使用OS Lab的这个实验环境,OS Lab 的操作界面和Microsoft Visual Studio 2010很像,所以使用起来很快就能上手,对于实验内容,今天主要练习了:新建Windows控制台应用程序项目、生成项目、执行项目、调试项目以及EOS应用程序项目的生成和调试;设置间断点,并且在它的基础上进行了单步操作;详细观察了通过“快速监视“标记的数的值的变化过程等基本操作,这也为以后实验的顺利进行打下了良好的基础。
五.实验截图实验2 操作系统的启动一.实验目的1.跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。
2.查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。
二.实验内容1 准备实验2 调试EOS操作系统的启动过程2.1 使用Bochs做为远程目标机2.2 调试BIOS程序2.3 调试软盘引导扇区程序2.4 调试加载程序2.5 调试内核2.6 EOS启动后的状态和行为三.实验结果1.新建一个EOS Kernel项目。
2.使用Bochs做为远程目标机(1)在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。
(2)在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“Bochs Debug”(3)点击“确定”按钮关闭“属性页”对话框。
接下来就可以使用Bochs 模拟器调试BIOS程序和软盘引导扇区程序了。
3.按F5启动调试,此时会弹出两个Bochs窗口。
标题为“Bochs for windows - Display”的窗口相当于计算机的显示器,显示操作系统的输出。
标题为“Bochs for windows - Console”的窗口是Bochs的控制台,用来输入调试命令,输出各种调试信息。
4.启动调试后,Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断。
此时,Display窗口没有显示任何内容,Console窗口显示要执行的BIOS第一条指令的相关信息,并等待用户输入调试命令5.然后查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据(1)在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值(2)输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值(3)输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。
在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。
(4)输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。
输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。
6.EOS启动后的状态和行为(1)在控制台中输入命令“ver”后按回车。
结果如图(2)查看EOS启动后的进程和线程的信息:在控制台中输入命令“pt”后按回车。
输出的进程和线程信息如图所示四.实验总结今天的实验在实验一的基础上学习了EOS操作系统的启动、跟踪调试以及EOS 在PC机上从加电复位到成功启动的全过程,这让我们对EOS这个平台有了初步的掌握,同时我们也练习了查看了EOS启动后的状态和行为,学会了查看CPU主要寄存器中以及内存中的数据的方法。
五.实验截图实验3进程的创建一,实验目的:1,练习使用 EOS API 函数 CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。
2,调试跟踪 CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。
二,预备知识:阅读本书第 5.1 节,重点理解程序和进程的关系,熟悉进程控制块结构体以及进程创建的过程。
仔细学习CreateProcess函数和其它与创建进程相关的函数的说明,注意理解这些函数的参数和返回值的意义。
三,主要实验内容及步骤:1,准备实验;2,练习使用控制台命令创建EOS 应用程序的进程:练习使用控制台命令创建 EOS 应用程序进程的具体步骤如下:(1)在 EOS 应用程序项目的“项目管理器”窗口中双击 Floppy.img 文件,使用 FloppyImageEditor工具打开此软盘镜像文件。
(2)将本实验文件夹中的 Hello.exe 文件拖动到 FloppyImageEditor 工具窗口的文件列表中释放,Hello.exe 文件即被添加到软盘镜像文件中。
Hello.exe 一个 EOS 应用程序,其源代码可以参见本实验文件夹中的 Hello.c 源文件。
(3)在FloppyImageEditor 中选择“文件”菜单中的“保存”后关闭FloppyImageEditor。
(4)按 F7 生成 EOS 应用项目。
(5)按 F5 启动调试。
OS Lab 会弹出一个调试异常对话框,并中断应用程序的执行。
(6)在调试异常对话框中选择“否”,忽略异常继续执行应用程序。
(7)激活虚拟机窗口,待该应用程序执行完毕后,在 EOS 的控制台中输入命令“A:\Hello.exe”后回车。
(8) Hello.exe 应用程序开始执行,观察其输出如图 11-1。
(9)待 Hello.exe 执行完毕后可以重复第 7 步,或者结束此次调试。
3. 练习通过编程的方式让应用程序创建另一个应用程序的进程使用 OS Lab 打开本实验文件夹中的 NewProc.c 文件(将此文件拖动到 OS Lab 窗口中释放即可)按照下面的步骤查看应用程序创建另一个应用程序的进程的执行结果:(1)使用NewProc.c文件中的源代码替换之前创建的EOS应用程序项目中的EOSApp.c文件内的源代码。
(2)按 F7 生成修改后的 EOS 应用程序项目。
(3)按 F5 启动调试。
OS Lab 会首先弹出一个调试异常对话框。
(4)在调试异常对话框中选择“否”,继续执行。
(5)激活虚拟机窗口查看应用程序输出的内容,如图 11-2。
结合图 11-1,可以看到父进程(EOSApp.exe)首先开始执行并输出内容,父进程创建了子进程(Hello.exe)后,子进程开始执行并输出内容,待子进程结束后父进程再继续执行。
(6)结束此次调试。
4.调试 CreateProcess 函数按照下面的步骤调试 CreateProcess 函数创建进程的过程:(1)按 F5 启动调试 EOS 应用程序,OS Lab 会首先弹出一个调试异常对话框。
(2)选择“是”调试异常,调试会中断。
(3)在 main 函数中调用 CreateProcess 函数的代码行(第 57 行)添加一个断点。
(4)按 F5 继续调试,在断点处中断。
(5)按 F11 调试进入 CreateProcess 函数。
此时已经开始进入 EOS 内核进行调试。
.5,调试PsCreateProcess 函数创建进程最主要的操作就是创建进程控制块(PCB),并初始化其中的各种信息(也就是为进程分配各种资源)。