码迷,mamicode.com
首页 > 编程语言 > 详细

通过C语言HelloWord程序对计算系统理解

时间:2017-10-08 10:19:37      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:inux   64位   变量   全局   指令   include   芯片   抽取   free   

HelloWord程序C语言代码

#include<stdio.h>

void main(){

  printf("HelloWord\n");

}

要了解一个helleword程序的运行,首先要知道一个计算系系统的基本组成部分:

1.中央处理单元CPU

  包括程序计数器(PC).寄存器文件,算术/逻辑运算器(ALU)高速缓存

  程序计数器是一个字长的存储设备(也叫寄存器),程序计数器永远指向主存中某个的机械语言指令(也就是含有有该指令的地址)。

  寄存器文件是有一些很小的由一个字长组成寄存器组成。每个寄存器都有唯一的名字。

  算术/逻辑运算器主要计算新的数据和地址。

  从计算机通电开始CPU就在不停的执行PC中的指令并更新PC,使其指向下一个地址。处理器看上去是由一个非常简单是指令模型来操作的,这个模型由指令集决定。处理器的操作是围绕PC,寄存器文件,主存,ALU来进行的。

  加载:将一个字节或者一个字从主存中复制到寄存器中,覆盖寄存器中的内容。

  存储:将寄存器中的一个字节或字复制到主存的某个位置中,覆盖主存中原来的内容。

  操作:将两个寄存器中的值复制到ALU中。ALU对着两个值进行运算在将得到的结果复制到一个寄存器中,覆盖原来的内容。

  转跳:从指令中抽取一个字,复制到PC中,覆盖PC中的值。

2.总线

  总线是连接计算机所有部位的通道,传送一个固定长度的字节块,这样的一个字节块的大小叫做字长,我现在用的操作系统就是8个字节组成的64位操作系统。

3.I/O设备

  I/O设备通过控制器(主板芯片)和适配器与字长相连。如硬盘。

4.主存

  主存物理上是由许躲动态随机存储器(DRAM)芯片组成,逻辑上是一个线性数组字节,每个字节有唯一的地址(数组索引)。

一个HelloWord程序的运行首先需要通过编译器进行编译,编译分为4个阶段:

1.预处理阶段,预处理器根据以#开头的命令修改HelloWord程序。将<stdio.h>加入到HelloWord程序中。一般文件用.i结尾。HelloWord.i

2.编译阶段,将修改过的程序变为汇编语言。文件以.o结尾。HelloWord.o

3.汇编阶段,将汇编语言转化为二进制,文件以.s结尾,HelloWord.s

4.连接阶段,连接C语言自己自带的函数,如HelloWord程序中的printf函数,printf存在于一个单独编译好的目标文件中。连接之后HelloWord程序将变成一个二进制文件,也是可执行文件。

HelloWord程序运行时,外壳程序将其读入到寄存器中,再把它存放在存储器中。处理器开始执行HelloWord程序中的main指令。指令将“HelloWord”字符串从主存复制到寄存器。然后显示到显示器上。

进程

  进程是对一个正在运行的程序的抽象。是对CPU,虚拟存储器,文件的抽象。一个系统可以运行多个进程,他们之间的切换时通过上下文来进行的。

线程

  进程并非只有一个单一的控制流,它是通过多种叫做线程的执行单元来实现的。

虚拟出存储器

  它为进程提供了一个假象,即每个进程单独占用主存。每个进程看到的都会一致的存储器,称为虚拟存储空间。Linux的虚拟存储空间包括如下

    程序代码和数据区:对于所有进程来说,代码是从一个固定地方开始的,紧接着是和C全局变量相对应的数据位置。代码和数据区是按可执行文件初始化的。

    堆:代码和数据区后面跟着运行时堆,代码和数据区一开始就被规定的大小。而堆不同,比如当调用malloc和free这样的C标准函数时,堆可以动态的扩大和缩小。

    共享库:大约在数据的中心位置。存放像C语言中的标准库和数学库这样共享库的数据和代码。共享库概念强大难懂。

    栈:实现函数调用,调用时扩大,函数返回时收缩。

    内核虚拟存储器:内核总是驻留在内存中,是操作系统的一部分,是为内核保留的,不允许应用程序读写和调用代码定义的函数。

文件就是字节序列。

线程可以并发进行,多线程(超线程)处理器。

指令集并行。指令放在流水线上执行。

单指令、多数据并行。

 

通过C语言HelloWord程序对计算系统理解

标签:inux   64位   变量   全局   指令   include   芯片   抽取   free   

原文地址:http://www.cnblogs.com/oh-my-gad/p/7636468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!