【计算机系统】第一章 计算机系统漫游


前言

学习计算机系统学习笔记


第一章 计算机系统漫游

1.1 信息就是"Bits"+“Context”

所有的信息都是以字节序列的方式储存数据的,每个字节包含8个只有0或者1数值的位(bit)。每个字节对应一个ASCII码来表示。每个文本行最后有一个不可见的\n(换行符),对应整数值为10。

注意:计算机表示的数不是数的真实值,只是无限接近于真实值的有限近似值

1.2 程序被其他程序翻译成不同的格式

在Unix系统里,从源文件到目标文件的转化是由编译器驱动程序完成的:

linux>gcc -o hello hello.c

C语言文件编译系统:

Created with Raphaël 2.3.0 start --(*.c) Preprocessor(cpp) --(*.i) Compiler(ccl) --(*.s) Assembler(as) --(*.o) Linker(ld) --(*.) end --(*)

预处理阶段:

cpp根据以#开头的命令告诉预处理器读取系统头文件*.h的内容,并把它直接插入进程序文本中,得到一个新的C程序(*.i

编译阶段:

ccl把文本文件`*.i` 翻译成`*.s`,它包含一个汇编语言程序。该程序包含函数main的定义:
main: 
	subq	$8, %rsp
	movl	$.LC0, %edi
	call	puts
	movl	$0, %eax
	addq	$8, %rsp
	ret

汇编阶段:

as将*.s翻译成机器语言指令,并打包成可重定位目标程序(relocatable object program),把结果保存到*.o中。*.o是一个二进制文件,包含函数main的指令编码

链接阶段:

ld把使用到的存在于其他的*'.o的函数的文件和本*.o合并,输出可执行文件,可以被加载到内存中,由系统执行

1.3 了解编译系统如何工作是大有益处的

- 优化程序性能

调整代码

- 理解link-time errors

- 避免安全漏洞

避免buffer overflow

1.4 处理器读取并解释储存在内存中的指令

源文件已被编译系统编译成可执行文件存放于磁盘上,在Unix系统上运行该可执行文件:

linux>./hello
[output]

1.4.1 系统的硬件组成

  1. Buses(总线)
    传送定长的字节块。常见的有4个字节(32位)和8个字节(64位)
  2. I/O Devices(输入输出设备)
    键鼠、显示器、磁盘。输入输出设备都连接在I/O bus上,I/O bus连接于I/O brige, I/O brige通过System bus和CPU里的Bus Interface,Memory Bus和Main Memory相连。
  3. Main Memory(主存)
    DRAM(动态随机存取存储器),是一个线性的字节数组,每个字节有唯一的地址(array index)。
  4. Prpcessor(处理器)
    CPU(central processing unit)中有一个Program counter(程序计数器)。CPU按照程序计数器指向的指令运行

1.4.2 运行hello程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值