操作系统概念 Operating System Concepts
说起操作系统,我想在坐的各位同学都不会陌生。因为无论我们想用计算机干什么,首先要做的就是启动操作系统,任何软件的运行都离不开操作系统的支持。
比如大家最熟悉的就是Windows操作系统。
除了Windows操作系统,还有什么其它的操作系统?
可能有的同学还接触过Linux操作系统,Apple公司的Macintosh系统。(关于Macintosh操作系统还有一个有趣的小故事,现在我先不讲,一会儿我再讲)。
我们都知道操作系统是非常重要的, 《操作系统概念》这门课也是非常重要的。
《操作系统概念》是计算机专业的主干课,同时也是一门必修课,所以我们应该认真学习这门课。现在操作系统已经成为了一门考研统考课,所以有志于考研的同学就更应该认真学习了。
在正式开始学习这门课程之前,首先让我们针对这门课程思考3个问题。
three questions(3个问题)
What
what is the course? 这门课的主要内容是什么?
Why
why do we learn the course? 为什么要学习这门课?
How
how to learn? 如何学习这门课?
多年的学习经验让我养成了一个习惯,就是无论学什么课之前,都要先问自己3个W问题:What, Why, How。
What就是这门课的主要内容是什么?它是讲什么的?你能不能用一两句话,简明扼要地说清楚?
清楚了这门课的主要内容之后,接下来就要思考Why,就是为什么要学这门课。我记得有一句名言叫“兴趣是最好的老师”,如果连为什么要学这门课都搞不清楚,恐怕你很难对这门课发生兴趣,那么学习起来就会非常的痛苦。
当我们为学习一门课程找到了原因之后,剩下的就是问问自已HOW了,也就是如何学习这门课。学习是一项讲究方法的工作,如果掌握了正确的学习方法,你就会事半功倍,否则可能就会落个费力不讨好。
下面,我们就针对操作系统这门课,一起思考一下这3个问题。
What is the course?
操作系统的基本原理、组成结构、设计方法和实现技术。
- 进程管理 (Process Management)
- 内存管理 (Memory Management)
- 存储管理 (Storage Management)
- I/O设备 (I/O System)
操作系统概念是一门涉及较多硬件知识的计算机系统软件课程,在计算机的软、硬件课程设置上,起着承上启下的作用。这门课不是给大家讲解操作系统如何使用的一门课,而是一门关于如何设计和实现操作系统的课程。从这门课,我们可以学到操作系统的基本原理、组成结构、设计方法和实现技术。具体包括进程管理、内存管理、磁盘管理和输入输出设备的管理。
- Process:过程,进程,对CPU的调度和分配。
- Memory:记忆,内存。
- I/O:输入输出。
Why to learn?
1、设计操作系统或者修改现有的系统。
2、加深对使用的OS的理解,有利于深入编程。
用户为了开发应用程序必须与操作系统打交道。
3、编程时借鉴操作系统的设计思想和算法。
操作系统中所用的许多概念和技巧可以推广应用到其他领域。
4、选择购买操作系统。
无论将来是否从事操作系统的开发工作,都可以从操作系统概念这门课中受益匪浅!
下面,分析一下,同学们学习操作系统的现实意义。
1、设计操作系统或者修改现有的系统
现有的操作系统,例如微软的Windows还有待于进一步完善,通过微软不断发布的补丁就可以看到这点。其实unix和linux也是在不断地修正自身的缺陷,或者为了满足新的需求而进行升级。北京时间2009年7月8日,Google正式宣布将开发操作系统Chrome,这意味着Google与微软之间的竞争已升级到了白热化阶段。因此,设计一个新的操作系统或者修改现有的操作系统就要求大量的,不仅掌握基本编程技术,还要精通操作系统原理的高级工程师来完成这项工作。
2、加深对使用的OS的理解,有利于深入编程
那么有的同学可能会问了,如果自己毕业后并不是进入微软或google这样的操作系统开发公司,那么学习操作系统对自己今后的工作是不是就没有用处呢?的确,很多同学毕业后,主要从事的工作还是在操作系统的基础上开发应用软件系统,而不是直接修改操作系统本身。但是开发应用软件系统,也有一个层次之分。深入地编程,往往是要与操作系统直接打交道的,也就是利用操作系统提供的API,调用计算机的底层功能,实现高级的软件功能。 举例:陈亮,月薪13K,赛门铁克 11K(Nod)。
3、编程时借鉴操作系统的设计思想和算法
另外,我们知道,现在的集成开发环境已经将底层的编程技术封装得很好了。即使不是计算机科班出身的同学,只要是对软件编程感兴趣的,也可以编写出自己需要的应用程序。那么,我们这些科班出身的同学的优势在哪儿呢?如果,对于同样的一个软件功能,我们能用更短的程序实现,或者我们的程序所采用的算法复杂度更低,或者具有更好的可扩展性,那么我们就更有竞争力,就更有可能在将来的工作竞聘中胜出!操作系统实际上也是一个软件系统,只是这个软件系统特别的复杂,所以在开发过程中隔入很多经典的设计思想和算法,如果能在我们编程时借鉴这些经典的思想和算法,就能编写出比别人优秀的程序。
因此,无论你将来是否从事操作系统的开发工作,都可以从操作系统这门课中受益匪浅。
Your goals
基 本 目 标
1、对操作系统的基本概念、基本结构及运行环境有深入的认识;
2、深入到操作系统的内部,理解并掌握操作系统的基本原理、设计方法及实现技术;
高 级 目 标
3、系统级编程能力的提高;
4、思维方式的学习,权衡(Trade Off);
5、了解操作系统的演化过程、发展研究动向。
当我们知道了为什么要学习这门课之后呢,就应该明确自己的学习目标。我给大家设立了两个级别的目标:基本目标和高级目标。基本目标包括两条:
1、对操作系统的基本概念、基本结构及运行环境有深入的认识;
2、深入到操作系统的内部,理解并掌握操作系统的基本原理、设计方法及实现技术;
实际上,这两条基本目标就是要求我们对课程的主要内容熟练掌握。当然这也是我们最后考试的主要考查内容。
除了这两条基本目标以外,同学们还应该给自己设立更高级的学习目标。一个是提高系统级编程能力。前面我们已经讲过了什么叫“系统级编程能力”,就是深入编程的能力。
与计算机领域的其他发展(如硬件系统、其他软件)一样,操作系统的每一步发展都是权衡的结果:
- 可能性与必要性的权衡
- 性能与代价的权衡
- 安全与效率的权衡
如果有的同学通过本课的学习,对操作系统的研究产生了兴趣,立志于从事操作系统的研发工作,还应该通过本课程的学习了解操作系统的演化过程和发展研究动向。如果谁能达到这个目标,老师就很欣慰了。
操作系统概念课程的特点:
- 实践性强(从实践总结出原理);
- 抽象层次高;
- 概念多、涉及面广:涉及到计算机科学的很多领域(计算机体系结构/硬件、软件设计、程序设计语言、数据结构、算法、网络)。
当我们明确这门课的主要内容,以及为什么要学习这门课之后,接下来就要针对操作系统概念这门课,采用正确的学习方法。那么,这门课程有什么特点呢?
1、实践性强。因为操作系统的基本原理都是从实践中总结出来的,所以呢,操作系统是一门实践性很强的课程,它不仅要求学生掌握操作系统的理论知识,也要求培养学生实际动手能力。
2、抽象层次高。和编程语言的学习相比,操作系统概念具有较高的抽象层次。我们学习C语言时,几乎每学一条语句就能够在计算机上验证,如果只学一条Print语句,也能实现HelloWorld的功能。但是操作系统中的很多概念和原理就很难进行直观的验证了。
3、概念多、涉及面广:涉及到计算机科学的很多领域(计算机体系结构/硬件、软件设计、程序设计语言、数据结构、算法、网络)
因此,学好操作系统概念并不是一件轻松的事。
How to learn?那么我们应该如何把它学好呢?
- 按时上课,认真听讲,理解原理;
- 阅读参考书,扩展视野;
- 阅读代码,分析实例;
- 上机实践;
- 记笔记,思考,讨论,提问;
- I hear and I forget, I see and I remember, I do and I understand.
- Learn OS concepts by coding them!
教材
《操作系统概念 第七版》(影印版)Operating System Concepts,Abraham SilberschatZ etc.编著,高等教育出版社,2007年3月
参考书目
《计算机操作系统 第三版》 汤小丹、梁红兵 哲凤屏、汤子瀛等,西安电子科技大学出版社,2007年;
《操作系统—内核与设计原理》 William Stallings,电子工业出版社,2003年3月;
《现代操作系统》 Andrew S.Tanenbaum,机械工业出版社,1999年11月;
《操作系统教程》 孟静,高等教育出版社,2001年5月;
=======================================================
以上内容是引论;以下内容是第一章的开始,即绪论。
=======================================================
Chapter 1 Introduction(第1章 绪论)
Chapter1 Introduction
操作系统的概念(What Is an Operating System?) 批处理操作系统(Batch Systems) 分时操作系统(Time-Sharing Systems) 个人操作系统(Personal-Computer Systems) 并行操作系统(Parallel Systems) 实时操作系统(Real-Time Systems) 分布式操作系统(Distributed Systems)