《操作系统教程》(笫5版)教学重点、难点及解决办法(按十个核心知识单元排列)1、概念与原理重点:操作系统的发展历史、定义、作用、功能、特征、分类、发展动力和研究动向;操作系统在计算机系统中的地位,以及与其他软件的联系与区别;操作系统的资源管理技术:复用、虚拟和抽象;操作系统三个最基本抽象:进程抽象、虚存抽象和文件抽象;操作系统虚拟机及其实现原理;多道程序设计定义、实现基础、基本原理、主要特征、优点缺点。
难点:对并发性和共享性及其关系的深刻理解;多道程序运行的时间关系、处理器及设备利用率计算;操作系统在计算机系统中的地位和作用;操作系统与其他软件的联系与区别;对操作系统三个最基本抽象的深刻理解,虚拟机的定义及其实现原理。
解决办法:讲解操作系统是计算机系统的核心和灵魂,是各类软件系统中最复杂的软件之一,是软件系统中的基础软件;提醒学生注意学习方法、激发学习兴趣,学习本课程最终目标是建立起以操作系统为中心的计算机系统的系统级的认识和全局性把握;强调操作系统是理论性与实践性并重的课程,理论与实践相结合十分重要,既要学好原理,又要动手实践,做到课程教学与实验内容彼此呼应、掌握基本原理与提高编程能力相互并重;多道程序设计是讲授的重点之一,让学生理解和掌握多道程序设计原理,实现它必须解决的若干问题,基本调度思想,理解计算机效率的计算方法;可通过图解方法介绍操作系统三个最基本抽象,在此基础上再介绍虚拟机,让学生牢固掌握操作系统资源管理技术;本知识单元主要要求是讲清楚“操作系统是什么?为什么要它?它干什么?它如何干?”等问题,回顾操作系统的发展历史和分类,有助于理解操作系统的实质,提醒学生带着以上问题学习操作系统;建议学生多看参考书和参考资料,多浏览相关网站,并为学生提供这类信息资源。
2、接口与服务重点:操作系统接口、操作系统服务;POSIX标准、访管指令、应用编程接口API、标准库函数;程序接口与系统调用;操作接口与系统程序;shell概念、变量、命令、语句及其简单程序设计。
难点:深入理解操作系统是接口和服务的提供者、是资源的管理和控制者、是程序执行的控制和协调者、是虚拟机和扩展机的含义;熟练掌握和使用操作系统提供的两类接口;理解内核的主体是系统调用;掌握shell的其本编程技巧;了解Linux系统调用及实现机制。
解决办法:要让学生理解POSIX标准、API、标准函数库、系统调用之间的关系,并实际使用两类接口;掌握shell最好的方法是通过实验从易到难编写、调试和运行shell程序;通过综合性实验全面训练学生对于操作系统API的综合应用能力。
3、结构、设计与实例重点:操作系统结构分类及设计方法;操作系统内核、功能及属性;操作系统的运行模式及其分类;安全操作系统的开发方法、安全操作系统设计技术;典型操作系统实例之一(Linux):1) Linux中断处理、下半部分处理;2)Linux进程、线程和内核线程;进程管理;3)传统调度算法;4) O(1)调度算法;5)物理主存管理层次及实现;6)进程虚存空间管理技术;缺页处理;7)设备I/O处理;8)VFS;9)安全和保护机制。
难点:理解操作系统函数在用户进程中执行的运行模型;操作系统设计权衡与折衷原则、机制与策略分离原则;安全操作系统的开发方法和设计技术;Linux:1)中断处理流程与各种下半部分处理机制;2) Linux进程、线程的联系和区别;3)掌握进程创建的不同方式(fork、vfork、clone);4) O(1)调度算法的思想与实现要点;5)物理主存和进程虚存管理、缺页处理;6) VFS的设计思想及实现技术。
解决办法:操作系统的结构与设计中分两部分:操作系统设计和安全操作系统设计。
前者讨论重点放在通用操作系统功能的设计和实现,涉及有效性、易用性、开放性等方面;后者着重讨论通用操作系统的安全性的设计和实现,涉及隔离性、完整性、可验证性方面。
讲课时把握不同的重点。
典型操作系统实例的某些难点配合源程序片段或实验讲授,必定会事半功倍。
通过模拟类实验,了解操作系统的基本体系结构。
通过Linux环境下的内核类和应用类系列实验,加深对Linux操作系统设计原理与实现机制的理解。
4、进程和线程重点:可重入程序和可再用程序;为什么要引入进程?进程的定义和属性、进程的状态和转换、进程的描述和组成、进程映像、进程上下文;进程切换、切换时机和切换过程、处理器状态转换;为什么要引入线程?多线程环境中,进程与线程的定义、状态、组成、联系和区别。
难点:为进程建立和实现多个逻辑时钟;进程的定义、属性、组成、映像、上下文、状态和转换的原因;进程切换和处理器状态转换的关系,进程切换时机;进程控制块和线程控制块的数据结构、进程的创建与撤销、进程的状态转换;了解Linux进程、进程状态、进程队列(链表)、进程管理。
解决办法:进程是多道程序系统出现后,为刻画系统内部出现的动态状况,描述运行程序活动规律而引进的最基本、最重要的概念和系统机制,所有多道程序设计操作系统都建立在进程基础上。
它在理论与实现方面均有重要意义,是操作系统的一根主线,要紧抓不放、讲深讲透;让学生深刻理解和掌握进程概念,宜从解决系统“并发性”和“共享性”入手,在并发系统中,程序与程序的执行(计算)不再一一对应,必须引入新概念--进程,进程是既能描述程序并发执行状态、又能用来共享资源的一个基本单位,进程是支持程序执行的一种系统机制;线程在Linux中的含义和实现与通常概念下的线程(如Windows中的线程)是不一样的,学生应能清楚区别而不会混淆;通过实验模拟进程控制块和线程控制块的数据结构、进程与线程的创建与撤销、进程与线程的状态转换。
加深理解进程和程序、进程和线程的联系与区别,理解进程及线程的重要数据结构及实现机制,熟悉进程及线程的创建、执行、阻塞、唤醒、终止等控制方法。
通过在Linux环境中的实验学习进程创建,线程共享进程中的数据,通过内核模块显示进程控制块信息,加深理解进程地址空间和进程内核结构的实现机制。
5、处理器管理和调度重点:处理器状态及其转换、特权指令与非特权指令、程序状态字;绝对时钟、间隔时钟、逻辑时钟及其实现;中断分类、中断和异常的响应及服务、中断屏蔽、中断优先级、多重中断。
处理器调度的层次;处理器调度算法选择的准则;进程/线程调度时机;低级调度的功能和类型;作业调度和低级调度算法;难点:处理器状态及其转换方式;程序状态字的作用及不同机器上的实现;中断机制、中断和异常的响应及服务;为进程建立多个逻辑时钟及逻辑时钟编程;对各种调度算法的理解并掌握其应用场合;含作业调度/进程调度/主存分配/资源分配在内,在具有相互制约的前提条件下,根据作业对资源的占用情况,计算作业流的执行过程;了解Linux 2.4调度算法、Linux2.6调度算法。
解决办法:深入理解中断和异常是激活操作系统的唯一手段,也是操作系统实现并发性的硬件基础之一的含义,操作系统是如何在中断技术支撑下,实现多道程序设计、处理器与设备的并行工作、设备与设备的并行工作、捕获异常事件并作相应处理等工作的;按中断事件的来源和实现手段划分,可把中断源分成:硬中断与软中断,结合具体操作系统(如Linux),让学生深入理解中断的定义、特性、分类、用法,理解和掌握不同类型中断/异常的成因及处理流程;时钟是操作系统进行调度工作的重要工具,通过举例说明逻辑时钟的实现原理和编程方法也是重点之一;处理器调度的目的是分配处理器,让合适的作业或进程占有执行,本知识点要让学生掌握作业/进程/线程各级调度算法、各自的功能及算法选择准则等问题。
可以根据不同调度算法画出程序运行轨迹,并计算运行调度的各种性能指标值;在操作系统中,存在许多种调度算法,有的仅适用于作业调度,有的仅适用于进程/线程调度,但大多数调度算法对两者都适用,为了避免重复,建议合并在一起介绍,再指出它们的差别;课堂上或习题课上,讲解一个较复杂的多级调度例子--包含作业调度/进程调度/主存分配/资源分配在内,在具有相互制约的前提条件下,根据作业对资源的占用情况,计算作业流的执行过程和执行结果的综合性应用题;通过实验模拟实现处理器的中断机制和处理器调度算法,统计和比较几种调度算法的性能,模拟多个进程的并发执行,加深对处理器管理和调度的理解;通过Linux实验分析Linux 2.4调度算法及其不足,并将Linux 2.6调度算法修改成随机调度算法,加深对进程调度策略和调度机制的理解。
6、同步、通信与死锁重点:程序的顺序执行与并发执行;与时间有关错误、相交和不相交并发进程;进程互斥、临界区、临界资源、竞争条件、临界区管理的实现方法(硬件设施和软件算法);进程的竞争和协作;进程同步、同步机制、用信号量和PV操作解决经典同步问题;管程的概念、特性、结构、条件变量和实现;通信机制的分类和实原理,用不同通信机制编程解决进程通信问题;死锁定义、引发原因、产生条件、死锁防止、避免、检测及解除方法。
难点:分析并发进程执行中与时间有关的错误;编写正确的临界区管理程序、判断临界区操作算法的正确性;各种同步机制的工作原理与实现;用信号量和PV操作描述进程互斥同步问题;复杂互斥与同步问题的求解;管程概念、特性、结构、条件变量、实现和应用;死锁问题中安全性序列的寻找;银行家算法执行结果的描述与判断;网间进程通信的实现;进程同步机制的实现;多核环境并发程序设计;了解Linux内核同步机制、Linux 的System v IPC同步机制。
解决办法:本知识单元从程序并发执行出现的与时间有关的错误问题出发,逐层深入、逐步展开与阐述并发问题的解决方案,自底向上构筑操作系统解决程序并发执行的手段与方法。
让学生全面理解和掌握操作系统在实现和应用两个层面的解决并发程序设计问题的途径。
学生通过学习,可以在应用程序设计的层面较好掌握并发程序设计技术,又可以在系统实现层面了解系统软件解决并发问题的基本机制;首先讨论解决进程互斥问题的临界区管理途径,即采用软件算法与硬件指令解决临界区问题;其次,引入信号量与PV操作工具,既能用来解决临界区管理问题,又能解决进程同步问题,成为解决并发程序设计问题的另一途径;第三,讨论使用管程同步工具解决并发程序设计问题的途径,使得并发程序设计从面向指令的低级程序设计向面向问题的高级程序设计转化。
讲课重点放在基于信号量和PV操作实现的霍尔管程方法,体现了操作系统并发性解决方案自底向上的构筑过程;介绍基于通信规约的进程通信工具(信号通信、管道通信、共享主存通信、消息传递通信等),使用原语实现的高级规约机制方便用户进行高级程序设计和网络程序设计,现代流行的socket通信机制乃至RPC机制都可以被认为是进程通信机制的衍生物;著名的生产者-消费者等问题是计算机操作系统中并发进程内在关系的一种抽象和一般化形式,是典型的进程同步问题,解决了这些问题就解决了一类并发进程的同步问题,这些经典例子应该讲深、讲透;死锁也是重要知识点,要结合日常生活中的死锁事例,让学生弄懂死锁概念、死锁定义、死锁原因、死锁必要条件,及死锁防止、死锁避免、死锁检测与解除方法,要求学生掌握死锁处理的相关算法,熟练运用各种方法解决死锁问题;本知识单元讲课结束后,应布置一批不同类型的进程互斥或同步类综合性应用题。