美文网首页
计算机系统

计算机系统

作者: 小灰灰1999 | 来源:发表于2018-06-26 10:20 被阅读9次

计算机系统漫游


术语解释

位:数据存储的最小单位。在计算机中的二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit)。

字节:字节(Byte /bait/ n. [C])是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八位, [1] 也表示一些计算机编程语言中的数据类型和语言字符。

机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。

一个程序的执行过程

以一个简单的hello.c 的程序来简单说明:

#include
int main()
{
         print("hello,world\n");
         return 0;
}

存储

字节表示程序中的某些文本字符,大部分计算机系统用ASCII标准来表示这些文本,hello.c的程序是以字节序列的方式存储在文件中的,每个字节都有一个整数值(ASCII码)。

为了能在系统上执行hello.c程序,每条c语言都必须被其他程序转化为一系列低级机器语言指令,然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件存储起来,目标文件也称为可执行文件。

编译

编译系统包括:预处理器,编译器,汇编器,链接器


image.png

1. 预处理阶段

预处理器(cpp)根据以字符#号开头的命令,修改原始的c程序。比如hello.c中的第一行#include <stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序文本中,结果得到了另一个C程序,通常是以.i为扩展名。在Linux下我们用GCC命令:

gcc -E hello.c -o hello.i

得到一个hello.i文件,然后查看文件内容发现,该程序依然是C语言程序,只不过多了头文件stdio.h的内容。

2. 编译阶段

编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。汇编语言中每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令。其实汇编语言是非常有用的,它为所有的高级语言提供了一种通用的输出语言。比如C编译器和Fortran编译器产生的输出文件用的都是一样的汇编语言。在Linux下,我们用命令:

gcc -S hello.i -o hello.s</pre>

得到一个hello.s汇编程序,内容如下:

.file    "hello.c"
    .section    .rodata
.LC0:
    .string    "hello world!"
    .text
    .globl    main
    .type    main, @function
main:
.LFB0:
    .cfi_startproc
    pushq    %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $.LC0, %edi
    call    puts
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size    main, .-main
    .ident    "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)"
    .section    .note.GNU-stack,"",@progbits

hello.s

3. 汇编阶段

汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可定位目标程序的格式,并将结果保存在目标文件hello.o中,hello.o是一个二进制文件,它的字节编码是“机器语言指令”而不是“字符”,所以,我们用文本编辑器打开hello.o文件看到是会是一堆乱码。使用gcc命令:

gcc -c hello.s -o hello.o

将得到hello.o文件,用vim打开是乱码

4. 链接阶段

我们注意到,hello.c中有一个printf函数,它是每个C编译器都会提供的标准库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中。链接器(ld)就是负责处理这种合并。最后得到hello文件,一个可执行目标文件(可执行文件),可被加载到内存中,由系统执行。使用命令:

gcc hello.o -o hello</pre>

得到hello文件,可执行文件

自此,编译系统的整个过程大致如此。总结一下,从源程序到目标文件(可执行文件)的转化是通过编译系统完成的,编译系统包含四个阶段:预处理,编译,汇编,链接。一般的编译驱动程序如GCC都实现了编译系统的所有功能,我们用编译驱动程序直接就可以实现源程序到目标文件的转化。
那么在程序执行过程时,具体的情况又是怎样的呢

参考

百度百科--位:https://baike.baidu.com/item/%E4%BD%8D/7202673
百度百科--机器语言:https://baike.baidu.com/item/%E6%9C%BA%E5%99%A8%E8%AF%AD%E8%A8%80/2019225?fr=aladdin
文本文件和二进制文件的区别:https://www.cnblogs.com/macliu/p/6340131.html

相关文章

  • 计算机系统 - 目录

    计算机系统 计算机系统001 - 电学概念 计算机系统002 - 数值运算 计算机系统003 - 硬件体系 计算机...

  • Linux入门基础

    计算机系统一:先来认识一下计算机系统的组成计算机系统由硬件(Hardware )系统和软件(software)系统组成

  • 第二部分 计算机组成原理(45 分)

    (一)计算机系统概述 1、计算机发展历程2、计算机系统层次结构(1)计算机系统的基本组成(2)计算机硬件的基本组成...

  • 计算机组成原理

    计算机系统概论 计算机的发展及应用 系统总线 存储器 输入输出系统 计算机运算系统 指令系统 CPU的结构和功能 ...

  • 《计算机组成原理》笔记一

    [toc] 纲要: 计算机系统简介 计算机系统基本组成 计算机硬件主要技术指标 1.1 计算机系统简介 Q1:现代...

  • 01_计算机系统的组成

    一、计算机系统的基本组成结构 计算机系统由硬件系统和软件系统两大部分组成。 1.硬件系统 计算机硬件系统是由运算器...

  • 第一周 Linux基础入门(Mgedu)

    一、计算机的组成及功能 计算机系统由硬件系统、软件系统两部分组成。 1.1 硬件系统(Hardware) 硬件系统...

  • 计算机系统组成

    计算机系统组成(内容资料来源于网络,本文仅做归纳整理) 一.计算机系统概述 一个完整的计算机系统包括硬件系统和软件...

  • 微机原理第一章总结

    微型计算机系统导论 1.计算机系统计算机系统 cpu:微处理器称为cpu,是计算机的核心。cpu结构 内存储器:1...

  • Linux系统认知

    1.描述计算机的组成及其功能 (一)一个完整的计算机系统由计算机硬件系统及软件系统两大部分构成。 (1)计算机硬件...

网友评论

      本文标题:计算机系统

      本文链接:https://www.haomeiwen.com/subject/fotpyftx.html