文档库 最新最全的文档下载
当前位置:文档库 › 华北电力大学操作系统实验报告..

华北电力大学操作系统实验报告..

华北电力大学操作系统实验报告..
华北电力大学操作系统实验报告..

综合实验报告

( 2013-- 2014年度第一学期)

名称:计算机操作系统

题目:计算机操作系统实验院系:计算机系

班级:网络

学号:

学生姓名:

指导教师:王平

设计周数:2周

成绩:

日期:2013 年11 月

实验1 实验环境的使用

一、实验目的

1、熟悉操作系统集成实验环境OS Lab的基本使用方法。

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

二、预备知识

阅读本书第1章,对EOS操作系统和OS Lab集成实验环境有一个初步的了解。重点学习第1.3节,掌握EOS操作系统内核和EOS应用程序的源代码是如何生成可执行文件的,以及OS Lab是如何将这些可执行文件写入软盘镜像文件并开始执行的。

三、实验内容

1、启动OS Lab

1. 在安装有OS Lab的计算机上,可以使用两种不同的方法来启动OS Lab:

在桌面上双击“Tevation OS Lab”图标。

或者

点击“开始”菜单,在“程序”中的“Tevation OS Lab”中选择“Tevation OS Lab”。

2. OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。

3. 观察OS Lab主窗口的布局。OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。

2、学习OS Lab的基本使用方法

2.1 新建Windows控制台应用程序项目

新建一个Windows控制台应用程序项目的步骤如下:

1. 在“文件”菜单中选择“新建”,然后单击“项目”。

2. 在“新建项目”对话框中,选择项目模板“控制台应用程序 (c)”。

3. 在“名称”中输入新项目使用的文件夹名称“oslab”。

4. 在“位置”中输入新项目保存在磁盘上的位置“C:\test”。

5. 点击“确定”按钮。

2.2 生成项目

使用“生成项目”功能可以将程序的源代码文件编译为可执行的二进制文件,方法十分简单:在“生成”菜单中选择“生成项目”。

在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。如果源代码中不包含语法错误,会在最后提示生成成功,如图:

2.3 执行项目

在OS Lab中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的Windows控制台应用程序。启动执行后会弹出一个Windows控制台窗口,显示控制台应用程序输出的内容。按任意键即可关闭此Windows控制台窗口。

2.4 调试项目

在开始练习各种调试功能之前,首先需要对刚刚创建的例子程序进行必要的修改,步骤如下: 1. 右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。

2. 在弹出的“添加新文件”对话框中选择“C 源文件”模板。

3. 在“名称”中输入文件名称“func”。

4. 点击“添加”按钮,添加并自动打开文件func.c,此时的“项目管理器”窗口会如图:

2.4.1 使用断点中断执行

1. 在main函数中定义变量n的代码行 int n = 0; 上点击鼠标右键,在弹出的快捷菜单中选择“插入/删除断点”,会在此行左侧的空白处显示一个红色圆点,表示已经成功在此行代码添加了一个断点,如图:

2. 在“调试”菜单中选择“启动调试”,Windows控制台应用程序开始执行,随后OS Lab窗口被自动激活,并且在刚刚添加断点的代码行左侧空白中显示一个黄色箭头,表示程序已经在此行代码处中断执行(也就是说下一个要执行的就是此行代码),如图:

2.4.2 单步调试

按照下面的步骤练习使用“逐过程”功能:

1. 在OS Lab的“调试”菜单中选择“逐过程”,“逐过程”功能会执行黄色箭头当前指向的代码行,并将黄色箭头指向下一个要执行的代码行。

2. 按F10(“逐过程”功能的快捷键),黄色箭头就指向了调用printf函数的代码行。查看控制台应用程序窗口,仍然没有任何输出。

3. 再次按F10执行printf函数,查看控制台应用程序窗口,可以看到已经打印出了内容。

4. 在“调试”菜单中选择“停止调试”,结束此次调试。

2.4.3 查看变量的值

在调试的过程中,OS Lab提供了三种查看变量值的方法,按照下面的步骤练习这些方法:

1. 按F5启动调试,仍然会在之前设置的断点处中断。

2. 将鼠标移动到源代码编辑器中变量n的名称上,此时会弹出一个窗口显示出变量n当前的值(由于此时还没有给变量n赋值,所以是一个随机值)。

3. 在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中选择“快速监视”,可以使用“快速监视”对话框查看变量n的值。然后,可以点击“关闭”按钮关闭“快速监视”对话框。

4. 在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,变量n就被添加到了“监视”窗口中。使用“监视”窗口可以随时查看变量的值和类型。此时按F10进行一次单步调试,可以看到“监视”窗口中变量n的值会变为0,如图

2.4.4 调用堆栈

1. 按F5启动调试,仍然会在之前设置的断点处中断。

2. 选择“调试”菜单“窗口”中的“调用堆栈”,激活“调用堆栈”窗口。可以看到当前“调用堆栈”窗口中只有一个main函数(显示的内容还包括了参数值和函数地址)。

3. 按F11(“逐语句”功能的快捷键)调试,直到进入Func函数,查看“调用堆栈”窗口可以发现在堆栈上有两个函数Func和main。其中当前正在调试的Func函数在栈顶位置,main函数在栈底位置。说明是在main函数中调用了Func函数。

3、EOS内核项目的生成和调试

3.1 新建EOS内核项目

新建一个EOS内核项目的步骤如下:

1. 在“文件”菜单中选择“新建”,然后单击“项目”。

2. 在“新建项目”对话框中,选择项目模板“EOS Kernel”。

3. 在“名称”中输入新项目使用的文件夹名称“eos”。

4. 在“位置”中输入新项目保存在磁盘上的位置“C:\”。

5. 点击“确定”按钮。

3.2 生成项目

1. 按F7生成项目,同时查看“输出”窗口中的内容,确认生成成功。

2. 打开C:\eos\debug文件夹,查看生成的对象文件和目标文件。找到boot.bin、loader.bin 和kernel.dll三个二进制文件,这三个文件就是EOS操作系统在运行时需要的可执行文件。

3.3 调试项目

1. 在“项目管理器”窗口的ke文件夹中找到start.c文件节点,双击此文件节点使用源代码编辑器打开start.c文件。

2. 在start.c文件中KiSystemStartup函数的“KiInitializePic();”语句所在行(第61行)添加一个断点,如图9-7。EOS启动时执行的第一个内核函数就是KiSystemStartup函数。

3.4 查看软盘镜像文件中的内容

在“项目管理器”窗口中双击软盘镜像文件Floppy.img,就会使用FloppyImageEditor工具打开此文件(在FloppyImageEditor工具中按F1可以查看此工具的帮助文件)。在FloppyImageEditor 工具的文件列表中可以找到loader.bin文件和kernel.dll文件,这两个文件都是在启动调试时被写入软盘镜像文件的(可以查看这两个文件的修改日期)。boot.bin文件在启动调试时被写入了软盘镜像的引导扇区中,不受软盘文件系统的管理,所以在文件列表中找不到此文件。关闭FloppyImageEditor工具。

3.5 查看EOS SDK(Software Development Kit)文件夹

1. 点击OS Lab工具栏上的“项目配置”下拉列表,选择下拉列表中的“Release”项目配置,“Release”项目配置被设置为新的活动项目配置(原来的活动项目配置是“Debug”)。如图:

4、EOS应用程序项目的生成和调试

4.1 新建EOS应用程序项目

1. 在“文件”菜单中选择“新建”,然后单击“项目”。

2. 在“新建项目”对话框中,选择项目模板“EOS 应用程序”。

3. 在“名称”中输入新项目使用的文件夹名称“eosapp”。

4. 在“位置”中输入新项目保存在磁盘上的位置“C:\”。

5. 点击“确定”按钮。

4.2 生成项目

1. 按F7生成项目,同时查看“输出”窗口中的内容,确认生成成功。

2. 打开C:\eosapp\debug文件夹,查看生成的对象文件和目标文件。其中的EOSApp.exe就是EOS 应用程序的可执行文件。

4.3 调试项目

4.4查看软盘镜像文件中的内容

4.5修改EOS应用程序项目名称

5、退出OS Lab

1. 在“文件”菜单中选择“退出”。

2. 在OS Lab关闭前会弹出一个保存数据对话框(可以选择对话框标题栏上的“帮助”按钮获得帮助信息),核对学号和姓名无误后点击“保存”按钮,OS Lab关闭。

3. 在OS Lab关闭后默认会自动使用Windows资源管理器打开数据文件所在的文件夹,并且选中刚刚保存的数据文件(OUD文件)。将数据文件备份保存在自己的文件中。

实验2 操作系统的启动

一、实验目的

1、跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。

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

二、预备知识

阅读本书第3章,了解EOS操作系统的启动过程。阅读第2章中的第2.4节,复习汇编语言的相关知识,并掌握NASM汇编代码的特点。阅读附录A,了解Bochs和Virtual PC这两款虚拟机软件的特点,重点熟悉Bochs的调试命令。

三、实验内容

3.1 准备实验

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3. 在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件。boot.asm是软盘引导扇区程序的源文件,loader.asm是loader程序的源文件。简单阅读一下这两个文件中的NASM汇编代码和注释。

4. 按F7生成项目。

3.2 调试EOS操作系统的启动过程

3.2.1 使用Bochs做为远程目标机

1. 在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。

2. 在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“Bochs Debug”(此时按F1可以获得关于此属性的帮助)。

3. 点击“确定”按钮关闭“属性页”对话框。接下来就可以使用Bochs模拟器调试BIOS程序和软盘引导扇区程序了。

3.2.2 调试BIOS程序

1.在Console窗口中输入调试命令sreg后按回车

2. 输入调试命令r后按回车

3.2.3 调试软盘引导扇区程序

3.2.4 调试加载程序

3.2.5 调试内核

3.2.6 EOS启动后的状态和行为在控制台中输入命令“ver”后按回车

在控制台中输入命令“pt”后按回车

实验3 进程的创建

一、实验目的

1、练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。

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

二、预备知识

阅读本书第5.1节,重点理解程序和进程的关系,熟悉进程控制块结构体以及进程创建的过程。仔细学习CreateProcess函数和其它与创建进程相关的函数的说明,注意理解这些函数的参数和返回值的意义。

三、实验内容

3.1 准备实验

按照下面的步骤准备本次实验:

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3. 分别使用Debug配置和Release配置生成此项目,从而在该项目文件夹中生成完全版本的EOS SDK文件夹。

4. 新建一个EOS应用程序项目。

5. 使用在第3步生成的SDK文件夹覆盖EOS应用程序项目文件夹中的SDK文件夹。

3.2 练习使用控制台命令创建EOS应用程序的进程

1. 在EOS应用程序项目的“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像文件。

2. 将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,Hello.exe文件即被添加到软盘镜像文件中。Hello.exe一个EOS应用程序,其源代码可以参见本实验文件夹中的Hello.c源文件。

3. 在FloppyImageEditor中选择“文件”菜单中的“保存”后关闭FloppyImageEditor。

4. 按F7生成EOS应用项目。

3.3 练习通过编程的方式让应用程序创建另一个应用程序的进程

1. 使用NewProc.c文件中的源代码替换之前创建的EOS应用程序项目中的EOSApp.c文件内的源代码。

2. 按F7生成修改后的EOS应用程序项目。

3. 按F5启动调试。OS Lab会首先弹出一个调试异常对话框。

4. 在调试异常对话框中选择“否”,继续执行。

3.4 调试CreateProcess函数

1. 按F5启动调试EOS应用程序,OS Lab会首先弹出一个调试异常对话框。

2. 选择“是”调试异常,调试会中断。

3. 在main函数中调用CreateProcess函数的代码行(第57行)添加一个断点。

4. 按F5继续调试,在断点处中断。

5. 按F11调试进入CreateProcess函数。此时已经开始进入EOS内核进行调试。

3.5 调试PsCreateProcess函数

1.在PsCreateProcess函数中找到调用PspCreateProcessEnvironment函数的代码行(create.c文件的第163行),并在此行添加一个断点。

2. 按F5继续调试,到此断点处中断。

3. 按F11调试进入PspCreateProcessEnvironment函数。

3.6 练习通过编程的方式创建应用程序的多个进程

使用OS Lab打开本实验文件夹中的参考源代码文件NewTwoProc.c,仔细阅读此文件中的源代码。使用NewTwoProc.c文件中的源代码替换EOS应用程序项目中EOSApp.c文件内的源代码,生成后启动调试,查看多个进程并发执行的结果。

实验4 线程的状态和转换

一、实验目的

1、调试线程在各种状态间的转换过程,熟悉线程的状态和转换。

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

二、预备知识

阅读本书第5.2.3节,了解线程都有哪些状态以及EOS是如何定义这些状态的。了解线程是如何在这些状态之间进行转换的,特别是要阅读一下EOS中用于线程转换的相关函数的源代码。阅读本书第5.2.4节,了解EOS为线程添加的挂起状态,以及Suspend和Resume原语操作。线程状态的转换和线程的同步、线程的调度是不可分割的,所以建议读者简单学习一下第5.3和5.4节中的内容。

三、实验内容

3.1 准备实验

按照下面的步骤准备实验:

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3.2 调试线程状态的转换过程

1. 按F7生成在本实验3.1中创建的EOS Kernel项目。

2. 按F5启动调试。

3. 待EOS启动完毕,在EOS控制台中输入命令“loop”后按回车。

4. 结束此次调试。

loop命令执行的效果可以参见图:

3.2.1 线程由阻塞状态进入就绪状态

3.2.2 线程由运行状态进入就绪状态

3.2.3 线程由就绪状态进入运行状态

3.2.4 线程由运行状态进入阻塞状态

3.3 为线程增加挂起状态

1. 删除之前添加的所有断点。

2. 按F5启动调试。

3. 待EOS启动完毕,在EOS控制台中输入命令“loop”后按回车。此时可以看到loop线程的执行计数在不停增长,说明loop线程正在执行。记录下loop线程的ID。

4. 按Ctrl+F2切换到控制台2,输入命令“suspend 31”(如果loop线程的ID是31)后按回车。命令执行成功的结果如图12-2所示。

5. 按Ctrl+1切换回控制台1,可以看到由于loop线程已经成功被挂起,其执行计数已经停止增长了。此时占用处理器的是EOS中的空闲线程。

实验5 进程的同步

一、实验目的

1、使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。

2、调试跟踪EOS信号量的工作过程,理解进程同步的原理。

3、修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。

二、预备知识

阅读本书第5章中的5.3节,学习EOS内核提供的三种同步对象(该实验没有涉及到Event同步对象)。重点理解各种同步对象的状态与使用方式。同时学习经典的生产者-消费者问题。

阅读5.2节,学习在EOS应用程序中调用EOS API函数CreateThread创建线程的方法。

三、实验内容

3.1 准备实验

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3. 生成EOS Kernel项目,从而在该项目文件夹中生成SDK文件夹。

4. 新建一个EOS应用程序项目。

5. 使用在第3步生成的SDK文件夹覆盖EOS应用程序项目文件夹中的SDK文件夹。

3.2 使用EOS的信号量解决生产者-消费者问题

生产者-消费者同步执行的过程

3.3 调试EOS信号量的工作过程

3.3.1 创建信号量

3.3.2 等待、释放信号量

3.3.2.1 等待信号量(不阻塞)

3.3.2.2 释放信号量(不唤醒)

3.3.2.3 等待信号量(阻塞)

3.3.2.4 释放信号量(唤醒)

3.4 修改EOS的信号量算法

在目前EOS Kernel项目的ps/semaphore.c文件中,PsWaitForSemaphore函数的Milliseconds参数只能是INFINITE,PsReleaseSemaphore函数的ReleaseCount参数只能是1。现在要求同时修改PsWaitForSemaphore函数和PsReleaseSemaphore函数中的代码,使这两个参数能够真正起到作用,使信号量对象支持等待超时唤醒功能和批量释放功能。

(a)main函数流程图;(b)Producer函数流程图;(c)Consumer函数流程图

实验6 时间片轮转调度

一、实验目的

1、调试EOS的线程调度程序,熟悉基于优先级的抢先式调度。

2、为EOS添加时间片轮转调度,了解其它常用的调度算法。

二、预备知识

阅读本书第5章中的第5.4节。重点理解EOS当前使用的基于优先级的抢先式调度,调度程序执行的时机和流程,以及实现时间片轮转调度的细节。

三、实验内容

3.1 准备实验

按照下面的步骤准备实验:

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3.2 阅读控制台命令“rr”相关的源代码

阅读ke/sysproc.c文件中第690行的ConsoleCmdRoundRobin函数,及该函数用到的第649行的ThreadFunction函数和第642行的THREAD_PARAMETER结构体,学习“rr”命令是如何测试时间片轮转调度的。

没有时间片轮转调度时“rr”命令的执行效果

3.3调试线程调度程序

3.3.1 调试当前线程不被抢先的情况

正像上图中显示的,新建的第0个线程会一直运行,而不会被其它同优先级的新建线程或者低优先级的线程抢先。按照下面的步骤调试这种情况在PspSelectNextThread函数中处理的过程。

1. 结束之前的调试。

2. 在ke/sysproc.c文件的ThreadFunction函数中,调用fprintf函数的代码行(第680行)添加一个断点。

3. 按F5启动调试。

4. 待EOS启动完毕,在EOS控制台中输入命令“rr”后按回车。“rr”命令开始执行后,会在断点处中断。

5. 查看ThreadFunction函数中变量pThreadParameter->Y的值应该为0,说明正在调试的是第0个新建的线程。

6. 激活虚拟机窗口,可以看到第0个新建的线程还没有在控制台中输出任何内容,原因是fprintf 函数还没有执行。

7. 激活OS Lab窗口后按F5使第0个新建的线程继续执行,又会在断点处中断。再次激活虚拟机窗口,

可以看到第0个新建的线程已经在控制台中输出了第一轮循环的内容。可以多按几次F5查看每轮循环输出的内容。

3.3.2 调试当前线程被抢先的情况

3.4 为EOS添加时间片轮转调度(行时间片轮转调度时“rr”命令的执行效果)

修改ps/sched.c文件中的PspRoundRobin函数(第337行),在其中实现时间片轮转调度算法。

1. 代码修改完毕后,按F7生成EOS内核项目。

2. 按F5启动调试。

3. 在EOS控制台中输入命令“rr”后按回车。应能看到20个线程轮流执行的效果,如图。

实验7 物理存储器与进程逻辑地址空间的管理

一、实验目的

1、通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。

2、通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的管理方法。

二、预备知识

阅读本书第6章。重点阅读第6.3节和第6.6节,了解物理存储器的管理方式和进程逻辑地址空间的管理方式。

三、实验内容

3.1 准备实验

按照下面的步骤准备实验:

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3.2 阅读控制台命令“pm”相关的源代码,并查看其执行的结果(pm”命令的执行结果)按照下面的步骤执行控制台命令“pm”,查看物理存储器的信息:

1. 按F7生成在本实验3.1中创建的EOS Kernel项目。

2. 按F5启动调试。

3. 待EOS启动完毕,在EOS控制台中输入命令“pm”后按回车。

观察命令执行的结果,如图所示,可以了解当前物理存储器的使用情况。

3.3 分配物理页和释放物理页(配物理页或者释放物理页后物理存储器的变化情况)

接下来,在pm命令函数中添加分配物理页和释放物理页的代码,单步调试管理物理页的方法。按照下面的步骤修改pm命令的源代码:

1. 使用OS Lab打开本实验文件夹中的pm.c文件(将文件拖动到OS Lab窗口中释放即可打开)。此文件中有一个修改后的ConsoleCmdPhysicalMemory函数,主要是在原有代码的后面增加了分配物理页和释放物理页的代码。

2. 使用pm.c文件中ConsoleCmdPhysicalMemory函数的函数体替换ke/sysproc.c文件中ConsoleCmdPhysicalMemory函数的函数体。

3. 按F7生成修改后的EOS Kernel项目。

4. 按F5启动调试。

5. 待EOS启动完毕,在EOS控制台中输入命令“pm”后按回车。

3.4阅读控制台命令“vm”相关的源代码,并查看其执行的结果使用“vm”命令查看系统进程虚拟地址描述符的结果

使用pt命令查看有应用程序运行时进程和线程的信息

创建了一个应用程序进程后,系统进程中虚拟地址描述符的信息使用“vm”命令查看应用程序进程虚拟地址描述符的结果

3.5 在系统进程中分配虚拟页和释放虚拟页

3.6 在应用程序进程中分配虚拟页和释放虚拟页在应用程序进程中分配虚拟页和释放虚拟页

实验8 分页存储器管理

一、实验目的

1、学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。

2、查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。

3、编程修改页目录和页表的映射关系,理解分页地址变换原理。

二、预备知识

阅读本书第6章。了解i386处理器的二级页表硬件机制,EOS操作系统的分页存储器管理方式,以及进程地址空间的内存分布。

三、实验内容

3.1 准备实验

按照下面的步骤准备本次实验:

1. 启动OS Lab。

2. 新建一个EOS应用程序项目。

3.2 查看EOS应用程序进程的页目录和页表

1. 使用memory.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.c文件中的源代码。

2. 右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。

3. 在弹出的“添加新文件”对话框中选择“asm 源文件”模板。

4. 在“名称”中输入文件名称“func”。

5. 点击“添加”按钮添加并自动打开文件func.asm。

6. 将getcr3.asm文件中的源代码复制到func.asm文件中。

7. 按F7生成修改后的EOS应用程序项目。

8. 按F5启动调试。

9. 应用程序执行的过程中,会将该进程的二级页表映射信息输出到虚拟机窗口和OS Lab“输出”窗口中,输出内容如图16-2(a)。

10. 将“输出”窗口中的内容复制到一个文本文件中。

3.3 查看应用程序进程和系统进程并发时的页目录和页表

1. 结束之前的调试。

2. 取消EOSApp.c第121行语句的注释(该行语句会等待10秒)。

3. 按F7生成修改后的EOS应用程序项目。

4. 按F5启动调试。

5. 在“Console-1”中会自动执行EOSApp.exe,创建该应用程序进程。利用其等待10秒的时间,按Ctrl+F2切换到“Console-2”。

6. 在“Console-2”中输入命令“mm”后按回车,会将系统进程的二级页表映射信息输出到虚拟机窗口和OS Lab的“输出”窗口,输出内容如图16-2(b)。注意,在图16-2(b)中添加了一些空行,方便与图16-2(a)比较。“Console-1”中的应用程序在等待10秒后,又会输出和图2(a)一致的内容。

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

电力系统自动化试卷及思考题答案2014年(华北电力大学)

1.那些实验是在EMS平台下进行?那些实验是在DTS平台下进行? EMS:1)电力系统有功功率分布及分析;2)电力系统无功功率分布及分析;3)电力系统综合调压措施分析;4)电力系统有功-频率分布;5)电力系统潮流控制分析;6)电力系统对称故障计算及分析;7)电力系统不对称故障及计算分析 DTS:1)电力系统继电保护动作特性分析;2)电力系统稳定性计算及分析;3)电力系统继电保护动作情况与系统稳定性关系分析 2.欲调节电压幅值,调有功P有效还是无功Q有效?为什么? 1)电压对无功变化更敏感,有功虽然对电压也有影响但是比较小 2)只考虑电压降落的纵分量:△U=(PR+QX)/U,从公式看出,电压降落跟有功P和无功Q 都有关系,只不过在高压输电系统中,电抗X>>R,这样,QX在△U的分量更大,调节电压幅值就是在调节无功。 3.重合闸有什么好处?若电气故障设为三相短路,故障分别持续t1和t2时长,则两个实验结果有什么不同? 重合闸好处:1)在线路发生暂时性故障时,迅速恢复供电,从而提高供电可靠性;2)对于有双侧电源的高压输电线路,可以提高系统并列运行的稳定性,从而提高线路的输送容量;3)可以纠正由于断路器机构不良,或继电器误动作引起的误跳闸 故障延时长的接地距离一段动作次数,相间距离一段动作次数,三相跳开次数比故障延时短的多,开关三相跳开的次数多。 4,.以实验为例,举例说明继电保护对暂态稳定的影响? 实验八中,实验项目一体现出选保护具有选择性,当其故障范围内出现故障时,有相应的断路器动作跳闸。实验项目二体现出保护是相互配合的。当本段拒动时,由上一级出口动作跳闸。实验项目三做的是自动重合闸的“前加速”和“后加速”保护。继电保护快速切除故障和自动重合闸装置就是使故障对系统的影响降到最低,尽早的将故障切除能避免故障电流对设备的冲击减小对系统的扰动,有利于暂态稳定的实现。 5.·在电力系统潮流控制分析试验中,可以通过改变发电机的无功进行潮流调整,也可以通过改变发电机所连升压变压器的分接头进行潮流调整,实验过程中这两项调整对发电机的设置有何不同?为什么? 改变发电机无功:设置发电机无功时以10MV AR增长。不能保证发电机有功功率和发电机电压恒定,他们可能会随着无功功率的改变有微小的变化。 改变变压器分接头:设置此时发电机相当于一个PV节点,即恒定的有功P和不变的电压U。原因:发电机是无功电源,也是有功电源,是电能发生元件;变压器是电能转换元件,不产生功率。 7在实验中考虑了哪些调压措施?若某节点电压(kv)/无功……电压升高3kv,则应补偿多少电容? 【实验】调节发电机端电压(调节有功,调节无功),调整变压器分接头 【百度】电力系统的调压措施主要有: 1靠调节发电机机端电压调压 2靠改变变压器分接头调压 3靠无功补偿调压 4靠线路串连电容改变线路参数调压 我的实验灵敏度系数为0.075,所以若电压升高3kv,应补偿3/0.075=40Mvar的电容 8在调频实验中。对单机单负荷系统,若发电机的额定功率……频率怎么变化?当负荷功率大于发电机功率的额定功率…… 通过K=△p/△f来判断f如何变化 9、几个实验步骤 实验九试探法求故障切除实验的实验步骤

操作系统实验心得

1-1:通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。 1-2:在实验过程中,使用VI编辑器虽然不能像window操作系统那样对文本进行熟练度编辑,但是,VI编辑器使用命令来操作,将可以锻炼我的记忆力、对键盘的熟练读,还能帮助我们尽快适应linux操作系统的操作。 1-3:原本对liunx下的编译和调试环境不是很熟悉,但通过这次的实验,让我熟悉了linux 下的编译器和调试器的使用。 实验中使用了gcc命令,gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(#include)、预编译语句(如宏定义#define等)进行分析。 当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的库中链接到合适的地方。 1-4:API 接口属于一种操作系统或程序接口。通过实验,我了解了Windows的这种机制,加深了对API函数的理解。 2-1:通过本次实验了解了一些常用进程管理命令的使用,例如ps、kill命令,了解到换个kill与killall的不同,对于linux操作系统下的进程的学习打下基础,更好的学习进程。 2-2:本次实验是熟悉掌握Linux 系统常用进程创建与管理的系统调用,linux下使用fork()创建子进程,与windows下CreateProcess()创建子进程完全不同,通过比较小组更好的理解和掌握了进程的创建,对于进程的管理的理解也有了清晰地认识。 实验中遇到fork函数返回2次结果,经过分析结果如下: 由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。 调用fork之后,数据、堆栈有两份,代码仍然为一份但是这个代码段成为两个进程的共享代码段都从fork函数中返回,箭头表示各自的执行处。当父子进程有一个想要修改数据或者堆栈时,两个进程真正分裂。 2-3:通过这次实验对熟悉掌握和了解windows平台常用进线程控制API,有了更深刻的认识,认识到API函数对windows编程的重要性,了解进程线程在内存中的执行,特别认识互斥体Mutex对象,API函数一定要多用,才能记得。 3-1:该程序的输入变量具有限制,若输入除0和1的数据,则将视为0处理.改进的方法为修改if 语句中的条件为:1,即只要输入为非零,则有效。即逻辑表达式的值为真。(在逻辑数学里非零则表示为真!) 为了能较好的实现进程的同步,可以另外设一个标志量,标志临界资源是否正被访问,当a,b,c

华北电力大学 两级放大电路实验报告

实验三 两级放大电路 一、实验目的 进一步掌握交流放大器的调试和测量方法,了解两级放大电路调试中的某些特殊问题; 二、实验电路 实验电路如图5-1所示,不加C F ,R F 时是一个无级间反馈的两级放大电路。在第一级电路中,静态工作点的计算为 3Β11123 R V V R R R ≈ ++, B1BE1 E1C156V V I I R R -≈ ≈+, CE11C1456()V V I R R R =-++ 9B21789 R V V R R R ≈ ++, B2BE2 E2C21112V V I I R R -≈ ≈+, C2CE21101112()V V I R R R =-++ 图5-1 实验原理图 第一级电压放大倍数14i2V1be115 (//) (1)R R A r R ββ=- ++ 其中i2789be2211()////[(1)]R R R R r R β=+++ 第二级电压放大倍数21013V2be2211 (//) (1)R R A r R ββ=- ++ 总的电压放大倍数 O1O2 O2V V1V2O1 i i V V V A A A V V V = = ?=?g g g g g g

三、预习思考题 1、学习mutisim2001或workbenchEDA5.0C 电子仿真软件 2、按实际电路参数,估算E1I 、CE1V 、C1I 和E2I 、CE2V 、C2I 的理论值 3、按预定静态工作点,以β1 =β2 = 416计算两级电压放大倍数V A 4、拟定Om V g 的调试方法

四、实验内容和步骤 1、按图5-1连接电路(三极管选用元件库中NPN 中型号National 2N3904) 实验中电路图的连接如下 2、调整静态工作点 调节R 1和R 7分别使E1V =1.7V ,E2V =1.7V 左右,利用软件菜单Analysis 中DC Oprating Point 分析功能或者使用软件提供的数字万用表(Multimeter )测量各管C V 、E V 、B V 。可以通过计算获得C I ,CE V ,将结果填入表5-1中。 1)、静态工作点调节后,两处调节值如图所示:

操作系统实验报告

操作系统实验报告 ' 学号: 姓名: 指导老师: 完成日期: ~

目录 实验一 (1) 实验二 (2) 实验三 (7) 实验四 (10) 实验五 (15) 实验六 (18) 实验七 (22) \

实验一 UNIX/LINUX入门 一、实验目的 了解 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 编译并观察编译后的结果,然后运行它。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验程序 #include <> #include <> int main() { printf ("Hello World!\n"); return 0; } 五、实验感想 通过第一次室验,我了解 UNIX/LINUX 运行环境,熟悉了UNIX/LINUX 的常用基本命令,熟悉和掌握了UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。

实验二进程管理 一、实验目的 加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。 二、实验内容 (1)进程创建 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程控制 修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 (3)进程的管道通信 编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1 和P2 分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验设计 1、功能设计 (1)进程创建 使用fork()创建两个子进程,父进程等待两个子进程执行完再运行。 (2)进程控制 使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话再运行。 (3)进程的管道通信 先创建子进程1,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。 2、数据结构 子进程和管道。 3、程序框图

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

实时操作系统报告

实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日

实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。

(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];

华北电力大学电力系统分析复试面试问题

保定校区电力系统及其自动化(电自) 面试:1。在线路保护中,什么情况下三段动作了,而一段二段都没有动作。 2、线路中的零序电流怎么测得。3、变压器Y-D11接线,正序负序零序电流的相位幅值怎么变化。4、零序电流保护有么有可能存在相继动作,为什么?5、隔离开关和断路器哪个先断开,为什么?6、电厂发电过程。 英语面试问题:先自我介绍,然后问问题1、为什么选择这个专业? 2、大学里最喜欢的课? 3、家庭成员介绍 笔试继电保护:差不多忘记了。。。记得几个大题1、一个环网的最大最小分支系数分析2、消除变压器不平衡电流的方法3、高频相差保护判断4、给一个阻抗继电器动作方程,让你画两个圆5、有零序电流保护计算题6、距离保护计算是被配合段有两条分支(即外汲),记得公式就行。7、振荡考的是大圆套小圆的,让你判断两个启动元件哪个是大圆,阐述短路与振荡的动作原理,及问有可能什么时候振荡是误动。 前面小题都考的很细。 英语听力,笔试很简单,不用准备。 保定校区电力系统及其自动化(电自) 英语面试老师直接叫我翻译学校的名字还有我学的专业课是什么初是的专业课成绩还有专业英语翻译 专业面试 1 船上的频率是多少 2你知道主要有那几中频率,分别是那些国家的 3两种不同的频率是通过什么连接起来的 4什么是

svc hv 5二机管的单向导通原理 6外面高压线路和地压线路的区别7变电站的无功补偿 笔试比较难我都不会那有零序电流保护镇定保护范围距离镇定 我强烈建议把继电保护学好专业课笔试好难 趁还有印象,先回忆一下 北京校区电气与电子工程学院电力系统及自动化 面试题目: 1.变压器中性点为何要接CT? 2.三相线路,a相短路,c相非短路点的电压、电流怎么求? 3.发电机机械时间常数增大,有什么影响? 4.影响无功潮流的因素有哪些? 还有就是电能质量指标等基础问题,当时一慌,回答的都很差 口试: 自我介绍 家乡介绍,说四种电力设备,读一篇科技短文(我读完是基本没什么感觉,英语平时没学好啊) 分在同一组的,大家的问题也都不一样,不过老师们会很和蔼,到了面试时,基本没有太紧张的感觉,希望对准备考研的有所帮助啊!

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

华北电力大学操作系统实验报告

华北电力大学 实验报告 | | 实验名称____ 操作系统综合实验 课程名称______ 操作系统 | | 专业班级:网络学生姓名: 学号:成绩: 指导教师:王德文/姜丽梅实验日期:2015年11月4日

实验一实验环境的使用 一、 实验目的 1. 熟悉操作系统集成实验环境 OS Lab 的基本使用方法。 2. 练习编译、调试EOS 操作系统内核以及EOS 应用程序。 二、 实验内容 1. 启动 OS Lab; 2. 学习OS Lab 的基本使用方法:练习使用 OS Lab 编写一个 Windows 控制台应用程 序,熟悉 OS Lab 的基本使用方法(主要包括新建项目、生成项目、调试项目等); 3. EOS 内核项目的生成和调试:对 EOS 内核项目的各种操作(包括新建、生成和各 种调试功能等)与对 Windows 控制台项目的操作是完全一致的; 4. EOS 应用程序项目的生成和调试; 5. 退出 OS Labo 三、 实验内容问题及解答 1. 练习使用单步调试功能(逐过程、逐语句),体会在哪些情况下应该使用“逐过 程”调试, 在哪些情况下应该使用“逐语句”调试。练习使用各种调试工具(包括“监 视”窗口、“调用堆栈”窗口等)。 答:逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。 而逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。因此,在需要进 入函数体时用逐语句调试,而不需要进入函数体时用逐过程调试。 四、实验过程 1. 新建Windows 控制台应用程序 生成项目: 执行项目: 调试项目: int Func (Int 口〕,// 芦明F UEK 函数 i. nx n - 0, n = FunjcdO); print f CHello World 查看 EOS SDK( Software Development Kit )文件夹: 修改EOS 应用程序项目名称: pflMSni-E-l (Prftss Ctrl+FVFR switcli corisnlfi uiitdnu...) Ucleone to EOS shell 五、实验心得 这次是验证性试验,具体步骤和操作方法都是与实验教程参考书上一致, 实验很顺利, 实验过程没有遇到困难。通过这次实验,我掌握了 OS Lab 启动和退出操作;练习使用 OS Lab 编写一个Windows 控制台应用程序,熟悉 OS Lab 的基本使用方法新建项目、生 成项目、调试项目等。 2. 使用断点终端执行: 13

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.wendangku.net/doc/9b11623590.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

华北电力大学EDA实验报告

课程设计报告 (2013--2014年度第1学期) 名称:电子电工实习(EDA部分)院系:科技学院信息系 班级: 学号: 学生姓名: 指导教师:张宁孙娜 设计周数:分散1周 成绩: 日期:2013年11月9日

一、课程设计(综合实验)的目的与要求 1、实验目的 设计一个具有基本功能的电子钟 2、实验要求 (1)、在6位数码管上按24小时进制显示“时”“分”“秒”; (2)、有对“时”“分”“秒”的校时功能; (3)、具有正点报时功能。当快到正点,即某点59分50秒时,电子钟报时,蜂鸣器鸣叫,10秒后结束; 二、设计实验 1、设计原理及其框图 (1)数字钟的构成

数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和蜂鸣器组成。干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”计数器的输出状态送到六段显示译码器译码,通过六位LED 六段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。 (2)、简述74LS163 2、设计思路 通过分析实验要求得出:选用74LS163芯片共计6片,采用同步计数的方法来设计相关计时器(同一源输入脉冲接至CLK ,控制ENT 使能端实现计数),秒位计时器与分位计时器均为60进制,时位计时器为24进制。 控制验证当数字电子钟的输出为59分50秒时,与一个本电路所用的源输入脉冲信号,利用与门的特性输出相应的高低电平接通蜂鸣器实现整点报时。 三、实验具体设计 1、秒位计时电路设计(60进制) 秒低位计数用十进制计数器(74163改装)计数,由脉冲信号触发计数,9秒(秒低位输出1001B )时,秒低位清零;秒高位计数用六进制计数器(74163改装)计数,9秒时,秒高位芯片ENT 输入高电平,由此触发计数,59秒(秒低位输出1001B ,秒高位输出0101B )时,秒高位清零。如图(1)所示 74LS163芯片 4位二进制输出

嵌入式实时操作系统实验报告

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日

一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。

华北电力大学电力系统分析考研及期末考试必备

华北电力大学电力系统分析考研及期末考试必备 1、什么是动力系统、电力系统、电力网? 答:通常把发电企业的动力设施、设备和发电、输电、变电、配电、用电设备及相应的辅助系统组成的电能热能生产、输送、分配、使用的统一整体称为动力系统; 把由发电、输电、变电、配电、用电设备及相应的辅助系统组成的电能生产、输送、分配、使用的统一整体称为电力系统; 把由输电、变电、配电设备及相应的辅助系统组成的联系发电与用电的统一整体称为电力网。 2、现代电网有哪些特点? 答:1、由较强的超高压系统构成主网架。2、各电网之间联系较强,电压等级相对简化。3、具有足够的调峰、调频、调压容量,能够实现自动发电控制,有较高的供电可靠性。4、具有相应的安全稳定控制系统,高度自动化的监控系统和高度现代化的通信系统。5、具有适应电力市场运营的技术支持系统,有利于合理利用能源。 3、区域电网互联的意义与作用是什么? 答:1、可以合理利用能源,加强环境保护,有利于电力工业的可持续发展。 2、可安装大容量、高效能火电机组、水电机组和核电机组,有利于降低造价,节约能源,加快电力建设速度。 3、可以利用时差、温差,错开用电高峰,利用各地区用电的非同时性进行负荷调整,减少备用容量和装机容量。 4、可以在各地区之间互供电力、互通有无、互为备用,可减少事故备用容量,增强抵御事故能力,提高电网安全水平和供电可靠性。 5、能承受较大的冲击负荷,有利于改善电能质量。 6、可以跨流域调节水电,并在更大范围内进行水火电经济调度,取得更大的经济效益。 4、电网无功补偿的原则是什么? 答:电网无功补偿的原则是电网无功补偿应基本上按分层分区和就地平衡原则考虑,并应能随负荷或电压进行调整,保证系统各枢纽点的电压在正常和事故后均能满足规定的要求,避免经长距离线路或多级变压器传送无功功率。 5、简述电力系统电压特性与频率特性的区别是什么? 答:电力系统的频率特性取决于负荷的频率特性和发电机的频率特性(负荷随频率的变化而变化的特性叫负荷的频率特性。发电机组的出力随频率的变化而变化的特性叫发电机的频率特性),它是由系统的有功负荷平衡决定的,且与网络结构(网络阻抗)关系不大。在非振荡情况下,同一电力系统的稳态频率是相同的。因此,系统频率可以集中调整控制。 电力系统的电压特性与电力系统的频率特性则不相同。电力系统各节点的电压通常情况下是不完全相同的,主要取决于各区的有功和无功供需平衡情况,也与网络结构(网络阻抗)有较大关系。因此,电压不能全网集中统一调整,只能分区调整控制。

操作系统实验报告16487

西安邮电大学 (计算机学院) 课实验报告 实验名称:进程管理 专业名称:计算机科学与技术 班级: 学生: 学号(8位): 指导教师: 实验日期:*****年**月**日

一. 实验目的及实验环境 目的:(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 环境:Linux操作系统环境: 二. 实验容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 三.方案设计 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 程序流程图如下:

华北电力大学实验报告

华北电力大学 实验报告 实验名称:超外差收音机安装与调试 一、实验目的 1.了解常用电子器件的类别、型号、规格、性能及其使用范围,能查阅有关的 电子器件图书。能够正确识别和选用常用的电子器件,并且能够熟练使用万用表。 2.学习并掌握超外差收音机的工作原理 3.了解超外差式收音机的调试方法。

4.熟悉手工焊锡的常用工具的使用及其维护与修理,基本掌握手工电烙铁的焊 接技术。 二、实验原理图 三、元器件清单 元件型号数量位号元件型号数量位号 三极管9013 2只V6、V7 电阻56Ω1只R5 三极管9014 1只V5 电阻100KΩ2只R7、R10 三极管9018 4只V1、V2、V3、V4 电阻120KΩ1只R1 发光二极管红色1只LED 瓷片电容103 1只C2 磁棒及线圈4x8x80mm 1套T1 瓷片电容C1、C4、C5 振荡线圈TF10(红色)1只T2 瓷片电容223 7只C6、C7、C10 中频变压器TF10(黄色)1只T3 瓷片电容C11 中频变压器TF10(白色)1只T4 电解电容 4.7uF 2只C3、C8 中频变压器TF10(绿色)1只T5 电解电容100uF 3只C12、C13、C9 输入变压器蓝色1只T6 双联电容CBM-223PF 1只CA 扬声器0.5W 8Ω1只BL 耳机插座?3.5mm 1只CK 电位器10KΩ1只RP 装配说明书1分 电阻51Ω1只R8 机壳上盖1个 电阻100Ω2只R13、R15 机壳下盖1个 电阻120Ω2只R12、R14 刻度面板1块 电阻150Ω1只R3 调谐拨盘1只 电阻220Ω1只R11 电位器拨盘1只 电阻510Ω1只R16 磁棒支架1只

相关文档
相关文档 最新文档