操作系统(1)

计算机系统

计算机系统大致分为4个部分:

  • 硬件
  • 操作系统
  • 系统程序和应用程序

硬件,如CPU、内存、输入输出IO设备,为计算机提供计算资源。
应用程序如浏览器、编译器等规定了用户按什么方式使用这些资源。
操作系统控制和协调各用户的应用程序对硬件的使用。可以将操作系统看做资源分配器,用来解决CPU时间、内存空间、文件存储空间、IO设备等问题。

计算机系统操作

现代计算机系统由一个或多个CPU和若干控制器通过共同的总线相连。
事件的发生通常通过硬件或软件的中断(interrupt)来表示,硬件可以随时通过系统总线发送信号,以触发中断,软件通过系统调用(system call)也能触发中断。当CPU中断时,它暂停在做的事情并立即跳转到固定的位置去继续执行。
中断是计算机结构的重要部分,中断必须将控制转移合适的中断处理程序,处理转移的简单方法是调用一个通用子程序以检查中断信息,接着该小程序会调用相应的中断处理程序。在处理中断之后,保存的返回地址会装入程序计数器,被中断的程序可以重新开始,好像中断没有发生过一样。这里具体可以参考下一篇操作系统(2)
计算机程序必须在内存(或RAM)中运行,指令load可以将内存中的字转移到CPU寄存器中,而指令store相反,可以将寄存器中的内容转移到内存中。

处理器系统

绝大部分系统采用单处理器系统,有一个主CPU能够执行一个通用指令集,包括来自于用户进程的指令。
多处理器系统有多个紧密通信的CPU,比起单处理器有三个优点:

  • 增加吞吐量。在更短时间内可以做更多的事,不过加速比不是N而是小于N。对共享资源的竞争,多CPU的通信会减低加速比。
  • 规模经济。因为共享数据,所以一个多处理系统可以共享外设,大容量存储和电源供给。
  • 增加可靠性。当其中一个处理器出现问题,可以通过其他处理器来承担这部分工作。

多CPU系统的另一种类型是集群系统,由多个系统耦合,通过在系统中增加冗余来提供高可用性。

作业执行

操作系统最重要一点是有多道程序处理能力,多道程序设计通过组织作业使CPU不会空闲,它将多个任务保存在内存中。分时系统是多道程序设计的延伸,CPU在多道作业之间的切换来执行多个作业。

双重模式操作

为了让操作系统正常运作,需要区分操作系统代码和用户定义代码的执行,至少需要两种独立的操作模式,用户模式(user mode)和监督程序模式(monitor mode)。在计算机硬件中增加了一个模式位(mode bit)来区分当前模式。
能引起机器损坏等叫做特权指令(previleged instructiion),如果在用户模式执行特权指令,需要进行验证。

定时器

为了维持操作系统对CPU的控制,也必须防止用户输入造成死循环,可以使用定时器(timer),将定时器设置为给定时间后中断计算机。显然定时器的设置是特权指令。一种最简单的实现是对于一个7分钟的程度将定时器设置为420,定时器每秒产生一次中断,每次中断计数器减1,只要计数器的值为正,则控制权返回用户程序。

进程管理

程序在被CPU执行前不会做任何事,处理中的程序称为进程。进程需要调用一定的系统资源,包括CPU时间、内存、文件、IO设备等。进程是系统工作的单元,系统由多个进程组成,其中一些是ca偶作系统进程,其余的是用户进程。

内存管理

内存是一个大的字节或字的数组,每个字节和字都有对应的内存地址。内存是可以被CPU和IO快速访问的数据仓库。如果一个程序要执行,它必须先变换成绝对地址并装入内存,随着进程的执行,进程可以通过产生绝对地址来访问内存中的程序指令和数据。

存储管理

文件管理是操作系统最常见的组成部分,计算机可以在多种物理介质上存储信息。磁带、磁盘和光盘是最常见的介质。数据文件可以是数值的、字符的或者二进制的。
高速缓存是计算机中的重要概念,信息通常被保存在一个存储系统中(如内存)。当使用它的时候,它会被临时复制到更快的存储系统——高速缓存中。当需要特定信息的时候,会优先先检查高速缓存。内存可以当做外存的高速缓存。

分布式系统

分布式系统是将一组物理上分开,各种可能不同结构的计算机通过网络连接,为用户提供所维护的各种资源的计算机的集合。

操作系统环境

操作系统提供一个环境来执行程序,它向用户提供一系列服务/函数。
一组操作系统服务提供这些函数:

  • 用户界面。所有操作系统都有用户界面,wins提供的就是GUI(图形界面)。
  • 程序执行:系统必须能将程序装入内存并运行程序。
  • IO操作:系统必须提供IO操作所需要的方法。
  • 文件系统操作:程序需要读写文件。
  • 资源分配。

有的操作系统会包含命令解释程序,但多数操作系统都由系统程序实现大多数指令,这样命令解释程序不必理解命令,它只需要通过命令来识别文件并装入系统运行。

系统调用

系统调用(system call)提供了操作系统提供的有效服务界面,这些调用通常是由C或者C++编写,对底层的任务由汇编编写。举一个简单的例子:编写一个从文件A读取数据并复制到新文件B的程序。首先需要获取输入文件名和输出文件名(调用界面),程序打开输入文件并创建输出文件,都需要系统调用,都有可能出现错误情况。如果发现有同一名称的输出文件存在,这种情况会造成程序终止(一个系统调用),或者删除现有文件(另一个系统调用),并创建新的文件(另一个系统调用)。
当然使用者不会察觉到这些细节,都是通过调用API来完成。API是一系列适用于应用程序员的函数。

这篇主要简单介绍操作系统的概念,下一篇操作系统(2)会对这些概念进一步补充。

猜你喜欢

转载自blog.csdn.net/sysuzhyupeng/article/details/78444893