计算机操作系统笔记(一)
一、操作系统
二、进程
点此跳转
计算机操作系统笔记(二)
二、进程
点此跳转
计算机操作系统笔记(三)
二、进程
三、内存
点此跳转
四、文件
4.1、初识文件
4.1.1、文件管理
一个文件的属性
文件名:同一目录下不允许有重名文件。
标识符:一个系统内的各文件标识符唯一
类型:指明文件的类型
位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
创建时间
上次修改时间
文件所有者信息
保护信息:对文件进行保护的访问控制信息
操作系统应该向上提供哪些功能?
- 创建文件(create系统调用)
- 删除文件(delete系统调用)
- 读文件(read系统调用)
- 写文件(write系统调用)
- 打开文件(open系统调用)
- 关闭文件(close系统调用)
4.1.2、文件的逻辑结构
4.1.2.1、无结构文件
无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件
”。如:Windows操作系统中的.txt文件。
4.1.2.2、有结构文件
有结构文件:由一组相似的记录组成,又称“记录式文件
”。每条记录又若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字
(作为识别不同记录的ID)根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录
和可变长记录
两种。
顺序文件:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储
或链式存储
。
可见,顺序文件的缺点是增加/删除一个记录比较困难
(如果是串结构则相对简单)
索引文件
索引表
本身是定长记录的顺序文件
。因此可以快速找到第i个记录对应的索引项。
由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高
的场合。
索引顺序文件
一组记录对应一个索引表项。
多级索引顺序文件
为了进一步提高检索效率,可以为顺序文件建立多级索引表。
4.1.2、文件目录
目录本身就是一种有结构文件
需要对目录进行哪些操作?
搜索、创建文件、删除文件、显示目录、修改目录
单级目录实现了“按名存取”,但是不允许文件重名
。
两级目录结构。分为主文件目录
(MFD,Master File Directory)和用户文件目录
(UFD,User Flie Directory) 。允许不同用户的文件重名
多级目录结构用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。从根目录出发
的路径称为绝对路径
。
可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享
。为此,提出了“无环图目录结构
”。
4.1.3、文件的物理结构
很多操作系统中,磁盘块的大小与内存块、页面的大小相同
在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”
于是文件的逻辑地址也可以表示为(逻辑块号,块内地址
)的形式。
4.1.3.1、连续分配
连续分配
方式要求每个文件在磁盘上占有一组连续的块。
物理块号=起始块号+逻辑块号
可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访间(即随机访间)
连续分配的文件在顺序读/写时速度最快
物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片
可以用紧凑
来处理碎片,但是需要耗费很大的时间代价。
4.1.3.2、链接分配
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接
和显式链接
采用链式分配(隐式链接)
方式的文件,只支持顺序访问,不支持随机访问
采用隐式链接的链接分配方式,很方便文件拓展
。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。
采用链式分配(显式链接)
方式的文件,支持顺序访问,也支持随机访问
(想访问i号逻辑块时,并不需要依次访问之前的0~i-1号逻辑块)
一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存
4.1.3.3、索引分配
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表
,索引表中记录了文件的各个逻辑块对应的物理块
(索引表的功能类似于内存管理中的页表――建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块``。文件数据存放的磁盘块称为
数据块。 索引分配方式可以
支持随机访问。文件拓展也很容易实现,
但是索引表需要占用一定的存储空间
4.1.3.4、文件存储空间管理
空闲表法
如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间
。同样可采用首次适应、最佳适应、最坏适应等算法
来决定要为文件分配哪个区间。
回收时需要注意表项的合并问题。
空闲链表法
空闲盘块链
:以盘块为单位组成一条空闲链
空闲盘区链
:以盘区为单位组成一条空闲链
操作系统保存着链头、链尾指针。
位示图法
要能自己推出盘块号与(字号,位号)相互转换的公式。
注意题目条件:盘块号、字号、位号到底是从o开始还是从1开始
(字号,位号)=(i, j)的二进制位对应的盘块号b=ni+ j
4.1.4、文件的基本操作
- 创建文件(create系统调用)
在外存中找到文件所需的空间
创建该文件对应的目录项 - 删除文件(delete系统调用)
找到文件名对应的目录项
回收文件占用的磁盘块
删除文件对应的目录项 - 读文件(read系统调用)
根据读指针、读入数据量、内存位置将文件数据从外存读入内存 - 写文件(write系统调用)
根据写指针、写出数据量、内存位置将文件数据从内存写出外存 - 打开文件(open系统调用)
从目录中找到文件名对应的的目录项
将目录项复制到内存中的“打开文件表”中。并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件。 - 关闭文件(close系统调用)
将进程的打开文件表相应表项删除
回收分配给该文件的内存空间等资源
系统打开文件表的打开计数器count 减1,若count =0,则删除对应表项。
4.1.5、文件共享
硬链接
各个用户的目录项指向同一个索引结点
索引结点中需要有链接计数count
某用户想删除文件时,只是删除该用户的目录项,且count–
只有count == 0时才能真正删除文件数据和索引结点,否则会导致指针悬空
软连接
在一个Link型的文件中记录共享文件的存放路径(Windows快捷方式)
操作系统根据路径一层层查找目录,最终找到共享文件
即使软链接指向的共享文件已被删除,Link型文件依然存在,只是通过Link 型文件中的路径去查找共享文件会失败(找不到对应目录项)
由于用软链接的方式访问共享文件时要查询多级目录,会有多次磁盘I/O,因此用软链接访问
4.1.6、文件保护
口令
优点:保存口令的空间开销不多,验证口令的时间开销也很小。
缺点:正确的“口令”存放在系统内部,不够安全。
加密
优点:保密性强,不需要在系统中存储“密码”
缺点:编码/译码,或者说加密/解密要花费一定时间。
4.1.7、文件系统的层次结构
4.2、磁盘
4.2.1、磁盘的物理地址
可用(柱面号,盘面号,扇区号
)来定位任意一个“磁盘块”。在“文件的物理结构”小节中,我们经常提到文件数据存放在外存中的几号块,这个块号就可以转换成(柱面号,盘面号,扇区号)的地址形式。
4.2.2、磁盘调度算法
寻找时间(寻道时间)Ts:在读/写数据前,将磁头移动到指定磁道所花的时间。
①启动磁头臂是需要时间的。假设耗时为s;
②移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。则:
寻道时间Ts = s+ m*n
延迟时间Tr通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设磁盘转速为r(单位:转/秒,或转/分),
则平均所需的延迟时间Tr=(1/2)[一次半圈]*(1/r)= 1/2r
传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间,
假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。
则:传输时间Tt=(1/r)*(b/N)= b/(rN)
4.2.2.1、先来先服务算法(FCFS)
根据进程请求访问磁盘的先后顺序进行调度。
优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
4.2.2.2、最短寻找时间优先(SSTF)
SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)
优点:性能较好,平均寻道时间短
缺点:可能产生“饥饿”现象
4.2.2.3、扫描算法(SCAN)
SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。
优点:性能较好,平均寻道时间较短,不会产生饥饿现象
缺点:只有到达最边上的磁道时才能改变磁头移动方向
4.2.2.4、LOOK 调度算法
扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫 LOOK)
优点:比起SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
4.2.3、磁盘的物理地址减少延迟时间的方法
减少延迟时间的方法:交替编号
若采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。
减少延迟时间的方法:错位命名
:若相邻的盘面相对位置相同处扇区编号相同
五、I/O
5.1、I/O控制器的功能
- 接受和识别CPU发出的命令
如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器
来存放命令和参数 - 向CPU报告设备的状态
I/O控制器中会有相应的状态寄存器
,用于记录I/O设备的当前状态。如:1表示空闲,0表示忙碌 - 数据交换
I/O控制器中会设置相应的数据寄存器
。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据。 - 地址识别
类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。1/o控制器通过cPU提供的“地址”来判断CPU要读/写的是哪个寄存器
5.2、I/O控制器的组成
- CPU与控制器的接口
用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据 - I/O逻辑
负责接收和识别CPU的各种命令(如地址译码),并负责对设备发出命令 - 控制器与设备的接口
用于实现控制器与设备之间的通信
5.3、I/O控制方式
5.3.1、程序直接控制方式
Key word:轮询
1.完成一次读/写操作的流程(以读操作为例)
5.3.2、中断驱动方式
引入中断机制
。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待l/O的进程阻塞
,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后
,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/o控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
。
5.4、I/O软件层次结构
用户层软件:用户层软件实现了与用户交互的接口
,用户可直接使用该层提供的、与l/o操作相关的库函数对设备进行操作
设备独立性软件:设备独立性软件
,又称设备无关性软件
。与设备的硬件特性无关的功能几乎都在这一层实现。
设备驱动程序:主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等
中断处理程序:进行中断处理
硬件:不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。
5.5、缓冲区
缓冲区的作用
- 缓和CPU与I/O设备之间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- 解决数据粒度不匹配的问题
- 提高CPU与I/O设备之间的并行性
5.5.1、单缓冲
假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲
的策略,操作系统会在主存中为其分配一个缓冲区
(若题目中没有特别说明,一个缓冲区的大小就是一个块)。
注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
5.5.2、双缓冲
假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲
的策略,操作系统会在主存中为其分配两个缓冲区
(若题目中没有特别说明,一个缓冲区的大小就是一个块