1940s,1950s的年代,计算机慢,一次只能运行一个程序,
程序员在打孔纸上写程序,拿到一个计算机房间,交给操作员。
操作员等计算机空下来后,将程序放入,然后运行,输出结果,停机。
计算机变快之后,放程序的时间比程序运行时间还长,我们需要计算机以一种方式自动运作——>操作系统
到1950年代尾声,计算机已经变得非常快了,处理器经常闲着,等待慢的设备(比如打印机,读卡器等),也就是程序阻塞在I/O上
50年代后期,曼彻斯特大学研发了世界上第一台超级计算机,Atlas,想法设法最大限度利用它,1962年设计了atlas supervisor程序,能够在一个CPU上运行多个程序(这种能力也叫多任务处理
)
Atlas是世界上第一台同时支持虚拟内存和内存保护的电脑
同时运行多个程序会有一些问题
分配专属内存块到物理地址时候,可能物理地址不连续的,为了隐藏这种复杂性,把内存地址虚拟化,也就是虚拟内存机制
这种机制可以使程序内存大小灵活增减,也叫动态内存分配
内存保护
:程序只能捣乱自己的内存,不会影响到其他的程序。
分时操作系统
Multics 首次在设计时候考虑了安全机制,但是导致系统过于臃肿。
Dennis 和 Thompson 联手打造了Unix,将os分为两部分
Unix中并没有向multics这么多的错误处理代码
内核恐慌(kernel panic)
1980年代,计算机降价到普通人买得起,这时候叫个人电脑。
起初微软的操作系统没有内存保护,经常蓝屏,后来微软都加上了
我们现在用的ios,安卓,windows,macos基本上都有了内存保护
,虚拟内存
,多任务
了;
文件格式:随机排列文件当然没有问题,但是按格式排列会更好的
最简单的文件格式
元数据(meta data):关于数据的数据
元数据存在于文件开头,在实际的数据前面,因此也叫文件头(header)
早期计算机只做一件事,比如火炮射程表,这时候整个存储器就像一个文件(数据从头到尾直到占用满)
后期计算和存储能力的提升,可以存多个文件了,这时候最简单的方式是把文件连续存储,一个个在内存中连续存放
但是存储器没有文件概念,只存储大量位,我们怎么直到文件的开头和结尾在哪呢?
所以我们需要一个特殊文件,来记录其他文件存储的位置
这个特殊文件有很多名字,这里泛称为“目录文件”
,这个文件经常是存放在开头的
目录文件存放
文件的起始位置和长度
就像书的目录意义,更改了书里面的内容,就需要更改对应的目录
目录文件和对目录文件的管理是一个非常简单的文件系统的例子
上面的例子是”平面文件系统“
:文件都在同一个层次
平面文件系统存在的问题:如果给某个文件加数据,会覆盖掉后面文件的一部分
所以现代的文件系统会做两件事
删除文件只需要在目录文件上删除那条记录即可。
碎片
:文件存储在多个块里面,块之间是分开的,顺序也是乱的。//是增删改文件导致的,不可避免的
对很多存储技术来说,碎片是坏事,现实生活中大文件可能存放在数百个块里面,导致打开文件特别慢。
如何解决?碎片整理!
计算机把数据来回移动,排成正确的顺序
分层文件系统
树状目录的形式
如今存储技术正朝向固态前进,没有机械活动部件,里面是集成电路,不用像磁盘那样磁头等待磁盘旋转,ssd访问时间低于1/1000秒,但是仍然比RAM慢很多倍,所以现代计算机仍然用层次存储结构。
第一个RAM出现于1972年,成本每比特一美分
Crash Course Computer Science
Update your browser to view this website correctly. Update my browser now