




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验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主要寄存器中以及内存中的数据的方法。实验5 进程的同步一.实验目的1.使用EOS的信号量,编程解决生产者消费者问题,理解进程同步的意义。 2.调试跟踪EOS信号量的工作过程,理解进程同步的原理。 3.修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 二.实验内容1 准备实验2 使用EOS的信号量解决生产者消费者问题3 调试EOS信号量的工作过程3.1 创建信号量3.2 等待、释放信号量3.2.1 等待信号量(不阻塞)3.2.2 释放信号量(不唤醒)3.2.3 等待信号量(阻塞)3.2.4 释放信号量(唤醒)4 修改EOS的信号量算法三.实验结果1.按照下面的步骤查看生产者消费者同步执行的过程:(1)使用pc.c文件中的源代码,替换之前创建的EOS应用程序项目中EOSApp.c文件内的源代码。 (2)按F7生成修改后的EOS应用程序项目。 (3)按F5启动调试。OS Lab会首先弹出一个调试异常对话框。 (4)在调试异常对话框中选择“否”,继续执行。 (5)立即激活虚拟机窗口查看生产者消费者同步执行的过程 (6)待应用程序执行完毕后,结束此次调试。 2. 等待、释放信号量(1)等待信号量(不阻塞) 生产者和消费者刚开始执行时,用来放产品的缓冲区都是空的,所以生产者在第一次调用WaitForSingleObject函数等待Empty信号量时,应该不需要阻塞就可以立即返回。(2)释放信号量(不唤醒)生产者线程通过等待Empty信号量使空缓冲区数量减少了1,通过释放Full信号量使满缓冲区数量增加了1,这样就表示生产者线程生产了一个产品并占用了一个缓冲区。(3)等待信号量(阻塞) 由于开始时生产者线程生产产品的速度较快,而消费者线程消费产品的速度较慢,所以当缓冲池中所有的缓冲区都被产品占用时,生产者在生产新的产品时就会被阻塞(4)释放信号量(唤醒) 只有当消费者线程从缓冲池中消费了一个产品,从而产生一个空缓冲区后,生产者线程才会被唤醒并继续生产14号产品。四.实验总结今天的实验的内容是进程的同步,这也是进程这一概念提出后面临的一个非常大的问题,因为当进程在竞争临界资源时,由于进程的异步性,便会给系统造成混乱,所以能不能让诸多进程之间有效的共享资源和相互合作,就变成了一个很重要的问题。今天的实验也让我们直接的观察到了EOS操作系统如何通过信号量机制解决进程同步问题,并对程序进行修改,这对我们今后的学习有很大的帮助,但对于解决大量同步操作带来的系统死锁问题,我还是欠缺实践和认识。实验6 时间片轮转调度一.实验目的1.调试EOS的线程调度程序,熟悉基于优先级的抢先式调度。 2.为EOS添加时间片轮转调度,了解其它常用的调度算法。 二.实验内容1 准备实验2 阅读控制台命令“rr”相关的源代码3调试线程调度程序3.1 调试当前线程不被抢先的情况3.2 调试当前线程被抢先的情况4 为EOS添加时间片轮转调度三.实验结果1.首先阅读控制台命令“rr”相关的源代码,它新建了20个优先级为8的线程,做为测试时间片轮转调度用的线程。 在新建的线程中,只有正在执行的线程才会在控制台的对应行(第0个线程对应第0行,第1个线程对应第1行)增加其计数,这样就可以很方便的观察到各个线程执行的情况由于控制台线程的优先级是24,高于新建线程的优先级 8,所以只有在控制台线程进入“阻塞”状态后,新建的线程才能执行。 2.观察程序执行效果(1)按F7生成在本实验3.1中创建的EOS Kernel项目。 (2)按F5启动调试。 (3)待EOS启动完毕,在EOS控制台中输入命令“rr”后按回车。 观察到,只有第0个新建的线程在第0行显示其计数在增加,说明只有第0个新建的线程在运行,其它线程都没有运行原因:所有20个新建线程的优先级都是8,而此时EOS只实现了基于优先级的抢先式调度,还没有实现时间片轮转调度,所以至始至终都只有第0个线程在运行,而其它具有EOS 操作系统实验教程相同优先级的线程都没有机会运行,只能处于“就绪”状态。(4)设置间断点调试程序。查看ThreadFunction函数中变量pThreadParameter-Y的值应该为0,说明正在调试的是第0个新建的线程。 在“监视”窗口中添加表达式“ListGetCount(&PspReadyListHeads8)”,查看优先级为8的就绪队列中就绪线程的数量,值为19。说明除了正在执行的第0个新建的线程外,其余19个新建的线程都在优先级为8的就绪队列中在“监视”窗口中添加表达式“ListGetCount(&PspReadyListHeads24)”,其值为1,说明优先级为24的就绪队列中只有一个就绪线程。扫描就绪位图后获得的最高优先级的值HighestPriority也就应该是24。 (5)为EOS添加时间片轮转调度VOIDPspRoundRobin(VOID)/if(NULL!=PspCurrentThread&Running=PspCurrentThread-State)/ 在此添加代码,实现时间片轮转调度算法。/PspCurrentThread-RemainderTicks-;if(PspCurrentThread-RemainderTicks=0)PspCurrentThread-RemainderTicks=TICKS_OF_TIME_SLICE;if(BIT_TEST(PspReadyBitmap,PspCurrentThread-Priority=8)=0)PspReadyThread(PspCurrentThread);return;结果:看到20个线程轮流运行,实现了时间片轮转(6)修改线程时间片的大小观察到轮转的事件的时间发生了变化,TICKS_OF_TIME_SLICE的值越大,轮转就越慢,越小就越快四.实验总结今天的实验是对基于时间片的轮转调度算法进行实际操作,就我的理解,在之前上课时,老师讲到:在分时系统中,为了保证及时响应用户的请求,必须
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深圳护师考试试题及答案
- 基础拼音试题及答案
- 门窗培训考试题及答案
- 中医临床三基(医技)临床基础知识考试题库 (含答案)
- 树洞秘密课件
- 数字化物流商业运营 习题答案-模块2
- 2025年夹具厂家供货合同范文大全
- 2025年材料员网络培训考试题库及答案
- 北京安全应急知识培训中心课件
- 北京医院看病知识培训班课件
- 2025四川绵阳市建设工程质量检测中心有限责任公司市场部业务拓展员岗招聘1人笔试备考试题及答案解析
- 广东省东莞市2024-2025学年七年级下学期期末语文试题(含答案)
- 项目成本预算管理制度
- 2025年成都教师招聘考试教育公共基础知识真题及答案
- 中学语文教学资源开发与利用指南
- 《幼儿园工作规程》知识测试卷(含答案)
- 2025年材料管理岗位考试题库
- 年级主任职责详解及管理要点
- 储能项目投资测算方案
- 2025至2030中国乙烯醋酸乙烯酯(EVA)树脂行业产业运行态势及投资规划深度研究报告
- 【25秋】统编版小学语文二年级上册-《第八单元大单元设计》课件
评论
0/150
提交评论