这个阶段的课程讲授操作系统的原理和Linux系统给应用层提供的C编程接口。操作系统通过系统调用提供的抽象层是一切中间层和应用软件的根本。
课程建设思路-传统误区
长久以来这个阶段的课程是按照《UNIX环境高级编程》这本书进行讲解的。这个环节的课程甚至曾因此被称为"高级编程"。但是与此同时,这个环节的教学思路也被这本书束缚住了。操作系统底层提供出来的编程接口是复杂的。学员在这个阶段的学习往往会陷入到这种复杂性的泥潭中。一般性的编程接口需要照顾到各种情况,所以比较复杂。但在更高的软件层次会有简化的接口出现。这是因为在更高的软件层次,问题被具体化了,自然可以把与问题本身无关的接口或解决这类问题的固定代码隐藏起来。课时有限,教师在有限时间内在甚至无法全面地讲授Linux所提供的全部系统调用。而追求系统调用细节的结果就是课程被琐碎的复杂性所累,从而导致学员无法在遇到实际问题的时候利用这些知识。
课程改革
我们对课程做了如下改进:首先在全课程体系中重新加入了操作系统理论。不论是在本环节,还是整个体系的其它环节,课程都会加入深入探讨操作系统的理论话题。课程不再把精力浪费在琐碎的细节上,转而着重讲授操作系统提供的关键性功能以及这些功能的编程模型。在全课程序列的其它环节也加入了配合环节:通过在全课程体系的各个部分讲述操作系统相关机制的底层实现,让学员加深对关键知识的认识;通过在中间层阶段讲述高层次的抽象模型,让学员从本质上理解操作系统提供的编程模型。
课程结构-操作系统原理
进程概念 线程概念 异步和并发 死锁 处理器调度 虚拟内存 文件系统 TCP/IP协议 分布式系统
读者可以在任何一本操作系统的书籍上查到上述知识。但是本课程环节的重点在于把这些知识和实际的操作系统编程接口结合讲授。
系统调用和编程模型
进程控制 进程间通信 文件系统接口 多线程设计 套接字编程 文件IO接口
这个环节学员会接触到各个门类的Linux系统调用。这是在操作系统下深入开发应用程序的基础。课程在这个阶段讲授IO模型、进程间通信模型、并发设计模型和客户机服务器模型这几种编程模型。课程会集中辨析在每个模型中的不同设计手段的适用性问题。比如在进程间通信模型中,课程会析析各种机制(信号、管道、套接字、共享内存)之间的差别;在并发设计模型中对比线程并发和进程并发各自的优缺点;在客户机服务器模型的环节中讨论各种不同负载形态对服务器设计的影响;在IO模型中讲解同步阻塞、异步IO和多路复用等技术的优劣。
跨阶段配合
异步执行模型 虚拟文件系统 阻塞机制 中间层接口 进程调度器 并发服务器
操作系统是软件体系结构的核心,本阶段的理论模型和编程接口和其它环节是紧密结合的。跨阶段配合的课程就显得尤为重要。在体系结构阶段的课程会在讲授中断处理的时候讲授一般性的异步执行绪理论,这是操作系统课程中信号和异步IO的基础。在设备驱动阶段我们会完整讲述虚拟文件系统中间层的实现细节,通过VFS和字符设备的学习,学员能够彻底理解文件和文件系统的操作接口。通过讲授阻塞和非阻塞IO和进程调度,让学生彻底明白进程的调度过程。课程通过中间层提供的明确而清晰的设计模型把学员从复杂的底层系统调用中解放出来。课程通过讲解服务器端脚本技术向学员展示高并发事件服务器的核心模型。 |