【北航操作系统笔记(完整版)】

    技术2022-07-16  80

    文章目录

    0. 简介1. 启动过程boot2. 存储管理1-23. 储存管理3-54. 进程与线程5. 同步和互斥2-46. IO系统7. 磁盘系统8. 文件系统

    0. 简介

    操作系统是一组管理计算机硬件资源的软件集合,它向计算机程序提供共性的服务。即是使用者,也是资源管理者。

    冯·诺依曼体系结构:输入、输出、存储器、控制器、运算器 哈佛结构:指令存储与数据储存分离,防止互相干扰。 流水线结构:加快速度。

    计算机储存结构:

    寄存器 L1高速缓存(SRAM) L2高速缓存(SRAM) L3高速缓存(SRAM) =================以上为处理器芯片内部,以下为处理器芯片外部 主存(DRAM)(内存) 本地二级存储(本地磁盘)(外存) 远程二级存储(分布式文件系统、web服务器)(外存)

    1946年,电子管 第一台计算机ENIAC 1955年,晶体管 & 监控系统 1965年,集成电路 & 多道程序设计 1980年,PC机 & 微机操作系统 1990年,分布式与嵌入式系统

    1954年,第一个高级语言FORTRAN诞生,实现软件和硬件的分离。

    批处理技术:同时输入多个作业,作业调度程序自动选择作业运行。 联机批处理系统:作业的输入输出和运行都由CPU完成 脱机批处理系统:作业的输入输出由输入机、输出机完成,运行由CPU完成,加入磁带做中间传递物

    多道程序系统:同一时间内存中可以有多个程序,同一时间(交替)CPU可以处理多个程序。一道程序因I/O请求而暂停运行时,CPU遍立即转去运行另一道程序。

    多道批处理系统:结合批处理技术和多道程序系统

    分时系统:多个用户分时。 分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理及分配给各联机作业使用。

    嵌入式系统和实时系统:及时响应,高可靠性和安全性,整体性强

    操作系统的特征: 并发:指两个或多个事件在同一时间间隔内发生。通过分时得以实现。 并行:多个CPU同时运行,处理多个程序。 共享:系统中的资源(硬件资源和信息资源)可被多个并发执行的程序共同 使用。两种方式:互斥访问和同步访问。 虚拟:虚拟性是一种管理技术,把物理上的一个实体变成逻辑上的多个对应 物,或把物理上的多个实体变成逻辑上的一个对应物。 虚拟处理机技术:利用多道程序技术,为每道程序建立一个进程。 虚拟设备技术:将一台物理I/O设备虚拟为逻辑上多台I/O设备。 不确定(异步):由于执行不是一贯到底,所以速度和完成时间不确定。


    1. 启动过程boot

    x86启动过程: 跳转到BIOS(固件)地址 运行POST(BIOS自检) 读取启动顺序 读取、装入MBR

    MBR限制只能有4个主分区 硬盘分区三种:主磁盘分区、扩展磁盘分区、逻辑分区。 一个硬盘主分区1-4个,扩展分区0-1个。主分区+扩展分区1-4个。逻辑分区若干个。 主分区只有一个是激活的(active),其余是inactive

    X86下Linux系统引导过程: Boot Loader:初始化硬件设备、建立内存空间映射图(LILO、GRUB) 加载内核:读取内存映像(压缩文件),将解压后的内核放在内存中,运行初始化函数(bootsect.S setup.S video.S) 用户层init依据initatb文件设定运行等级 执行rc.sysinit 启动内核模块 执行不同运行级别的脚本程序 执行rc.local 执行login程序,进入登录状态


    2. 存储管理1-2

    基石(目的):地址独立,地址保护

    解决的问题:分配和回收

    ​ 编译(.c -> .o):由编译程序将用户源程序编译成若干个目标模块 ​ 链接(.o -> .exe / .sh等):由链接程序将目标模块和相应的库函数链接成可转载模块(可执行文件) ​ 装入:由装载程序将可转载模块装入内存

    静态链接:将共享库的函数代码直接链接入程序代码中。 动态链接:当程序运行中需要某些目标模块时,才将共享库的函数代码链接入程序代码中。高效且节省内存空间,但运行时慢。 -c 编译不链接 -o 编译+链接(默认)

    ​ 装入一般采用动态运行时装入:程序在内存中的位置经常会变,所以在装入内存时,保留程序内的所有相对地址,运行时改为绝对地址。这种方式需要一个重定位寄存器,进行地址转换。

    ELF(可执行文件格式)(.o / .obj) e-_ident: 头部为魔数,头四个字节:‘0x7f‘,‘E’,’L‘,’F‘ ELF3_Rel: 内含Pelocation entry(重定位节) PS:内含Type为Load的segment,是需要被加载到内存中的部分,如果文件中的大小小于在内存中的大小,那么在内存中补零

    objdump 指令可以反汇编ELF文件,readelf可以查看ELF文件

    shell调用fork()系统调用,创建出一个子进程,子进程调用execve()加载program

    跟踪内存的使用:位图表示法(空间开销固定,时间开销低、容错性差)、链表表示法(空间开销随程序数量变化、时间开销大、容错性高)

    单道程序存储管理:可以用静态地址翻译(用户程序的地址在运行之前就可以计算)多道程序的存储管理:固定(静态)式分区分配(分 单一队列的分配方式 和 多队列的分配方式 )、可变(动态)式分区分配 分配内存:当剩余分区大小《size时,不再进一步分割。即:当申请空间加上size后大于分区大小,则整个分区分配出去。 算法: First Fit(首次适应算法)、Next Fit(下次适应算法)、Best Fit(最佳适应算法)、Worst Fit(最坏适应算法)、快速适应算法(把空闲分区按大小分类、建立多个空闲链表) 回收分区要合并(linux系统在用)伙伴系统:所有分区大小均为2的整数次幂。系统初启时,只有一个最大的内存块。分配时,总是分配出去最小的内存块,若大内存块则分成两份(一对伙伴),直到不能再分。 回收时,伙伴能合并则合并。

    消除外部碎片:紧凑技术(可重定位分区分配)

    多重分区分配:将程序分为子程序、主程序、数据组,不需要连续片段了。 保护方法:界限寄存器方法、储存保护键方法。

    解决大作业在小内存中运行的问题:覆盖技术和交换技术


    3. 储存管理3-5

    ​ 程序是静止的,进程是动态的(系统进程和用户进程)。一个程序可以有多个进程,一个进程也可以运行多个程序。 ​ 一个作业包括程序、数据和操作说明书,一个进程由进程控制块(PCB)、程序和数据集合组成。

    分页式储存管理: 页(页面):大小相等的作业(虚拟)地址空间 储存块(页框):大小相等的主存(物理)地址空间 页表:每个进程有一个页表,每一个页表项存储了每个页面及其对应的储存块。 地址转换机构

    一级页表、二级页表、多级页表、哈希页表、反置页表 快表(TLB) 有效内存访问时间(EAT): TLB查询时间 = s 单次内存访问时间 = t TLB命中率:a EAT =(t + s)* a + (2 * t + s)*(1 - a) = 2 t + s - t * a

    段式储存管理: 按逻辑将作业分段(每段大小由用户程序决定),方便编程和管理,动态链接,动态增长,信息保护方便。 段表寄存器:段表始址、段表长度

    段页式存储管理(x86): 用分段方法来分配和管理虚拟存储器;用分页方法来分配和管理实(物理)存储器。

    虚拟存储: 程序装入时,只要将当前需要执行的部分页或段读入到内存中,就可以开始执行程序。 程序执行时,如果需要的指令或数据不在内存中(缺页或缺段),则将相应的页或段从辅存中调入内存(请求调入功能),若内存已满则替换某个页或段(置换功能)。 交换分区:大小与物理内存大小保持线性比例关系(交换分区更大) 请求式分页管理的页表:驻留位(是否在内存中)、保护为、修改位、访问(统计)位。 预调页(提前调入小文件的所有页)、按需调入。 缺页错误处理机制:详见(part5-19)

    页面置换策略:(局部置换策略:对于一个进程内的页面而言) 最优置换(Optimal):最长时间不需要访问的页面(前提:提前知道将来的页面使用时间) 先进先出算法(FIFO):(Belady现象:随着物理页面增多,缺页率提高) 改进1(Second chance):如果页面被再次访问过,则给该页面第二 次保留的机会。 改进2(Clock和前一个几乎一样,除了环形队列): 若没有缺页错误,当前页置1,指针不动。 若有缺页错误,若当前页为1,则置0,指针前移,重复直至当前 页为0 若当前页为0,替换,置1,指针前移。 最近最少使用算法(LRU)

    更新: file backed 类型,且未被修改,则直接丢弃。 file backed 类型,但已被修改,直接写回。 anonymous 类型,若是第一次换出且未被修改,则写入swap区,若非第一次则丢弃。 anonymous 类型,且已被修改,则写入swap区。

    可变分配策略: 缺页率高则增加进程的驻留集,缺页率低则减少进程的驻留集。

    内存初始分配方法: 等分法、比例法、优先权法

    (全局置换策略:对于多个进程内的页面而言):工作集算法、缺页率算法

    工作集、驻留集 抖动问题:驻留集不断减小,突然缺页率急剧上升。 解决:工作集算法、预留部分页面。 负载控制:进程太多或太少都会效率低 L= S 准则,发生两次缺页之间的平均时间L,处理一次缺页需要的平均时间S。此时效率最大。 50% 准则,当分页单元的利用率保持在50%左右时,处理机的利用率最大。

    页面清除策略:何时把被置换的页面写回外存。 页缓冲:先保存在缓冲区,当时机合适再写回外存。(类FIFO的页面缓冲算法)

    写时复制技术: 两个进程共享一块物理内存,每个页面都被标记成写时复制。写入时,会在内存中复制一个页面,进行写操作,其他进程不可见。

    内存映射文件: 可以实现多个线程共享一个文件。

    对换系统: 双指针轮转置换算法:

    内核存储分配器: 惰性动态分区算法(凑够一定大小才合并)

    页目录自映射机制


    4. 进程与线程

    并行和并发

    并发性的确定——Bernstein条件: 含有写的操作

    ​ 原语(不可分割的指令序列,必须在内核态执行,(与系统调用的区别)不可中断)

    ​ 子进程中fork()返回0,父进程中fork()返回新创建的子进程ID,出现错误返回负值。getid()返回当前进程的id。

    进程三种基本状态:就绪状态、执行状态、阻塞状态(挂起状态、挂起阻塞状态)

    linux 中的 task_struct 就是一个PCB

    PCB组织方式:线性表、链接方式、索引方式。

    ​ 上下文切换(Process Context Switch)的开销大于陷入内核(mode switch)(只用保存一些寄存器)

    资源拥有者是进程(Proess),可执行单元是线程(Thread)。 每个进程都有PCB,每个线程都有自己的栈。 创建一个线程比进程快10-100倍,在多核CPU/多CPU系统更有优势

    UNIX多进程,但单线程;JAVA单进程,但多线程;

    用户级线程(创建、撤销、调度不需要内核支持)、内核级线程(内核感知)、混合式线程

    在只有用户级线程的系统内,CPU调度以进程为单位;但在有内核级线程的系统内,CPU调度以线程为单位。 在现代操作系统中,资源的分配单位是进程,而处理机的调度单位是线程。

    基于前两种线程,有不同的混合式线程模型: 多对一模型,多个用户级线程对应一个内核级线程  一对一模型,一个用户级线程对应一个内核级线程  多对多模型,多个用户级线程对应多个内核级线程

    fork() 创建普通进程,clone创建线程,kernel_thread创建新的内核进程

    调度算法的评价准则: 周转时间:进程从提交到完成所经历的时间 平均周转时间 = All(周转时间) / 进程数 带权周转时间 = 周转时间/CPU执行时间 平均带权周转时间 = All(带权周转时间) / 进程数   响应时间:从进程提交到首次被响应的时间   等待时间:进程在就绪队列中等待的时间总和   吞吐量:单位时间内所完成的进程数   CPU利用率


    5. 同步和互斥2-4

    竞争:多个进程对同一共享对象同时访问。 竞争条件:多个进程并发访问同一数据的执行结果与访问的特定顺序有关。 临界资源:一次仅允许一个进程访问的资源。 临界区:每个进程中访问临界资源的代码。

    进程互斥(间接制约关系): 多个进程不能同时进入同一个共享资源的临界区。

    进程同步(直接制约关系): 多个进程有效地共享资源和相互合作(有序访问)。

    空闲让进 忙则等待 有限等待 让权等待(长时间不能进入临界区,则应释放处理机)

    实现互斥的软件方案: Dekker算法:不需要严格轮换的互斥算法。 Peterson算法:不需要轮换的互斥算法。 Bakery算法:支持任意数量进程。 实现互斥的硬件方案: 中断屏蔽(危险) TestAndSet 指令(只能一个进程执行)(不会被中断的原子指令) 自旋锁Spinlocks(利用TestAndSet 指令) swap指令(不会被中断的原子指令)(换个)

    上述方案共性问题: 忙等待:浪费CPU时间 优先级反转:先拿到锁的进程优先级低。

    实现同步的方案: 忙等–>阻塞(sleep,wakeup)

    信号量: 一个二元组(s,q),s是一个非负初值的整型变量,q是初始状态为空的队列。 s为正,则s值等于发出P操作后可立即执行的进程数量;s为0,则发出P操作后,该进程被继续执行完;s为负,则发出P操作后,该进程被阻塞,-s是被阻塞的进程数。 q是队列,当有进程被阻塞时,进入此队列。 二元信号量(0或1)、一般信号量 强信号量(进程从p释放时用FIFO)、弱信号量(没规定顺序)

    P(S)、V(S)操作(也叫semWait、semSignal操作)S是信号变量 P(S) : while (S <= 0) do skip S = S - 1 v(S) : S = S + 1 互斥应用: 通常使用二元信号量实现互斥 先P进临界区,后V出临界区。应靠近临界区,且临界区内不能有死循环。 互斥信号量(s)的初值一般为1 有限并发应用: n(n < c)个进程并发执行一个资源。 互斥信号量(s)的初值一般为c。 进程同步应用: 进程Pi想执行ai操作时,只在Pj执行完aj后,才会执行aj。 互斥信号量(s)的初值一般为0。 Pi执行ai操作前,P(s),Pj执行aj操作后,V(s)

    ​ 先P进临界区,后V出临界区。应靠近临界区,且临界区内不能有死循环。 ​ 互斥信号量(s)的初值一般为1

    前驱关系

    一种低级通信原语:屏障Barries 用于进程组的同步 用PV操作实现 维护一个count

    那些是并发的其中那些是互斥的、同步的按互斥、同步规则设置信号量,说明含义和初值用P、V操作写出程序

    AND型信号量集:多个共享资源

    管程: 条件变量(不变) 一个进入管程的进程执行等待操作时,释放管理的使用权。 当进入管程的进程执行唤醒操作时: Hoare管程: 入口等待队列,紧急等待队列(唤醒进程的进程) 多个条件变量,即多个队列x.wait():x是条件变量 MESA管程: 被唤醒的进程等待

    进程间通信(IPC): 管道:无名管道(父子进程或兄弟进程)、有名管道(无限制) 消息队列

    安全状态:系统存在一个进程执行序列<P1, P2, …, Pn>可顺利完成。 不安全状态:系统不存在上述的序列。(满足任意个发生死锁的必要条件(共四个),但不一定死锁) 死锁状态:包含在不安全状态内。

    银行家算法: Max,Allocation,Need,Available 试图找出一个上述序列

    死锁的四个必要条件: 互斥条件:资源排它性使用 请求和保持条件:进程保持已有的资源,请求更多的资源 不可剥夺条件:已有的资源使用完前,不得释放 环路等待条件:进程-资源的环形链(资源分配图 / 进程-资源图)

    活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程。处于活锁的实体是在不断的改变状态,活锁有可能自行解开。 饥饿:进程由于资源分配的不公平导致长时间的等待。

    死锁解除:剥夺资源 / 撤销进程


    6. IO系统

    接入IO设备的主要方式:主线(Bus)(Control、Data、Address)

    将硬件设备抽象为控制器,其中包含控制寄存器、状态寄存器,以及一些数据寄存器。

    块设备:以数据块为单位储存、传输信息。速率高,可寻址(随机寻址) 字符设备:以字符为单位储存、传输信息。速率低,不可寻址 网络设备

    独占设备:一段时间内只能由一个进程使用的设备。打印机、磁带机 共享设备:在一段时间内允许多个进程共同使用的设备。硬盘 虚设备:在一类设备上模拟另一类设备。(用共享设备模拟独占设备,用高速设备模拟低速设备)

    I/O端口地址:接口电路中每个寄存器有唯一的地址。共同组成I/O端口的地址空间(受OS保护)。I/O指令形式与I/O地址是互相关联的,主要形式如下: 内存映像模式(内存映像I/O模式):控制器内存作为内存空间的一部分 I/O独立编址(I/O专用指令):Intel体系架构in/out指令

    I/O控制方式: 程序控制I/O(轮询或查询方式I/O):轮询忙等。 中断驱动:有一个设备状态表,CPU向设备发出请求并记录在设备状态表后,执行其他工作,设备完成一个数据传输后向CPU发出中断信号 直接储存访问方式(DMA):程序设置DMA控制器中的寄存器(CR,MAR,DR,DC)值,发起I/O操作,DMA完成一批数据交换后发出中断。可同时控制若干个同类设备。 I/O通道控制方式:I/O通道时专门处理输入输出的处理器,独立于CPU,有自己的指令体系,一般放在内存里。可同时控制若干个不同类设备。 一步步减少CPU的占用率

    ​ 设备独立性:程序中使用逻辑设备,系统实际执行时用物理设备,通过设备映射表(LUT)映射(每个表目包含逻辑 设备名、物理设备名、设备驱动入口)(在整个系统设立一个LUT / 每个用户设立一个LUT)。 ​ 每个设备驱动程序处理一种设备类型。组成:自动配置和初始化子程序、I/O操作子程序、中断服务子程序。共性:核心代码、核心接口、核心机制与服务、动态可加载、动态性 ​ 驱动程序和应用程序的不同:没有main,不能用标准C库,完成初始化不再运行,等待系统调用。

    I/O缓冲管理: 专用缓冲:单缓冲、双缓冲、环形缓冲。 缓冲池,其中有多个可供若干个进程共享的缓冲区 收容输入:在输入进程输入时,调用Getbuf(emp),从空缓冲队列的队首取出一个空缓冲区,作为收容输入工作缓冲hin,输入数据,装满后调用 Putbuf(inq,hin),将该缓冲区挂在输入队列末尾。 提取输入:在计算进程输入时,调用Getbuf(inq),从输入队列的队首 出一个缓冲区,作为提取输入工作缓冲sin,提取数据,取空后调用 Putbuf(emp,sin),将该缓冲区挂在空缓冲队列末尾。 收容输出:在计算进程输出时,调用Getbuf(emp),从空缓冲队列的队首取出一个空缓冲区,作为收容输入工作缓冲hout,输出数据,装满后调用 Putbuf(outq,hout),将该缓冲区挂在输出队列末尾。 提取输出:在输出进程输出时,调用Getbuf(outq),从输出队列的队首 出一个缓冲区,作为提取输出工作缓冲sout,提取数据,取空后调用 Putbuf(emp,sout),将该缓冲区挂在空缓冲队列末尾。

    I/O缓冲管理: 设备控制表(DCT):每个设备一张,描述设备特性和状态。 设备队列队首指针:指向设备请求队列的队首PCB(进程控制块) 设备状态:使用状态,置1 控制器表指针:指向COCT 重复执行次数:发生错误时应重复执行的次数 控制器控制表(COCT)每个设备控制器一张,记录I/O控制器的状态,如DMA占用的终端号、CHCT等 通道控制表(CHCT)每个通道一张,描述通道工作状态 系统设备表(SDT),记录所有设备的状态及其DCT入口。表项含有DCT指针,设备使用进程标识,DCT信息。

    ​ 单(多)通路I/O系统的设备分配:一个设备对若干个控制器,一个控制器对若干个通道。 ​ 分配设备: ​ 在SDT中找到物理设备名对应的DCT,如果忙,进入等待队列, 否则,计算是否产生死锁,进行分配 ​ 分配设备控制器: ​ 在DCT中找到COCT,如果忙,等待队列,否则分配 ​ 分配通道: ​ 在COCT中找到CHCT,如果忙,等待队列,否则分配

    SPOOLing技术(假脱机技术): 独享设备转共享设备(虚设备),提高设备利用率。 应用程序I/O操作,与SPOOLing程序(虚拟I/O)交换数据。 组成: 输入井和输出井:分别暂存I/O设备输入数据 & 用户程序和输出数据 输入缓冲区和输出缓冲区 输入进程SPi和输出进程SPo:模拟脱机I/O时的外围控制机。

    同步阻塞I/O,调用结果返回前,当前进程挂起。 同步非阻塞I/O,调用结果返回前,当前进程进行其他操作。 I/O复用,可以接受并管理多个I/O请求,阻塞在多个I/O上,效率较高 事件驱动I/O,内核记住那个进程调用的,完成后通知改进程。 异步I/O,只有数据全部复制完成时,才通知进程OK。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCaroo9N-1593673174022)(C:\Users\dreamer\AppData\Roaming\Typora\typora-user-images\1559901876084.png)]


    7. 磁盘系统

    1956年第一个磁盘 磁盘分软盘、硬盘,以前用软盘,现在都用硬盘。

    扇区、磁道、柱面,每个磁盘有两个面,每面有一个磁头 磁盘分固件区、工作区(硬盘标定容量的扇区)、保留区 P表:永久缺陷列表 G表:增长缺陷列表(磁介质性能变弱)

    Flash Disk(比硬盘快)的两种技术:NOR、NAND(读写以页为单位,写时先擦除整个块,写入特定页)

    主引导扇区MBR、分区表DPT、分区引导扇区DBR

    CHS模式: 磁头数NH(Heads / H):也就是盘片数,最多256个(8位储存) 柱面数NC(Cylinders / C):也就是磁道数,最多1024个(10位储存) 扇区数NS(Sectors / S):由于0扇区放固件以及一些专用文件,所以最多63个(6位储存),用户可见扇区从1开始。 最大8.46 / 7.88 GB

    LBA模式:(计算时,NH最大255) LBA = (NH * NS * C) + (NS * H) + (S - 1) C = LBA / (NS * NH) H = (LBA / NS) mod NH S = (LBA mod NS) + 1

    寻道时间:启动磁盘时间s,磁头移动n条磁道, Ts = m * n + s 旋转延迟时间:旋转速度r,Tr = 1 / (2 * r) 传输时间:读/写的字节数b,磁道字节数N,旋转速度r,Tt = b / (r * N) 访问时间:Ta = Ts + Tr + Tt

    磁盘调度算法: 先来先服务(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)(到达最后一个柱面,立即返回0号柱面,返回时不服务)

    磁盘空间的管理:位图、空闲表法(表项:起始块号、块数)、空闲链表法、成组链接法

    RAID:廉价冗余磁盘阵列 RAID0:条带化存储,有N个磁盘组成的RAID0是单个磁盘读写速度的N倍,但没 有数据冗余。连续以位或字节为单位分割数据。 RAID1:镜像存储,实现数据冗余,单位成本最高,但数据安全性和可用性很 高。 RAID2:海明码(多磁盘储存)校验+条带存储,条块单位为位或字节,使用海明 编码进行错误检测和纠正,是多磁盘易出错环境下的有效选择。 RAID3:奇偶校验(XOR)(单磁盘储存)校验+条带存储,条块单位为字节,在 大量连续数据环境下的可提供很好的传输率。随机数据时,写操作有瓶颈。 独写要访问组中所有的盘,每一组中有一个校验盘。 将一组磁盘中的数据加起来,放入冗余盘,若某盘出错,则,将冗余盘 数据减去其他盘数据,得到的是该盘的正确数据。 RAID4:奇偶校验(XOR)(单磁盘储存)校验+条带存储,条块单位为块,每次 写操作都要访问奇偶盘。写操作有瓶颈。 RAID5:奇偶校验(XOR)(单磁盘储存)校验+条带存储,条块单位为块,奇偶 盘与数据盘交叉放置。写操作有损失。适合小数据块和随机读写的数据。 双盘出错,则该RAID不能再使用。 RAID6:奇偶校验(XOR)(单磁盘储存)校验+条带存储,条块单位为块,奇偶 盘与数据盘交叉放置,有两个独立的奇偶校验盘。写操作有很大损失。适合 小数据块和随机读写的数据。 可容忍双盘出错。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iuLSyq48-1593673174028)(C:\Users\dreamer\AppData\Roaming\Typora\typora-user-images\1559922691897.png)]

    缓存:LRU置换算法


    8. 文件系统

    文件作为数据储存和访问的单位,看作是对待用户数据的逻辑抽象。 文件可视为一个单独的连续的逻辑地址空间。 保存在磁盘、光盘等外部储存设备上。 实际上是一组字节序列。 包括两部分:文件体(内容)和文件说明(文件名、内部标识、储存地址、访问权限、访问时间)。 用户视角:逻辑文件;操作系统视角:物理文件。用户视角:逻辑文件;操作系统视角:物理文件。

    文件系统模型的三个层次: 文件系统的接口: 命令行接口、程序接口 对象操作管理的软件集合: 核心部分,文件各类管理。 对象及其属性: 文件、目录、磁盘储存空间

    文件名.扩展名 文件类型:有无结构、内容、用途、属性、文件组织(顺序、索引) 文件逻辑结构:以字节为单位流式结构、记录式文件、树形结构 目录:迅速定位文件、防止重名、允许别名、分组功能 单级文件目录(命名冲突、不利于实现共享)、二级文件目录(解决)、多级文件目录(更好、级别过多会增加路径检索时间)

    数据项: 基本数据项:字段 组合数据项:由若干个数据项组成

    磁盘: 主引导区、分区表、分区(引导区、超级数据块、空闲区管理、根目录区)

    文件元信息: 基本信息: 文件名、物理位置、文件逻辑结构(无结构、记录、流式文件)、文件 物理结构(顺序、索引等) 访问控制信息: 文件所有者 使用信息: 创建时间、上一次修改时间、当前使用信息

    文件物理结构: 连续(顺序)结构: 易出现磁盘碎片、适用于变化不大的顺序访问的文件 串联(链接)结构: 随机存取效率低、可靠性差(一个指针出错,后面文件都丢失) 索引结构: 每个文件有一个索引表、大小固定 / 不固定、在文件目录 / 开头,索引表占用更多的空间 链接模式、多级模式、综合模式

    目录: 直接法: 目录项=文件名+文件元信息 间接法: 目录项=文件名+文件元信息的地址(索引号) 长文件名: 固定255字节(浪费)、目录项长度可变、目录项本身定长,长度可变的文件名放在末尾 查询技术: 顺序查询法、Hash方法

    文件的共享: 硬链接:复制”指针“,源文件修改,该文件也修改,反之亦然。 软链接:复制内容,源文件修改,该文件不修改。可以对不存在的文件创建。 保护文件: 建立副本、定时转储、规定文件权限 文件性能: 块高速缓存(Block Cache)(文件缓存、磁盘高速缓存) 双向链表

    基于日志结构的文件系统 LFS:新的数据块和元数据(inode、目录)先以segment为单位放在缓存中,填满后写入到硬盘。文件逻辑结构

    文件逻辑结构

    目录:迅速定位文件、防止重名、允许别名、分组功能

    Processed: 0.011, SQL: 9