• 计算机操作系统


    基于对计算机操作系统的基本概念,作业,进程,进程并发控制,基本储存管理的理解。


    第一章 操作系统概念

    1.1操作系统的基本概念

    操作系统概念
    • 管理系统资源、控制程序执行、 改善人机界面、提供各种服务,并 合理组织计算机工作流程和为用户 方便有效地使用计算机提供良好运 行环境的一种系统软件。
    操作系统的主要目标
    • 方便用户使用
    • 管理系统资源
    • 提高系统效率
    • 扩大机器功能
    • 构筑开放环境
    操作系统资源管理技术

    资源复用
    • 空分复用共享-----该资源可进一步分割成更多和更小的单 位供进程使用 ,如内存空间。
    • 时分复用共享-----并不把资源进一步分割成更小的单位, 进程可在一个时间段内独占使用整个物理资源,如CPU。
    资源虚拟
    • 是对资源进行转化、模拟或整合,把物理上的一个资源变成逻辑上 的多个对应物(或物理上多个变成逻辑上一个)的一类技术。
    • 空分复用分割实际存在的物理资源,虚拟实现虚构假想的虚拟同类 资源。
    • 资源虚拟的例子—虚拟设备、虚拟主存、虚拟文件、虚拟屏幕(终 端)、虚拟信道 。
    资源抽象
    • 资源抽象用于处理系统的复杂性,重点解决资源的易用性。
    • 资源抽象指通过创建软件来屏蔽硬件资源物理特性和接口细节,简 化对硬件资源的操作、控制和使用的一类技术。
    • 单级资源抽象与多级资源抽象。

    1.2操作系统的三种处理方式

    • 批处理方式
    • 分时处理方式
    • 实时处理方式

    批处理方式
    • 批处理方式特点:成“批”提交,成“批”处理。
      • 接收一批作业到外存,组织成作业流;
      • 自动控制一批作业的内存装入和运行过程;
      • 全部完成后再将结果反馈给用户。
    • 批处理系统实例:
      Monitor, FMS ,OS/360、OS/390等,批处理操作系统IBM DOS/VS、DOS/VSE ,现代操作系统保留有批处理功能
    • 单道批处理方式
      • 成批提交
        操作员集中一批用户提交的作业通过 输入设备输入到磁带上
      • 单道装入
        管理程序自动把磁带上的第一个作业 装入主存,并把控制权交给作业;
      • 顺序运行
        该作业执行完成后,把控制权交回管理程 序,管理程序再调入磁带上的下一个作业。
    • 多道程序设计技术
      • 多道程序设计技术是指允许多个程序同时 进入一个计算机系统的主存储器并启动进行计 算的方法
      • 实现多道程序设计须解决三个问题:
        • 存储保护与程序浮动;
        • 处理器的管理和调度;
        • 系统资源的管理和调度。
    • 多道批处理方式
      • 成批提交
        多道装入
      • 多道批处理方式最大的优点:
        • 采用多道程序设计技术,系统资源利用率高;
        • 系统吞吐量大。
      • 多道批处理方式最大的缺点:
        • 成批处理过程中无交互性;
        • 用户作业的等待时间长。

    分时处理方式
    • 分时处理(timeshare),又称会话型处理,是在多道程序设计基础上发展起来的一种处理 方式,强调交互性。
    • 分时技术,将CPU时间花分成时间片,每个时间片轮流执行为用户程序。
    • 分时操作系统实例 CTSS、Multics、UNIX、Linux
    • 分时处理的基本特征
      • 同时性
      • 交互性
      • 独占性
      • 及时性

    分时处理方式
    • 实时处理突出了系统处理的即时性或响应性
    • 实现方式
      • 硬式实时系统,对时间严格约束
      • 软式实时系统,对时间限制稍弱一些
    • 三种典型软实时应用系统
      • 过程控制系统(生产过程控制)。
      • 信息查询系统(情报检索)。
      • 事务处理系统(银行业务)。
      • 重要特征:对时间有严格限制和要求

    1.3操作系统的主要管理功能

    1. 用户和接口管理
      • 负责用户身份核准、操作权限管理以及各种人机接口的实现。
        • 用户管理;
        • 用户组管理;
        • 联机接口管理;
        • 脱机接口管理;
        • 程序级接口管理。
    2. 处理机管理(进程管理)
      • 围绕CPU的调度,负责管理、控制用户程序的动态执行过程。
        • 进程控制和管理;
        • 进程同步和互斥;
        • 进程通信;
        • 进程死锁;
        • 线程控制和管理;
        • 四级调度。
    3. 存储管理
      • 负责为正在运行的程序分配内存空间,并实现地址和空间有关的管 理功能。
        • 内存分配
        • 地址转换
        • 存储保护
        • 内存共享
        • 存储扩充
    4. 设备管理
      • 负责外存和I/O设备的分配、驱动和调度控制,以及实现外设读写的 相关机制。
        • 设备的分配和回收;
        • 设备的驱动调度;
        • 实现逻辑设备到物理设备之间的映射;
        • 提供设备中断处理;
        • 提供缓冲区管理;
        • 实现虚拟设备。
    5. 文件管理
      • 负责文件的建立、存取、目录管理、共享保护以及文件存储空间的管理。
        • 提供文件的逻辑组织方法;
        • 提供文件的物理组织方法;
        • 提供文件的存取和使用方法;
        • 实现文件的目录管理;
        • 实现文件的共享和安全性控制;
        • 实现文件的存储空间管理。
    6. 网络与通信管理等

    操作系统内核

    • 内核(kernel)是作为可信软件来提供支持进程并发执行的基本功 能和基本操作的一组程序。如时钟管理、CPU调度、内存分配等。
    • 内核通常驻留在内核空间,运行于核心态,具有访问硬设备和所 有主存空间的权限。
    • 内核的属性
      • 内核是由中断驱动的 ;
      • 内核是不可抢占的;
      • 内核可以在屏蔽中断状态下执行;
      • 内核可以使用特权指令 。
    • 内核分类
      • 单内核
      • 微内核

    1.4操作系统主要特征

    • 并发性
    • 共享性
    • 异步性
    • 虚拟性
    并发性(Concurrency)
    • 在一个时间段内,多个程序处于宏观的运 行状态,并发推进。
    • 串行、并行与并发

    • 并发性带来的优点
      • 在一个时间段内,多个程序(进程)并发推 进,共享系统资源。
      • 发挥并发性能够消除系统中部件和部件之间 的相互等待,有效地改善系统资源的利用率。
    • 并发的实质
      • 并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用。
      • 并发性是让有限物理资源实现多用户共享,以提 高效率。
    共享性(Sharing)
    • 共享性指操作系统中的资源可被多个并发执行的进程所使用 。
    • 共享方式
      • 同时共享:同时具有使用权
        • 如内存空间、磁盘空间 涉及透明资源共享(资源隔离与授权访问 )
      • 互斥共享:轮流使用
        • 如 CPU、I/O 设备 涉及显式资源共享(临界资源与独占访问)
    异步性(Asynchronism)
    • 异步性也被称为不确定性,指的是并发进程的推进速度不可预知。
    • 每个进程在某一时刻所处的状态以及资源拥有情况,不是提前安排好的,而是系统动态运行过程中通过管理调度形成的。
    • 异步性特征是并发和共享带来的结果。
    • 操作系统中异步性的表现
      1. 进程何时执行?何时暂停?是异步(随机)的
      2. 作业到达系统的类型和时间是随机的
      3. 操作员发出命令或按按钮的时刻是随机
      4. 程序运行发生错误或异常的时刻是随机的
      5. 各种各样硬件和软件中断事件发生的时刻是随机的
    • 异步性给系统带来潜在危险,有可能导致与时间有关的错误。
    • 操作系统的一个重要任务是必须确保捕捉任何一种随机事件,正确处理,否则将会导致严重后果。
    虚拟性(Virtuality)
    • 虚拟性是指利用某种技术将少的物理资源演变为多的、逻辑上的对应资源;
    • 还包括将慢的虚拟成快的、容量小的虚拟成容量大的、不能共享的虚拟成能共享的,等。
    • 现代操作系统虚拟性表现:
      • 虚拟存储器
      • 虚拟设备
      • 虚拟机
      • 一方面虚拟扩充了系统资源;
      • 另一方面为用户使用系统带来了方便。

    第二章 作业

    2.1作业与作业管理概述

    作业管理模块
    • 作业管理模块是操作系统中最外层的直接面对用户的模块。
    • 为用户提供系统接口,将用户需求提交系统,再将处理结果反馈用户。
    • 负责用户管理,核准用户合法性,管理用户使用资源及费用等情况。
    什么是作业
    • 用户提交给计算机系统的任务。
    • 作业内容:
      • 程序:完成任务所要执行的代码
      • 数据:代码执行过程处理的数据
    • 作业有大有小。小作业可能只包含一个程序,大作业包含若干个程序
    作业类别
    1. 批处理型作业---批处理方式提交的作业。
      • 主要用于巨型机和大型服务器系统。
      • 成批提交以后,系统将所有作业组织成一个作业流,然后对它们逐一进行控制和调度(脱机运行)。
    2. 交互型作业---以交互方式提交的作业。
      • 广泛用于各种系统。
      • 主要特点是用户可以独占一台 终端机,对自己的作业实施交互控制(联机运行)。
    3. 实时型作业---特指响应时间有实时需求的作业。
      • 用于实时系统。
      • 根据作业对响应时间严格性要求的不同,可细分为硬实时和软实时作业。
      • 硬实时作业有一个严格的响应时间控制
      • 软实时作业按照相应时间效率最高,太早太晚效率降低
    不同类别作业的管理、调度方式不同
    1. 批处理型作业
      • 批作业管理机制、作业控制块JCB、作业状态、作业调度、作 业的装入和卸出
    2. 交互型作业
      • 不经作业调度,直接进入内存,通过进程调度和进程控制管理。
    3. 实时型作业
      • 实时任务管理和实时调度。
    作业管理功能
    1. 用户管理
      • 功能:创建新用户、删除老用户、验证用户身份、维护用户信息、配置各个用户的运行环境、为各用户设置使用权限、用户组的设置与管理等。
      • 用途:既方便计费,又方便系统安全管理。
    2. 接口管理
      • 功能:为用户提供设置不同的用户接口,既分操作员接口、 程序员接口,又分联机接口、脱机接口。
      • 用途:为用户使用计算机系统、运行不同类型的作业提供 方便
    3. 批作业的管理控制与调度
      • 功能:将批作业收容到外存的“作业输入井”中,建立“作业控 制块”记录作业控制信息,通过作业调度选择后备作业装 载入内存,并在作业完成后将作业卸出。
      • 要点:作业状态、作业控制块 作业调度、作业的装载与卸出。

    2.2操作系统接口

    操作系统接口
    • 操作系统中有专门响应用户控制要求的接口,负责系统与用户之间的双向 信息传送。
    • 操作系统接口
      • 操作员级接口
        • 脱机命令接口 --- 作业控制说明语言
        • 联机命令接口 --- 键盘命令,图形化界面操作命令
      • 程序员级接口 --- 系统调用
    脱机命令接口——作业控制说明语言
    • 批处理系统中,用户提交给系统的一个计算任务,就是一个作业;
    • 批作业=程序+数据+作业控制说明书;
    • 作业控制说明书由作业控制语言编写,也就是由一条条控制作业如何运行的命令组成;
    • 作业控制说明语言是由一组作业控制命令组成的集合,专门用于批处理系统。
    • 作业控制说明语言是计算机系统给批用户提供的一个接口

    联机命令接口
    1. 命令行方式操作接口(键盘命令)
    2. 图形化界面(鼠标点击)
    • 终端用户使用的操作命令接口,主要实现人-机交互。 用户通过终端命令或者鼠标点击来控制作业的运行。
    • 该类接口涉及的服务程序:
      • “终端处理程序”
      • “命令解释程序”
      • “鼠标点击事件响应程序”
    程序级接口——系统调用
    • 操作系统还提供一种适用于应用程序中的功能调用接口,叫做 系统调用(system call)
    • 允许用户在自己的应用程序中调用系统中提供的一些功能模块。
    • 系统调用就是应用程序要调用系统程序。
    • 系统调用是应用程序获得操作系统服务的唯一途径。
    • 系统指令
      • 特权指令
      • 非特权指令
    • 特权指令是指那些直接管理控制系统资源和状态的指令,用错 可能导致整个系统崩溃。比如:清内存、设置时钟等。
    • 只有系统程序才能执行特权指令,应用程序只能执行非特权指令。
    系统调用的服务例程
    • 系统资源的分配、驱动、调度以及管理数据的检索、修改等操作,是不能允许用户程序自行处理的,否则系统就无安全性及管理控制之说了。
    • 操作系统以系统调用形式提供一系列实现预定底层功能的内核函数,每个系统调用都有写好的服务例程,每个服务例程有其入口地址。
    CPU的两种工作状态
    1. 管态(系统态)
      • 执行系统程序的状态,允许执行所有指令。
    2. 目态(用户态)
      • 执行用户程序的状态,只允许执行非特权指令。

    2.3系统调用

    系统调用分类
    1. 进程和作业管理类
    2. 文件操作类
    3. 设备管理类
    4. 主存管理类
    5. 信息维护类
    6. 通信类
    系统调用与API函数的区别
    • 系统调用
      • 程序级接口,通过该接口用户程序可以调用操作系统提供的功能模块(以函 数形式提供)。
      • 系统调用的服务例程在管态下执行。
    • API
      • 系统提供的应用函数库,也称应用程序接口,将一些常用功能函数事先实现,供用户程序直接调用,其中一些API函数的实现过程调用了一个或几个系统调用。
      • API函数在目态下执行。

    2.4作业的管理控制

    作业的管理控制
    • 批作业的状态管理
    • 批作业控制块的描述和组织
    • 不同的作业I/O方式
    • 不同的作业控制方式
    批作业的状态
    1. “后备状态”:已经提交到外存的“作业收容井”, 等待调度装入。
    2. “驻留状态”(运行状态):被作业调度选中,已经装入内存,处于宏观的运行状态。
    3. “完成状态”:作业相关代码已经执行结束,已不再占有内存空间和系统各种设备,正在等待卸出和数据缓输出。
    作业状态转换图
                      作业调度
    作业录入--->后背状态--->驻留状态--->完成状态--->作业卸出  
        Slooping输入                        Slooping输出
    
    作业控制块
    • 为了掌握作业的有关情况,管理程序需要对作业进行必要的登记。
    • 作业管理模块设置一种数据结构,叫做作业控制块 JCB(Job Control Block),用以记录作业的各项属性 和管理信息。
    作业控制块(JCB)的内容
    1. 作业号
    2. 作业类别
    3. 用户名及用户帐号
    4. 作业状态
    5. 提交到系统的时间
    6. 优先级别(或者响应比)
    7. 作业所在的外存位置
    8. 资源需求
    9. 运行长度
    10. 已经运行的时间 其他信息(收费标准, JCB队列指针等)
    作业的I/O方式
    • 联机I/O
      • 这是一种早期的输入输出方式,主机连接I/O设备,在作 业运行过程中,占用着CPU进行输入和输出过程。
      • 缺点:快速的CPU等待慢速的I/O设备。
    • 脱机I/O
      • 这是一种将I/O操作与主机运行相脱离的方式
    • 假脱机I/O
      • 这种方式又称作“在线外设并行访问”,简记为 Spooling。
      • 在这种方式中,不再单独设置专用的输入输出计算机,而是将输入输出功能从操作系统内核中分离出来,单独形成I/O进程,来完成用户的输入输出工作。
    作业控制方式
    • 操作系统必须对用户作业的全过程实施控制。
    • 作业控制可分为两种:
      • 脱机作业控制方式
      • 联机作业控制方式。
    1. 脱机作业控制方式
      • 这种管理方式,一般适用于批处理系统中。
      • 所有作业的控制信息都由用户按照系统提供的作业控制语言来 编制。
      • 用户提交作业之后,作业的运行完全脱离用户的干预。
    2. 联机作业控制
      • 联机作业控制,是大多数分时系统和实时系统采用的一种作业控制方式,整个控制过程由用户使用操作系统提供的操作命令,与计算机通过交互会话方式来控制作业执行。

    2.5作业调度

    作业调度
    • 作业调度又称为“高级调度”
    • 批处理系统中采用的一级调度。
    • 其主要功能是,从处于后备状态的作业中按照某种算法选择一道或者几道作业装入内存。
    • 作业调度主要解决的是作业与作业之间的自动转接问题,即免去作业控制中的人工操作的问题。
    作业调度要点
    • 选几道------单道系统只选一道;多道系统视内存容量决定。
    • 选哪几道------由作业调度算法决定。
    作业调度算法
    • 4种基础的作业调度算法
      1. 先来先服务(FCFS)调度算法
      2. 最短作业优先(SJF)调度算法
      3. 最高响应比优先(HRF)调度算法
      4. 最高优先级(HPF)调度算法
    • 均衡调度算法
    FCFS先来先服务调度算法
    • FCFS(First Come First Served)
    • 选择最先进入后备队列的作业装入内存。
    • 优点:比较容易实现。
    • 缺点:不区分作业长短,对短小作业十分不利; 不顾及轻重缓急; 对时间要求紧迫的作业不能做到急事急办。
    SJF最短作业优先调度算法
    • SJF(Shortest Job First)
    • 从后备作业中选择运行时间最短的作业装入内存。
    • 优点:照顾短作业用户的利益,提高系统吞吐量,让作业的平均周转时间降下来。
    • 缺点:推迟长作业运行,可能出现饥饿现象。估计运行时间本身有可能不太准确。
    HRF高响应比优先调度算法
    • HRF(Highest Response First)
    • 定义:作业的响应比
    R = frac{{t_{w}}+{t_{s}}}{{t_{s}}} +frac{{t_{w}}}{{t_{s}}}+1≈frac{{t_{w}}}{{t_{s}}}
    
    {{t_{w}}}:作业的等待时间。 
    
    {{t_{s}}}:作业的估计运行时间
    
    • 优点:折衷考虑到作业进入系统的先后次序,又顾及到作业的运行长度。
    • 缺点:每次调度都要计算每个作业的响应比,开销大。
    HPF最高优先级调度算法
    • HPF(Highest Response First)
    • 该算法每次总是选择后备作业中优先级最高的作业装入内存。
    • 当一个作业进入系统,系统根据用户级别、用户租金、作业类别、作业运行时间要求等为作业赋予一个优先级。
    • HPF是一种比较灵活的调度算法,优先级可以根据 需要灵活确定。
    • HPF经常作为基于作业运行紧迫性的一种调度方案。
    均衡调度算法
           作业分类 =
            egin{cases}
            计算型 \
            I/O型  \  
            均衡型
            end{cases}
    
    • 根据内存容量的限制,选择一组资源互补型的作业装入。
    • 目的:在作业运行期间,尽可能提高CPU和各种设备之间的并行度。
    作业调度性能的衡量准则
    1. 系统吞吐量高
      • 单位时间内系统完成的工作量称吞吐量。这是作业调度追求的第一目标。
      • Q吞吐量与作业的平均周转时间T有如下关系:
        平均周转时间T越小,系统吞吐量就越大
      • 定义:作业的平均周转时间
      T = frac1nsum_{i=1}^n{{t_{fi}}}-{{t_{bi}}}
      
      {{t_{fi}}}为第i个作业的完成时间
      
      {{t_{bi}}}为第i个作业的开始时间 
      
      n为单位时间内的作业数量
      
    2. 对短作业优惠
      • 这一准则主要为了吸引中小用户使用计算机。
      • 为了描述系统对短小作业的优惠程度,可使用作业的平均带权周转时间W作为评价参数。
      • 定义:作业的平均带权周转时间
       W = frac1nsum_{i=1}^n({t_{fi}}-{t_{bi}})/{t_{si}}
       
       {t_{si}}为第i个作业 的服务时间(也就是运行时间)
       
       W越小,说明系统对短小作业越优惠
      
      
    3. 其他指标
      • 处理机利用率高
      • 优先权有保证
      • 资源均衡利用
      • 响应时间有保证
      • 截止时间有保证

    第三章 进程管理和处理机调度篇

    3.1进程(Process)

    进程的重要性
    • 是操作系统最核心的概念之一;
    • 是操作系统要面对的最核心的管理对象;
    • 是占用CPU资源和其他资源的实体。
    进程的概念
    • 一个正在计算机上执行中的程序;
    • 一个能分配给处理器执行的实体;
    • 一个具有以下特征的活动单元:
    • 一组指令序列的执行、 一个当前状态和相关的系统资源集。
    • 简言之,进程是一个程序的一次动态执行过程。
    操作系统需要引进“进程”:
    • 一个程序的两次执行过程,在操作系统那里是两个相互独立的运行实体。
      使用“进程”描述每一个程序的每一次动态执行;通过“进程实体”来管理控制每一个程序的每一次执行过程。
    • 操作系统需要引进“子进程”,使大程序的程序段可以并 发,以加快程序推进且提高CPU利用率。
    现代操作系统是多道程序设计系统
    • 多道程序并发运行,共享CPU、内存、I/O设备等资源。
    • 并发运行方式的基本特征
      • 异步特征
      • 资源共享特征
      • 相互制约特征
      • 不可重现性特征(结果不唯一)(例如抢票)
    进程与程序的区别
    • 程序:完成一件事情的代码序列。
    • 进程:是一个程序的一次动态执行过程。
    • 程序是静态的;进程是动态的。
    • 程序只包含代码;进程包括要运行的代码、代码要 处理的数据、运行过程中的状态参数等。
    - 进程与程序的关联
    • 进程是操作系统为了管理控制程序的运行而加设的一 个概念和实体;
    • 程序不运行,就没有进程;
      一个进程是一个程序的一次执行过程。
    • 一个程序可能对应多个进程。

    作业、程序、进程的区分

    • 作业:用户提交给系统的一个计算任务。 批作业=程序+数据+作业控制说明书;交互作业=程序+数据+交互命令 作业是用于人机之间交互的一个概念。
    • 程序:程序是作业的组成部分。
    • 进程:进程对应一个程序的一次动态执行过程。

    3.2 进程与进程管理模块

    进程的特征
    • 动态特征:生命周期
    • 并发特征:在一个时间段内都处在宏观的运行状态
    • 独立特征:独立占有资源、独立参与CPU调度
    • 异步特征:运行推进速度不可预知
    • 结构特征:PCB(进程控制块)+进程体
    进程的组成
    - 进程控制块PCB(process control block) 记录进程的管理信息
    - 程序代码
    - 数据集
    
    • 进程控制块PCB的内容包括以下4部分
      • 进程标识
      • 调度信息
      • 处理机信息
      • 进程控制信息
    • PCB的内容
      (进程标识:系统识别进程的标志。)
      • 外部标识(也称作进程的外部名)是进程的创建者提供的进程名字,通常由字符串组成.
      • 内部标识(也称作进程的内部名,简记为Pid)是系统为进程命名的一个代码,通常是一个整型数。
      • 进程调度信息:系统调度选择进程的依据
        • 进程优先数,描述进程紧迫性的信息。
        • 进程状态信息,描述进程当前处于何种状态。
        • 其它调度信息。如:进程在系统中等待的时间、已在CPU上运行的 时间、剩余的运行时间有等。
      • 处理机信息(进程上下文)
        • 进程被中断时,该进程的CPU现场信息可以保存在它自己的PCB内, 以便该进程重新获得CPU时可以从此处恢复现场信息,继续运行。
        • 通用寄存器的内容:包括数据寄存器、段寄存器等。
        • 程序状态字PSW(Program Status Word)的值。
        • 程序计数器PC(Program Count)的值。 进程的堆栈指针等。
      • 进程控制信息:系统对进程实施控制的依据
        • 程序代码和数据集所在的内存地址。
        • 资源清单,记载进程请求资源和已经占有资源的情况。
        • 同步与通信信息。
        • 外存地址。
        • 家族信息。
        • 链接指针。
    • 进程管理模块的主要功能
      进程管理模块是os最重要的组成部分,功能分为
      • 进程控制
      • 进程调度
    • 进程控制功能
      • 管理控制一个进程的生命周期
        • 创建新进程,撤销结束进程。
        • 阻塞或唤醒进程。
        • 挂起或激活进程。
      • 管理控制多个进程的并发
        • 进程同步和进程互斥
        • 进程通信
    • 进程调度功能
      • 根据进程当前状态决定哪个进程获得CPU,以及占用多长时间。
      • 将CPU分给进程。

    3.3进程状态转换

    两状态进程模型

    (a) 状态转换图
    image
    (b) 队列轮转图
    image

    进程的三种基本状态

    image
    image
    image

    三状态进程模型及转换

    image

    加入两种扩展的挂起状态

    • 挂起
      • 将内存中当前某个尚不能运行的进程调到外存上去,腾出来的空间接纳更多的进程。这一 处理称作进程“挂起”(Suspend)。
      • 两种挂起状态(挂起某些暂时不能运行的进程,目的是腾出内存 装入更多进程,使CPU忙碌起来。)
        • 挂起阻塞(S-Blocked)状态
        • 挂起就绪(S-Ready)状态
    • eg:image

    3.4进程的创建与撤销

    • 进程从产生到消亡的整个过程中都是由操作系统来控制的。
    • 操作系统中实现进程控制的功能程序——“原语”。
    • 进程的创建和撤销
      1. 进程创建原语
      2. 进程撤销原语
    原语(Primitive)的概念
    • 机器指令构成的一种实现特定功能的小程序,它的运行具有不可分割性。
    • 特点:
      • 贴近底层
      • 运行过程具有原子性(不可中断)
      • 最重要的
      • 系统小程序
    • 操作系统中的原语类别
      进程控制用的原语-->实现进程管理和状态切换
      • eg:进程创建原语、进程撤销原语、阻塞原语、 唤醒原语、进程挂起原语、进程激活原语、进程调度原语等。
    进程创建原语
    • 以下4种事件会导致创建原语运行 :
      • 批作业调度。
      • 交互作业提交。
      • 系统提供服务。
      • 用户程序创建子进程。
    • 进程创建原语Create_Process():
    1. 索取一个空白PCB块。
    2. 填入进程信息:
      (2)-1 填入进程标识。
      (2)-2 PCB(优先级):赋予优先级或将JCB(优先级)填入。
      (2)-3 PCB(内存地址):请求分配内存或JCB (内存地址)或父进程的内存地址填入。
      (2)-4 PCB(资源清单):请求分配设备或JCB (资源清单)或父进程资源填入。
      (2)-5 PCB(家族信息):用户名或父进程名。
      (2)-6 PCB(现场信息):初始状态数据。
      (2)-7 PCB(进程状态):“就绪”。
    3. 挂入就绪队列。
    4. 若需要将程序代码和数据集装入 内存,可启动加载程序。
    进程撤销原语
    • 以下4种事件会导致撤销原语运行 :
      (1)进程自行终止。
      (2)用户或父进程的原因使进程终止。
      (3)运行超时而终止。
      (4)运行出错而终止。
    • 进程终止原语Destroy(id_name):
    1. 根据id_name查找被终止进程的进 程控制块PCB。
    2. 若该进程的状态是“运行”, 则置调度标志为TRUE。
    3. 回收PCB(资源清单)中登记的全部资源
    4. 将进程的PCB从所在队列摘下来,等 待其它程序来搜集信息。
    5. 对于该进程的所有子进程Sub,递归调用End_Process(Sub),将子进程终止。
    6. 如果调度标志=TRUE,启动进程调度 程序。

    3.5父进程与子进程

    • 进程什么时候被创建?
      • 操作系统创建用户进程
      1. 批作业调度。
      2. 交互作业提交。
      • 操作系统创建系统进程
        系统提供服务。
      • 用户程序创建用户进程
        用户程序创建子进程(用户程序通过调用 fork()函数实现)
    • 进程家族树
      • 父进程:执行过程中创建了其它进程的进程
      • 子进程:被父进程创建的进程
      • 子子进程……
    • fork() 函数说明
      函数原型 pid_t fork(void)
      • 该函数包含于头文件unistd.h中。
      • 建立一个新的子进程。其子进程会复制父进程的数据与堆 栈空间,并继承父进程的用户代码、组代码、环境变量、 已打开的文件代码、工作目录和资源限制等。
      • 如果fork()调用成功,则在父进程会返回新建立 的子进程代码(PID),而在新建立的子进程中则 返回0。
      • 如果fork() 失败则直接返回-1,失败原因存于errno 中。失败的原因有三个:系统内存不够; 进程表满(容量一般为200~400); 用户的子进程太多(一般不超过25个)。
    • 父进程创建子进程
      • UNIX中,父进程通过系统调用fork()创建子进程,子进程继承父 进程资源,父子进程各自独立。
      • 父子进程各自拥有自己的PCB、内存用户区、临时资源等,各自独立参与CPU调度。

    3.6进程状态转换控制原语

    • 何时调用阻塞原语?
      • 当正在运行的进程需要等待某一事件而发生运行受阻时,它通过中断请求系统服务。
      • 系统按照进程的需求进行适当处理后,启动“进程阻塞原语”将该进程阻塞起来。
    • 引起进程阻塞(运行受阻)的原因
      • 等待I/O
      • 请求资源得不到满足
      • 进程同步约束
      • 服务进程无事可做
    • 何时调用唤醒原语?
      • 当系统发生某一个事件时,正在等待该事件的进程需要立即被唤醒,由“阻塞”状态转 为“就绪”状态。
    • 进程被唤醒的原因
      • 所等的I/O操作已完成
      • 请求的资源得到了满足
      • 进程同步约束已撤销
      • 服务进程收到新的任务
    • 调用挂起原语的原因
    • 当前内存空间紧缺,部分进程优先运行
    • 应用户的要求,将用户进程挂起
    • 应父进程要求,将其子进程挂起
    • 何时调用激活原语?
      • 有进程运行完毕,当前内存空间并不紧张。
      • 应用户要求,将其进程激活。
      • 应父进程的要求,将将其子进程激活。
      • 或者进程自身设定的挂起周期已完成。

    3.7抢占式调度与非抢占调度

    • 进程调度功能
      从处于就绪状态的进程中,按照某种调度策略,选择一个进程切换给CPU,使其状态从就绪转为运行。
    • 从调度方式上看,进程调度有两种类型::
      • 非抢占式调度
      • 抢占式调度
    • 非抢占式调度
      当前进程主动放弃处理机控制权,可能的情况有:
      • 进程运行完毕退出;
      • 运行受阻;
      • 运行出错,非正常终止;
      • 遇到不可挽回的故障。
    • 抢占式调度
      也称作剥夺式调度,一般用于有实时需求的系统
      • 主要指在系统正常运转期间,如果某种事件出现,系统将迫使正在运行的进程停下来, 将CPU控制权交给其它进程。
      • 其思想源自对高紧迫度作业的响应。

    3.9实时任务调度

    • 实时系统的任务调度
      • 实时任务是一类对时间要求较为严格的进程支持这类任务运行的系统称为实时处理系统。
      • 实时系统分硬实时系统(任务的执行有严格 deadline,专用系统
        )和软实时系统(工业控制系统,信息处理系统)。
    • 实时任务的调度方式
      • 实时系统中的调度方式一般是剥夺式的。
        image
    • 非周期实时任务的分类及其调度方法
      • 紧迫型实时任务调度
      • 普通型的实时任务调度
      • 宽松型的实时任务调度
    • 紧迫型实时任务
      • 紧迫性强的任务多见于一些专用的、响应时间 要求特别苛刻的数据采集和控制系统中,所要求的 响应时间很短,一般是微秒量级的。
      • 解决的方法是, 采用“立即抢占的 HPF”调度算法。
        image
    • 普通型的实时任务
      • 大多数自动控制系统对响应时间的要求都不是太高,一般是毫秒量级的。由于它允许的响 应时间长度与时钟中断的周期基本吻合。
      • 采用 “基于时钟 中断抢占的高优先 级调度”算法。
        image
    • 宽松型的实时任务
      • 宽松型实时任务要求的响应时间比较长,一般可达 数百毫秒,甚至数秒钟。比如信息查询系统就属于此类任务。由于这类任务 的要求差异很大,通常又有很多不同的处理。
      • 宽松型的实时任务调度算法
        • 非抢占的 HPF调度算法
          image
        • RR算法
          image
    • 周期性实时任务的调度
      • 周期任务A第i次运行前的剩余时间FA(i)是:
        image
        TA为任务A的周期长度;TSA为任务A的每次执行时间长度; t 为系统的当前时间。
      • 周期性任务可采用SRT(最小剩余时间)调度算法。

    3.10线程的引入

    • 线程是什么?
      • 线程是现代操作系统引入的一种执行实体
      • 线程称“轻型进程”,是进程的组成部分
      • 进程是资源占有单位,线程只是CPU调度单位
    • 操作系统引入“线程”以后
      • 以线程为执行单位,多个线程可并发;
      • 而且线程切换时不用“背着包袱”换来换去,调度开销大大减少。
    • 多线程结构进程的优点
      • 快速线程切换
      • 通信易于实现
      • 减少管理开销
      • 并发程度提高

    进程与线程的区别

    1. 进程是个独立的实体单位:
      独立占有资源:进程拥有对资源的控制权或所有权。
      独立参与调度/执行:进程是一个可被操作系统调度 和分派的单位。
    2. 线程仅是分派(调度运行)的单位。
    3. 线程不是单独占有资源的单位。线程共享其所属进 程的资源。
    4. 操作系统中引入进程的目的是为了使多个程序并发执行, 以改善资源使用率和提高系统效率。
    5. 操作系统中再引入线程,则是为了减少程序并发执行时 所付出的时空开销,使得并发粒度更细、并发性更好。

    3.11处理机的四级调度

    • 处理机的调度层次
      (调度的主要目标——选择哪个实体进入内存、选择哪 个实体占用CPU。)
      • 作业调度
      • 中级调度
      • 进程调度
      • 线程调度
    • 典型的三级调度
      (作业从进入系统成为后备作业开始,直到运行结束退 出系统为止,需经历不同级别的调度。)
      • 高级调度(高级调度---又称作业调度、长程调度。从处于后备状 态的作业中选择一道或者几道,装入内存。)
      • 中级调度(中级调度---又称中程调度。优先从处于挂起就绪状态 的进程中选择一个或者几个,将之激活。)
      • 低级调度(低级调度---又称进程调度、短程调度。从处于就绪状 态的进程中选择一个,切换给CPU执行。

        image
    • 线程调度
      1. 线程称“轻型进程”,是进程的组成部分。
      2. 进程是资源占有单位,线程是CPU调度单位。
      3. 线程共享所属进程的资源。
      4. 线程分为用户级线程和内核级线程,调度方式不同。

    第四章 进程并发控制篇

    4.1互斥和同步的基本概念

    互斥
    • 可以共享,但是不能同时使用
    • 互斥——体现进程间竞争关系
    同步
    • 不但不能同时用,谁先用谁后用也有严格约束
    • 同步——体现进程间协作关系
    并发的基本概念
    • 并发(Concurrency)
      • 单处理器多道程序设计系统中,多个进程交替执行
      • 多个并发进程在一个时间段内都处于运行状态
      • 共享系统资源
      • 每个进程都“走走停停”
      • 并发带来异步性
    • 并发带来的问题
      • 并发进程的相对执行速度是不可预测的,取决于其他进程的活动、操作系统处理中断的方式以及 操作系统的调度策略。
      • 有可能发生各种与时间有关的错误。
    与并发相关的关键术语
    1. 临界资源(Critical Resources)
      • 也叫互斥资源 一种一次只能为一个进程服务的共享资源。
    2. 临界区(Critical Section)
      • 进程体中使用临界资源的代码段。
      • 使用同一临界资源的不同的代码段叫做相关临界区。
      • 当一个进程已经在临界区中运行时,也就是已经在使用临界资源了,其它进程不能进入相关临界区。
    3. 互斥(Mutual Exclusion)
      • 当一个进程在临界区访问临界资源时,其他进程不能进入相关临界区访问该资源。
      • 临界资源一个时刻只允许一个进程使用
      • 进程使用该临界资源的顺序没有约束 。
      • 体现竞争关系。
    4. 同步(Synchronization)
      • 不但不能同时使用临界资源,还得有严格的使用的先后顺序。
      • 体现协作关系。
    5. 死锁(Deadlock)
      • 两个或两个以上的进程,因其中的每个进程都在等待其他进程做完某些事情而不能继续执行,所有进程都阻塞等待,而且永远阻塞等待。
    6. 活锁(Livelock)
      • 两个或两个以上进程为了响应其他进程中的变化而持续改变自己的状态,但不做有用的工作。
    7. 饥饿(Starvation)
      • 一个可运行的进程被调度程序无限期地忽略,不能被调度执行的情形。
    8. 原子操作(Primitive)
      • 保证指令序列要么作为一个组来执行,要么都不执行。
    操作系统在管理和控制资源分配与使用方面,应当保证进程对临界资源的访问满足以下3点:
    1. 互斥访问要求。
    2. 不致于产生“死锁”。
    3. 不能有“饥饿”进程。

    解决进程同步和互斥的方法:

    1. 软件方法
    2. 硬件方法
    3. 信号量机制
    4. 管程机制

    4.2软件方法解决进程互斥

    互斥管理准则
    • 空闲让进
    • 忙则等待
    • 有限等待
    • 让权等待
    存在的问题:
    1. 违反空闲让进;
    2. 控制方式超出了互斥的要求。
    3. 可能违反“忙则等待”。
    4. 可能出现“活锁”,违反“空闲让进”。
    软件方法解决互斥问题失败的原因
    • 临界区前后所加代码越多,执行过程随时被打断的情况越多。
    • 所加代码中的turn、Flag[1]、Flag[2]本身也是临界资源
    • 没有考虑让权等待

    4.3信号量机制解决同步互斥问题

    信号量的基本原理
    • 两个或多个进程通过简单的信号进行合作。
    • 任何复杂的合作需求都可以通过适当的信 号结构得到满足。
    信号量机制实现要素
    • 信号量 (Semaphore类型,内含一个阻塞队列)
    • P操作原语 (wait)
    • V操作原语(signal)
    记录型信号量
    • 一个记录型信号量包含两个分量:
      信号量的值、信号量的等待队列指针
    type semaphore = record 
       value: integer; 
       *L: Queue;
       end.
       使用该类型声明一个信号量s var s: semaphore;或者semaphore s; 
       则 s.value的不同取值表示临界资源的使用情况;
       s.L对应因临界区不能进入而阻塞的进 程组成的阻塞队列
    
    P(s)
    s. value = s. value – 1 ; 
      if s. value < 0 
      then block (s.L) ;
    
    • 用于进临界区之前检查资源
    • 当临界资源被其他进程占用时,就将自己阻塞
    • 具有“阻塞”功能
    V(s)
    s.value = s. value + 1 ; 
      if s. value ≤ 0 
      then wakeup(s.L) ;
    
    • 用于出临界区释放资源
    • 它能将等待该资源的进程唤醒
    • 具有“唤醒”功能
    信号量机制解决互斥问题
    • 一种临界资源设一个信号量
    • 信号量的初值设置为系统初始状态临界资源的可用量
    • P操作用于临界区前,相当于进入临界区之前申请临界资源
    • V操作用于临界区后,相当于出临界区后释放临界资源
    • P、V操作必须成对匹配
    信号量机制解决同步问题
    • 一种同步信号设一个信号量
    • 信号量的初值设置为系统初始状态下信号的有无
    • P操作用于临界区前,相当于检查同步信号
    • V操作用于临界区后,相当于发出同步信号
    • P、V操作不成对匹配

    4.4管程机制

    管程(Monitor)
    • 管程是由局部数据结构、多个处理过程和一套初始化代码组成的模块。
    • 这是一种具有面向对象程序设计思想的同步机制。
    • 它提供了与信号量机制相同的功能。
    管程特征
    • 管程内的数据结构只能被管程内的过程访问,任何外部访问都是不允许的
    • 进程可通过调用管程的一个过程进入管程
    • 任何时间只允许一个进程进入管程,其他要求进入管程的进程统统被阻塞到等待管程的队列上。
    管程的定义
    管程的语言结构可描述如下:
    Type 管程名= Monitor 
        Begin 
          局部变量定义; // 数据结构定义 
          条件变量定义; 
          Porcedure 过程名(形式参数) // 过程定义 
          Begin … … … 
                    // 过程体 
          End; 
              … … … 
        End;
    
    管程机制的要素
    • 条件变量c(Condition类型):关联一个阻塞队列
    • P(c):当遇到同步约束,将执行P(c)操作的进程阻塞在条件变量c关联的阻塞队列上。
    • V(c):从条件变量c关联的阻塞队列上唤醒一个进程,让它恢复运行。若队列上没有进程在等待,就什么也不做。

    4.5死锁的发生与描述

    死锁
    • 一组相互竞争系统资源或进行通信的进程间的永久阻塞。
    • 死锁现象:
      • 每个进程获得了一部分资源,又申请另外的资源,得不到而转入阻塞 。
      • 若无外力作用,这些进程会一直阻塞下去。
    死锁的危害
    • 陷入死锁圈的进程无限期阻塞等待
    • 陷入死锁圈的资源被浪费
    • 更多进程卷入死锁
    • 甚至系统死机
    产生死锁的原因
    • 动态资源分配策略
    • 资源可用数量少于需求数量
    • 进程并发过程的偶然因素
      因有偶然性,所以无法给出死锁产生的充分条件

    死锁产生的4个必要条件

    1. 互斥条件
      • 进程请求的资源属于临界资源,每一瞬间只能由一个进程使用,其它申请该资源的进程等待。
    2. 不可剥夺条件
      • 进程获得某资源后,便一直占有它,直到用完为止才可以释 放,其它进程不可以剥夺。
    3. 请求和保持条件
    • 允许一个进程在保持已有资源不放弃的情况下,进一步请求 新资源,被阻塞时也不会释放已占有的资源。
    1. 环路等待条件
    • 一组进程{P1,…,Pn}的占有资源情况与请求资源情况构成 了一个环型链,比如P1等待P2的资源,P2等待P3的资源……Pn 等待P1的资源。
    面对死锁
    • 死锁是进程并发过程中可能发生的问题
    • 死锁有危害,轻则死锁进程死住,重则系统死机
    • 操作系统必须面对并解决死锁问题

    4.6死锁预防

    死锁处理方法
    • 事前处理措施
      • 死锁预防-----在资源分配策略上做限制,让死锁根本没有机会发生。
      • 死锁避免-----在每个进程的每次提出动态资源申请时,加设“银行家算法”以决定是否满足该请求。
    • 事后处理措施
      • 死锁检测
      • 死锁解除
    死锁预防方法分析
    • 从死锁产生的原因入手—— 不行,因为死锁产生有偶然性因素。
    • 从死锁产生的4个必要条件入手,破坏其中的一个或几个必要条件
      —— 可行
    能否破坏死锁产生的4个必要条件
    1. 破坏:互斥条件-----互斥共享资源不能改成同时共享,破坏该条件行不通。
    2. 破坏:不可剥夺条件------互斥共享资源被剥夺以后,进程需要重新执行,破坏该条件行不通。
    3. 破坏:请求和保持条件-----静态资源分配策略
    4. 破坏:环路等待条件----按序资源分配策略
    静态资源分配策略
    • 两个关键词:
      • 一次性
      • 全部
    • 两个要点:
      • 在进程运行开始之前,一次性申请全部所需资源
      • 在进程运行结束时,一次性释放全部所占资源
    • 采用静态资源分配策略以后
      • 缺点:资源有效利用率会降低,进程并发推进的速度会降低
      • 优点:进程一定不会发生死锁
    按序资源分配策略
    • 采用按序资源分配策略,资源使用效率会高于静态资源
      分配策略。但是不适用于开放性系统
    策略共同点:
    • 在资源分配策略上做限制,让死锁根本没有机会发生
    • 在资源利用率上都有所牺牲

    4.7死锁避免与银行家算法

    死锁避免
    • 前提: 采用动态资源分配策略
    • 措施:对每个进程的每次动态资源请求,加设“银行家算法”以决定是否满足该请求。
    银行家算法基本思路
    • 银行家拥有一笔周转资金,客户申请贷款
    • 检查客户信用,了解客户投资前景,判断有无出现呆账坏账的危险
    • 确无危险,才贷出
    银行家与操作系统类比
    • 操作系统<---->银行家
    • 操作系统管理的资源<---->周转资金
    • 进程<---->要求贷款的客户
    操作系统基本思路
    • 前提----采用动态资源分配策略
    • 银行家算法----每个进程提出资源申请时,加上一道检查
    • 假设分配,检查系统是否安全
      • 安全,则实施分配
      • 不安全,则不分配,进程阻塞等待
    • 主要思想----动态检测资源分配,以确保系统一直处于安全状态
    安全,不安全和死锁状态空间
    • 安全状态不是死锁状态
    • 安全状态是没有死锁危险的状态
    • 死锁状态是不安全状态
    • 不是所有不安全状态都是死锁状态
    安全状态
    • 安全状态---当前状态下至少能找到一个安全序列
    • 不安全状态---当前状态下没有安全序列
    • 安全序列——各进程能依次满足资源需求并运行完成的一个序列

    第五章 基本储存管理

    5.1存储管理概述

    存储管理对象---内存储器
    存储管理的管理目标
    • 内存的合理分配使用
    • 提高内存利用率
    • 程序、数据在内存中顺利读写
    • 小内存运行大程序
    内存管理主要功能
    1. 内存的分配和回收
    2. 地址重定位
    3. 地址共享和保护
    4. 地址扩充
    功能-1 内存的分配和回收
    实现目标 =
            egin{cases}
            合理分配 \
           及时回收\
            end{cases}
    
    功能-2 地址重定位(地址转换)
    • 实现目标---将逻辑地址转换成物理地址
    • 物理地址---存储单元的实际物理单元地址。
    • 逻辑地址---用户空间中使用的相对地址。
    • 静态重定位
      • 地址转换工作在进程执行前一次完成。
      • 无须硬件支持,易于实现,但不允许程序在执行过程中移动。
    • 动态重定位
      • 地址转换推迟到最后的可能时刻,即进程执行时才完成。
      • 允许程序在主存中移动,便于主存共存,主存利用率高。
    功能-3 地址共享与保护
    • 多道程序环境中,多个用户作业均使用内存空间,为提高内存利用率,应该对内存空间实现共享。
    • 共享的含义
      • 共享内存储器资源,让多个进程同时进入内存区域,共享同一个存储器;
      • 共享内存储器的某些区域,即允许两个或多个进程访问内存中的同一段程序或数据。
    • 地址保护
      • 用户进程不能访问或修改系统区
      • 用户进程不能访问或修改其他进程的用户区
    • 地址保护方法1: 存储键保护
      • 系统将主存划分成大小相等的若干存储块,并给每个存储块都分配一个单独的保护键(锁)。
      • 在程序状态字PSW中设置有保护键字段,对不同的作业赋予不同的代码(钥匙);钥匙和锁相配才允许访问。
    • 地址保护方法2: 界限寄存器
      • 上、下界防护:硬件为分给用户作业的连续的主存空间设置一对上、下界,分别指向该存储空间的上、下界 。
      • 基址、限长防护:基址寄存器存放当前正执行者的程序地址 空间所占分区的始址,限长寄存器存放该地址空间的长度。
    功能-4 地址扩充
    • 内存容量是有限的,当内存资源不能满足用户作业需求时,就需要对内存进行扩充。
    • 内存扩充不是硬件上的扩充,而是用存储管理软件来实现的逻辑扩充。
    • 覆盖技术  对换技术  虚拟存储技术
    存储管理方法
    • 连续存储管理
      • 单一连续区方式 ——内存用户区的全部空间只存放一个进程。
      • 多分区方式 ——内存被分为多个分区,每个分区存放一个进程。
        • 固定多分区
        • 动态多分区
    • 非连续存储管理
      • 分页方式 ——内存被划分为多个等长的存储块,每个进程占用其中的若干块,整个内存允许有多个进程同时驻留。
      • 多段方式 ——对分段结构的应用程序,按照段长度分别为之分配内存空间。
      • 段页方式 ——在分段式管理的基础上加上分页式管理可形成段页式管理。

    5.2连续分区存储管理之数据结构与主存分配算法

    连续分区存储管理
    • 实质特点:一个进程装入连续的一块内存空间。
    • 单分区方式——内存用户区的全部空间只存放一个进程。
    • 多分区方式——固定多分区,动态多分区。
    • 内存被分为多个分区,每个分区存放一个进程。
    • 每瞬间可有多个进程驻留在内存的不同分区中。
    连续分区存储管理
    • 数据结构
    • 主存分配算法
    数据结构
    • 主存分配表MAT(Memory Allocation Table)
      • 分区号:每个分区都有一个编号,用以区别不同分区。
      • 起始地址:分区的起始地址,即首地址。
      • 长度:分区的总长,一般以KB为单位。
      • 占用标志:记录分区的使用状态。若占用标志为0,表明该 分区为空闲,可以进行分配。
    • 空闲区表/链:记录内存空闲区状况的数据结构。
      • 有空闲区链中各空闲区可按地址顺序来排列,也可按 尺寸大小来组织。当系统进行内存分配时,进行的处理是:
        • 通过空闲区链,快速搜索内存的空闲区。
        • 从中找出最合适的分区分配出去。
        • 将该结点从链上删除。
      • 当需要回收某块被释放的区域时,系统处理过程为:
        • 按其地址或者大小在链中找到合适的位置。
        • 插入一个新结点。
        • 若存在相邻的空闲区,则需要的话可将相邻空闲区合并。
    主存分配算法
    • 首次适应算法First_Fit
    • 循环首次适应算法Circle_First_Fit
    • 最佳适应算法Best_Fit
    • 最坏适应算法Worst_Fit
    首次适应算法(FF,First Fit)
    • 首次适应算法也称为最早适应算法。系统将内存分区按地址递增顺序登记到内存分配表(或其它数据结构)中。
    • 每次进行内存分配时,系统根据进程申请空间的大小,从头到尾顺序扫描内存分配表(或空闲分区表),从中找到的第1块能够满足要求的空闲区,就立即分配出去。
    循环首次适应算法(CFF,Circle First Fit)
    • 该算法的思想是,每次存储分配总是从上次分配的位置开始,向 尾部查找。查到的第1块可满足用户需求的空闲空间,分配给用户。 当查到MAT(或空闲链表)的尾部仍然没有合适的,转到头部继续。
    最佳适应算法(BF,Best Fit)
    • 在内存分配时,从空闲区表中找到一块满足进程需求的最 小空闲区分配给它。
    • 这种做法减少了将大空闲区进行多次分割造成的空间浪费。但容易形成一些很小的碎片无法使用,同样不能提高内存利用率。
    • 另外,每次分配时,都要对整个内存区进行从头到尾的搜索,系统开销较大。
    最坏适应算法(WF,Worst Fit)
    • 在进行内存分配时,从空闲区表中找到一个满足长度要求的最大空闲区进行分配。
    • 这种算法部分地缓解了由外碎片引起的浪费,适合于中小作业的运行,但对大作业的运行是不利的。与最佳适应算法一样,每次分配需要搜索一遍内存,效率会受到一定影响。

    5.3固定多分区存储管理

    连续分区存储管理方法
    • 单分区存储管理
    • 固定多分区存储管理
    • 动态多分区存储管理(可变分区)
    单分区存储管理
    • 基本原理:把内存的用户区视为一个独立的连续存储区, 任何时刻只将它分配给一个作业使用。
    • 这种存储管理非常简单,适用于单用户单任务系统 (如,MS-DOS操作系统的早期版本)。
    单分区存储管理的缺点
    • CPU的利用率不高
    • 外设利用率较低
    • 内存空间浪费严重
    固定多分区存储管理
    • 将内存用户区划分成多个大小相等或不等的固定分区,每一个分 区可以装入一个进程。这样,内存中可同时容纳若干个进程。
    • 分区大小可以相等,也可以不等
    • 每个分区的起始地址和长度是固定的
    • 注意:有可能出现的问题
      • 大的进程无法装入
      • 小进程装入大分区出现内部碎片
    内碎片
    • 内碎片,指的是进程获得的空间大于需求的空间时,多出来的空闲区。
    • eg:把17KB的放到20KB的分区中,会产生3KB的内碎片。
    • 内碎片的产生降低了内存的有效利用率。
    固定分区方案的缺陷
    • 分区的数目在系统生成阶段已经确定,限制了系统中活动进程的数目。
    • 分区大小在系统生成阶段事先设置,大作业有可能无法装入,小作业不能有效地利用分区空间。
    • “内碎片”现象降低了内存有效利用率。
    固定分区应用案例
    • 早期的IBM主机操作系统OS/MFT
    • 具有固定任务数的多道程序设计系统

    5.4动态多分区存储管理

    动态多分区存储管理
    • 基本原理-----系统不预先划分固定 分区,而是在装入进 程时,根据进程的实 际需求量划分出一个 分区给它使用。
    外碎片
    • 外碎片-----指的是在使用动态多分区管理方法时,形成的一些零零星 星的、因为太小不容易被分配利用的小的空闲区。
    消除外碎片的方法
    • 主存分配过程中,通过程序浮动将不相邻的空闲区移为相邻的进行合并。
    • 回收过程中,相邻空闲区进行合并。
    动态多分区地址转换与存储保护

    动态多分区存储管理小结
    1. 实现了多进程共驻内存,支持多道程序设计技术。
    2. 按照进程所需划分分区,消除了内碎片。
    3. 外碎片的产生和消除加大了系统开销。
    4. 克服了固定多分区的缺点。
    5. 不足
      1. 外部碎片的存在降低了内存利用率;
      2. 外部碎片的整理加大了系统开销。

    5.5基本分页存储管理

    基本原理
    1. 内存被划分成大小固定相等的块(Frame帧、页框、主存块),且块相对比较小。
    2. 每个进程装入时被分成同样大小的页(Page), 一页装入一帧
    3. 整个进程被离散装入到多个不连续的帧
    页面长度
    • 页面的尺寸(页面长度)由计算机系统的硬件决定。
    • 目前流行的页面尺寸是1KB到4KB之间,但也有一些 机器不在此范围内。
    位示图
    • 位示图:整个系统一张,记录内存使用情况
      • 一个0/1位对应一个帧的空闲/占用
    • 位示图的使用
      • 设字号i、位号j、帧号k取值均从0开始,字长记为L
      • 分配时,查位示图, 找空闲帧: k=i*L+j
      • 回收时,i= [ k/L ] //整除
        j= k MOD L //取余
      • 由帧号可知位示图中字号和位号
    页表PT
    • 为了保证程序的正确运行,分页管理机制应为每个进程建立一个数据结构——页表PT (Page Table)。
    • 页表中登记进程各页面对应的帧号,供地址映射使用。
    • 页表示例
      • 页表:每个进程一张PT,记录本进程分页及占用帧的情况
    地址划分
    • 进程装入之前,逻辑地址是一维的
    • 进程装入之后,逻辑地址分为两维
    • eg:若机器的地址码是16位,页面长度是1KB,
      则地址划分结果:低10位是页内地址,高6位是页号。
    地址重定位

    分页式存储管理中的地址形式

    动态地址重定位

    逻辑地址---->物理地址
    
    一维、二维---->二维、一维
    
    地址保护

    总结基本分页式存储管理

    • 离散 存储,利于大进程装入
    • 只有很少的页内碎片,提高内存利用率
    • DS :位示图、 页表;动态地址重定位
    • 页面共享不易实现

    5.6基本分段存储管理

    分段管理技术
    • “段” 是一个逻辑单位是进程的一个组成部分。如主程序段、子程序段 、数据段等。
    • 在结构程序设计中进程自然分段。
    • 用户源程序使用的符号地址是二维的:<段名 变量名> 。
    • 编译之后的逻辑地址是二维的:<段号 段内偏移> 。
    进程按逻辑分段

    在分段机制中,一个进程的地址空间可以包含以下不同的段:

    • 代码段 (Code Segment)
    • 数据段 (Data Segment)
    • 堆栈段 (Stack Segment)
    • 内存共享段 (Share Memory Segment)
      等。
    基本分段存储管理原理
    • 进程的程序和其相关的数据按逻辑分段。
    • 段有一个最大长度限制,但不要求所有程序的所有段的长度都相等。
    • 一段占用一块连续存储区。
    • 各段占用不连续分区。
    记录内存使用情况的数据结构
    • MAT
    • 空闲分区表/链
    • 这里的 MAT 表与动态多分区中 MAT 表的有何异同?
      • 相同点-----MAT的一个表项,对应内存一个分区。
      • 不同点
        • 动态多分区中,一个分区存放一整个进程 。
        • 分段存储中,一个分区存放进程的一个段。一个进程离散成多个段装入多个不连续的分区。
    记录各个进程分段情况的数据结构
    • 段表ST (Segment Table)为每个进程设置一张段表,用来记录各个段地址映射的关系。
    • 进程分了几段段表就有几个表项。
    • 一个表项记录一个分段在内存空间中的存储地址和长度。
    地址重定位
    • 逻辑地址: 二维
    • 硬件支持:CPU设段表控制寄存器 ,记录当前进程段表的起始地
      址和段表长度。
    • 物理地址:一维
    分段保护
    • 第一级保护是防止进程发生超出存储空间的访问;
    • 第二级保护是阻止进程超出访问权限的读写。
    • 分段保护的具体保护分为以下三个步骤:
    分段共享
    • 段面共享:如果多个用户进程需要共享内存中的某些代码段或数据段时,可将内存中共享段的起始地址及长度,填入这些进程的段表当中,就可共享一个逻辑上完整的段信息了。
    • 共享段表SST:为了实现段的共享,系统设一个共享段表SST(Sharing Segment Table),记载各个共享段的使用情况。任何一个进程调用共享段时,系统都将访问该表。

    总结基本分段式存储管理

    • 离散存储 ,一段连续装,各段不连续。
    • 内存仍然按分区管理,会产生外碎片。
    • DS MAT 、段表;动态地址重定位。
    • 分段共享非常方便。

    存储管理方法小结

    连续存储管理
    • 单分区方式 内存用户区的全部空间只存放一个进程。
    • 多分区方式 内存被分为多个分区,每个分区存放一个进程。每瞬间可有多个进程驻留在内存中。
    离散存储管理
    • 分页方式-----内存被划分为多个等长的存储块,每个进程占用其中的若干块,整个内存允许有多个进程同时驻留。
    • 分段方式-----对于分段结构的应用程序,一段的分配一块连续空间,各段离散存入不同分区。这种方式同样允许每瞬间有多个进程驻留在内存。
    分页与分段
    • 分页
      • 分页存储利于大进程装入,内存利用率高;
      • 但是,页是物理页,页面共享不易实现。
    • 分段
      • 段是逻辑段,方便实现分段共享;
      • 但是,外碎片的存在降低内存使用效率;且整理消除外碎片加大系统开销。

    5.7基本段页式存储管理

    基本段页式存储管理
    • 把分页和分段两者结合起来就是段页式存储管理 。
    • 内存划分成大小小等的页框。
    • 用户的地址空间被程序员划分成许多段,每个段一次划分成许多固定大小的页,页的长度等于内存中的页框大小。
    数据结构
    • 系统设一张位示图记录内存各帧占用与否;
    • 系统为一个含有多分段的进程建立段表,记录各个分段对应段内页表的地址和长度。
    • 一个分段有一个段内页表,记录该段划分为多少页每页分配的帧号是多少 。
    地址形式
    • 系统的硬件支持是,在处理机内部设有 段表控制寄存器 及 地址生成逻辑。
      1. 程序中的逻辑地址仍然是二维地址<段号 偏移量>;
      2. 每段装入时分页地址部分被当作三维地址来处理:<段号 页号 页内偏移>;
    段页式地址重定位

    段页式地址保护

    段页式地址字结构的计算
    • 比如一个 32 位 地址字,已知系统设定页面长度 为 4KB
      段的长度为 64KB 则地址划分如下:
    • 于是,页内需12 位,每段分 16 页,段内页号需 4 位,
      剩余 16 位为段号。

  • 相关阅读:
    邂逅明下(巴什博弈+hdu2897)
    抽象接口的过程小结
    线程经常使用操作
    对继承的再次理解
    阿里Java开发手冊之编程规约
    [持续更新]Windows Programming常见Hungarian Notation/Abbreviation大全
    [转]__cdecl与__stdcall
    private继承的作用
    [转]C++中的三种继承public,protected,private
    如何只利用NMAKE+CL+LINK写WIN32程序
  • 原文地址:https://www.cnblogs.com/313-moon/p/13256898.html
Copyright © 2020-2023  润新知