点击查看【bilibili】

操作系统 OS

起源

  • 1940,1950 年代的电脑,每次只能运行一个程序,程序员在打孔纸卡上写程序,然后拿到一个计算机房间, 交给操作员,等计算机空下来了,操作员会把程序放入,然后运行,输出结果,停机。
  • 当时计算机慢,运行一个程序通常要几小时,几天甚至几周,这种手动放程序的做法可以接受。
  • 但随着计算机硬件的爆炸式增长,计算机运行速度越来越快,呈指数级增长,手动放程序的时间比程序运行时间还长。
  • 因此需要一种方式,让计算机自动运作,于是操作系统诞生了

定义和作用

  • 操作系统也是程序,一般是开机第一个启动的程序,其他所有程序都由操作系统启动
  • 操作系统有操作硬件的特殊权限,可以运行和管理其它程序

批处理 batch processing

定义:当计算机运行完一个程序,会自动加载运行下一个程序。

设备驱动程序 device drivers

起源:计算机变得越来便宜,越来越普及,也出现了很多不同的计算机配置(CPU、外部设备等)。程序员写程序要处理不同的硬件细节,很痛苦。为了让程序员写软件更容易,由操作系统负责提供 API 来抽象硬件,隐藏复杂度和实现细节。
操作系统的功能

  • 操作系统充当软件和硬件之间的媒介
  • 更具体地说,操作系统提供 API 来抽象硬件,叫”设备驱动程序“。程序员只需调用相应的标准化接口,就能和外部设备进行交互,而不用管实现的细节。

多任务处理 multitasking

起源:计算机处理器的运行速度越来越快,因此往往处理器空闲,等待速度慢的机械设备(比如打印机和读卡器等外部设备),使得程序阻塞在 I/O 上。需要一种方式来最大限度地利用计算机性能。
实例

  • 50年代后期,英国曼彻斯特大学开始研发世界上第一台超级计算机,Atlas。他们开发了一个叫 Atlas Supervisor 的程序(操作系统)来最大限度地利用这台超级计算机。
  • 这个操作系统不仅能像早期的 批处理操作系统 一样自动加载程序,而且能通过调度实现在单个 CPU 上同时运行多个程序,即多任务处理
  • 这个操作系统运行多个程序的例子:
    • 一个游戏程序正在运行,游戏结束要打印游戏最高分,打印会调用外部设备(打印机),外部设备运行速度比 CPU 慢很多,因此将该程序休眠(休眠时该程序进行 I/O 操作,即打印,但不分配 CPU,CPU运行另外的程序)
    • CPU 去运行另一个程序
    • 游戏程序打印完成,操作系统将该程序标记为可继续执行。之后的某个时刻,操作系统会再分配 CPU 给该游戏程序,继续运行打印之后的代码。
    • 该超算配备了4台纸带读取器,4台纸带打孔机,8个磁带驱动器,因此可以使得多个程序可以同时运行,在单个 CPU 上共享时间

虚拟内存 virtual memory

起源

  • 操作系统同时运行多个程序(多任务处理)会导致一个问题:每个程序都会占一些内存,但是当切换到另一个程序时,我们不能丢失数据
  • 解决办法是 给每个程序分配专属内存块。但是又有一个问题,一个程序可能会分配到地址不连续的内存块,程序员跟踪不连续的地址很困难,因此可以提升一层抽象,使用虚拟内存来隐藏实际物理地址的复杂性。

功能:操作系统将实际的内存地址虚拟化,程序可以假定内存总是从地址0开始,且地址连续
优点

  • 这种机制使程序的内存大小可以灵活增减,即”动态内存分配“,这种简化为操作系统同时运行多个程序提供了极大的灵活性
  • 给程序分配专用的内存范围,程序与程序之间的内存相互隔离,如果一个程序出错(例如开始写乱七八糟的数据),只会捣乱自己的内存,而不影响其他程序,即“内存保护”。也可以防止病毒等恶意软件。

多用户分时操作系统

定义:把计算机主机与许多终端用户连接起来,分时操作系统将系统资源(CPU 时间与内存空间等)按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于切换时间间隔很短,每个用户的感觉就像他独占计算机一样
起源:到 1970 年代,计算机足够快且便宜,大学会买电脑让学生用,多个用户用”终端”来访问计算机。”终端”只是键盘+屏幕,连到主计算机,终端本身没有处理能力。
功能:多用户分时操作系统不但要处理多个程序,还要处理多个用户,确保其中一个终端的程序不会占满计算机资源,每个用户只能用一小部分处理器、内存等计算机资源。
实例:Multics

  • Multics 是第一个,从设计时就考虑到安全的操作系统(一半代码都是错误恢复代码)
  • 这导致 Multics 的复杂度超过当时的平均水准,操作系统会占大约 1 Mb 内存,在当时大约是一半的内存
  • 过度设计,商业上失败

image.png

Unix

设计理念:抛弃 Multics 的过度设计,将操作系统分成两部分:

  • 内核:操作系统的核心功能,如内存管理,多任务和输入/输出处理等
  • 其他工具:程序和运行库等,虽然是有用的工具,但不是内核的部分

缺点

  • 紧凑的内核 意味着功能没有那么全面
  • 如果有错误发生,就让内核”恐慌”(panic),机器崩溃,需重启电脑解决

发展:1970~80年代最流行的操作系统之一

MS-DOS

起源

  • 计算机价格下降,出现个人电脑或家庭电脑,这些电脑比大型主机简单得多,操作系统也得简单
  • 1981 年发布,成为早期家用电脑最受欢迎的操作系统

缺点

  • 缺少”多任务”和”保护内存”这样功能,程序经常使系统崩溃,要求用户重启

后续操作系统

  • 早期 Windows:依旧缺乏 内存保护,当程序行为不当时,就会”蓝屏
  • 新版 Windows:有更好的保护,不会经常崩溃
  • 现代操作系统:Mac OS X,Windows 10,Linux,iOS 和 Android
    • 操作系统有 多任务,虚拟内存, 内存保护 等功能,可以同时运行多个程序。