简述计算机运行机制

众所周知,对于冯·诺依曼体系结构的现代计算机而言,主要的组成部分是:cpu、内存和I/O。作为电子元器件,cpu和内存识别二进制中的1和0都是通过电压的有无来实现的,因此电压在有无之间变换频率的快慢或者说这些元器件能识别这些变换频率的能力直接影响着计算机处理数据的能力。

CPU

犹如人体的大脑一样,cpu在整个计算机的运行过程中起着至关重要的作用,这些作用包括计算功能和控制功能。然而,就像吃饭时要有一个器具盛米饭一样,当CPU进行计算的时候,必须有一个类似的容器,当表示第一个数据的比特(电压)流消失以后能够将其缓存起来与下一个数据做运算,这个安放在CPU里面的容器就叫做寄存器,实现运算功能的部件叫做运算器。当然,对于计算机内部的元器件来说,要想实现数据的处理必须经过CPU,因此CPU要有与各个部件相连的通道,为了让尽可能少的线部署在有限的空间里面,我们用一组线来贯穿整个计算机,所有的部件都与其相连,这组线称为:总线。对于这样的总线结构,必然存在协调收发的冲突检测和避免机制,就好像我们在车流量较大的主干道要有红绿灯来指挥交通一样,在计算机内部,这个指挥交通的元器件叫做控制器,其他部件上有一个接受控制器命令的控制单元。

内存

在计算机内部,CPU能直接访问的只有内存,因此CPU需要能精确的在内存中找到需要处理的数据,所以内存是编址的。一个内存被分为N个Cell,每一个Cell包含8bits并且都有一个地址,控制器通过地址总线连接到内存控制器,如果一个内存控制器输出32根线(32位),那么寻址能力就是4G.

操作系统

对于每一个硬件,它的运行规格不一样,比如:不同厂商的CPU对于机器码的识别方式不同,可能相同的0和1组合一个表示加,一个表示减。于是对于早期的程序员来说要想实现一个应用程序的逻辑必须了解开发平台上所有硬件的机器码识别方式,这一点是非常困难的。同时厂商千千万,在一个特定硬件组合平台上开发的程序不可能移植到其他的硬件平台上,要解决这个矛盾必须开发一个中间层,向下能驱动所有的硬件设备,向上提供统一标准的接口,通过这个统一的接口来驱动底层硬件的过程称为系统调用(system call),这个中间层通俗的称呼是:操作系统,在Linux中叫做Linux内核。

操作系统提供了应用程序和底层硬件交互的平台,它能够驱动所有的底层硬件,同时最重要的是能够通过分时的方式管理CPU,让各个应用程序协调工作。虽然都是中间层,但是Linux和windows向上提供的统一接口标准不同,所以一个应用程序根据操作系统的不同会有windows32/64和Linux32/64等几个版本。

API和ABI

如前文所言,即使能够驱动不同厂商的硬件,我们的操作系统(内核)的接口依然非常底层,比如word需要用到打印功能,excel也需要用到相同的功能,那么就需要把所有厂商的打印接口能实现的打印功能统一用一种通用规范表示出来,这些通用规范叫做:库。库提供向上的接口称为API,程序员通过API调用库。POSIX是是目前通用的API执行规范,由IEEE规定,兼容Windows和Linux,syscall和libcall属于API范围。

应用程序直接运行在硬件上面,但是依赖于操作系统提供的环境,而且受制于操作系统的管理,这个环境称为:ABI。windows上的执行程序支持的是exe,msi格式,而Linux上支持的是ELF格式的,每一个应用程序都有一个执行入口,表明所支持的二进制格式。

简而言之,在windows上开发的源程序,在Linux上能编译,需要两边的API要一样,在windows上开发在windows上编译在Linux上要能运行,两边的ABI要一样。

时间: 2024-08-07 21:20:52

简述计算机运行机制的相关文章

.NET那点事 (02).NET运行机制

.NET运行机制1 .NET程序被编译成什么形式的代码2 JIT是如何工作的3 简述程序集的加载机制4 如何配置程序集的版本策略 1 .NET程序被编译成什么形式的代码 .NET程序在编写完成后,会经过第一次编译.对于C#而言,无论是VS IDE还是其他任何间接方式,本质上都是执行编译器cse.exe来编译C#代码.在这次编译之后,程序会被编译成中间代码(IL),并且所有必须的元数据和程序集会被一起打包加载到文件头上.编译后的文件是一个标准的PE/COFF应用文件,该文件的最开始的部分包含了PE

java运行机制详细

JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域. Java虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行. 1.为什么要使用Java虚拟机 Java语言的一个非常重要的特点就是与平台的无关性.而使用Java虚拟机是实

深入剖析.NET运行机制

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 28px 0; } /* HEAD

C语言工作原理和运行机制

计算机语言和人类高级语言的联系 可以说,所有的编程语言都是一个原理,使用人类能读懂的语言来编写源代码(source code),再利用编译器将源代码翻译成机器能读懂的语言,称为目标代码(object language). 在计算机底层硬件中,所有的数据都是以1和0两个高低电平来表示,计算机只能识别这两个电平. 编程语言类似于人类语言,我们很容易就能理解它的意思,编写代码的效率非常高. 但是,计算机只认识0和1,如何才能将“人类语言”转换成“0&1语言”呢?这就是编译器的工作了. 编译器能够将源代

【转载】Java JVM 运行机制及基本原理

原博地址:https://zhuanlan.zhihu.com/p/25713880 JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机. JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统"听",告诉它我们的程序需要做什么操作. 我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统

Java程序运行机制

高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型两种. 编译型语言是指使用专门的编译器,针对特定平台,也就是操作系统将某种高级语言源代码一次性翻译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序 的格式,这个转换过程称为编译,编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行. 有些程序编译结束后,还可能需要对其他编译好的目标代码进行连接,即组装两个以上的目标代码模板生成最终的可执行性程序,通过这种方式实现低层次的代码复用. 因为编译型语言是

《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制

内容 1.高级语言的运行机制 2.Java 语言的运行机制 1.高级语言的运行机制 高级语言主要分为编译型语言和解释型语言两类. 编译型语言是指使用专门的编译器.针对特定平台(操作系统)将高级语言源代码一次性“翻译”成该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行文件格式,这个转换过程称为编译(Compile).编译生成的可执行程序可以脱离开发环境,在特定的平台下独立运行.有些还需要链接其他编译好的目标代码 编译型语言是程序在执行之前需要一个专门的编译过程,把程序

java 运行机制和环境搭建--学习 java 归纳(1)

俗话说,工欲善其事必先利其器.想学习自动化必先学编程. 两个月前接触appium自动化框架,一个月前开始懂得这个道理,现在终于忙完了,有时间开始系统的学习,因为有学过java,所以接下来一段时间就开始 java的学习吧.希望有想学java的跟我一起学习讨论,希望大神路过指导批评,文笔水平真心有限,请见谅. 首先略过java的历史背景介绍.直接开始正题. 看一下java的程序的运行机制 .java文件是java程序的后缀的文件,就像word文档的后缀名是.doc一样.java程序人能读得懂,但是机

JAVA的技术特点及运行机制

2017.11.5 阴  一.Java的技术特点 Java包含了很多技术,从整体上分,Java技术可分为:Java编程语言和Java平台 Java编程语言是一种高级的编程语言,其特点有: >简单 >结构中立 >面向对象 >健壮性 >可移植性强 >高性能 >多线程 >安全性 >动态   1.跨平台性 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行.这是软件发展的趋势和编程人员追求的目标.之所以这样说,是因为计算机硬