操作系统基本概念

“差不多”精神

数学是一门严谨的学科,一切都以精确为目标。而软件却没有任何精确而言,是十足的“差不多”学科。因为软件是一门人造学科,它没有对与错(这里指的是同一功能的不同实

现,而不是说程序不可能出现错误),只有好与坏。我们设计软件的时候,也是觉得差不多就可以了,而没有什么精确的追求。

比如说我们分析算法,采用的是所谓的渐进分析,将系统和非决定项都忽略不计,所谓的“只要数量级对就差不多”、

操作系统作为一种软件,自然也是“差不多”就可以了,其中的许多设计都是各种折中的结果,到处体现着“差不多“精神。

计算机硬件基本知识

计算机的结构非常简单:首先布置一根总线,然后将各种硬件设备挂在总线上。所有的这些设备都有一个控制设备(比如说视频设备有“视频控制器”,键盘设备有“键盘控制器”,硬

盘有“硬盘控制器”),外部设备都由这些控制器与CPU通信。而所有设备之间的通信均需通过总线。

为了提高计算机的效率,人们又设计出了流水线结构。为了进一步提高计算机的效率,在流水线的基础上,人们又发明了多流水线等多指令发射机制。

除了指令执行单元外,计算机的另一个重要部件是 指令的执行存放单元,称为存储架构。存储架构包括了缓存、主存、磁盘、磁带等。有的情况下还存在多级缓存和外部光盘。

磁盘是计算机的主要存储媒介。

中断是计算机里面的一个最为重要的机制,它也是操作系统获得计算机控制权的根本保证。中断的基本原理是:设备在完成自己的任务后向CPU发生中断,CPU判断优先级,

然后确定是否响应。如果响应,则执行中断服务程序,并在中断服务程序执行完后继续执行原来的程序。

中断是一个很复杂的过程,中断处理过程中又可以发生中断,且还可以有所谓的“软中断”,即软件发生的中断。

内核态和用户态

内核态就是拥有资源多的状态,或者说访问资源多的状态,称为特权态。相对来说,用户态就是非特权态,在此种状态下访问的资源将受到限制。

例如,如果要访问操作系统的内核数据结构,如进程表,则需要在特权状态下才能办到。如果要访问用户程序里的数据,则在用户态就可以了。这样的话安全问题就特别值得考

虑了。

内核态和用户态事的实现

显然,要限制一个程序对资源的访问,需要对程序执行的每一条指令进行检查才能完成。而这种检查就是地址翻译。程序发出的每一个指令都要经过这个地址翻译过程。而通过

对翻译的控制,就可以限制程序对资源的访问。

为了赋予内核态程序访问所有资源的权限,当系统处于内核态时,内核程序可以绕过内存地址翻译而直接执行特权指令,如停机指令。这种绕过翻译的做法突破了系统对资源

的限制。

操作系统的结构

操作系统的结构也和操作系统历史类似,经历了好几个阶段。在操作系统刚刚出现时,人们还没有意识到操作系统的存在,也没有将那些库函数称为操作系统。那个时候,人们

想到什么功能,就把那个功能加进来,并没有对所有的功能进行统筹兼职的计划。自然,那个时候的操作系统就是杂乱的、无结构的。

而随着操作系统的演化,人们对操作系统的认知逐步加深,操作系统慢慢多了一些结构。各种功能归为不同的功能块,每个功能块相互独立,又经过固定的界面互相联系。

任意一个功能块都可以调用另一个功能块的服务。整个操作系统本身是一个巨大的单一体,运行在内核态下,为用户提供服务。

后来人们发现单一体的操作系统结构有很多缺点:功能块之间的关系复杂,修改任意功能块导致其他所有功能块都需要修改,从而导致操作系统设计开发困难;这种没有层次关

系的网状联系容易造成循环调用,形成死锁,从而导致操作系统可靠性降低。

后来,人们将操作系统的功能分成不同层次,低层次的功能为紧邻其上一个层次的功能提供服务,而高层次的功能又为更高一个层次的功能提供服务。

操作系统的所有功能都在内核态下运行,会导致操作系统效率低下。这是因为,从用户态转换为内核态是有时间成本的。其次,在内核态运行的程序可以访问所有资源,因此其

安全性和可靠性要求十分要。在操作系统规模很大时,操作系统的可靠性和安全性就变得很难达到。为了解决这个问题,人们又想出了一个办法,就是”微内核结构“,即只将操

作系统核心中的核心放在内核态运行,其他功能都移到用户态运行。这样就同时提高了效率和安全性。

进程、内存和文件

进程是操作系统里面的核心概念。它指的是一个运动中的程序。一个程序一旦在计算机里运行起来,它就成为一个进程。操作系统对进程的管理是通过”进程表“来实现。进程表

里存放的是关于进程的一切信息。在任何时候,进程所占有的全部资源,包括分配给该进程的内存、内核数据结构和软资源形成一个进程核。核快照代笔的是进程在某一特定时

刻的状态。

进程之间可以通信、同步、竞争,并在一定情况下可能形成死锁。

内存是操作系统里面的另一个核心概念。它是进程的存放场所。何如对内存进行管理,使得数据的读写具有高效率、高安全、高空间利用率和位置透明的特性是内存管理所要

达到的目的。

文件是操作系统提供的外部存储设备的抽象,它是程序和数据的最终存放地点。如何让用户的数据存放变得容易、方便、可靠和安全是文件系统要解决的问题。

系统调用

前面说过,操作系统是一个系统程序,即为别的程序提供服务的程序。那么,操作系统的服务时通过什么方式提供的呢?答案是”系统调用“。系统调用就是操作系统提供的

应用程序界面(API)。用户程序通过调用这些API获得操作系统的服务。

上面说过,用户程序通过调用操作系统的API来获得操作系统的各种服务。但使用API需要编程。对于不遍程序的用户来说,或对于需要与操作系统进行交互的用户来说,

又怎么使用操作系统的服务呢?

为了向这些不编程的用户提供服务,操作系统提供了一个壳(shell)来与用户交互。每个操作系统都提供某种壳,以便与用户进行交互。这个壳是覆盖在操作系统服务

上面的一个用户界面,既可以是图形界面,也可以是文本界面。用户在这个界面上输入命令,操作系统则执行这些命令。当然,用户输入的命令不是直接的操作系统服务,

而是所谓的utilities。utilities的功能相当于C语言中的库函数。因为用户不能直接调用系统调用,C语言提供了库函数来解决这个问题。








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值