计算机的组成

计算机是由硬件和软件组成的,这两个部分共同协作完成程序的运行。这两部分如何协作完成程序的运行,是本系列的重点。

信息的表示

信息的表示说到底就是位加上下文。举个小例子,比如11011101这一串二进制,在表示整数的时候它表示221,但是如果放在JAVA的class文件当中,它可能代表一个JVM的指令。

程序的编译

对于一个简单的C语言程序来说,一般要经过预处理器、编译器、汇编器和链接器的处理,才能被翻译成一段可执行的二进制文件。

比如对于一个简单的C语言程序,如下。

#include <stdio.h>int main()
{
printf("hello,world\n");
}

我们保存在hello.c当中,那么它的翻译过程如下。

程序的运行

程序的运行由解释器负责,它将逐个解释最终生成的二进制文件并执行。

计算机的硬件组成

首先,我们来看下计算机中硬件的大致分布,如下图。

其中有几个非常重要的部分,一一看下都是什么作用。

总线贯穿整个系统的是一组电子管道(其实就是传输数据的线路),也就是总线。总线传送的是字,字的大小与系统相关,比如在32位操作系统当中,一个字是4个字节。

I/O设备I/O设备是系统与外部联系的通道。I/O设备(键盘、鼠标、显示器等)由控制器(USB控制器)或者适配器(图形适配器,也就是显卡)与I/O总线相连,两者的区别在于一个是主板上的芯片组,一个是主板插槽上的卡。

主存它是计算机中的一个临时存储设备,在处理器执行程序的时候,主存就是临时存放数据的地方。物理上来说,它是由动态随即存取存储器芯片组成,逻辑上来说,它是一组连续的字节数组,每一个字节都有唯一的地址。

处理器全称中央处理单元,是解释存储在主存中指令的引擎。处理器的核心是一个程序计数器,它在整个计算机运行的期间都会指向一个主存中的一个内存地址,而地址当中则是一个计算机指令。处理器所做的,就是不停的执行程序计数器所指向的每一条指令。处理器所做的操作是围绕主存、寄存器文件以及算术/逻辑单元进行的,这里面处理器做的最多的动作就是加载(从主存将数据复制到寄存器)、存储(从寄存器将数据复制到主存)、操作(将两个寄存器的内容复制到算术/逻辑单元进行操作,结果会再次复制到寄存器)以及跳转(改变程序计数器当中的内容)。

处理器当中提到的是指令集结构,不过实际当中指令集的实现是非常复杂的,这么做的目的是为了加速CPU的运算速度。我们可以这样去区分指令集机构以及微体系结构,指令集结构是指令集的抽象描述,而微体系结构则是这个抽象描述的某一个具体实现,类似于JAVA虚拟机与JAVA虚拟机实现的关系。

总结 :计算机是由软件与硬件组成的,而硬件又包括了总线、I/O设备、主存以及处理器,其中信息是由位以及上下文表示的,而信息则是从I/O设备以位的形式通过总线进入主存,然后由处理器从主存将信息取出处理。

一个程序的执行,是经历了预处理器、编译器、汇编器以及链接器的处理之后,才最终成为可执行的文件。当程序成为可执行文件时就已经保存在了磁盘上,具体的执行过程在下一章再总结。

Hello world的执行

我们以linux系统为例,当我们执行一个简单的打印字符串的C程序时,我们需要在命令行输入./hello以及回车去执行该程序。在整个执行过程中,计算机主要做了三件事,或者说经历了三个阶段来完成程序的运行。

1、linux的外壳扫描用户输入的字符

当我们在键盘输入./hello时,linux的外壳程序(也就是命令行)会扫描我们输入的字符,将这些字符一一读入到寄存器当中,然后再一一放入主存。换句话说,./hello这几个字符是经过了CPU中的寄存器从而到达了主存。下面LZ将这一过程的图示画出来。

2、加载hello文件的代码以及数据到主存

这一过程的触发是在我们按下回车的那一刻,此时系统会将存储在磁盘上的hello文件加载到主存,而此过程会利用一种叫做存储器存取的技术,使得数据不通过寄存器直接到达主存。下图是这一过程的图示。

3、根据主存中代码的指令执行程序

在代码以及程序所需要的数据加载到主存后,CPU就开始从main函数的起始位置,依次执行代码中的指令。由于我们的代码只是简单的输出“hello world”这样的字符串,因此系统只是将这个字符串依次加载到寄存器,然后传输到显示器终端显示。这个过程如下图。

总结 :本章只是简单的介绍了一下hello程序的执行过程,我们可以简单的这么理解,hello程序的执行,其实就是将数据和代码加载到主存,并由CPU从主存获取指令从而执行的过程。

原文链接:http://www.cnblogs.com/zuoxiaolong/archive/2013/09/20/computer1.html

计算机原理之程序是怎么运行的相关推荐

  1. 计算机系统原理之程序是怎么运行的

    计算机的组成 计算机是由硬件和软件组成的,这两个部分共同协作完成程序的运行.这两部分如何协作完成程序的运行,是本系列的重点. 信息的表示 信息的表示说到底就是位加上下文.举个小例子,比如1101110 ...

  2. 【计算机原理与接口技术(UNIX)⑲ 完结篇】——可编程计数器 8254 [ 流光发生器、8254工作方式检测程序的设计]

    ✅ 通过对 [计算机与UNIX汇编原理 ① ~ ⑫]的学习,我们已经大致掌握了汇编程序设计的相关知识 接下来,我将其分栏名改为 [计算机原理与接口技术(UNIX) ],重点将放在 "计算机原 ...

  3. 打开计算机没有运行程序吗,打印机后台程序服务没有运行怎么办

    打印机后台程序服务没有运行怎么办 由于目前使用的操作系统多数都是windows xp系统与windows 7操作系统,虽然在这2个版本系统中开启服务程序原理相同,但操作有小区别,编辑这里分别介绍在wi ...

  4. python解析器原理_Python程序运行原理图文解析

    本文研究的主要是Python程序运行原理,具体介绍如下. 编译型语言(C语言为例) 动态型语言 一个程序是如何运行起来的?比如下面的代码 #othermodule.py def add(a, b): ...

  5. Linux——权限|shell运行原理——外壳程序|Linux权限的概念|对人操作|角色和文件操作|文件类型访问权限|修改权限ugo+-|8进制|修改权限|更改文件的拥有

    目录 shell运行原理--外壳程序 Linux权限的概念 对人操作 角色和文件操作 文件类型

  6. 一起来探索从双击程序到开始运行期间计算机经历了哪些过程

    前言 经常打开电脑双击桌面上的图标,之后就会跳出程序的界面,那么童鞋们有想过这期间计算机经历了什么吗?正所谓知其然知其所以然,了解了指不定还有机会向妹子科普一下(●ˇ∀ˇ●). 计算机结构 一个程序想 ...

  7. 重学计算机(六、程序是怎么运行的)

    今天我们又来肝一个重要的主题.不知道大家有没有思考过,程序是怎么运行起来的? 肯定有同学说在linux下./hello_world就可以执行了,在windows下双点hello_world.exe文件 ...

  8. 联想计算机管理员权限设置,管理员身份运行,详细教您如何设置以管理员身份运行程序...

    在使用电脑的过程中,难免会遇到一些权限问题,而一些软件则需要以管理员的身份才能运行,如果我们经常需要打开这个软件,每一次都需要右击选择"以管理员的身份运行"选项才能打开,比较麻烦. ...

  9. 游戏抽奖计算机原理,VB6.0编写电脑抽奖程序源码教程

    近年来在娱乐节目之中常常见到利用电脑来抽奖,笔者对其发生了兴趣遂自己动手用VB编了一个小程序来实现电脑抽奖的小功能,其原理如下: 主要利用VB中的Rnd函数,来实现随机查找和打乱排序的功能,从而实现随 ...

最新文章

  1. ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引
  2. linux下载哪个python版本-Linux升级python版本
  3. android 资源引用 自定义标题栏
  4. Tick技术栈之InfluxDB
  5. 获取当前ip_教程丨WIN10系统下设置固定IP或动态IP
  6. python获取软件窗口句柄_Python获取浏览器窗口句柄过程解析
  7. Linux之SWIG安装(无需安装pcre依赖)
  8. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
  9. 2022还不错的和平精英画质助手iApp源码+附成品
  10. 淘口令 java,抓包获取淘口令的解决方案
  11. 云服务器怎么安装声音驱动_GPU云服务器如何安装NVIDIA Tesla驱动
  12. 手把手教你搭建基于 MarkDown 的 Wiki 系统
  13. 你的APK安全吗?来WeTest免费测!
  14. 光环python培训
  15. 抓包实现原理与反抓包
  16. 2021-金三银四跳槽-还愿
  17. linux超级管理员名字修改,linux添加超级管理员用户,修改,删除用户
  18. win10隐藏输入法指示器的设置方法
  19. 配置七牛云cdn加速
  20. 统计3个班成绩情况,每个班有5名同学 求出各个班的平均分和所有班级的平均分(学生成绩键盘输入) 同级生哪个班及格人数,每个班5名同学

热门文章

  1. 节约里程法java代码_患者,男,70岁,有多年排尿困难,呈淋漓状,近2年来双侧腹股沟区出现半年圆形肿块,站立时明显,平卧后消失,体检时压迫内环肿块仍出现,诊断为...
  2. 角谷定理python输出变化过程,Python 100例——第十章----定理与猜想
  3. python单位根检验看结果_Python ADF 单位根检验 如何查看结果的实现
  4. 最新 | 2018年无人机研发热点
  5. if函数如何嵌入多个android,Android中多个EditText输入效果的解决方式
  6. 《c语言从入门到精通》看书笔记——第3章 数据类型
  7. 消息队列服务器 轻量,PHP的轻量消息队列php-resque使用说明
  8. mysql改变地址_mysql 修改数据库存储地址
  9. java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】
  10. java后台处理ajax请求_java后台怎么对ajax请求的内容进行xss转义?