(。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课!

上集我们讲了数据存储,磁带和硬盘这样的技术,可以在断电状态长时间存上万亿个位,非常合适存一整块有关系的数据,或者说"文件"。你肯定见过很多种文件比如文本文件,音乐文件,照片和视频,今天,我们要讨论文件到底是什么以及计算机怎么管理文件,随意排列文件数据完全没问题,但按格式排会更好,这叫"文件格式"。你可以发明自己的文件格式,程序员偶尔会这样做,但最好用现成标准,比如JPEG和MP3,来看一些简单文件格式,最简单的是文本文件,也叫TXT文件里面包含的是文字(惊喜吧)就像所有其它文件,文本文件只是一长串二进制数

原始值看起来会像这样:可以转成十进制看,但帮助不大,解码数据的关键是ASCII编码,一种字符编码标准,第4集讨论过,第一个值72在ASCII中是大写字母H。以此类推解码其他数字,来看一个更复杂的例子:波形(Wave)文件,也叫WAV它存音频数据,在正确读取数据前,需要知道一些信息,比如码率(bitrate),以及是单声道还是立体声,关于数据的数据,叫"元数据"(metadata),元数据存在文件开头,在实际数据前面因此也叫文件头(Header),WAV文件的前44个字节长这样,有的部分总是一样的,比如写着WAVE的部分,其他部分的内容,会根据数据变化,音频数据紧跟在元数据后面,是一长串数字。

数字代表每秒捕获多次的声音幅度,如果想学声音的基础知识可以看物理速成课第18集,举个例子,看一下"你好"的波形,现在捕获到了一些声音,我们放大看一下,电脑和手机麦克风,每秒可以对声音进行上千次采样,每次采样可以用一个数字表示,声压越高数字越大,也叫"振幅",WAVE文件里存的就是这些数据!每秒上千次的振幅!播放声音文件时,扬声器会产生相同的波形,"你好!"

现在来谈谈位图(Bitmap),后缀bmp它存图片,计算机上,图片由很多个叫"像素"的方块组成,每个像素由三种颜色组成:红,绿,蓝,叫"加色三原色",混在一起可以创造其它颜色。就像WAV文件一样,BMP文件开头也是元数据有图片宽度,图片高度,颜色深度,举例,假设元数据说图是4像素宽x4像素高。颜色深度24位8位红色,8位绿色,8位蓝色,提醒一下,8位(bit)和1字节(byte)是一回事,一个字节能表示的最小数是0,最大255。图像数据看起来会类似这样:来看看第一个像素的颜色,红色是255,绿色是255,蓝色也是255,这等同于全强度红色,全强度绿色和全强度蓝色,混合在一起变成白色,所以第一个像素是白色!

下一个像素的红绿蓝值,或RGB值2552550是黄色!下一个像素是000,黑色,下一个是黄色,因为元数据说图片是4x4我们知道现在到了第一行结尾,所以换一行。下一个RGB值是2552550,又是黄色,好,我们读完剩下的像素,一个低分辨率的吃豆人。刚才显然只是一个简单例子,但这张图片也可以用BMP存,我想再次强调,不管是文本文件,WAV,BMP,或是我们没时间讨论的其他格式,文件在底层全是一样的:一长串二进制,为了知道文件是什么,文件格式至关重要

现在你对文件更了解了我们接下来讨论计算机怎么存文件,虽然硬件可能是磁带,磁鼓,磁盘或集成电路,通过软硬件抽象后,可以看成一排能存数据的桶,在很早期时,计算机只做一件事,比如算火炮射程表整个储存器就像一整个文件。数据从头存到尾,直到占满,但随着计算能力和存储容量的提高存多个文件变得非常有用,最简单的方法是把文件连续存储。这样能用但怎么知道文件开头和结尾在哪里?储存器没有文件的概念,只是存储大量位,所以为了存多个文件需要一个特殊文件,记录其他文件的位置,这个特殊文件有很多名字,这里泛称"目录文件",这个文件经常存在最开头,方便找。位置0!

目录文件里,存所有其他文件的名字,格式是文件名+一个句号+扩展名,比如BMP或WAV,扩展名帮助得知文件类型,目录文件还存文件的元数据,比如创建时间,最后修改时间,文件所有者是谁是否能读/写或读写都行,最重要的是,目录文件有文件起始位置和长度,如果要添加文件,删除文件,更改文件名等,必须更新目录文件。就像书的目录,如果缩短或移动了一个章节要更新目录,不然页码对不上,目录文件,以及对目录文件的管理是一个非常简单的文件系统例子,文件系统专门负责管理文件,刚刚的例子叫"平面文件系统"因为文件都在同一个层次,平的!

当然,把文件前后排在一起有个问题,如果给todotxt加一点数据会覆盖掉后面carriebmp的一部分,所以现代文件系统会做两件事,1把空间划分成一块块导致有一些"预留空间"可以方便改动,同时也方便管理。用这样的方案,目录文件要记录文件在哪些块里,2拆分文件,存在多个块里,假设打开todotxt加了些内容文件太大存不进一块里,我们不想覆盖掉隔壁的块,所以文件系统会分配一个没使用的块,容纳额外的数据,目录文件会记录不止一个块,而是多个块,只要分配块,文件可以轻松增大缩小,如果你看了第18集操作系统这听起来很像"虚拟内存",概念上讲的确很像!

假设想删掉carriebmp只需要在目录文件删掉那条记录,让一块空间变成了可用,注意这里没有擦除数据,只是把记录删了,之后某个时候,那些块会被新数据覆盖但在此之前,数据还在原处。所以计算机取证团队可以"恢复"数据,虽然别人以为数据已经"删了"狡猾!假设往todotxt加了更多数据所以操作系统分配了一个新块,用了刚刚carriebmp的块,现在todotxt在3个块里,隔开了,顺序也是乱的,这叫碎片。碎片是增/删/改文件导致的,不可避免,对很多存储技术来说,碎片是坏事,如果todotxt存在磁带上,读取文件要,先读块1然后快进到块5,然后往回转到块2,来回转个半天,现实世界中,大文件可能存在数百个块里,你可不想等五分钟才打开文件,答案是碎片整理!

这个词听起来好像很复杂,但实际过程很简单,以前看计算机做碎片整理真的很有趣!,计算机会把数据来回移动,排列成正确的顺序,整理后todotxt在123,方便读取。目前只说了平面文件系统,文件都在同一个目录里,如果存储空间不多,这可能就够用了因为只有十几个文件,但上集说过,容量爆炸式增长,文件数量也飞速增长,很快,所有文件都存在同一层变得不切实际。就像现实世界相关文件放在同一个文件夹会方便很多,然后文件夹套文件夹,这叫"分层文件系统",你的计算机现在就在用这个。实现方法有很多种,我们用之前的例子来讲重点好了,最大的变化是目录文件不仅要指向文件还要指向目录,我们需要额外元数据来区分开文件和目录,,这个目录文件在最顶层,因此叫根目录,所有其他文件和文件夹,都在根目录下

图中可以看到根目录文件有3个文件2个子文件夹:"音乐"和"照片",如果想知道"音乐"文件夹里有什么必须去那边读取目录文件(格式和根目录文件一样)有很多好歌啊!除了能做无限深度的文件夹这个方法也让我们可以轻松移动文件,如果想把themewav从根目录移到音乐目录,不用移动任何数据块,只需要改两个目录文件一个文件里删一条记录,另一个文件里加一条记录,themewav依然在块5,文件系统的几个重要概念现在介绍完了,它提供了一层新抽象!文件系统使我们不必关心文件在磁带或磁盘的具体位置,整理和访问文件更加方便,我们像普通用户一样直观操纵数据,比如打开和整理文件,接下来几集也会从用户角度看问题

【计算机科学速成课】[40集全/文字版] - 20.文件系统相关推荐

  1. 【计算机科学速成课】[40集全/文字版] - 15.阿兰·图灵

    (。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课! 前几集我们聊了基础,比如函数,算法和数据结构,今天,我们来看一位对计算机理论贡献巨大的人,计算机科学之父,长得不怎么像本尼的阿兰·图灵.阿兰·马蒂森·图 ...

  2. 【计算机科学速成课】[40集全/文字版] - 1.计算机的早期历史

    Hello,World! 欢迎阅读计算机科学速成课! 在这个系列中,我们会学习Bits(位).Bytes(字节).晶体管.逻辑门,一直到操作系统,虚拟现实和机器人! 我们要学很多东西,但预先说明:我们 ...

  3. 【计算机科学速成课】[40集全/文字版] - 9.高级CPU设计

    (。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课! 随着本系列进展,我们知道计算机进步巨大,从1秒1次运算,到现在有千赫甚至兆赫的CPU.你现在看视频的设备八成也有GHz速度,1秒十亿条指令,这是很大的计 ...

  4. 【计算机科学速成课】[40集全/文字版] - 12.编程原理-语句和函数

    (。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课! 上集讲到用机器码写程序,还要处理那么多底层细节对写大型程序是个巨大障碍.为了脱离底层细节,开发了编程语言,让程序员专心解决问题,不用管硬件细节.今天我们 ...

  5. 20210301计算机科学速成课40集(34-35)

    机器学习Machine Learning&人工智能AI,Artificial Intelligence:机器学习算法让计算机可以从数据中学习,然后自行做出预测和决定.(1)分类Classifi ...

  6. 计算机科学速成课】[40集全/精校] - Crash Course Computer Science

    计算机科学速成课][40集全/精校] - Crash Course Computer Science Transistor have two electrodes separated by a mat ...

  7. 计算机科学速成课 Crash Course Computer Science 第三十集 万维网 The World Wide Web

    GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS 如果你觉得不错可以 ⭐Star 和 Fork ❤ 计算机科学速成课 Crash ...

  8. @程序员,这份 2 万人收藏的计算机科学速成课速码!

    整理 | 一一 出品 | AI科技大本营(ID:rgznai100) 作为一枚程序员,很多人可能都不太能清晰地说出计算机发展脉络,要想成为优秀的程序员,只会编程是不够的."读史使人明智&qu ...

  9. 计算机科学速成课 Crash Course Computer Science 笔记(摘要形式)

    Crash Course Computer Science总共40节课,架构式地详细介绍了计算机从底层到顶层的构造和新的技术,一节课十分钟左右,可让小白在很短时间内产生对计算机的总体理解 本文是听课后 ...

最新文章

  1. 数据库连接池技术,c3p0
  2. [推荐算法]ItemCF,基于物品的协同过滤算法
  3. 大学计算机2级考证计划书,计算机二级培训计划书..doc
  4. php min命令,php min函数怎么用?
  5. c 语言for 循环大到小,C语言中for循环问题(一个小坑需注意)
  6. 2018深圳国际零售信息化暨无人售货展
  7. [Python] 学习资料汇总
  8. 我如何学习:不要停下学习的脚步
  9. 向视图中插入的数据能进入到基本表中去吗?_数据库调优,调的是什么及常见手法...
  10. excel宏教程_综合 | 如何使用Excel按条件高效查找数据?
  11. 集合体系结构、Collection集合概述及常用方法(附迭代器遍历对象实例)、List(附子类LinkedList、ArrayList特点)、ListIterator、并发修改异常、增强for
  12. Latex PDF文档目录乱码
  13. linux中硬盘安装教程图解,硬盘安装Debian 5教程图解
  14. 百度为何力推直达号?为了移动商业化
  15. python-面向对象的编程
  16. ABB 120 六轴机械手臂编程调试(一)
  17. 巴西龟饲养日志----六月底乌龟状况
  18. java swing 自动补全_扩展easyui的combobox组件的自动完成(autocomplete)
  19. 中国各朝代统治时间列表
  20. python爬虫去哪儿网_用python爬虫爬取去哪儿4500个热门景点,看看国庆不能去哪儿...

热门文章

  1. selenium驱动Firefox模拟浏览器操作
  2. java中的五种引用数据类型(对象类型)
  3. 方舟服务器最新,方舟生存进化新服开启公告 新增8组免费PVXc服务器
  4. Vue - 超详细 “横向滚动“ 弹幕效果功能组件源码,类似视频与直播间的发言弹幕 (支持自定义弹幕样式 / 开启暂停弹幕播放 / 清空弹幕 / 修改弹幕移动速度 / 发送插入自己的弹幕并高亮显示等)
  5. 电科新生赛dokodemo2
  6. CGI与FastCGI
  7. Linux环境下服务器利用组播来获取客户端IP
  8. mySQL函数根据经纬度计算两点距离
  9. 面试题:将字符串反转的8种方法,你能想到几种?
  10. 人为什么要努力?这是我听过最好的答案