3.操作系统

news2024/12/23 22:33:42

文章目录

  • 1.操作系统概述
    • (1)当前操作系统的主要类型
    • (2)操作系统的特点
    • (3)五种主要的功能
    • (4)考点分布
  • 2.进程
    • (1)进程的状态
    • (2)进程的定义
    • (3)典型真题:PCB 的组织方式
    • (4)前驱图
    • (5)典型真题:前驱图
  • 3.PV 操作
    • (1)进程间的执行关系
    • (2)PV 操作解决互斥问题
      • PV 操作实现
      • PV 操作实例
      • 典型真题:PV 操作
    • (3)PV 操作解决同步问题(生产者进程-消费者进程)
      • PV 操作实现规则1、2
      • PV 操作实现规则3
    • (4)PV 操作解决同步问题(第二种情况)
  • 4.存储管理
    • (1)地址重定位(程序从外存到内存做地址的变换)
      • 静态重定位
      • 动态重定位
    • (2)操作系统如何管理内存
      • 分区管理
        • 固定分区
        • 可变分区
        • 可重定位分区(常用)
      • 分页管理(重要)
        • 典型真题:分页管理
      • 分段管理
        • 典型真题:分段存储
      • 段页式管理(了解)
      • 虚拟存储
  • 5.设备管理
    • (1)输入输出设备与 CPU 之间的关系
    • (2)典型真题:DMA
  • 6.文件管理(位示图法)
    • 典型真题:位示图
  • 7.文件管理(总览)
    • (1)将硬盘按逻辑分块
    • (2)用位示图记录块的使用情况
    • (3)建立文件查询功能
    • (4)增加超级块、块描述符
    • (5)根目录
    • (6)总览
  • 8.文件管理(索引节点)
    • (1)典型真题:间接索引

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以上。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jeecg低代码主从表打印

1.在在线开发菜单栏中选择online表单开发,新建两张表,分别为主表和附表。 2.首页进入报表设计——积木报表设计。 3.进入报表管理——打印设计,选择一个模板或者新建都可以。 4.进入设计页面,点击数据集管理右边的添加数据表&a…

高通开发系列 - 驱动模块Oops后如何找到出错位置

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题概述问题现象出错定位问题概述 加载驱动模块时发生:Kernel panic - not syncing: Fatal exception 那么如何找到驱动模块出错的…

抖音AI绘画变成真人软件

抖音AI绘画成人软件的发展可能包括以下几个方面: 算法优化:随着深度学习算法的不断发展,未来该技术可能会通过改进模型架构、优化训练方式等手段,提高生成图像的质量和自然度。 多样化的绘画风格:为了满足用户…

【软考备战·希赛网每日一练】2023年5月12日

文章目录 一、今日成绩二、错题总结第一题第二题第三题第四题 三、知识查缺 题目及解析来源:2023年05月12日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要…

2021 第十二届蓝桥杯大赛软件赛决赛, 国赛,C/C++ 大学B组题解

2021 第十二届蓝桥杯大赛软件赛决赛, 国赛,C/C 大学B组题解 文章目录 第1题 —— 带宽 (5分)第2题 —— 纯质数 (5分)第3题 —— 完全日期 (10分)第4题 —— 最小权值 (10分&#xf…

MySQL之快速查询的秘籍 【B+树索引】

前言 本文章收录在MySQL性能优化原理实战专栏,点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的:从根儿上理解MySQL》 😄学完前面我们讲解了InnoDB数据页的7个组成部分,知道了各个数据页可以组成一个双…

Linux 多线程(3)多线程应用、信号量、线程池、单例模式

应用 生产者与消费者模型 生产者与消费者模型---设计模式的一种 设计模式--程序员针对一些典型的应用场景所给出的一种典型的解决方案 应用场景--在有大量数据任务产生的同时需要进行任务处理的场景 如果采用单执行流解决: 效率低下 资源利用不一定合理(…

【Python数据分析】常用内置函数(一)

🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第四期 ⭐本期内容:常用内置函数 🏆系列专栏:Python数据分析、挖掘与可视化 👍“总有一段时光悄悄过去然后永远怀念.” 文章目录 前言类型转换int(…

Vue---列表渲染

目录 一、列表渲染的基本使用 (1)渲染数组数据 (2)渲染对象数据 二、v-for指令的高级用法 三、列表过滤 四、列表排序 一、列表渲染的基本使用 使用v-for指令可以将数组,对象数据渲染成列表视图 (1&a…

前端自学好还是培训好?女生有多适合学前端,我来告诉你!

2023年了,你是否还在迷茫或者每个月拿着5/6k做着卷死的工作,不但存不下钱还不能好好享受生活,如果是,那你真该考虑一下转行了。 好程序员先说说前端到底怎么开始学: 有的伙伴说今年28岁了,学的会计&#xf…

Vue中的MVVM【第三篇】

大纲: MVVM图示 🌈 一、MVVM简介 简单来说:MVVM(M-VM-M),一种更好的UI模式解决方案,MVVM通过数据双向绑定让数据自动地双向同步。 M(Model):Model数据模型,json格式数据…

Revit中如何创建曲面嵌板及一键成板

一、Revit中如何创建曲面嵌板 在我们的绘图过程中可能会遇见一些曲面形状,而我们的常规嵌板没办法满足我们绘制的要求,我们今天学习如何在revit中绘制曲面嵌板。 1.新建“自适应公制常规模型”族,创建4个点图元并为其使用自适应。 2.在相同的…

linux系统内核调试手段——动态输出

https://xuesong.blog.csdn.net/article/details/109522945?spm1001.2014.3001.5502 使用动态输出是系统内核调试的重要手段之一。 内核使用大量的pr_debug()/dev_dbg()函数来输出信息,使用了动态输出的技术。在使用动态输出时,记住需要挂载debugfs文件…

Java 8 ConcurrentHashMap 源码分析

文章目录 1. ConcurrentHashMap 的底层结构2. ConcurrentHashMap 的元素存储过程3. ConcurrentHashMap 的扩容3.1 扩容的过程3.2 源码分析 1. ConcurrentHashMap 的底层结构 JDK 1.8 的 ConcurrentHashMap 底层数据结构与 HashMap 基本相同,二者在容量机制、Entry …

测试的分类(按测试对象、是否查看代码、开发阶段、实施组织...... + 思维导图总结)

目录 一、测试的分类 1. 按测试对象划分 2. 按照是否查看代码划分 3. 按照开发阶段划分 4. 按照测试实施组织划分 5. 按照是否运行划分 6. 按照是否手工划分 7. 按照地域划分 二、总结 一、测试的分类 1. 按测试对象划分 (1)界面测试 简称UI测…

Centos配置OpenVPN+OpenLDAP认证

Centos配置OpenVPNOpenLDAP认证 一、安装openvpn-auth-ldap插件二、配置ldap.conf文件三、配置openvpn中的server.conf文件四、配置客户端client.ovpn文件五、开启路由转发功能六、脚本编辑七、测试 Centos搭建OpenVPN的环境有很多资料,自行查询配置 一、安装openv…

工作两年了,不想做客服,转行学数据分析改变未来!

不想做客服,转行学数据分析改变未来! 从今年开年以来,已经接触了很多转行人群的课程咨询,其中比较有代表性的原职业就是客服,听到对职业的抱怨大多是:工作辛苦,待遇又低,又没前途&am…

基于WiFi的CSI数据做呼吸频率检测-python版

一、概述 本Demo无需机器学习模型,Demo功能涉及的理论主要参考了硕士学位论文《基于WiFi的人体行为感知技术研究》,作者是南京邮电大学的朱XX,本人用python复现了论文中呼吸频率检测的功能。Demo实现呼吸速率检测的主要过程为: …

15-721 chapter12 查询计划

查询模型 查询模型就是定义如何支持服务端多个并发服务,这里我们引入了worker的抽象概念,可以是线程也可以是进程,就是支持客户端请求并且返回结果的。 进程模型 进程池模型 不利于cache,并且进程之间的通信依赖于tcp,shared me…

外贸独立站必备神器AB斗篷

做独立站仿品的都知道,如果需要在FB、Google等平台上打广告,必须先上正品才能通过审核,而且就算通过了审核,后期平台也会不定期地去检查。所以当平台的审核爬虫来,商家必须先跳到正品网页规避审核,当买家过…