![](https://i-blog.csdnimg.cn/blog_migrate/9f15d3dc6391493273e544366923e3d1.png)
操作系统要给用户提供一个简单视图--文件视图,方便使用
I/O与显示器
开始设备驱动的学习
![](https://i-blog.csdnimg.cn/blog_migrate/6b1c3e90006adcc1b85cf3fd4b9ccaa7.png)
听不进去了,明天继续^^
![](https://i-blog.csdnimg.cn/blog_migrate/5f2a01cd2257a5eb28b60a9a0281c2e4.png)
这一段听的糊涂,感觉知识没有进脑子
键盘
生磁盘的使用
认识磁盘
![](https://i-blog.csdnimg.cn/blog_migrate/7c9be24199665c7ec7ae5a3218c9e53c.png)
移动磁头到相应的磁道上,旋转磁盘到相应的扇区上,进行读写(数据传输)
最直接使用磁盘
层层抽象,最终实现文件系统
![](https://i-blog.csdnimg.cn/blog_migrate/81b04e6c5ca3eb0781294215e0a9b8d8.png)
一层抽象--通过盘块号读写
![](https://i-blog.csdnimg.cn/blog_migrate/ce883e83f9f24e678d4261fd0564e03e.png)
磁盘访问时间主要局限于寻道时间,所以为了提高读写速率,会将相邻的数据写入相邻的扇区
磁盘读写的时候会旋转,正好从0号扇区转到1号扇区读写1号扇区
![](https://i-blog.csdnimg.cn/blog_migrate/79594e91314edcdf11667f4c92895dbd.png)
第二层抽象--多进程通过队列使用磁盘
![](https://i-blog.csdnimg.cn/blog_migrate/0c37e8d256b076034c31fe42e3c839b8.png)
调度目标:平均访问延迟小(寻道时间是主要矛盾)
研究调度算法:
FCFS算法
直接根据列表一个一个来,效率很低
SSTF算法
短寻道优先,去找离我近的,顺便执行掉
![](https://i-blog.csdnimg.cn/blog_migrate/78c980ab9edf60d307a36d7fbb72c5e8.png)
磁盘请求是不断生成的吗,而且中间的请求比较多,所以这种方式磁头总是在中间移动,边缘的请求就会被忽略,造成饥饿问题
SCAN算法 电梯算法
SSTF+中途不回折,每个请求都有处理机会。不回来会转来转去
C-SCAN算法
SCAN +直接移动到另一端,两端请求都能很快处理,中间的请求就不会占便宜
生磁盘的使用管理
![](https://i-blog.csdnimg.cn/blog_migrate/fbcc8ec10b9c07ee224ee026eac59eef.png)
丛生磁盘到文件
第三层抽象--引入文件
连续结构实现文件
让普通用户使用生磁盘不方便,不了解扇区什么的,所以在盘块上引入更高一层的抽象概念--文件
用户眼里的文件是什么样子?
文件:建立字符流到盘块集合的映射关系
![](https://i-blog.csdnimg.cn/blog_migrate/8ea51d2f2d17e9d561c616a9b4d224a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c67d40bfb63b0e4cffbb17a77d01f09d.png)
假设一个块存储100个,test.c的起始地址为块6,知道起始块就可以算出目标块。目标地址是200-212,块8为200-299,所以目标块为8
这种连续结构适合读写,不适合动态增长
链式结构实现文件
![](https://i-blog.csdnimg.cn/blog_migrate/bf8875bd7bd0fad3cd019515745a8821.png)
先读1,再找到10,读10找到17,17是目标块。读写效率比较低,适合动态增长
索引结构--第三种结构
![](https://i-blog.csdnimg.cn/blog_migrate/45458367d425482193102ed060fa25c9.png)
实际系统中用的就是多级索引
![](https://i-blog.csdnimg.cn/blog_migrate/7cb368e68d0b1068f2ff8729e7b567da.png)
这个熟悉的多级索引,知识重叠了^^
可以表示很大的文件,很小的文件高效访问,中等大小的文件访问速度也不低
文件使用到磁盘的实现
一到这种讲解源码的地方就开始懵逼
感觉就是左耳朵进右耳朵出
![](https://i-blog.csdnimg.cn/blog_migrate/6c4fa8baf4230ad4b1e9947c862d5824.png)
![](https://i-blog.csdnimg.cn/blog_migrate/37b84ec4f200e11805ba7d41a4c296d1.png)
目录与文件系统
磁盘文件:建立了字符流到盘块集合的映射关系
第四层抽象--文件系统,抽象整个磁盘
![](https://i-blog.csdnimg.cn/blog_migrate/70d2766d0df049819b7663b518a33e0a.png)
目录树
将划分后的集合再进行划分:k次划分后,每个集合中的文件数为
![](https://i-blog.csdnimg.cn/blog_migrate/c1ae29d1d0f6b902df6336a5b4c70979.png)
这一树状结构扩展性好,表示清晰,最常用
引入了一个新的东西:目录,表示一个文件的集合
用 /my/data/a 定位文件a 更准确地说是:根据/my/data/a 得到文件a的FCB
六得嘞
目录存什么让系统效率更高?
![](https://i-blog.csdnimg.cn/blog_migrate/b3891b06c2f5d79b09c750e822b3a679.png)
要使整个系统能自举,还需要存一些信息
![](https://i-blog.csdnimg.cn/blog_migrate/f62816fb68c9856e50c5dc17ec270031.png)
完成全部映射下的磁盘使用
![](https://i-blog.csdnimg.cn/blog_migrate/15d5219b1a07297b6f472f29c5ab74ef.png)