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

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

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

  1. 单道程序存储管理:可以用静态地址翻译(用户程序的地址在运行之前就可以计算)
  2. 多道程序的存储管理:固定(静态)式分区分配(分 单一队列的分配方式 和 多队列的分配方式 )、可变(动态)式分区分配
    分配内存:当剩余分区大小《size时,不再进一步分割。即:当申请空间加上size后大于分区大小,则整个分区分配出去。
    算法:
    First Fit(首次适应算法)、Next Fit(下次适应算法)、Best Fit(最佳适应算法)、Worst Fit(最坏适应算法)、快速适应算法(把空闲分区按大小分类、建立多个空闲链表)
    回收分区要合并
  3. (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

  1. 那些是并发的
  2. 其中那些是互斥的、同步的
  3. 按互斥、同步规则设置信号量,说明含义和初值
  4. 用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为单位放在缓存中,填满后写入到硬盘。文件逻辑结构

文件逻辑结构

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章