滕艳平,杜 鹃,金梅,李丽丽
(齐齐哈尔大学计算机与控制工程学院,黑龙江齐齐哈尔161006)
摘要:针对操作系统实验课程存在的问题,提出构建面向应用的多层次、立体化实验教学体系,结合多种操作系统平台对实验内容进行整合优化,以任务管理为例,探讨仙C/OS-Ⅱ平台下嵌入式操作系统的设计方案,指出通过一系列创新项目的训练,学生的程序设计能力和应用开发能力得到很大提升。
教育期刊网 http://www.jyqkw.com
关键词 :嵌入式操作系统;实验教学;整合优化;设计方案;应用开发
文章编号:1672-5913(2015)17-0098-05
中图分类号:G642
基金项目:黑龙江省教育科学“十二五”规划课题( GBC1213078)。
第一作者简介:滕艳平,女,副教授,研究方向为嵌入式操作系统,typ2732996@163.com。
0 引言
操作系统是计算机及相关专业必修的一门专业基础课程,学习的主要目的是让学生掌握操作系统的基本概念、基本原理和算法设计思想,理解操作系统在计算机系统中的定位和作用,为学生建立起整机的概念,并为其今后从事相关领域的工作打下坚实的基础。
嵌入式系统主要是以应用为中心、以计算机技术为基础并且软硬件可裁剪的专用计算机系统,广泛应用到工业、国防、教育、航空、通信等众多领域。嵌入式系统与操作系统紧密相连,这不仅是因为在课程体系中操作系统是嵌入式系统的先修课程,还因为与操作系统的其他后续课程相比,嵌入式系统课程能使学生以嵌入式应用的视角理解通用的计算机系统。
1 操作系统实验课程现状分析
目前,国内各高校的操作系统教学大纲比较接近,教学内容和学时数的设置也基本相同,在实验项目的安排上多以验证型实验为主,对内核算法进行模拟,无法使学生建立完整的系统概念,主要表现在以下几方面。
1)缺乏完整的实验创新教学体系。
在当前操作系统实验教学中,缺乏从嵌入式应用的角度分析操作系统的工作原理和设计思想,缺乏系统内核代码的分析与重构修改。如何根据实际需要进行内核代码的裁剪、重新编译和系统调用,又如何根据实际需要进行移植,这些问题对培养学生的实际应用能力至关重要,也是亟须解决的问题。
2)缺乏多种操作系统环境下实验内容的整合。
μC/OS-Ⅱ是一种嵌入式实时操作系统,源代码开放。与Linux相比,μC/OS-Ⅱ的微内核代码小巧精干,更有利于初学者学习和掌握操作系统进程调度、同步、通信等基本概念,这样在基础验证型实验中以μc/os-Ⅱ作为实验平台,会取得更好的教学效果;而在Linux操作系统平台下,教师应使学生更好地掌握用于描述操作系统的数据结构,进而能够对嵌入式Linux内核代码进行分析、裁剪和应用。
3)缺乏对实验教学的重视程度。
多数高校在操作系统课的教学中,只偏重理论而轻视实验。操作系统原理内容繁多、概念抽象,算法的设计又很复杂,在有限的实验学时内无法更好地满足实践教学的需要,这就需要后续的课程设计或毕业设计环节进行弥补。
2 操作系统实验教学体系的构建
通过对操作系统实验课程现状的分析,为培养学生的实际应用开发能力,教师应创建一系列系统的实验项目,由浅入深,循序渐进,同时要结合μC/OS-Ⅱ、Linux和Windows不同的操作系统平台建立课内外多层次的实践技能培养机制,实现立体化的实验教学模式,同时将实验划分为基础验证型实验、综合设计型实验、应用创新型实验以及课程设计或毕业设计环节。操作系统实验课程教学体系见表1。
在操作系统实验课程教学体系中,教师可根据不同的操作系统环境设置不同的实验内容,多层次、多角度地剖析操作系统的工作原理,使学生更好地掌握系统的整体设计思想并能够对操作系统的内核代码进行分析,进而根据实际硬件要求进行裁剪、移植等相关操作,提高嵌入式应用开发能力。
笔者以μC/OS-Ⅱ和Linux为主要实验平台进行阐述,也可根据实际情况选择其他操作系统平台,如Windows平台下的多线程设计。实验内容的安排可分为必做和选做实验,16学时的必做实验安排如下:①进程/任务的创建、并发执行(2学时);②进程/任务的同步与通信(4学时);③虚拟存储器管理(动态分区管理算法、页面置换算等)(4学时);④简单的文件系统设计(6学时)。
此外,教师可再安排4项选做实验,在课内实验学时不足的情况下,拓展到课程设计或毕业设计等实践环节中完成,实验内容如下:①Linux2.6/μ C/OS-Ⅱ源代码的分析;②Linux下字符设备驱动程序的编写;③嵌入式操作系统内核的裁剪和编译;④基于微处理器的操作系统移植。
在上述实验的安排中,必做实验①一④项内容以基础验证型和综合设计型实验为主,加深学生对操作系统资源管理功能的理解和掌握;而选做实验①—④项实验内容以应用创新为主要目的,提高学生针对计算机底层代码的编写和设计能力,完成嵌入式操作系统的应用开发。笔者以μc/os-Ⅱ为实验平台,设计两个实验案例激发学生学习的主动性和创造性,以进程/任务管理为例探讨嵌入式操作系统的设计和实现过程。
3 μC/O S-Ⅱ操作系统平台下的实验案例设计
该实验运行环境为BORLAND CH4.5,启动并创建工程,选择菜单Project→New project,弹出“New Target”对话框。在“Project path andname”中指定工程路径c:\test\testl,在“TargetType”下选择“Application[.exe]”,在“PlatForm”下选择“DOS[Standard]”,在“Target Modet”下选择“Large”。此外,工程中还需添加与移植相关的文件OS_CPU A.ASM、OS—CPU_C.C、μC/OS -Ⅱ操作系统的核心文件μcos Ⅱ.c以及PC相关文件PC.C。
3.1 任务的创建和任务3种基本状态的转换
任务是μC/OS-Ⅱ操作系统中进行资源分配和独立运行的基本单位。本实验的目的是了解和掌握任务的3种基本状态及转换,理解并发的概念。
1)实验内容。
设计两个任务的应用程序,任务MyTask的功能是每3s在显示器上显示一个字符“A”,而任务YouTask是每Is在显示器上显示字符“B”,要求任务YouTask运行20次后挂起任务MyTask,当YouTask运行40次后再恢复运行MyTask。
2)解决方案。
该实验中主要涉及3个重要的μc/os-Ⅱ函数M:任务创建函数OSTaskCreate()、任务挂起函数OSTaskSuspend()和任务恢复函数OSTaskResume();此外,还有任务切换宏函数OS- TASK.-SWO(任务切换的工作由OSCtSw()函数完成)和任务删除函数OSTaskDel()。任务的3种基本状态分别为运行态、就绪态和等待态。当运行态任务调用函数OSTaskSuspend()变为等待态,等待态的任务调用函数OSTaskResume()变为就绪态,就绪态任务调用宏函数OS TASK—SWO变为运行态,运行态的任务被剥夺了CPU的使用权,就成为就绪态。在任务中,通过调用函数OSTaskDel()删除任务自身或除空闲任务以外的其他任务。关键代码如下:
OSTaskCreate(YouTask, s_Y,&YouTaskStk[TASK_STK_SIZE-1],2);
if(time=20)
{ OSTaskSuspend(0);
)
if(time-40)
{ OSTaskResume(0);
}
time+=1:
PC_DispChar(x,y,
*(char*)pdata, DISP_BGNDBLACK+DISP_FGND_WHITE);
3)运行结果分析。
本案例运行结果见图1所示。
结果分析如下:μc/os-Ⅱ操作系统中的任务即为周期性的实时任务,任务调度原则是执行最高优先级优先调度算法。在该实验中,由于MyTask任务的优先级高于YouTask,则运行结果先输出“A”,又因为MyTask任务是每隔3s显示1次,故在MyTask的空闲时间内,任务YouTask每1s显示1次,因此连续输出3个“B”之后再输出下一个“A”,依此类推,这样便形成两个任务之间的并发操作。
通过对运行结果的观察,学生能够非常直观、形象地理解任务创建和执行过程、任务并发操作等抽象概念。当对运行结果进一步探究可知,任务MyTask在YouTask运行20次后便被挂起,即输出20个“B”后停止“A”的输出,当“B”输出40次后又激活MyTask任务,即又恢复“A”的输出。因此,该实验又能使学生进一步掌握任务的基本状态及相互转换,加强学生对操作系统抽象原理的理解,提高学生学习的兴趣和积极性。另外,通过对程序框架的研究和改进,学生可完成操作系统的其他管理功能,加强对操作系统工作原理的深入理解,提高编程能力和工程实践能力。
3.2 任务的同步与通信
任务之间的同步通过事件完成,μc/os-Ⅱ中的事件包括信号量、消息邮箱和消息队列。该实验利用消息队列协调多个任务之间的同步与通信。通过该实验,学生能够进一步掌握多任务编程设计的思想。
1)实验内容。
该实验共创建3个任务,其中StartTask任务向消息队列发送消息,MyTask和YouTask任务分别从消息队列中接收消息,从而完成多个任务之间的同步与通信。
2)解决方案。
该实验对消息队列操作涉及3个重要函数,分别为创建消息队列函数OSQCreate()、请求消息队列函数OSQPend()和向消息队列发送消息OSQPostFront(),其中OSQPostFront()是以后进先出( LIFO)的方式组织消息队列的。创建消息队列需要定义一个指针数组,然后把各个消息缓冲区首地址存入该数组,再调用创建函数完成。关键代码如下:
void*MsgGrp[N_ MESSAGES];
OS_EVENT *Str_Q;
Str_Q=OSQCreate(&MsgGrp [O],N_MES SAGES);
s=”Which task has received the string?”;
s100=”Now,the value of OSTime is between 100 and500"
s500=”Now,the value of OSTime is between 5000 and5500”
OSQPostFront(Str__Q,s);
OSQPostFront(Str_Q,sl00);
OSQPostFront(Str_Q,s500);
ss-OSQPend(Str_Q,0,&err);
3)运行结果分析。
本案例运行结果见图2所示。
结果分析如下:该实验中,StartTask任务采用LIFO方式一共向消息队列发送8条消息,任务MyTask和YouTask采用同步的方式接收这些消息。由于任务MyTask的优先级高于YouTask,因此在当前行第10列位置首先由MyTask接收并输出一个字符串,而在下一行第20列位置由YouTask接收并输出另一个字符串。由于StartTask任务发送消息采用了循环结构,即在第1个循环中,循环变量OSTimeGet()的取值为100~500,因此将上述两条消息再次由MyTask和YouTask接收并输出,然后又由MyTask接收并输出一个指定的字符串。在第2个循环中,循环变量OSTimeGet()的取值为5000—5500,因此接下来再由MyTask和YouTask两任务分别接收并输出另一字符串。
通过对本实验的分析,我们可以看出,StartTask任务与MyTask或YouTask任务采用的是相互合作的关系,只有当StartTask向消息队列发送消息时,MyTask或YouTask才能从消息队列接收消息。该案例中,在StartTask任务向消息队列发送的8条消息中,MyTask任务接收了5条消息,而YouTask任务接收了3条消息。此外,接收消息的两个任务也是相互协调的,这样多个任务可并发完成一项工作内容,实现多任务(或多线程)的设计目标。通过对运行结果的观察,学生可以进一步理解同步与通信机制,为后续内核代码的分析、裁剪以及μC/OS-Ⅱ操作系统移植等打下了坚实基础。
4 实验课程教学方法的改进及实施
在操作系统的实验教学中,教师可采取灵活多样的教学方法和手段,通过课程网站为学生提供丰富的学习资料、论坛交流、作业的答疑和批改等个性化的辅助学习环境,拓宽学生的视野,促进学生自主学习和创新意识的培养。在教学方法上,教师可主要实施以下改革措施。
1)启发探究式教学方法。
启发探究式教学方法是指教师针对具体实验内容,启发学生的思维,设计实验情境,探索实验方法和步骤,提高学生的实际问题分析能力,体现以教师为主导、以学生为主体的教学理念。例如,在嵌入式内核的裁剪和移植实验中,教师引导学生分析Linux或μC/OS-Ⅱ内核结构和代码,再根据微处理器的具体要求进行内核的裁剪并修改相关的移植文件,编写底层驱动并完成实验内容,培养学生逐步探究问题和解决问题的能力。在实际运用中,将启发探究式与个性化自主学习相结合,才能达到良好的教学效果,这主要是考虑到每个学生基础能力和兴趣爱好的差异,因此要因材施教,发挥各自的特长,激发学生探究问题的主动性和创造性。
2)任务驱动教学方法。
任务驱动教学方法是指将实际教学内容隐含在具体任务中,以任务作为学生学习的途径,学生可采用分组合作的方式共同探讨问题的解决方法。在任务的完成过程中,学生将主动探索学习并将协作学习有机结合,实现知识的重构。在操作系统的实验教学中,教师可采用任务驱动的方式组织实验内容,将每个实验项目都设置成一个独立的任务,再将任务分解成若干个功能模块,逐步探索,提高学生的工程实践能力。例如,在文件系统设计的实验中可采用任务驱动的方式,将任务分解为文件的创建、打开、关闭、读写、复制、查询、删除等多个功能模块,为每个模块设置相关的数据结构,编写程序代码并加载到内核中,完成相应的功能。该实验项目能够培养学生的团队合作精神,增强其创新意识。
3)案例教学方法。
案例教学方法是指在实验课程大纲和教学内容的基础上,根据教学目标的要求选取具有代表性的典型案例并将其贯穿到整个实验课程体系中。通过案例的模拟演示和教师对案例开发过程的讲授,学生能够加深对操作系统抽象理论的理解和掌握。例如,进程的创建、同步、通信、调度和内存的分配、置换都可以做成实验案例并形成案例库。对案例库内容,学生可以自行到课程网站下载学习,也能进行修改和完善。优秀的案例可以被收集到案例库中,由学生循环使用,这样随着案例库内容的不断丰富和充实,学生能在较短时间内提高对操作系统概念、原理的认知能力和设计开发能力,充分训练批判性思维和创新性思维。
5 结语
通过对操作系统实验课程现状的分析,笔者构建了多层次、立体化的实验教学体系,将实验内容划分为基础验证型实验、综合设计型实验、应用创新型实验以及课程设计或毕业设计环节,并结合多种操作系统平台(以μC/OS-Ⅱ和Linux为主)对实验内容进行了整合优化;通过两个实验案例分析嵌入式操作系统的设计过程,帮助学生掌握系统的开发环境和相关内核文件的功能,对实验课程教学方法进行改革并在具体实验项目中实施,取得了良好的效果。
教育期刊网 http://www.jyqkw.com
参考文献:
[1]滕艳平,王艳春,张枢,计算机操作系统[M].哈尔滨:哈尔滨工业大学出版社,2008: 156-187.
[2]林耀海,程丽,孙奇燕.着眼嵌入式发展的操作系统教学探讨[.计算机教育,2010(24): 86-89.
[3]申斌,胡华,陈举欣.引入μC/0-Ⅱ的操作系统课程实验教学方法探讨J].山东建筑大学学报,2013,28(1): 86-89.
[4]葛艳,杜军威,江守寰,等.“操作系统原理”层次化实验教学环境的构建J],实验室研究与探索,2012,31(6): 59-61.
[5]郁红英,王磊.浅谈操作系统实践教学[J].实验室研究与探索,2013,32(10): 434-437.
[6]孙述和,谢青松,董付国,等.操作系统实验教学研究与探索[J],计算机教育,2010(1): 93-96.
[7]任哲.嵌入式实时操作系统μC/OS-Ⅱ原理及应用[M],北京:北京航空航天大学出版社,2009: 116-162..
[8]权宁一,权晓林,嵌入式系统专业实验教学改革的探索与实践[J],实验室研究与探索,2011,28(3): 146-147.
[9]张腾飞,顾亦然,郭前岗,“嵌入式系统及应用”课程教学改革探索与应用[J].中国电力教育,2012(28): 53-55.
[10]丁关荣,陈壹华.基于设计型学习的计算机网络实验教学研究[J].计算机教育,2011(1): 47-51.
(编辑:宋文婷)