计算机基础- -操作系统环境

计算机基础- -操作系统环境

一、操作系统环境

  • 程序中包含着运行环境这一内容,可以说运行环境=操作系统+硬件,操作系统又可以被称为软件,它是由一系列的指令组成的。

我们不介绍操作系统,我们主要来介绍一下硬件的识别。我们肯定都玩儿过游戏,你玩儿游戏前需要干什么?是不是需要先看一下自己的笔记本或者电脑是不是能肝的起游戏?
在这里插入图片描述
图中的主要配置如下:

  • 操作系统版本:说的就是应用程序运行在何种系统环境,现在市面上主要有三种操作系统环境,Windows、Linux和Unix, 一般我们玩儿的大型游戏几乎都是在Windows上运行, 可以说Windows是游戏的天堂。Windows操作系统也会有区分, 分为32位操作系统和64位操作系统, 互不兼容。
  • 处理器:处理器指的就是CPU, 你的电脑的计算能力, 通俗来讲就是每秒钟能处理的指令数, 如果你的电脑觉得卡带不起来的话, 很可能就是CPU的计算能力不足导致的。
  • 显卡:显卡承担图形的输出任务, 因此又被称为图形处理器(Graphic Processing Unit, GPU)显卡也非常重要
  • 内存:内存即主存,就是你的应用程序在运行时能够动态分析指令的这部分存储空间,它的大小也能决定你电脑的运行速度。
  • 存储空间:存储空间指的就是应用程序安装所占用的磁盘空间,由图中可知,此游戏的最低存储空间必须要大于5GB,其实我们都会遗留很大一部分用来安装游戏。

从程序的运行环境这一角度来考量的话, CPU的种类是特别重要的参数, 为了使程序能够正常运行,必须满足CPU所需的最低配置。

  • CPU只能解释其自身固有的语言。不同的CPU能解释的机器语言的种类也是不同的。
  • 机器语言的程序称为本地代码(native code) , 程序员用C等高级语言编写的程序,仅仅是文本文件。文本文件(排除文字编码的问题)在任何环境下都能显示和编辑。我们称之为源代码。通过对源代码进行编译,就可以得到本地代码

下图反映了这个过程:
在这里插入图片描述

二、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的机器语言不同,因此本地代码也不尽相同。

四、FreeBSD Port帮你轻松使用源代码

  • 不知道你有没有这个想法:“既然CPU不同会导致本地代码不同, 那为何不将源代码直接发送给程序呢?”这确实是一种解决办法,Unix系列的FreeBSD操作系统就使用了这种方式。
  • Unix系列操作系统FreeBSD中, 存在一种名为Ports 的机制。该机制能够结合当前运行环境的硬件环境来编译应用的源代码,进而得到可以运行的本地代码。如果目标应用的源代码在硬件上找不到, Ports就会自动使用FTP连接到相应站点下载代码。
    在这里插入图片描述
  • 全球有很多站点都提供适用于FreeBSD的应用源代码。通过使用Ports可以利用的程序源代码, 大约有16000种。根据不同的领域进行分类,可以随时使用。
  • FreeBSD上应用的源代码, 大部分是用C语言来标注的,C编译器可以结合FreeBSD的运行环境来生成合适的本地代码。

FTP(FileTransfer Protocol) 是连接到互联网上的计算机之间的传送文件的协议。

五、可以使用虚拟机获取其他环境

  • 即使不通过应用程序的移植,在同一个操作系统上仍然可以使用其他的操作系统,那就是使用虚拟机软件。
  • 虚拟机(Virtual Machine) 指通过软件的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。

提供相同运行环境的Java虚拟机

  • 除了虚拟机的方法之外, 还有一种方法能够提供不依赖于特定硬件和操作系统的程序运行环境, 那就是Java。

  • 大家说的Java其实有两层意思, 一种是作为编程语言的Java; 一种是作为程序运行环境的Java。

  • Java与其他语言相同, 都是通过源代码编译后运行的。不过, 编译后生成的不是特定CPU使用的本地代码,而是名为字节代码的程序。直接代码的运行环境就称为Java虚拟机(Java VirtualMachine) 。Java虚拟机是一边把Java字节代码逐一转换为本地代码一边在运行着

  • 程序运行时,将编译后的字节代码转换为本地代码,这样的操作看上去有些迂回,但由此可以实现相同的字节码可以在不同的操作系统环境下运行。

想象一下, 你开发完成的应用部署到Linux环境下, 是不是什么都不用管?
在这里插入图片描述

  • Java应用在虚拟机上运行Windows有专门的Windows虚拟机, Macintosh有Macintosh专门的虚拟机。
  • 从操作系统来看,Java虚拟机就是一个应用, 从运行环境上来看, Java虚拟机就是运行环境。

六、BIOS和引导

  • 程序的运行环境, 存在着名为BIOS(Basic Input/Output System) 的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。

  • BIOS除了键盘、磁盘和显卡等基本控制外, 还有引导程序的功能。引导程序是存储在启动驱动器启示区域的小程序。操作系统的启动驱动器一般硬盘。不过有时也可能是CD-ROM或软盘。

  • 电脑开机后, BIOS会确认硬件是否正常运行, 没有异常的话会直接启动引导程序。引导程序的功能是把在硬盘等记录的OS加载到内存中运行。虽然启动应用是OS的功能,但OS不能启动自己,是通过引导程序来启动的。

  • 利用计算机运行程序大部分都是为了提高处理效率。例如, Microsoft Word这样的文字处理软件, 是用来提高文本文件处理效率的程序, Microsoft Excel等表格计算软件, 是用来提高账本处理效率的程序。

  • 这种为了提高特定处理效率的程序统称为应用

  • 程序员的工作就是编写各种各样的应用来提高工作效率,程序员一般不编写操作系统,但是程序员编写的应用离不开操作系统,

下面我们就针对Windows操作系统来说明一下操作系统和应用之间的关系。

七、操作系统功能的历史

  • 操作系统其实也是一种软件,任何新事物的出现肯定都有它的历史背景,那么操作系统也不是凭空出 现的,肯定有它的历史背景。
  • 在计算机尚不存在操作系统的年代,完全没有任何程序,人们通过各种按钮来控制计算机,这一过程非常麻烦。
  • 于是,有人开发出了仅具有加载和运行功能的监控程序,这就是操作系统的原型。
  • 通过事先启动监控程序,程序员可以根据需要将各种程序加载到内存中运行。虽然仍旧比较麻烦,但比起在没有任何程序的状态下进行开发,工作量得到了很大的缓解
    在这里插入图片描述
  • 随着时代的发展,人们在利用监控程序编写程序的过程中发现很多程序都有公共的部分。
  • 例如,通过键盘进行文字输入,显示器进行数据展示等,如果每编写一个新的应用程序都需要相同的处理的话,那真是太浪费时间了。
  • 因此,基本的输入输出部分的程序就被追加到了监控程序中。初期的操作系统就是这样诞生了

在这里插入图片描述

  • 初期的操作系统=监控程序+基本的输入输出程序
  • 类似的想法可以共用,人们又发现有更多的应用程序可以追加到监控程序中,比如硬件控制程序,程语言处理器(汇编、编译、解析)以及各种应用程序等,结果就形成了和现在差异不大的操作系统,也就是说,其实操作系统是多个程序的集合体

在这里插入图片描述

汇编语言是一种低级语言,也被称为符号语言。
汇编语言是第二代计算机语言,在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。用一些容易理解 和记忆的字母, 单词来代替一个特定的指令,
比如:用ADD代表数字逻辑上的加减, MOV代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功 能,对现有程序的bug修复以及运营维护都变得更加简单方便

八、把操作系统放在第一位

  • 对于程序员来说,程序员创造的不是硬件,而是各种应用程序,但是如果程序员只做应用不懂硬件层面的知识的话,是无法成为硬核程序员的
  • 在操作系统诞生之后,程序员不需要在硬件层面考虑问题,所以程序员的数量就增加了。哪怕自称对硬件一窍不通的人也可能制作出一个有模有样的程序。
  • 不过,要想成为一个全面的程序员,有一点需要清楚的就是,掌握硬件的基本知识,并借助操作系统进行抽象化,可以大大提高编程效率。

下面就看一下操作系统是如何给开发人员带来便利的, 在Windows操作系统下, 用C语言制作一个具有表示当前时间功能的应用:
在这里插入图片描述

  • 读者可以自行运行程序查看结果,我们主要关注硬件在这段代码中做了什么事情
  • 通过time_t tm, 为time_t类型的变量申请分配内存空间;
  • 通过time(&tm) , 将当前的日期和时间数据保存到变量的内存空间中
  • 通过printf”%s\n”, c time(&tm) ) , 把变量内存空间的内容输出到显示器上。
  • 应用的可执行文件指的是, 计算机的CPU可以直接解释并运行的本地代码, 不过这些代码是无法直接控制硬件的,事实上,这些代码是通过操作系统来间接控制硬件的。
  • 变量中涉及到的内存分配情况,以及time() 和printf(这些函数的运行结果, 都不是面向硬件而是面向操作系统的。操作系统收到应用发出的指令后,首先会对该指令进行解释,然后会对时钟IC和显示器用的I/O进行控制
    在这里插入图片描述

九、系统调用和编程语言的移植性

  • 操作系统控制硬件的功能,都是通过一些小的函数集合体的形式来提供的。这些函数以及调用函数的行为称为系统调用,也就是通过应用进而调用操作系统的意思。

在前面的程序中用到了 printf以及 time()函数,这些函数内部也封装了系统调用。

  • C语言等高级编程语言并不依存于特定的操作系统, 这是因为人们希望不管是Windows操作系统还是Linux操作系统都能够使用相同的源代码。

  • 因此,高级编程语言的机制就是,使用独自的函数名,然后在编译的时候将其转换为系统调用的方式(也有可能是多个系统调用的组合)。

  • 也就是说,高级语言编写的应用在编译后,就转换成了利用系统调用的本地代码。
    在这里插入图片描述

  • 不过,在高级语言中也存在直接调用系统调用的编程语言,不过,利用这种方式做成应用,移植性并不友好。

移植性:移植性指的是同样的程序在不同操作系统下运行时所花费的时间,时间越少证明移植性 越好。

十、操作系统和高级编程语言使硬件抽象化

  • 通过使用操作系统提供的系统调用,程序员不必直接编写控制硬件的程序,而且,通过使用高级编程语言,有时也无需考虑系统调用的存在,系统调用往往是自动触发的,操作系统和高级编程语言能够使硬件抽象化,这很了不起。

下面让我们看一个硬件抽象化的具体实例
在这里插入图片描述

  • 上述代码使用C编写的程序,fputs()是用来往文件中写入字符串的函数,fclose()是用来关闭文件的函数。

  • 磁盘就如同树的年轮,磁盘的读写是以扇区为单位的,通过磁道来寻址,如果直接对硬件读写的话,那么就会变为通过向磁盘用的I/O指定扇区位置来对数据进行读写了。

  • 但是, 在上面代码中, 扇区压根就没有出现过传递给fopen()函数的参数, 是文件名My File.txt和指定文件写入的w。

  • 传递给fputs) 的参数, 是往文件中写入的字符串”你好”和fp, 传递给fclose)的参数,也仅仅是fp

  • 也就是说磁盘通过打开文件这个操作,把磁盘抽象化了,打开文件这个操作就可以说是操作硬件的指令。
    在这里插入图片描述

  • 下面让我们来看一下代码清单中fp的功能, 变量fp中被赋予的是fopen) 函数的返回值, 该值被称为文件指针。

  • 应用打开文件后,操作系统就会自动申请分配用来管理文件读写的内存空间。内存地址可以通过fopen() 函数的返回值获得。

  • 用fopen打开文件后, 接下来就是通过制定的文件指针进行操作, 正因为如此, fputs() 和fclose() 参数中都制定了文件指针。

由此我们可以得出一个结论,应用程序是通过系统调用,磁盘抽象来实现对硬盘的控制的。

十一、Windows操作系统的特征

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

1.32位操作系统

  • 这里表示的32位操作系统表示的是处理效率最高的数据大小。Windows处理数据的基本单位是32 位。
  • 这与最一开始在MS-DOS等16位操作系统不同,因为在16位操作系统中处理32位数据需要两次,而32位操作系统只需要一次就能够处理32位的数据, 所以一般在windows上的应用, 它们的最高能够处理的数据都是32位的。
  • 比如, 用C语言来处理整数数据时, 有8位的char类型, 16位的short类型, 以及32位的long类型三个选项, 使用位数较大的long类型进行处理的话, 增加的只是内存以及磁盘的开销, 对性能影响不大。

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

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

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

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

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

3.提供采用了GUI的用户界面

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

4.通过WYSIWYG实现打印输出

  • WYSIWYG指的是显示器上输出的内容可以直接通过打印机打印输出。

  • 在Windows中, 显示器和打印机被认作同等的图形输出设备处理的, 该功能也为WYSIWYG提供了条件。

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

5.提供多任务功能

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

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

  • Windows中, 网络功能是作为标准功能提供的。数据库(数据库服务器) 功能有时也会在后面追加。

  • 网络功能和数据库功能虽然并不是操作系统不可或缺的,但因为它们和操作系统很接近,所以被统称为中间件而不是应用。意思是处于操作系统和应用的中间层,操作系统和中间件组合在一起,称为系统软件。

  • 应用不仅可以利用操作系统,也可以利用中间件的功能。
    在这里插入图片描述

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

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

  • 即插即用(Plug-and-Play) 指的是新的设备连接(plug) 后就可以直接使用的机制,新设备连接计算机后,计算机就会自动安装和设定用来控制该设备的驱动程序,设备驱动是操作系统的一部分,提供了同硬件进行基本的输入输出的功能。

键盘、鼠标、显示器、磁盘装置等,这些计算机中必备的硬件的设备驱动,一般都是随操作系统一起安装的。

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

猜你喜欢

转载自blog.csdn.net/wolfGuiDao/article/details/107670793