csapp笔记

gcc -o hello hello.c 完成对源代码的编译,生成可执行程序hello

这个过程虽然通过一条命令完成,但是其实经历了四个阶段

分别是预处理(cpp),编译(ccl),汇编(as),链接(ld)

预处理:hello.c经过预处理器得到hello.i(还是c程序,仍是文本文件)

编译:编译器将hello.i翻译成hello.s

汇编:汇编器根据指令集将汇编程序hello.s翻译成机器指令,得到可重定位目标文件hello.o,hello.o虽然是一个二进制文件,但还不能执行

指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。

在hello这个程序中,我们调用了printf这个函数,这个函数是标准c库中的一个函数,它在名为printf.o的文件中,链接器负责把hello.o和printf.o进行合并,得到可执行目标文件hello

在中断(shell)中输入./hello即可运行该程序(输出hello,world)

接下来了解一下计算机硬件组成

CPU:pc(计数器)实质上是一个大小为一个字的存储区域,在32位系统中,一个字是四字节,

在64位机器,一个字就是八字节,可以pc理解位就是一个存储空间,里面存放的是某一条指令的地址,在电脑运行的过程中,cpu不断地在执行pc指向的指令,然后更新pc,让它指向下一条要执行的指令(指令不一定相邻)

reg(register):临时存放变量的空间

alu:算数逻辑单元

主存(内存):内存主要存放程序指令以及数据

输入./hello,终端会将输入的程序逐一读入寄存器,处理器会把输入的hello字符串放入内存中,

输入回车,终端就知道我们完成命令的输入,然后开始执行指令来加载可执行文件hello

这些指令将hello中的数据(显示输出的“hello,world\n”)和代码从磁盘复制到内存,复制过程利用dma技术,可以不经过处理器,直接从磁盘到达内存,cpu开始执行main函数中的代码,cpu会将“hello,world\n”内存复制到寄存器,再从寄存器复制到显示器

无论是shell还是hello程序都没有直接访问键盘、显示器、磁盘等设备,真正操控硬件的是操作系统,可以把操作系统看成应用程序和硬件之间的中间层,所有应用程序对硬件的操作必须通过操作系统来完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值