现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。
现代计算机系统是一个复杂的系统。
应用软件直接使用操作系统提供的功能来间接使用硬件。
操作系统
操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。
.1 操作系统位置
操作系统位于计算机硬件与应用软件之间,本质也是一个软件。
操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成。
所以,单纯的说操作系统是运行于内核态的,是不准确的。
.2 操作系统功能
- 隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。
- 将应用程序对硬件资源的竞态请求变得有序化。
作用一:为应用程序提供如何使用硬件资源的抽象 例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制。 注意: 操作系统提供给应用程序的该抽象是简单,清晰,优雅的。 为何要提供该抽象呢? 硬件厂商需要为操作系统提供自己硬件的驱动程序(设备驱动,这也是为何我们要使用声卡,就必须安装声卡驱动。。。),厂商为了节省成本或者兼容旧的硬件,它们的驱动程序是复杂且丑陋的 操作系统就是为了隐藏这些丑陋的信息,从而为用户提供更好的接口 这样用户使用的shell,Gnome,KDE看到的是不同的界面,但其实都使用了同一套由linux系统提供的抽象接口 作用二:管理硬件资源 现代的操作系统运行同时运行多道程序, 操作系统的任务是在相互竞争的程序之间有序地控制对处理器、存储器以及其他I/O接口设备的分配。 例如: 同一台计算机上同时运行三个程序,它们三个想在同一时刻在同一台计算机上输出结果,那么开始的几行可能是程序1的输出,接着几行是程序2的输出,然后又是程序3的输出,最终将是一团糟(程序之间是一种互相竞争资源的过程) 操作系统将打印机的结果送到磁盘的缓冲区,在一个程序完全结束后,才将暂存在磁盘上的文件送到打印机输出,同时其他的程序可以继续产生更多的输出结果(这些程序的输出没有真正的送到打印机),这样,操作系统就将由竞争产生的无序变得有序化。
操作系统与普通软件的区别
普通软件你可以弃用或者使用和该软件功能相同的软件,但你无法写一个属于操作系统一部分的程序(时钟中断处理程序),操作系统由硬件保护,不能被用户修改。
操作系统与用户程序的差异并不在于二者所处的地位。特别地,操作系统是一个大型、复杂、长寿的软件。
发展历史
.1 第一代计算机
没有操作系统的概念;所有的程序设计都是直接操控硬件
优点:程序员在申请的时间段内独享整个资源,可以即时地调试自己的程序(有bug可以立刻处理)
缺点:浪费计算机资源,一个时间段内只有一个人用。
同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串行的
.2 第二代计算机
有了操作系统的概念;有了程序设计语言:FORTRAN语言或汇编语言
优点:批处理,节省了机时
缺点:整个流程需要人参与控制;计算的过程仍然是顺序计算,串行;程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)
第二代如何解决第一代的问题/缺点:
1.把输入攒成一大波输入
2.然后顺序计算(这是有问题的,但是第二代计算也没有解决)
3.把输出攒成一大波输出
.3 第三代计算机
同时的外部设备联机操作:SPOOLING,该技术同时用于输出;多道技术;操作系统仍然是批处理
为了解决批处理:
分时操作系统:多个联机终端+多道技术
20个客户端同时加载到内存,有17在思考,3个在运行,cpu就采用多道的方式处理内存中的这3个程序,由于客户提交的一般都是简短的指令而且很少有耗时长的,索引计算机能够为许多用户提供快速的交互式服务,所有的用户都以为自己独享了计算机资源
.4 个人计算机