操作系统原理教程:操作系统概述

操作系统作为用户与计算机之间的接口

操作系统是能有效地控制和管理计算机系统内各种硬件和软件资源,合理地组织多道程序运行,并向用户提供各种服务功能,使用户能够灵活、方便、有效地使用计算机,并使整个计算机系统能高效地运行的一组程序模块的集合。

在计算机上加载操作系统的目标有以下几点:

  • 方便性:更容易操作、更方便使用

  • 有效性:能提高系统运行效率、资源利用率

  • 可扩展性:容易地扩展计算机的功能和性能

在设计和构造操作系统时应该采用模块化结构,并清楚地定义模块间的接口。

操作系统的基本功能主要分为如下五个方面:

  • 存储器管理功能。主要完成以下四个方面的任务:内存分配、地址映射、内存保护、内存扩充。

  • 处理机管理功能。主要任务就是对处理机进行分配、运行控制和管理,包括以下几个方面:作业调度和进程调度、进程通信与控制。

  • 设备管理功能。主要任务是完成用户提出的I/O请求,包括以下几个方面:缓冲区管理、设备分配、设备驱动、设备无关性。

  • 文件管理系统。包括以下几个方面:文件存储空间的管理、目录管理、文件的读写管理和存取控制。

  • 用户接口。现代操作系统通常向用户提供如下三种类型的界面:命令界面、程序界面、图形界面。

操作系统的特性

操作系统也是一个程序的集合。不过与其他程序相比,它具有两个基本特性,即程序的并发性(Concurrency)与资源的共享性(Sharing),由此这两个基本特征又引发出另外两个重要特征,即异步性(Asynchronous)和虚拟性(Virtual)。

并发性

并发性主要是指在单CPU的计算机系统中同时存在多个程序,这些程序及操作系统程序分时、交替地使用CPU运行以向前推进。从宏观上看,这些程序都在向前推进。程序的并发性具体体现在三个方面:用户程序与用户程序之间并发执行、用户程序与操作系统之间并发执行、操作系统与操作系统之间并发执行。

程序并发与程序并行。
程序并行要求微观上的同时,即在绝对的同一时刻有多个程序同时向前推进,一般用在多处理器环境下;而程序并发并不要求微观上的同时,只需从宏观上看多个程序都在向前推进,一般用在单处理器环境下,由于处理器的速度很快,因而从宏观上看,这些程序都在向前推进,彷佛每个程序都拥有一个属于自己的处理器,即所谓的虚处理器。

共享性

共享是指操作系统与多个用户程序共用系统中的各种资源,这种共享特性是在操作系统的控制下实现的。当然为实现这种控制,操作系统也需要消耗资源,这些资源包括处理器、主存储器、外存储器、设备、信息等。操作系统要掌握系统中当前资源的使用情况,并据此决定各个程序进入系统的次序以及使用资源的次序。

异步性

在单处理器的操作系统之上,并发执行的程序有多个,这些程序(连同操作系统)是交替执行的。交替的切换点是中断,中断是用户程序切换到操作系统,嵌套中断使一段操作系统切换到另一端操作系统,而中断的发生时刻却是不确定的,因而操作系统的运行轨迹是异步的,不可预知的。

虚拟性

虚拟是利用某种技术把一个物理实体变为若干个逻辑实体。物理实体是实际存在的,而逻辑实体则是虚化的。虚拟技术在操作系统中被广泛采用,例如:虚拟CPU、虚拟内存、虚拟设备。

操作系统的硬件环境

在设计一个操作系统时,需要硬件提供5个方面的支持:特权指令、系统调用、内存保护、中断机制和输入/输出系统。

特权指令

特权指令,或称受保护的指令,就是指那些只有操作系统才有权使用的指令。根据运行程序对资源和机器指令的使用权限,把处理器设置为不同的状态。多数系统把处理器的工作状态划分为管态和目态。

  • 管态。即操作系统的管理程序运行时的状态,它具有较高的特权级别,又称为特权态或系统态。当处理器处于管态时,它可以执行所有的指令,包括各种特权指令,也可以使用所有的资源,并具有改变处理器状态的能力。

  • 目态。即用户程序运行时的状态,它具有较低的特权级别,又称为普通态或用户态。在这种状态下,不能使用特权指令。用户程序运行时,不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间。

需要指出的是,管态和超级用户不同。前者是指CPU的状态,后者是指一种特殊的计算机用户;前者主要是从硬件的角度去执行任何指令,而后者是从软件的角度来管理系统的软硬件资源。超级用户执行的程序不一定运行在管态,而管态程序也不一定是由系统管理员启动的,普通用户也可以启动。

把CPU状态分为管态和目态,并规定管态能运行特权指令,目态不能运行特权指令后,带来了一些操作系统必须解决的问题:

  • 程序状态字(Program Status Word, PSW)是CPU内部一个专门的寄存器,用来指示处理器的状态。它通常包括工作状态码、条件码和中断屏蔽码等。工作状态码用来指明CPU的当前状态是管态还是目态,从而表明当前在CPU上执行的是操作系统程序还是一般的用户程序。条件码用来反映指令执行后的结果特征。中断屏蔽码用来指出是否允许中断。

  • 在单CPU条件下,CPU是分时使用的,多个程序并发执行,轮流交替使用CPU,因此存在管态和目态之间的切换问题。实际上,做法很简单,就是修改程序状态字寄存器中的状态标志位,因为CPU正是根据它来判断当前状态的。

  • 修改PSW状态标志位本身就是一个特权指令,只有系统程序才能使用。因此,如果当前处于管态,那么没有问题,可以执行该指令,把状态从管态改成目态;但如果当前处于目态,即用户程序在CPU上运行,不能执行特权指令,因此不能实现状态的直接转换。解决之道就是系统调用。

系统调用

系统调用,即用户程序通过访管指令或陷阱指令来请求操作系统为其提供某种功能的服务。

# 系统调用的执行过程

当CPU执行到一条访管指令或陷阱指令时,即会引起一个中断,称为访管中断或陷阱中断。
处理器会保存中断点的程序执行上下文环境,包括程序状态字、程序计数器和其他一些寄存器里面的内容,然后CPU的状态被切换到管态。
处理器会把控制权转移到相应的中断处理程序,中断处理程序经分析判断确定是何种中断,然后调用相应的系统中断服务程序,完成用户的中断请求。
当中断处理结束后,CPU被恢复为目态,回到中断点并恢复被中断程序的上下文环境,用户程序从中断点继续往下执行。

从目态到管态的转换,不是通过指令来修改CPU的状态标志位,而是由CPU在中断时自动完成的。

通过系统调用这种方式,一方面支持了特权指令,保护了系统的安全;另一方面普通的用户程序也能间接地执行特权指令。

内存保护

操作系统都应设定或记住每个用户程序的内存空间,让每一个用户程序只能访问自己内存空间范围内的代码和数据。最简单的办法是在硬件上增加一对寄存器,即基地址寄存器和边界寄存器。在开始运行一个程序时,由操作系统负责给基地址寄存器和边界寄存器设置相应的值。然后在程序的执行过程中,在每一次内存访问时,硬件都要自动把该内存单元的地址与基地址寄存器和边界寄存器进行比较,以确保它在自己的内存空间之内活动。当然,现代操作系统采用的一般都是虚拟存储管理技术,把内存和外存结合起来使用,硬件必须提供虚拟地址和物理地址的映射机制。

中断机制

中断指的是由于某个事件的发生,改变了正在CPU上执行的指令的顺序。这种事件对应于CPU芯片内部或外部的硬件电路所生成的电信号。中断处理的过程一般是这样的:当中断事件发生时,CPU会暂停当前正在执行的程序,并且在保留现场后自动转去执行相应事件的处理程序,当处理完以后再返回断点,继续执行被打断的程序。中断可以分为两大类,即同步中断和异步中断。

  • 同步终端是指当CPU正在执行指令时,由CPU的控制单元所发出的中断,也称为“异常”。异常又可以分为两类:

    • 由CPU检测到的异常,包括错误(Fault)、陷阱(Trap)和中止(Abort)。

    • 由程序主动来设定的异常。例如,通过INT n等指令来发出的中断请求,也称为“软中断”,它主要用来实现系统调用服务。

  • 异步中断指的是由CPU以外的其他硬件设备在任意时刻所发出的中断,简称为“中断”。它也可以分为两类:

    • 可屏蔽中断,即I/O中断。它是当外围设备或通道操作正常结束或发生错误时所发生的中断。

    • 不可屏蔽中断,即由掉电、存储器校验错等硬件故障引起的硬件中断。

一般来说,每一个中断或异常都用一个0~255之间的整数n来标识,称为中断向量,系统根据中断向量来为每一个中断或异常指定相应的处理程序。系统会维护一个中断向量表,表中存放了相应的处理程序的起始地址。当发生某个中断时,先从该表中取出相应的起始地址,然后跳转过去执行,完成中断服务。

(最近更新:2019年09月18日)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值