操作系统

一、操作系统概述

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

(一)操作系统的功能和目标

操作系统作为系统资源的管理者,以安全高效为目标,功能提供如下

  • 处理器管理
  • 存储管理
  • 设备管理
  • 文件管理
  • 联网与通信管理

操作系统作为用户和计算机硬件之间的接口,以方便用户使用为目标,提供

  • 命令接口:运行用户直接使用。

    • 联机命令接口:也称交互式命令接口
    • 脱机命令接口:也称批处理命令接口
  • 程序接口:允许用户通过程序间接使用。

    程序员调用user32.dll(系统调用,也称为广义指令)实现创建窗口等功能。

  • GUI:现代操作系统中最流行的图形命令接口。

操作系统作为最接近硬件的层次,可以实现对硬件机器的拓展

(二)操作系统的特性

  • 并发性:2个或者2个以上的活动或者事件在同一时间间隔内发生,宏观上这些事件同时发生,微观上这些事件交替发生。

    并行:2个或者2个以上的活动或者事件在同一时刻发生,不管是宏观上还是宏观上都是同时发生。

    对一个单核处理器而言,同一时刻只能执行1个程序,因此操作系统协调这些程序交替(并发)进行从而实现宏观上同时运行。操作系统可以认为是与程序并发一起诞生的。

    对一个多核处理器而言,有多少个核,意味着可以同一时刻运行多少个程序(并行)。尽管现在多核技术已经出现,但并发性依旧不可或缺。

  • 共享性:计算机系统中的资源可以被多个并发执行的程序共同使用,而不是被某个程序独占。操作系统的共享方式却分为以下2种

    • 互斥共享方式:对某些资源,一个时间段内只允许一个进程访问。

    • 同时共享方式:对某些资源。一个时间段内可以允许多个进程”同时”访问。

      此处的同时指的是宏观意义上的同时,微观上可能是交替访问。

  • 异步性:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停。

  • 虚拟性:把一个物理上的实体变成若干个逻辑上的对应物,物理实体是实际存在的,而逻辑上对应物是用户感受到的。虚拟技术分为

    • 空分复用技术:如虚拟存储器技术。
    • 时分复用技术:如虚拟处理器技术。

共享与并发二者互为存在条件,没有并发性或者共享性,就没有虚拟性和异步性,所以共享性和并发性是操作系统的2个最基本的特征。

(三)操作系统的发展和分类

1. 手工操作阶段

用户独占全机、人际矛盾导致资源利用率低。

2. 批处理阶段

  • 单道批处理操作系统:缓解了人机速度矛盾,资源利用率有所提升,但内存中仅能有一道程序运行。其采用的监督程序是操作系统的雏形。

  • 多道批处理操作系统(操作系统开始出现):引入中断技术,操作系统来管理各个程序的并发运行。效率大幅提升但没有人机交互功能

    真正意义上的操作系统正式诞生,并发性同时作为其特性出现。

3. 分时操作系统

计算机以时间为单位轮流为各个用户/作业服务,用户请求可以被及时响应,解决了人机交互问题。但不能优先解决一些紧急任务

4. 实时操作系统

能够优先响应一些紧急任务,某些紧急任务不需时间片排队,

  • 硬实时操作系统:必须在严格的规定时间之内完成处理
  • 软实时操作系统:可以接受偶尔违反时间规定。

(四)操作系统的运行机制与体系结构

指令被分成特权指令非特权指令

两种处理器状态:

用程序状态字寄存器PSW中某标志位来标记当前处理器处于什么状态。

核心态与用户态的概念可以结合企业管理类比理解。

  • 用户态(目态):此时CPU只能执行非特权指令
  • 核心态(管态):此时CPU可以执行特权指令和非特权指令

就能否执行特权指令,程序可以被分成2种:

  • 内核程序:运行在核心态
  • 应用程序:运行在用户态。

操作系统其实还分成非内核部分和内核部分,内核部分更接近硬件,是计算机上配置的底层软件,是操作系统最基本、最核心的部分,提供诸如时钟管理中断处理原语(一般大内核的操作系统涵盖此功能,微内核的不包含此功能)管理系统资源等功能

原语是最接近操作系统的部分,运行具有原子性,即不可中断,运行时间短,调用频繁。

对不同的操作系统,内核分为

  • 大内核:主要的功能模块都作为系统内核。高性能但难以维护。
  • 微内核:保留最基本的功能。结构清晰、方便维护、但切换频繁,性能低。

二、中断和异常

(一)中断的作用

当中断发生时,CPU立即进入核心态,操作系统获得计算机的控制权

  • \(用户态 \rightarrow 核心态\)

中断是唯一一种使用户态切换成核心态的方式.

  • \(核心态 \rightarrow 用户态\)

核心态转换成用户态只需执行一个特权指令将程序状态字PSW的标志位设置成用户态即可。

当中断发生之后,当前运行的进程暂停运行,由操作系统内核对中断处理。

对于不同的中断信号,会进行不同的处理。

(二)中断的分类

内外中断的划分是相当于CPU而言的。

  • 内中断(由当前执行的指令本身引起)

    • 自愿中断:系统调用时使用的访管指令(如汇编语言中的int 0x80)
    • 强迫中断:包括硬件中断(如缺页)和软件中断(如整数除0)。

    内中断其实还可以这样划分

    • 陷阱、陷入:有意而为之的,如汇编语言中的int 0x80
    • 故障:由错误条件引起,可能被故障处理程序修复,如缺页
    • 终止:不可恢复的致命错误造成的结果
  • 外中断(狭义上的中断,与当前指令无关,来自CPU外部)

    • 外设请求(如I/O系统完成发出的中断信号)
    • 人工干预(如用户强制终止一个进程)

(三)外中断处理

对于外中断,CPU检测到外中断信号,则需要保护当前被中断处理进程的CPU环境(如程序状态字PSW、程序计数器、各种通用寄存器),然后根据中断信号类型转入相应中断处理程序(运行在核心态),恢复原进程CPU环境退出中断,继续向下执行

\[CPU检测到外中断信号\rightarrow 保护当前CPU环境\rightarrow 相应中断处理程序处理 \rightarrow 恢复CPU环境 \rightarrow 继续运行进程 \]

(四)系统调用API

1. 什么是系统调用

系统调用是操作系统提供给应用程序(程序员)使用的接口,应用程序通过系统调用来获得操作系统的服务,这些服务由操作系统在核心态下代为完成,保证系统的稳定性和安全性。

系统调用根据功能可以分成下面几类

  • 设备管理
  • 文件管理
  • 进程通信
  • 进程控制
  • 内存管理

凡是与资源有关的或者会直接影响到其他进程的操作一定需要通过系统调用来实现。

而我们使用的C语言库函数很多是封装了API的,使用这些封装了API的库函数可以算是间接地进行系统调用。

2. 系统调用机制与内中断

CPU在运行封装了系统调用的库函数时,首先将函数的参数传入寄存器,然后紧接着执行int x陷入指令(用户态),也称trap、访管指令,运行到此处触发内中断,x是系统调用号,告知了操作系统去处理系统调用的相关代码(核心态)返回用户程序,继续下一个指令。

  1. 陷入指令是唯一一个只能在用户态执行,不能在核心态执行的指令。

  2. 由于系统调用会处理一个陷入指令进而触发内中断,所以系统调用会使处理器从用户态进入核心态

  3. 系统调用发生在用户态,对系统调用的处理发生在核心态

四、从x86 PC开机说起

  1. x86 PC刚开机时CPU处于实模式

实模式:

保护模式:

  1. 开机时,CS=0xFFFF;IP=0x0000
  2. 寻址0xFFFF0(0xFFFF<<4+0x0000=0xFFF0,该地址是ROM BIOS映射区)
  3. 检查RAM,键盘,显示器,软硬磁盘
  4. 将磁盘0磁道0扇区的512B(是操作系统的引导扇区)读入0x7c00处
  5. 置CS=0x07c0,IP=0x0000,从0x7c00处开始执行

五、进程

进程是资源分配的基本单位。

线程是CPU分配的基本单位。

进程与线程的关系

一个进程包括多个线程,但资源分配始终是进程为单位。

每个线程拥有一个线程控制模块TCB、栈,但与进程中的其他线程共享代码和数据

线程可以降低开销、进一步提高系统的并发度。

线程的实现

  • 用户级线程(ULT):管理无需内核支持
  • 内核级线程(KLT):由操作系统支持和管理,可能会引起进程的切换
posted @ 2021-09-22 21:16  Em0s_Erit  阅读(249)  评论(0编辑  收藏  举报