一、操作系统:计算机的灵魂

操作系统是控制应用程序执行的程序(计算机管理控制程序),是应用程序和计算机间的接口。

操作系统的目标

  建立 抽象(abstraction) 让系统方便、易于使用,并提供 高性能(performance) 即 最小化系统开销(minimize the overhead),尽可能减少额外的 时间、空间 。
  为每个应用程序间提供 保护(protection),保证程序之间或与操作系统相互 隔离(isolation),互不干扰的运行。由于对 可靠性(reliability)、安全性(security) 的要求,操作系统会更加复杂。力求用尽可能少的代码实现更多的功能,构建简洁可靠的操作系统是一个相当大的挑战。

如上目标,总结为以下三点:

① 方便
  使计算机更加易于使用。
② 有效
  使计算机系统资源更有效地使用。
③ 易扩展
  在妨碍服务的情况下,便于开发、测试、引入新的系统功能。

常见的操作系统

操作系统族谱

二、操作系统发展史

对于用户来说,操作系统是一个控制软件,了解操作系统的发展历程,有助于我们理解操作系统的设计。

操作系统并不是与计算机硬件一起诞生的,它是在人们使用计算机的过程中,为了满足两大需求:提高资源利用率、增强计算机系统性能,伴随着计算机技术本身及其应用的日益发展,而逐步地形成和完善起来的。

1、第一阶段:串行处理

  • 20世纪40年代末至50年代中期,程序员需要直接将单个程序(被称为作业)通过输入设备(纸带、磁带、卡片阅读机)载入计算机。
  • 程序出现错误时,显示对应错误的指示灯。
  • 程序正常执行完成后,输出结果出现在打印机中。

大多数装置都使用拷贝登记表来预定时间,按照顺序依次输入相关程序,计算机按照用户放入的顺序依次执行。

如此操作模式被称为串行,用户必须按照顺序访问计算机,如若出错,必须重新从头执行

这样就暴露除了两大问题:

  • 1、调度失策:
    ① 机器提早闲置,造成资源浪费(预定2小时却在1小时内完成任务)
    ② 机器终止未完成任务,造成任务的不完整(预定30分钟,却未能执行完任务,可能实际需要更长的时间)
  • 2、准备耗时:
    程序会向内存中加载编译器和高级语言程序(源程序),保存编译好的程序(目标程序),然后加载目标程序公共函数进行链接。每个步骤都要准备磁带 / 卡片组,需耗费大量的时间。

2、第二阶段:简单批处理系统

由于饱受诟病的调度问题与准备耗时长,加之早期计算机的昂贵,因此如何最大限度利用处理器,被提上了日程。

为提高利用率,人们尝试开发一种名为 批处理操作系统 的管理软件,其本质是一种监控程序(monitor)

用户不再直接与访问硬件,而是将作业提交给计算机操作员,他将作业按顺序组织,并由监控程序使用,程序执行完成后,控制权 返回至 监控程序,监控程序 自动加载下一个程序,这种计算模式被称为批处理(batch processing),而这时的操作系统也只是一组常用的函数库,简单的完成相应的工作而已。

两角度分析问题:

监控程序角度处理器角度
监控程序常驻于内存并可执行(常驻监控程序 resident monitor)处理器执行内存中存储监控程序中的指令,这些指令读入下一个作业并存储值内存中的另一部分。
  • 控制权交给作业:处理器执读取、执行用户程序中的指令。
  • 控制权返回监控程序:处理器读取、执行监控程序中的指令。‘

由此,得出结论,批处理操作系统(监控程序),本质上只是一个简单程序。它依赖于处理器可以对内存的不同部分取指令的能力,交替 获取 / 释放控制权。而监控程序的调度依靠作业控制语言(Job Control Language),用于为监控程序提供指令。

  • 而这种只有一个单独程序执行的情况,我们称为单道程序设计(uniprogramming)

3、第三阶段:多道批处理系统

简单批处理操作系统提供的自动作业序列,处理器仍然经常处于空闲状态,问题在于 I/O 设备(输入输出设备)相对于处理器而言太慢。
多道程序设计

  • 若内存空间可容纳 操作系统若干个用户程序,那么处理器可在等待I/O操作时,在程序间进行切换,这种处理称为多道程序设计(multiprogramming)多任务处理(multitasking),这种设计减少了等待的时间,提高了运行速度,也引入了并发(concurrent)问题。
  • 因需多个作业需保存在内存中,因此引入了内存管理的概念,何时运行哪个程序,则依靠于特定的调度算法

操作系统内存管理的5项职责:

职责说明
进程隔离操作系统必须保护独立进程,防止互相干扰各自的存储空间(数据、指令)
自动分配和管理程序应更具需要在内存中自动动态分配空间
支持模块化程序设计程序员能定义程序模块,并动态创建、销毁模块,动态改变模块大小
保护和访问控制程序不可随意访问内存,应避免分享所导致程序访问其他程序或操作系统的内存空间
长期存储保证部分数据写入磁盘,长时间存储

4、第四阶段:分时系统

使用多道程序设计,可使批处理(batch processing)更加有效,但许多作业需要提供一种用户直接于计算机交互的模式。

  • 多道程序设计允许处理器同时处理多个批作业,而处理多个交互作业(即多个用户分享处理器时间),该技术称为分时(time sharing)

在分时系统中,多个用户可以通过终端同时访问系统 ,由操作系统控制每个用户程序在很短的时间交替运行。

  • 比如,系统时钟以约0.2s一个的速度产生中断,在每个时钟时钟中断处,操作系统恢复控制权,并将处理器分配给另一个用户进程。

因此,在固定的时间间隔内,当前用户进程被抢占(preempted),另一个用户进程被载入,这项技术称为时间片(time slice)技术,每个进程公平竞争,下一步究竟选择哪个进程取决于短期调度器分派器

  • 常用的策略是,依次给队列中的每个进程分配一定的时间,这称为时间片轮转(round-robin)技术,时间片轮转技术使用了一个环形队列。除此以外,还有按照优先级调度的策略。

三、现代操作系统特征

1、微内核体系

微内核设计,即尽可能将内核功能转移到用户空间,学术界存在一种 更加极端的架构外核(exokernel)

  • 时至今日,大多操作系统都只有一个单体内核(monolithic kernel),操作系统大多数功能都由它来提供。

  • 微内核体系结构(microkernel architecture)只给内核分配一些最基本的功能,包括地址空间进程间通信(Inter Process Communication , IPC)基本调度,其余服务均运行于运行模式。

2、多线程

多线程技术(multithreading):将执行一个应用程序的进程,划分为可以同时运行的多个线程。

  • 线程(Thread):可分配的工作单元,也称为轻量级进程(Light Weight Process)
  • 进程(Process):一个 / 多个线程和相关系统资源。

多线程对执行许多本质上独立、不需要串行处理的应用程序很有帮助。且线程切换开销远小于进程切换。

  • 线程应用:监听、处理很多客户请求数据的服务器(为每个客户分配线程)

3、对称多处理

对称多处理(Symmetric MultiProcessing, SMP),可调度进程 / 线程 到所有的处理器上运行。

对称多处理体系结构优势:

优势说明
性能性能更佳,多个进程可分别在不同的处理器上同时运行。
可用性所有处理器可执行相同功能,单个处理器失效,降低部分性能,系统可继续运行。
增量增长用户可添加额外处理器增强功能。
可扩展性根据系统配置处理器数量,提供不同产品。
  • 多线程对称多处理 为两个独立的概念,它们相辅相成,一起使用更加有效。

4、分布式操作系统

分布式操作系统(distributed operating system),使用户产生错觉,仿佛具有单一的内存、外存。

5、面向对象设计

面向对象设计(object-orient design),用于给小内核增加模块化的扩展。在操作系统一级,基于对象的结构可使程序员定制操作系统,而不会破坏系统的完整性。

Logo

鸿蒙生态一站式服务平台。

更多推荐