计算机基础系列之何为操作系统

what's the 操作系统?

  现代的计算机系统主要是由一个或者多个处理器,主存、硬盘、键盘、鼠标、显示器、打印机、网络接口及其他输入输出设备组成。现代计算机的组成部分极其复杂,我们不可能全部了解完再去写开发,所以就需要用到操作系统。程序员只需要做自己的本职开发工作,应用软件直接使用操作系统提供的功能来间接使用硬件。

  操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的话,是不准确的。

  操作系统的功能主要有两个:

  1. 隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。比如,磁盘资源的抽象是文件系统(C盘,D盘,E盘...下的目录及文件),有了文件的概念,我们直接打开文件,读或者写就可以了,无需关心记录是否应该使用修正的调频记录方式,以及当前电机的状态等细节。操作系统的实际客户是应用程序(应用程序员负责开发应用程序,因而也可以说应用程序员是操作系统的客户)。
  2. 将应用程序对硬件资源的竞态请求变得有序化。

  在 WIndows 软件中,键盘输入、显示器输出等并不是直接向硬件发送指令。而是通过向 Windows 发送指令实现的。因此,程序员就不用注意内存和 I/O 地址的不同构成了。Windows 操作的是硬件而不是软件,软件通过操作 Windows 系统可以达到控制硬件的目的。

 

Windows 操作系统克服了CPU以外的硬件差异

  计算机的硬件并不仅仅是由 CPU 组成的,还包括用于存储程序指令的数据和内存,以及通过 I/O 连接的键盘、显示器、硬盘、打印机等外围设备。

  在 WIndows 软件中,键盘输入、显示器输出等并不是直接向硬件发送指令。而是通过向 Windows 发送指令实现的。因此,程序员就不用注意内存和 I/O 地址的不同构成了。Windows 操作的是硬件而不是软件,软件通过操作 Windows 系统可以达到控制硬件的目的。

 

 

不同操作系统的 API 差异性

  同样机型的计算机,可安装的操作系统类型也会有多种选择。例如:AT 兼容机除了可以安装 Windows 之外,还可以采用 Unix 系列的 Linux 以及 FreeBSD (也是一种Unix操作系统)等多个操作系统。当然,应用软件则必须根据不同的操作系统类型来专门开发。CPU 的类型不同,所对应机器的语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也不同

  应用程序向系统传递指令的途径称为 API(Application Programming Interface)。Windows 以及 Linux 操作系统的 API,提供了任何应用程序都可以利用的函数组合。因为不同操作系统的 API 是有差异的。所以,如何要将同样的应用程序移植到另外的操作系统,就必须要覆盖应用所用到的 API 部分。

  键盘输入、鼠标输入、显示器输出、文件输入和输出等同外围设备进行交互的功能,都是通过 API 提供的。

  这也就是为什么 Windows 应用程序不能直接移植到 Linux 操作系统上的原因,API 差异太大了。

  在同类型的操作系统下,不论硬件如何,API 几乎相同。但是,由于不同种类 CPU 的机器语言不同,因此本地代码也不尽相同。

 

操作系统的发展

  • 第一代计算机(1940~1955):真空管和穿孔卡片           特点:没有操作系统的概念,所有的程序设计都是直接操控硬件。优点:程序员在申请的时间段内独享整个资源,可以即时地调试自己的程序(有bug可以立刻处理)。缺点:浪费计算机资源,一个时间段内只有一个人用。
  • 第二代计算机(1955~1965):晶体管和批处理系统        特点:有了操作系统的概念,有了程序设计语言。优点:批量处理,节约时间。缺点:整个流程需要人参与控制,计算的过程仍然是顺序计算,程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)。
  • 第三代计算机(1965~1980):集成电路芯片和多道程序设计         第三代计算机的操作系统广泛应用了第二代计算机的操作系统没有的关键技术——多道技术(需要记住的知识)。cpu在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,cpu需要等待,时间可能很短,但对于cpu来说已经很长很长,长到可以让cpu做很多其他的任务,如果我们让cpu在这段时间内切换到去做其他的任务,这样cpu不就充分利用了吗。这正是多道技术产生的技术背景。多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用空间上的复用。空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%。空间上的复用最大的问题是:程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存。为了解决这个问题,第三代计算机广泛采用了必须的保护硬件(程序之间的内存彼此隔离)。
  • 第四代计算机(1980~至今):个人计算机

 

Windows 操作系统的特征

  Windows 操作系统是世界上用户数量最庞大的群体,下面列举了一些 Windows 操作系统的特性

  • Windows 操作系统有两个版本:32 位和 64 位
  • 通过 API 函数集成来提供系统调用
  • 提供了采用图形用户界面的用户界面
  • 通过 WYSIWYG 实现打印输出,WYSIWYG 其实就是 What You See Is What You Get ,值得是显示器上显示的图形和文本都是可以原样输出到打印机打印的。
  • 提供多任务功能,即能够同时开启多个任务
  • 提供网络功能和数据库功能
  • 通过即插即用实现设备驱动的自设定

 

32位操作系统

  32 位操作系统表示的是处理效率最高的数据大小。Windows 处理数据的基本单位是 32 位。这与最一开始在 MS-DOS 等 16 位操作系统不同,因为在 16 位操作系统中处理 32 位数据需要两次,而 32 位操作系统只需要一次就能够处理 32 位的数据,所以一般在  Windows 上的应用,它们的最高能够处理的数据都是 32 位的。

  比如,用 C 语言来处理整数数据时,有 8 位的 char 类型,16位的 short 类型,以及32位的 long 类型三个选项,使用位数较大的 long 类型进行处理的话,增加的只是内存以及磁盘的开销,对性能影响不大。

  现在市面上大部分都是64位操作系统了,64位操作系统也是如此。

 

通过 API 函数集来提供系统调用

  Windows 是通过名为 API 的函数集来提供系统调用的。API 是联系应用程序和操作系统之间的接口,全称叫做 Application Programming Interface,应用程序接口。

  当前主流的 32 位版 Windows API 也称 Win32 API,之所以这样命名,是需要和不同的操作系统进行区分,比如最一开始的 16 位版的 Win16 API,和后来流行的 Win64 API 。

  API 通过多个 DLL 文件来提供,各个 API 的实体都是用 C 语言编写的函数。所以,在 C 语言环境下,使用 API 更加容易,比如 API 所用到的 MessageBox() 函数,就被保存在了 Windows 提供的 user32.dll 这个 DLL 文件中。

 

提供采用了 GUI 的用户界面

  GUI(Graphical User Interface) 指得就是图形用户界面,通过点击显示器中的窗口以及图标等可视化的用户界面,举个例子:Linux 操作系统就有两个版本,一种是简洁版,直接通过命令行控制硬件,还有一种是可视化版,通过光标点击图形界面来控制硬件。

 

通过 WYSIWYG 实现打印输出

  WYSIWYG 指的是显示器上输出的内容可以直接通过打印机打印输出。在 Windows 中,显示器和打印机被认作同等的图形输出设备处理的,该功能也为 WYSIWYG 提供了条件。

  借助 WYSIWYG 功能,程序员可以轻松不少。最初,为了是现在显示器中显示和在打印机中打印,就必须分别编写各自的程序,而在 Windows 中,可以借助 WYSIWYG 基本上在一个程序中就可以做到显示和打印这两个功能了。

 

提供多任务功能

  多任务指的就是同时能够运行多个应用程序的功能,Windows 是通过时钟分割技术来实现多任务功能的。时钟分割指的是短时间间隔内,多个程序切换运行的方式。在用户看来,就好像是多个程序在同时运行,其底层是 CPU 时间切片,这也是多线程多任务的核心。CPU分片,也是时钟分割

 

提供网络功能和数据库功能

  Windows 中,网络功能是作为标准功能提供的。数据库(数据库服务器)功能有时也会在后面追加。网络功能和数据库功能虽然并不是操作系统不可或缺的,但因为它们和操作系统很接近,所以被统称为中间件而不是应用。意思是处于操作系统和应用的中间层,操作系统和中间件组合在一起,称为系统软件。应用不仅可以利用操作系统,也可以利用中间件的功能。

  相对于操作系统一旦安装就不能轻易更换,中间件可以根据需要进行更换,不过,对于大部分应用来说,更换中间件的话,会造成应用也随之更换,从这个角度来说,更换中间件也不是那么容易。

 

通过即插即用实现设备驱动的自动设定

  即插即用(Plug-and-Play)指的是新的设备连接(plug) 后就可以直接使用的机制,新设备连接计算机后,计算机就会自动安装和设定用来控制该设备的驱动程序。设备驱动是操作系统的一部分,提供了同硬件进行基本的输入输出的功能。键盘、鼠标、显示器、磁盘装置等,这些计算机中必备的硬件的设备驱动,一般都是随操作系统一起安装的。

  有时 DLL 文件也会同设备驱动文件一起安装。这些 DLL 文件中存储着用来利用该新追加的硬件 API,通过 API ,可以制作出运行该硬件的心应用。

 

总结:

  操作系统是有古人类写的为现代人类提供方便的软件,要写出一份完善的操作系统是一件非常人能做到的事。

  操作系统的作用是使我们在不了解硬件为何物的情况下能方便的对硬件进行操控,有了操作系统应用程序员就不用再考虑操作硬件的细节,专心开发自己的应用程序即可,用户使用电脑进行日常操作也显得边界无疑。重点是,操作系统能将应用程序对硬件资源的竞态请求变得有序化,即多路复用。

 

                          

posted @ 2017-07-21 19:50  ''竹先森゜  阅读(1895)  评论(0编辑  收藏  举报