Skip to content

概述

操作系统基本概念

操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件

简单来说,有三个方面

  1. 负责管理协调硬件,软件等计算机资源的工作
  2. 为上层应用程序、用户提供简单易用的服务
  3. 操作系统是系统软件,而不是硬件

操作系统的特征

并发,共享,虚拟,异步是操作系统的四个基本特征。其中并发和共享是两个最基本的特征,二者互为存在条件。

并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的

并行:指两个或多个时间在同一时刻同时发生。

共享: 即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。互斥共享和同时共享是两种资源共享方式。

所谓“同时”往往是宏观上的,而微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)

虚拟: 是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际上存在的,而逻辑上对应物(后者)是用户感受到的。

虚拟技术包括“空分复用技术”和“时分复用技术”

操作系统的基本类型

批处理操作系统:采用批处理方式工作的操作系统

分时操作系统:通过把处理器的时间划分成时间片并轮流 为各个用户服务的方式工作的操作系统

实时操作系统:能够对外部事件或数据进行及时接受和处理,并做出反馈

多道程序基本概念

多道程序设计是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行。两个或两个以上程序在计算机系统中同处于开始到结束之间的状态。这就称为多道程序设计。

多道程序技术运行的特征:多道、宏观上并行、微观上串行。多道程序设计的出现,加快了OS的诞生。多道程序设计的基本特征:间断性、共享性、制约性。

程序的封闭性是指进程执行的结果只取决于进程本身,不受外界影响。

操作系统提供的接口

操作系统提供的接口主要分为两类:命令接口和程序接口。命令接口分为联机命令接口和脱机命令接口。程序接口由一组**系统调用(也称广义指令)**组成。

联机命令接口又称为交互式命令接口,适用于分时或实时操作系统。脱机命令接口又称为批处理命令接口,适用于批处理系统。

系统调用是操作系统为应用程序使用内核功能所提供的接口。

img

库函数是编程语言或应用程序的一部分,目的是隐藏“访管”指令细节,简化操作,运行在用户空间中。系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间中。

许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常比系统调用高。因为使用系统调用时,需要进行上下文切换(由用户态转向核心态)。

单(宏)内核与微内核

单内核即Monokernel(全称:Monolithic kernel)。也被译作宏内核,大内核。个人感觉宏内核一词可能让人不明就里,以下都称单内核。Linux正基于单内核,这是比较古老的内核架构。内核提供多项服务,我们常用的文件IO、内存管理、网络相关的系统调用全部运行在内核态,都运行在同一地址空间之中。

微内核即Microkernel(简写:μ-kernel)提出时间比单内核要晚,在学术界而言无疑是初生的朝阳。微内核基于模块化的设计,将内核功能简化到最少,仅提供少量基础功能,更多的功能运行在用户态,不同服务运行在不同的地址空间,常用的服务(比如IO、内存管理)通过IPC调用来组合提供。无疑从这个层面上讲微内核的扩展性更强,增加新功能无需重新编译内核。并且由于内核服务间的隔离,使得OS更安全,一个服务挂掉,不会影响其他服务。而单内核中一个服务的异常可能让整个内核挂掉。但问题也显而易见,那就是大量的IPC,性能必然受影响。

https://www.cnblogs.com/yeahwell/p/5226047.html

内核态与用户态

用户态到核心态是通过中断来实现的,并且中断是唯一的途径。

不管是单内核还是微内核,运行在用户态的应用程序,想使用某些内核态才能执行的功能,必须要经过系统调用来实现。所以你需要明白:进程从用户态陷入了内核态,这是目的,而使用系统调用,仅仅是达成该目的的手段。因果要理清。

系统调用可以在用户态下发生,但只能在核心态下执行。

用户态转向核心态的例子:

  • 系统调用
  • 发生一次中断,发生外中断
  • 用户程序错误,发生内中断
  • 用户程序企图执行一条特权指令,发生访管中断。

核心态到用户态的切换时通过执行一个特权指令,将程序状态字(psw)的标志位设置为“用户态”

访管指令是在用户态下执行,通过访管指令发生访管中断,它不是特权指令。核心态下可以执行除了访管指令外的一切指令。

中断和异常

img

**中断(Interruption)**是指 CPU 对系统发生某事件时的这样一种响应。CPU 暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序;执行完后,再返回到原程序的断点处继续执行。

还可进一步把中断分为外中断和内中断。

  • 外中断,是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等。也就是CPU正忙着自己的事情,突然被别人打扰让帮忙处理一些事情。
  • 内中断,就是异常,是指由于 CPU 内部事件所引起的中断,如程序非法操作码、地址越界、算术溢出、虚存系统缺页和专门的陷入指令等。内中断(trap)也被译为“捕获”或“陷入”。也就是CPU自己做了一些不该做的事情,把一切搞砸了。

img

异常是由于执行了现行指令所引起的。由于系统调用引起的中断属于异常。中断则是由于系统中某事件引起的,该事件与现行指令无关。

平时一般所说的中断默认指外中断,因为内中断也就是异常一旦反生就代表出错了。

再来解释一下什么是软中断。要说软中断,先说一下中断(interrupt),中断本身是一个硬件概念,就是打断CPU,让其执行一下其他任务,比如键盘中断、打印机中断、定时器中断等。软中断本就是从软件层面模拟了这一中断操作。

保护现场

保护现场有两个含义:第一是保存程序的断点,一般指PC和PSWR由中断隐指令(硬件)自动完成。第二是保存通用寄存器的内容,由中断服务程序完成。

术语拓展

可重入代码(Reentry code)也叫纯代码(Pure code)是一种允许多个进程同时访问的代码。为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。程序在运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,且执行结果不受影响。

通常是不含有静态变量static的函数。

Released under the MIT License.