《程序是怎么跑起来的》读书笔记(7) -- 运行环境啦啦啦

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

大家都很希望自己的程序被别人用,即使是free soft,但是将windows的程序放在mac上运行,这是基本无法实现的,因为运行环境不一样

硬件

对于硬件来说,就是cpu内存显示器硬盘等

同一类型的硬件可以选择安装多个操作系统,正因为如此,office的运行环境即包括操作系统,也包括硬件

cpu的种类是硬件很重要的一种参数
intel的32位微处理器,是按照8096,80286,80386,,,,所以总称为x86

cpu 分很多种,现在可能只有intel这一家独大了,但是早期有各种公司做的cpu,他们各自的机器语言是完全不同的,cpu只能解释自身固有的机器语言

机器语言的程序叫做本地代码(native code),c语言编写的程序,编写的c文件是文本文件,在任何环境下都能显示和编辑,这是源代码,源代码进行编译以后,就可以得到本地代码,比如windows系统的exe和dll文件

源代码:

printf("hello")

本地代码:

55 5E 3B E8 

cpu去执行本机代码

能看出来硬件起作用的例子

在windows还处于MS-DOS时期时,市场上存在多种机型的计算机,日本市场有NEC的PC-9801,富士通的FMR等等,这些虽然cpu同一种硬件,但是其他硬件确是不同的。
windows3.0版本以后,日本市场开始用windows。

由于每种机器的区别,(其他硬件的使用方式的不同)使用内存和I/O的构成都是不同的,因此对于同一种操作系统,在不同的硬件上都需要开发不同的应用,而windows解决了这个问题,在不同硬件的机型,只要是同样的windows操作系统,就可以使用同样的应用

在windows中,键盘输入、显示器输出并不是直接向硬件发送指令,而是通过向windows发送指令实现的,因此不用注意内存和i/o地址的不同构成,这样会慢一些,但是很方便。

能看出来操作系统起作用的例子

同样机型(硬件相同)的计算机,可安装的操作系统类型也有多种选择,windows,mac,linux
应用软件就要根据不同操作系统来进行开发

因为不同的操作系统的API不同,就是应用程序向操作系统传递指令的途径是不同的,所以同样的应用程序移植到其他操作系统上,就必须重写应用种利用到API的部分。

其他

想要在不同操作系统上运行同样的程序,一种就是安装虚拟机,比如mac os上虚拟机安装windows系统,还有一种是像java一样提供java虚拟机

java虚拟机

java的源代码编译后运行,但是编译后生成的并不是cpu使用的本地代码,而是名为字节代码的程序,字节代码的运行环境就是java虚拟机,java虚拟机会把字节代码(.class文件)变换成cpu可以执行的本地代码,然后cpu进行处理

每个系统都有对应的java虚拟机,对于操作系统来说,java虚拟机是应用,而对java程序来说,java虚拟机就是它使用的运行环境
好处很多,也有不少问题,比如需要特定的java虚拟机才能执行相同的字节代码

BIOS和引导

程序的运行环境,存在着名为 basic input/output system的系统,bios存储在rom中,预先内置在计算机主机内部的程序,除了又对键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序”的功能

开机后,bios会先确认硬件是否正藏运行,没有问题的话就会启动引导程序,引导程序会起到操作系统,这种小的程序带动大的程序被砍做bootstrap(拔靴带)
,操作系统运行以后,程序员不再关注BIOS及一道程序。

发表评论

电子邮件地址不会被公开。