操作系统概述

引言

课程概述

课程信息

Wikihttp://os.cs.tsinghua.edu.cn/oscourse/OS2015
学堂在线https://www.xuetangx.com/courses/TsinghuaX/30240243X/2015T1/about
在线交流https://piazza.com/tsinghua.edu.cn/spring2015/30240243x/home

教学团队

姓名邮箱角色
向勇xyong@tsinghua.edu.cn xyongcn@gmail.com教师
陈渝yuchen@mail.tsinghua.edu.cn chyyuu@gmail.com教师
茅俊杰eternal.n08@gmail.com助教
何嘉权objectkuan@gmail.com助教
曹睿东crdfrank@gmail.com助教
武祥晋taccoraw@gmail.com助教
辛云星xinyunxing0001@163.com助教
刘聪gnocuil@gmail.com助教
常铖myairia@gmail.com助教
张禹zhangrain911@163.com技术支持
郭旭ggxx120@gmail.com技术支持

预备知识

  • 计算机结构原理
  • C与汇编程序设计
  • 数据结构

这门课是计算机专业的专业基础课,是一门工作量很大、很综合的课程,需要上面这些先修课程作为铺垫。

由于操作系统要与硬件打交道,所以需要大家了解计算机系统结构,包括CPU的组成、总线和中断等等内容都是在写操作系统内核代码的时候所需要的;操作系统的编程语言是C语言汇编,所以需要了解C如何来表达想写的算法,使用汇编来对硬件设备进行控制;数据结构在操作系统涉及很多的,例如树、表、链表等等,我们会在上面进行插入、删除、修改和检索。所以我们需要把这些课程所学的知识结合起来,为上层的应用提供一个最基本的操作系统环境。

参考教材

本课程无固定OS教材,可参考的教材如下:

什么是操作系统

什么是操作系统?它是一个程序,它和其他程序是什么关系?然后它有些什么样的组成、它有些什么样的特征?

操作系统定义

  • 没有公认的精确定义
  • 操作系统是一个控制程序
    • 一个系统软件
    • 控制程序执行过程,防止错误和计算机的不当使用
    • 执行用户程序,给用户程序提供各种服务
    • 方便用户使用计算机系统

操作系统实际上没有一个明确的定义,比如哪些功能、哪些应用软件或硬件算是操作系统里的。实际上随着操作系统的发展,操作系统内涵实际上是在不断变化的。我们现在给操作系统是给出一个解释:操作系统是一个控制程序

运行环境

它是一个系统软件,它给用户提供一个运行环境,用户使用计算机系统的时候提供所需要的服务;如果说用户的使用不当,那么这个时候他需要进行项目的一些错误处理;如果说用户在使用过程中是否可以给予一些协助。比如在输入一条命令的时候输入半截忘记了后面是什么内容,这个时候是否可以给出一些提示。

资源管理器

操作系统也是一个资源管理器。实际上就是说我们计算机硬件和应用程序之间用操作系统来作为它的一个中间层,为计算机应用程序来管理所有的计算机软硬件资源以协调于各个应用程序,在使用这些资源的时候能够友好地使用下去。具体说来就是如果所有的资源都由自己专用,那么使用资源肯定会没问题,但是如果说多个应用程序交替使用,那么这个时候资源如何使用就会有一些问题,比如内存,你在用我也在用,这时候两个应用之间各分配多少呢?需要如果和分配的结果不一致呢?对于操作系统,此时就需要做一个高效的判断能够按照应用程序的需要给它分配合理的资源,这是我们操作系统提供的高效使用所要达到的目标

操作系统的地位

操作系统的表现形式可能多种多样,比如windows、Linux的表现是完全不一样的,但是从操作系统内部结构上来讲,它基本上可以分成这样几个部分:

  • 应用系统 – 用户
  • 系统应用 – 应用开发者
  • 操作系统 – 应用开发者
  • 计算机硬件 – 系统设计者

操作系统实际上就是在硬件上对上面的应用进行一层隔离,提供我们通常所见的逻辑和资源,比如进程、文件、地址空间,这都是在操作系统之后给用户程序看到的情况。

操作系统软件的分类

  • 软件
    • 应用软件
    • 系统软件
      • 系统应用
      • 操作系统
        • 命令行
        • 内核

在我们软件划分当中我们可以把软件划分为应用软件和系统软件;系统软件我们可以把它分成系统应用和操作系统;而在操作系统里面核心内容是我们的命令行和内核。

操作系统软件的组成

  • 命令行接口 Shell

    • 通过键盘操纵
    • 方便用户进行命令输入
  • 图形用户接口 GUI

    • WIMP:视窗 Window、图标 Icon、选单 Menu、指标 Pointer
    • 直接操作和所见即所得
  • 操作系统内核 Kernel

    • 执行各种资源管理等功能

内核实现操作系统资源的管理功能,操作系统之上的用要使用实际上我们提供的两种命令接口Shell、GUI,实际上我们是把命令转换成我们图形用户接口的一些基本读数。

操作系统是我们整个计算机系统里的核心软件,外边构造提供对外借口和一些应用,用户就可以来使用系统所提供的服务了。

操作系统内核特征
并发

计算机系统中同时存在多个运行的程序,需要OS管理和调度。具体指我们如果多个应用程序交替运行,我需要知道当前每一个应用都执行到什么位置、当前正在执行的是哪个应用……都在用操作系统来维护。

共享

多个应用并发运行的时候宏观上要体现出它们同时在访问资源的情况,而微观上要实现它们的互斥访问。比如两个应用同时访问内存,这个时候我每个应用需要知道它访问是哪个,另一个应用访问的是哪个,需要保护的内存资源不能让另外一个应用去访问;微观上我需要对它做很好的隔离,我们知道在数据总线上任何一个时刻只有一个应用去访问存储单元,这就是微观上的互斥。

虚拟

通过交替运行使每一个用户感觉到整个计算机都是由它一个用户在专门提供服务。实际上就是由操作系统在每个应用执行的时候这种频率极高的交替让用户在用的时候感觉不太出来这台机器还有其它用户在用(负载大到一定程度,用户是可以感觉到的)。

异步

程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知。只要运行环境相同,OS需要保证程序运行的结果也要相同。

操作系统学习动机与方法论

  • 综合课程

    • 程序设计语言
    • 数据结构
    • 算法
    • 计算机体系结构
  • 材料

    操作系统概念和原理、源代码

  • 技能

    操作系统的设计和实现

有人会说现在已经有了很好的操作系统,比如Windows、Linux等,将来的工作也不会写操作系统,为什么还要学操作系统呢?我们研究操作系统是要实现需求,而已有的操作系统不能解决所有的事,无法满足更高的需求。

操作系统软件的地位

  • 计算机系统的基本组成部分
  • 由硬件的发展和应用需求所驱动
  • 学术和工业的持续推进

操作系统是计算机科学研究的基石之一,比如微软最赚钱的不是操作系统软件,而是上面的应用。但它投入大量的精力去研究和改进操作系统,足以证明操作系统在其中的地位。

操作系统研究

随着技术的发展和时代的变化,操作系统的研究团队也在不断变化:

  • 旧时:Xerox(PARC)、IBM、DEC(SRC)、Bell Labs
  • 现代:Mincrosoft、Google、Yahoo、IBM、HP、Sun、Intel、VMware、Amazon…
  • 国内:阿里巴巴、百度、华为…
  • 研究协会:ACM SIGOPS、USENIX
顶级会议
  • ACM操作系统原理研讨会(SOSP)

    • ACM SIGOPS
    • 每两年(奇数:1967-)
    • ~20论文
  • USENIX操作系统设计和实现研讨会(OSDI)

    • USENIX
    • 每两年(偶数:1994-)
    • ~20论文
影响论文
  • SIGOPS Hall-of-Fame Awards

    • 论文必须发表在同行评议的文献中至少十年
    • 到目前为止有三十多篇论文获奖
  • 假设你想做操作系统研究

如何学习操作系统

“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之;学至于行之而止矣。”
–荀子《儒效篇》

“天才是1%的灵感加上99%的汗水”
– Thomas Edison

操作系统实例

最早的操作系统是在上世纪60年代由UNIX开始的,延伸出多种系统如BSD系列,现在大家见到的比较多的MacOS的前身也是UNIX。

而到了90年代一个名叫Linux的大学生开始做Linux,他想做一个完全由自己掌控的系统。从它开始,一种新的开发模式诞生了,下面这些是Linux的延伸:

Liunx以很好的开放性为核心思路,获得了巨大的关注与发展。而Windows系统则是完全不同的一类做法,它以专用和封闭的形式来发行操作系统。Windows从DOS系统开始,直至3.0以图形用户接口和应用系统来得到认可。

我们可以看到从操作系统的角度来讲有两种完全不同的风格:开放和封闭。这两种类型我们很难说孰优孰劣,各有各的优缺点。

操作系统演变

在历史上操作系统的技术它到底有些什么样的变化呢?

操作系统为什么改变

对于操作系统来说它

操作系统结构

Acknowledgement
Charl- x