一、操作系统的历史
日期: 2020-12-14 分类: 跨站数据测试 492次阅读
操作系统发展的历史如下。
1.最初1940s的一个状态机,以电子管(vacuum tubes
)为逻辑门,以延迟线(delay lines
)为存储器,以打孔纸带/指示灯作为输入/输出。这种设计下,ENIAC程序是用物理线路(hard-wire
)的,每次重编程都需要重新接线。这种设计下成功运行了打印平方数,微分方程数值求解等问题。
那时候是不需要操作系统的,因为计算机唯一的对象就是独占计算机运行的程序
2.40s的内存是在一维的线上保存数据,50s出现了磁芯来作为内存(是在二维上的,行选通和列选通),有了读卡器和打印机作为I/O设备。
提升:更快更小的逻辑门(晶体管)
、更大的内存(磁芯)
、丰富的I/O设备。
为了支持I/O设备的运行,出现了中断
机制,程序运行时随时可以跳转。
有了操作任务系统
(Operate jobs system
)也就是批处理系统。程序运行的输出可以存在IO中供下一个程序使用。此时的操作系统是一个简单的串行程序调度器和一系列库函数。操作系统开始有设备、文件、任务,但只有一个独占计算机运行的程序。
3.60s时集成电路和总线出现,我们有了更快的处理器
,更快、更大的内存
(虚拟存储出现),更丰富的I/O设备
(完善的中断/异常机制)。
此时的内存足够大,能够同时载入多个程序,但是CPU只有一个,那有什么用呢?
这里有一个很重要的观念,我们的程序并不总是用CPU运行。比如输出所有素数,执行过程分为计算+把结果放到打印机打印,计算很快的,打印机可能需要几分钟时间。一个很自然的想法是,让操作系统在不需要使用CPU的时候让别的程序使用CPU。程序A等待IO设备时,将B程序载入内存,程序B运行完…这样可以实现CPU的并行
。
此时的操作系统需要具备以下能力:
将多个程序同时载入内存的能力
在多个隔离的程序切换的能力
此时,操作系统就有了进程
的概念和进程管理
的API。
当然,也不一定只在使用打印机的时候切换,也可以比如每隔10ms切换一次,如将A程序切换到B程序。这就是中断
,可以定时打断CPU,A程序运行时中断,会跳转到中断处理程序,可以切换到B,将CPU计算资源给B。这个中断处理程序
就是操作系统的一部分,有了现代操作系统的雏形
执行一个while(1)的死循环系统不会崩溃,是因为该程序运行时是会被中断的。操作系统是运行在一个比较高的层级的,有比较大的权限,可以接管系统中所有的中断,这是普通的应用程序所没有的权限。
如下例:
在C代码中关闭了系统的响应中断,原则上在运行时能让系统崩溃,但看结果发现没有,而是报了一个segment fault。
gdb a.out
b main
c
r
layout asm
可以看到汇编执行到cli
时,会产生一个异常,该异常被操作系统捕获,操作系统认为a.out的程序执行了非法的操作,会给a.out发送一个信号将其杀死。这套机制在1960年代就诞生了,沿用至今。
到1965年MIT开发Multics
多任务多用户的系统时,计算机系统的发展进入了modern era。
此时,计算机系统最重要的概念就是进程、中断和虚拟内存
,有了这些技术,就跟我们今天的操作系统没有很大区别了。
4.70s,集成电路空间空间,“计算机”与今天的差距更小了。它有
CISC指令集
:中断,I/O,异常、MMU、网络
个人计算机、超级计算机
。
1970年有了Pascal
,1972年有了C
。
那个时代,今天能做都那时候都能做了。
分时系统走向程序,1969年UNIX诞生并逐渐完善
1973:信号API,管道(对象),grep
信号上面介绍过了,管道`|`是将前一个命令的输出作为后一个命令的输入,如
seq 1 1000000 | less 就是将1~100000的数打印出来,但每次只显示其中一页
空格切到下页,b切到上页。
grep是用来查找字符串,如 seq 1 1000000 | grep 100 | wc -l
seq 1 1000000是打印1~100000的所有数
seq 1 1000000 | grep 100是打印字符串中含有100作为子串的那部分
再加上|wc -l 是计数,最后输出4000
(1973年的OS和现在很像,也是在终端中编程)
1983:BSD socket(对象)
,是网络编程的操作系统对象
1984:procfs(对象)
procs是系统里/proc的目录,这个目录里有以下信息:
比如可以查看 cpuinfo 文件来查看当前电脑的配置:
(输入cd /proc,cat cpuinfo | less)
也可以进入每一个进程对应的目录去查看进程的信息,如:
(输入cd 1 ,sudo cat maps):查看1号进程的内存。
(输入cat stat):查看1号进程运行的重要信息如运行多少时间。
(输入cat cmdline):查看1号进程是什么程序 (/sbin/initautonoprompt)
这节课主讲UNIX系统,是操作系统奠基性的杰作。
UNIX影响了现在的所有的操作系统:
BSD(1977)
MACOS(1984)
Minux(1987)
Windows(1985)
Linux 0.01(1991)
Debian(1996)
Windows XP(2002)
Ubuntu(2004)
iOS(2007)
Android(2008)
Windows 10(2015)
1970s开始操作系统就拥有了完整的“Three Easy Pieces”。
虚拟化
:进程、虚拟存储、设备抽象
并发
:多个进程分时共享多个处理器:进程/线程间通信
持久化
:Unix文件系统及其后代(ex2,ex3,ex4,btrfs,xfs,zfs…)
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐