zoukankan      html  css  js  c++  java
  • 《程序是怎样跑起来的》读书笔记——第七章 程序是在何种环境中运行的

    1 运行环境 = 操作系统 + 硬件

    • 操作系统和硬件决定了程序的运行环境。
    • 同一类型的硬件可以选择安装多种操作系统。
    • 根据应用的具体情况,有时只有在特定版本的操作系统上 才能运行。



    CPU 只能解释其自身固有的机器语言。不同的 CPU 能解释的机器 语言的种类也是不同的。例如,CPU 有 x86、MIPS、SPARC、PowerPCA 等几种类型,它们各自的机器语言是完全不同的。

    机器语言的程序称为本地代码(native code)。程序员用 C 语言等 编写的程序,在编写阶段仅仅是文本文件。文本文件(排除文字编码的 问题)在任何环境下都能显示和编辑。我们称之为 源代码通过对源代 码进行编译,就可以得到本地代码。

    2 Windows 克服了 CPU 以外的硬件差异

    计算机的硬件并不仅仅是由 CPU 构成的,还包括用于存储程序指 令和数据的内存,以及通过 I/O 连接的键盘、显示器、硬盘、打印机等 外围设备.Windows 操作系统对克服这些硬件构成的差异做出了很大贡献。

    例如,如果想使用当时大热的文字处理软件——JustSystem 的“一 太郎”的话,就必须要买各个机型专用的一太郎软件(图 7-3(a))。这是 因为,应用软件的功能中,存在着直接操作计算机硬件的部分。


    MS-DOS 应用大多都是不经过操作系统而直接控制硬件的,而 Windows 应 用则基本上都由 Windows 来完成对硬件的控制

    而即便是 Windows,也依然无法吸收 CPU 类型的差异。这是因 为,市面上销售的 Windows 应用软件,都是用特定的 CPU 的本地代码 来完成的。

    3 不同操作系统的 API 不同

    同样机型的计算机,可安 装的操作系统类型也会有多种选择。CPU 的类型不同,所对应的机器语言也不同,同样的道理,操作系统 的类型不同,应用程序向操作系统传递指令的途径也是不同的。

    应用程序向操作系统传递指令的途径称为API(Application Programming Interface)因为不同操作系统的 API 是 有差异的,因此,将同样的应用程序移植到其他操作系统时,就必须 要重写应用中利用到 API 的部分。像键盘输入 、鼠标输入、显示器输 出、文件输入输出等同外围设备进行输入输出操作的功能,都是通过 API 提供的。在同类型操作系统下,不管硬件如何,API 基本上没有差别。

    4 FreeBSD Port 帮你轻松使用源代码

    Unix 系列操作系统 FreeBSD 中,存在一种名为 Ports 的机制该 机制能够结合当前运行的硬件环境来编译应用的源代码,进而得到可 以运行的本地代码系统。如果目标应用的源代码没有在硬件上的话, Ports 就会自动使用 FTPA 连接到相关站点来下载代码(图 7-5)。

    5 利用虚拟机获得其他操作系统环境

    即使不通过移植,也可以使用别的方法来运行其他操作系统的应 用。这里我们要介绍的方法就是利用虚拟机软件

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

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

    同其他编程语言相同,Java 也是 将 Java 语法记述的源代码编译后运行。不过,编译后生成的并不是特 定 CPU 使用的本地代码,而是名为 字节代码的程序。字节代码的运行 环境就称为 Java 虚拟机(JavaVM,Java Virtual Machine)。Java 虚拟 机是一边把 Java 字节代码逐一转换成本地代码一边运行的。如果能够结合各种类型的操作系统和硬件作成 Java 虚拟机, 那么,同样字节代码的应用就可以在任何环境下运行了.

    7 BIOS 和引导

    程序的运行环境中,存在着名为 BIOS(Basic Input/Output System)的系统。 BIOS 存储在 ROM 中,是预先内置在计算机主机内部的程序。 BIOS 除了键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序” 的功能。 引导程序是存储在启动驱动器起始区域的小程序。

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

  • 相关阅读:
    Prometheus+Grafana监控
    交互式查询⼯具Impala
    langsong
    linux awk命令详解
    k8s环境下处理容器时间问题的多种姿势
    Golang数据类型之结构体-下篇
    Syntax Error: TypeError: this.getOptions is not a function报错
    百度地图开发-绘制点线提示框 07
    百度地图开发-与地图的交互功能 06
    百度地图开发-实现离线地图功能 05
  • 原文地址:https://www.cnblogs.com/cmi-sh-love/p/cheng-xu-shi-zen-yang-pdao-qi-lai-de-du-shu-bi-jidi.html
Copyright © 2011-2022 走看看