操作系统:考研核心笔记

杂谈 同时被 2 个专栏收录
11 篇文章 3 订阅
1 篇文章 0 订阅

前言

本文主要记录了操作系统在考研408科目的考试重点考察内容,作为自己的一个笔记也是备忘录。供读者参考阅读,也可用于作为后端工程师职位求职的操作系统的复习材料。确定不点赞收藏一波嘛?

在这里插入图片描述

文章目录

第一章:概述

第一章命题重点:

1.操作系统的概念、基本特征和功能,并行性与并发性

2.操作系统提供的接口,命令接口和程序接口。

3.用户态和核心态,中断和异常,系统调用。

并行性与并发性

并行性和并发性是既相似又有区别的两个概念。并行性是指两个或多个事件在同一时刻发生。并发性是指两个或多个事件在同一时间间隔内发生。

在多道程序环境下,==一段时间内,宏观上有多道程序在同时执行,而在每一时刻,单处理机环境下实际仅能有一道程序执行,故微观上这些程序还是在分时地交替执行。==操作系统的并发性是通过分时得以实现的。

操作系统的特征

在这里插入图片描述

操作系统的功能

负责进程控制、存储管理、设备管理和文件管理、进程通信,以及向上层用户和应用程序提供一些可调用的系统接口(命令接口、程序接口和GUI)。

操作系统的接口

在这里插入图片描述

用户态与核心态

在计算机系统中,通常运行着两类程序:系统内核程序和应用程序,为了保证内核程序不被应用程序破坏,为计算机设置了两种状态:核心态(也称为管态)和用户态(也称为目态),内核程序在核心态运行,而应用程序只能在用户态运行。

在这里插入图片描述

系统调用如图所示:

在这里插入图片描述

中断、异常

在这里插入图片描述

中断的本质作用:将CPU的控制权交给操作系统,因此中断发生后CPU状态需要转为核心态。

中断处理和子程序调用的区别

子程序调用是程序设计者事先在主程序中安排一条调用指令CALL,子程序的调用时间是固定的。主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路

在这里插入图片描述

有中断请求时,先由中断隐指令完成中断前程序的状态保存,主要工作有: 1.关中断; 2.保存PC, PSW(由硬件完成,注:子程序调用是不需要保存程序状态字PSW的。);3.根中据断向量引出对应的中断服务程序(即中断处理程序,属于操作系统内核) ,通用寄存器的保护由中断务程序完成。当中断服务程序运行结束后再开中断

若系统支持“多重中断”,则多中断系统在保护被中断进程现场时关中断,执行中断处理程序时开中断。

系统调用

重点掌握:①什么时候需要进行系统调用?②系统调用的过程?

什么时候需要进行系统调用?

系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作"(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。系统调用按功能大致可分为如下几类:

•设备管理。完成设备的请求或释放,以及设备启动等功能。

•文件管理。完成文件的读、写、创建及删除等功能。

•进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。

•进程通信。完成进程之间的消息传递或信号传递等功能。

•内存管理。完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

理解:可能会影响到其他进程的操作,必然需要通过系统调用请求操作系统代为完成

系统调用的过程?

在这里插入图片描述

第二章 进程控制

第二章命题重点

1,进程和线程的比较,内校支持线程和用户级线程。

2,进程的状态变化,进程的创建与终止,进程的阻塞与唤醒。

3,作业运行的顺序与甘特图,处理机调度的时机,各种调度算法的特点,特别是高响应比优先调度和多级反馈队列调度算法的原理。

4,进程的并发执行,临界区互斥软件实现方法,信号量机制的原理,掌握掌握经典的同步互斥问题并能灵活应用。

5.死锁的判断、安全序列,银行家算法。

进程与线程

进程与线程之间的比较

在这里插入图片描述

用户级线程VS内核级线程

用户级线程

在这里插入图片描述

用户级线程由应用程序通过线程库实现

所有的线程管理工作都由应用程序负责(包括线程切换)

用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。

在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明,操作系统对线程进行调度时仍然以进程为单位调度)

内核级线程

在这里插入图片描述

内核级线程的管理工作操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。

同时支持用户级线程和内核级线程:

在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上(n>=m)

在这里插入图片描述

注意:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位!

例如:左边这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中,有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行

用户级线程VS内核级线程的总结:

在这里插入图片描述

进程状态与进程控制

进程状态转换

在这里插入图片描述

进程的创建与终止

在这里插入图片描述

在这里插入图片描述

进程的阻塞与唤醒

在这里插入图片描述

处理机的调度

调度的基本概念

调度从作业提交到完成可以分为:作业调度、中级调度和进程调度三个层次:

在这里插入图片描述

调度的原则

在这里插入图片描述

进程调度的优先级

根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:

(1)静态优先级。在进程投入运行前就确定一个优先级,并且之后一直不变。(通常:系统进程优先级高于用户进程;前台进程优先级高于后台进程I/0型进程(或称I/O繁忙型进程)优先级高于计算型进程(CPU繁忙型进程) 。 )

(2)动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级

不能进行处理机调度的情况

在操作系统内核程序运行时,如果某时发生了引起进程调度的因素,并不一定能够马上进行调度与切换。不能进行进程的调度与切换的情况有以下几种:

1)在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源

2)进程在操作系统内核程序临界区(内核临界区用于访问关键区域的数据结构,并非普通的临界区)中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行。

3)其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。

如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统的请求标志,直到上述过程结束后才进行相应的调度与切换

典型作业/进程调度算法

在这里插入图片描述

在这里插入图片描述

进程同步与互斥

为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:

1,空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;

2,忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;

3,有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿) ;

4,让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

互斥的四种软件实现方式–单标志法、双标志先检查法、双标志后检查法、Peterson算法。

临界区互斥的软件实现方法

对于两个进程P0,P1互斥访问临界区的软件实现方法:

在这里插入图片描述

备注:单标志法违背了“空闲让进”原则。

在这里插入图片描述

备注:双标志先检查法违背了“忙则等待”原则。(先检查后上锁

在这里插入图片描述

备注:双标志后检查法违背了“空闲让进”和“有限等待”原则。(先上锁后检查

在这里插入图片描述

turn变量的设置-单标志的思想

flag数组的设置-双标志的思想

备注:皮特森算法违背了“让权等待”原则,暂时不能进入临界区的进程还会占用处理机。(轮询

信号量机制

整型信号量被定义为一个用于表示资源个数的整型量S。当进程发现S≤0时,就会不断测试。因此进程处于忙等状态,未遵循“让权等待”原则

void wait (int S) { 
    //wait原语,相当于"进入区": 
    while (5 <=0); //如果资源数不够,就一直循环等待
    S=S-1;//如果资源数够,则占用一个资源
}
void signal (int s) { 
     //signal 原语,相当于“退出区"
     S=S+1;//使用完资源后,在退出区群放资源
}

记录型信号量遵循了“让权等待”原则,其数据结构描述:

typedef struct{
 	int value;//代表资源数目
    struct process *L; //链接等待该资源的进程   
}semaphore;

记录型信号量的过程:信号量的P,V操作的实质是“加减”操作, P. V操作又是原语操作,所以, P操作是对信号量(只能对信号量,不可以对普通变量)进行减“1”操作,然后判断是否小于零, “是”则阻塞等待(将该进程挂到阻塞队列process *L的后面), “否”则什么都不做,而V操作是对信号量加"1”操作,然后判断是否小于等于零,“是”则唤醒进程(“是”表示当前有进程在等待该资源), “否”则什么也不做(“否”代表当前没有进程在等待该资源)。

录型信号量s中value值意义:

S.value的初值表示系统中某类资源的总数

•S.value<0表示当前系统中已经没有可用的该类资源

•S.value<0时,其绝对值表示S.L中因等待该资源而阻塞的进程个数

经典的同步问题

生产者-消费者问题

生产者、消费者共享一个初始为空、大小为n的缓冲区。

只有缓冲区没满时,生产者才能把产品入缓冲区,否则必须等待

只有缓冲区不空时,消费者才能从中取出产品,否则必须等待

缓冲区是临界资源,各进程必须互斥地访问

semaphore mutex = 1;//互斥信号量,实现对缓冲区的互斥访问
semaphore empty =n;//同步信号量,表示空闲缓冲区的数量
semaphore full = 0;//同步信号量,表示产品的数量,也即非空缓冲区的数量

//生产者
producer () {
    while(1) {
        生产一个产品;
        P(empty);//消耗一个空闲缓冲区
        
        P(mutex);//这里的 P(mutex)放在 P(empty) 的后面是为了防止死锁(1.缓冲区为空,消费者需要拿产品 2.缓冲区为满,生产者需要放产品)
        把产品放入缓冲区;
        V(mutex);
        
        V(full);//增加一个产品
    }
}

//消费者
consumer () { 
    while (1) {
        P(mutex);
        p(full);//消耗一个产品
        从缓冲区取出一个产品;
        V(mutex);
        
        V(empty);//增加一个空闲缓冲区
        使用产品;
    }
}
读者-写者问题

有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误

因此要求: ①允许多个读者可以同时对文件执行读操作; ②只允许一个写者往文件中写信息; ③任一写者在完成写操作之前不允许其他读者或写者工作; ④写者执行写操作前,应让己有的读者和写者全部退出。

关键:写者与写者需要互斥,写者与读者也需要互斥,但读者与读者不互斥

解决“读者与写者互斥,但读者与读者不互斥”的核心在于设置了一个计数器count用来记录当前正在访问共享文件的读进程数,我们可以用count的值来判断当前进入的程是否是第一个/最后一个读进程,从而做出不同的处理

semaphore rw =1;//用于实现对文件的互斥访问。表示当前是否有进程在访问共享文件
int count =0;//记录当前有几个读进程在访问文件
semaphore mutex = 1; //用于保证对count变量的互斥访问
semaphore w=1; //用于实现"写优先"

writer (){ 
    while (1) {
       P(w);
       P(rw); //之前"加锁
       写文件….
       V(rw);//写之后“解锁"
       V(w);
    }
}

reader (){ 
    while (1) {
        P(w);
        P(mutex);
        if(count==0)
            P(rw);
        count++;
        V(mutex);
        V(w);
        读文件...
        P(mutex);
        count--;
        if(count==0)
            V(rw);
        V(mutex);
    }
}

备注:这里的P(w)和V(w)是为了防止writer饥饿。

哲学家进餐问题

问题描述:

在这里插入图片描述

一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭。哲学家们倾注毕生的精力用于思考和进餐,哲学家在思考时,并不影响他人。只有当哲学家饥饿时,才试图拿起左、右两根筷子(一根一根地拿起) 。如果筷子已在他人手上,则需等待。饥饿的哲学家只有同时拿起两根筷子才可以开始进餐,当进餐完毕后,放下筷子继续思考。

semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex=1;//互斥地取筷子
Pi(){
    while(1){
        P(mutex);
        P(chopstick[i]);//拿左
        P(chopstick[(i+1)%5]);//拿右
        V(mutex);
        吃饭.....
        V(chopstick[i]);//放左
        V(chopstick[(i+1)%5]);//放右
        思考.....
    }
}

死锁

死锁条件

产生死锁必须同时满足以下四个条件,只要其中任一个条件不成立,死锁就不会发生

•互斥条件:在一段时间内某资源仅为一个进程所占有(互斥资源)。此时若有其他进程请求该资源,则请求进程只能等待。

•不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。

•请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己己获得的资源保持不放。

•循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链下一个进程所请求

预防死锁:破坏死锁产生的四个必要条件中的一个或几个

避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法) 。

死锁的检测和解除:允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施来解除死锁。(Key:资源分配图--两种结点?两种边分表代表什么?什么是“可完全简化”?

系统安全状态

安全状态,是指系统能按某种进程推进顺序( P, P2,.., Pn),为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序地完成。此时称P1, P2, …, Pn为安全序列。如果系统无法找到一个安全序列,则称系统处于不安全状态。==并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;==反之,只要系统处于安全状态,系统便可以避免进入死锁状态。

银行家算法的数据结构

在这里插入图片描述

银行家算法的执行过程

数据结构:

长度为m的一维数组Available表示还有多少可用资源

n*m矩阵Max表示各进资源的最大需求数

n*m矩阵Allocation表示已经给各进程分配了多少资源

Max-Allocation = Need矩阵表示各进程最多还需要多少资源

用长度为m的一位数组Request表示进程此次申请的各种资源数

在这里插入图片描述

银行家算法步骤

①检查此次申请是否超过了之前声明的最大需求数(需确保Need[i]≥Request i

②检查此时系统剩余的可用资源是否还能满是这次请求(需确保Available ≥ Request i) 。

③试探着分配,更改各数据结构(Available -= Request i ; Allocation[i] += Request i ; Need = Max-Allocation)

④用安全性算法检查此次分配是否会导致系统进入不安全状态。

安全性算法步骤

①检查当前可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。

②不断重复上述过程,看最终是否能让所有进程都加入安全序列。

第三章 内存管理

第三章命题重点

1,程序装入的过程与原理,编译与链接,逻辑地址与物理地址。

2,连续分配方式的原理与特点,动态分区分配算法的原理。

3,分页存储管理的页表机制,分段存储管理的段表机制,分页与分段的比较

4,虚拟存储器的原理、特征,缺页中断的处理过程和特点,虚拟地址和物理地址的变换引入快表后的页式虚拟存储器的地址变换过程,各种页面置换算法的原理,页面分配策略,工作集的定义,抖动产生的原因和解决办法。

内存管理的概念

程序运行的基本原理

将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:

•编译,由编译程序将用户源代码编译成若干个目标模块,每个模块具有各自的逻辑地址空间。

•链接,由链接程序将上述目标模块,以及所需库函数链接,形成具有完整的逻辑地址空间的装入模块。

•装入,由装入程序将装入模块装入内存

而程序执行的过程中,在指令寻址与数据寻址时, CPU不断地进行从逻辑地址到物理地址的转换。图3-1展示了从源程序(C程序为例)变为在内存中执行的程序的过程。

在这里插入图片描述

连续分配管理方式

在这里插入图片描述

非连续分配管理方式
分页存储管理方式

在这里插入图片描述

分段存储管理方式

在这里插入图片描述

在这里插入图片描述

分页式存储与分段式的对比

在这里插入图片描述

虚拟页式存储管理
虚拟存储器的定义和特征

基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存。另一方面,操作系统将内存中暂时不使用的内容换出到外存上。这样,系统好像,为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

虚拟存储器有以下三种实现方式:请求分页;请求分段;请求段页式。

虚拟存储器有以下三个主要特征:多次性;对换性;虚拟性

虚拟存储器的容量取决于地址空间(指令的逻辑地址空间)的大小,而不是由实际的内存容量决定。

缺页中断机构

产生缺页中断的目的要将位于外存上的代码或数据装入内存,此时应将缺页的进程阻塞(调页完成唤醒),如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项,若此时内存中没有空闲块,则需要淘汰某页

缺页中断作为中断同样要经历,诸如保护CPU环境、分析中断原因、转入缺页中断处理程序、恢复CPU环境等几个步骤。但与一般的中断相比,它有以下两个明显的区别:

在指令执行期间产生和处理中断信号,而非一条指令执行完后

一条指令(多地址指令)在执行期间,可能产生多次缺页中断

快表

在这里插入图片描述

时钟置换算法

系统为每一帧关联一个附加位,称为使用位。

置换原则:

①将候选帧集合看做一个循环缓冲区。

②当需要替换一页时,从当前指针位置开始查找首个使用位为0的帧。查找过程重复以下操作直至找到为止:

若帧的使用位为0,则该帧中的页被替换,其使用位被置为1,并将指针指向缓冲区中的下一帧

若帧的使用位为1,操作系统就将该位重新置为0,并查找缓冲区的下一帧

改进型的时钟置换算法

简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/0操作写回外存;只有被淘汰的页面被修改过时,才需要写回外存。

因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/0操作。这就是改进型的时钟置换算法的思想。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。如(1, 1)表示一个页面近期被访问过,且被修改过。

算法规则:

算法规则:将所有可能被置换的页面排成一个循环队列。

第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位。(第一优先级:最近没访问,且没修改的页面。

第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于·替换。本轮将所有扫描过的帧访问位设为0。(第二优先级:最近没访问,但修改过的页面。

第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于、替换。本轮扫描不修改任何标志位。(第三优先级:最近访问过,但没修改的页面。

第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于、替换。 (第四优先级:最近访问过,且修改过的页面。

页面置换策略

固定分配局部置换。它为每个进程分配一定数量的物理块,在整个运行期间都不改变。若进程在运行中发现缺页,则只能从该进程在内存的页面中选出一个换出,然后再调入需要的页面。

可变分配全局置换。这是最易于实现的物理块分配和置换策略,为系统中的每个进程分配一定数量的物理块,操作系统自身也保持一个空闲物理块队列。当某进程发现缺页时,系统从空闲物理块队列中取出物理块分配给该进程,并将欲调入的页装入其中。

可变分配局部置换。它为每个进程分配一定数目的物理块,当某进程发现缺页时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其他进程的运行。如果进程在运行中频繁地缺页,系统需再为该进程分配若干附加物理块,直至该进程缺页率趋于适当程度为止; 反之,若一个进程在运行过程中缺页率特别低,则此时可适当减少分配给该进程的物理块

工作集(驻留集)

=某段时间间隔内,进程要访问的页面集合。经常被使用的页面需要在驻留集中,而长期不被使用的页面要从驻留集中被丢弃。驻留集模型使用较为简单:操作系统跟踪每个进程的驻留集,并为进程分配大于其工作集的空间,如果还有空闲,那么可启动另一个进程。如果所有驻留集之和增加以至于超过了可用物理块的总数,那么系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程。

正确选择驻留集的大小,对存储器的有效利用和系统吞吐量的提高,都将产生重要的影响

抖动
抖动现象

在进程的页面置换过程中,频繁的页面调度行为称为抖动或颠簸

如果一个进程在换页上用的时间多于执行时间,那么这个进程就在颠簸。

使用虚拟内存技术,操作系统中进程通常只有一部分块位于主存中,从而可以在内存中保留更多的进程以提高系统效率。产生抖动后,使得系统吞吐量下降,缺页中断率迅速增长,由于处理机差不多花费所有时间在进行内外存页面管换,因此几乎不能做任何工作。

引起系统抖动的原因是对换的信息量过大、内存容量不足、置换算法选择不当,所以解决的办法就是降低交换页面的数量、加大内存容量、改变置换选择算法。但是降低交换页面数量和改变置换选择算法对于一个应用系统来讲是不可能的,只能增加内存容量,或者降低进程数量(相对地增加内存),而增加交换区容量并不能解决物理内存不足的问题

第四章 文件管理

第四章 命题重点

1,绝对目录与相对目录,文件控制块,文件共享的两种方法,文件的打开与关闭。

2,文件的几种物理结构及特点, FCB的存储方式及原因,混合索引分配方式。

3,各种磁盘调度算法的原理,特别是SCAN和CSCAN

目录结构

绝对路径与相对路径

用户要访问某个文件时用文件路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件的通路上的所有目录名与数据文件名用分隔符"/"链接起来而成。

绝对路径:从根目录出发的路径

相对路径:==从用户(进程)的当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/"链接而成。==进程对各文件的访问都是相对于当前目录进行的,设置当前目录有利于加快文件的检索速度

文件控制块

文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取"。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项

FCB主要包含以下信息:

基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。

存取控制信息,如文件存取权限等。

使用信息,如文件建立时间、修改时间等。

文件共享和文件保护

文件共享

(1)硬链接

文件共享硬链接共享采用索引结点方式。在树形结构的目录中只设置文件名及指向相应索引结点的指针。共享文件的用户目录中都设置指向该文件索引结点的指针。在索引结点中还应有一个链接计数count,用于表示链接到本索引结点(亦即文件)上的用户目录项的数目,当count >1时,文件拥有者不能将文件删除,如图4-1所示。

在这里插入图片描述

优点:实现了异名共享

缺点:文件拥有者不能删除与他人共享的文件。

(2)符号链(软链接)

在利用符号链实现文件共享时,只有文件的拥有者才拥有指向其索引结点的指针。当用户B要共享用户A的一个文件F时,可以由系统在用户B的目录下创建一个只包含被共享文件F的路径名的LINK类型的新文件。称这样的链接方法为符号链接。

优点:文件拥有着可以删除被他人共享的文件

缺点:当其他用户读共享文件时,需要根据路径名的各个分量逐个查找,访问开销大。"

文件的操作

文件的创建和删除

1)创建文件:创建文件有两个必要步骤,一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能信息。

2)删除文件:先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间(包括文件控制块、缓冲区等)

文件的打开

许多系统要求在首次使用文件时,使用系统调用open.操作系统维护打开文件表(open-file table),当需要一个文件操作时,可通过该表的一个索引指定文件,就省略了搜索环节。当文件不再使用时,进程可以关闭它,操作系统从打开文件表中删除这一条目。

如果调用open的请求(创建、只读、读写、添加等)得到允许,进程就可以打开文件,而open通常返回一个指向打开文件表中的一个条目的指针。通过使用该指针(而非文件名)进行所有I/0操作,以简化步骤并节省资源。

常用系统调用

在这里插入图片描述

文件实现

文件分配方式

在这里插入图片描述

在这里插入图片描述

混合索引分配方式

混合索引分配把所有的地址项分成两类,即直接地址和间接地址。如图4-2所示。

直接地址

每项中所存放的是该文件数据所在盘块的盘块号。

一次间接地址

每项一次间接地址指向一个一次间址块(索引块),一次间址块存放着文件的多个盘块号。

二次间接地址

每项二次间址地址指向一个二次间址块,二次间址块中记入所有一次间址块的盘号。

在这里插入图片描述

磁盘组织与管理

一次磁盘读写操作的时间由寻找(寻道)时间、延迟时间和传输时间决定:

在这里插入图片描述

常见的磁盘调度算法:

在这里插入图片描述

第五章 设备管理

第五章 命题重点

1,各种I/0控制方式、特点及适用情况。

2,I/0软件的层次结构,设备无关性的原理。

3.I/0调度,单缓冲和双缓冲的原理及性能分析。

I/O软件的层次结构

在这里插入图片描述

I/O调度与缓冲区

I/O调度的概念

I/0调度就是确定一个好的顺序来执行这些I/O请求。应用程序所发布的系统调用的顺序不一定总是最佳选择,所以需要I/O调度来改善系统整体性能,使进程之间公平地共享设备访问,减少I/O完成所需要的平均等待时间

单缓冲与双缓冲

单缓冲。在设备和处理器之间设置一个缓冲区。设备和处理器交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理器从缓冲区取走数据,能够实现预读和滞后写。(缓冲区满->取数据;缓冲区空->写数据

在这里插入图片描述

双缓冲,在设备与处理器之间设置两个缓冲区。I/O设备输入数据时,两个缓冲区交替使用。双缓冲的使用提高了处理器和输入设备的并行操作的程度

在这里插入图片描述

设备的分配与回收

逻辑设备与物理设备

为了提高设备分配的灵活性和设备的利用率、方便实现I/0重定向,引入了设备独立性。设备独立性是指应用程序独立于具体使用的物理设备。而为了实现设备独立性引入了逻辑设备和物,理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,则使用物理设备名称逻辑设备名与物理设备名通过系统中设置的一张逻辑设备表(LUT)进行映射

  • 10
    点赞
  • 0
    评论
  • 59
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值