引言
出于三个原因,近期有一段时间没怎么写文章了。一、前段时间公司人员变动比较大,工作任务较为繁忙;二、家庭生活中有一些事需要处理;三、最近集中时间学习了一些与 iOS 开发并无直接关系的知识,如:操作系统、数据库系统、计算机组织和结构、设计模式。上述四个方向的知识点,一两个月的时间也知识了解了一些简单的皮毛,没有个一年半载的怕是只能了解各大概。上述四个方向的知识点,设计模式算是整体过了一遍,操作系统的知识看了不少,其它两面也就简单看了一丁点。计划近期抽出一些时间,将之前看的操作系统相关知识整理一下,写作一系列关于操作系统知识的文章。
本篇文章主要讲述一些操作系统的基础知识。
- 什么是操作系统
- 操作系统发展过程
- 操作系统类型
- 操作系统的操作和功能
- 操作系统结构
- 虚拟机
一、什么是操作系统
1.1 操作系统不可或缺
操作系统的最底层是硬件,最上层是用户。如果没有操作系统,程序将无法运行。操作系统作为计算机最底层的软件,是应用程序的基本支撑环境,不可或缺。
1.2 操作系统目标
操作系统的核心目标是运行程序,其次是为了更高效实用计算机,更方便用户使用计算机。早期是为了高效,目前是为了方便用户使用。
1.3 操作系统定义
目前很难明确定义操作系统。存在两种观点:
- 1.当你预定一个操作系统时,零售商所给的所有东西就是操作系统。
- 2.内核才是操作系统。内核是一直运行在计算机上的程序,内核不运行则计算机无法运行。
观点 1 最大化了操作系统,如内置在操作系统的软件 IE 浏览器实际不应该算是操作系统中的一部分;而观点 2 则细化了操作系统定义,仅仅有内核操作系统不足以运行起来。
1.4 现代计算机系统
主要有三部分组成:一个或多个CPU(也称核)和内存、若干通过总线相连接的设备控制器和 I/O 设备、总线。
CPU从内存中读取指令和数据,并执行指令,也就是运行程序;而各个 I/O 设备则由各自的控制器控制。每个控制器相当于小型化的处理器,只不过该处理器只能负责特定设备的运行。所以CPU和设备控制器可并行运行,并竞争内存。
接下来看看CPU通过设备控制器控制设备的过程。在此之前要知道每个设备控制器都有一个本地缓冲,CPU在内存和缓冲之间传输数据,I/O 控制器从设备到缓存之间传输数据(如图一)。举一个从磁盘读取数据的例子,具体控制过程结合图二。
- 1.CPU 通过总线发出 I/O 指令给磁盘控制器。
- 2.此时CPU可以去执行其他进程上的指令,而磁盘控制器在收到指令后从磁盘控制器中读取数据。
- 3.磁盘将数据传送到磁盘控制器的缓冲区中。
- 4.磁盘控制器通知 CPU 数据已经读取好了,触发CPU中断。
- 5.CPU 响应中断,并将控制器缓冲区中的数据读入到内存中。
上述过程中CPU和控制器是可以并行执行的,磁盘控制器在读入数据的同时,CPU可以执行其他指令。
1.5 中断
中断是指当出现需要时,CPU暂时停止当前进程的执行,转而执行处理新情况的中断处理程序。当执行完该中断处理程序后,则重新从刚才停下的位置继续当前进程的执行。
为了区分不同的中断,每个设备有自己的中断号。系统有 0--255 个中断。系统中有一张中断向量表,用于存放 256 个中断的中断服务程序入口地址。每个入口地址对应一段代码,即中断服务程序。中断需要 CPU 的支持,一般 CPU 至少有一个引脚用于接收中断。
二、操作系统发展过程
2.1 人工操作
由用户采用人工操作方式直接使用硬件系统。即由程序员将事先已穿孔(对应程序和数据)的纸带装入纸带输入机,将程序和数据输入到计算机,再启动计算机。程序运行完毕取走结果之后,下一个用户才能使用。
2.2 简单批处理(单道程序设计)
简单批处理系统的核心是一个常驻监控程序,负责调度作业运行,自动从一个运行完的作业切换到下一个作业。
2.3 多道程序设计
当内存中仅有一道程序时,每当程序在运行中发出 I/O 请求后,CPU 将会空闲下来,等待 I/O 操作完成后 CPU 才能继续运行,由此可见 CPU 的利用率显著降低。因此就出现了多道程序设计。在引入多道程序设计技术后,由于内存中同时装有若干道程序,可以交替运行。这样,当正在运行的程序因为 I/O 而暂停执行,系统可调度另一道程序运行,从而使CPU和I/O操作并行,是CPU处于忙碌状态,提高 CPU 利用率。
额外说明下,并行是指两个或者多个作业在同一时刻运行;并发是指两个或多个作业在同一时间间隔内依次运行。随着多核处理器的发展,实际中对并行和并发不做严格区分。
2.4 分时
早期系统作业属于批处理作业,无需人机交互。后来为了实现实时人机交互作业(交互作业要求响应时间短),便出现了分时系统。在一段时间内,每个作业依次轮流运行一个时间片。这样可以使得每个作业都获得较短的响应时间,从而满足交互作业的要求。遵循分时策略的操作系统就是分时系统。单位时间内,每个用户获得一个时间片并运行,这样每个用户会感觉自己独占一台计算机。
三、操作系统类型
大型机系统
大型机系统具有强大的计算和 I/O 能力,如 IBM AIX、IBM z/OS、HP-Unix。
桌面系统
个人计算机。
手持系统
手持设备如手机、平板等。
嵌入式系统
完全嵌入受控器件内部,为特定应用而设计的专用计算机系统。随着单片机的出现而出现。如智能手环。
分布式系统
即把同一个复杂计算分布到不到的设备上进行,但目前真正意义上的分布式系统是不存在的。客户机-服务器系统等只算是分布式系统中的部分实现。
多核/多处理器系统
多处理器系统中有包含多个紧密通信的处理器,一般这些处理器在同一个主板上。多个处理器共享计算机总线、时间、内存和外设等。多处理器系统中,一个芯片有多个核,一个核即为一个处理器(如四核、八核等)。一般不对多处理器系统和多核处理器系统做区分。
多处理器系统分为两类:
- 对称处理(SMP):每个处理器运行操作系统的相同副本,每个处理器都处于对等地位。 SMP架构实际比较多。
- 非对称处理(ASMP):各个处理器不对等。一般是一个主处理器和若干个从处理器,主处理器为从处理器安排任务,从处理器可能是专门处理图像的,专门处理网络通信等。ASMP架构相对较少,不适合PC,但是和手机等要求功耗的设备(如高通的骁龙820芯片手机CPU采用 ASMP 架构)。
集群系统
通过专用网络连接一群计算机,把这些计算机虚拟化为一台具有超强计算能的计算机公用户使用。可以看做是分布式处理系统和多处理器系统的折中形成。目前世界上的大多是超级计算机都数据集群系统,如计算能力世界第一的神威太湖之光,由 40960 块 4 核神威 26010 处理器组成。
四、操作和功能
4.1 操作系统操作
双模式、I/O和内存保护、定时器三者是确保操作系统能够运行的关键技术。
a、双模式
为了保证操作系统不受其它故障程序的影响,进而产生系统崩溃的可能。一种常用的办法是引入双重模式,即用户模式和内核模式。内核模式只能运行操作系统的程序。所有的用户应用程序只能在用户模式下运行。 双模式需要CPU的支持,如果CPU有模式位,则可以在操作系统中实现双模式,目前主流的CPU基本都有模式位。双模式允许操作系统不受其它故障应用程序的影响。特权指令是指可能引起崩溃的指令,该指令只能运行在内核模式中。 如果用户程序需要使用特权指令,可以通过系统提供的API调用。
b、I/O保护和内存保护
定义所有I/O指令为特权指令,用户应用程序无法直接访问I/O指令,只能通过系统调用进行I/O操作,从而避免非法I/O操作。
利用基址寄存器和限长寄存器隔离不同程序的内存地址。
c、定时器
如果用户程序死循环或用户程序不调用系统调用,此时操作系统将无法获得CPU并对系统进行管理。解决方法是引入定时器,在一段时间后发生中断,将CPU控制权返回给操作系统。
4.2 操作系统功能
操作系统主要有四个核心功能:进程管理、内存管理、文件管理以及 I/O 设备管理。
五、操作系统结构
5.1 简单结构
早期操作系统规模小,简单且功能有限。所以早期的操作系统称为简单结构或无结构。简单结构导致系统内部比较混乱、不易维护、不适合大规模系统开发。
5.2 层次结构
层次结构中,将操作系统划分为若干层,在底层的基础上构建高层,每层只使用相邻低层次的功能和服务,不能夸层级使用更底层功能和服务。最底层为硬件,最高层为用户层。层析结构优点是:简化了系统设计和实现,便于调试和维护。缺点是:层的定义比较困难,其次是效率比较差,有的服务调用可能跨越多个层级,增加系统开销。iOS 系统就是典型的分层结构。同普遍分层结构不同的是iOS系统允许跨层级调用。
核心系统层提供为上层结构提供最基础的服务如操作系统内核服务、本地认证、安全、加速等;核心服务层为程序提供基础的系统服务,如网络访问、浏览器引擎、定位、文件访问、数据库访问等;媒体层主要提供图像引擎、音频视频引擎框架;可触摸层主要提供用户交互先关的服务如界面控件、事件管理、通知中心、通知中心、地图等。
5.3 微内核结构
随着内核越来越大,越难管理,便产生了微内核,即核内移除尽可能多功能到用户空间。优点是便于扩充内核,便于移植操作系统到新架构系统上,更稳定(更少的代码运行在和心态);缺点是用户空间和内核空间通信的系统开销增加,但是采用消息传递机制可以解决该问题。
5.4 模块化结构
目前大多数系统采用的都是模块化结构。使用面向对象的方法,将每个核心部分拆开,每个模块在需要时被加载到内核。如Solaris模块:
5.5 混合结构
除了上述四种结构之外,也有很多系统采用多种混合结合。如Mac OS 系统。采用了 Mach 微内核和层次化结构。
六、虚拟机
虚拟机是一种通过软件模拟实现,具有完整硬件系统功能,并运行在一个完全隔离环境中的完整计算机系统。虚拟机最大的优点是物理计算机中的每个虚拟机同其他虚拟机隔离,相互之间不会干扰。虚拟机主要有三种实现途径:高级语言虚拟机、工作站虚拟机、服务器虚拟机。
6.1 高级语言虚拟机
高级语言虚拟机运行在操作系统之上,主要功能是提供代码运行的容器,模拟代码执行,使得代码能够跨平台运行。典型的代表是JVM(JAVA VM),它是JAVA语言的解释器。只要根据JVM规格将解释器一直到特定操作系统上,就能运行经过编译的任何Java代码,使得Java语言和平台无关。但是要注意,针对不同的操作系统需要不同的JVM。如下图,运行在操作系统上的JVM,为上层JRE、JDK以及JAVA的各种继承工具屏蔽掉操作系统的影响。
6.2 工作站虚拟机
工作站虚拟机也是运行在操作系统之上,是操作系统中的操作系统,也成 Guest OS。目的是多个操作系统可以同时在一个计算机上使用。宿主操作系统是指安装在硬件上的操作系统;客户操作系统是指安装在操作系统上的操作系统。工作站虚拟机作为一个软件安装在宿主操作系统中,在工作站虚拟机上可以安装一个或多个客户操作系统,从而使得一个计算机上可以使用多个操作系统。如VMWare Station、Virtual Box、Virtual PC 和Parallels Desktop 等。
6.3 服务器虚拟机
服务器虚拟机和前两者不同,它是直接安装在硬件上。目的是把一个物理计算机虚拟化为多个虚拟机,使得多用户、多操作系统在一个物理计算机上并存。如将服务器物理资源抽象成逻辑资源,让一台服务器编程几台甚至上百台相互隔离的服务器虚拟机。有两种常用模式:一虚多和多虚一。一虚多是指将一台服务器虚拟成多台服务器虚拟机。多虚一是指将多个独立的物理服务器虚拟为一个服务器虚拟机。