notes

深入理解计算机系统

Capture One: A Tour of Computer Systems

理解hello.c的执行过程:

编译过程

C语言hello world程序的编译过程:
这里写图片描述
命令:Unix>gcc -o hello hello.c 生成hello可执行文件
分为四个阶段 预处理 -》 编译 -》装配 -》链接

  • 预处理:由预处理器(cpp)完成,处理源文件中的#开头的指令,修改C源程序,结果为以.i为后缀的C源程序;
  • 编译:编译器(cc1) 将文本文件hello.i 翻译(translate)成hello.s,其中包含了汇编语言程序(assembly-language program)。其中的每一条语句代表了一个低级的机器语言指令。
  • 装配:装配器(as)将hello.s翻译成机器语言指令,打包成可定位目标程序(relacatable object program)并将其存储在hello.o文件中,这是一个二进制文件,而不是文本文件。
  • 链接:printf函数保存在由C编译器提供的printf.o文件中,链接器(ld)将它与我们的hello.o文件链接起来,结果是hello可执行文件。
  • 执行过程

    执行命令unix> ./hello
    计算机系统的硬件结构:
    这里写图片描述

  • Bus:总线,在计算机的各个部分之间传递数据,通常以字(word)为单位传递信息。
  • I/O Devices:输入输出设备,每一个IO设备通过控制器或者适配器连接到Bus上。控制器通常是设备上或主板上的一组芯片,适配器通常是插在主板接口上的设备(卡,card)。它们的目标都是在设备和Bus之间传递信息。
  • Main Memory:主存,在程序执行是存储程序和数据,通常由DRAM组成.主存被组织成字节的线性数组,每一个字节都有自己唯一的地址,从0开始。
  • Processer:处理器,执行程序的引擎,其中的程序计数器始终指向主存中的一个机器指令。
  • 1,读取`hello`命令

    这里写图片描述

    2,将可执行文件拷贝到主存中

    这里写图片描述

    3,将`hello, world`字符串输出到屏幕上

    这里写图片描述

    计算机系统的cache和分层存储结构:

    缓存的原理:局部性(locality)
    分层结构中,寄存器为最上层,L0层,三级缓存分别为L1, L2, L3层。主存为L4层,等等。
    主要idea是上层存储器作为其下层的缓存。
    这里写图片描述

    操作系统

    两个目的:

  • 保护硬件不受失控的应用程序的破坏;
  • 提供给应用程序简单,统一的操作众多硬件的方法;
    操作系统通过基本的抽象做到这一点。
    这里写图片描述
  • Files:对IO设备的抽象,本质是字节序列。系统中所有的输入输出都是对文件的读写。
  • Virtual memory:对IO设备和主存的抽象;
  • Processes:对处理器,主存和IO设备的抽象;
  • Process (进程)

    进程是操作系统对一个运行的程序的抽象。处理器通过在不同的进程间切换(上下文切换 context switching)使得多个进程并发的执行;
    这里写图片描述

    进程虚地址空间

    这里写图片描述

  • 程序代码和数据:所有进程的代码都从同样的固定地址开始;
  • Heap:堆,这部分空间在运行时由mallocfree分配和释放;
  • shared libraries:共享库,如C标准库和math库等。
  • Stack:用户虚拟地址空间的最上层是栈,它在程序执行函数调用时分配,函数推出时释放;
  • Kernel virtual memory:内核虚拟内存,应用程序不能读或写这部分空间,也不能直接调用其中的函数;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值