操作系统学习(八)-- 操作系统之磁盘(调度)与文件(实现)
操作系统之磁盘与文件
L28 生磁盘的使用
-
raw disks
-
使用磁盘从认知磁盘开始
-
读写磁盘的基本单位是扇区
-
移动磁头(到相应的磁道)--旋转磁盘(到相应的扇区)--和内存进行读写
-
清楚柱面,磁头,扇区,缓存位置的含义--直接使用磁盘
-
很多盘面形成柱头,移动磁臂到相应的柱面,磁头决定了哪个盘面
-
上面给出的信息太多,很麻烦,下面经过几层抽象
-
通过盘块号读写磁盘(一层抽象)
-
将三维信息编址到一维信息
-
移动磁臂时间称为寻道时间,减少寻道时间,这样相邻block(盘块号),应该尽量放在同一磁道上
-
现在利用盘块号来访问磁盘,一个盘块号可能有几个扇区,这样用空间换磁盘的读写时间
-
三维信息编址到一维信息,线性关系
-
由block反推CHS:
-
多个进程通过队列使用磁盘(第二层抽象)
-
cyl柱面,head磁头,sec扇区
-
利用文件使用磁盘叫熟磁盘;利用盘块号使用磁盘叫生磁盘!
磁盘调度算法
-
FCFS磁盘调度算法
-
SSTF磁盘调度
-
shortest seek time first
-
一般请求在磁头中间部分的很多,这样磁臂都集中在中间移动,两边的磁盘请求存在饥饿
-
SCAN磁盘调用(电梯算法)
-
C-SCAN磁盘调度(电梯算法)
-
生磁盘的使用整理
L29 从生磁盘到文件
Files-cooked Disks
- 如何从文件得到盘块号?
- 引入文件,对磁盘使用的第三层抽象!
- 字符流和盘块集合之间的映射关系
- 连续结构来实现文件,不适合动态增长,适合读写操作(数组操作)
- 文件控制块FCB,每个块的大小是固定的
- 链式结构也可以实现文件
- 磁盘有很多盘块号,文件怎么存储在这些盘块号中呢?盘块号的大小是固定的
- 关键是映射表怎么建立?
- 文件实现的第三种结构,索引结构
- 索引块来记录文件使用的盘块号
- 实际系统是多级索引!
- 学习数据结构的时候有学到用
B+-
树进行文件索引!
L30 文件使用磁盘的实现
-
file implementation
代码实现 -
inode
内容为映射表,有索引块
-
磁盘文件inode则记录映射表;设备文件inode,记录与设备相关的信息
-
文件视图
-
文件名-->inode-->盘块号----
C/C++基本语法学习
STL
C++ primer