前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇编译原理论文范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
论文摘要:医院现代人力资源管理与传统人事管理有着本质的区别,前者强调的是人的潜能的不断开发和利用,强调实现组织价值和员工个人价值的双赢目标;而后者强调的只是组织目标的实现。现阶段我国国有公立医院的人事管理很大程度上影响了医院的发展和整个医疗卫生队伍素质的提高,客观上制约了医学事业的发展和人民群众对优质医疗服务的需求。医院要想在激烈的市场竞争中站稳脚跟,不断扩展自己的医疗市场,必须树立现代人力资源管理的新意识,分析3"-前国有医院人事管理的现状。采取九个方面的措施加大人力资源管理和开发的力度,有效地从传统人事管理转变为现代人力资源开发,以获取人力竞争优势。走可持续发展的道路。
人力资源作为各种资源中的第一资源,其配置是否科学、合理,管理模式是否科学、先进和具有时代特色,不仅直接关系到人力资源效能的正常发挥,也关系到其他资源的开发利用、合理配置和科学管理,医疗机构的人力资源管理也不例外。医院要想在激烈的市场竞争中站稳脚跟,不断扩展自己的医疗市场,必须树立现代人力资源管理的新意识,进一步加大人力资源管理和开发的力度,以获取人力竞争优势,走可持续发展的道路”。
1现代人力资源管理与传统人事管理的概念和区别
医院现代人力资源管理与传统人事管理有着本质的区别。有人形象地说传统人事管理是把人看作蜡烛,不停地燃烧直至告别职业生涯,强调的是组织目标的实现;现代人力资源管理是把人看作蓄电池,可以不断地放电、充电,强调的是人的潜能的不断开发和利用,强调实现组织价值和员工个人价值的双赢目标。概括来说,它们的主要区别如下:
1.1人事管理
主要采用严格的制度、命令式和简单式的监督。精力放在员工考勤,档案、合同管理,职称评定和发放工资福利等事务性工作上,是一种反应性的管理。它忽视员工的主观能动性和自我实现的需要。一般在单位中被定位于行政服务部门。目前国有公立医院基本上都是这种模式。即使一些医院将人事管理门更名为“人力资源部”,但从医院管理体制上可看出,对人员的管理基本上仍是传统的人事管理,这是组织历史以及组织格局和体制的必然。由于其不是基于以人为本的价值理念,没有足够认识到人是“资源”的战略管理意义,加之缺乏足够的公平、竞争的运作环境,所以调整和维系人员对组织献身的精神的,多是组织权力和行政感召,缺乏对个人持续培养、开发从而达到自我实现价值的根本动力。
1.2现代人力资源管理
医院现代人力资源管理是建立在全新的理论与管理思维之上的,它是运用现代化的科学方法,对与一定物力相结合的人力进行合理的培训、组织和调配,使人力、物力经常保持最佳比例,同时对人的思想、心理和行为进行恰当的诱导、控制和协调,发挥人的主观能动性。它带来的是医院人事管理理论和时间观念的全面更新,它是要获取与开发医院服务工作需要的各类、各层次人才,建立医院与医务人员之间良好的合作关系,以人力资源满足社会及公众对医院的要求,满足医院经营管理的发展的目标,也满足医务人员个人成长和发展的要求。在用人机制、运营机制方面均比较灵活,有较强的市场应变能力和市场竞争能力。另外,比较注重以人为本,提倡“人性化”管理,在薪酬分配、绩效评估、员工激励和未来的职业生涯规划等方面更加符合现代医院管理的要求。
2目前国有公立医院人力资源管理的现状
2.1对人力资源和人力资源管理的重要性认识不够,没有树立正确的观念
医疗卫生行业长期处于行政垄断地位,医院没有在市场竞争中实现优胜劣汰,外部环境不需要对人力资源有较高的要求。这是目前公立医院不重视人力资源管理的主要原因。
2.2人力资源管理体制僵化,人才流动机制不完善
目前,许多医院还未真正成为市场的主体,其运行仍由行政部门干预,医院不具有完全的用人自。虽然人才的评估在近年来有所规范,但不同医院的同样职称人才,尤其是高级人才缺乏同质性,真正的自由流动和弹性机制没有建立。医院想要的人进不来,不要的人出不去,想走的人走不了,想来的人来不了,专业人员和管理人员缺乏积极性。其主要有四方面的原因:一是行政管理部门干预过多;二是医院内部人力资源管理机制不健全;三是人力资源的市场机制不完善;四是原来遗留问题的后遗效应。
2.3缺乏科学的绩效评估体系
目前大多数公立医院仍为事业单位,绩效考核沿用行政机关、事业单位工作人员年度考核制度,医院各种专业、层次的人员,风险、技能要求不同,却都在使用统一的考核标准,所考核的内容也很笼统和形式化,难以反映不同岗位不同人员的业绩奉献。
2.4薪酬分配缺乏竞争性和激励作用
近年来,尽管一些医院对拉开收入差距采取了一定的措施,但绝大多数医院仍然在沿用过去的等级工资体系。没有进行工作分析、制定岗位说明书、做薪酬市场调查、绩效考核以及薪酬激励等规范化的人力资源管理。
2.5未重视医院与员工的共同发展
有些医院招聘并录用员工后,没有对其进行医院的价值观教育,医院缺乏良好的文化氛围,使员工难以产生认同感和归属感,团队协作能力不强。
3加强国有公立医院现代人力资源管理的建议
现代医院管理是以人力资源为核心的管理。人力资源管理就是在医院管理中要坚持和贯彻“以人为本”,使“人”与“工作”和谐地融合起来,实现医院和员工“双赢”,达到利益最大化。为加强公立医院的现代人力资源管理,提出以下几个方面的建议。
3.1要树立正确的人力资源观念和现代人力资源管理新意识
人力资源是医院的战略性资源,是具有高增值性的重要资产。因此,人力资源管理者要打破传统的人事管理观念,从单纯的人员行政管理中走出来,主动地去开发人力资源、挖掘潜能,使职工最大限度地释放才能,满足自我实现的需求。在医疗市场竞争中人才就是财富、人才就是效益、人才就是竞争力、人才就是发展后劲,人才是一种无法估量的资本,是一种能给医院带来巨大效益的资本。如果把医院的人才带走,医院会垮掉;相反如果你拿走资金、病房及设备,而留下人才,几年后可重建一个医院。在人力资源中,特别是受到过良好教育和具有创新协作能力的高素质人才,在某种程度上讲,对经济和高科技发展起到决定性作用。“最优秀的人才是免费的”,因为他们为医院创造的价值远远大于了医院付给他们的报酬。因此,人力资源管理者,要坚持“以人为本”的思想,尊重人才、爱惜人才,想方设法做到“用事业凝聚人才、用精神激励人才、用感情关心人才、用适当待遇留住人才”。
3.2建立竞争机制
坚持公开、平等、竞争、择优的选人用人制度。选人用人是搞好医院人力资源管理的第一关,只有建立公开、平等、竞争、择优的选人用人制度,选拔和使用与所需要岗位相匹配的优秀人才,才能为诸如薪酬待遇,培训发展等其他人力资源管理工作奠定良好的基础。要善于公开选拔任用人才,拓宽用人渠道,增加透明度,为各类不同的人才提供和创造发展机遇。中国有句古话叫“英雄不问出处”,只要符合招聘的岗位要求,具备基本的学历、资历和工作经验,就都应该让其应聘,通过优胜劣汰来选拔岗位最佳人选。做好工作分析,岗位评价,制定岗位说明书和岗位规范等基础工作,同时在选拔人才时要严格按照程序运作,这样才能够确保招聘到高素质的优秀人才。
3.3建立职责明确的岗位责任制
医院要想有一个高效的运作机制,必须要相应地建立一套适合本医院特点的组织体系和岗位设置,就是要坚持按需设岗,做到岗位职责明确、任职条件清楚,员工的能力与岗位要求相匹配。同时使该岗位的职责能够充分履行而与上下配合协调,使医院整体获得最大效益。
3.4建立科学、公正、公开的绩效考核制度
绩效考核是对医院员工劳动付出的一种反馈,同时也是支付薪酬的重要依据。在实施考核中必须要有一套能够反映岗位特点和本人(或科室)实绩的科学的考核标准,将不同岗位的责任、技术复杂性、承担风险的程度、工作量大小、科研、教学等不同情况一并纳入考核要素,同时在实施考核中做到公正操作,对事不对人,并将考核结果公开,及时做好反馈工作。
3.5建立公正、公平、合理的薪酬分配体系
薪酬是医院进行人力资源管理的一个非常重要的工具。创新分配机制,建立公正、公平、合理的薪酬体系,对调动员工的积极性,提高医院效益显得尤为重要。薪酬的设计与结构以及水平必须建立在科学的工作分析、工作评价以及绩效考核等基础之上,真正体现按劳分配与兼顾公平的原则。在实际的薪酬分配中,要根据不同的工作态度,工作能力和工作业绩拉开分配档次,向关键岗位与优秀人才倾斜。对临床医技科室医务人员劳务费分配实施岗位量化考核。各科室实行二次分配,把工作绩效作为岗位薪酬、多元分配的主要尺度。对积极开展新技术、新项目和临床科研成绩突出者实行重奖。这样做的目的,一方面是对员工劳动价值的肯定,同时也是稳定和吸引优秀人才的主要措施。薪酬体系合理,使医院的薪酬对内具有公平性,对外具有竞争性。
3.6建立有效的人力资源激励机制和约束机制
激励可分为物质激励与精神激励。有效的激励机制不仅可以调动员工的积极性,激发他们的创造力,而且可以增强医院的凝聚力和竞争力,进而促进医院的不断发展和效益增长。制约机制也称约束机制,就是要求医院员工在医疗服务工作中的行为要符合职业道德规范和医院规章制度,使其行为具有合法性和道德性。只有制约机制与激励机制的相互配套与应合,才有可能获得预想的管理效果。
3.7作好员工职业生涯规划。为员工提供良好的发展空间
职业生涯是一个人在一生中所有的工作经历,特别是指职业、职位的变动以及个人职业理想的实现过程。职业生涯规划,就是根据个人的兴趣、爱好和所具备的知识与技能以及相关的人际背景等各种因素来设计个人的职业发展计划。医院作为员工职业生涯得以存在和发展的载体,必须为每位员工提供一个不断成长和挖掘个人潜力和发挥特长的机会,医院管理者不仅要关注医院目标的实现,更要关注员工个人理想的实现,让他们获得事业上的成功与满足,只有员工的发展与成功,才能有医院的发展与成功。医院只有为员工作长远考虑,员工才能为医院作长远考虑,这一点在现代医院的人力资源管理中是必须明确的。超级秘书网
3.8建立完善的社会保障制度
完善的福利和社会保障制度仅仅在于满足生理需要和安全需要这两个低层次的需要。除我国现有的社会保障体系外,基于医疗行业的特殊性,对一些特殊岗位还要给予职业安全保护,并按国家规定给予各种休假待遇,让员工在为医院的贡献中享受到各种法定的保障。
3.9推行“人性管理”,培育良好的医院文化
论文关键词:编译原理;能力培养;教学
从当前的就业情况看,计算机专业的学生在软硬件知识和应用能力上的优势逐渐弱化,在与具备特定行业、应用领域和专业背景的学生竞争就业时,面临的压力越来越大,而在已就业的学生中又少有人从事编译系统的研究和开发工作。所以,“编译原理”作为计算机科学与技术专业的“经典”核心课程的存在价值受到质疑。其实,本科教育解决的是培养学生基本专业能力、可持续发展能力这些本质性的问题,因此,我们要从如何结合专业课程完成学生专业能力的培养与素质的提高这样的角度来看问题。
在大学里,学习一门课程,不能简单、肤浅地看成是对这门课程所含内容的研究、设计和开发,而是关注是否在有限的时间内最有利于学生专业能力的培养。计算机是一门技术性、工程性和应用性很强的学科,有其自身的基础理论支撑体系。“编译原理”课程本身以计算机专业基础知识为载体,含有问题求解的典型思想、技术和方法,整个课程的内容对培养学生的计算思维,程序设计与实现,算法设计与分析,计算机系统的认识、开发和利用等学科基本能力都非常重要。并且,编译技术在计算机体系结构设计、提高软件开发效率与质量的工具开发等方面有着重要的应用。因此,“编译原理”课程不但有存在的价值,而且对于计算机专业学生的能力培养和素质提高有着极其重要的作用和意义。
作为计算机专业的教育工作者,应该结合当前计算机的发展状况,重新认识“编译原理”课程的重要性,并根据当前的教育和就业形势,积极研究、改进“编译原理”课程的教学和实验方法,提高教学效果和质量。
一、明确“编译原理”课程对学生能力培养和素质提高的重要性
从课程体系总体设计看,“编译原理”课程的主要教学目标之一是使学生在系统的级别上重新认识算法和程序,提升学生的系统能力。它是计算机专业课程中最难学的课程,既涉及形式语言和自动机等抽象理论,又是数据结构、程序设计语言、算法和软件设计等知识的综合体现,有效培养了计算机专业学生应具有的计算思维,算法设计与分析,程序设计与实现(硬件和软件实现),系统的认知、分析、开发与应用等四大基本能力。
计算学科问题求解的基本思路是“问题-形式化描述-计算机化”,以抽象、理论、设计为其学科形态。“编译原理”课程中要求学生掌握的包括程序变换基本概念、问题描述和处理方法(自顶向下、自底向上、逐步求精、递归求解,目标驱动,问题分析、问题的抽象与形式化描述,算法设计与实现,系统构建、模块化)等知识、思想和方法,有利于学生养成“问题、形式化描述、计算机化”问题求解的习惯,实现从“实例计算”到“类计算”和“模型计算”的跨越。这其中既有明确的、便于抽象的问题,又有较成熟的理论,而且在限定规模下又容易实现(设计),涉及的是一个比较适当的抽象层面上的数据变换,所以该课程是计算机专业本科生的重要专业技术基础课程。
二、“编译原理”课程“教”与“学”的新思考
目前,在“编译原理”课程教学中,“教”与“学”两方面的问题都很突出:一些抽象的重要理论使学生学习的畏难情绪严重,加上有些人认为毕业后很少有机会参与设计与实现编译系统,使得该课程的“教”与“学”的热情偏低,而适用于新型体系结构及新一代计算机系统的编译器的需求和大量应用,也给“编译原理”课程内容的充实与更新提出更高要求。
作为教师,要让学生深刻认识到:“编译原理”是许多课程知识的集成与实践,能进一步加深对许多专业基础课程知识的理解;编译程序所使用的原理、方法和技术有利于领悟计算机理论的精髓,在非编译系统的实际应用中也发挥着很大作用;学习编译对今后从事应用软件,语言开发平台、编译系统甚至操作系统的开发等工作非常有益。
实践证明,如果首先让学生认识到课程内容的重要性,再辅之以合适的教学方法和教学手段,是不难取得好的教学效果的。根据笔者的“编译原理”课程教学经验,认为对于该课程的设置和教学可以从以下几个角度来开展。
1.科学设置课程
对于“编译原理”课程的设置问题,可以根据本科院校自身办学宗旨,从普通高校本科、重点高校本科和研究生阶段教育三个层次来考虑教学目标和培养要求等因素,在总学时的限制下,实现总目标的最佳课程。因此,可以考虑以下2种模式。
(1)课程分解模式。分为:“编译技术”(必修),介绍为满足基本应用而需要学生掌握的基础知识、方法和技术,以达到语言转换和实现理论基础介绍的目的;“编译理论”(选修),主要偏重于介绍形式化等原理性的深层次内容,方便有进一步深造需要的学生学习。
(2)内容分解模式。不单独设置一门“编译原理”课程,根据深浅和涉及到的具体问题,将与其他课程相关的内容分解到不同的课程中去,使学生在相关课程的学习中逐步掌握相关知识。这和前者比有一定难度:一是课程难分解,课程内容分解后与其他课程内容的重新整合在短时期内难做到科学分解与组织;二是增加了其他课程授课教师的工作量与难度。
2.优化教学内容
教师还要坚持教学与科研相结合,将最新的教改和科研成果引入教学,将经典编译理论与现代编译技术有机地结合起来。例如,可以将嵌入式编译器、分布并行编译器、多核编译器以及适应新体系结构及新一代计算机系统编译器的研究及其研究结果迅速充实到“编译原理”课程中。此外,还可以向学生介绍编译技术在人工智能、并行计算、自然语言处理等领域里的具体应用,为后续课程做好铺垫。
3.用实例演示来形象化抽象理论
学生学习“编译原理”课程的最大困难是其较为抽象,要获得好的教学效果,就要将抽象理论形象化。改革教学方法,提倡互动式、研讨式和案例式等教学方法。一方面,可以通过实例类比,例如,用自然语言的翻译过程来类比编译程序执行高级程序设计语言的翻译过程。另一方面,教师可以借助多媒体手段,把抽象的原理用动画、图像等形象化的方式展示,便于学生的理解。同时,还可以向学生推荐网上优秀的“编译原理”课程教学网站、电子书等资源,拓宽学生视野,培养和激发学生学习兴趣。
4.把握联系,启发学生积极思维
在教学过程中,充分考虑“编译原理”课程与数据结构、计算机组成原理、操作系统、算法分析与设计等先修课程之间的内在联系,不断深入和强化,以加强课程的系统性,培养学生的全局观。同时还要把握编译过程各个功能阶段的内在联系与规律,有目的地设计问题,有意义地提出问题,通过问题把编译原理中的理论难点、抽象概念引导出来。
三、重视实验,建立行之有效的实验教学方法
设计和组织良好的实践教学环节可以使“编译原理”课程获得良好的教学效果。现在很多高校都增加了实验学时,并独立计算实验成绩。我们在借鉴兄弟院校和国外经验的基础上,摸索出验证性实验加综合设计性实验的2阶段实验教学模式,各高校可根据自己的教学目标和培养要求来选择实施。
1.验证性实验
这类实验主要是为配合配合课堂授课内容,由教师按编译原理授课顺序,提供同步的若干验证性实验题目,让学生逐个完成相关子模块,逐步扩大完善整个编译程序。这样循序渐进地完成实验,不仅增加了学生的成就感和自信心,而且使他们养成扎实的作风,使学练互动,激发学生学习兴趣和积极性。而作为教师,则要做好组织、监督和解惑工作,帮助学生掌握编译系统主要技术、算法的理解和设计,引导学生从整体上把握编译系统的结构和各子系统之间的协调工作。
2.综合设计性实验
一定规模的综合设计性实验训练是保证实践教学效果必不可少的环节。我们可以让学生以小组(由4~5名成员)为单位结合软件工程课程实验的环节完成一个规模适度的编译程序开发。在实际操作时,可根据验证性实验阶段的情况,把学生分成不同层次的小组,由他们选择适合自己水平的不同的实验题目。每组遵循完整的编译器开发方式,融入软件工程的思想,由大家推举的组长分工、协调完成任务。这样,不仅能让每个学生体验从分析设计、编码测试到交付维护的软件开发全过程,还提高了他们的工程和团队意识以及开发大型软件的协调结构设计能力。实验结束时,教师要求学生以演示系统、答辩的方式公布实验成果,以便公正评分。
四、结论
论文关键词:Proteus,LPC2124,精确计数
1 引言
LPC2124是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S CPU的微处理器,并带有256KB嵌入的高速Flash存储器和16KB的RAM。LPC2124具有教小的64脚封装,极低的功耗,多个32位定时器,4路10位ADC,PWM输出,46个GPIO以及多达9个外部中断,并且内置了多种串行通信接口物理论文,支持JTAG、ISP、IAP等多种编程方式,使得LPC2124能够适用于工业控制、访问控制、医疗系统以及其他各种类型的应用[1,2]。
Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,是一款新型的嵌入式系统设计、分析与仿真软件。Proteus软件不仅能够实现数字电路和模拟电路的设计与分析,而且还能够实现微处理器与外设的混合电路设计,可以直接在原理图的基础上进行微处理器的软件协同仿真和功能验证。Proteus软件只带汇编编译器(不支持C语言),但可以将其与Keil集成开发环境进行联调,达到很好的仿真效果[3,4]。
本文设计的精确计数系统功能为:当按下按钮时,数码管的计数加1,当放开按钮时,数码管的计数保持不变;开始时数码管的计数为0,当数码管的计数达到15(即16进制的F)时又重新从0开始计数。系统软件的设计采用Keil软件完成,编译连接之后得到可执行的hex文件;系统硬件的设计采用Proteus软件完成;软硬件的协同仿真是在Proteus中加载hex文件进行精确计数的测试。
2 硬件系统的设计
精确计数系统采用LPC2124微处理器作为核心器件,并为其提供了两组电源分别为3.3V和1.8V。硬件系统主要由以下四部分电路组成:XTAL1和XTAL2两个端口连接晶体振荡器组成时钟电路,RST端口连接一个按钮组成复位电路物理论文,P0.0-P0.6端口连接一个共阴极的7段数码管组成输出电路,P0.7端口连接一个按钮组成输入电路论文格式。在精确计数系统中,P0.0-P0.7共8个端口的功能都是GPIO,P0.0-P0.6共7个端口的方向都为输出模式,P0.7端口的方向为输入模式[5]。采用Proteus软件设计的硬件系统原理图,如图1所示。
图1 硬件系统原理图
3 软件系统的设计
精确计数系统软件的设计主要在于对LPC2124微处理器相关寄存器的设置,从而控制数码管计数的显示。软件系统的设计采用Keil软件完成,并最终得到可执行的hex文件。软件系统的设计主要通过以下几个步骤来实现,程序流程图,如图2所示。
图2 软件系统流程图
1.初始化系统时钟并设置相应的寄存器。晶体振荡器的频率为10MHz,LPC2124微处理器的时钟频率为60MHz,设置相应的寄存器程序如下:
PLLCON=1; //使能PLL
PLLCFG=(60/10-1)|(1<<5); //M=5+1,P=1
2.初始化相应端口的功能为GPIO,设置相应的寄存器程序如下:
PINSEL0=PINSEL0|0xFFFF; //P0.0-P0.7共8个端口功能为GPIO
3.初始化相应端口的方向为输入或输出模式,设置相应的寄存器程序如下:
IO0DIR=0x7F; //P0.0-P0.6共7个端口为输出,P0.7端口为输入
4.开始计数数码管显示0物理论文,设置相应的寄存器程序如下:
IO0SET=0x3F; //P0.0-P0.5共6个端口输出高电平,P0.6端口输出低电平
5.循环检测按钮是否被按下,并进行相应的处理,程序模块如下:
void button_test( )
{
int i=0,key;
unsigned charledcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,
0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //显示0-9,A-F的笔段代码表
while(1)
{
key=IO0PIN&(1<<7); //获取P0.7端口的电平,即检测按钮是否被按下
if(key==0) //按钮被按下
{
i++;
if(i==16) //计数器加到16
{
i=0;
IO0CLR=ledcode[15]; //清除数码管上次计数的显示
}
else
IO0CLR=ledcode[i-1]; //清除数码管上次计数的显示
IO0SET=ledcode[i]; //数码管显示新的计数
while(1)
{
key=IO0PIN&(1<<7);
if(key!=0) //按钮被放开
break;
}
}
}
}
4 仿真与结论
精确计数系统软硬件的协同仿真是在Proteus中加载hex文件进行计数的测试。经仿真测试结果表明:本精确计数系统能够根据按钮的按下与否准确进行0到15(即16进制的F)的计数,并通过数码管进行准确显示,达到了设计的目标要求。同时,在此基础之上,可以对系统的软硬件功能进行扩充,以适用于其他方面的应用。
参考文献:
[1]韦文祥,朱志杰,车琳娜,郭宝泉.基于LPC2124的一个远程系统软件升级方案[J].单片机与嵌入式系统应用,2006,5:46-49
[2]晏五一,朱志杰.基于LPC2124的远程配电变压器监测终端设计[J].电力系统,2007, 26(7):31-34
[3]杨校辉.Proteus在ARM系统设计中的应用[J].单片机与嵌入式系统应用,2009,8:77-79
[4]张勇.基于Proteus平台的32位单片机LPC2114虚拟串口通讯仿真[J]. 集成电路通讯,2008,26(1):8-12
[5]周立功.ARM嵌入式系统基础教程(第2版)[M].北京:北京航空航天大学出版社,2008:353-360
论文关键词:操作系统,内核分析,Linux,跨平台调试
0 引言
作为计算机科学与技术专业的一门重要专业基础课程,操作系统的地位举足轻重。但在高校本科教学过程中,学生普遍反映该课程难学,教师在教学中也困难重重。究其原因,操作系统课程自身的知识结构以及研究对象特有的复杂性使上述情况成为必然。而知识体系的复杂性直接导致该课程给人理论性强、抽象的印象。因此,如何有效开展操作系统课程的实验教学,加深学生对该课程的直观理解和把握就显得至关重要。传统实验方法以验证和仿真为主,实验很难发挥应有的作用,且容易混淆系统级和应用级的许多概念,反而使学生更难把握知识结构,难以对系统软件形成宏观认识。结合多年教学实践,我校在操作系统课程的本科教学过程中结合实验平台软件的开发和应用,探索出一种直观有效的实验教学模式,使得教学效果得到较显著的提高。
1 操作系统实验教学现状
1.1 实验比重
由于操作系统课程涉及的理论知识多杂志铺,系统级的验证和实验难度较大,导致教学过程中容易出现避重就轻的情况,教师易偏重理论课而轻视实验课教学,实验的课时设置在各高校中也不同程度地偏少。另一方面,学生受考试形式的引导,也偏重理论学习而忽视实践动手能力的培养。实践证明,不注重实验、验证环节,学生很难对该课程涉及的大量概念和方法形成直观认识,导致对许多知识点的认识出现偏差,反而不利于理论课的学习。例如,目前选用的教材在行文时经常变换研究的“角度”,一些知识点是面向应用的,而一些是研究操作系统内部实现的,但在讲述中并未明确说明,比如:在“进程同步与互斥”部分,大部分教材是从“应用”的角度来描述P、V操作的,并附带伪码算法。但在学习过程中,许多同学搞不清这些算法用在何处,是在应用程序层次还是在操作系统实现层次。如果结合Linux或Windows平台设计实验内容,补充P、V操作对应的系统调用和有关函数的用法,真正写出可运行的程序,就可以大大加深对知识点的理解。
1.2 实验方式
与大部分应用类课程相比,操作系统课程的研究目标是系统软件,知识结构偏重底层软件,且往往涉及到硬件知识,开展实验所需的软硬件平台复杂,传统教学模式很难真正实施“系统级”的实验项目,故常用模拟算法代替。这样容易导致所学知识和方法比较抽象和“遥不可及”,很难形成对操作系统整体上的理解和把握。
1.3 现有的一些改革和尝试
针对操作系统课程实验教学中的问题杂志铺,各高校进行了许多有益的改革和尝试。例如,使用逐渐被认同的Linux实验平台[1],整理更加规范的实验内容[2],以及按照归类和划分层次的原则对实验目标进行细化等方法[3]。但操作系统实验内容自身的复杂性与实验方式尽量简单、有效的要求之间的矛盾依然存在。
2 基于内核分析的实验模式
针对上述问题,本校操作系统教研组在操作系统实验教学中不断探索和尝试,总结出一种基于内核分析的实验教学方法。实施过程中,在保障36个实验学时的前提下,直接面向具体的操作系统对所学的概念和算法进行验证、设计,配合跨平台编译和调试技术,有效地降低了实验实施的难度,且不增加学生的额外负担。
2.1 内核分析
内核分析,就是选择一个开源的操作系统作为对象,通过阅读源代码来分析其实现原理和必要细节,并在特定的地方修改部分代码以验证自己的算法。但是,为了降低实验的复杂度并适应本科生的知识结构,实验对象不应太复杂。基于上述考虑,可以选择Linux0.11版本作为实验的目标系统。Linux0.11版是Linux的早期版本,其总的代码量只有1万行左右,且结构清晰,功能较完整(能够覆盖实验教学中的知识点),几乎包含了目前较新版本内核的所有基本功能和原理[4],能够较好的满足实验要求。
2.2 跨平台编译和调试
单纯的代码阅读是枯燥无味的,特别是操作系统这种系统软件。为了提高实验的直观性,可借助动态调试技术来实现内核代码的阅读和分析工作。通过调试过程可以较轻松的跟踪内核执行的流程、关键算法的运行效果以及关键变量和寄存器的取值情况。
但由于操作系统是系统软件,其修改、编译和调试过程远比一般的应用程序复杂。目前常见的实验环境是在微机上直接安装Linux的发行版本或在Windows系统中通过虚拟机安装Linux开展实验。但这些方法都需要在修改内核后重新编译并重启系统,其过程繁琐且需要掌握Linux的大量命令,从而加重了学生的负担并容易导致其失去学习兴趣。
得益于自由软件基金组织GNU对Linux的支持,目前有许多Linux相关的工具软件可以使用,并且有对应的Windows版本。其中杂志铺,著名的编译器GCC和调试工具GDB可以巧妙解决实验过程繁琐的问题。其主要思路是:利于GCC、GDB、MAKE工具和虚拟机软件,实现一种跨平台的内核编译和调试方法,即在Windows平台下编辑、编译并调试运行Linux系统。这和用VC、VB等应用程序开发工具编程调试的工作方式几乎没用区别。另外,通过开发一个集成实验环境(Windows下的应用程序),可将GCC、GDB、MAKE及虚拟机工具进行集成,从而将命令行工作方式转换为视窗工作方式,大大简化实验步骤,使学生更容易集中注意力到实验内容本身。
图1描述了这种基于跨平台编译调试技术的工作流程。
图1 跨平台内核编译、调试流程
3 集成实验环境的搭建
搭建集成实验环境的目的是避免实验时频繁的执行GNU工具集对应的各种命令,使实验步骤尽可能简洁。其主要组成为:虚拟机BOCHS、Windows下的GNU工具集以及主控程序。集成实验环境的开发过程本身涉及许多操作系统课程中的知识点,比如进程间通讯、管道、共享存储器等。对学有余力的学生,阅读其实现代码有助于编程能力和对操作系统整体认识的提高。
3.1 虚拟机BOCHS
传统的Linux内核调试方法是使用KGDB进行远程调试。这种方法必须要求有一台目标机和一台调试机,因此用于实验有很多困难,难以实施。而利用虚拟机软件,可以在一台微机上虚拟另一微机并满足实验的要求。另外,选择BOCHS而非其它软件的主要原因在于它使用的是仿真技术而非虚拟技术,从而更适合充当调试服务器的角色。
3.2 Windows下的GNU工具集
为了实现跨平台的内核编译和调试,实验环境需要使用Windows下的GNU最小工具集(Minimalist GNU for Windows),主要包括的工具有:AS、LD、GCC、MAKE以及GDB。其主要作用是保证在Windows平台下GNU开发环境仍然可用。但需要注意的是,基于该工具集生成的可执行程序是PE格式的,即Windows下的可执行程序格式,不能作为内核镜像执行,因此需要一个简单的转换过程。但这种首先将内核编译为exe再转换为内核镜像的过程恰好可以为GDB保留内核符号表,从而使跨平台调试成为可能。
3.3 集成实验环境
这是一个用VC开发的Windows应用程序,其功能包括内核源码的管理、编辑、编译、内核镜像的生成、调试、MINIX根文件系统的维护以及实验项目的管理。
(1)内核源码以及实验项目的管理
该功能主要结合操作系统实验教学中的系统引导、进程管理、存储管理、设备管理、文件系统等内容,针对相应的内核源码给出注释、快速索引、实验指导以及实验步骤。它可以帮助学生通过真正的内核代码分析,更深刻理解相关知识点,且形式直观、易于理解。
(2)内核镜像的生成、调试
该功能是实验环境的核心部分。基于该功能可以快速对修改过的内核生成新的镜像,并通过调试器看到真正的运行情况,从而使内核分析实时、动态进行杂志铺,并且像调试应用程序一样简单。具体实现时,将GCC、GDB、BOCHS等作为子进程执行,并通过管道和I/O重定向等方法将繁琐的控制台工作方式转变为视窗工作方式。例如,进行调试时,不再需要记忆GDB的调试命令和频繁的控制台输入,只需点击鼠标设置断点、单击菜单项或按快捷键即可实现字符环境下几十条命令才能实现的功能,操作简单、界面更友好。
(3)根文件系统的维护
在Windows下维护根文件系统的目的是便于将可执行程序加载到磁盘镜像中。由于Linux0.11功能简单,并且为了保证磁盘镜像尽可能小,Linux0.11本身不包含GCC等编译工具,因此,要在目标系统中运行的程序必须在Windows系统中编辑、编译,最后再加载到根文件系统中。
图2为集成实验环境运行的情况。
图2 集成实验环境
4 结语
操作系统课程实验教学的必要性和重要性已被广泛认同,而对教学方法、手段的探索和改革还任重道远。这种基于内核分析的实验方法试图让学生真正接触操作系统实现细节的同时,力争简化实验步骤,使实验环节易于实施。实践证明,该教学模式容易被学生接受、取得了较好的教学效果。
参考文献
[1]钟少丹.“操作系统”课程实验设计的思考[J]. 计算机教育,2008(12):120-121.
[2]张其亮,韩斌.操作系统课程实验教学改革探析[J]. 计算机教育,2010(7):91-93.
[3]邹恒明.操作系统课程实验中的五重奏哲学[J]. 计算机教育,2009(20):109-112.
[4]赵炯.Linux内核完全注释.[M]. 北京:机械工业出版社,2004.9.
关键词:操作系统;实践教学;实验设计
中图分类号:G642 文献标识码:B
文章编号:1672-5913 (2007) 20-0008-03
1引言
操作系统是计算机科学与技术专业的一门重要基础课程,其教学目的使学生通过学习各种资源管理的原理和机制,建立起关于操作系统如何工作的理论知识基础。但操作系统同时也是学生们认为比较难学的专业课程之一。其原因有二:一是操作系统课程讲述的是计算机资源管理的原理和机制,其中包含了许多抽象的概念和算法;二是操作系统作为最底层的核心软件,深藏于“用户界面”之下,学生们难以找到学习内容的参照对象。因此,操作系统实践教学作为教学辅助环节十分重要,它的作用在于通过动手做实验,帮助学生解决从抽象理论到具体对象的认识问题,培养学生应用知识解决问题的能力。
与程序设计、编译原理和数据库等软件课程的实践教学相比,操作系统课程的实践教学有其特殊的地方。前者可以通过实现一个小型的应用程序或简化的编译器、数据库来完成实践教学,而后者不能这样做。因为操作系统不仅与硬件平台密切相关,而且内部结构非常复杂,即使让学生实现一个最简单的操作系统也是不现实的。近年来,我们以开源的Linux操作系统和WMware虚拟机作为实践平台,针对不同的教学对象和教学要求,精心设计了多种方式的实验项目,在操作系统实践教学上做了一些有益的探索。本文首先分析操作系统实践教学的目标,然后说明如何具体设计实验项目。
2实践教学目标
我们认为,操作系统实践教学作为辅助教学环节,有两个主要目标。
(1) 帮助学生理解操作系统的基本概念、原理和机制
操作系统包含了许多抽象的基本概念如进程、线程和虚存,也包含了复杂的资源管理算法和机制,如进程调度和页式存储管理。这些知识对于本科学生而言是比较难以理解的,因为他们平时使用的是操作系统的用户界面,很少也很难窥视到操作系统的内部。操作系统的实践教学应该让学生了解一个真实操作系统的内部实现,从而帮助学生更好地理解操作系统的基本概念、原理和机制。
我们采用开源的Linux操作系统作为实践教学的教材,指导学生阅读和分析Linux的部分源码,将学生带入一个真实而复杂的操作系统内部世界。在阅读和分析源码的过程中,学生能够了解抽象的进程和线程所对应的具体数据结构,了解进程调度算法的实现过程,并应用所学的操作系统原理知识分析和讨论Linux的调度策略。另外,我们要求学生在做每项实验前自学Linux操作系统的相关知识,使学生清楚地看到操作系统的原理知识是如何体现在一个实际系统中的。
(2) 培养学生应用操作系统知识的能力
操作系统是计算机系统的核心软件,从事计算机行业的专业人员都需要操作系统的原理知识,但他们担任的角色不同,面临的问题就不同,因而所具备的操作系统知识的应用能力也不同。系统管理员需要根据操作系统知识和用户的需求,合理地配置系统资源,需要及时了解系统运行状态,调整资源管理策略,使系统性能达到最佳;系统程序员需要详细了解操作系统的内核结构、资源管理机制和功能模块接口,为操作系统添加新功能或编写设备驱动程序;应用程序员则需要正确理解操作系统的功能和资源管理策略,编写出高效率且安全的应用软件。操作系统的实践教学必须考虑到上述不同能力培养的特点,以满足学生未来任职需要。
我们以开源的Linux操作系统和WMware虚拟机作为实践平台,精心设计实验项目,从多个方面培养学生应用操作系统知识的能力。例如,学习使用Linux的proc文件系统,对内核运行状态、资源管理状态和进程运行状态进行动态查询;学习Linux的系统调用机制和内核模块动态加载机制,掌握为操作系统添加新功能的方法和过程;编写进程通信应用程序,掌握各种进程通信、同步互斥机制的特点和使用方法。
3实验项目设计
我们在上述的实践教学目标的指导下,设计了多个实验项目,内容涵盖了操作系统的主要知识点,包括用户界面、进程通信、proc文件系统、系统调用机制、进程调度、内核同步互斥机制、驱动程序接口等。考虑到学生的知识和经验背景,实验项目的安排从简到难,从依靠指导到自主设计。除必做的实验项目外,还设计了选做的实验项目,为有能力的同学提供更多的学习空间。下面分别介绍我们设计的九个实验项目。其中,前三个实验项目是为应用程序员和系统管理员设计的,使学生掌握如何使用操作系统的命令界面、进程机制和系统性能管理工具;第4个实验安排学生阅读和分析源码,理解操作系统原理在实际系统中的实现过程;后五个实验项目是为系统程序员设计的,让学生体验操作系统内核编程的全过程。
(1)Linux命令界面及shell编程
该项实验的目的是学习使用操作系统的命令用户界面。实验内容是:了解和使用Linux的常用命令,包括如何使用联机帮助手册和管道线命令;学习使用命令程序语言shell进行简单的编程,从而理解命令解释程序的工作过程。由于学生平时使用的是windows的图形用户界面,面对Linux的命令界面感到很陌生。所以,我们先给学生一个shell例子程序,让学生按照说明步骤上机运行该程序,然后要求学生参照此程序实现一个应用管道线的shell程序。
(2) 进程间通信
该项实验的目的是加强学生对进程概念的理解,使学生掌握不同的进程通信和同步互斥机制的特点和使用方法。实验内容是:设计应用程序实现父、子进程之间的数据交换,可采用各种方法实现父子进程之间的通信(共享区、文件、消息传递、管道文件)和同步互斥控制(信号量、信号)。
(3) 使用proc文件系统
该项实验的目的是学习如何使用Linux的proc文件系统,对内核运行状态、资源管理状态和进程运行状态进行动态查询。实验内容有:先通过课堂讲授让学生了解proc文件系统的设计思想、工作原理和组织结构,然后要求学生利用proc文件系统中的数据来说明操作系统或进程的某些特性。例如,利用/proc/stat中的数据显示CPU的使用情况――系统利用率和用户利用率;利用/proc/intr中的数据显示内存容量对缺页异常次数的影响。
(4) 分析进程调度算法和策略
该项实验的目的是帮助学生深入理解进程调度过程,培养学生分析和研究问题的能力。实验内容是:阅读和理解Linux的进程调度函数schedule()、进程数据结构task_struct等内核源码,分析和研究Linux的进程调度算法和策略,写出研究论文。要求学生在论文中讨论以下问题:进程调度队列是如何组织的;如何实现三种调度类型(SCHED_FIFO, SCHED_RR, SCHED_OHTER);进程的优先级是如何定义和动态变化的;如何决定时间片的大小以及它与优先级的关系;对实时进程和多CPU的支持;评价Linux的调度策略并提出改进意见。
(5)Linux内核编译
该项实验的目的是学习如何生成新内核,为后面进行操作系统内核编程的实验做准备。实验内容有:学习如何下载和解压源码,了解Linux内核源码的组织结构,学习配置、编译、安装和启动Linux新内核的全部过程。
(6) 添加系统调用
该项实验的目的是让学生理解操作系统的重要机制――系统调用机制的工作过程,学习如何添加系统调用。实验内容是:阅读源码文件,分析系统调用表等内核数据结构;实现新的系统调用函数,添加新的系统调用,编译和生成新内核;编写应用程序,验证新系统调用的功能。
(7) 加载内核模块
该项实验的目的是学习动态增加内核功能的方法。内核模块动态加载/卸载是操作系统的另一重要机制,它使得用户不仅能动态裁剪内核功能,还能通过自己编写内核模块或使用第三方软件来动态增加内核功能。实验内容有:首先通过课堂讲授让学生了解Linux模块机制的工作原理、模块的编程和编译方法,然后要求学生采用内核模块编程方法,为proc文件系统添加一个新文件。在该项实验中,学生不仅要学习内核模块的编程、编译、加载和卸载全过程,还需要查找资料和阅读源码,搞清楚proc文件系统中关于创建文件、读/写文件和删除文件的函数接口,以此锻炼学生的自主动手的能力。
(8) 实现同步事件原语
该项实验的目的是学习如何实现同步互斥机制。实验内容是,实现一组同步事件原语:能够使多个进程阻塞在某个特定的事件上,直到另一个进程产生该事件,从而唤醒所有在此事件上阻塞的进程。这是一项综合的复杂实验。实验者需要分析清楚同步事件原语的语义以及进程同步过程中的所有细节问题,正确设计同步事件的数据结构和系统调用原型,分析Linux源码中关于进程等待队列和内核信号量的相关函数,并利用这些函数实现同步事件原语的系统调用。然后,采用内核模块方法将新的系统调用添加到Linux内核中,并通过应用程序验证其正确性。
(9) 实现虚拟管道设备
该项实验的目的是学习如何编写驱动程序。实验内容是:使用内存区(例如2048字节)实现一个虚拟的字符管道设备:允许多个进程向管道写入数据,也允许多个进程从管道读出数据,保证数据的写入顺序与读出顺序是一致的。这也是一项综合的复杂实验,实验者需要分析研究读/写管道设备过程中的同步互斥问题,利用内核信号量函数和进程阻塞/唤醒函数解决同步互斥问题;分析研究Linux的字符设备驱动程序接口,学习如何编写和注册驱动程序的接口函数以及如何建立Linux设备文件。然后,采用内核模块方法将新功能添加到Linux内核中,并通过应用程序验证其正确性。
4结束语
操作系统实践教学应该为学生提供一个实验环境,使学生能够触摸真实的操作系统内核,从而更好地理解操作系统的基本概念、原理和机制;使学生能够亲身体验操作系统功能的设计和实现过程,培养学生应用操作系统知识的能力。我们在操作系统实践教学中做了一些有益的工作,教学效果也不错,但还存在一些问题有待于进一步研究和探索。例如,如何与课堂教学互补,进一步激发学生学习操作系统的兴趣;如何通过构建实验平台将操作系统中更多的内核机制(中断机制、内存管理机制等)呈现给学生;如何设计更为实用的、学生自主性更强的实验项目,等等。
参考文献
[1] 罗宇. 操作系统课程设计[M]. 北京:机械工业出版社,2004.
[2] 陈莉君. 深入理解Linux内核[M]. 北京:中国电力出版社,2004.
[3] 李善平. 边学边干―Linux内核指导[M]. 浙江大学出版社,2002.
作者简介