这文章记录一些关于计算机的知识,我觉得程序员应该可以看看,大部分都是抽象,我们在写代码或者在做程序的时候,不用在乎底层知识,我们只需要写,编译器会帮我们处理成想要的样子,我觉得硬件底层是很复杂的一个东西,它不仅仅是编程的逻辑判断,还有物理知识,电的知识,这篇文章是一个个抽象来理解计算机,所以我们不用关心底层什么 ALU,或者 计算等等。

视频

这篇文章不只是记录,也写包括我的理解,可能不是很对,有错误请给提 issues。

感谢CrashCourse 字幕组 以及 Crash Course 你们很棒
文本文件,音乐文件,照片和视频,今天我们要讨论文件到底是什么?以及计算机怎么管理文件

2023-05-05-14-24-28-168abe2f-cf38-47af-866f-71026413188c

随意排列文件数据完全没问题,但按格式排会更好 这叫 文件格式

你可以发明自己的文件格式,程序员偶尔会这样做,但最好用现成标准,比如 JPEG 和 MP3 ,来看一些简单文件格式,最简单的是文本文件也叫 TXT 文件。

就像其他文件,文本文件只是一长串二进制数,解码数据的关键是 ASCII 编码。

电脑和手机麦克风,每秒可以对声音进行上千次采样,播放声音文件时,扬声器会产生相同的波形。


位图

位图(Bitmap),后缀 .bmp ,它存图片

2023-05-05-14-48-04-b1bfa171-b5db-4dc3-a730-67e1543c2db1

计算机上,图片由很多个叫 “像素” 的方块组成,每个像素由三种颜色组成:红,绿,蓝,叫 ”加色三原色“,混在一起可以创造其他颜色。

就像 WAV 文件一样,BMP 文件开头也是元数据有图片宽度,图片高度,颜色深度。

文件在底层全是一样的:一长串二进制,为了知道文件是什么,文件格式至关重要。


计算机怎么存文件

虽然硬件可能是磁带,磁鼓,磁盘或集成电路,通过软硬件抽象后,可以看成一排能存数据的桶。

在很早期时,计算机只做一件事,比如算火炮射程表,整个储存器就像一整个文件。数据从头存到尾,直到占满,但随着计算能力和存储容量的提高,存多个文件变得非常有用,最简单的方法,是把文件连续存储这样能用,但怎么知道文件开头和结尾在哪里?

平面文件系统

储存器没有文件的概念,只是存储大量位,所以为了存多个文件,需要一个特殊文件,记录其他文件的位置,这个特殊文件有很大名字,这里泛称 “目录文件” 这个文件经常存在最开头,方便找 。 位置 0 ! 目录文件里,存所有其他文件的名字。

格式是文件名 +“.” + 扩展名,比如 BMP 或 WAV,扩展名帮助得知文件类型,目录文件还有存文件的元数据,比如创建时间,最后修改时间,文件所有者是谁是否能读/写 或读写都行。

如果您想问您电脑文件夹里面为什么没有,那是因为您用的 os 系统提供的文件管理器

最重要的是,目录文件有文件起始位置和长度,如果要添加文件,删除文件,更改文件名等。必须更新目录文件。

就像书的目录,如果缩短或移动了一个章节,要更新目录,不然页码对不上。

目录文件,以及对目录文件的管理是一个非常简单的文件系统例子。

文件系统专门负责管理文件

平面文件系统,把文件前后排在一起 有个问题,如果给 todo.txt 加一点数据,会覆盖后面 carrie.bmp 的一部分,所以现代文件系统会做两件事。

  1. 把空间划分成一块块,导致有一些 ‘预留空间“ 可以方便改动,同时也方便管理,用这样的方案,目录文件要记录文件在哪些块里。

  2. 拆分文件,存在多个块里,假设打开 todo.txt 加了些内容,文件太大存不进一块里,我们不想覆盖掉隔壁的块,所以文件系统会分配一个没使用的块,容纳额外的数据。目录文件会记录不止一个块,而是多个块,只要分配块,文件可以轻松增大缩小。

假设想删掉 carrie.bmp 只需要在目录文件删掉那条记录,让一块空间变成了可用,注意这里没有擦除数据,只是把纪录删了,之后某个时候,哪些块会被新数据覆盖,但在此之前,数据还在原处,所以计算机取证团队可以 “恢复” 数据

虽然别人以为数据已经 “删了”,狡猾!

假设往 todo.txt 加了更多数据,所以操作系统分配了一个新块,用了刚刚 
carrie.bmp 的块,现在 todo.txt 在3个块里,隔开了,顺序也是乱的。

这叫碎片

碎片是增/删/改文件导致的,不可避免,对很多存储技术来说,碎屏是坏事,然后文件夹套文件夹 这叫 “分层文件系统” 您的计算机现在就在用这个