操作系统----知识点整理

目录

1.操作系统引导

2.硬盘逻辑格式化的过程

 3.运行,就绪,阻塞

4.进程的创建过程

5.进程的组成

6.进程和程序

7.进程与线程

8.用户级线程和内核级线程

9.线程模型

10.进程之间通信的方式

11.管道

12.调度算法

13.文件的打开

14.读文件

15.文件的关闭

16.连续分配,链接分配,索引分配

17.计数器

18.位示图

19.I/O软件层次结构

20.I/O方式中,会导致进程堵塞的是

21.磁盘的物理格式化和逻辑格式化


对于1,2点,建议看:查缺补漏----操作系统引导-CSDN博客

会非常清晰!

1.操作系统引导

① 激活的CPU读取ROM中的boot程序,将指令寄存器置为BIOS(基本输入/输出系统)的第一条指令,即开始执行BIOS指令。

② BIOS程序在内存最开始的空间构建中断向量表,因为接下来的POST(通电自检,Power Self Test)过程要用到中断功能(CPU检测到中断信号后,根据中断号查询中断向量表,以跳转到相应的中断处理程序)。

③ 接下来进行通电自检,检测硬件是否有故障。

④ 完成POST后,BIOS将控制权交给排在首位的启动设备,接着,CPU将该设备主引导扇区的内容(主引导记录MBR)加载到内存中。MBR的作用是告诉CPU去硬盘的哪个主分区找操作系统。

⑤ MBR检查分区表,找含有操作系统的主分区(活动分区),并将活动分区的引导扇区的内容(分区引导记录PBR)加载到内存加以执行。活动分区的引导扇区就是活动分区的第一个扇区。PBR的作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。

主引导记录(MBR)--->含有操作系统的分区(活动分区)--->活动分区的第一个扇区(分区引导记录,PBR)

⑥ 将操作系统的初始化程序加载到内存(RAM,具体来说是DRAM)中执行。

补充:

在磁盘和固态硬盘一章中:

计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操作系统。为此,自举程序找到磁盘上的操作系统内核,将它加载到内存并转到起始地址,从而开始操作系统的运行。

自举程序通常存放在 ROM 中,为了避免改变自举代码而需要改变 ROM 硬件的问题,通常只在 ROM 中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动块(启动分区)的磁盘称为启动磁盘或系统磁盘(例如:C盘)

开机时计算机先运行ROM中的"自举装入程序”通过执行该程序就可找到引导块,并将完整的“自举程序”读入内存,然后开始执行,它可以从非固定的磁盘位置加载整个操作系统,并且开始运行操作系统

以windows系统为例:

Windows 系统将引导代码存储在磁盘的第0号扇区,它称为主引导记录(MBR)。首先运行ROM 中的代码,这个代码指示系统从MBR中读取引导代码。除了包含引导代码,MBR还包含一个磁盘分区表和一个标志(以指示从哪个分区引导操作系统)。当系统找到引导分区(主分区)时,读取分区的第一个扇区,称为引导扇区,并继续余下的引导过程,包括加载各种系统服务。

2.硬盘逻辑格式化的过程

对硬盘进行分区,即创建硬盘分区表

注:上面并不属于硬盘逻辑格式化的过程。

① 对物理分区进行逻辑逻辑格式化(创建文件系统),为每个分区初始化一个特定的文件系统,并创建文件系统的根目录

② 如果采用的是UNIX文件系统,则还要在该分区中建立文件系统的索引节点表

例题:

下列选项中,需要在操作系统进行初始化过程中创建的是()

A 中断向量表        B.文件系统的根目录        C.硬盘分区表        D.文件系统的索引节点表

答案:A

 3.运行,就绪,阻塞

•运行状态可以到就绪态,阻塞状态可以到就绪态:

运行--->就绪:时间片到或出现比现在进程优先级更高的进程。

阻塞--->就绪:所需资源到达。从阻塞到就绪也称为"唤醒"。例如:一次I/O操作结束可使进程从阻塞到就绪态。

•就绪--->运行:当进程完成创建后,会进入就绪队列,即进程所需资源分配完成,只等处理器。进程申请处理器并得到满足,由就绪-->运行。如果申请处理器并且没有得到满足,则进程处于就绪态。

•运行--->阻塞:处于阻塞态的进程由于某个事件不满足而等待。这样的事件一般是I/O操作。如键盘等,或是因互斥或同步数据引起的等待,如等待信号或等待进入互斥临界区代码段等。举个例子:当① 启动I/O设备,例如进程检测到缺页,需要从外存调入缺失页面;② 进程P申请临界资源,例如申请外设,且外设是独占设备且正在被其他设备使用;③ 申请内存失败;④ 执行P(wait)操作,且信号量的值小于或等于0;进程都会从运行态转变为阻塞态。等待其他进程用signal()操作唤醒进程,则进程从阻塞态转变为就绪态。

只有从运行态到阻塞态的转换是由进程自身决定的。从运行态到就绪态的转换是由于进程的时间片用完,“主动”调用程序转向就绪态。虽然从就绪态到运行态的转换同样是由调度程序决定的,但进程是“被动的”。从阻塞态到就绪态的转换是由协作进程决定的。

:分时系统中处于就绪态的进程最多,这些进程都在争夺CPU的使用权,而CPU的数量是有限的。处于运行态的进程只能有一个或少数几个。处于阻塞态的进程也不会太多,阻塞事件的发生频率不会太高。处于终止态的进程也不多,这些进程已释放资源,不再占用内存空间。

以上是拿进程举例,线程也和进程一样存在共享资源和相互合作的制约关系,线程也会有:

执行,就绪,堵塞三种状态。

4.进程的创建过程

通过进程创建原语向系统申请一个空闲PCB,为被创建进程分配必要的资源,将其PCB初始化,并将此PCB插入就绪队列,最后返回一个进程标志号。当调度程序为进程分配CPU后,进程开始运行。

5.进程的组成

进程实体:代码,数据和PCB。

PCB包含:

进程标志信息:
进程标志是操作系统中用于唯一标识一个正在运行的进程的数字标识符。每个进程都有一个唯一的进程标识符(PID)。PID 是一个非负整数,由操作系统分配。
进程控制信息:
进程控制涉及到操作系统如何管理和控制进程的执行。这包括创建新进程、终止进程、挂起进程、恢复进程、进程调度、进程间通信等操作。进程控制的实现可以通过系统调用和操作系统内核来完成。


进程资源信息:
进程资源指的是进程在执行过程中所需的和已分配的资源。这些资源包括但不限于内存空间、打开的文件、网络连接、CPU 时间片等。操作系统负责管理和分配这些资源,以确保各个进程能够正常运行而不会相互干扰。


CPU现场信息:
CPU 现场信息指的是操作系统中保存在进程控制块(PCB)中的关于进程当前执行状态的信息。这些信息包括进程的程序计数器(PC)、寄存器状态、栈指针、程序状态字等。当操作系统进行进程切换时,会保存当前进程的 CPU 现场信息,并加载下一个进程的 CPU 现场信息,以实现进程的暂停和恢复。

6.进程和程序

关于进程的定义:

① 进程是一个正在执行的程序的实例。

② 进程是一个程序及其数据从磁盘加载到内存后,在CPU上的执行过程。

③ 进程是一个具有独立功能的程序在一个数据集合上运行的过程。

程序是静态的,它以文件的形式存放在计算机硬盘内,而进程是动态的,包含程序在执行过程中使用的全部资源(不仅包含代码,还有程序的数据和状态)。如果没有这些资源,程序就无法执行,可以说进程是程序执行的载体。

在运行一个程序时,操作系统首先要创建一个进程,为进程分配内存等资源,然后加入进程队列中执行。

p50 第9题

•一个进程在其生命周期中可执行多个程序:

对单个进程的某个时刻而言,一个进程只能执行一个程序,但对整个系统中的进程集合及进程的生命周期而言,进程与程序之间可以形成一对一,多对一,一对多,多对多的关系。

一对一:一个进程执行一条指令或运行一个应用程序。

一对多:一个进程可以顺序执行多个程序,只要在其执行过程中改变其CPU状态和内存空间即可(但不能同时执行多个程序)。

多对一:多个进程以不同的参数或数据多次执行同一个程序。

多对多:多个进程并发执行不同的应用程序。

•一个进程多次运行可以形成不同的程序:

一个程序经过多次创建,运行在不同的数据集上,会形成不同的进程,它们之间没有必然联系。例如,同一个文本编辑器可以被多个用户或多个窗口同时运行、每次运行都形成一个新进程。

•一个程序的一次执行可产生多个进程:

程序内部通过操作系统提供的机制(如fork系统调用)来创建子进程。这些子进程可以在父进程的基础上执行不同的任务或者并行处理多个任务。从而进一步实现并发处理或分布式计算。

7.进程与线程

•进程是资源分配的单位

•内核级线程是处理器调度和分派的单位


8.用户级线程和内核级线程

① 用户级线程对操作系统是透明的,CPU调度的对象仍然是进程。所以用户级线程的调度仍以进程为单位,各个进程轮流执行一个时间片,假设进程A包含1个用户级线程,而进程B包含100个用户级线程,此时进程A中单个线程的运行时间将是进程B中各个线程平均运行时间的100倍。

用户级线程的调度单位是进程,不跨进程的线程的创建和调度都是在用户态下实现的,而跨进程的线程调度需要内核支持。(这里要和线程的切换区别,线程切换是不需要转换到内核空间的。线程切换只涉及到用户栈和寄存器等上下文的保存和恢复,不涉及内核栈和页表等内核上下文的切换)。

•用户级线程是由用户程序或函数库实现的,不依赖于操作系统的支持。所以用户级线程可以在任何操作系统中运行。

•用户级线程不能利用多处理器的并行性,因为操作只能看到进程(操作系统感受不到用户级线程的存在)。用户级进程内核每次分配给一个进程的仅有一个CPU,所以进程仅有一个线程能执行。

用户级线程无法直接利用系统调用获得操作系统内核的服务,它需要通过线程库来完成这一过程,并且在系统调用执行期间会发生从用户态到核心态的切换,以便操作系统内核可以处理相应的请求。

由于同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起,可以节约更多的系统资源。

② 而内核级线程的调度是以线程为单位的,各个线程轮流执行一个时间片,同样假设进程A包含1个内核级线程,而进程B含100个内核级线程,此时进程B的运行时间将是进程A的100倍。

•内核支持线程具有很小的数据结构和堆栈,线程切换比较快,开销小。
但是相对于用户级线程而言,用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助进行调度,因此用户级线程的切换效率更高

•内核级线程以线程为单位进行,所以内核可以同时调度同一进程的多个线程在多CPU上并行运行。用户级线程中内核每次分配给一个进程的仅有一个CPU,所以进程仅有一个线程能执行。

所以系统调用,I/O请求和异常处理这些涉及内核态的事件都不会导致用户级线程切换,但会导致内核级线程切换。

会导致线程切换的可以是线程同步。线程同步是指多个线程之间协调执行顺序的机制,如互斥锁、信号量、条件变量等。当一个线程在等待同步条件时,应用程序可以选择切换到另一个就绪的用户级线程,以提高 CPU的利用率。

•如果进程中一个线程被阻塞,内核可以调度该进程中的其他线程占用CPU,也可以运行其他进程中的线程。

•内核级线程可以在内核态执行系统调用子程序,直接利用系统调用为它服务。

•操作系统并不知道用户级线程的存在,用户级线程的控制块一般存放在用户空间的数据结构中,如链表或数组,由用户空间的线程库来管理。

操作系统只负责为每个进程建立一个进程控制块,操作系统只能看到进程,而看不到用户级线程,所以不会为每个用户级线程建立一个线程控制块。但是,内核级线程的线程控制块是由操作系统创建的,当一个进程创建一个内核级线程时,操作系统会为该线程分配一个线程控制块,并将其加入内核的线程管理数据结构

9.线程模型

•在多对一的线程模型中,由于只有一个内核级线程,用户级线程的“多”对操作系统透明(不可见),因此操作系统内核只能感知到一个调度单位(一个进程)的存在,意识不到线程的存在,正因为如此:

① 进程的一个线程被阻塞后,该进程就被阻塞,进程的其他线程当然也都被阻塞。

② 线程的切换并不会导致整个进程的切换。只要被调度的用户级线程对应的内核级线程还属于同一个进程,就不会发生进程级别的切换。

•在一对一模型中将每个用户级线程都映射到一个内核级线程,所以当某个线程被阻塞时,不会导致整个进程被阻塞。

•在多对多的线程模型中,将n个用户级线程映射到m个内核级线程上(n>=m)。

10.进程之间通信的方式

•消息传递:进程间的数据交换以格式化的消息为单位。通过操作系统提供的发送消息和接收消息两个原语进行数据交换。消息传递需要在内核和用户空间中进行数据的拷贝,需要对消息进行格式化和排队。

消息传递在"微内核"部分也出现了,微内核操作系统客户和服务器,服务器和服务器之间通信采用消息传递机制,所以微内核系统能够支持分布式系统和网络系统。

消息传递的实现方式有多种,其中一种就是Socket:

Socket(套接字):

Socket通常用于不同机器之间的进程通信,需要经过传输层以下的协议栈,而且可能涉及数据的加密和压缩。

•共享存储区:在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程之间的信息交换。共享存储不需要任何数据拷贝和中介,是最快的进程通信方式。

文件映射是共享存储区的一种实现方式,它允许多个进程共享同一个文件或者内存区域的内容。

•管道:管道通信允许两个进程按生产者-消费者方式进行通信,只要管道不满,写进程就能向管道的一端写入数据:只要管道非空,读进程就能从管道的一端读出数据。管道需要在内核和用户空间中进行数据的拷贝,而且普通的管道都是单向通信的。若想实现两个进程双向通信,则需要设置两个管道。

•共享文件:共享文件是通过文件系统提供的方式,允许多个进程同时访问同一个文件的数据。进程可以通过打开文件来读取或写入其中的数据。

管道和共享文件的区别:

共享文件存在于文件系统中,可以持久存储和重复使用;而管道存在于内存中,只能用于一次性的或者短期的数据传输。
② 数据流方向: 管道是单向的数据流,而文件可以支持随机访问和双向数据交换

11.管道

管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统。

① 类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。要实现双向数据传输,就需要定义两个方向相反的管道。

② 管道是一种只存储在内存中的、固定大小的缓冲区,管道的大小通常为内存的一页,其大小并不是受磁盘容量大小的限制。

③ 由于管道的读/写操作都可能遇到缓冲区满或空的情况,当管道满时,写操作会被阻塞,直到有数据读出;而当管道空时,读操作会被阻塞,直到有数据写入。

④ 一个管道可以有多个读进程或多个写进程对其进行操作,但是这会增加数据竞争和混乱的风险,为了避免这种情况,应使用互斥锁或信号量等同步机制来保证每次只有一个进程对管道进行读或写操作。所以,"一个管道只能有一个读进程或一个写进程对其操作"是错误的。

⑤ 管道只能由创建进程所访问,当父进程创建一个管道后,由于管道是一种特殊文件,子进程会集成父进程的打开文件,因此子进程也继承父进程的管道,并可用它来与父进程进行通信。

12.调度算法

例题1:某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1us。在T时刻就绪队列中有3个进程P1、P2和P3,其在就绪队列中的等待时间、需要的 CPU 时间和优先权如下表所示。

若优先权值大的进程优先获得CPU,从T时刻起系统开始进程调度,则系统的平均周转时间为()

由优先级大的进程先获得CPU可知进程的执行顺序为P2-->P3-->P1。

画图更好理解,题目中讲在T时刻有3个进程,且其等待时间分别为15,18,30,就像图中所画:

再根据非抢占式的进程调度,可得到:

P2的周转时间为1+15+24=40us;

P3的周转时间为18+1+24+1+36=80us;

P1的周转时间为30+1+24+1+36+1+12=105us;

平均周转时间为(40+80+105)/3=225/3=75us。

例题2:进程P0、P1、P2和P3 进入就绪队列的时刻、优先级(值越小优先权越高)及 CPU执行时间如下表所示。

若系统采用基于优先权的抢占式进程调度算法,则从0ms时刻开始调度,到4个进程都运行结束为止,① 发生进程调度的总次数为():

解析:由于采用抢占式的进程调度所以进程调度的顺序为:

① 0ms时刻,只有P0进入就绪队列,先执行P0,10ms后,P1,P2进入就绪队列,且其优先级P2>P0(值越小优先权越高),P2抢占CPU的使用权:

② P2执行5ms后,优先权更高的P3进入就绪队列,所以P2让出CPU使用权。之后没有比P3优先权更高的进程,所以P3一直执行到执行时间结束(进程结束)。

③ P3执行完成,剩余的未完成的进程中优先级最高的为P2,P2继续执行,直到进程结束:

④ 接下来执行的进程为P0,因为优先级:P0>P1:

④ 最后执行优先权最低的P1:

进程调度次数为6次。

② P0,P1,P2,P3的平均周转时间为():

每个进程的周转时间为:“CPU剩余执行时间”为0的行的"结束时间"减去题目表格中的“开始时间”,即:

P0周转时间:130 - 0 =130

P1周转时间:190 - 10 = 180

P2周转时间:40 - 10 =  30

P3周转时间:25 - 15 = 10

平均周转时间:130+180+30+10/4=350/4=87.5

13.死锁和饥饿

死锁:一组进程处于死锁状态是指组内的每个进程都在等待一个事件,而该事件只可能由组内的另个进程产生。

饥饿:当系统中有多个进程同时申请某类资源时,由分配策略确定资源分配给进程的次序,有的分配策略可能是不公平的,即不能保证等待时间上界的存在,在这种情况下,即使系统未发生死锁,某些进程也可能长时间等待。当等待时间给进程的推进带来明显影响时,称发生了饥饿

例如,当有多个进程需要打印文件时,若系统分配打印机的策略是最短文件优先,则长文件的打印任务将的源源不断到来而被无限期推迟,最终导致饥饿,甚至“饿死”。

饥饿并不表示系统一定死锁,但至少有一个进程的执行被无限期推迟。

饥饿与死锁的差别:

① 发生饥饿的进程可以只有一个;而死锁是因循环等待对方手里的资源而导致的,因此,如果有死锁现象,那么发生死锁的进程必然大于或等于两个。

发生饥饿的进程可能处于就绪态(长期得不到 CPU,如 SJF 算法的问题),也可能处于阻塞态(如长期得不到所需的 I/O 设备);而发生死锁的进程必定处于阻塞态

13.文件的打开

① 当用户首次对某文件发出操作请求时,须先利用系统调用open将该文件打开。系统维护一个包含所有打开文件信息的表,称为打开文件表

② 系统检索到指定文件的目录项后,将该目录项从外存复制到内存中的打开文件表的一个表目中,并将该表目的索引号(也称文件描述符)返回给用户。

③ 当用户再次对该文件发出操作请求时只需要通过文件描述符在打开文件表中查找到文件信息,从而节省了大量的检索开销。

所以文件名不必是打开文件表的一部分,一旦完成FCB在磁盘上的定位,系统就不再使用文件名,所有文件操作都是通过文件描述符实现的。

④ 当文件不再用时,可利用系统调用close关闭它,则系统将会从打开文件表中删除这一表目。

注:

 用户进程的打开文件表关于同一个文件不一定相同,例如当前读写位置指针、访问权限不一定相同。

• 在检索目录的过程中,只用到了文件名,仅当找到一个目录项(其中的文件名与要査找的文件名匹配)时,才需从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息不会用到,也不需要调入内存。因此,有的系统(如UNIX)便采用了文件名和文件描述信息分离的方法,使文件描述信息单独形成一个称为索引节点的数据结构,简称 i 节点(inode)。在文件目录中的每个目录项仅由文件名和相应的索引节点号(或索引节点指针)构成。

当文件被打开时,要将磁盘索引节点复制到内存的索引节点(包含索引节点号)中,以便后续使用,关闭文件只会释放文件的内存索引节点,不会改变磁盘索引节点的数据结构。

14.读文件

一个文件被用户进程首次打开即被执行了open操作,会把文件的FCB(目录项)调入内存,而不会把文件内容读到内存中,只有进程希望获取文件内容时才会读入文件内容(read):

① 用户按文件描述符在打开文件表中找到该文件的目录项后,会按存取控制说明检查访问的合法性。

② 根据目录项中该文件的逻辑和物理组织形式,将逻辑记录号转换成物理块号

③ 接着向设备驱动程序发出 I/O请求,完成数据交换工作。

注:

open 中的参数包含文件的路径名与文件名,而read 只需使用 open 返回的文件描述符,并不使用文件名作为参数。read 要求用户提供三个输入参数:

①文件描述符 fd;②buf 缓冲区首址;③传送的字节数n。read 的功能是从fd所指示的文件中读入n个字节的数据,并将它们送至由指针 buf所指示的缓冲区中。

15.文件的关闭

在多个进程可以同时打开文件的操作系统中,通常采用两级表:整个系统表和每个进程表。

整个系统的打开文件表包含与进程无关的信息,如文件在磁盘上的位置、访问日期和文件大小。

每个进程的打开文件表保存的是进程对文件的使用信息,如文件的当前读写指针、文件访问权限并包含指向系统表中适当条目的指针。

一旦有进程打开了一个文件,系统表就包含该文件的条目。当另一个进程执行调用 open 时,只不过是在其打开文件表中增加一个条目,并指向系统表的相应条目。

系统打开文件表为每个文件关联一个打开计数器(Open Count),以记录多少进程打开了该文件(系统只有一个打开文件表,同一文件打开多次只需改变引用计数)。当文件不再使用时,利用系统调用close关闭它,会删除单个进程的打开文件表中的相应条目,系统表中的相应打开计数器也会递减。当打开计数器为0时,表示该文件不再被用,并且可从系统表中删除相应条目。

注:关闭文件是指将文件当前的控制信息(FCB)从内存写回磁盘,并不意味着将文件数据写回磁盘,写文件操作才会写回磁盘。

例题:若多个进程共享同一个文件F,则下列叙述中,正确的是()

A.各进程只能用“读”方式打开文件F

B.在系统打开文件表中仅有一个表项包含F的属性

C.各进程的用户打开文件表中关于F的表项内容相同

D.进程关闭F时,系统删除F在系统打开文件表中的表项

答案:B

关于D,某个进程关闭文件F,只是计数器会减1而已,计数器变为0才删除系统打开文件表中的表项。

16.连续分配,链接分配,索引分配

① 若要在文件中增加一块(插入):

连续分配:要将后面的所有盘块都向后移动一块,I/O次数最对。

链接分配:需要修改对应磁盘块的指针,所以需要将文件读入内存,需要磁盘I/O,但是很少。

例如,需要在45个盘块后插入数据:

采用连续分配时,至少需进行 45 次读磁盘和 45 次写磁盘,将前 45 个盘块依次向前移动,之后还要进行1次写磁盘,将数据写入对应空出的盘块。

采用链接分配时,需进行 45 次读磁盘然后修改第 45 个磁盘块中的链接指针,并写新磁盘块,共进行2次写磁盘,开销比顺序文件小。

索引分配:若题目中说明所有磁盘块都已调入内存,那么采用一级索引或多级索引分配时,只需修改内存中的索引表,不需磁盘I/O,开销很小。

②随机存取:

连续分配和索引分配都支持随机访问,链式分配默认为隐式链接,不支持随机访问,需要依靠指针依次访问。

③ 支持可变长:

连续分配:需要事先直到文件长度,无法满足文件可变长的要求,若文件增长,可能会覆盖物理上相邻的后续文件。若文件变短,则需要大量移动数据,代价较大。

链接分配,索引分配:支持可变长。

17.计数器

•文件关闭过程:打开计数器

系统的打开文件表(一个系统只有一个)会为每个文件关联一个打开计数器,用于记录多少进程打开了该文件,当文件不再使用时,利用系统调用“close”关闭它,会删除单个进程的打开文件表的相应条目,并且打开计数器减1,当打开计数器为0时,表示该文件不再被使用,从系统的打开文件表中删除该条目。

•无环图目录结构:共享计数器

当增加对该节点的共享链,计数器加1,当用户删除该节点时,计数器减1,只有共享计数器为0时,才真正删除该节点,否则仅删除请求用户的共享链。

•基于索引节点的共享方式(硬链接)

在索引节点中有一个链接计数count,也称引用计数,表示链接到本索引节点(即文件)上的用户目录项的数目。当count=2时,表示有两个用户目录项链接到本文件上,即有两个用户共享此文件。

用户A创建一个新文件时,他便是该文件的所有者,此时将count置为1。用户B要共享此文件时,在B的目录中增加一个目录项,并设置一个指针指向该文件的索引节点。此时,文件主仍然是用户A,count=2。如果用户A不再需要此文件,能否直接将其删除呢?答案是否之,因为若删除了该文件,也必然删除了该文件的索引节点,这样便会使用户B的指针悬空,而B可能正在此文件上执行写操作,此时将因此半途而废。

因此用户A不能删除此文件只是将该文件的 count减1,然后删除自己目录中的相应目录项。用户B仍可以使用该文件。当count=0时,表示没有用户使用该文件,才会删除该文件。

18.位示图

1.若用8个字(字长 32 位)组成的位示图管理内存,行号和列号均从1开始,假定用户归还一个块号为100的内存块时,则它对应位示图的位置为()

A.字号为 3,位号为 5        B.字号为 4,位号为 4

C.字号为 3,位号为 4        D.字号为 4,位号为 5

行号,列号从1开始:

行号(字号)=(100-1) DIV 32+1=4

列号(位号)=(100-1) MOD 32+1=4

答案:B

若行号,列号从0开始:

行号(字号)=100 DIV 32 =3

列号(位号)=100 MOD 32=4

忘记了可以看:http://t.csdnimg.cn/G7TBM

2.现有一个容量为 10GB 的磁盘分区,磁盘空间以簇为单位进行分配,簇的大小为 4KB,若采用位图法管理该分区的空闲空间,即用一位来标识一个簇是否被分配,则存放该位图所需的簇数为()

A.80        B.320        C.80K        D.320K

① 簇的总数:10GB/4KB=2.5MB

② 用一位标识一簇是否被分配:2.5M/8=320KB

③ 存放该位图所需的簇数:1簇4KB,所以320KB/4KB=80簇

3.文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的 32~127号块中,每个盘块占1024B,盘块和块内字节均从0开始编号,假设要释放的盘块号为409612,则位图中要修改的位所在的盘块号和块内字节序号分别是()

A. 81,1        B.81,2        C.82,1        D.82,2

① 位示图的每个盘块可以存放的位数:1024*8

② 每一位可以标识一个盘块的空间分配情况(1表示已经分配,0表示未分配),所以一个盘块可以表示1024*8个盘块的状态,要释放的盘块号为409612,其盘块分配情况在位图的相对位置:409612 / 1024*8=50。

③ 又因为位图存于磁盘的32~127号块,所以要修改的位所在的盘块为:50+32=82

④ 409612 1024*8=12,所以其存放在82号块内的第二个字节,块内字节从0开始编号,所以块内字节序号为1

答案:C

19.I/O软件层次结构

对应操作系统王道书p310

用户层软件:用户直接调用在用户层提供的,于I/O操作有关的库函数,对设备进行操作。

设备独立性软件:向用户层提供统一的接口,并将系统调用参数翻译成设备操作命令,根据设备类型选择调用相应的驱动程序。

设备驱动程序: 与硬件直接相关,每类设备配置一个设备驱动程序。负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。

设备驱动程序负责将上层软件发来的抽象 I/O 要求转换为具体要求,发送给设备控制器控制设备工作。设备驱动程序需要向设备寄存器写入命令,以控制设备的工作状态和数据传输方式。

补充:在文件系统一章也有提及p292:

文件系统结构的I/O控制层包括设备驱动程序和中断处理程序,在内存和磁盘系统之间传输信息。设备驱动程序将输入的命令翻译成底层硬件的特定指令,硬件控制器(I/O接口)利用这些指令使I/O设备与系统交互。设备驱动程序告诉 I/O 控制器对设备的什么位置采取什么动作。

中断处理程序:用于保存被中断进程的 CPU 环境,转入相应的中断处理程序进行处理,处理完毕后再恢复被中断进程的现场后,返回到被中断进程。

20.I/O方式中,会导致进程堵塞的是

程序直接控制方式:进程会处于等待状态,进程不会阻塞。驱动程序完成用户进程的I/O请求才结束,CPU与I/O操作串行。

中断控制方式:驱动程序启动I/O操作后,将调出其他进程执行,而当前用户进程被阻塞,CPU和设备准备并行。

DMA方式:驱动程序对DMA控制器初始化后,便发送“启动DMA传送”命令,外设开始传送数据,同时CPU执行处理器调度程序,当前用户进程被阻塞。

程序直接控制方式中,进程不会被阻塞;中断控制方式和DMA方式中,进程会被阻塞。

21.磁盘的物理格式化和逻辑格式化

物理格式化(低级格式化):

作用:低级格式化是指在磁盘上建立物理轨道和扇区的过程,同时标记坏道(如果有)。低级格式化为每个扇区使用特别的数据结构,这是因为建立物理轨道和扇区需要特定的数据结构来确保磁盘能够正确地被读取和写入。
低级格式化由硬件或者专用工具完成,通常在磁盘出厂时进行,用户一般无需手动进行低级格式化。这个过程是基础的、物理层面的操作,通常不受操作系统或文件系统的影响。

为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上。这分为两步。

分区:将磁盘分为由一个或多个柱面组成的分区,每个分区可以作为一个独立的磁盘。

逻辑格式化(高级格式化):

在分区之后,第二步是逻辑格式化(创建文件系统)。在这一步,操作系统将初始的文件系统数据结构存储到磁盘上。这些数据结构包括空闲和已分配的空间及一个初始为空的目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值