天天看点

编程基础概念:操作系统

编程基础概念:操作系统

编程基础概念

编程既然是一个学科和独立的工业,就会有一套自成体系的概念术语和方法,甚至有一套自己的哲学。我们下面简略了解一下。

想进一步了解,建议看看几本书:

Hofstadte侯世达《Gödel, Escher, Bach》,中译本《哥德尔.艾舍尔.巴赫:集异璧之大成》

Harold Abelson《Structure and Interpretation of Computer Programs》,这本书作为MIT入门教材很多年,简称SICP,中译本《计算机程序的构造和解释》

Bryant和O’Hallaron《Computer Systems: A Programmer’s Prospective》,中译本《深入理解计算机系统》

操作系统

上面我们探索到了一台理论上的计算机是什么样子的。为了让大家能使用计算机,这么一台裸机肯定是不行的,不能让大家自己去管理CPU,管理内存,管理输入输出设备,管理程序装载。这些底层的工作是统一的,不需要每一个使用计算机的人自己动手去做。

这就诞生了操作系统,把计算机的这些组成部件的管理给包起来,然后使用计算机的人其实使用的是操作系统。

操作系统可以看成是一个调度程序,它负责管理计算机这台设备,包括CPU、内存和I/O设备。那它调度什么东西呢?如果一台计算机是一种专用的机器,其实不需要调度的,但是计算机设计之初就定位为一台通用的计算机器,所以原则上一台计算机会运行很多程序。如果规定这些程序要排队,一个运行完之后才运行下一个,实际上也没有什么好调度的。

历史上,电子计算机刚发明出来的头几年,是没有什么操作系统的,全是手工操作。程序员将穿孔的纸带装入输入机,然后启动输入机把程序和数据输入计内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。

而现在你熟悉的实际情况是一台计算机上会同时运行很多程序,我们边写作边放音乐,还在通过网络下载文件,甚至同时在social网络上聊天。对这些程序任务的管理,是操作系统要处理的核心事务,每一个程序都需要占用计算机的计算资源,如CPU如内存如输入输出设备,互相之间不能打架,所以需要一个调度机制。

历史上诞生过很多种操作系统。

首先出现的是批处理系统,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。这一下大大提高了效率,不过CPU的性能还是没有充分利用,因为输入输出这些操作要通过机电设备,是很慢的,作为纯粹的电子设备的CPU大部分时间要等着这些设备完成工作。

为了克服这些矛盾,出现了多道程序技术,允许多个程序同时进入内存并运行。我们这里要理解“同时”这个词的含义,它是一种对人的感受来讲的“同时”,因为CPU只有一个,严格说起来,是没有同时的,一个瞬间只执行一条指令。实际上,是让这些任务交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。CPU很快,虽然它是交替为这些程序服务,但是从人的感受来讲是多个任务同时在运行。

这样一步一步演变成现代的操作系统。

比较主流的操作系统有:

Unix

Unix操作系统是一种强大的多任务、多用户操作系统。1971年,Ken Thompson编写了第一个版本,后来Dennis M.Ritchie加入改写,因此我们一般把Thompson和Ritchie称为Unix发明人。Unix是强大的系统,但是它的核心却是非常小的,1979年发布的正式Unix的核心是有40KB。

编程基础概念:操作系统

(Ken Thompson,1943.2.4 - ,Dennis Ritchie,1941.9.9-2011.10.12,图片来源:维基百科)

Linux

1991年,芬兰的Linus Torvalds发布了Linux内核系统。后来很多开发者加入,

发布了不同的发行版本,如UBuntu,Centos。

编程基础概念:操作系统

(Linus Torvalds,1969.12.28 - ,图片来源:维基百科)

Windows

由Microsoft公司在1980年代研发。

Mac OS

由Apple公司在1970年代研发。