操作系统理论概述复习

前言

简单复习下课本中操作系统的理论。一是有被问到,二是正在有个秘密企划需要些相关知识。

本篇不会给出诸如内存映射、系统调用等详细过程,同样不会有诸如bios启动等实现问题。只说课本中的整体结构与常见算法,教学用课本中对操作系统是一个比较抽象的概念性介绍。
详细实际实现过程在过去的相关文章中有解释,将会贴出站内连接。

相关概念在linux下的实现将会有所补充。

引论

OS目标:
方便性-使计算机易于使用
有效性-提高系统资源利用率
可扩充性-对新硬件、软件方便扩充
开放性-遵守标准规范、方便与规范硬件、软件兼容

OS作用:
用户与硬件间的接口-通过系统调用方便的使用操作系统控制硬件
系统资源管理者-处理机、存储器、IO设备等的管理
对计算机资源抽象-抽象各种访问资源接口

发展历程:
未配置操作系统->单道批处理系统->多道批处理系统->分时系统->实时系统->微型操作系统
cpu等资源利用率逐渐增加。

基本特性:
并发-并行是真并发,并发是交替执行;引入进程,进程作为操作系统中独立运行作为资源分配的基本单位;
共享-互斥共享,资源只许一个进程访问;同时共享,进程可同时访问资源。
虚拟-时分复用技术,虚拟处理机、虚拟设备;空分复用技术,结合虚拟存储技术,将存储器空闲分区存放其它程序。
异步-进程以人们不可预知的速度向前推进,这就是进程的异步性。需要进程同步机制

主要功能:
处理机管理-进程控制,创建、状态转化、终止进程;进程同步-互斥(临界资源采用锁)、同步(合作完成任务的进程使用信号量等对执行次序协调)方式协调进程运行;进程通信;调度,作业与进程调度。
存储器管理-内存分配,内存保护,地址映射,内存扩充
设备管理-缓冲管理,设备分配,设备处理(驱动)
文件管理-文件存储空间,目录,文件读写与保护
用户接口-用户与程序的接口
其它-系统安全、网络功能、多媒体

OS结构设计:
无结构,模块化,分层式,客户/服务器模式,面向对象,微内核
微内核最常用,将最基本的功能放入微内核,如进程、线程管理、存储器管理、中断等处理。

进程的描述与控制

进程的描述

PCB在内核中描述进程。

进程的特征:动态性、并发性、独立性、异步性。

基本状态:就绪、阻塞、执行。 执行遇到IO请求进入阻塞完成后就绪,执行与就绪切换为时间片。
后引入挂起-另一种停止进程活动的方式,用于对其分析。

OS管理的数据结构:内存表、设备表、文件表、各PCB

PCB的作用:

  1. 作为独立运行的标志
  2. 能实现间断的处理方式-用于执行的信息
  3. 提供进程管理所需信息-文件、IO等资源信息
  4. 进程调度所需信息-进程状态、等待时间等
  5. 与其它进程的同步与通信-信号量等

PCB中的信息:

  1. 进程标识符-用于唯一标识进程
  2. 处理机状态-寄存器、程序状态字、用户栈指针
  3. 进程调度信息-进程状态、优先级、等待时间等、阻塞原因
  4. 进程控制信息-程序和数据的地址、进程同步与通信机制、资源清单

PCB组织可用线性、连接、每个状态分别索引表

进程控制

OS内核俩大方面的功能:
支撑功能:中断处理、时钟管理、原语操作
资源管理功能:进程管理、存储器管理、设备管理

之后内核实现:进程的创建、终止、阻塞、唤醒、挂起、激活

进程同步

俩种形式的约束关系:
间接约束:邻界资源必须进程访问提出申请
直接约束:进程间合作完成任务,需要顺序完成

同步机制应遵守的规则:
空闲让进、忙则等待、有限等待、让权等待。

硬件同步机制:关中断、利用指令TS检测、swap交换等。都是忙等。
信号量机制:

  1. 整形信号量:一个整数检测、忙等
  2. 记录型信号量:用一个链表记录等待队列、不忙等,释放时会取出一个继续执行
  3. AND型信号量:多个资源一起请求、防止因为请求顺序而死锁
  4. 信号量集:加入每次申请多少、最少有多少

信号量应用:
进程互斥、解决进程前驱关系

管程:操作系统中的资源管理模块,供进程使用。

进程通信

共享存储系统-共享内存、管道通信系统-共享文件、消息传递系统-OS支持、客户机服务系统-socket

线程

将cpu资源(调度与分配)的基本单位称为线程。
特性:
调度的基本单位、并发性、TCB、系统开销少(仍需要系统调度)

TCB内容:
线程标识符、寄存器、运行状态、优先级、线程专用存储区、信号屏蔽

实现方式:
内核支持、用户级线程、组合方式。

用户级线程就是协程吧…..

处理机调度与死锁

处理机调度层次:
高级调度(作业)、中级调度(内存)、低级调度(进程)

算法目标:
资源利用率、公平性、平衡性、策略强制执行。

作业调度

FCFS:先来先服务
SJF:短作业优先
PSA:优先级调度算法
HRRN:高响应比优先调度算法

进程调度

抢占、非抢占(时间片、优先级)
排队器、分派器、上下文切换器

轮转调度:就绪进程排成队列依次执行
优先级调度:按优先级运行进程
多队列调度:多个队列代表优先级不同,优先级高的时间片短,只有优先级高的都空闲才向下

死锁

竞争不可抢占资源引起死锁
竞争可消耗资源引起死锁
进程顺序推进不当引起死锁

死锁条件:
互斥、请求和保持、不可抢占、循环等待

处理:
预防死锁:
一次性申请全部、不满足则释放全部、手动排序

避免死锁:
银行家算法分配时预算。

检测死锁:
资源分配图不可完全简化

解除死锁:
终止进程

存储器管理

寄存器、高速缓存、主存储、磁盘缓存、磁盘。
对磁盘的操作通过IO设备实现。

程序的装入现在都是可重定位的装入方式、并在执行时计算指令的物理地址。装入时都为逻辑地址。
关于地址转化以及页表可见文章:https://xn--74q78i15hxv3arigm4e.cn/2018/11/19/android-armlinux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E4%B8%8Eexec%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/

连接静态、装入时运行时动态连接都可。

连续分配的管理方式

固定分区、动态分区
首次适应FF、循环首次适应NF、最佳适应BF、最坏适应WF。

将不用的页面换到磁盘缓存中。

分页存储管理方式

分页:将用户空间按页管理
分段:分为大小不同的段
段页式:目前常用,保护模式下的方式

页表存放页的映射号码
为了加速加快表缓冲
可以多级页表提供更大的内存空间

段表的信息更多,还包含大小和基址

虚拟存储器

依靠段页、中断、地址变换。
实现用户虚拟地址空间。多个虚拟地址空间映射为物理地址。

访问缺页时调入,从文件区或对换区。
调入策略:
最佳、先进先出、最近最久未使用、最少使用

抖动:
当内存占用量大时、频繁的缺页将产生抖动。

输入输出系统

基本功能:
隐藏物理设备细节、与设备无关性(驱动)、提高利用率、驱动对IO进行控制、设备共享、错误处理

层次:
用户软件->设备独立性软件->设备驱动->中断处理程序->硬件
由IO系统接口屏蔽驱动、驱动直接使用硬件IO接口使用各种卡

IO接口:块设备接口、流设备接口、网络通信接口

硬件上使用设备控制器。
访问IO时可使用单独指令(x86)或当做内存映象(ARM-程序空间、RAM 空间及IO 映射空间统一编址)

IO通道:由cpu发送指令控制,IO通道即可自己进行IO与内存间的交互。是一种特殊的处理机、具有执行IO指令的能力

中断:详见https://xn--74q78i15hxv3arigm4e.cn/2018/11/19/android-armlinux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E4%B8%8Eexec%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
简单过程为:
触发中断->环境保护->向量表->执行程序

IO控制方式:轮询、中断、直接存储器访问、IO通道。

缓冲:单缓冲、双缓冲、环形缓冲、缓冲池

磁盘调度:
FCFS(先来先服务)、SSTF(最短寻道时间优先)、SCAN(扫描)、CSCAN(循环扫描)

文件管理、磁盘存储

树形、保护域与访问权

外存组织方式:
连续方式:一块
连接组织方式:隐式、显示连接
FAT技术:物理块指针放于内存中的连接表中
索引组织:通过任意级索引逐层指向大量块用于存储数据,如linux的EXT方式

空闲空间:
链表法、位示图、成组连接法(unix所使用)

操作系统接口

POSIX标准