为什么要有操作系统
程序员无法把所有的硬件操作细节都了解到,管理这些硬件并加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了它,程序员就从这些繁琐的工作中解脱了处理,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件
什么是操作系统
精简的话说,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。操作系统所处的位置如图
 操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的细说的话,操作系统应该分成两部分功能
- 隐藏了丑陋的硬件调用接口,为应用程序提供调用硬件资源的更好、更简单、更清晰的模型(系统调用接口)。引用程序员有了这些接口后,就不用再考虑操作硬件的细节,壮心开发 资金的应用程序即可
- 将应用程序对硬件资源的竞态请求变得有序化
作用:
- 为应用程序提供如何使用硬件资源的抽象
- 管理硬件资源 
操作系统与普通软件的区别
- 主要区别:你不想用你暴风影音你可以选择用迅雷播放器或者干脆自己写一个,但是你无法写一个数据操作系统一部分的程序(时钟中断处理程序),操作系统有硬件保护,不能被用户修改
- 操作系统与用户程序的差异并不在于二者所处的地位。特别的,操作系统是一个大型、复杂、长寿的软件
操作系统发展史
第一代计算机(1940~1955)::真空管和穿孔卡片
特点:
- 没有操作系统的概念
- 所有的程序设计都是直接操控硬件
工作过程:
程序员在墙上的机时表预约一段时间,然后程序员拿着它的插件板到机房里,将自己的插件板接到计算机里,这几个小时内他独享整个计算机资源,后面的一批人都得等着(两万多个真空管经常会有被烧坏的情况出现) 后来出现了穿孔卡片,可以加将程序写在卡片上,然后读入机而不用插件板优点
程序员在申请的时间段内独享整个资源,可以及时地调试自己的程序(有bug可以立即处理)缺点
浪费计算机资源,一个时间段内只有一个人用。注意:同一时刻只有一个程序在内存中,被CPU调用执行。
第二代计算机(1955~1965):晶体管和批处理
特点:
设计人员、生产人员、操作人员、程序人员和维护人员直接有了明确的分工,计算机被锁在专用空调房间中,有专业操作人员运行,这便是‘大型机’。 有了操作系统的概念 有了程序设计语言:FORTRAN语言和会变语言,写到纸上,然后穿孔打成卡片,再将卡片盒带到输入室,交给操作员,然后喝着咖啡等待输出接口工作过程:
第二代如何解决第一代的问题/缺点:
- 把一堆人的输入攒成一大波输入
- 如何顺序计算(这是有问题的,但是第二代计算也没有解决)
- 把一堆人的输出攒成一大波输出
优点:批处理,节省了机时
缺点:
- 整个流程需要人参与控制,将磁带搬来搬去
- 计算的过程任然是顺序计算(串行)
- 程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运行完才可以(这极大的影响了程序的开发效率,无法及时调试程序)
第三代计算机(1965~1980):集成电路芯片和多道程序设计
IBM360是现在服务器的前身
如何解决第二代计算机的问题
- 卡片被拿到机房后能够很快的将作业从卡片读入磁盘,于是任何时刻当一个作业结束时,操作系统就能将一个作业从磁带独处,装进空出来的内存区域运行,这种技术叫做同时的外部设备联机操作(SPOOLING,该技术同时用于输出)
- 第三代计算机的操作系统广泛应用了第二代计算机操作系统没有的 关键技术:多道技术
多道技术
CPU在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,CPU需要等待,时间可能很短,但对于CPU来说已经很长很长,长到可以让CPU做很多其他任务,如果我们让CPU在这段时间内切换到去做其他任务,这样CPU不就充分利用了吗,这正是躲到技术产生的技术背景
多道技术中的多道指的是多个程序,多道技术的实现是为了多个程序竞争或者共享同一个资源(比如CPU)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用
- 时间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。
- 时间上的复用:当一个程序在等待I/O时,另一个程序可以使用CPU,如果内存中可以同时存放足够多的作业,则CPU的利用率可以接近100%,类似于我们小学所学的统筹方法,(操作系统采用了多道技术后,可以控制进程的切换,或者说进程间去争抢CPU的执行权限。这种切换不仅会在一个进程遇到io时进行,一个进程占用CPU时间过长也会切换,或者说被操作系统夺走CPU的执行权限)
空间上的复用最大的问题是:程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另一个程序的内存。丧失安全性和稳定性
第三代计算机的操作系统仍然是批处理
如何解决第二代计算机的问题3:
分时操作系统: 多个联机终端+多道技术CTTS:麻省理工(MIT)在一台改装过的7094机上开发成功的,CTSS兼容分时系统,第三代计算机广泛采用了必须的保护硬件(程序之间的内存彼此隔离)之后,分时系统才开始流行
Ken Thompson开发了一个简易的,单用户版本的MULTICS,这就是后来的UNIX系统,基于它衍生了横多其他的Unix版本,为了使程序能在任何版本的Unix上运行,IEEE提出了一个Unix标准,即POSIX(可移植的操作系统接口Portable Operating System Interface)后来,在1987年,出现了一个UNIX的小型克隆,即minix,用于教学使用。芬兰学生Linus Torvalds基于它编写了Linux