Python在操作系统算法课程教学中的应用探析
2023-04-06戴莉萍
戴莉萍
关键词:Python语言;操作系统;算法实现;教学改革
操作系统(Operating System) 是计算机软件体系的基础,操作系统课程是计算机专业教学过程中一门基础且较为重要的课程,同时设置了理论教学和实验教学。理论课上核心算法原理的讲授有助于学生们构建扎实的专业知识体系;实验课上重要算法的实现有助于提高学生们的程序设计水平及加深对理论知识的进一步理解[1-3]。
操作系统课程理论教学一直存在比较大的挑战,例如众多的知识点如何在有限的课堂时间内组织完成;复杂算法需要通过怎样合适高效的描述方式更好地传递给学生;课堂教学效果的实时反馈应怎样利用优秀的教学工具来收集与分析等。因此针对操作系统课程理论教学的改革不断在被探讨、应用与总结中[4-6]。
Python语言作为一种通用的程序设计语言,语法非常简单,代码表述清晰易懂,可以与其他课程的教学案例结合使用[7-8]。本文结合Python技术,对操作系统中算法课程教学的讲解方式进行一定的探索与改革,以便提高学生的兴趣,加快学生理解进度,达到比较好的课堂教学效果。
1 OS 算法课程教学中的常用描述方式
操作系统是重要的系统软件,管理着计算机系统的软件和硬件资源,对应的课程内容较抽象、知识点较多,概念原理较难理解;例如课程中的各类算法是非常丰富的,有进程调度算法、磁盘调度算法、页面置换算法、连续内存分配算法等[9-10]。
课本中对于各类算法的描述也是形式多样的:
1) 文字语言描述——例如在动态分区分配算法中的描述:“为了加快寻找,最佳适应算法要求将所有的空闲分区按其容量从小到大的顺序,排成一个空闲分区链,这样,第一次找到的、能满足要求的空闲分区,必然是最佳的。”
2) 伪码描述——例如整型信号量的应用:
{Wait(mutex); 临界区; Signal(mutex): 剩余区; }
3) 表格表示——例如表1所示的磁盘调度算法中的SSTF(最短寻道时间优先)调度算法,清晰表述了各个磁道号被处理的先后次序、每次磁道移动的数量以及最终平均寻道长度。
课堂授课的PPT也基本按照这些方式组织教学内容,并在此基础上进行相应的改进,例如使用动画演示描述算法过程、以例题方式加以说明其原理、采用代码模拟实现算法执行过程等。Python编程语言由于其简洁性,能够较好地与上述方式结合使用,可以省去安装虚拟机和Linux系统及配置工作,进一步改善课堂教学效果。
2 Python 在OS 算法教学中的具体应用
算法的代码实现通常需要展示两部分内容:代码本身的组织和执行效果的分析;编程语言Python的应用是对各类算法的讲解起到一个良好的辅助作用,使得理论知识的脉络更为清晰,帮助学生更好地理解。
1) 算法的文字描述变成了代码的关键注释——在PPT上,单纯的大段文字表示有时会显得有些单调,特别是描述理论知识时,容易让人觉得枯燥。利用Python程序,可以同时用代码和文字描述算法,将枯燥的文字用简短的符号语言表示。此时文字就成了代码的注释语句,将整段的文字分解成了以行为单位的表示;用人的脑袋去模拟计算机的执行,边阅读边理解边运行,可以较为有效地集中学生们的注意力。例如教学课件PPT中,动态分区中最佳适应算法表示下面代码所示,执行结果如图2所示,两者可放置在同一张PPT上。
2) 无法运行的伪码表示变成了可实际运行的代码表示。伪码和代码都可以较好地表示算法的基本思想,伪码是非严格的编程语言与自然文字的组合,在有限的空间上展示更具优势;但它没有运行结果可看。如果伪码和代码在描述同一问题上的行数和理解难度相差不大的情况下,可以考虑使用代码,以增加运行结果的直观性。通过对执行结果的仔细观察和深入分析,可以较为有效地提高学生对相关知识点的理解能力。例如下面的代码和图3描述了整型信号量的基本使用。
3) 表格的静态表示变成以代码为基础的动态表示。表格能够体现的过程性有时是比较有限的,例如表1中左列下一个磁道号的顺序是通过相关运算及比较才能确定的,而这些步骤在表中是省略的。利用程序代码表示可以将这些步骤很好地重现,从而有利于该算法的讲解,节省了相应的阅读和思考时间,是对表格结果的进一步说明,例如以下代码和图4。
4) 代码执行时各数据的中间结果的逐一表示成为图形过程化表示的辅助。例如要理解图1的FIFO 置换算法,关键要分析物理块中各个页进入内存的顺序。Python程序中非常容易设置该顺序,下面的代码中使用的数据类型都是简单类型,通过字符串的左右顺序来表示各页的FIFO顺序。粗看图形不理解时,可以转向以下代码表示及图5的执行效果,两者可以相互促进,图形表示是相关应用题的解题模板;代码表示是相关实验的范例。这样一来,学生在课堂中能较快掌握解题方式以及代码实现;而且在时间有宽裕的情况下,可以适当做扩展,例如计算缺页中断次数和页面置换次数,源代码应该在哪里增加累加语句。
除应用在算法描述外,程序代码还可以应用在基本概念的描述中,例如进程的异步性,可以通过Python的Multiprocessing来进行简单的子进程创建,相同的代码可得到不同的执行结果。通过结果对比,就能理解进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进。
3 Python 在OS 算法教學中的探析
将Python实例应用在OS算法讲解中,一定程度上体现了授课方式的多样性与相互融合性,较好地拓展了学生的思维能力,感受到了各类知识的综合应用。分析这些Python实例,它们具有一些共同特点。
1) 简洁短小:课堂教学时间有限,PPT展示篇幅有限,因此要求代码表达简单、缩进规范、行数较短、数据量较小。
2) 起到一定的辅助作用:操作系统课程中各类算法原理是重点,Python中的语法、数据结构、方法等并不是重点;而且单纯用代码方式理解算法往往难度比较大,效果反而不好。因此在此处,Python程序作为文字、图形、表格、伪码等的辅助工具,以达到更好的教学效果。
3) 以题论题:分析以上Python程序,发现变量都是在程序中静态赋值,程序灵活性较为缺乏,这是为了减少代码行数,降低程序的复杂程度。
4) 为实验的开展做准备:每个算法的实现代码都有一定的扩展性,而且可以为同类算法提供一定的解题思路,例如在Best Fit算法代码的基础上,将排好序的列表再反序一下,就可以直接适用于最坏适应算法。
通过教学实践发现,Python语言的应用使得操作系统的算法讲解更加直观、更加生动、更加易懂。同时也注意到,在授课过程中不是所有的算法都需要代码表示,过多的代码符号表示往往增加了PPT的页数,消耗了学生的阅读耐心,降低了教学效果。下一步将研究线上/线下混合教学模式下代码的应用与组织方式。