操作系统王道23选择题总结
第一章 计算机系统概述
1.1 操作系统的基本概念
- 操作系统管理计算机的硬件和软件资源,这些资源统称为计算机资源,还可以扩充裸机以提供功能更强大的扩充机器,并充当用户与硬件交互的中介。除此之外,操作系统也可以管理文件,文件不属于硬件资源,但属于计算机资源。但是注意,操作系统管理文件,是指操作系统关心计算机中的文件的逻辑结构、物理结构、文件内部结构、多文件之间如何组织的问题,而不是关心文件的具体内容。操作系统不能直接用来编程。
- 源程序是一种计算机代码,是用程序设计语言编写的程序,经编译或解释后可形成具有一定功能的可执行文件,是直接面向程序员用户的,而不是操作系统的管理内容。
- 操作系统主要向用户提供命令接口和程序接口(系统调用),此外还提供图形接口;图形接口其实是调用了系统调用而实现的功能。
- 系统调用是操作系统为应用程序使用内核功能所提供的接口。操作系统不允许用户直接操作各种硬件资源,因此用户程序只能通过系统调用的方式来请求内核为其服务,间接的使用各种资源。
- 广义指令就是系统调用命令,而命令解释器属于命令接口,shell是命令解释器,也属于命令接口。
- 系统开机后,操作系统的程序会被自动加载到内存的系统区,这段区域是RAM。
- 单处理机系统中,可并行的是处理及与设备,处理机与通道,设备与设备。注意,单处理机系统中进程与进程只能并发执行。
库函数与系统调用的区别和联系
库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间中,运行在内核空间中,而且许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常要比系统调用的高。因为使用系统调用时,需要上下文的切换及状态的转换(由用户态转向核心态)。
1.2 操作系统发展历程
- 实时系统的进程调度必须能足够及时地处理某些紧急地外部事件,因此通常采用抢占式地优先级高者优先算法。它的两个目标是实时性和可靠性,资源利用率不是实时操作系统的主要目标,为了保证快速处理高优先级任务,允许“浪费”一些系统资源。
- 分时系统采用非抢占式优先级调度算法改善系统的响应时间。
- 多道程序设计技术允许同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬/软件资源,当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序,即借助中断技术,多道批处理系统的I/O设备可与CPU并行工作。
1.3 操作系统运行环境
- 操作系统执行程序时,必须从起始地址开始执行。
- 中断是操作系统必须提供的功能,因为计算机的各种错误都需要中断处理,核心态与用户态切换也需要中断处理。
- 内核可以执行处理器能执行的任何指令,用户程序只能执行除特权指令外的指令。所以特权指令只能由内核即操作系统使用。
- 中断处理流程的前三个步骤是由硬件直接实现(隐指令)的。地址映射中需要基地址(或页表)寄存器和地址加法器的支持。而在时钟管理中,需要硬件计数器保持时钟的运行。进程调度由调度算法决定CPU使用权,由操作系统实现,不需要硬件的支持。
- 中断发生时,若被中断的是用户程序,则系统将从目态转入管态,在管态下进行中断的处理;若被中断的是低级中断,则仍然保持在管态,而用户程序只能在目态下运行,因此进入中断处理的程序只能是OS程序。中断程序本身可能是用户程序,但是进入中断的处理程序一定是OS程序。
- 计算机通过硬件中断机制完成由用户态到核心态的转换。
- 大多数计算机操作系统的内核包括四个方面的内容:时钟管理、中断机制、原语和系统控制的数据结构及处理。
- ”访管“指令仅在用户态下使用,执行”访管“指令将用户态转变为核心态。
- 广义指令的调用可能发生在用户态,调用广义指令的指令不一定是特权指令,但广义指令存在于核心态中,所以执行一定在核心态。注意区分调用和执行。
- 子程序调用只需要保存程序断点,即该指令的下一条指令的地址;中断处理不仅要保存断点(PC程序计数器的内容),还要保存程序状态字寄存器(PSW)的内容。
- 外部中断处理过程中,PC值由中断隐指令(硬件)自动保存,而通用寄存器内容由操作系统保存。
- 中断是指来自CPU执行指令以外事件的发生,如设备发出的I/O结束中断,时钟中断。异常也称内中断,指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、虚拟系统的缺页及专门的陷入指令等。
- 进程调度是操作系统内核进程,无需用户干预,在核心态执行。
- 执行系统调用的过程:正在运行的进程先传递系统调用参数,然后由陷入(trap)指令负责将用户态转换为内核态,并将返回地址压入堆栈以备后用,接下来CPU执行相应的内核态服务程序,最后返回用户态。
1.4 操作系统结构
- Windows是宏内核操作系统。
- 在微内核架构中,客户和服务器之间、服务器和服务器之间的通信采用信息传递机制,这就使得微内核系统能很好地支持分布式系统。由于内核的服务部变少,一般来说服务越少内核越稳定,添加系统服务时不必修改内核,这就使得微内核架构的可扩展性和灵活性更强。
- 常驻内存的只是操作系统内核,其他部分仅在需要时才调入。
- 操作系统的引导程序位于磁盘活动分区的引导扇区中。引导程序分为两种:一种是位于ROM中的自举程序(BIOS的组成部分),用于启动具体的设备;另一种是位于装有操作系统硬盘的活动分区的引导扇区中的引导程序,用于引导操作系统。
- MBR(主引导目录)检查分区表,查找活动分区,并将该分区的引导扇区的内容加载到内存加以执行。
- 软件能实现的功能也能由硬件实现。
- 虚拟机中可以安装多个操作系统。
分层法特点
- 分层式结构简化了系统的设计和实现
- 便于系统的调试和验证
- 单层依赖
- 易于扩充和维护,容易实现在系统中增加或替换一层而不影响其他层
- 系统效率低
微内核特点
- 内核足够小
- 基于客户/服务器模式
- 应用”机制与策略分离“原理
- 采用面向对象技术
- 稳定、可扩展性和灵活性强
- 需要频繁地在核心态和用户态之间切换,因而切换开销偏大。
微内核和宏内核为对立的结构
第二章 进程与线程
2.1 进程与线程
- 进程映像是PCB、程序段和数据的组合,其中PCB是进程存在的唯一标志。
- 线程可以独立执行程序。但是,线程不能脱离进程单独运行,只能在进程中运行。
- 每个进程包含独立的地址空间,进程各自的地址空间是私有的,只能执行自己地址空间中的程序,且只能访问自己地址空间中的数据,相互访问会导致指针的越界错误。因此,进程之间不能直接交换数据,但可利用操作系统提供的共享文件、消息传递、共享存储区等进程通信。管道是一种文件。
- 动态性是进程最重要的特性,以此来区分文件形式的静态程序。操作系统引入进程的概念,是为了从变化的角度动态地分析和研究程序的执行。
- 优先级分静态和动态,动态优先级是根据运行情况而随时调整的。
- 系统发生死锁有可能进程全部都处于阻塞态,或无进程任务,CPU空闲。
- 进程申请处理器得不到满足时就处于就绪态,等待处理器的调度。
- 在进程的整个生命周期中,系统总是通过其PCB对进程进行控制。
- I/O操作完成之前在等待结果,状态为阻塞态;完成后进程等待时间就绪,变为就绪态。
- 程序封闭性是指进程执行的结果只取决于进程本身,不受外界影响。失去封闭性后,不同速度下的执行结果不同。
- 进程有它的生命周期,不会一直存在于系统中,也不一定需要用户显示地撤销。阻塞和唤醒是进程生存期的中间状态。进程可在完成时撤销,或在出现内存错误等时撤销。
- 用信箱实现进程间互通信息的通信机制要有两个通信原语,它们是发送原语和接收原语。信箱通信是一种间接通信方式。
- 不能进行进程调度与切换的情况:处理中断的过程、访问内核程序临界区、原子操作。应该进行进程调度与切换的情况:由于时间片用完、运行结束、需要等待事件的发生(如等待键盘响应)、出错、自我阻塞等,均可以激活调度程序进行重新调度,选择一个新的就绪进程投入运行。新进程加入就绪队列不是引起调度的直接原因,当CPU正在运行其他进程时,该进程仍然需要等待。
- 全局赋值变量在正文段赋值数据段,未赋值的局部变量和实参传递在栈段,动态内存分配在堆段,常量在正文段,进程的优先级只能在PCB内。
- 一个进程是程序在一个数据集上的一次运行过程。运行于不同的数据集,将会形成不同的进程。
- PCB内所含的数据结构内容主要有四大类:进程标志信息、进程控制信息、进程资源信息、CPU现场信息。
- 进程的最大数目取决于系统内存的大小。
- 进程的就绪数目越多,争夺CPU的进程就越多,但只要就绪队列不为空,CPU就总是可以调度进程运行,保持繁忙,这与就绪进程的数目没有关系,除非就绪队列为空,此时CPU进入等待态,导致CPU的效率下降。
- 只有从运行态到阻塞态的转换是由进程自身决定的。从运行态到就绪态的转换是由于进程的时间片用完,“主动”调用程序转向就绪态。虽然从就绪态到运行态的转换同样是调度程序决定的,但进程是“被动的”。从阻塞态到就绪态的转换是由协作进程决定的。
- 对进程的管理和控制功能是通过执行各种原语来实现的。
- 只有在时间片到或出现比现在进程优先级更高的进程时才转变成就绪态。
- 在内核级线程中,同一进程中的线程切换,需要从用户态转到核心态,系统开销大。
- 需要创建进程的例子:用户登录成功,启动程序执行。
- 进程中的线程共享内的全部资源,但进程中某线程的栈指针对其他线程是透明的,不能与其他线程共享。
- 进程申请读磁盘操作时,要等待I/O操作完成。
- 请求某一资源会进入阻塞态,被剥夺处理机资源,进入就绪态,一旦得到处理机即可运行。
- 当被阻塞进程等待的某资源可用时,进程将会被唤醒。
- 内核为进程及其内部的每个线程维护上下文信息,调度也是在内核中由操作系统完成。
- 用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助进行调度,因此用户级线程的切换效率更高。
- 父进程与子进程可以并发执行。父进程可与子进程共享一部分资源,但不能共享虚拟地址空间,在创建子进程时,会为子进程分配资源,如虚拟地址空间。临界资源一次只能为一个进程所用。进程控制块是进程存在的唯一标志,每个进程都有自己的PCB。
- 创建一个新进程就是为其申请一个空白的进程控制块,并初始化一些必要的进程信息,如初始化进程标志信息、初始化处理状态信息、设置进程优先级等。
进程和程序
静态的程序除了占用磁盘空间外,不需要其他系统资源,只有执行中的进程才需要分配内存,CPU等系统资源。
进程与程序相关,进程包含了程序。程序是进程的核心内容,没有程序就没有进程。
进程不仅仅是程序,还包含程序在执行过程中使用的全部资源。没有资源,程序就无法执行,因此进程是程序执行的载体。
执行一条命令或执行一个应用程序时,进程和程序之间形成一对一的关系。进程在执行过程中可以加载执行不同的应用程序,从而形成一对多的关系;以不同的参数或数据多次执行同一个应用程序时,形成多对一的关系;并发地执行不同的应用程序时,形成多对多的关系。
父进程创建子进程和主程序调用子程序的不同
父进程创建子进程后,父进程与子进程同时执行(并发)。主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序才开始执行。
为何进程之间的通信必须借助于操作系统内核功能?进程通信的方式
每个进程有自己独立的地址空间。在操作系统和硬件的地址保护机制下,进程无法访问其他进程的地址空间,限制每个进程只能访问自己的地址空间。所以必须借助操作系统的系统调用函数实现进程之间的通信。
主要方式:共享内存区,消息传递,管道系统,共享文件。
多线程和多任务的区别
多任务是针对操作系统而言的,代表操作系统可以同时执行的程序的个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程个数,而每个线程可以完成不同的任务。
若系统中没有运行进程,是否一定没有就绪进程?
是。若系统中未运行进程,则系统很快会选择一个就绪进程运行。只有就绪队列中无进程时,CPU才可能处于空闲状态。
若系统中既没有运行进程,又没有就绪进程,系统中是否就没有进程?
不一定。因为系统中的所有进程可能都处于等待态,可能处于死锁状态,也有可能因为等待的事件未发生而进入循环等待态。
采用优先级进程调度时,运行进程是否一定是系统中优先级最高的进程?
不一定。因为高优先级的进程有可能正处于在等待队列中,进程调度会从就绪队列中选择一个进程占用CPU,这个被选中的进程可能优先级较低。
为支持多进程的并发执行,系统必须建立哪些关于进程的数据结构?
进程控制块(PCB),用于进程的管理和控制。
为支持进程状态的变迁,系统至少应该提供哪些进程控制原语?
创建新进程原语、阻塞进程原语、唤醒进程原语、终止进程原语操作。
执行每个进程控制原语时,进程状态发生什么变化?相应的数据结构发生什么变化?
进程创建原语:从PCB集合申请一个空白的PCB,将调用者参数添入该PCB。置新进程为“就绪态”。
终止进程原语:终止完成的进程,回收其所占的资源。
阻塞原语:将进程从运行态变为阻塞态。进程被插入等待事件的队列,同时修改PCB中相应的表项,如进程状态和等待队列指针。
唤醒原语:将进程从阻塞态变为就绪态。进程从阻塞队列中移出,插入就绪队列,等待调度,同时修改PCB中相应的表项,如进程状态。
2.2 处理机调度
- 处理机调度目的是为了合理地处理计算机的软/硬件资源。
- 用户级线程切换在同一进程中进行,仅需要少量的机器指令;内核级线程的线程切换需要完整的上下文切换、修改内存映像、使高速缓存失效,这就导致了若干数量级的延迟。
- 时间片轮转的主要目的使得多个交互的用户能够得到及时响应,实现了人机交互;多级反馈队列调度算法使各种作业用户满意。
- 进程(线程)调度的时机包括:运行的进程(线程)运行完毕、运行的进程(线程)自我阻塞、运行的进程(线程)的时间片用完、运行的进程(线程)所需的资源没有准备好、运行的进程(线程)出现错误。以上都是CPU方式为不可抢占方式时引起的进程(线程)调度。在CPU方式是可抢占方式时,就绪队列中的某个进程(线程)的优先级高于当前运行进程(线程)的优先级,也会发生进程(线程)调度。
- 作业是用户提交,以用户任务为单位,进程是由系统自动生成的,以操作系统控制为单位。
- 中断向量本身是用于存放中断服务例行程序的入口地址,因此中断向量地址就应该是入口地址的地址。
2.3 同步与互斥
- 多个进程可以共享系统中的资源,一次仅允许一个进程使用的资源称为临界资源。访问临界资源的那段代码称为临界区。
- 同步机制的四个准则:
- 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
- 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
- 有限等待:对请求访问的进程,应保证能在有限的时间内进入临界区。
- 让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。
- 临界资源是互斥共享资源,例如打印机、共享变量、共享缓冲区和公用队列。
- P、V操作是一种低级的进程通信原语,由两个不可被中断的过程组成。P操作时的进程处于运行态。
- 互斥信号量的初值一般设置为1。用P,V操作实现进程同步时,信号量的初值应根据具体情况来确定。若期望的消息尚未产生,则对应的初值应设为0;若期望的消息已存在,则信号量的初值应设为一个非0的正整数。
- 共享程序段可能同时被多个进程使用,所以必须可重入编码,否则无法实现共享的功能。
- 公用队列可供多个进程使用,但一次之可供一个程序使用。私用数据仅供一个进程使用,不存在临界区问题。
- 管程是一组数据及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。管程不仅能实现进程间的互斥,而且能实现进程间的同步。
- 管程具有如下特征:
- 局部于管程的数据只能被局部于管程内的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
- 每次仅允许一个进程在管城内执行某个内部过程。
- 记录型信号量由于引入阻塞机制,消除了不让权等待的情况。
2.4 死锁
-
死锁产生必须同时满足4个条件:
- 互斥条件
- 不剥夺条件
- 请求并保持条件
- 循环等待条件
-
死锁预防
- 破坏互斥条件:允许系统资源都能共享使用。破坏互斥条件预防死锁的方法不太可行,而且在有的场合应该保护这种互斥性。如打印机
- 破坏不剥夺条件:允许资源剥夺。
- 破坏请求并保持条件:一次请求所有资源。
- 破坏循环等待条件:资源按序分配。
-
死锁解除:
- 资源剥夺法:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。
- 撤销进程法:强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。
- 进程回退法:让一个(或多个)进程回退到足以回避死锁的地步。
-
死锁状态与不安全状态的关系:
- 死锁状态一定是不安全状态。
- 安全状态一定是无死锁状态。
-
产生死锁的根本原因是系统资源分配不足和进程推进顺序非法。
-
死锁检测一般采用两种方法:资源有向图法和资源矩阵法。
-
死锁定理是用于检测死锁的方法。
第三章 内存管理
3.1 内存管理概念
- 内存管理的概念是对内存进行划分和动态分配,为了更好地支持多道程序并发执行,必须进行内存管理。
- 进程正在进行I/O操作时不能换出主存,否则其I/O数据区将新换入的进程占用,导致错误。
- 覆盖和交换的提出就是为了解决主存空间不足的问题,将暂时不用的部分换出主存,在逻辑上扩充主存。
- 段页式存储管理中,地址映射表时每个进程一张段表,每个段一张页表。
- 分页存储管理要求每个进程拥有一张页表,且进程的页表驻留在内存中。
- 对重定位存储管理方式,应在整个系统中设置一个重定位寄存器。
- 静态装入是指在编程阶段就把物理地址计算好。可重定位(静态重定位)是指在装入时把逻辑地址转换成物理地址,但装入后不能改变。动态重定位是指在执行时再决定装入的地址并装入,装入后有可能会换出,所以同一个模块在内存中的物理地址是可能改变的。动态重定位是指在作业运行过程中执行到一条访存指令时,再把逻辑地址转换为主存中的物理地址,实际中是通过硬件地址转换机制实现的。
- 固定分区方式中,作业装入后位置不再改变,可以采用静态重定位。
- 含有内部碎片的存储管理:单一连续分配,固定分区分配,分页式存储管理,段页式存储管理
含有外部碎片的存储管理:动态分区分配,分段式存储管理
- 页表和段表存储在内存中,系统提供给用户的物理地址空间为总空间大小减去页表或段表的长度。
- 内存分页管理是在硬件和操作系统层面实现的,对用户、编译系统、连接装配程序等上层是不可见的。
- 页表的功能由一组专门的存储器实现,其始址放在页表基址寄存器中。
- 分段是指在用户编程时,将程序按照逻辑划分为几个逻辑段。
- 程序的动态链接与程序的逻辑结构相关,分段存储管理将程序按照逻辑段进行划分,因此有利于动态链接。
- 页面大,用于管理页面的页表就少,但是页内碎片会比较大;页面小,用于管理页面的页表就大,但是页内碎片小。
- 引入段式存储管理方式,主要是为了满足:方便编程、分段共享、分段保护、动态链接和动态增长。
- 主存访问是以字节或字为单位。
- 分区分配内存管理方式的主要保护措施是界地址保护。
- 最佳适应算法最容易产生最多的内存碎片。
- 在多级页表中,页表基址寄存器存放的是顶级(一级)页表的起始物理地址。
- 动态分区又称可变式分区,它是系统运行过程中在作业装入时动态创建的。
3.2 虚拟内存管理
- 在请求分页存储器中,由于页面尺寸增大,存放程序需要的页帧数就会减少,因此缺页中断的次数也会减少。
- 导致LRU算法实现起来耗费高的原因是需要对所有的页进行排序。
- 交换空间的磁盘利用率高说明交换操作非常频繁(类似抖动),因此物理内存严重短缺。解决方案:增大内存的容量,减少主存中的程序。
- 虚拟内存的实现只能建立在离散分配的内存管理的基础上。
- 发生缺页中断时,系统执行的操作可能是置换页面或分配内存。系统内没有越界错误,不会进行越界错误处理。
- 增大快表容量能把更多的表项装入快表,可以加快虚实地址转换的平均速率;让页表常驻内存可以省去一些不在内存中的页表从磁盘上调入的过程,也能加快虚实地址转换。
第四章 文件管理
4.1 文件系统基础
-
文件是以计算机硬盘为载体的存储在计算机上的信息集合,它的形式多样。
-
UNIX操作系统中,所有设备都被视为特殊的文件,因为UNIX操作系统控制和访问外部设备的方式和访问一个文件的方式是相同的。
-
一个文件对应一个FCB,而一个文件目录项就是一个FCB。
-
打开文件操作的主要工作是把指定工作的目录复制到内存指定的区域。
-
目录文件中存放的是子目录和数据文件的信息。
-
将文件描述信息从目录项中分离,即应用了索引结点的方法,磁盘的盘块中可以存放更多的目录项,查找文件时可以大大减少其I/O信息量。
-
在文件系统中,口令、存取控制和用户权限表都是常用的文件保护方法。
-
对一个文件的访问,常由用户访问权限和文件属性共同限制。
-
相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性较高。若访问控制不由系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密方法将无法扩展。所以访问控制机制必须由系统实现。
-
逻辑文件:无结构文件(流式文件)和有结构文件(记录式文件,如顺序文件、索引文件、索引顺序文件、直接文件或散列文件)。
物理文件:连续文件和链接文件。
-
逻辑文件的组织形式取决于用户,物理结构的选择取决于文件设计者针对硬件结构所采取的策略(存储介质特性、操作系统的管理方式)。
-
索引文件由逻辑文件和索引表组成,对索引文件存取时,必须先查找索引表。索引项只包含每条记录的长度和在逻辑文件中的起始位置。
-
磁带是一种顺序存储设备,用它存储文件时只能采用顺序存储结构。
-
顺序文件占用连续的磁盘空间,容易导致存储碎片(外部碎片)的发生。
-
索引表中记录了每个文件所存放的盘块地址。
-
索引表的表项中含有相应记录的关键字和存放该记录的逻辑地址。
-
要读一个文件,首先要用open系统调用打开该文件。open中的参数包含文件的路径名和文件名,而read只需要使用open返回的文件描述符。
read要求用户提供三个输入参数:文件描述符、buf缓冲区首址、传送的字节数。
-
一个文件被用户进程首次打开即被执行了open操作,会把文件的FCB调入内存,而不会把文件内容读到内存,只有进程希望获取文件内容时才会读入文件内容。
-
可以用以下方法提高文件访问速度:为文件分配连续的簇、采用磁盘高速缓存、提前读、延迟写。
提前读:在读当前盘块时,将下一个可能要访问的盘块数据读入缓冲区,以便需要时直接从缓冲区读取。
延迟写:先将写数据写入缓冲区,并置上“延迟写”标志,以便不久之后访问,当缓冲区需要再次被分配出去时才将缓冲区数据写入磁盘,减少了访问磁盘的次数。
连续分配、链接分配、索引分配的优缺点
连续分配方式的优点是可以随机访问磁盘,访问速度快;缺点是要求有连续的存储空间,容易产生外部碎片,降低磁盘空间利用率,并且不利于文件的增长扩充。
链接分配方式(默认隐式链接)的优点是不要求连续的存储空间,能更有效地利用磁盘空间,并且有利于扩充文件;缺点是只适合顺序访问,不适合随机访问;另外,链接指针占用一定的空间,降低了存储效率,可靠性也差。
索引分配方式的优点是既支持顺序访问又支持随机访问,查找效率高,便于文件的删除;缺点是索引表会占用一定的存储空间。
4.2 目录
- 一级目录平均访盘次数为1/2盘块数。
- 目录的查询方式有两种:顺序检索法和Hash法,通常采用顺序检索法,得到的是文件的逻辑地址。
- 文件在磁带上通常采用连续存放方法,在硬盘上通常不采用连续存放方法,在内存上采用随机存放方法。
- 防止文件受损常采用备份的方法,而存取控制矩阵方法用于多用户之间的存取权限保护。
- 设置当前工作目录的主要目的是加快文件的检索速度。
- 硬链接指通过索引结点进行链接。一个文件在物理存储器上有一个索引结点号。存在多个文件名指向同一个索引结点的情况。各进程自己维护自己的的文件描述符。
- 多个进程可以同时读或写方式打开文件。
- 整个系统只有一张系统打开文件表,即在系统打开文件表仅有一个表项包含文件属性。
- 不同进程的打开文件表的文件描述符都是不一样的,除此之外访问权限也是不一样的。
- 进程关闭文件时,只会将文件的引用计数count减去1,当引用计数count变为0时,系统才会删除文件在系统打开文件表中的表现。
- 删除一个文件时,会根据文件控制块回收相应的磁盘空间,将文件控制块回收,并删除目录中对应的目录项。
4.3 文件系统
- UNIX操作系统采用树形目录结构,文件信息存放在索引结点中。
- 位示图方法是空闲块管理方法,用于管理磁盘空间。
- 文件的存储空间管理实质上是对外存空闲区的组织和管理。
- 文件系统管理空闲块的数据结构包括位图、链表、文件分配表。索引结点是指在许多类Unix文件系统的一种数据结构。每个索引结点保存了文件系统中的一个文件系统对象的元信息数据,但不包括数据内容或者文件名。
- 为了实现虚拟文件系统(VFS),Linux主要抽象了四种对象类型:超级块对象、索引结点对象、目录项对象和文件对象。
第五章 输入/输出(I/O)管理
5.1 I/O管理概述
- 可寻址是块设备的基本特征。
- 共享设备是指一段时间内允许多个进程同时访问的设备。
- 分配共享设备是不会引起进程死锁的。
- 虚拟设备是指把一个物理设备变换成多个对应的逻辑设备。
- 设备控制器通常需要提供控制寄存器、状态寄存器和控制命令。
- 接口用来传输信号,I/O逻辑即设备控制器,用来实现对设备的控制。
- 磁盘是典型的块设备。
- 通道是一种特殊的处理器,属于硬件技术。
- 通道又称I/O处理机,它用于实现内存与外设之间的信息传输。
- 字节多路通道用作连接大量的低速或中速I/O设备。
- 计算机系统为每台设备确定一个编号以便区分和识别设备,这个确定的编号称为设备的绝对号。
- 通道完成了通道程序的执行时,便要产生中断。
- 系统调用是操作系统提供给用户程序的通用接口,不会因为具体设备的不同而改变。而设备驱动程序负责执行操作系统发出的I/O命令,它因设备不同而不同。
- 操作系统的I/O子系统通常由四个层次组成:用户级I/O软件、设备无关软件(系统调用处理程序)、设备驱动程序、中断处理程序。
5.2 设备独立性软件
- 设备的独立性是指用户编程时使用的设备与实际使用的设备无关。
- 单缓冲计算公式:Max(C,T)+M 双缓冲计算公式:Max(T,C+M)。
- 缓冲池通常在主存中建立。
- 缓冲区是一种临界资源,所以在使用缓冲区时都有一个申请和释放(即互斥)的问题需要考虑,即实现进程访问缓冲区的同步。
- 设备的分配方式主要有独享分享、共享分享和虚拟分配。
- SPOOLing技术是一种典型的虚拟设备技术,它通过将独享设备虚拟成共享设备,使得多个进程共享一个独享设备,提高独占设备的利用率,进程不必等待I/O操作的完成。
- SPOOLing系统主要包含三部分,即输入井和输出井(磁盘空间)、输入缓冲区和输出缓冲区(内存空间)以及输入进程和输出进程。这三部分由预输入程序、井管理程序和缓输出程序管理。输入井和输出井是在磁盘上开辟的两大存储空间。输入井模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据;输出井模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。为了缓和CPU,打印结果首先送到位于磁盘固定区域的输出井。
- 在SPOOLing系统中,用户进程实际分配到的是外存区,即虚拟设备。
- SPOOLing系统中的用户程序可以随时将输出数据送到输出井中,待输出设备空闲时再由SPOOLing系统完成数据的输出操作。
- SPOOLing技术需要高速大容量且可随机存取的外存支持,需要多道程序设计技术支持,通过预输入及缓输出来减少CPU等待慢速设备的时间,将独享设备改造成共享设备。
- 独占设备采用静态分配方式,而共享设备采用动态分配方式。
- 用户程序对I/O设备的请求采用逻辑设备名,而程序实际执行时使用物理设备名,它们之间的转换是由设备无关软件层完成的。
- 可以使用文件名访问物理设备,也可以通过逻辑设备名访问物理设备。
- 应用程序按逻辑设备名访问设备,再经驱动程序的处理来控制物理设备,若更换物理设备,则只需要更换驱动程序,而无需修改应用程序。
- 用于设备分配的数据结构:系统设备表(SDT)、设备控制表(DCT)、控制器控制表(COCT)和通道控制表(CHCT)。
5.3 磁盘和固态硬盘
- 磁盘调度的目的是缩短寻道时间。
- 既可随机访问又可顺序访问的有光盘、U盘、磁盘。
- 磁盘上的文件以块为单位读/写。
- 磁盘调度中,对读/写时间影响最大的是寻找时间,寻找时间为机械运动,时间较长,影响较大。
- 硬盘的操作系统引导扇区产生在对硬盘进行高级格式化时。
- 扇区数据的处理时间主要影响传输时间。
- 旋转延迟与文件的物理结构和磁盘空闲空间的分配程序都有关,与磁盘调度算法无关。
- 固态硬盘(SSD)基于闪存技术,没有机械部件,随机读写不需要机械操作,因此速度明显高于磁盘,缺点是容易磨损。
- 传统机械硬盘因为需要寻道和找扇区的时间,所以随机存取速度慢,但由于转速很快,所以连续存取比SSD快得多。SSD的优势主要体现在随机存取的速度上。静态磨损算法在没有写入数据时,SSD监测并自动进行数据分配,因此固态硬盘静态均衡磨损算法比动态磨损均衡算法的表现更优秀。
- 绝大多数操作系统为改善磁盘访问时间,以簇为单位进行空间分配。
- 磁盘初始化:
- 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。低级格式化为磁盘的每个扇区采用特别的数据结构,包括扇区校验码,但是所占位数不确定。
- 将磁盘分区,每个分区由若干柱面组成(类似于C盘、D盘)
- 进行逻辑格式化,创建文件系统。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性