3.操作系统

1.操作系统概述

(1)当前操作系统的主要类型

  • Windows
  • iOS
  • UNIX(非开源)
  • Linux(开源)

在这里插入图片描述

(2)操作系统的特点

  • 操作系统是计算机中非常重要的一款系统软件。如果没有操作系统,想去使用其它的软件都是没有办法实现的。
  • 操作系统相当于计算机的指挥者,它会指挥计算机的软件、硬件去完成我们希望计算机完成的各种各样的功能。
    -
  • 操作系统还是系统硬件资源的,以及其它软件资源的监视者。可以使用任务管理器查看当前用户的所有的进程,以及每一个进程所占用的内存情况,从而达到监视系统资源使用情况的目的。
    在这里插入图片描述
  • 产生 Hello.exe 文件,由操作系统完成存放。
  • Hello.exe 文件的启动。
  • 分配内存。
  • 操作系统调用显卡,将字符串显示到显示器上。
    在这里插入图片描述

(3)五种主要的功能

  • 对硬件资源的管理
    • 处理器管理(CPU)
    • 存储器管理(存储器)
    • 设备管理(输入输出设备)
  • 对软件资源的管理
    • 文件管理(使用和操作文件时,由操作系统将外存中的文件调入到内存中)
    • 用户接口
      在这里插入图片描述

(4)考点分布

  • 进程的概念、进程之间的关系(前驱图)、约束进程之间的关系(PV操作)
  • 运行程序,需要把外存的程序调入到内存中,外存地址和内存地址不一致,要做地址的变换(逻辑地址与物理地址的变换)。文件在内存、外存中的存储方案。
  • 操作系统如何调用输入输出设备。输入输出设备与 CPU 的工作方式。
  • 文件的组织方式。文件索引的类型。
    在这里插入图片描述

2.进程

(1)进程的状态

  • 进程:用户的程序。
  • 三态模型和五态模型的区别:进程的多少。如果进程很多,进程不能都存放在内存中,会把某些进程挂起到外存当中。
  • 运行:进程正在使用 CPU。
  • 就绪:进程正在等待使用 CPU。
  • 阻塞:当前进程正在等待外部事件发生。
  • 运行 -> 就绪:分时操作系统,进程的时间片到了。
  • 运行 -> 阻塞:听音乐时有电话打入,将音乐暂停。
  • 阻塞 -> 就绪:不能直接运行,需要排队。
    -

(2)进程的定义

  • PCB 中存储当前进程所处的状态、需要那些数据、与其它进程的关系。
    在这里插入图片描述 - PCB 是一种数据结构,是进程存在的唯一标识。
    • 线性方式:数量少的时候。
    • 链接方式:用指针链接的方式不像线性方式需要每次扫描。只需要找到该状态的指针,顺着指针就能把该状态的 PCB 都找出来。
    • 索引方式 :PCB 数量多时。指针指向索引表,索引表的表项指示了 PCB 的位置。

在这里插入图片描述

(3)典型真题:PCB 的组织方式

在这里插入图片描述
在这里插入图片描述

(4)前驱图

  • 前驱图:表示进程之间的先后顺序,谁是先完成的,谁是后完成的,这种关系是一种同步关系
    在这里插入图片描述

(5)典型真题:前驱图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.PV 操作

(1)进程间的执行关系

  • 如果进程之间串行执行,结果是正确的。
  • 实际过程中,进程之间不一定是串行执行的,也可能是交叉执行的,因为 i 是一个全局变量(或者说是一种临界资源),结果会出现错误。

在这里插入图片描述

(2)PV 操作解决互斥问题

  • PV 操作:在进入临界区(临界区中会操作临界资源)之前为了防止冲突,先执行加锁操作(P操作),执行完毕后执行解锁操作(V操作)。
  • PV 操作用于解决进程之间抢占资源会产生冲突的问题。P 操作可能产生的结果就是会阻塞当前进程。V 操作可能会唤醒某些进程。

在这里插入图片描述

PV 操作实现

  • PV 操作都会操纵一个叫做信号量的变量。每一次进入临界区之前,先进行一个 P 操作,把信号量的值减一。当离开临界区之后,会执行一个 V 操作,把信号量的值加一。
  • 信号量的初值可以理解为当前资源的个数。

在这里插入图片描述

PV 操作实例

在这里插入图片描述
在这里插入图片描述

典型真题:PV 操作

在这里插入图片描述
在这里插入图片描述

(3)PV 操作解决同步问题(生产者进程-消费者进程)

  • 前驱图可以体现进程之间的同步关系。 当前进程结束之后,后续进程才能够开始。
  • 关键操作:如果当前操作涉及到后面的合作进程,那么当前的操作就叫关键操作。
  • 同步问题:
    • 生产者生产过快,消费者还没来得及去取,生产者不断的覆盖已经在缓冲区中的5个数据。
    • 消费者消费过快,生产者还没来得及生产,消费者不断的重复消费数据的工作。
  • 解决:
    • 在关键操作之前执行 P 操作。
    • 在关键操作之后执行 V 操作。

在这里插入图片描述

PV 操作实现规则1、2

  • 生产者
    • P 操作:当 empty 为 0 时,生产者不能将数据存到缓冲区,生产者阻塞在缓冲区之外。可以存放时,将 empty 减 1。
    • V 操作:数据存到缓冲区之后,full 加 1。
  • 消费者
    • P 操作:当 full 等于 0 时,数据为空,停止消费数据。大于 0 时,开始消费数据。
    • V 操作:取出数据之后,empty 减 1。

在这里插入图片描述

PV 操作实现规则3

  • 缓冲区不止要进行同步的操作,还会有互斥的问题(一次只能有一个生产者或消费者访问),缓冲区就是临界资源,因此有一对互斥操作mutex围绕着缓冲区。

在这里插入图片描述

(4)PV 操作解决同步问题(第二种情况)

  • 信号量数量:图中的边有几条,信号量数量就设置为几个。
  • 分配信号量:从左到右,从小到大的顺序。如下图所示。
  • P1:V(S1)、V(S2)。
  • P2:P(S1)、P(S3)、V(S4)。
  • P3:P(S2)、V(S3)、V(S5)。
  • P4:P(S4)、P(S5)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.存储管理

在这里插入图片描述

(1)地址重定位(程序从外存到内存做地址的变换)

Linux与进程内存模型
https://zhuanlan.zhihu.com/p/61049063?utm_source=wechat_session

  • 程序计数器(Program Counter,PC)中存储的是下一条指令所在的内存单元地址(程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC。在拥有 MMU 的情况下,其中存放的是虚拟地址,使用动态重定位,在无 MMU 平台中,其中存放的是物理地址,使用静态重定位)。因为冯诺依曼体系结构计算机中的指令是顺序存储在内存中的,所以 PC 每一次加一就得到了下一条指令的内存单元地址。

在这里插入图片描述

静态重定位

  • 程序在没有装载到内存之前就固定划分好了内存中的一块区域给程序使用。
  • MOV AX, [500] :把逻辑地址空间为 500 的单元的内容放到 AX 寄存器中。
  • 内存起始地址为 5000,因此所取数据的物理地址为 500 + 5000 = 5500。
  • 静态重定位是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。

在这里插入图片描述
在这里插入图片描述

动态重定位

  • 动态重定位是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。
  • 地址重定位机构需要一个或多个基地址寄存器 BR 和一个或多个程序虚拟地址寄存器 VR,指令或数据的内存地址 MA 与虚拟地址的计算关系如下:MA =(BR)+(VR),这里的(BR),(VR)分别表示寄存器中的内容。

在这里插入图片描述
在这里插入图片描述

(2)操作系统如何管理内存

  • 分页存储管理(基本分页存储管理)
  • 分段存储管理(基本分段存储管理)
  • 段页式存储管理(基本段页式存储管理)
  • 虚拟存储管理
    • 请求分页存储管理
    • 请求分段存储管理
    • 请求段页式存储管理

在这里插入图片描述

分区管理

  • 把主存的用户内存(还有内核内存)划分成若干个区域,每个区域分配给一个用户作业使用,并限定它们只能在自己的区域中运行。
  • 使用静态重定位,划分的都是连续的区域

在这里插入图片描述

固定分区

  • 操作系统预先把可分配的主存空间分割成若干个连续区域。一旦分好,则每个分区的大小固定不再变化,且分区的个数也不再改变。一个分区只能容纳一道作业。会产生内部碎片,内存利用率低。
  • 操作系统需要建立一个数据结构——分区说明表,来实现各个分区的分配与回收。
  • 当某用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表,从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改状态为“已分配”。

在这里插入图片描述

可变分区

  • 动态地划分内存。即在作业装入内存时把可用内存“切出”一个连续的区域分配给该作业,且分区大小正好适合作业的需要。为了实现动态分配,系统设立空闲分区链表:

在这里插入图片描述

  • 每个空闲块的前后两个单元,放置必要的说明信息和指针。系统只要设立一个链首指针,指向第一个空闲块即可。分配程序可以依照自由块链表,来查找适合的空闲块进行分配。

在这里插入图片描述

  • 可变分区分配算法(空闲块链接的方式不同)
    • 首次适应算法:为作业选择分区时总是按地址从低到高搜索,只要找到可以容纳该作业的空白块,就把该空白块分配给该作业。
    • 最佳适应算法:为作业选择分区时总是寻找其大小最接近于作业所要求的存储区域。为了加速查找,该算法要求将所有的空闲区按其大小递增次序排列。
    • 最差适应算法:选择最大的分配。

在这里插入图片描述

可重定位分区(常用)

  • 解决了可变分区分配所引入的外零头问题(系统中无法利用的小存储块)。
  • 提高硬件成本,紧凑时花费CPU时间。
  • 为了消除外零头,进一步提高主存的利用率,定时地(或者在主存空间紧张时)把主存中的作业“搬家”集中在主存的一端。另一端就产生了一个大的空闲区。这种技术称为存储器的“紧凑 ”。
    在这里插入图片描述

分页管理(重要)

  • 在分区管理中,常常引入了“零头”问题。尽管采用“紧凑”技术可以解决这个问题,但要为移动大量信息花去不少的处理机时间,代价较高。
  • 逻辑地址:页号 + 页内地址(页内的偏移量)。默认是32位的二进制地址,低位部分表示页内地址、高位部分表示页号。
  • 页表开始地址加上页号找到相应的物理块号。物理块号加上块内地址得到物理地址。
  • 分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。
  • 一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
  • 页大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。
  • 页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。
    在这里插入图片描述
  • 程序中需要获取地址为 2100 的数据。假设页和物理块大小都为 1024B,则计算得出页号为 2(页号从 0 开始,是第三个页),页内地址为 52。通过页表查到在内存的物理块号为 8,则物理地址等于 8 * 1024 + 52 = 8244B。

在这里插入图片描述

典型真题:分页管理

  • 默认一个存储单元的大小是 1 Byte,并且存储单元的地址是从 0 开始的。因此已知页面大小为 4KB = 2 ^ 12,则页的地址长度为 12 位。逻辑地址低位12位为页内地址,即页内地址为 D16,页号为 1。
  • 通过页表可得,物理块号为 3,则物理地址为 3D16H。

在这里插入图片描述
在这里插入图片描述

  • 1111 / 512 = 2,页号为 2,物理块号为 4。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分段管理

  • 段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。
  • 段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。
  • 分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
  • 段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

在这里插入图片描述

典型真题:分段存储

在这里插入图片描述
在这里插入图片描述

段页式管理(了解)

  • 页式和段式的折中
    在这里插入图片描述

虚拟存储

  • 上述三种内存管理方式都需要把整个用户程序完全的放入到内存空间之后,才可以进行相应的操作。

在这里插入图片描述

5.设备管理

(1)输入输出设备与 CPU 之间的关系

  • 输入输出设备与 CPU 之间的关系:串行工作、并行工作。
  • 按照两种工作方式,可以把设备分为以下三种:

在这里插入图片描述

  • 程序查询:CPU 需要等待。

在这里插入图片描述

  • 中断方式:输入输出、读写都需要把数据暂存到寄存器中。需要 CPU 停下,做一些输入输出的工作。

在这里插入图片描述

  • DMA:输入输出设备可以通过 DMA 控制器直接操纵内存数据。
    在这里插入图片描述

(2)典型真题:DMA

在这里插入图片描述

6.文件管理(位示图法)

  • 每一位对应文件存储器上的一个物理块(物理块的大小不定),取指 0 和 1 分别表示空闲和占用。

在这里插入图片描述

典型真题:位示图

  • 256 / 64 = 4,由于物理块的编号是从 0 开始的,因此 256 号物理块是第257块,即在第 4 位,第 0 位。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.文件管理(总览)

(1)将硬盘按逻辑分块

在这里插入图片描述

(2)用位示图记录块的使用情况

在这里插入图片描述
在这里插入图片描述

(3)建立文件查询功能

  • inode:包含一个文件的信息,如文件名称、文件类型(是目录还是文件)、文件大小、文件创建时间、文件权限、所在块号等。
  • inode表:存放 innode。
  • inode位图:记录 inode表的使用情况。
    ### inode
    在这里插入图片描述
  • 所在块号的大小为 4 * 8 字节。
  • 为了能记录更多的块号信息,让其中一个块,作为间接索引。这样瞬间就有 263 个块(多了 256 -1 个块)可用了,这种索引叫一级间接索引
  • 如果还嫌不够,就再弄一个块做一级间接索引,或者做二级间接索引(二级间接索引则可以多出 256 * 256 - 1 个块)。

在这里插入图片描述

  • 如果是普通文件,inode 的所在块号指向了文件存储在哪些数据块中,数据块中是文件本身原封不动的内容。
  • 如果是目录文件,inode 的所在块号指向了几个数据块,数据块中存储的是目录下的文件信息。
    在这里插入图片描述

(4)增加超级块、块描述符

  • 超级块:记录块、innode 的使用情况。存储 inode 数量、空闲 inode 数量、块数量、空闲块数量等信息。
  • 块描述符:记录块位图、inode 位图、inode 表分别都可以占用多个块
    在这里插入图片描述

(5)根目录

  • 将 inode 表中的 0 号 inode,就表示根目录,一切的访问,就从这个根目录开始。
    在这里插入图片描述

(6)总览

在这里插入图片描述

8.文件管理(索引节点)

  • 直接索引:直接指向一个数据块。
  • 一级间接索引:指向一级索引。

在这里插入图片描述

(1)典型真题:间接索引

  • 6 * 4KB + 1024 * 4KB + 1024 * 1024 * 4KB = 4198424KB。
  • 逻辑块号
    • 直接索引:0~5。
    • 一级索引:6~1029。
    • 二级索引:1030以上。

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/name_sakura/article/details/130505964