实用指南:软件设计师——04 操作系统

news/2025/10/3 19:25:30/文章来源:https://www.cnblogs.com/ljbguanli/p/19124893

实用指南:软件设计师——04 操作系统

1 操作系统概述

1.1 操作系统的基本概念

1.2 操作系统分类及特点

  • 操作系统有批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统、微型计算机操作系统和嵌入式操作系统等类型;
    • 批处理操作系统:像IBM的OS/360 。在早期计算机资源昂贵时,用户将一批作业提交给计算机,系统会自动依次处理这些作业,无需用户干预,提高了计算机的运用效率 。比如,多个用户提交的计算任务,系统会按照一定顺序逐个处理,减少了人工执行切换任务的时间。但用户无法实时与作业交互,若作业中出现问题,也不能及时处理;
    • 分时操作系统:UNIX 是典型代表。它将CPU的时间划分成多个时间片,轮流分配给多个用户作业利用,使得每个用户都感觉自己独占计算机。例如,多个用户同时登录服务器,每个用户都能高效地执行命令、编辑档案等操作,环境会快捷切换,让用户察觉不到其他用户的存在。这种系统交互性强,用户行及时得到响应;
    • 实时操作系统:VRTX操作系统常用于工业控制、航空航天等领域 。它能在规定的时间内对外部事件做出响应,具有高可靠性和实时性。比如在汽车的电子控制系统中,实时操作系统要能迅速处理传感器传来的信号,如刹车信号、油门信号等,及时控制相应的部件,保障行车安全;
    • 网络操作系统:Windows NT Server 。它主要用于管理网络中的资源,供应网络通信、资源共享、网络管理等功能。像在企业局域网中,通过网络操作系统,员工可能共享打印机、文件服务器上的资料等资源,还能实现不同计算机之间的通信和协作;
    • 分布式操作系统通过:Apache Hadoop 。它将多个分散的计算机节点组成一个系统,这些节点能够分布在不同地理位置。用户采用时就像使用一台计算机一样,系统会自动分配任务到各个节点进行处理,提高了系统的处理能力和可靠性。比如在大数据处理中,分布式操作系统允许将海量数据分散到多个节点存储和计算,加快数据处理速度;
    • 微型计算机操作系统:我们常见的Windows操作系统(如Windows 10)和macOS 。它们主导用于个人计算机,为用户献出图形化的操作界面,方便用户进行各种日常操作,如办公、娱乐、上网冲浪等。同时,它们还能管理计算机硬件资源,运行各类应用程序;
    • 嵌入式操作系统:Linux嵌入式操作系统,广泛应用于智能家电、智能家居设备、车载电子设备等。例如智能电视中,嵌入式操作系统可能管理电视的硬件资源,让用户能够流畅地观看视频、安装应用程序等;在车载导航设备中,它可以实现地图导航、多媒体播放等功能,对硬件设备的控制精准且高效 。

2 进程管理

2.1 基本概念

2.1.1 程序与进程

2.1.2 进程的状态及其转换

  • 三态模型:含有运行态、就绪态和阻塞态

    在这里插入图片描述

  • 五态模型:包含运行态、就绪态、阻塞态、新建态和终止态

2.2 进程的控制

2.3 进程间的通信

  • 多个并发进程存在资源共享和相互合作的情况,所以进程之间需要进行通信。

2.3.1 同步和互斥

2.3.2 信号量机制

  • 实用搭建进程同步和互斥的工具就是信号量(Semaphore)机制,有两类信号量:

    • 公用信号量(互斥信号量):对临界资源采用互斥访问,初值为1或资源的个数;

    • 私有信号量(同步信号量):对共享资源访问控制,初值为0或某个正整数;

  • 信号量SSS的物理意义:若S≥0S \geq 0S0,表示可用的资源数;若S≤0S \leq 0S0,其绝对值表示阻塞队列中等待该资源的进程数;

  • PPPVVV操作:均为原子处理,是实现同步和互斥的常用途径;

    • PPP操作:表示申请一个资源,即S=S−1S = S - 1S=S1。若S≥0S \geq 0S0,则执行PPP操作的进程继续执行;若S<0S < 0S<0,则执行PPP操作的进程进入阻塞状态;
    • VVV操作:表示释放一个资源,即S=S+1S = S + 1S=S+1。若S>0S > 0S>0,则执行VVV操作的进程继续执行;若S≤0S \leq 0S0,则唤醒一个进程,并将其插入就绪队列,然后执行VVV处理的进程继续执行;
  • 利用PVPVPV执行构建进程的互斥:令信号量mutexmutexmutex的初值为111,当进入临界区时执行PPP操作,退出临界区时执行VVV操作。代码段为:

    P(mutex)
    临界区
    V(mutex)
  • 利用PVPVPV操作实现进程的同步:以“一个生产者和一个消费者,缓冲区可存放nnn件产品”的典型同步问题为例

    • 设置333个信号量SSSS1S_1S1S2S_2S2

      • SSS是互斥信号量,初值为111(基于缓冲区是临界资源);
      • S1S_1S1表示是否可能将产品放入缓冲区,初值为nnn(即缓冲区的容量);
      • S2S_2S2表示缓冲区是否有产品,初值为000(即缓冲区初始无产品);
    • 生产者流程:

      • 生产一个产品
      • P(S1)P(S_1)P(S1),即 S1=n−1S_1=n-1S1=n1,表示生产者申请运用缓冲区中的一个位置
      • P(S)P(S)P(S),表示生产者要使用缓冲区
      • 产品送缓冲区
      • V(S)V(S)V(S),表示生产者已经使用完缓冲区
      • V(S2)V(S_2)V(S2),即 S2=0+1=1S_2=0+1=1S2=0+1=1,表示缓冲区中有一个产品
    • 消费者流程:

      • P(S2)P(S_2)P(S2),即 S2=1−1=0S_2=1-1=0S2=11=0,表示消费者申请取走缓冲区中的一个产品
      • P(S)P(S)P(S),表示消费者要使用缓冲区
      • 从缓冲区取一个产品
      • V(S)V(S)V(S),表示消费者已经使用完缓冲区
      • V(S1)V(S_1)V(S1),即 S1=n+1S_1=n+1S1=n+1,表示消费者释放缓冲区中的一个位置
      • 消费

    在这里插入图片描述

  • 练习:假设框架有n(n ≥ 5)个进程共享资源R且资源R的可用数为5。若采用PV操作,则相应的信号量S的取值范围应为()。

    • A. -1~n - 1
    • B. -5~5
    • C. -(n - 1)~1
    • D. -(n - 5)~5

    D

2.3.3 前驱图

  • 前趋图的作用是表示任务之间的顺序关系以及并行执行关系;

  • 例:

    在这里插入图片描述

    • 任务P2P2P2P3P3P3可以并行执行,但必须要等P2P2P2P3P3P3都执行完后,才能执行P4P4P4
  • 通过这样的关系,能够确定任务间的并行关系以及任务间的先后顺序。

2.4 管程

2.5 进程调度

  • 指就是进程调度方式当有更高优先级的进程到来时如何分配CPU,分为可剥夺和不可剥夺两种:
    • 可剥夺:当有更高优先级的进程到来时,强行将正在运行进程的CPU分配给高优先级的进程;

    • 不可剥夺:当有更高优先级的进程到来时,必须等待正在运行的进程释放占用的CPU,然后将CPU分配给高优先级的进程;

2.5.1 三级调度

2.5.2 调度算法

  • 先来先服务(FCFS):按先后次序分配CPU。有利于长作业,不利于短作业;有利于CPU繁忙型作业,不利于I/O繁忙型作业;
  • 时间片轮转:分配给每个进程时间片,轮流占用CPU。通过时间片轮转提高进程并发性和响应时间特性,从而提高资源利用率;
  • 优先级调度:环境选择优先级大的进程占用CPU;
  • 多级反馈调度:时间片轮转和优先级调度结合而成
    • 设置多个就绪队列1112223⋯n3\cdots n3n,每个队列分别赋予不同的优先级,队列111最高,队列nnn最低,分配不同的时间片长度;
    • 新进程先进入队列111的末尾,执行时按FCFS原则执行队列111中的进程;
    • 若在规定时间片长度内未能执行完某个进程,则将其转入队列222的末尾,依次类推。

2.6 死锁

2.6.1 死锁及其产生的必要条件

  • 死锁定义:两个以上的进程因相互争夺对方占用的资源而陷入无限等待的现象;

  • 死锁产生的4个必要条件

    • 互斥(资源互斥):资源具有排他性,即一个资源在同一时间只能被一个进程使用;

    • 请求保持(进程占有资源并等待其他资源):进程已经占有了部分资源,又去请求其他进程已占有的资源,并且在请求过程中保持自己已占有的资源不释放;

    • 不可剥夺(体系不能剥夺进程资源):进程已占有的资源,在未使用完之前,不能被体系强制剥夺,只能由进程自己释放;

    • 环路(进程资源图是一个环路):存在一种进程资源的循环等待链,链中的每个进程都在等待下一个进程所占有的资源;

      在这里插入图片描述

      P1 和 P2 是进程,R1 和 R2 是资源,其中的小圆圈个数表示资源个数;

      上图表示 P1 请求 R1 中的资源,但是 R1 中的资源被分配给了 P2;P2 请求 R2 中的资源,但是 R2 中的资源被分配给了 P1;

      分配优先!

2.6.2 进程资源图

2.6.3 死锁的处理逻辑

  • 死锁预防:采用特定策略限制并发进程对资源的请求,破坏死锁产生的4个必要条件(互斥、请求保持、不可剥夺、环路),让系统在任何时刻都不满足死锁产生的必要条件,从而预防死锁发生;

  • 死锁避免:提前计算出不会产生死锁的资源分配方法,著名的死锁避免算法是银行家算法

  • 死锁检测:允许死锁产生,但系统会定时运行死锁检测程序,判断平台是否发生死锁,若检测到死锁,就设法解除;

  • 死锁解除:是死锁发生后的解除技巧,比如资源剥夺法、撤销进程法等;

  • 死锁资源的计算:系统内有nnn个进程,每个进程都需要RRR个资源,那么发生死锁的最大资源数为n∗(R−1)n*(R - 1)n(R1)不发生死锁的最小资源数为n∗(R−1)+1n*(R - 1)+1n(R1)+1

    假设一个系统中有3 个进程(n = 3),它们都在竞争同一种资源(比如打印机),每个进程都需要2 个这种资源才能顺利完成任务(R = 2);

    发生死锁的最大资源数

    • 公式n∗(R−1)n * (R - 1)n(R1)
    • 代入计算3∗(2−1)=3∗1=33 * (2 - 1) = 3 * 1 = 33(21)=31=3,即当体系中此种资源的总数等于或小于 3 个时,就有可能发生死锁
    • 死锁场景
      • 假设架构恰好有 3 个资源
      • 操作系统可能把这 3 个资源分别分配给 3 个进程,每个进程获得 1 个资源
      • 此时,每个进程都已经占用了 1 个资源,但都还需要 1 个才能完成
      • 它们会互相等待对方释放手中的资源,但谁也完成不了任务,谁也不会释放资源
      • 这就形成了一个僵局,即死锁
      • 状态:P1(1/2), P2(1/2), P3(1/2),架构剩余资源 = 0

    不发生死锁的最小资源数

    • 公式n∗(R−1)+1n * (R - 1) + 1n(R1)+1
    • 代入计算3∗(2−1)+1=3+1=43 * (2 - 1) + 1 = 3 + 1 = 43(21)+1=3+1=4,即当系统中这种资源的总数至少为 4 个时,无论如何分配,系统都不会发生死锁
    • 安全场景
      • 假设环境有 4 个资源
      • 无论操作系统如何分配(例如 P1=1, P2=1, P3=2),必然会有至少一个进程能获得它所得的全部资源(在这个例子里是 P3,它获得了 2 个资源)
      • 这个幸运的进程(P3)就能顺利执行搞定
      • 当 P3 完成后,它会释放自己占用的 2 个资源
      • 此时系统剩余的资源就足够让其他等待的进程(P1 和 P2)获得它们所需的资源并依次完成
      • 这样,死锁就被避免了

2.6.4 练习

  • 假设体系中有三类互斥资源R1R_1R1R2R_2R2R3R_3R3,可用资源数分别为8、7和4。在T0T_0T0时刻环境中有P1P_1P1P2P_2P2P3P_3P3P4P_4P4P5P_5P5这5个进程,这些进程对资源的最大需求量和已分配资源数如下表所示:

    在这里插入图片描述

  • 若有如下4个执行序列,那么进程按什么序列执行,系统状态是安全的;

    • P1→P2→P4→P5→P3P_1→P_2→P_4→P_5→P_3P1P2P4P5P3
    • P2→P1→P4→P5→P3P_2→P_1→P_4→P_5→P_3P2P1P4P5P3
    • P4→P2→P1→P5→P3P_4→P_2→P_1→P_5→P_3P4P2P1P5P3
    • P4→P2→P5→P1→P3P_4→P_2→P_5→P_1→P_3P4P2P5P1P3

    D

2.7 线程

3 存储管理

3.1 基本概念

3.2 存储管理方案

  • 存储管理的主要目的:解决多个用户采用主存的障碍;

  • 分区存储管理将主存的用户区划分为若干区域,每个区域分配给一个用户作业使用,且限定作业只能在自己的区域中运行。按划分方式不同,可分为:

    • 固定分区:静态分区方式,把主存划分为若干固定分区,将作业装配进去。由于分区固定,可能与作业大小不同,会产生碎片,造成空间浪费;

    • 可变分区:动态分区方式,主存空间的分区在作业装入时划分,分区大小与作业大小相同。其请求与释放算法有:

      • 最佳适应算法:系统中有nnn个空白分区时,用户申请空间,从这nnn个空白分区中找最接近用户需求的分区,可能产生许多无用的小分区(外碎片);

        假设有三个空白分区:1k、2k、4k,现在来了个1.8k的作业,那么该作业会被分配到2k的分区中;

      • 最差适应算法:系统总是将用户作业装入最大的空白分区;

        1.8k的作业会被分配到4k的分区中;

      • 首次适应算法:系统从主存的低地址开始选择能装入作业的空白分区;

      • 循环首次适应算法:每次分配都从刚分配的空白分区开始寻找能满足用户要求的空白分区;

        假设现在给当前作业分配的是2k,那么对于下一个作业,就从2k开始往下寻找合适的空白分区;

    • 可重定位分区:可解决碎片问题,移动所有已分配好的分区,使之成为连续区域,在用户请求空间得不到满足或某个作业执行完毕时进行;

      比如将1k、2k、4k这三个已分配的分散的分区合并成为连续区域,那么这三个分区之间的碎片也可能合并成一个大的区域,供作业利用;

  • 分区保护:目的是防止未经核准的用户访问分区。

3.3 分页存储管理

3.4 分段存储管理

  • 分段存储管理的基本操作:将进程空间划分成若干个段,每段有段号和段内地址,且每段是一组完整的逻辑信息;

  • 分段地址结构:地址结构分为段号段内地址两部分;

    在这里插入图片描述

  • 分页与分段的区别

    • 分页是根据物理空间划分,每页大小相同;
    • 分段是根据逻辑空间划分,每段是一个完整的功能,便于共享,但大小不同;

    划分依据

    • 根据物理空间划分(分页):分页是将主存物理空间和进程的地址空间,按照固定大小的单位(页和物理块 )进行划分。比如常见的页大小设置为 4KB、8KB 等,划分时不考虑程序的逻辑结构,只从物理存储和地址空间的管理角度出发,把地址空间机械地分割成等长的区域;
    • 根据逻辑空间划分(分段):分段是依据程序自身的逻辑结构来划分。例如,一个程序可能由代码段(存放程序指令)、数据段(存放全局变量等数据 )、堆栈段(用于函数调用和局部变量存储)等组成,每一段代表了程序中一个相对独立的逻辑功能模块,段的大小根据实际逻辑模块的大小而定,不固定;

    大小特性

    • 根据物理空间划分(分页)固定相等的。这样便于内存分配和管理,地址转换机制相对简单统一 。但对于程序来说,可能会导致一个逻辑上完整的模块被拆分到多个页中,出现页内碎片(一个页被使用部分小于页大小 ,剩余空间无法利用);就是:页的大小
    • 根据逻辑空间划分(分段):段的大小不固定,完全取决于对应的逻辑模块的实际大小。比如代码段可能较大,而一些小型的辅助素材段可能较小。这种方式能很好地反映程序的逻辑结构,不过在内存分配时,可能会因为段大小差异较大,导致内存空间分配不够紧凑,产生外部碎片(内存中存在一些小的空闲区域,由于大小不够无法满足大段的分配需求);

    目的和作用

    • 根据物理空间划分(分页):主要目的是提高内存的利用率和管理效率。通过将内存划分成固定大小的块,可以更方便地进行内存分配和回收,实现虚拟内存等作用,使多个进程能够更高效地共享物理内存。;
    • 根据逻辑空间划分(分段):更侧重于满足脚本在逻辑上的模块化需求,方便代码的编写、调试、维护和共享。例如,不同的程序可以共享代码段,程序员在编程时也可以按照逻辑特性自然地组织程序结构,同时便于实现对不同段的访问控制(如代码段只读,数据段可读写);

    地址转换

    • 根据物理空间划分(分页):地址转换过程主要是凭借页表,将逻辑地址中的页号转换为物理块号,再结合页内地址得到物理地址,相对较为简单直接;
    • 根据逻辑空间划分(分段):地址转换时,需要先通过段表找到段的起始地址,再将段内地址与起始地址相加得到物理地址。由于段大小不固定,段表中除了记录段号和段起始地址外,还可能需要记录段的长度等信息,以确保访问的合法性,地址转换过程相对复杂一些。

3.5 段页式存储管理

3.6 虚拟存储管理

  • 在之前的存储管理方案中,必须为每个作业分配足够空间来装入全部信息,若主存空间不满足作业要求,作业就无法装入主存执行;

  • 如果一个作业只部分装入主存便可开始启动运行,其余部分暂时留在磁盘上,在需要时再装入主存。从用户角度看,系统所具有的主存容量比实际主存容量大得多,这样的存储器称为虚拟存储器;

  • 脚本的局部性原理:CPU对主存中的指令和数据的访问,在一小段时间内,总是集中在一小块存储空间里;

    • 时间局部性:最近被访问过的指令和数据很可能被再次访问;
    • 空间局部性:最近访问过的指令和数据往往集中在一小片存储区域中;
  • 页面置换算法

    • 有时候,进程空间分为10个页面,而系统内存只有3个物理块,无法一次性全部分配,就要求先分配一部分进程,再根据算法进行淘汰,这类淘汰算法称为页面置换算法;

    • 缺页:即要执行的页不在物理内存中,需要从外部调入内存的现象。缺页会增加执行时间,缺页次数越多,系统效率越低;

    • 具体页面置换算法

      • 最佳置换算法:理想化的算法,选择最长时间不再被访问的页面进行置换;

      • 先进先出置换算法:淘汰最先进入主存的页面,即选择在主存中驻留时间最久的页面予以淘汰;

      • 最近最少未使用置换算法:选择最近最少未使用的页面予以淘汰,根据局部性原理,这种方式效率较高;

        最近最少未使用的页面,即在一段时间内,被访问次数最少或者距离上一次访问时间最久的页面

      • 最近未用置换算法:优先淘汰最近未访问的,而后淘汰最近未被修改的页面。

4 设备管理

4.1 概述

  • 现代计算机系统配备多种设备,如打印机、显示器、绘图仪、扫描仪、键盘和鼠标等,设备存在多种不同分类方式。

4.2 I/O软件

4.3 设备管理采用的相关技术

  • 通道技术:CPU只需向通道发出I/O命令,通道收到命令后从主存取出本次I/O要执行的通道程序并执行,仅当通道完成I/O任务后才向CPU发中断信号。目的是使数据传输独立于CPU,将CPU从繁琐的I/O工作中解脱出来;

  • DMA技术:即直接内存存取,指材料在主存与设备之间直接成块传送,主存与设备间传送一个内容块的过程不得CPU的任何干涉;

  • 缓冲技术:包括硬件缓冲(硬件寄存器)和软件缓冲(操作系统)。目的是提高外设利用率,尽可能使外设处于繁忙状态。引入缓冲技术的原因有:

    • 缓和CPU与I/O设备之间速度不匹配的矛盾;
    • 减少对CPU的中断频率,放宽对中断响应时间的限制;
    • 提高CPU和I/O设备之间的并行性;
  • Spooling技术:即假脱机技术,是用一类物理设备模拟另一类物理设备的技术,能使独占利用的设备变成多台虚拟设备;

    • 以将打印机模拟为虚拟打印机为例,当某进程要求打印输出时,操作系统在磁盘上的输出井中为其分配一块区域,进程的输出数据高速存入输出井相关区域,而非直接在打印机上输出
    • 输出井上的区域相当于虚拟打印机,各进程打印输出内容暂时存放在输出井中形成输出队列,结果由Spooling的输出程序依次将输出队列中的素材实际打印输出
    • 从用户角度看,似乎独占一台打印机;从系统角度看,同一台打印机可分时为每个用户服务,用户进程获得的是虚拟设备。该技术缓和了CPU与I/O设备之间速度不匹配的矛盾,提高了CPU与I/O设备之间的并行程度;
  • 练习:

    在这里插入图片描述

    B C

    单缓冲:

    • 第一个磁盘块被输入到缓冲区(花费10us),然后传送到用户区(花费6us);
    • 用户区要进行处理的时候,I/O设备就可以将下一个的磁盘块读入到缓冲区,此时I/O设备读入磁盘块到缓冲区的时间和用户区处理上一个磁盘块的时间是重合的(10us > 2us),所以可以忽略用户区处理磁盘块的2us;
    • 可是注意终于一个磁盘块在用户区的处理时间是要算上的(花费2us);
    • 总时长:(10+6)*10+2 = 162us

    双缓冲:

    • 第一个磁盘块被输入到缓冲区1(花费10us);
    • 重合的(10us > 6us+2us),所以可以忽略这两段时间;就是之后要传送到用户区的时候,I/O设备空闲了,且缓冲区2也是空闲的,此时I/O设备可以将下一个磁盘块输入到缓冲区2,其所花费的时间与上一个磁盘块从缓冲区1传送到用户区 + 用户区处理上一个磁盘块的时间
    • 但是注意最后一个磁盘块在传送与用户区的处理时间是要算上的(花费6us+2us);
    • 总时长:(10)*10+6+2 = 108us

4.4 磁盘调度

5 材料管理

5.1 文件与文件系统

5.2 档案的结构和组织

5.2.1 资料的逻辑结构

5.2.2 记录的物理结构

  • 档案的物理结构指文件的内部组织形式,即文件在物理存储设备上的存放方法,包括:

    • 连续结构:逻辑上连续的文件信息(如记录)依次存放在连续编号的物理块上;

    • 链接结构:逻辑上连续的文件信息存放在不连续编号的物理块上;

    • 索引结构:逻辑上连续的文件信息(如记录)存放在不连续的物理块中,框架为每个文件建立一张索引表,索引表记录了档案信息所在的逻辑块号对应的物理块号;

      注意要与链接结构区分:链接结构会存储下一个物理块的地址(类似链表);而索引结果是通过索引表整体记录逻辑块号与物理块号的映射关系;

    • 多个物理块的索引表:根据文件大小不同,其索引表占用物理块的个数不同,一般占一个或多个物理块;

      假设有一个大记录,文件大小远远超过单个物理块所能容纳的大小

      前提条件:框架中物理块大小为4KB4KB4KB(即 4×1024=40964 \times 1024 = 40964×1024=4096字节),每个索引项大小为444字节,用于记录材料信息所在的物理块号;

      单个物理块索引表的存储能力:由于每个物理块大小是4KB4KB4KB,每个索引项是444字节,那么一个物理块可以存放的索引项数量为:4096÷4=10244096 \div 4 = 10244096÷4=1024说,一张索引表最多能指向就是个。也就102410241024个物理块来存储文件数据;

      大文件的存储情况:假设有一个非常大的文件,要求300030003000个物理块来存储其全部信息。显然,单个物理块组成的索引表(最多指向102410241024个物理块)无法满足需求,此时就要用到多个物理块的索引表

      • 第一张索引表:架构先分配一个物理块作为索引表,这张索引表中的102410241024个索引项,分别指向文件材料存储的前102410241024 个物理块;
      • 第二张索引表:接着分配第二个物理块作为索引表,这张索引表中的102410241024个索引项,指向文件数据存储的第102510251025 到第 204820482048 个物理块;
      • 第三张索引表:再分配第三个物理块作为索引表,它的前976976976个索引项(因为3000−2048=9523000 - 2048 = 95230002048=952),指向文件资料存储的第204920492049 到第 300030003000 个物理块;

      索引表的管理

      • 为了记录这些索引表的信息,系统会有一个专门的超级索引(或者叫索引的索引 ),它记录了这三张索引表各自所在的物理块号;
      • 当要访问该材料中的信息时,环境先读取超级索引,找到各个索引表所在的物理块,然后从相应的索引表中获取文件数据所在的物理块号,最终访问到文件信息;

      通过此种多个物理块索引表的方式,即便文件非常大,要求大量物理块存储内容,系统也能够实用地管理和定位文件数据,搭建对大文档的支持;

  • 在UNIX文件系统中采用三级索引结构,其文件索引表项分4种寻址方式:直接寻址一级间接寻址二级间接寻址三级间接寻址

5.2.3 三级索引文件结构

5.3 文件目录

  • 文件目录是一种数据结构,用于标识系统中的资料及其物理地址,供检索时使用。

5.3.1 文件控制块(FCB)

5.3.2 目录结构

  • 文件目录结构的组织方式直接影响文件的存取速度,关系到记录的共享性和安全性。常见的目录结构有3种:
    • 一级目录结构:整个系统中只建立一张目录表,每个文档占一个目录项,不允许文件重名

      在这里插入图片描述

    • 二级目录结构

      • 早期多用户操作系统采用的两级目录结构,分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User File Directory);
      • 主文件目录记录用户名及相应用户文件目录的存放位置,用户文件目录由该用户的文件FCB组成;
      • 这种结构允许不同用户的记录重名,也可在目录上实现访问限制,但缺乏灵活性,用户不能对自己的档案进行分类

      在这里插入图片描述

    • 多级目录结构

      • 在多道程序设计体系中常采用的目录结构,像一棵倒置的有根,也称为树形目录结构
      • 从树根向下,每一个结点是一个目录,叶子结点是文件;
      • Windows、UNIX、MS - DOS等操作系统均采用多级目录结构;

      在这里插入图片描述

5.4 存储方法和存储空间的管理

5.4.1 空闲区表

  • 将外存空间上的一个连续的未分配区域称为“空闲区”;

  • 操作系统为磁盘外存上的所有空闲区建立一张空闲区表,每个表项对应一个空闲区,空闲区表中涵盖序号、空闲区的第一块号、空闲块的块数和状态等信息;

    在这里插入图片描述

  • 适用于连续文件结构。

5.4.2 位示图

5.4.3 空闲块链

  • 每个空闲物理块中有指向下一个空闲物理块的指针,所有空闲物理块构成一个链表,链表的头指针放在档案存储器的特定位置上(如管理块中);

  • 优势与分配方式:不需要磁盘分配表,节省空间。每次申请空闲物理块只需根据链链表的头指针取出第一个空闲物理块,根据第一个空闲物理块的指针可找到第二个空闲物理块,依此类推;

    在这里插入图片描述

  • 练习:某文件系统采用链式存储管理方案,磁盘块的大小为1024字节。档案Myfile.doc由5个逻辑记录组成,每个逻辑记录的大小与磁盘块的大小相等,并依次存放在121、75、86、65和114号磁盘块上。若需要存取文件的第5120字节处的信息,应该访问()号磁盘块。

    • A.75
    • B.85
    • C.65
    • D.114

    D

    第5个逻辑记录上的最后一个字节,即在114号磁盘块上。就是根据题意每个逻辑记录的大小与磁盘块大小相等,并依次存放在121、75、86、65和114号磁盘块上。而文件的第5120字节应该在5120/1024=5,也就

5.4.4 成组链接法

6 作业管理

6.1 作业与作业控制

6.2 作业调度

  • 作业调度算法

    • 先来先服务算法:按作业到达的先后进行调度;

    • 短作业优先算法:优先调度运行时间最短的作业;

    • 响应比高优先算法:响应比高的作业优先调度;
      响应比Rp=作业响应时间作业执行时间=作业等待时间+作业执行时间作业执行时间=1+作业等待时间作业执行时间 响应比R_p=\frac{作业响应时间}{作业执行时间}=\frac{作业等待时间 + 作业执行时间}{作业执行时间}=1 + \frac{作业等待时间}{作业执行时间}响应比Rp=作业执行时间作业响应时间=作业执行时间作业等待时间+作业执行时间=1+作业执行时间作业等待时间

    • 优先级调度算法:优先级高的作业优先调度;

    • 均衡调度算法:根据框架的运行情况和作业本身的特性对作业进行分类,作业调度程序从这些不同类别的作业中挑选作业执行;

  • 作业调度算法性能的衡量指标。在一个批量处理为主的体系中,通常用平均周转时间平均带权周转时间来衡量调度性能的优劣;
    作业周转时间=作业响应时间=作业等待时间+作业执行时间作业的带权周转时间=作业响应时间作业执行时间=1+作业等待时间作业执行时间 作业周转时间 = 作业响应时间 = 作业等待时间 + 作业执行时间 \\ 作业的带权周转时间=\frac{作业响应时间}{作业执行时间}=1 + \frac{作业等待时间}{作业执行时间}作业周转时间=作业响应时间=作业等待时间+作业执行时间作业的带权周转时间=作业执行时间作业响应时间=1+作业执行时间作业等待时间

    • 系统的平均周转时间或平均带权周转时间越小,作业调度算法的性能越好;
  • 练习:作业j1、j2、j3的提交时间和所需运行时间如下表所示。若采用响应比高优先调度算法,则作业调度次序为()。

    作业号提交时间运行时间(分钟)
    j16:0030
    j26:2020
    j36:256
    • A.j1 → j2 → j3
    • B.j1 → j3 → j2
    • C.j2 → j1 → j3
    • D.j2 → j3 → j1

    B

    架构在6:00时,因为架构输入井中只有作业J1,因此J1先运行。6:30当作业J1运行完毕时,先计算作业J2和J3的响应比,然后令响应比高者运行。作业J2的响应比=1+10/20=1.5。作业J3的响应比=1+5/6≈1.83。按照响应比高者优先算法,优先调度J3。综上分析可知,作业被选中执行的次序应是J1→J3→J2。

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

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

相关文章

优化排名推广技术网站wordpress 模板 怎么用

在物质世界的繁华背后&#xff0c;隐藏着一个深刻的真理&#xff1a;有形之物的分享会逐渐减少&#xff0c;而无形之物的传递却能不断增值。金钱、货币、银两这些商业领域的实体&#xff0c;往往激发出人类对更多财富的渴望和对资源枯竭的恐惧。这种恐惧源于资源的有限性&#…

移动网站开发工具网站权限怎么设置方法

本篇主要讲Animation 和 Property Animation的使用&#xff0c;最后会讲QQ管家桌面火箭作为例子&#xff1a; 在Android中开发动效有两套框架可以使用&#xff0c;分别为 Animation 和 Property Animation&#xff1b; 相对来说&#xff0c;Animator比Animation要强大太多&…

实用指南:洛谷题解——C语言(9.17——9.19)

实用指南:洛谷题解——C语言(9.17——9.19)2025-10-03 19:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

怎样保证网站的安全性网站建设没业务

再谈编译链接 C函数重载与编译链接-CSDN博客 之前我已经写过文章简单介绍了编译链接要做的一些操作。现在为了能更好的理解我们平时的开发环境&#xff0c;我会在Linux系统上完整地走一遍流程。 环境描述 我们使用普通用户在Linux上进行操作&#xff0c;先写一段测试代码。 …

多模态大语言模型OISA - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微信公众号的网站品牌推广策略有哪几种

几个星期前几个月前&#xff0c;我正在寻找如何为Oracle Cloud项目设计新的REST API。 我计划要做的事情之一就是使用Marc Hadley在Jersey 1.x中创建的声明性链接注入。 可悲的是这并没有被转发移植然而&#xff0c;这样一个快速的聊天项目带动和我承担了使代码最新的小中型工作…

电力网站怎么做随州网站建设便宜

Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum. 一、类定义 public abstract class Enum<E extends Enum<E>>implements Comparable<E>, …

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

20251001国庆模拟

Part 1 题目列表P7075 [CSP - S2020] 儒略日 P7076 [CSP - S2020] 动物园 P7077 [CSP - S2020] 函数调用 P7078 [CSP - S2020] 贪吃蛇Part 2 考试时间线 8:02 开题, 仅仅读了 10 分钟 T1 题目,就得出结论,大模拟。 …

线段树合并 [POI 2011] ROT-Tree Rotations

波兰人太神秘了,竟能出出来如此题目。 题意 给一棵树(读入不太寻常,这个容易处理,忽略不计), 每个叶子节点有一个权值,我们可以选择交换一些节点的左右子树(保证是二叉树,且要么是叶子要么左右子树都存在)。 …

CSS的选择器 - 指南

CSS的选择器 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

ModuleNotFoundError: No module named wandb.keras

from wandb.keras import WandbCallback ModuleNotFoundError: No module named wandb.keras ================================ Successfully installed annotated-types-0.7.0 eval-type-backport-0.2.2 gitdb-4.0.1…

wordpress建站网注册公司流程和费用

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问&#xff0c;在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题&#xff0c;我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

C# Net9的模块初始化器(Module Initializer)

Module Initializer 是为了让库/框架在程序集加载时,以 “CLR 保证的、只运行一次的、不依赖类型访问的” 方式执行初始化逻辑,从而避免静态构造函数的副作用和性能问题。Module Initializer 是为了让库/框架在程序集…

离线轻量大模型,Ollama部署到docker方法

来自豆包 将Ollama部署到Docker的步骤如下: 一、安装Docker环境启用系统功能(Windows系统):打开“控制面板” → “程序与功能” → “启用或关闭Windows功能”。 勾选 Hyper-V、虚拟机平台、Linux子系统(WSL)。…

flink执行图 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:华为Pura 80芯片细节曝光,预示着华为多款新品即将震撼登场!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

应用拓扑讲义整理 Chapter 6. 单纯复形(Simplicial Complexes)

Chapter 6. 单纯复形 6.1 单纯复形的基本概念 6.1.1 仿射空间 Definition 6.1(仿射空间)仿射空间是一个三元组 \((E, \overrightarrow E, +)\),其中 \(E\) 是点集,\(\overrightarrow E\) 是由自由向量或转移组成的…

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

AQS(ReentrantLock)源码浅析

管程 — Java同步的设计思想 管程:指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。 互斥:同一时刻只允许一个线程访问共享资源; 同步:线程之间如何通信、协作。 MESA模型 在管程的发展史上,先后出…