深入理解计算机系统学习笔记(一)

本文深入探讨了计算机系统的各个方面,包括程序的编译过程,详细阐述了预处理、编译、汇编和链接四个阶段。此外,还讲解了系统硬件组成中的高速缓存(Caches)及其作用,以及操作系统如何管理硬件,特别是进程和线程的概念以及虚拟存储器的工作原理。

程序的编译过程

为了说明程序的编译过程,我们用经典的hello world程序作为例子

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("hello world!!!\n");
    return 0;
}

在linux系统中,我们用GCC编译器将源程序文件helloworld.c编译成可执行目标文件helloworld。

zengwh@zengwh:~/test_code$ gcc helloworld.c -o hello
zengwh@zengwh:~/test_code$ ./hello
hello wo
### 关于《深入理解计算机系统》的学习笔记 #### 书籍概述 《深入理解计算机系统》是本全面介绍计算机硬件和软件如何协同工作的教材。通过阅读此书并完成配套实验,读者能够获得对底层计算系统的深刻认识[^1]。 #### 学习进度规划 建议按照每周章的速度推进学习进程,在假期之前尽可能多地掌握书中内容。这样的节奏既不会过于紧张也能保证足够的消化时间。 #### 实验环节的重要性 除了理论部分,《深入理解计算机系统》还配有九个实验室项目(Lab)。这些实践练习对于巩固所学概念至关重要,因为动手操作可以帮助更好地理解和记忆抽象的知识点。 #### 编译过程解析 当涉及到具体技术细节时,比如编译流程,《深入理解计算机系统》会讲解到像GCC这样的C语言编译器是如何工作以及其生成汇编代码的过程。汇编代码作为机器码的文字表述形式起到了连接高级编程语言与实际执行指令之间的桥梁作用[^2]。 #### 汇编语言的作用 在编译过程中有个重要步骤是由编译器将预处理后的源文件转换成汇编语言文件。这个阶段产生的`.s`文件包含了对应于原始程序的系列精确描述低级别机器命令的语句。由于多种不同的高级语言编译器都可以产出相同的汇编语法格式,因此这步骤具有重要的意义[^3]。 ```c // 示例:简单的 C 函数及其对应的汇编代码片段 int add(int a, int b){ return a + b; } ``` ```assembly _add: leal (%rdi,%rsi), %eax ret ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值