操作系统课程实验平台设计与实践

苏铅坤1,颜庆茁2,郭晓曦1

1 (集美大学计算机工程学院 福建厦门 361021)

2 (集美大学诚毅学院 福建厦门 361021)

摘 要 操作系统是计算机相关专业最重要课程之一,实验课是操作系统教学的重要环节。针对现有不友好的实验平台,学生上实验课摸鱼现象普遍,代码抄袭严重,实验结果反馈不及时问题,本文提出构建一个友好的本地服务器作为操作系统实验平台,并通过统计学生服务器在线时长进行更有效的出勤考核,通过记录学生文件的变化来甄别抄袭行为,使用程序辅助评分及时给学生反馈。实践表明,综合使用这些方法可以很好地敦促学生认真完成实验,进而提升教学效果。

关键词 操作系统;实验平台;有效出勤;抄袭检测

中图法分类号 TP30

Design and practice of experimental environment for operating system course

Qiankun Su1,Qingzhuo Yan2,Xiaoxi Guo1

1 (Jimei University,Xiamen Fujian, 361021)

2 (Chengyi College, Jimei University, Xiamen Fujian, 361021)

Abstract Operating system course is one of the most important courses for computer science-related majors. Experimental course is an important part of operating system teaching. However, existing teaching methods have the following shortages: i) experimental environments are not friendly to students; ii) students slack off at carrying out experiments; iii) copying computer codes is a serious problem; iv) teachers do not provide timely feedback to students. To address these issues, this paper proposes to build a friendly local server as experiment platform, effectively evaluate student attendance through analyzing the duration of server usage, detect code plagiarism through analyzing the changes in file size, rapidly provide feedbacks to students with the assistance of programs. Our teaching practices show the validity of these methods. It urges students to complete the experiment carefully, and improve the teaching quality.

Keywords Operating system; Experimental platform; Valid attendance; Plagiarism detection

前言

2017年2月以来,教育部积极推进新工科建设,全力探索适合国情的工程教育。工程教育的基本定位是培养学生解决复杂工程问题的能力。操作系统管理计算机所有硬件,向用户提供一个扩展的机器,是计算机相关专业的核心专业课。掌握好操作系统是培养解决复杂工程问题能力不可或缺的部分。然而,操作系统知识点多,概念和算法又比较抽象,学生在学习过程中常常感到枯燥和难懂。

做中学(Learning by Doing)[1-2]是20世纪美国著名实用主义教育家J·杜威关于教学的核心原则。“知”和“行”是紧密相连的,“做”是人的生物本能活动,从“做”的过程中得到的知识更加巩固。通过课堂讲授的知识留存率(retention rates)只有5%,通过做得到的知识,留存率可以达到75%,若是能将学到的知识立即付诸实践,知识留存率可以高达90%[3]。可见,操作系统实验课或课程实践环节对掌握操作系统知识有着至关重要的作用。

实验平台是开展操作系统实践教学的前提。本文分析了现有方案存在的不足,提出搭建一个友好的本地服务器作为操作系统实验平台。在此基础上,针对上实验课摸鱼现象普遍,代码抄袭严重,实验结果反馈不及时问题,采用通过统计学生在线时长进行更客观的出勤考核,通过记录学生文件的变化来甄别抄袭行为,使用程序辅助评分及时向学生反馈实验完成情况。实践表明,这些方法的使用不仅可以动态了解学生实验的进展,而且能够更好地敦促学生认真完成实验,进而提升教学效果。

1 实验平台设计

操作系统实验通常是在Unix-Like操作系统(如Ubuntu)上完成,为学生搭建一个便于使用的实验平台是开展操作系统实践教学的前提。

1.1 现有方案存在不足

最常见的是学生使用实验室计算机完成实验,然而,实验课时间有限,下课之后学生便不能访问实验平台。除此之外,实验室计算机通常安装了硬盘保护卡,没能为学生保存实验数据,即便保护卡只恢复硬盘部分分区,但实验室计算机用于不同实验,被多个学生共享,并不能保证数据被完好保存到下一次课,这不利于渐进式实验的开展。当然,可以要求学生自行保存数据,但需要学生付出额外的时间。

鉴于现在学生几乎是人手一台笔记本,可以要求学生自带笔记本来上课。在他们计算机上搭建实验环境,主要有3种方式,然而,这3种方式均存在不足。(1)直接在机器上安装双操作系统。基于这么一个事实,除实验以外的其他操作,学生更习惯使用Windows。学生完成实验后,切回Windows,显有再切换到Ubuntu加强练习的;(2)在Windows上安装虚拟机(如VMware),再在虚拟机上安装Ubuntu。但常常因为学生计算机性能有限,导致在虚拟机使用操作系统不流畅,影响体验;(3)在Windows上安装Cygwin。Cygwin只是提供一个类Linux的环境,并不完整,一些行为可能会与在原生Linux不同。除此之外,无法在Cygwin上开展依赖于Linux内核的实验。文献[4]提出让学生先在Cygwin进行实验,再连入SUSE Linux主服务器进行验证操作。事实上,学生可以直接在服务器上开展实验。

基于上述的不足,已有一些研究[5-6]提出利用公有云搭建操作系统实验平台,学生通过SSH或者Telnet协议远程登录服务器完成实验。相对于使用实验室计算机和学生自带计算机,远程操作系统实验平台具有下列优势:(1)学生可以随时随地使用实验平台;(2)学生可以更直观感受到操作系统的魅力,如多用户、多任务,系统和文件的权限管理;(3)学生通过终端在远程服务器完成实验,迫使他们熟练使用Vim、GCC等工具,有利于学生将来从事开发相关工作。

然而,根据实际的教学实践,基础版的公有云(举例,腾讯云,2核CPU、2GB RAM、40GB SSD、4Mbps带宽),远不能支持60位同学并发访问服务器进行操作系统实验,性能的瓶颈在于网络带宽。可以加大带宽直至满足所需,然而,费用将大幅增加。基于此,本文提出使用普通PC机在本地自行搭建公共操作系统实验平台,学生通过局域网访问实验平台,彻底解决网络带宽不足问题。

1.2 本地服务器创建及配置

取一台普通PC机或者普通服务器,安装Ubuntu Server LTS系统。为服务器配置静态IP地址、网关、DNS服务器。固定公网IP地址,通常需要向学校网络中心申请。对服务器进行如下基本配置:

(1)使用命令“timedatectl set-timezone Asia/Shanghai”设置时区;

(2)将域名解析到服务器IP地址[1] ,域名可自主购买,也可向学校申请子域名;

(3)在文件/etc/ssh/sshd_config设置ClientAliveIntervalClientAliveCountMax让SSH保持连接;

(4)用命令apt-get install安装必要的软件包,如C语言库libc6-dev,GCC编译器。

自行搭建的本地操作系统服务器,学生并发使用服务器不卡顿[2] ,在实际教学实践中,2个班60来名学生并发访问服务器做实验,毫无压力。除此之外,这种方法也更安全(外网需要本校VPN方能访问),从长期看,费用也更低。

1.2.1 批量创建用户

为每一位学生创建用户并设置初始密码。为了便于后续对学生的管理,可以先为不同班级创建组,使用命令addgroup创建,如addgroup -gid 201112 class12

批量创建用户使用命令newusers,如newusers < users-info.txtusers-info.txt文件中每一行表示一名学生的信息,格式为Username:Password:User ID:Group ID:User Info:Home Directory:Default Shell。用户名可以用学号前面加上字母前缀来表示(如u202021121027,Linux不支持纯数字作为用户名),组ID为上述创建班级的组ID,用户信息User Info格式建议为班级-学号-姓名(便于后续程序自动评分,生成成绩列表)。

使用命令chpasswd为用户设置初始化密码,如chpasswd < users-passwd.txtusers-passwd.txt文件中每一行表示一名学生的初始密码,格式为username:password。学生登录系统后,可以使用命令passwd修改密码。

1.2.2 Vim配置

学生远程登录服务器,使用文本编辑器Vim编写代码。默认的Vim缺少最基本的辅助功能,如代码高亮、自动缩进、自动补全,这对于用惯了集成开发环境的学生来说,极容易产生排斥心理。解决该问题,从两方面入手:(1)从编码效率角度(编码过程中,手不需要离开键盘,所有鼠标操作都可以在键盘完成),让学生感受到Vim的魅力;(2)对Vim进一步配置,至少让Vim与主流IDE相媲美。第一轮上操作系统实验课,没有对Vim进行额外配置,有不少学生直接拒绝在服务器上编写代码,而是在本地编写好代码,再上传到服务器。第二轮上操作系统实验课,事先配置好Vim,学生不再排斥,没有出现拒绝使用Vim编写代码的情况。

表1 Vim插件推荐

插件名称功能
YouCompleteMe代码自动补全
NERD Tree树状文件系统管理器
Tagbar显示当前文件的标签和代码结构
folding代码折叠与展开
TagList + Cscope变量和调用的代码跳转
AsyncRun在Vim窗口编译代码及调试

具体配置方法,在经典Vim配置方案vimrc[3] 基础上进行完善(如自动保存、显示行号),并添加一些插件,推荐添加的插件如表1所示。

2 有效考勤

使用现有考勤方法,只能确保学生出席,并不能真实反映出学生是否认真完成实验内容。学生前来上课并且认真完成实验,本文称为有效考勤。

尽管实验室电脑通常有安装多媒体教学网络平台(如极域电子教室),教师可以通过网络平台查看学生计算机的桌面。然而,学生若自带笔记本,通过网络平台便查看不了学生的桌面。更甚者,学生完全可以打开实验室计算机的代码编辑器,玩自己的手机。

幸运的是,学生在服务器完成操作系统实验会在服务器留下痕迹,分析操作系统相关日志文件,可以进行有效考勤,敦促学生切实把时间花在实验上。

2.1 统计服务器使用时长

操作系统日志文件wtmp(在/var/log/文件夹下面)记录了用户登入与登出系统的历史信息,用命令last可以读取wtmp文件的信息[4] ,并以列表的形式输出(将输出结果重定向到某个文件,便于后续统计分析)。举例,如下所示,用户u202021121098从08:03到9:27一直在使用系统。

u202021121098 pts/0 172.28.167.84 Tue May 31 08:03:40 2022 - Tue May 31 09:27:58 2022 (01:24)

有了这些信息,便可以统计每个学生在实验课上使用服务器的时间,考虑到用户可能会一次登录多个终端,计算在线时长应为多个终端的并集,如图1所示,该学生在实验课上使用了3个终端登录,那么该学生在线时长为img

统计的结果可以用于辅助考勤,若学生在线时长太短,判定为无效出席。时长为0,通常是物理缺勤。

 

img

图1 统计学生在线时长示意图

 

2.2 一些防作弊方法

上述的统计方法,得出的时长并不能保证真实客观,因为可能存在多种作弊方法。

(1) 登录服务器之后不进行任何操作

解决该问题,可以在服务器设置自动登出时长(如8分钟[5]),学生如果超过8分钟没有使用服务器,系统就自动登出。具体做法是在配置文件/etc/profile末尾添加如下内容:

# log users out  after a period of inactivity automatically  
TMOUT=480   
# other users  cannot change the value      
readonly  TMOUT    export TMOUT  

(2) 在客户端设置保持连接

通过设置SSH客户端(如SecureCRT)保持与服务器的连接不断开,达到一直在线的目的。解决方法:统计学生每次使用系统的间隔,如果绝大多数的间隔恰好是设置的自动登出时长,那么可以判定为该种情况。

(3)运行无关程序,让系统一直处于在线

学生登录服务器,运行诸如命令top,vim,尽管之后没有进行任何操作,系统也不会自动登出。解决方法:监测学生文件大小的变化(要求学生在指定的文件上编程),如果一直没变化,可视为这种情况,详见本文第三节。

2.3 累计在线时长案例

在教学实践过程中,会告知学生会使用服务器累计在线时长作为考勤参考,几次实验下来,学生使用服务器时长有了显著得升。图2给出了最近一次实验(2022年5月30日下午5-6节,实验内容为用信号量解决读者-写者问题)学生使用服务器累计时长散点图,累计使用服务器时长的平均值为83分钟,中位数为98分钟。有64.4%的学生在线时长大于90分钟(一次实验课包含两小节,每小节45分钟,中间休息5分钟,考虑到有学生会在上课前和下课后使用服务器,因此统计时间从上课前5分钟开始到下课后5分钟结束)。

在实验过程中,可以随时生成学生在线时长统计信息,动态掌握学生的情况。对于在线时长为0的学生(有些是物理缺席,有些是无效出勤),可以因材施教,提供额外的帮助。

img

图2 学生使用服务器时长散点图

3 抄袭行为检测

抄袭行为,不仅达不到掌握知识的目的,而且还破坏公平,导致劣币驱逐良币。让学生为抄袭付出代价是遏制抄袭的有效方法(采用做法是,抄袭一旦发现,倒扣本次实验的分数),首要步骤是检测出抄袭行为。

3.1 资料分发

因实验课时间有限,可以为学生准备好模板文件,将一些非核心代码提供给学生(如头部文件,打印统计信息),这样,学生可以在有限的时间内专注在核心代码的实现上。这样做,还带来了另一个好处,要求学生在指定文件上编写代码,并编译成指定名称的可执行文件,为后续程序辅助判分、代码查重提供了便利。举例,以下是给学生准备的某个实验的模板文件,compile_and_run.sh脚本实现了代码编译成指定文件并运行:

os_exp/
├── exp2_sync_pv
│   ├── compile_and_run.sh
│   ├── process_synchronization_pv.c
│   └── semaphore.h

编写一个脚本,使用命令cp将文件拷贝给所有学生,并用命令chown ower:group改变文件的拥有者。

3.2 抄袭行为检测

学生在指定文件上编写代码,正常情况下,文件大小会缓慢增加。如果代码文件大小在很短的时间内暴增,并且随后文件大小没什么变化,该学生很有可能存在抄袭行为。

可以通过监测文件变化来识别出这种行为,如3.1所述,学生在指定的文件进行编程,写一个脚本,每隔一秒钟记录每位学生文件的大小,实验结束后,再对该文件进行分析。首先,需要让Vim具有自动保存功能,在Vim配置文件添加如下内容:

autocmd TextChanged,TextChangedI *
    \ if &buftype ==# '' || &buftype == 'acwrite' |
    \     silent write |
    \ endif

接着,读取/etc/passwd文件,获取学生的用户名(可以用组ID筛选出目标班级),构造出该学生的文件路径(如/home/username/os_exp/exp2_sync_pv/semaphore.h),每隔一秒钟记录该文件的大小,为了避免文件过于庞大,文件大小如果没有变化则不记录。

img (1) 物理缺席或无效出勤img (2) 抄袭
img (3) 认真完成实验(课前没做)img (4) 认真完成实验(课前做了)

图3 文件大小随时间变化4种典型情况

分析文件,对于每一位学生,统计文件有多少次发生改变(因为是每秒钟记录一次,对应于多少秒),并累计每次文件变化的大小(考虑到删除的情况,取绝对值),后者除以前者,用得到的值(类似于速度)来辅助判断是否抄袭。图3展示了文件大小随时间变化的4种典型情况(为了保护隐私,图例加了星号,实际图例是“班级-学号-姓名”)。

(1)缺席或者无效出勤。给学生模板文件的大小恰好是769字节,该学生在实验课期间没有对文件进行任何改动,如图3-(1)所示。使用这种方法解决了上述使用学生服务器在线时长作为有效考勤带来的缺陷,学生倘若运行无关程序(如top、vim),伪装成一直在线,文件大小演变图可以很好地捕获这一点。

(2)抄袭。如图3-(2)所示,该学生在14:55分(实验课14:00开始)文件增加了12个字节,接下来,文件大小没有任何变化直到15:23分(实验课15:35结束),文件大小一下子从781个字节暴增至1769字,在1秒中增加了988字节,显然属于异常行为(事先要求学生在服务器使用Vim在指定文件编写代码,因此,排除学生在本地写代码,调试完后再拷贝到服务器的可能)。

(3)认真完成实验。如图3-(3)所示,从14:09到14:47文件大小稳步频繁增加,15:13后不再改动。该图某种程度上展示了优秀学生做完该实验所需的时间,为实验内容难易程度提供了参考。

(4)认真完成实验。不同于情况(3),如图3-(4)所示,该同学的文件初始大小是2122字节,说明该同学在上实验课之前完成了部分内容(该实验内容提前4天发布)。因此,查看学生文件大小变化图,可以了解学生预习情况。

4 程序辅助评分

学生在指定的文件进行编程,编译成指定文件名的可执行文件,这样可以写一个脚本,批量运行学生的可执行文件,将程序输出结果与正确答案对比,达到程序自动评分,如果结果不正确,可以给学生一些提示信息。这样做,至少可以带来如下好处:(1)及时反馈。实验过程中,可以快速产生临时的评分,发给学生,学生可以依据错误提示,快速迭代自己的代码,达到快速掌握知识的目的;(2)减少教师的工作量。

值得注意的是,使用程序评分要求更细致地设计实验内容,评分程序也要考虑到学生完成实验的多种实现方式,否则程序判分可能不准确。以一次实验为例,用信号量实现进程同步功能,父子进程都输出进程ID和父进程ID(printf("%d %d\n", getpid(), getppid());),要求子进程先运行。评分程序通过子进程输出的父进程ID跟父进程输出的进程ID是否相等作为评分的指标,然而,从学生完成实验来看,有些同学尽管程序判定了满分,但并没有按要求完成实验,如使用sleep或者wait函数让父进程进入睡眠状态。在这样的情况下,程序评分只能作为辅助,最终成绩还应人工进行审阅。

5 总结

本文针对操作系统实验课程存在的不足,提出构建一个友好的本地服务器作为操作系统实验平台,并通过统计学生服务器在线时长进行更有效的出勤考核,通过记录学生文件的变化来甄别抄袭行为,使用程序辅助评分及时给学生反馈。实践表明,这些方法的使用可以更好地短促学生认真完成实验,进而提升教学效果。

参 考 文 献

[1] Peter Thompson. Learning by Doing. Handbook of the Economics of Innovation[M].2010:429-476.

[2] Ludovic Bot, Pol-Bernard Gossiaux, Carl-Philippe Rauch and Safouana Tabiou. ‘Learning by doing’: a teaching method for active learning in scientific graduate education, European Journal of Engineering Education. 2015(30:1), 105-119.

[3] Letrud, Kåre. A rebuttal of NTL Institute's learning pyramid, Education. 2012 (133): 117–124.

[4] 应毅,任凯.使用Cygwin和SUSE Linux构建类Unix的实验教学环境[J].现代教育技术,2012,22(02):121-124.

[5] 李艳平.基于云计算平台的《Linux操作系统》实验教学模式的探索[J].计算机光盘软件与应用,2014,17(16):207-208+211.

[6] 朱小军.基于公有云的操作系统实验平台建设方案[J].计算机教育,2020(04):159-162.

 


[1] 使用的域名是os.qiankun.su(对于外网,需要本校VPN方能访问)

[2] 实践教学使用的PC机为Dell成铭3991 E(i5-10500,8G RAM,128GB SSD),费用为5280(包含了显示器的价格),将机器放在办公室,无需放到专用机房。

[3] The ultimate Vim configuration (vimrc): https://github.com/amix/vimrc

[4] 加上参数-Fw(-F显示完整的登入与登出的日期与时间,-w显示完整用户名和域名),显示更完整的信息,便于统计。

[5] 曾将超时自动登出时长设为5分钟,学生需要频繁重新登入(学生边查资料边写代码)。