2、操作系统
本篇导航:
计算机的使用归根结底是对计算机硬件的使用,一个应用程序如果要调用底层硬件资源,就需要对硬件进行管理和优化,如果每一个应用程序都需要单独的代码来调用和管理硬件,工作量不仅繁重,而且重复性太强,费时费力。除此之外,程序员也无法对所有硬件都了如指掌,所以需要有一个操作系统来管理计算机硬件,给程序员提供一个清晰的计算机模型,这样,程序员就可以专注于应用程序的开发而无需考虑底层硬件的管理。
精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。
操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。
隐藏了抽象的硬件调用接口,为程序员提供了简单的系统调用接口,使得程序员可以专注于应用程序的开发。
将各应用程序对硬件的竞态请求变得有序化(通过操作系统中一段汇编语言写的代码)。
第一代计算机(1940~1955):真空管和穿孔卡片
当时的计算机并没有“操作系统”的概念,所有的程序是由纯粹的机器语言编写的,可以直接控制硬件,程序员要将成千上万的电缆插到插件板上组成电路来控制计算机的功能。
后期出现了穿孔卡片,可以将程序通过打孔写在卡片上,使用插入机读取数据而不需要使用插件板。
优点:
程序员在申请的时间段内独享整个资源,可以即时地调试自己的程序(有bug可以立刻处理)
缺点:
浪费计算机资源,一个时间段内只有一个人用
第二代计算机(1955~1965):晶体管和批处理系统
由于当时的计算机非常昂贵,自认很自然的想办法较少机时的浪费。通常采用的方法就是批处理系统。
优点:
批处理,节省了机时
缺点:
1.整个流程需要人参与控制,将磁带搬来搬去(中间俩小人)
2.计算的过程仍然是顺序计算串行
3.程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)
第三代计算机(1965~1980):集成电路芯片和多道程序设计
第三代计算机的操作系统广泛应用了第二代计算机的操作系统没有的关键技术:多道技术。cpu在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,cpu需要等待,时间可能很短,但对于cpu来说已经很长很长,长到可以让cpu做很多其他的任务,如果我们让cpu在这段时间内切换到去做其他的任务,这样cpu不就充分利用了吗。这正是多道技术产生的技术背景
第四代计算机(1980~至今):个人计算机
处理来自多个程序发起的多个(多个即多路)共享(共享即复用)资源的请求,简称多路复用。
1、时间上的复用
当一个资源在时间上复用时,不同的程序或用户轮流使用它,第一个程序获取该资源使用结束后,在轮到第二个。。。第三个。。。
例如:只有一个cpu,多个程序需要在该cpu上运行,操作系统先把cpu分给第一个程序,在这个程序运行的足够长的时间(时间长短由操作系统的算法说了算)或者遇到了I/O阻塞,操作系统则把cpu分配给下一个程序,以此类推,直到第一个程序重新被分配到了cpu然后再次运行,由于cpu的切换速度很快,给用户的感觉就是这些程序是同时运行的,或者说是并发的,或者说是伪并行的。至于资源如何实现时间复用,或者说谁应该是下一个要运行的程序,以及一个任务需要运行多长时间,这些都是操作系统的工作。
2、空间上的复用
每个客户都获取了一个大的资源中的一小部分资源,从而减少了排队等待资源的时间。
例如:多个运行的程序同时进入内存,硬件层面提供保护机制来确保各自的内存是分割开的,且由操作系统控制,这比一个程序独占内存一个一个排队进入内存效率要高的多。
有关空间复用的其他资源还有磁盘,在许多系统中,一个磁盘同时为许多用户保存文件。分配磁盘空间并且记录谁正在使用哪个磁盘块是操作系统资源管理的典型任务。
这两种方式合起来便是多道技术