文章目录

  • 0 回顾
  • 1 引入文件
    • 1.1 映射
    • 1.2 链式结构实现文件
    • 1.3 索引结构实现文件
  • 2 总结

0 回顾

  • 盘块号就是连续的扇区
  • 得到盘块号就能进行下列操作

1 引入文件


  • 普通用户使用生磁盘,还需要盘块号,所以很不方便
  • 让普通用户理解,操作系统觉得没有必要,干脆隐藏起来
  • 所以OS引入更高层次的概念-文件
  • 有了文件后,用户再使用信息就变得更加直观自然

  • 核心:从文件得到盘块号,建立映射关系
  • 用户眼里的文件是字符流,所以无非就是建立从字符流到盘块的映射
  • 得到盘块号之后,再用前一讲的方法,即可得到CHS

1.1 映射



  • 一个东西对应一个东西,找到200-212所对应的盘块号789
  • 把盘块号发到电梯队列,到内存缓冲区
  • 内存缓冲区再放到电梯队列,写出去,可能就把这几条语句删除了(如图要求是删除的)
  • 所以我们对文件的使用以及操作系统对内存的使用是通过映射出来的
  • 核心就是映射,映射是由操作系统进行维护的
  • 空白是文件系统处理的,文件系统会对其进行缩进和调整,然后体现在内存缓冲区中,文件关闭的时候会从缓冲区写入磁盘
  • 通过200-212计算盘块号
  • 加入每100个字符流放到一个盘块
  • 这样可以算出212在盘块8
  • 那么问题来了,需要在test.c的FCB当中存储什么信息呢?
  • 要存起始的盘块号
  • 因为这里是以100个字符流为单位的,然后现在起始的字符流是200,除一下100(每个盘块号容纳的字符流),所以起始盘块号就是6
  • 6+2=86 + 2 = 86+2=8就是计算出来的200-212对应的盘块号
  • 所以这就是映射表设立的原因
  • 用户随便输入进去第“多少个字符”,就可以查这个表,算出对应的yyy值,这就建立映射了
  • 综上:文件通过以上方式得到盘块号

1.2 链式结构实现文件


  • 增加到一定的时候,装不下了,要去到更大的空间,就很慢,这就是连续结构的缺点,以上就是数组实现,适合顺序读取,不适用动态增长
  • 连续结构就是数组O(1)O(1)O(1)时间复杂度读写,链式结构就是O(1)O(1)O(1)增删改
  • 以下为链表实现
  • 根据字符流找到盘块号
  • 链表更加灵活,但是是顺序存取,每次都得从起点开始读取
  • 顺序不行,动态增长可以

1.3 索引结构实现文件


  • index结构,inode
  • 由块专门做索引
  • 查找很快
  • 因为这是单纯拿出一块空间来做索引
  • 将文件字符流的关系映射成盘块号
  • 通过索引块(目录)找到其他块(数据)


  • 和内存管理一个道理,一级不够可以多级
  • 盘块是多个扇区组成的,其目的就是为了减少寻址时间。当然,如果盘块也能连续,会进一步优化寻址时间


  • 答案为A

2 总结

  • 核心:从文件得到盘块号,建立映射关系

哈工大李治军老师操作系统笔记【27】:从生磁盘到文件(Learning OS Concepts By Coding Them !)相关推荐

  1. 哈工大李治军老师操作系统笔记【10】:内核级线程实现(Learning OS Concepts By Coding Them !)

    文章目录 0 回顾 1 实现 1.1 int 0x80 fork(中断入口) 1.2 进入核心态 1.3 system_call(中断切换中间三段) 1.4 中断出口 1.3 switch_to 1. ...

  2. 哈工大李治军老师操作系统笔记【29】:目录与文件系统(Learning OS Concepts By Coding Them !)

    文章目录 0 回顾 1 目录与文件系统 1.1 映射 1.2 目录树 1.3 实现目录 1.4 树状目录的完整实现 2 总结 0 回顾 整个磁盘变成一棵目录树 目录树组织一堆文件 文件抽象 一个文件到 ...

  3. 哈工大李治军老师操作系统笔记【13】:一个实际的schedule函数(Learning OS Concepts By Coding Them !)

    文章目录 0 回顾 1 linux0.11的schedule() 1.1 counter的作用 2 总结 0 回顾 实际的schedule是多种基本算法的融合,综合考虑各种情况,但也要求算法本身尽可能 ...

  4. 进一步学习操作系统 - 哈工大李治军老师 - 学习笔记 L28L29L30L31L32

    学习笔记 L28 生磁盘的使用 L29 从生磁盘到文件 L30 文件使用磁盘的实现 L31 目录与文件系统 L32 目录解析代码实现 完结撒花 L28 生磁盘的使用 要知道:柱面.盘面.磁道.扇区 磁 ...

  5. 进一步学习操作系统 - 哈工大李治军老师 - 学习笔记 L26L27

    学习笔记-摘抄自老师书本内容 L26 I/O与显示器 L27 键盘 L26 I/O与显示器 使用外设: (1)向外设对应的端口地址发送 CPU 命令: (2)CPU 通过端口地址发送对外设的工作要求, ...

  6. 进一步学习操作系统 - 哈工大李治军老师 - 学习笔记 L22L23L24L25

    学习笔记 L22 多级页表与快表 总结 L23 段页结合的实际内存管理 L24 内存换入-请求调页 L25 内存换出 L22 多级页表与快表 总结 32位地址,最大内存为232 = 4G 页面尺寸为4 ...

  7. 进一步学习操作系统 - 哈工大李治军老师 - 学习笔记 L10L11L12

    这里写目录标题 L10 用户级线程 L11 内核级线程 L12 内核级线程实现 进程如何切换? L10 用户级线程 进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置,线程切换时只须保存 ...

  8. Linux0.11操作系统(哈工大李治军老师)实验楼实验1-引导

    Linux0.11操作系统(哈工大李治军老师)实验楼实验1-引导 实验源地址: https://www.lanqiao.cn/courses/115/learning/ 1.完成bootsect.s屏 ...

  9. Linux0.11操作系统(哈工大李治军老师)实验楼实验2-系统调用

    Linux0.11操作系统(哈工大李治军老师)实验楼实验2-系统调用 在 Linux 0.11 上添加两个系统调用iam()和whoami(),并编写两个简单的应用程序测试它们. 原理 1. 应用程序 ...

最新文章

  1. tomcat mysql eclipse_eclipse与tomcat及javaweb和mysql相关内容
  2. 经典复现:《统计学习方法》的代码实现(在线阅读!)
  3. 全国计算机等级考试题库二级C操作题100套(第56套)
  4. python合并csv文件_Python学习——pandas 合并csv文件
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的医药进销存管理系统
  6. python插入排序算法总结
  7. HDFS完全分布式集群搭建
  8. 比对字段判断字段是否为空,合并列字段(合并多列)
  9. 帆软报表嵌入python程序_C#教程之C#服务器端生成报告文档:使用帆软报表
  10. phpmyadmin mysql_phpmyadmin
  11. 嵌入式软件开发成功的 3 个要素
  12. dubbo服务暴露与注册
  13. linux qt 找不到 lgl,c ++ - Qt:找不到-lGL
  14. QQ互联开发者认证一直审核未通过的原因
  15. 刚刚,联通和华为发布《5G车路协同白皮书》| 附下载
  16. c++在文件中提取数字或字母
  17. python成语接龙源代码,基于Tkinter,带成语解释
  18. matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程
  19. java工程师的工作述职报告,java程序员述职报告
  20. 计算机主机降温,宁美国度教你电脑降温妙招

热门文章

  1. 新手玩转Linux Kernel漏洞之Null Pointer Dereference
  2. MYSQL数据库的基本操作八(存储函数)
  3. 高电压技术重点知识整理
  4. ipqc的工作流程图_过程质量控制IPQC的介绍及流程
  5. 西南民族大学第十届校赛(同步赛)ABCEHJM题解
  6. mybatis:### The error may involve defaultParameterMap### The error occurred while setting parameter
  7. 贴片陶瓷电容的NPO、C0G、X7R、X5R、Y5V、Z5U辨析
  8. [Demo]用简单的html,css做一个漂亮的网页!
  9. Android:Fragment生命周期(结合Activity的生命周期进行分析)
  10. 折腾BIOS(三),刷NVMe失败