实时操作系统实验
- 格式:doc
- 大小:159.00 KB
- 文档页数:17
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 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 10,编程环境为 Visual Studio 2019。
三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。
2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。
3、为新进程指定可执行文件的路径、命令行参数、进程属性等。
4、编写代码来等待新进程的结束,并获取其退出代码。
(二)进程同步实验1、设计一个生产者消费者问题的模型。
2、使用信号量来实现生产者和消费者进程之间的同步。
3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。
4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。
(三)进程通信实验1、选择使用管道来实现进程之间的通信。
2、创建一个匿名管道,父进程和子进程分别读写管道的两端。
3、父进程向管道写入数据,子进程从管道读取数据并进行处理。
四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。
通过观察进程的创建和执行过程,加深了对进程概念的理解。
(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。
分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。
(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。
数据能够准确地在进程之间传递,验证了管道通信的有效性。
五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。
通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。
(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。
操作系统安全实验1实验报告一、实验目的本次操作系统安全实验的主要目的是让我们深入了解操作系统的安全机制,通过实际操作和观察,掌握一些常见的操作系统安全配置和防护方法,提高对操作系统安全的认识和应对能力。
二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),实验设备为个人计算机。
三、实验内容与步骤(一)Windows 10 操作系统安全配置1、账户管理创建新用户账户,并设置不同的权限级别,如管理员、标准用户等。
更改账户密码策略,包括密码长度、复杂性要求、密码有效期等。
启用账户锁定策略,设置锁定阈值和锁定时间,以防止暴力破解密码。
2、防火墙配置打开 Windows 防火墙,并设置入站和出站规则。
允许或阻止特定的应用程序通过防火墙进行网络通信。
3、系统更新与补丁管理检查系统更新,安装最新的 Windows 安全补丁和功能更新。
配置自动更新选项,确保系统能够及时获取并安装更新。
4、恶意软件防护安装并启用 Windows Defender 防病毒软件。
进行全盘扫描,检测和清除可能存在的恶意软件。
(二)Linux(Ubuntu 2004)操作系统安全配置1、用户和组管理创建新用户和组,并设置相应的权限和归属。
修改用户密码策略,如密码强度要求等。
2、文件系统权限管理了解文件和目录的权限设置,如读、写、执行权限。
设置特定文件和目录的权限,限制普通用户的访问。
3、 SSH 服务安全配置安装和配置 SSH 服务。
更改 SSH 服务的默认端口号,增强安全性。
禁止 root 用户通过 SSH 登录。
4、防火墙配置(UFW)启用 UFW 防火墙。
添加允许或拒绝的规则,控制网络访问。
四、实验结果与分析(一)Windows 10 操作系统1、账户管理成功创建了具有不同权限的用户账户,并能够根据需求灵活调整权限设置。
严格的密码策略有效地增加了密码的安全性,减少了被破解的风险。
账户锁定策略在一定程度上能够阻止暴力破解攻击。
郑州轻工业学院实践报告姓名:院(系):专业:班级:学号:指导教师:成绩:时间:2014 年2 月至2014 年5 月目录一、实践目的 .............................................. 错误!未定义书签。
二、实践内容及步骤 .................................. 错误!未定义书签。
三、实践效果分析 ...................................... 错误!未定义书签。
四、小节(结合实际,谈谈认识)........... 错误!未定义书签。
一、实践目的为了增强我们队脚本语言的认识和了解。
熟练掌握脚本语言的特点和应用。
熟练掌握Dreamweaver编写代码的技巧,提高学生的动手能力。
二、实践内容及步骤1、内容:利用Dreamweaver平台编写js代码,制作一个简单的用户注册表单页。
2、步骤:根据需要设计表单,三、实验结果分析1、表单图例2、页面代码外链式js,调用函数邮箱js代码:输入邮箱时自动填充邮箱后缀,(如@)<script type="text/javascript"src="js/autoMail.js"></scrip> 地址js代码:<script type="text/javascript"src="js/Area.js"></script> 日期js代码:点击日期栏,会自动弹出日历表<script type="text/javascript"src="js/Calendar.js"></scrip>3、<html>4、<body>5、<h1align="center">请填写您的个人信息</h1>6、<div align="center"class="main">7、<form action="Student_register"method="post">8、<table class="table"cellspacing="8"9、<td>账户名称:</td>10、<td><input type="text"name="userName"style="height: 25"></input>11、</td>12、</tr>13、<tr>14、<td>用户密码:</td>15、<td><input type="password"name="userPassword"style="height: 25"></input></td>16、</tr><tr>17、<td>确认密码:</td><td><inputtype="password"name="userPasswordAgain"style="height: 25"></input>18、</td><td></td></tr><tr>19、<td>联系电话:</td>20、<td><input type="text"name="userPhone"style="height: 25"></input>21、</td></tr><tr>22、<td>用户年龄:</td>23、<td><input type="text"name="userAge"style="height: 25"></input>24、</td></tr><tr>25、<td>用户Email:</td>26、<td><input id="email"type="text"name="userEmail"style="height: 25"></input></td>27、</tr><tr>28、<td>用户性别:</td>29、<td> <input type="radio"name="userSex"30、id="userSex"value=""checked="checked"style="height: 25"/> 男31、 <input type="radio"name="userSex"id="userSex"32、value=""style="height: 25"/>女33、<td></td></tr><tr>34、<td>用户生日:</td>35、<td><input name="userBirthday"type="text"id="control_date"36、maxlength="10"onclick="newCalendar().show(this);"37、readonly="readonly"style="height:25"/>38、</td>39、</tr>40、<td>用户地址:</td>41、<td><div>42、<select id="s_province"name="s_province"charset="UTF-8"></select> 43、<select id="s_city"name="s_city"charset="UTF-8"></select> 44、<select id="s_county"name="s_county"charset="UTF-8"></select>45、<script class="resources library"src="js/area.js"type="text/javascript"></script><script type="text/javascript">_init_area();</script>46、</div></td>47、</tr>48、</table>49、<br></div>50、<div class="Button"align="center">51、<input style="font-size:20px" type="reset"value="清空">52、<input style="font-size:20px" type="submit"value="提交">53、</div>54、</form>55、<br></br>56、<div class="time"align="right">//获取当前时间57、<jsp:include page="Clock.jsp"></jsp:include>58、</div>59、</body>60、</html>四、小节通过这次独立完成作业,我对js有了更深的理解,明白的它对一个程序员来说是多么重要的,它能代表一个人外表和内心深处,js主要是给用户体现一个更清新、更美观的界面和更流畅的浏览效果。
实验报告实验课程: 计算机操作系统学生姓名:XXX学号:XXXX专业班级:软件2014年12月25日目录实验一熟悉Windows XP中的进程和线程 (3)实验二进程调度 (7)实验三死锁避免—银行家算法的实现 (16)实验四存储管理 (22)实验一熟悉Windows XP中的进程和线程一、实验名称熟悉Windows XP中的进程和线程二、实验目的1、熟悉Windows中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
三、实验结果分析1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。
2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表:表一:统计进程的各项主要信息3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。
再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程,原因是该系统是系统进程。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论 explorer.exe是管理桌面图标的文件(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:进程:explorer.exe 中的各个线程6、注意某些线程前有“+”,如图所示:,说明二者之间的差异前有“+”其器线程下有窗口。
四、心得体会通过本次实验,我了解到了windows系统中进程的管理与操作,我了解了如何切出任务管理器,任务管理器应用与其他与进程相关的知识,明白了有些系统程序不能够关闭,系统中的进程与线程虽然很多,但是其中有许多关联,只要弄清楚其中的关联那么就能够运用好进程与线程,达到我们的目的。
《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 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)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
实验一熟悉实验环境实验目的:1、理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;2、掌握µC/OS-II编译环境的使用和配置方法。
3、进行简单的程序设计实验要求与思路:1、对开发环境进行相关配置,使示例代码能够正确编译执行2、更改示例代码,使示例代码每次显示时能够进行水平移动(左移到边界时开始右移,右移到边界时开移左移)。
3、更改示例代码,实现垂直移动。
函数说明:void PC_GetDateTime (char *s);获取"YYYY-MM-DD HH:MM:SS"格式的时间字串存放在字符串s中,s的长度最少为21字节。
void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color);在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。
INT8U OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);按时、分、秒、毫秒设置进行延时。
void OSTimeDly (INT16U ticks)按ticks值进行延时,1 ticks一般为10ms。
INT32U OSTimeGet (void)获取从程序开始运行到当前时间,所经过的ticks值。
实验程序:/*********************************************************** uC/OS-II* The Real-Time Kernel* EXAMPLE**********************************************************/#include "includes.h"/*********************************************************************CONSTANTS********************************************************************/#define TASK_STK_SIZE 512 /*Size of each task's stacks(#of WORDs)*//********************************************************************* VARIABLES********************************************************************/OS_STK TaskStk[TASK_STK_SIZE]; /* Tasks stacks */ OS_STK TaskStartStk[TASK_STK_SIZE];/********************************************************************* FUNCTION PROTOTYPES********************************************************************/void Task(void *data); /* Function prototypes of tasks */ void TaskStart(void *data); /* Function prototypes of Startup task */ static void TaskStartCreateTasks(void);static void TaskStartDispInit(void);/********************************************************************* MAIN********************************************************************/void main (void){PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear thescreen */OSInit(); /* Initialize uC/OS-II */PC_DOSSaveReturn(); /* Save environment to return to DOS */PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switchvector */OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 2);OSStart(); /* Start multitasking */}/********************************************************************* STARTUP TASK********************************************************************/void TaskStart (void *pdata){#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU statusregister */OS_CPU_SR cpu_sr;#endifchar s[100];INT16S key;pdata = pdata; /* Prevent compiler warning */TaskStartDispInit(); /* Initialize the display */ OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR);/* Install uC/OS-II's clock tick ISR */PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL();OSStatInit(); /* Initialize uC/OS-II's statistics */OSTaskCreate(Task, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 0);for (;;){if (PC_GetKey(&key) == TRUE) /* See if key has been pressed */{if (key == 0x1B) /* Yes, see if it's the ESCAPE key */{PC_DOSReturn(); /* Return to DOS */ }}OSCtxSwCtr = 0; /* Clear context switch counter */OSTimeDly(1);}}/********************************************************************* INITIALIZE THE DISPLAY********************************************************************/static void TaskStartDispInit (void){PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ",DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr( 0, 1, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 3, " Time EXAMPLE ", DISP_FGND_BLACK +DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 4, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 11, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 12, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 13, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 14, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 15, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 16, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 17, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 18, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 19, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 20, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 21, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 22, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}********************************************************************* * TASKS********************************************************************/ void Task (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;){sprintf(ss,"Time = %ld",OSTimeGet());PC_DispStr(40, 10, ss, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */}}首次接触实时操作系统程序,通过此次实验收获很多。
《操作系统》实验报告实验序号:01 实验项目名称:操作系统环境学号1107xxx 姓名xxx 专业、班级软件工程1103 实验地点计—502 指导教师徐冬时间2013.9.23 实验目的1) 了解和学习Windows系统管理工具及其使用;2) 熟悉Windows系统工具的内容和应用;由此,进一步熟悉Windows操作系统的应用环境。
工具/准备工作在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Windows 操作系统的计算机。
实验内容与步骤1. 计算机管理2. 事件查看器3. 性能监视4. 服务5. 数据库 (ODBC)为了帮助用户管理和监视系统,Windows提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
如图2所示。
图2 基于虚拟机的操作系统计算环境管理步骤1:登录进入Windows。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1) Internet 信息服务;管理IIS,Internet 和Intranet站点的WEB服务器。
2) Server Extensions 管理器;Server Extensions管理器。
3)计算机管理;管理磁盘以及使用其他系统工具来管理本地或远程的计算机。
4)性能;显示系统性能图表以及配置数据日志和警报。
5)本地安全策略;查看和修改本地安全策略,如用户权限和审核策略。
6)事件查看器;显示来自于Windows和其他程序的监视与排错消息。
7)组件服务;配置和管理COM+应用程序。
1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
步骤3:在“管理工具”窗口中,双击“计算机管理”图标。
“计算机管理”使用的窗口与“Windows资源管理器”相似。
《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。
二、实验环境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)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。
实时操作系统实验报告专业:10通信工程学号:20100306110**: ******:***实验一任务管理实验实验目的:1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;2.掌握μC/OS-II 中任务管理的基本方法(挂起、解挂);3.熟练使用μC/OS-II 任务管理的基本系统调用。
实验要求与思路:为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1 和T3三个任务,它们交替运行,如图所示说明:在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创建其他3 个应用任务T0、T1 和T2,之后整个系统的运行流程如下:1)优先级最高的T0 开始执行,之后T0 挂起自己;2)然后系统调度选中T1 开始执行,之后T1 挂起自己;3)接着系统调度选中T2,之后唤醒T0;4)如此循环实验程序:#include "includes.h"#define TASK_STK_SIZE 512OS_STK TaskStk1[TASK_STK_SIZE];OS_STK TaskStk2[TASK_STK_SIZE];OS_STK TaskStk3[TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE];void Task1(void *data);void Task2(void *data);void Task3(void *data); /* Function prototypes of tasks*\void TaskStart(void *data); /* Function prototypes of Startuptask */static void TaskStartCreateTasks(void);static void TaskStartDispInit(void);void main (void){PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ OSInit(); /* Initialize uC/OS-II */PC_DOSSaveReturn(); /* Save environment to return to DOS */PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);OSStart(); /* Start multitasking */}void TaskStart (void *pdata){#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr;#endifchar s[100];INT16S key;pdata = pdata;TaskStartDispInit(); /* Initialize the display */OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL();OSStatInit(); /* Initialize uC/OS-II's statistics */OSTaskCreate(Task1, (void *)0, &TaskStk1[TASK_STK_SIZE - 1], 1);OSTaskCreate(Task2, (void *)0, &TaskStk2[TASK_STK_SIZE - 1], 2);OSTaskCreate(Task3, (void *)0, &TaskStk3[TASK_STK_SIZE - 1], 3);OSTaskSuspend(2);/* Prevent compiler warning */OSTaskSuspend(3);for (;;) {if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */ if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */PC_DOSReturn(); /* Return to DOS */ }}OSCtxSwCtr = 0; /* Clear context switch counter */ OSTimeDly(1);}}static void TaskStartDispInit (void){PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr( 0, 1, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 3, " Time EXAMPLE ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 4, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 11, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 12, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 13, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 14, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 15, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 16, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 17, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 18, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 19, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 20, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 21, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 22, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}void Task1 (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;) {PC_DispStr(40, 10, "Task1 running", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);PC_DispStr(40, 11, "Task2 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(40, 12, "Task3 Suspend ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY);OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ OSTaskResume(2); /* Delay 1 clock tick */ OSTaskSuspend(OS_PRIO_SELF);}}void Task2 (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;) {PC_DispStr(40, 10, "Task1 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(40, 11, "Task2 running ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);PC_DispStr(40, 12, "Task3 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /* Delay 1 clock tick */ OSTaskResume(3); /* Delay 1 clock tick */ OSTaskSuspend(OS_PRIO_SELF);}}void Task3 (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;) {PC_DispStr(40, 10, "Task1 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(40, 11, "Task2 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(40, 12, "Task3 running ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY); OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /* Delay 1 clock tick */ OSTaskResume(1); /* Delay 1 clock tick */ OSTaskSuspend(OS_PRIO_SELF);}}实验截图:实验感想通过这次实验使我掌握μC/OS-II 中任务管理的基本方法(挂起、解挂),首先在主函数中创建初始任务OSTaskCreate,执行OSTaskCreate后,在调用TaskStartCreateTasks ,在TaskStartCreateTasks实现3 个应用任务T0、T1 和T2循环挂起和唤醒,每个任务运行时要保证其他任务被挂起,而且要在挂起之前唤醒下一个任务。