操作系统(OS)这门学科在计算机领域有着很重要的作用,作为计算机硬件和软件的临界者,对计算机发展有着很重要的意义,随着时代的不断发展,越来越多的操作系统进入大众视野,无论是大家耳熟能详的Windows、MAC,抑或是程序员口中经常念叨的Linux。除了电脑操作系统,手机中的鸿蒙、苹果、安卓也是大家关注的热点,因此要想在计算机领域有所造诣,操作系统是必须要了解掌握的一门学科,因此在这里借助平台,跟大家分享一下我学习操作系统的经验和笔记,用十天的时间来和大家梳理和整理这门学科,让我们一起探索其中的奥秘,享受知识带给我们的快乐吧!!!
文件
文件属性
- 文件名:同一目录下不允许有重名文件
- 标识符:一个系统内的各文件标识符唯一
- 类型:指明文件的类型
- 位置:文件存放的路径、在外存中的地址
- 大小:文件大小
- 创建时间、上次修改时间、文件所有者信息
- 保护信息:对文件进行保护的访问控制信息
文件逻辑结构
- 无结构文件:一系列二进制流或字符流组成,又称“流式文件”
- 有结构文件:一组像素的记录组成,又称“ 记录式文件”,可分为定长记录和可变长记录
- 顺序文件:顺序存储或链式存储
增加和删除一个记录比较困难
索引文件:
索引顺序文件:
多级索引顺序文件:
文件目录
- 文件控制块FCB
包含了文件的基本信息(文件名、文件存放的物理地址),存取控制信息,使用信息 - 索引节点
磁盘索引节点是唯一的,减少磁盘I/O次数
目录结构
(1)单级目录
一张目录表,每个文件各占一个目录项,实现“按名存取”,查找速度慢
(2)两级目录
主文件目录(存贮用户名和用户文件位置)和用户文件目录,无法进行分类
(3)多级目录结构(树形目录结构)
用分隔符“/”连接,引入绝对位置和相对位置的概念,不便于文件共享
(4)无环图目录结构
一个文件可以有多个指向,每个共享节点设置一个共享计数器
文件的物理结构
磁盘块的大小与内存块、页面的大小相同,方便互相调入调出
(1)连续分配
- 每个文件在磁盘上占有一组连续的块
- 物理块号=起始块号+逻辑块号
- 支持顺序访问和直接访问
- 连续分配的文件在顺序读/写时速度最快
- 动态扩容困难
- 产生难以利用的磁盘碎片(可以利用紧凑方式处理)
(2)链接分配
离散分配的方式,为文件分配离散的磁盘块
隐式链接
- 目录中记录起始块号和结束块号,每个磁盘块保留指向下一个磁盘块的指针
- 不支持随机访问,只能顺序访问
- 外存利用率高,易于动态扩展
显式链接
- 文件分配表FAT,每个磁盘块对应下一个磁盘块。
- 支持随机访问(不需要再磁盘里读取一块找到下一块,通过常驻内存的FAT直接找到实际物理块号,直接访问磁盘)
(3)索引分配
- 允许文件离散分配在各个磁盘块中,系统会为每个文件建立一张索引表,表中记录了逻辑块号与物理块号的对应关系
- 索引表存放的磁盘块称为索引块
- 文件数据存放的磁盘块称为数据块
- 可以支持随机访问,容易实现文件拓展
如果磁盘块中的索引表过大无法完全存储:
1、链接方案
将多个索引链接起来存放,但是如果文件比较大,则需要许多块号,此时查询块号需要花费大量时间
2、多层索引
各级索引表大小不能超过一个磁盘块
3、混合索引
包含直接地址索引(指向数据块),又包含一级间接索引(指向单层索引表)、两级间接索引
根据多层索引和混合索引计算文件的最大长度;分析访问某个数据块需要的读磁盘次数
文件存储空间管理
空闲表法
可采用首次适应、最佳适应、最坏适应算法来决定要为文件分配哪个区间
回收磁盘块:
1、回收区前后都没有相邻空闲区
2、回收区前后都是空闲区
3、回收区前面是空闲区
4、回收区后面是空闲区
空闲链表法
空闲盘块链:以盘块为单位
保留链头、链尾指针,根据分配从链头选取,回收修改链尾指针的原则
空闲盘区链:以盘区为单位,连续空闲盘块组成盘区
保留链头、链尾指针,根据盘块个数寻求匹配的盘区,如果没找到采取合并空闲盘区策略
回收时相邻合并,独立单独作为一个空闲盘区
位示图法
比如:26号磁盘块等于1*16+10,这里的1就是字号1,10就是位号
b号盘块对应的字号i=b/n,位号j=b%n
分配:若文件需要k个块,则先顺序扫描连续k个盘块,修改为“1”
回收:根据字号、位号修改为“0”
成组链接法
Unix采用的策略,适合大型文件系统。(类似树的头插法)
文件基本操作
- 创建文件
1、在外存中找到文件所需的空间
2、创建该文件对应的目录项 - 写文件
1、指明文件名称和要写入文件内容
2、为该文件维护一个写位置的指针 - 读文件
1、指明文件名称和要读入文件块的位置
2、为该文件维护一个读位置的指针 - 删除文件
1、找到文件目录项
2、使其变成空项
文件打开与关闭
文件指针、文件打开计数、文件磁盘位置、访问权限
文件共享
1、基于索引节点的共享方式(硬链接)
设置一个链接计数变量count,用户目录项链接到索引结点上
2、利用符号链实现文件共享(软连接)
类似于快捷方式,删除源文件软连接失效
文件保护
- 口令保护
为文件设置“口令”,口令密码保护在系统内部,被破译之后不安全 - 加密保护
异或加密:对文件数据和加密/解密的密码(二进制位)进行异或算法 - 访问控制
访问控制列表:记录了各个用户对文件的访问控制(读、写、执行、添加、删除、列表清单)
文件层次结构
- 用户接口:向上层的用户提供一些简单易用的功能接口。处理用户发出的系统调用
- 文件目录系统:通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径来找到相应的FCB或索引结点
- 存取控制模块:为了保证文件数据的安全,还需要验证用户是否有访问权限
- 逻辑文件系统与文件信息缓冲区:用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址
- 物理文件系统:将逻辑地址转化为物理地址
- 辅助分配模块:负责文件存储空间的管理,负责分配和回收存储空间
- 设备管理模块:直接与硬件交互,负责和硬件直接相关的一些管理工作
磁盘
磁盘结构
- 硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。
- 受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。
- 盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
- (柱面号,盘面号,扇区号)用来表示一个磁盘块
下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
磁盘分类:
根据磁头是否可以移动分为:固定头磁盘、移动头磁盘
根据盘片是否可以更换分为:固定盘磁盘、可换盘磁盘
磁盘调度算法
- 启动时间s,跨越每道磁道时间m,共n道磁道
- 寻道时间:T=m*n+s
- 延迟时间:T=(1/2)*(1/r)=1/(2r)
- 传输时间:T=(1/r)*(b/N)=b/(rN)
(1)先来先服务(FCFS)
先提出需求的先访问。
(2)最短寻找时间优先(SSTF)
先访问当前离指针最近的磁道,以此类推
可能产生“饥饿”现象
(3)扫描算法(SCAN)
只有磁头移动最外侧磁道的时候才能往内移动
(4)Look算法
如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向
(5)循环扫描算法(C-SCAN)
只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回是直接快速移动至起始端而不处理任何请求
(6)C-Look方法
如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向,但是改变方向时要直接改变至最边上再开始扫描
减少延迟时间的方法
- 交替编号:让逻辑上相邻的扇区间隔分布
- 错位命名:让相邻盘面的扇区编号“错位”
磁盘管理
- 磁盘初始化:低级格式化(划分扇区的过程)、将磁盘房内去(分为C盘、D盘、E盘)、进行逻辑格式化(创建文件系统)
- 引导块:计算机启动时需要运行初始化程序(自举程序)来完成初始化,ROM存放很小的自举装入程序,完整的自举程序存放在引导块中
- 坏块管理:对损坏的盘块进行标记,可以在FAT表上标明,或者进行扇区备用
第九天的学习到这里就结束了,不知道小伙伴们收获如何呢?欢迎评论区交流学习,也恳请各位批评指正!!
操作系统其实就是计算机中的一个大管家,这个大管家有着很多很厉害的角色(就像谍战片里面的大府中的老管家一样),因此学习操作系统这门课,就像是在欣赏一部谍战片,要想理解角色内涵,你就必须站在其角度去思考,思考其可能会遇到的危险以及应对策略(bug与bug的修复),这样你才能在凶险的代码江湖生存下来,成为一代英雄,留下你的印记,期待与各位在江湖的相遇,也希望大家能给作品一个三连!!
本文参考教材:王道考研——操作系统(配套PDF文件,点赞留言后私信我发你)
教材配套讲解视频:b站链接