01 导论

操作系统是软硬件接口,它最主要的任务是向下协调硬件资源以达到尽可能高的时间效率和空间利用率,向上服务软件提供安全可靠的运行环境和简明操作抽象。其中,管理硬件资源包括对CPU、存储资源、设备的管理,服务软件则包括API接口、安全性封装性考虑以及各种抽象(eg. 进程、一切皆文件……)的管理。

image-20231208013539565

特征

image-20231208013715763

image-20231208013737300

image-20231208013757954

image-20231208013815023

image-20231208013827301

基本结构

image-20231208013903287

image-20231208013913442

image-20231208013924319

系统调用

image-20231208013947693

image-20231208014005633

02 进程与线程

进程

概述

image-20231209010239071

image-20231209010726351

image-20231209010741922

感觉这种可能考什么简答题

image-20231209010943529

image-20231209011002360

状态

状态

image-20231209011058162

image-20231209011113625

image-20231209011134789

控制

image-20231209012617457

image-20231209012650789

image-20231209012721932

image-20231209012905281

其它

wait

image-20231209013054072

感觉这个也会出题

image-20231209013407611

image-20231209013440724

这些参数可能得再细致研究一下

image-20231209013955750

sleep

image-20231209014023122

execve
介绍

image-20231209014137651

image-20231209014610180

为什么与fork分离

image-20231209015425362

进程图

感觉这个也可能考,之后看看王道

image-20231209015527112

image-20231209015548581

image-20231209015559784

image-20231209015611171

image-20231209015621086

异常控制流

概述

控制流

image-20231209015652150

image-20231209015947811

image-20231209020021078

异常

这些需要注意下概念题,比如xxx属于哪种类型的异常

概述

image-20231209020045288

image-20231209020117856

image-20231209020133342

中断

image-20231209020224680

陷阱

image-20231209020249008

故障

image-20231209020312623

image-20231209020335344

image-20231209020415992

终止

image-20231209020435616

进程间通信

image-20231209020644945

image-20231209021224093

共享内存

image-20231209020724418

消息传递系统

image-20231209020811007

image-20231209020825726

image-20231209020851150

TODO,区分一下信箱和消息队列,看起来好像。我记得以前知道的,可惜现在忘了。

管道

image-20231209020949608

image-20231209021142595

线程

概述

线程

image-20231210002314658

image-20231210002329164

多线程进程

image-20231210002413435

image-20231210002450302

image-20231210002607740

image-20231210002529932

image-20231210002644253

并发线程

可以注意一下这个例题:

image-20231210002718214

image-20231210002737122

对比

image-20231210002826322

多线程模型

image-20231210002905246

多对一

image-20231210002952917

一对一

image-20231210003025064

多对多

果然一切问题都得中庸

image-20231210003106279

就是加了个允许一对一绑定

image-20231210003130511

Posix线程

image-20231210003209912

创建

感受一下C语言的面向对象

image-20231210003252567

image-20231210003449745

终止

image-20231210003629044

好像第一个一般传的NULL。第二个应该相当于是线程A让某个线程终止(可以是自己也可以是别的),然后被终止线程应该会有代码检查是否被cancel,是的话再滚蛋。

Join Detach

image-20231210003848702

这个意义感觉还是有点模糊,到时候再看看网上的说法

image-20231210003938919

这玩意我看着要吐了,以后有精力看看吧

image-20231210004048593

image-20231210004035672

03 并发与同步

信号

感觉这节很有意思,以前也没学过,值得仔细看看

用户程序通过系统调用针对某个信号注册了一个处理函数handler。然后另一个进程通过kill发送了该信号给这个用户程序。对这个信号的检测会推迟到用户程序陷入内核,并准备从内核返回的时候。这时候内核检查信号列表,发现了该待pending的函数,就直接强制性跳转到了用户自定义的处理函数handler(也就是说需要暂时返回用户态),执行完handler之后再回到中断上下文(回到内核态),然后返回到用户程序。

定义

image-20231210004347370

image-20231210004433931

image-20231210004636914

收发

发送

image-20231210004730315

用kill -信号ID来发送一个信号。

image-20231210005800376

image-20231210005830196

image-20231210005937309

下面这个区别没看懂

接收

image-20231210004944106

这里再仔细看看,信号的处理流程和时机

image-20231210005723795

pending&block

image-20231210005037997

image-20231210005154327

阻塞位决定的是能否被接收,也就是说有可能出现阻塞位和挂起位都为1的情况。

image-20231210005520958

阻塞

image-20231210005603404

信号处理

处理函数

image-20231210010227173

image-20231210010319529

例子

image-20231210010338912

image-20231210010402331

安全性

image-20231210010905230

image-20231210011007778

printf不安全我想大概是因为用了变长参数之类的???这个值得深挖。或者说是因为它内里对数据处理非原子,所以可能导致输出混乱?

image-20231210011150268

G3类似关中断

image-20231210011308433

image-20231210011358066

正确性

image-20231210011540286

image-20231210011600664

image-20231210011613127

嵌套

image-20231210010459883

处理流程

image-20231210010626733

image-20231210010715447

image-20231210010752485

哦吼!到这里才意识到,原来我们xv6的sigalarm是实现了一次特殊的信号!(实在后知后觉……这个到时候再仔细看看)

例题

image-20231210011647336

信号量

进度图与临界区

image-20231210011820666

image-20231210011848469

image-20231210011955821

image-20231210012012163

image-20231210012037664

之后学习一下条件变量是什么。。。

信号量

image-20231210012157990

这:

image-20231210012227966

信号量实现互斥

P操作相当于减少信号量值,V操作相当于增加信号量值

image-20231210012337043

image-20231210012347773

image-20231210012403542

image-20231210012418902

进程同步

制约关系

也即竞争和同步的概念

image-20231210012501686

image-20231210012517047

同步

概念

这个概念区分值得注意

image-20231210012627508

image-20231210012705431

信号量实现

image-20231210012737130

王道补充

整型信号量

879A7D7E6DB3EE47025F8B34DC6C645A

记录型信号量

639D7A03B329AE3772E430448DEB70ED

33C2BB54CC9C1193E416F1B192ED52EA

信号量实现互斥

初始值为1

信号量实现同步

这个可以保证456一定在12后面被执行,可以理解为生产者消费者模型

DEF5CECC416778202A533D6DCE34F7B0

2F7BABD60FBA8CC4AE0D512E1E408BA5

生产者消费者

1255B500C318AFDB4654057289DF1F6D

除了这两个同步信号量,还需要多来一个互斥信号量表示对缓冲区的互斥访问

C457F3A07AC4899E741DDE5E03EA5EB8

注意这里同步信号量和互斥信号量的顺序,如果交换了应该会死锁。p操作不能,因为它会阻塞。v就无所谓,因为不会阻塞

多生产者消费者

F20FFFDC705D62E04919D4140A9CCF70

93AF80AF95A40E97C2BEAE7AB9477BBF

7D8068890D7E5B300C7BF0F3960C882D

04 CPU调度与优化

基本概念

处理器调度

image-20231211010846215

过程和开销

image-20231211011007471

抢占与非抢占

image-20231211011040742

计算/IO密集

image-20231211011117679

image-20231211011143165

指标

image-20231211011311853

image-20231211011407132

调度算法

这部分也需要注意考题,应该会考调度序列和各种指标计算。

预测CPU区间

image-20231211011847840

FCFS

image-20231211011441271

image-20231211011458102

SJF

image-20231211011542488

image-20231211011555029

所以需要最小平均等待时间的话,用sjf是最好的

image-20231211011623845

SRJF

相当于是SJF在任务到达时间有先后的情况下的一种拓展

image-20231211011755855

image-20231211011806684

RR

image-20231211012909442

这个一下整了好多例子,感觉考查重点

image-20231211012050916

每次pick应该是按照特定的轮转顺序?看图例大概是tid之类的

image-20231211012130780

image-20231211012327726

image-20231211012341491

image-20231211012414371

image-20231211012426377

为什么实时调度都要用RR或者FIFO策略?

  1. 确定性:实时任务通常要求确定性的响应时间。SCHED_FIFO和SCHED_RR提供了可预测的调度行为,保证了高优先级任务能够及时获得CPU时间。相比之下,CFS设计用于提供公平性,但并不保证确定性的响应时间107。
  2. 优先级抢占:实时调度策略允许高优先级任务抢占低优先级任务的执行,这在需要立即处理的任务(如中断处理)中非常重要。CFS策略下的任务抢占行为是基于CPU使用时间的公平性,而非严格的优先级7。
  3. 实时性能要求:实时任务往往与系统的实时性能要求相关,如工业控制、音频/视频同步等,这些场景需要确保任务能够满足特定的时间约束。FIFO和RR策略能够提供这种保证,而CFS则更侧重于长时的CPU使用公平性5。
  4. 时间片管理:SCHED_RR通过时间片轮转为相同优先级的任务提供了公平的调度机会,而SCHED_FIFO则保证了相同优先级的任务将顺序执行,直到任务主动放弃CPU。CFS的时间片管理机制不适合实时任务的时间敏感性要求9。
  5. 系统资源的保障:实时任务可能需要独占或优先访问系统资源,而CFS策略下,系统资源是按需动态分配的,这可能导致实时任务无法获得足够的资源来满足其时间要求4。
  6. 实时任务的严格性:实时任务通常不能容忍延迟,因此需要一个能够保证任务在规定时间内执行的调度策略。FIFO和RR策略提供了这种严格性,而CFS策略则更适用于对实时性要求不高的普通任务8。 总的来说,实时调度策略(SCHED_FIFO和SCHED_RR)提供了实时任务执行所需的确定性和响应性,而CFS策略则更适合于一般目的的进程调度,它提供了良好的CPU使用公平性和效率。在需要严格实时性能的场景中,使用RR或FIFO策略是更合适的选择。

MLFQ

image-20231211011942018

image-20231211012500643

image-20231211012553738

确实,它很好的一点就是每个队列可以用不同的调度算法。感觉这种分层级的思想或许也可以用于idea

彩票(Lottery)

image-20231211012742472

image-20231211012818751

05 死锁

image-20231211225541316

Intro

image-20231211013154638

image-20231211013226115

四个产生条件

资源互斥访问

概念

image-20231211013309044

四个条件

image-20231211013557063

image-20231214234613849

处理方法

image-20231214235157825

死锁预防

image-20231211013810051

image-20231214234936241

image-20231211013833463

静态分配,可能导致某些进程饥饿

image-20231211013905973

我怎么感觉按序申请挺常见的(

死锁避免

原理

image-20231211014121368

image-20231211014140758

image-20231214235559994

银行家算法

image-20231211014227897

image-20231211014239708

image-20231211014252447

image-20231211014307622

image-20231211225325604

资源请求算法

image-20231211225106052

image-20231211225149084

image-20231211225200012

死锁检测

资源分配图

资源分配图化简算法是死锁检测,注意与资源请求算法的差别

image-20231211013347070

image-20231215001204690

也相当于找到了一个安全序列

image-20231215001425205

image-20231211013429818

下面那个感觉是因为P4和P2还是有可能释放资源

image-20231211013530873

然后还有环路和死锁的关系【操作系统】死锁(详细)

① 如果进程-资源分配图中无环路

——>则此时系统没有发生死锁

② 如果进程-资源分配图中有环路,且每个资源类中仅有一个资源

——>则系统中发生了死锁,此时,环路是系统发生死锁的充要条件,环路中的进程便为死锁进程

③ 如果进程-资源分配图中有环路,且涉及的资源类中有多个资源

——>则环的存在只是产生死锁的必要条件而不是充分条件

不知道什么玩意

image-20231211225403513

死锁恢复

image-20231215001557317

死锁忽略

image-20231211225506882

06 内存管理

image-20231212011156242

image-20231212011214519

背景

重定位

重定位三个时机:

  1. 编译链接

    绝对代码

    image-20231215010046935

  2. 装载时

    image-20231215010115205

  3. 运行时

    image-20231215010159649

image-20231212003926160

image-20231212004003798

image-20231212004031562

image-20231212004053832

概念

地址

image-20231212004152913

image-20231212004358388

image-20231212004335621

地址空间

image-20231212004240886

image-20231212004251661

没看懂后面两个的差别。。。

连续内存分配

固定分区

等长

image-20231212004659024

变长

image-20231212004738309

可变分区

image-20231212004810488

image-20231212004824143

image-20231212004840749

image-20231212004851418

分区分配算法

image-20231212004926946

碎片问题

image-20231212005024806

image-20231212005050253

image-20231212005117560

分段内存管理

概述

image-20231212005157789

image-20231212005249614

地址翻译

image-20231212005303487

image-20231212005322548

image-20231212005335864

总结

image-20231212005424317

image-20231212005606894

分页内存管理

地址翻译

image-20231212005717769

image-20231212005731167

页表

image-20231212005808958

页表项

image-20231212005843981

image-20231212010032980

地址空间

image-20231212005928818

多级页表

概述

image-20231212005946694

image-20231212005959917

地址翻译

image-20231212010013770

效率-TLB

image-20231212010112445

image-20231212010146984

image-20231212010158362

image-20231212010219801

image-20231212010238146

image-20231212010316825

总结

image-20231212010401612

段页结合

将内存分为功能不同的段有助于提高数据局部性和实现数据隔离,将内存分为固定大小的页有助于缓解内存碎片化和方便回收分配管理,故而主流采用的是段页结合的内存管理,体现了一个软硬件之间的妥协。

image-20231212010525294

image-20231212010537503

image-20231212010626075

ELF文件

image-20231212010657820

image-20231212010727619

X86内存

image-20231212010805410

image-20231212010824997

image-20231212010847424

image-20231212010901211

image-20231212010926834

image-20231212010942507

image-20231212010955766

image-20231212011012546

image-20231212011025331

image-20231212011054626

image-20231212011116031

值得注意的是,以前只了解开启虚拟地址映射的时候会开启LDT,就是不大清楚这其中的具体含义,经同学启发,以及“每个进程都有一个LDTR”的表述,才意识到它能保证多个进程虚拟地址空间的管理。

具体来说这个地址映射的转化是这样的,实模式使用物理地址,即程序直接访问物理内存地址,没有分段或分页机制故而它有4MB的直接寻址空间。而它切到保护模式的时候会先切换为一个使用段表的新GDT表,开启对LDT表的使用,从而开启了段页结合的虚拟映射。

王道

E21B1EA221B6BC5E2B8CD601473622F5

3304F578DBB8ADB87A6708C7B7850602

连续内存分配

覆盖和交换

E465171409C9E5B31D0A1BC1266EDF9B

8FCF9143359D0C6839BF15993CEE01A0

D00AC845CC6F7F8D8772BF4A8E294A5F

322B105AE23A98DED86EE23879AED00C

这个也就类似于swap,只不过swap换入换出单位为页,这个单位为整个进程

动态分区分配

image-20231215154743853

这几个优缺点得背,比如说最主要的是最佳适配的内存碎片、开销问题,最坏适配的大分区用完问题,以及首次适配的性能最好。

非连续内存分配

上面这些包括什么动态分区分配算法(最先适配最佳适配等等)都是连续分配管理方式,接下来我们要学的分段分页属于非连续内存管理方式。他们逻辑空间连续,但是物理空间不一定连续

分页

67A2E236FA5E7B52285DE55A3B2921EF

页表项

EB5186D39F413C46BDF12CC3488BB66A

可以发现如果只是单纯的分页,还是不用什么逻辑地址那么复杂的,只用有页号块号的映射表即可

5B66F668315918779E53BF5842927C79

这个意思是一个页表跨了多个页框存储,第一个页的最大为1364,所以1365也即下一个页框的起始地址需要做点小操作

地址转换

F89F19F4ED9BE27BD5154655479DE96D

0328340E0EBCDF736DDD68A68DDF8EBF

4F1A9F92B0AF3EB8E52235DBBBA94363

D90676403D33299FD252F8370352B141

硬件流程

基本

image-20231215142236222

34A4F9BFA2F7CED592F901CE10135E27

TLB

image-20231215142440943

tlb是存的页表项,可以不防存而访高速cache来得到物理地址

image-20231215142910720

image-20231215142630009

计算题

image-20231215142734258

注意这个同时查找!

多级页表

image-20231215143206451

image-20231215143358611

值得注意的是,页表只能存在一个页里,不能多个,这个可以用来做题

image-20231215143443355

又一个时间空间矛盾

image-20231215143544186

分段

image-20231215143656067

image-20231215143921558

image-20231215144028571

对比

image-20231215144114622

image-20231215144157329

image-20231215144206370

段页结合

image-20231215144547127

image-20231215144630997

image-20231215144834947

image-20231215144846471

现在整了个二维TLB

07 虚拟内存

王道-虚拟内存

定义

6666,它这里说虚拟内存其实也就类似交换和覆盖技术。这个思想很牛逼

image-20231215145314234

传统方式的一次性、驻留性

image-20231215145435260

image-20231215145521243

请求分页

image-20231215145551580

页表机制

image-20231215150057099

缺页中断

image-20231215150128303

image-20231215150154401

地址变换

image-20231215150339974

image-20231215150438265

image-20231215150457627

之后就是直接查快表不是慢表了

页面置换算法

image-20231215151517166

OPT

image-20231215150635517

FIFO

image-20231215150719347

image-20231215150732801

LRU

image-20231215150839652

简单CLOCK
  1. 初始时每个都为1,扫描指针指向第一个元素
  2. 如果所需页面存在,把对应的置为1(不用改扫描指针)
  3. 如果不存在,移动扫描指针(过程中把1改为0)直到遇到第一个0,把它t出去,换成新的进来置为1,然后扫描指针指向下一位
改进CLOCK

优先淘汰没写过的页面

image-20231215151450300

页面分配

image-20231215151547874

驻留集

image-20231215151648557

策略

image-20231215151822291

  1. 固定分配局部置换

    一开始分配固定数量,然后进程内部选页换入换出,页面数量始终固定

  2. 可变分配全局置换

    缺页从全局空闲块队列取,无空闲块则随便选个进程的某个页调出分配给缺页进程

  3. 可变分配局部置换

    一开始分配一定数量,缺页时只在自己内部换入换出。

    监测缺页率,太高就给它多几个物理块

image-20231215152108930

image-20231215152227853

颠簸

image-20231215152304390

工作集

image-20231215152430810

用来确定驻留集

内存映射文件

image-20231215152526627

image-20231215152557043

概述

image-20231212011359313

image-20231212011434037

按需调页

image-20231212011659317

image-20231212011805609

image-20231212011828132

image-20231212011854713

image-20231212011928865

image-20231212012025865

image-20231212012301161

页面置换算法

FIFO

image-20231212012400097

OPT

image-20231212012411923

LRU

image-20231212012423419

image-20231212012635018

image-20231212012656691

CLOCK

image-20231212012719074

image-20231212012737172

image-20231212153415550

image-20231212153439485

image-20231212153513472

image-20231212153529194

其它

COW

image-20231212153714275

swap与工作集

swap

image-20231212153744449

工作集

image-20231212153907111

image-20231212153941822

image-20231212154046046

image-20231212154145323

页面置换

置换策略

image-20231212154231964

颠簸

image-20231212154317496

image-20231212154341605

页错误率PFF

image-20231212154438562

Belady异常

image-20231212154514364

image-20231212154537649

程序优化

image-20231212154617798

CSAPP

地址翻译

image-20231212155000025

image-20231212155013781

image-20231212155034290

image-20231212155058132

image-20231212155119927

image-20231212155525186

映射方法

image-20231212155650534

image-20231212160116087

全相联

image-20231212155712254

image-20231212155721629

image-20231212155744351

image-20231212155752305

image-20231212155814168

image-20231212160050969

image-20231212160101240

直接映射

image-20231212155826867

image-20231212155900547

image-20231212155911124

image-20231212155925592

image-20231212155937312

组相联

image-20231212155953882

image-20231212160001192

image-20231212160016055

image-20231212160027767

内存映射

它这里引入了一个很有意思的概念,将一般的内存映射与mmap结合在了一起。

对于进程来说,其代码段和数据段相当于映射到了某个磁盘上的普通文件,栈和.bss段相当于映射到了某个匿名文件。体会一下这种思想。

image-20231212160159859

image-20231212161217005

image-20231212161256867

image-20231212161309986

image-20231212161350185

image-20231212161357613

image-20231212161412480

image-20231212161421030

image-20231212161504972

image-20231212161539376

08 I/O与存储

设备管理概述

image-20231212163654446

image-20231212163724400

image-20231212163743544

image-20231212163804302

IO系统

组成

image-20231212163833632

image-20231212163922352

我记得ghost把enclave等等抽象为了设备文件,也只能说确实牛逼

命令发送

image-20231212163957156

image-20231212164007841

image-20231212164037542

IO控制方式

image-20231212164058789

轮询

image-20231212164117105

image-20231212164138780

中断

image-20231212164151766

image-20231212164242204

image-20231212164259618

DMA

image-20231212164321729

image-20231212164337688

image-20231212164347403

通道

image-20231212164410855

image-20231212164457302

缓冲技术

image-20231212164537505

软件缓冲

image-20231212164610223

image-20231212164631135

image-20231212164648842

image-20231212164752160

SPOOLING

可以破坏死锁条件的互斥条件,预防死锁

image-20231212164847126

image-20231212164909326

磁盘设备

概述

image-20231212165343775

image-20231212165430863

磁盘调度算法

image-20231212165647224

FCFS

image-20231212165523469

SSTF

image-20231212165539404

SCAN

image-20231212165557146

C-SCAN

image-20231212165614089

C-LOOK

image-20231212165634326

磁盘编址

image-20231212165826701

image-20231212165900840

image-20231212170110557

CHS

image-20231212170000950

image-20231212170012161

image-20231212170028859

扇区编号LBA

image-20231212165922199

进程IO

image-20231212170149231

image-20231212170218489

硬盘布局

image-20231212170259413

image-20231212171825365

image-20231212171840860

确实诶,分区完就变成/dev/sda3这种了,然后依然可以对sda3进行fdisk

页面置换

image-20231212172227683

image-20231212172301828

固态硬盘SSD

概述

image-20231212172413618

image-20231212172444005

image-20231212172504383

FTL

image-20231212172556762

组成

image-20231212172609192

地址映射

image-20231212172655147

磨损平衡

image-20231212173022907

image-20231212173047619

垃圾回收

image-20231212173119529

image-20231212173154055

09 文件系统

王道

文件逻辑结构

image-20231215161403084

顺序文件

image-20231215161505464

注意这个顺序文件可以顺序存储或者链式存储

image-20231215161704676

串结构就是没有按关键字排序

随机存储和检索记录还是两个概念

image-20231215161800012

索引文件

image-20231215161847039

索引顺序文件

image-20231215161945122

相当于离散索引了呗

image-20231215162026397

文件目录

image-20231215162251546

image-20231215162352069

image-20231215162443206

由于减少了目录大小,所以减少了磁盘块占用大小,所以增大了索引效率

也就是说FCB实际上就是dentry+inode吗

image-20231215163118434

文件物理结构

连续分配

image-20231215162813027

image-20231215162859868

链式分配

image-20231215162915964

隐式

默认指隐式链接

image-20231215163138411

image-20231215163203185

显式

image-20231215163238338

每次查FAT就够了

image-20231215163328135

FAT不会读磁盘

索引分配

image-20231215164020933

概述

感受一下跟FAT的差异

image-20231215163520515

当一个磁盘块装不完全部索引,就需要采取以下几种方案:

链接方案

image-20231215163651254

这个也就是咱的隐式链接了

多层索引

image-20231215163836049

注意文件大小和IO次数的计算

混合索引

image-20231215163930480

空闲空间管理

空闲表

image-20231215165316909

空闲链表

image-20231215165353195

image-20231215165411195

image-20231215165432482

位图

image-20231215165503214

注意与盘块号的转换

成组链接

unix分成块组,这下看懂了

image-20231215165629119

并且注意,每个块组第一块也是可以分配出去的,这时候就需要合并了

同理可得回收也要加层,感觉有点b+树那味了:

image-20231215165845285

文件基本操作

创建

image-20231215165935092

删除

image-20231215170004395

打开

image-20231215170030414

image-20231215170059442

image-20231215170227295

关闭

image-20231215170131455

读写

read、write系统调用

文件共享与保护

共享

image-20231215170302694

硬链接与软链接

硬链接

这也就是inode了

image-20231215170344704

软链接

image-20231215170415878

xv6就实现过,具体在open中switch-case

image-20231215170513759

保护

口令

image-20231215170549602

加密

image-20231215170611765

访问控制

image-20231215170642512

文件系统

层次结构

image-20231215170752365

用户接口:文件基本操作

文件目录:文件目录

存取控制:文件保护

逻辑文件与缓冲区:逻辑结构

物理文件系统:物理结构

辅助分配:空间管理

设备管理:磁盘管理

image-20231215170927318

全局结构

  1. 物理格式化

    image-20231215171001190

  2. 逻辑格式化

    image-20231215171019963

  3. 内存结构

    image-20231215171257687

虚拟文件系统

image-20231215171453724

很帅很帅的VFS

image-20231215171623873

挂载与装载

image-20231215171704841

咱在fuse也做了这件事。文件系统除了这些之外还得对自己内部结构进行初始化

目录结构

image-20231212174138039

物理结构

image-20231212174418362

连续存储

image-20231212174200133

image-20231212174227174

链式存储

image-20231212174248991

索引存储

image-20231212174302650

image-20231212174324702

image-20231212174358830

逻辑结构

树状目录

image-20231212174507288

image-20231212174522719

目录实现

内容

image-20231212174540569

image-20231212174645166

路径解析

image-20231212174612782

文件系统的实现

image-20231212174730193

分区

image-20231212174753764

image-20231212174818843

特性

提高性能

image-20231212174836078

image-20231212174911963

权限控制

image-20231212175029943

容错

image-20231212175106433

image-20231212175121235

image-20231212175135322

EXT2文件系统

image-20231212175240614

磁盘组织

image-20231212175335746

超级块

image-20231212175444720

块组描述符

image-20231212180037436

位图

image-20231212180104608

索引

image-20231212180125155

image-20231212180144842

Windows FAT

image-20231212180343276

image-20231212180649707

image-20231212180722817

日志

基本交互

image-20231212180909163

故障恢复

Redo

image-20231212180931530

image-20231212180958804

应用文件系统

EXT4

image-20231212181056088

LFS

概述

感觉这些存储领域的东西很多还是共通的。可以思考下与deduplication system的相关性。

image-20231212181144520

image-20231212181158081

image-20231212181213771

F2FS

image-20231212181308571