(1 广东东软学院,广东 佛山 528200)
摘要:操作系统作为计算机系统结构中的管理者,是程序顺利运行的平台和基础。为了保证程序能够顺利运行,操作系统按照需求设置了若干管理功能。其中作业管理是操作系统中的核心概念之一,涉及到进程的创建、调度、同步和通信等多个方面。本文针对现有操作系统教材中对于作业管理部分知识点的讲解现状进行讨论,提出教材是否还需保留本概念的观点,并结合实例、问题驱动和互动教学的方法,增强学生的兴趣和理解程度,以此提高教学效果。
关键词:操作系统;作业管理;实例;问题驱动;互动教学
中图分类号:G642文献标识码:A
操作系统作为计算机系统结构中负责组织、管理软件和硬件的基础平台,起到了承上启下的双媒介作用,这也奠定了其在整个计算机系统中的关键地位,因此在国内外的高等院校或计算机学会都将其列为计算机学科领域的重要基础课程。本课程正是因为包含的知识点很多,涉及到计算机体系的方方面面不好理解,并且应用性很强,需要通过理论与实践相结合的方式进行,因此在教授的过程中会存在着一定难度,造成学生不易听懂的现象。
大多数学生仅仅依据教材所提出的概念进行背诵,并没有做到有效理解相关知识点达到实际的教学目的,因此如何选择一本合适的教材,提高教学的效果,是操作系统教学面临的一个重要问题。
目前市面上有关操作系统的教材种类多样[1,2,3],但大多数都是围绕操作系统的四大核心管理内容,缺少对作业管理介绍。
首先,用户如果想要实现什么功能或者需求的话需要将内容通过外部设备输入到计算机中,计算机便利用操作系统的用户接口和作业管理完成相应的操作和处理,以此完成人机交互。在该过程中,主要使用的两个用户接口分别为操作系统命令(包括键盘命令和作业控制语言等)以及系统调用。通过使学生熟练掌握具体操作系统外部特性即键盘命令和系统调用,初步了解操作系统的各部分管理技术,从而逐步引导学生深入并掌握操作系统内在的本质。
其次,对于作业的概念,用户主要就是借助计算机实现某个作业任务,因此作业管理也被称为任务管理。例如进行上机操作编程练习,在该过程中用户输入数据并运行所编辑的程序,产生源程序文件,经编译程序和连接(Link),最后产生能执行的目标代码文件。而对于计算机系统来说,作业的概念则更加广泛,在批处理操作系统当中应用更为明显。因此《操作系统》这门课程通过理论性讲解,便于学生更好地掌握本课程相关最新前沿技术,为今后理解系统软件原理、编写软件打好基础,同时也能培养学生理论与实际相结合的良好习惯。
最后,当作业被调入内存后将划分成为进程,进程在由若干线程组成,进程是作业的执行态,一个作业可以对应多个进程。操作系统为作业产生JCB,为进程产生PCB,为线程产生TCB。在教学中,首先应当向学生介绍作业管理的基本概念,包括作业控制块(Job Control Block, JCB)、作业队列、作业调度器等内容。通过这些基本概念的介绍,学生能够建立起对作业管理的整体框架概念。如果将作业部分的知识删除,学生将跨越作业这一概念直接进入进程的学习,各部分知识之间缺乏很强的连续性和联系性,让学生感觉是割裂的概念,很难将其联系起来从而融会贯通。
作业状态转换描述了作业在系统中不同状态之间的切换过程,从作业产生到作业消失的整个过程中,作业的状态跟随系统的运作而发生变化。
但目前在大多数教材中对于作业的状态介绍都不是很详细,且有关转换问题的观点基本相似,通常包括作业的准备状态、就绪状态、运行状态和完成状态等[1,2,3]。各个状态之间的转换如图所示:
图1作业状态转换图
正如上图所示,目前大多数教材认为作业的完成状态即为作业运行结束即可,所占资源还并不要求完全被系统回收,在这种状态下系统会完成打印输出、回收资源等善后工作。但是这种划分不够精确清楚,在使用作业终止程序用来回收作业调度时所分配的资源时,作业的输出结果会在输出井中等待着执行,并且把相关作业的状态改成完成态,但这个时候作业依然存在,只有当所有作业的运行结果都通过输出设备输出之后,作业才会通过撤销函数释放作业控制块,撤销所有与该作业有关的进程。
图2改进后的作业状态及其转换图
改进后的作业状态及其转换如图2所示。针对于上图中涉及到的每种作业状态及其转化可作如下分析:
(1)提交状态:当用户正在通过输入设备向计算机提交作业时,作业处于提交状态。开始时作业在慢速输入设备上等待输入,操作员把用户提交的作业通过相应的读入器或脱机输入或调用Spooling(假脱机)系统输入进程,把作业输入到直接存取的外存输入井中。作业在外存输入井中,完整的作业描述信息(JCB)还未产生。
(2)后备状态:当用户完成作业的提交,此时作业在称为输入井的外存区域中(预输入),当作业被提交后会暂时存储在输入井的外存中,此时系统会为该作业先创建一个没有内容的JCB,再在存储器中获得相应存储空间,然后将作业的完整描述信息填到JCB并在后备队列中插入,如果该作业通过调度算法获得CPU之后改变当前运行状态,由原来的提交状态转换成后备状态。由于建立了JCB,从而使得该作业可被作业调度程序感知。在此状态下的作业才有资格进入到内存中,但何时进入内存还需要看是否有这样的时机。
(3)运行状态:一个作业被作业调度程序选中,且分配了必要的资源,如果一个在后备队列中的作业符合作业调度原则并获得运行所需全部资源,则可以将其转化成进程,该作业就处于运行状态。此时作业的输出结果可能在称为输出井的外存区域中等待向输出设备输出(缓输出)。
作业调度程序来完成这一任务,它首先把作业队列队首的作业调入内存此时输入井中的队列开始发生变化,如果没有特殊的变化,处于作业队列第二个位置上的作业排列到作业队列的队首,原来作业队列中各个作业的位置也会一次发生改变。如果有特殊的原因,则可能操作系统会对原有作业队列重新排队,从而产生一个新的作业队列。当该作业被调入内存为其分配运行所需资源后,会根据作业所包含的相关信息生成新的进程,然后利用进程调度算法选择合适的进程分配CPU,此时只需要考虑进程的相关信息即可,系统便主动放弃对作业的控制。
当一个作业被调入内存时并不意味着其他作业就一定要在输入井中等待,有可能操作系统根据各种原因又立即调度原来队列中的第二个甚至第三个作业进入内存。这是因为微机的内存空间很大,内存空间可以容纳不同程序的多个作业同时进入内存,这就能够实现多个程序并发在内存中运行的目的。
已经被调入内存的作业其工作状态称为“执行状态”,一旦作业进入内存操作系统立即为它产生一个“老祖宗进程”。老祖宗进程会产生自己的子进程,子进程又会产生自己的子进程。于是很快就在内存中产生了不少的进程,这些进程又会随着软件的运行而改变自己的状态,从而形成各种状态的进程。通常一个作业的进程不是无限的,只会是有限数量的进程。
处于运行状态的作业在系统中可以从事各种活动,该状态下的作业并不意味着一定在CPU上运行,是否运行可能与进程控制有关。它可能被进程调度程序选中而在处理机上执行,或可能因为输入输出请求不能满足而被阻塞,还可能在等待处理机调度。总之它已经获得运行需要的所有资源。
所以,站在用户的角度会直观的感觉作业已经开始运行了。但作业的运行活动并不是从一而终可能会因为某些突发事件而发生一些情况,为了便于管理,可以根据其进程活动情况从就绪状态,封锁状态和执行状态进行分析。处在就绪状态的新进程排在就绪队列中,等待着CPU分配,系统会按照进程调度算法分配CPU给合适的进程,随即由就绪状态转化成执行状态。如果该进程在运行的过程中时间片被使用完或恰好有个优先级更高的进程优先抢占了CPU,则原进程回退到就绪状态,等待着再次执行。如果输入输出提出请求而导致进程被迫中止,便由运行状态转变成封锁状态。系统处于封锁状态的进程不能直接被调用,必须等待封锁原因解除,进程转入就绪状态等待处理机的调度。
提交和后备为作业调度阶段,操作系统并没有实施对CPU的分配,当作业处于运行状态时它包括了进程的3个状态,而其中只有处于进程执行态时才获得CPU。
(4)完成状态: 系统会通过调用作业终止程序将那些之前分配给执行完毕作业的资源进行回收,相应的输出结果在输出井中等待输出,并将其状态改为完成状态。
当某一个已经完成全部任务的作业被作业终止程序监测到时,便会获得对该作业的执行权力并完善后续事宜,比如作业终止程序会把重要的信息进行输出,然后回收该作业占用的全部资源。当作业的全部结果通过输出井在输出设备中显示后会直接调用作业撤销程序,成功撤销与作业有关的全部进程,作业调度程序会选择合适的进程重新装入到内存中。
如果系统使用了spooling技术,作业会在完成作业队列中存储,并利用spooling技术将输出井中的运行结果输出。
作业状态转换的总体描述是:处于后备状态的作业输入已经完成,JCB也已经创建完成,并把作业放入后备队列中。经过作业调度程序的调度,后备队列中的某个或某些作业就具备了运行资格,这时的作业称之为运行状态。运行状态的作业只是获得了竞争CPU的资格,不能马上执行,是否能够占有CPU由进程调度解决。分配给该作业的资源会在作业运行结束之后由作业终止程序进行回收,并且将运行状态改为完成。当所有的结果被输出显示后,会通过调用作业撤销程序来释放其所占用的资源,作业控制块中的信息将被清空。
在教学过程中,教师可以结合实例教学和互动教学,通过图表或实际案例演示的方式,详细讲解作业在不同状态之间的转换条件和过程,帮助学生理解作业在系统中的生命周期管理,并通过让学生进行实验、讨论、问答等方式,加深作业管理在实际系统中的应用和意义的理解。
4.1基于问题驱动的作业管理教学方法
(1)提出问题
在讲解作业和进程关系时,教师可以提出一系列问题[4],如“进程是如何创建的且需要哪些步骤?”,“如何使用fork()函数创建一个子进程?”等,来引导学生理解和掌握作业在该过程中起到的作用。在讲解调度原则时,教师可以提出一系列问题,如“操作系统是如何利用调度算法完成调度的?”,“调度有哪些算法?”等,来引导学生理解和掌握有关作业调度、进程调度的区别和联系。在讲解进程的同步时,教师可以提出一系列问题,如“进程是如何同步的?”,“进程同步有哪些方法?”,“如何使用sem_init()和sem_wait()函数进行进程同步?”等,来引导学生理解和掌握进程的同步。在讲解进程的通信时,教师可以提出一系列问题,如“进程是如何通信的?”,“进程通信有哪些方式?”,“如何使用pipe()函数进行进程通信?”等,来引导学生理解和掌握进程的通信。
(2)解决问题
针对提出的问题,教师可以结合实例进行讲解,如使用fork()函数创建子进程的实例,使用schedule()函数进行进程调度的实例,使用sem_init()和sem_wait()函数进行进程同步的实例,使用pipe()函数进行进程通信的实例等,帮助学生理解和掌握作业管理的知识,并让学生自己编写程序进行进程创建、调度、同步和通信的实验,然后与同学进行讨论,分享自己的经验和困惑,教师再进行点评和解答。
4.2教学效果评估与数据分析
为了验证所提出的问题驱动教学方法的有效性,对教学效果进行了评估和数据分析[5]。通过对学生的作业、实验报告、考试成绩等数据进行分析,发现在使用问题驱动的教学方法后,学生的作业完成情况、实验报告质量和考试成绩都有显著提高,说明该方法能够有效提高学生的学习效果。
《操作系统》是高校计算机类专业的必修课程,由于其理论性很强,牵涉的相关知识很多,学习时有较大的难度。本文围绕操作系统教学中作业管理的讲述方法展开讨论,从作业管理的基本概念入手,分析若干教材可能存在的不足之处以及为什么需要专门讲解这一知识点,并希望通过系统化的教学讲解,帮助学生建立起对作业管理的整体认识,培养他们的系统思维和问题解决能力。希望本文能够为操作系统教学提供一些有益的参考和启发,促进教学质量的提升。
参考文献:
[1]Lubomir F.Bic AlanC.Shaw著,梁洪亮等译.操作系统原理[M].清华大学出版社,2005年10月
[2]吴企渊编著.计算机操作系统 [M].清华大学出版社,2006年1月
[3]曾平,郑鹏,金晶编著.操作系统教程 [M].清华大学出版社,2005年5月
[4]韩雨涝.工程教育认证背景下《Linux操作系统原理及实训》课程教学改革实践研究[J].电脑知识与技术,2023,19(08):128-130.
[5]邵明珠,吕书波,赵开新,等.应用型本科精品在线开放课程建设探索——以“操作系统原理与实践”课程为例[J].无线互联科
技,2021,18(20):159-160.
作者简介:张梦媛(1996—),女,陕西省宝鸡市人,助教,硕士研究生,主要研究方向为情景构建、神经网络。