其实 操作系统并不是与计算机硬件一起诞生的
它是在人们使用计算机的过程中,为了管理硬件资源,提高性能提高资源利用率,而逐步地形成和完善起来的。
操作系统也是一种程序,负责管理系统资源
上电自检(经过BIOS)之后,处理器第一个要处理的程序
之所以叫做操作系统,其实就相当于它提供了一个工作台
让你可以更加方便的操作计算机的软硬件资源
是机器的一种封装,对于人机交互提供了统一的操作方式
自从第二代晶体管计算机之后,计算机的性能有了很大的提升
与之矛盾的自然是计算机手动输入速度慢
为了提供系统利用率,出现了批处理系统
用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。
显然不具备任何交互性,只是提高了系统的利用率
其中有
联机批处理系统,联机就是主机自己来控制输入输出
输入输出时,计算机的CPU是空闲的,需要等待数据传输完成
脱机批处理系统就是输入输出不在交由主机处理,托管到另一个台机器
显然,处理机和主机可以并行工作,他们通过高速磁带进行对接
但是仅仅只能执行一个程序
人们当然希望计算机可以同时执行多个任务
然后很自然的出现了多道程序系统
允许多个程序同时进入内存并运行
交替在CPU中运行,它们共享系统中的各种硬、软件资源。
多道批处理系统
顾名思义就是批处理与多道程序的结合,兼顾了多道与批处理的优点
不过没有交互性
把CPU时间分成时间片,各个任务按照时间片轮流执行,分时就是分配时间片
分时系统的实时性交互性比多道程序有更大的提高
还有一些特定的场景,对于实时性要求更高,比如军事设备等
分为实时控制系统/实时信息处理系统
响应更加及时,更加可靠,平时场景一般是用不到的
可以看得出来,操作系统的发展中有几个主要矛盾
CPU性能与手工操作的矛盾
CPU性能与输入输出的矛盾
运行单一任务与希望可以执行多程序之间的矛盾
交互性差和希望可以提供更强交互性之间的矛盾
实时性差与希望可以提供更加实时可靠系统之间的矛盾
功能单一与希望可以提供通用功能系统之间的矛盾
整个发展过程就是为了解决这些矛盾
发展的结果也就是CPU的利用率大幅度上升,功能更加完备
可以同时执行多个任务
实时性交互性更高更可靠
也出现了更为通用的计算机
操作系统的类型更多的可以理解为逻辑上的意义,他们可以相互结合,比如上面的多道批处理
还有分时批处理 实时批处理 等
Unix是最早的通用操作系统
此后又出现了linux/windows/苹果
计算机由硬件和软件构成
我们可以认为操作系统是计算机软件程序和硬件之间的一个薄层
这个薄层封装了底层的硬件实现
基本功能是:
防止硬件被应用程序随意滥用,并且向应用程序提供了简单一致的机制来控制各种不同的硬件设备
操作系统通过几个基本的抽象概念来达到这个目的
/虚拟内存/进程/文件/
既然是抽象,那自然是像译码器一样,转换了一种描述呈现表达操作方式
文件是对IO设备的抽象
就是字节序列而已,所以每个IO设备,哪怕是键盘显示器都可以看成是文件
向应用程序提供了一个统一的操作视图
也可以理解为格式,也就是对于所有程序来说 所有的文件都是这样子的
不管你到底是什么样子的IO设备,应用程序完全不用关注他具体的样子
操作系统会提供一致性的解决方案
虚拟内存是对主存和磁盘I/O的设备的抽象
是计算机系统内存管理的一种技术。
它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间)
好像自己都独占使用主存
通过提供连续的内存空间,每个进程看到的虚拟地址空间由大量的固定的区块构成
其实可以理解为户型图,每个进程的户型都一样
包括程序代码和数据区/堆/栈 等
他们看到的地址空间是一致的
而不用你自己费心的去管理地址
现在的计算机都可以多任务同时执行,之前提到的中断正是这种功能的硬件基础
没有哪个程序会一直独占处理器
每个程序都需要内存,想要多任务运行自然需要更多的内存
怎么才能在有限的内存空间服务于越来越多的程序呢?
注意到,虽然内存中有许多个程序同时运行,但是同一时间点,只有一个处理器在执行
如果内存不够的话,可以让暂时不用的数据和代码 存放到磁盘
腾出来空间加载将要使用的部分
如果需要的话,再将它们用同样的方式加载回来
这样编写程序的时候,不用关注到底是否有内存可用,
对于当前程序,他会假定他肯定有足够的内存使用
因为这部分内存并不存在,而是位于磁盘上,所以叫做虚拟内存
硬盘的速度是很慢的,如果需要访问的内容不在内存中,而是从磁盘载入,代价是巨大的
所以计算机自然会很慢
也就是说,虚拟内存牺牲执行效率换执行空间(同时运行更多的程序)
对于程序员来说,操作系统提供的虚拟内存,可以说是给程序的运行提供了统一的内存空间
进程是对处理器 主存 I/O设备的抽象
每个程序在计算机上运行,看上去可以独占的使用处理器,主存和I/O设备
处理器好像在不间断的一条接一条的执行程序中的指令
对于程序来说好像只有他自己的程序的代码和数据在内存中
好像跟其他的正在运行的应用程序并没有关系
这是操作系统提供的一种假象,这就是进程的概念
进程是对处理器 主存 I/O设备的抽象,也即是一个正在运行的程序的一种抽象
进程也是硬件中断以及系统cpu时间片调度的产物
一个正在运行的程序,这是一件抽象的事情,
想要把它具体的映射到系统中,而且还能有中断,还能够重新返回现场继续执行
你必须用具体的信息去描述记录跟踪它的运行
操作系统保持跟踪进程运行时所需要的所有信息,这种信息也叫作上下文
它包括很多信息,自然取决于操作系统的底层实现
可能包括PC和寄存器的值,主存的内容等
操作系统想要把控制权从当前进程转移到某个新的进程,就会进行上下文切换
也就是保存当前的上下文,恢复进程的上下文
当然现代操作系统一个进程又实际的被分为多个称之为线程的执行单元组成
每个线程都运行在进程上下文,共享同样的代码和全局数据
操作系统也是计算机发展中的一个伟大创举
他隐藏了大量的底层细节,提供了大量方便的抽象
总结:
操作系统就是对硬件的封装,提供简单统一的访问形式.