本人计算机科学小白,有理工科基础,课程来源是《计算机科学速成课》 B站链接:www.bilibili.com/video/BV1EW…
封面是旧都なぎ老师ヾ(>∀<)(ノ∀`●)⊃老师的画风真是太好看了!
18 操作系统
操作系统,简称OS,其实也是程序,但它有操作硬件的特殊权限,可以运行和管理其它程序。开机时它第一个启动,由它启动其它所有程序。
它可以自动处理下一个程序。
以前的计算机,外部设备不同常常会和程序不兼容,很不方便。
为了能解决这个问题,操作系统充当了软件和硬件之间的媒介,抽象硬件,叫设备驱动程序。程序员可以用标准化机制,和输入输出硬件(I/O)交互。
Atlas系统可以弥补挨个运行程序出现的空档期,使得在CPU上运行一个程序,同时另一个程序在打印数据,同时另一个程序读数据。
多任务处理:使多个程序可以同时运行,在单个CPU上共享时间。
多任务处理的问题是需要储存运行后的数据,所以需要给每个程序分配专属内存块。
存在的问题是程序可能分到非连续的内存块,难以跟踪具体位置,所以需要将内存地址“虚拟化”,叫作虚拟内存,程序假定内存总是从地址0开始,来换算实际物理位置。
操作系统会自动处理虚拟内存和物理内存之间的映射。可以让程序的内存大小可以灵活增减,叫动态内存分配。对程序来说,内存是连续的。
优点是可以灵活处理内存,而且方便隔离,一个程序出错,不会影响其他程序,叫内存保护。
以上解决了多个程序同时运行问题,那么多个用户使用终端访问计算机如何解决?
“终端”只是键盘+屏幕,连到主计算机,终端本身没有处理能力。
分时操作系统:为了确保其中一个人不会占满内存,每个用户只能用一小部分处理器、内存等。
Unix操作系统分为两部分:
- 核心功能:内核
- 一堆有用的工具,但不是内核的一部分
如果发生运行错误,就让内核“恐慌”,调用一个叫”恐慌“的函数,打印”恐慌“一词,然后无限循环。
1985年微软发布的早期Windows,在90年代很流行,但缺少”内存保护“,程序行为不当时会蓝屏,将系统也带崩溃。
如今操作系统分类很多,依然有”多任务“、”虚拟内存“、”内存保护“。
19 内存&储存介质
一般来说,电脑内存是“非永久性”,断电可能就失去数据,所以叫“易失性”存储器。
存储器和内存有一些不同,存储器的数据会一直存着,除非删除或者覆盖,断电也不会丢失。
最早的存储介质是打孔纸卡,主程序存储在纸卡上,用了十几年,因为不用电而且便宜耐用坏处是读取慢,只能写入一次。存临时值的话,纸卡不好用。
1944年,发明了延迟线存储器,类似于一个管子,一头的扬声器发出脉冲产生压力波,需要时间来传播到另一头的麦克风,麦克风将压力波转换回电信号,可以利用压力波的传播延迟,来存储数据。
假设有压力波是1,无压力波是0,扬声器就可以输出1101等信号。
延迟线存储器的一大缺点是每一个时刻只能读一位数据,如果需要访问一个特定的bit,得等待它从循环中出现,所以又叫“顺序存储器”或“循环存储器”。
但是我们需要“随机存取存储器”,可以随时访问任何位置。
如果增加内存密度,压力波紧密的话,就会更容易混在一起,所以出现了其他类型的延迟线存储器,如磁致伸缩延迟存储器。
它用了金属线的振动来代表数据,通过把线卷成线圈来存储数据,但是在1950年代中期,这种延迟线存储器就过时了。
此时出现了新技术,磁芯存储器,给磁芯绕上电线,并施加电流,可以将磁化在一个方向;如果关掉电流,磁芯保持磁化;如果沿相反方向施加电流,磁化方向会翻转,这样就可以存0和1。将磁芯排列起来,由电线负责选行和列,也有电线贯穿每个磁芯,用于读写一位。
磁芯存储器可以做到随时访问任何一位。从1950年代中期开始流行了20多年。
1951年,提出一种新的方式:磁带。磁带可以在磁带驱动器内前后移动,里面有一个写头绕了电线,电流通过产生磁场,导致磁带的一小部分被磁化,而电流方向代表了极性,代表1和0。磁带沿用至今。
磁带的主要缺点是访问速度,磁带是连续的,必须倒带或者快进到特定位置,读取起来很慢。
有个类似技术是磁鼓存储器,有金属圆筒,盖满了磁性材料以记录数据,持续旋转,周围有数十个读写头。
磁鼓导致了硬盘的发展,磁盘表面有磁性,薄,可以叠在一起,提供更多的表面积来存储数据。
要访问特定的比特,一个读/写磁头会向上或向下移动,找到正确的磁盘,磁头会滑进去。
1970年代,磁盘大幅度改进并变得普遍。
光学存储器于1972年出现,12英寸的“激光盘”。后来叫做光盘(CD/DVD)。光盘表面有很多小坑,造成光的不同反射,光学传感器会捕获到,记为1/0。
第一个RAM集成电路出现于1972年,使磁芯存储器迅速过时。
机械硬盘逐渐被固态硬盘替代,简称SSD。SSD没有移动部件,磁头不用等磁盘转,所以访问时间极快,但是仍然没有RAM快。
20 文件系统
每个文件都有相应的格式,例如txt文件,最原始的是一长串二进制,可以使用ASCII编码。
存储器没有文件的概念,只是存储大量位,为了存多个文件,需要一个特殊文件,记录其他文件的位置,这个特殊文件泛称“目录文件”。这个文件经常存在最开头,位置0,方便找。
目录文件李存所有其他文件的名字,格式是文件名+“ . ”+扩展名,扩展名帮助得知文件类型,目录文件还存文件的元数据,比如创建时间、最后修改时间、文件所有者等等信息。
目录文件有文件起始位置和长度,如果需要添加、删除、更改文件名等操作,必须更新目录文件。
目录文件以及对目录文件的管理,是一个非常简单的文件系统例子,文件系统专门负责管理文件。
以上讲的是平面文件系统,每个文件在同一个平面,所以如果给其中一个文件增加内容,可能会覆盖掉下一个文件。
为了解决这个问题:
- 把空间划分成一块块,导致一些“预留空间”,方便改动、管理;
- 拆分文件,存在多个块里,只要分配块,文件可以轻松增大缩小。(类似虚拟内存)
如果想要删除某个文件,从目录里删除记录,但是实际上文件还存在,只是需要覆盖时会分配内存覆盖掉该文件的区域,但覆盖前一直都在,所以可以“恢复”数据。
由于修改删除等操作,文件不可避免会被存为碎片,分配在不同位置的内存里。
为了方便读取文件,所以需要“碎片整理”,计算机会把碎片来回移动,排列成正确的顺序。
上述所说的都是平面管理系统,文件都在同一个目录里,处理小容量文件可行,但是在容量爆炸式增长的现在,文件数量也飞速增长,所有文件都存在同一层不切实际。
现在相关文件放在同一个文件夹,多个文件夹管理,叫分层文件系统。
目录文件不仅要指向文件,还要指向目录,需要额外元数据,来区分文件和目录。这个目录文件在最顶层,所以叫根目录。所有其他文件和文件夹,都在根目录下。
移动文件只需要将一个目录下的记录删除,在另一个目录下增加该文件即可,文件所在内存位置不变。
文件系统使我们不必关心文件在磁带或磁盘的具体位置,整理和访问文件更加方便。