终于进入到操作系统篇了,呼。
先看下相关问题。
答案:
1、环境=操作系统+硬件
程序都有对应匹配的运行环境。在表示程序运行环境时,操作系统和计算机主机常被拿出作为指标,即操作系统和硬件决定了程序的运行环境。
此外,同样类型的硬件可以安装多种操作系统。比如考拉的联想电脑就装了Windows系统和Linux系统。其实,从简单层面出发,你要用冷冰冰的电脑处理你日常在电脑上进行的业务,那么总得有东西直接和电脑硬件对接。向下能对接硬件,向上能支持用户应用操作的,就是我们的操作系统啦。操作系统其实是一套软件,一套能操作硬件的软件。
操作系统以上,则是各种应用了,应用往往依据操作系统开发,这就是为啥很多应用都有win版,unix版和mac版了。但跨平台的应用毕竟是少数,占大多数的不全面不成熟的软件都没有能力和资本进行跨平台开发。
2、再说CPU
往期CPU篇:计算机|程序&CPU
从程序运行环境来说,CPU的种类是特别重要的参数。
CPU只能解释其自身固有的机器语言,不同的CPU能解释的汲取源于的种类也不相同。如,CPU有x86、MIPS、SPARC、PowerPC等几种类型(查了下,这些应该都是历史上的CPU,具体评价还不清楚,但知道CPU有很多种就行了)。这些CPU的机器语言完全不同。
补充信息
机器语言的的程序称为本地代码。我们平时编写的程序在编写阶段仅仅是文本文件,在任何情况下可以显示和编辑,这叫源代码。而编译器对源代码进行编译,就可以得到本地代码。
3、Windows
我们都知道,计算机除了CPU还有许多硬件,这些设备都存在型号不同的问题,如何克服不同硬件的差异是操作系统要面临的第一个问题。Windows操作系统对克服这些差异做出了很大贡献。
在Windows的应用软件中,键盘输入、显示器输出并不是直接向硬件发送指令,而是通过向Windows发送指令来间接实现的。因此,程序员就不需要注意内存和I/O地址的不同构成。因为Windows操作系统操作的是硬件,已经封装好了,程序员要考虑的是操作系统之上的事情。
Windows优秀归优秀,但对不同机型还是需要提供不同的版本的,比如AT兼容机的Windows和PC端就不一样。而且Windows无法吸收CPU的差异,因为Windows软件本身就是用CPU本地代码完成的。
4、操作系统的API
API是应用程序向操作系统传递指令的途径。Windows以及Unix系统的API提供任何应用程序都可以利用的函数组合。不同的操作系统的API不一样,因此,要进行应用在不同操作系统间的迁移时,需要重写调用操作系统API的部分。
5、懒得不想移植了
那么,如果不想通过移植,也可以使用其它操作系统,一般会采用虚拟机的方法。
此外,Java也可以提供不依赖于特定硬件及操作系统的程序运行环境。Java有两层意思,一个就是单纯的编程语言,另外就是作为程序运行的Java。同其他编程语言,Java也是讲Java语法记述的源代码编译后运行。不过,编译后生成的并不是特定CPU使用的本地代码,而是字节代码。字节代码的运行环境就是Java虚拟机。Java虚拟机一边把Java字节代码转成本地代码,一边运行。
emmm,这篇本来想看操作系统原理的,结果真成介绍了,很水的一章~
整体思想弄清楚就行了,即硬件-操作系统-应用是三个层次,每个层次只考虑自己的事情,而同一层次的不同内容在进行跨平台时要考虑底层的调用问题。