操作系统与文件系统简述 - STEMHA's Blog

操作系统与文件系统简述

操作系统

1940s,1950s的年代,计算机慢,一次只能运行一个程序,
程序员在打孔纸上写程序,拿到一个计算机房间,交给操作员。
操作员等计算机空下来后,将程序放入,然后运行,输出结果,停机。

计算机变快之后,放程序的时间比程序运行时间还长,我们需要计算机以一种方式自动运作——>操作系统

到1950年代尾声,计算机已经变得非常快了,处理器经常闲着,等待慢的设备(比如打印机,读卡器等),也就是程序阻塞在I/O上

50年代后期,曼彻斯特大学研发了世界上第一台超级计算机,Atlas,想法设法最大限度利用它,1962年设计了atlas supervisor程序,能够在一个CPU上运行多个程序(这种能力也叫多任务处理
Atlas是世界上第一台同时支持虚拟内存和内存保护的电脑

同时运行多个程序会有一些问题

  • 每个程序都会占一些内存,切换程序的时候不能丢失数据
  • 解决办法是给每一个程序配置专属内存块

分配专属内存块到物理地址时候,可能物理地址不连续的,为了隐藏这种复杂性,把内存地址虚拟化,也就是虚拟内存机制

这种机制可以使程序内存大小灵活增减,也叫动态内存分配

内存保护:程序只能捣乱自己的内存,不会影响到其他的程序。

分时操作系统
Multics 首次在设计时候考虑了安全机制,但是导致系统过于臃肿。

Dennis 和 Thompson 联手打造了Unix,将os分为两部分

  1. 操作系统的核心功能,比如内存管理,多任务和输入输出管理,称之为内核
  2. 一堆有用的工具,比如程序和运行库

Unix中并没有向multics这么多的错误处理代码

  • 如果有错误产生,就让内核恐慌(kernel panic)
  • 内核崩溃是没有办法恢复的,所以调用了一个pannic的函数,起初只是打印pannic一词,然后无限循环
    Unix成为1970-1980年代最流行的操作系统之一

1980年代,计算机降价到普通人买得起,这时候叫个人电脑。
起初微软的操作系统没有内存保护,经常蓝屏,后来微软都加上了

我们现在用的ios,安卓,windows,macos基本上都有了内存保护虚拟内存多任务了;

文件系统

文件格式:随机排列文件当然没有问题,但是按格式排列会更好的

最简单的文件格式

  • 文本文件(.txt)

元数据(meta data):关于数据的数据
元数据存在于文件开头,在实际的数据前面,因此也叫文件头(header)

早期计算机只做一件事,比如火炮射程表,这时候整个存储器就像一个文件(数据从头到尾直到占用满)

后期计算和存储能力的提升,可以存多个文件了,这时候最简单的方式是把文件连续存储,一个个在内存中连续存放
但是存储器没有文件概念,只存储大量位,我们怎么直到文件的开头和结尾在哪呢?
所以我们需要一个特殊文件,来记录其他文件存储的位置
这个特殊文件有很多名字,这里泛称为“目录文件”,这个文件经常是存放在开头的

目录文件存放

  • 其他文件的名字”文件名+”.“+扩展名“
  • 文件的元数据,比如创建时间(created),最后修改时间(last modified),文件所有者,是否能读写,最重要的是文件的起始位置和长度

就像书的目录意义,更改了书里面的内容,就需要更改对应的目录

目录文件和对目录文件的管理是一个非常简单的文件系统的例子

上面的例子是”平面文件系统“:文件都在同一个层次
平面文件系统存在的问题:如果给某个文件加数据,会覆盖掉后面文件的一部分

所以现代的文件系统会做两件事

  1. 把空间预先分为一块块,并留一些“预留空间”可以方便改动和管理 (用这样的方案目录文件需要记录文件存放在哪些块里面)
  2. 拆分文件,存放在多个块里面,这样文件可以轻松增大和缩小(目录文件会记录不只一个块)//有点像虚拟内存

删除文件只需要在目录文件上删除那条记录即可。

碎片:文件存储在多个块里面,块之间是分开的,顺序也是乱的。//是增删改文件导致的,不可避免的

对很多存储技术来说,碎片是坏事,现实生活中大文件可能存放在数百个块里面,导致打开文件特别慢。
如何解决?碎片整理!
计算机把数据来回移动,排成正确的顺序

分层文件系统
树状目录的形式

  • 目录文件(根目录)不仅要指向文件,还要指向目录(is directory字段)//相对于平面文件系统的变化
  • 无线深度的文件夹
  • 可以轻松移动文件,只需要改动两个目录文件(一个删去一条记录,一个加一条记录)

存储介质

如今存储技术正朝向固态前进,没有机械活动部件,里面是集成电路,不用像磁盘那样磁头等待磁盘旋转,ssd访问时间低于1/1000秒,但是仍然比RAM慢很多倍,所以现代计算机仍然用层次存储结构。
第一个RAM出现于1972年,成本每比特一美分

参考资料

Crash Course Computer Science

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×