csapp读书笔记1-计算机系统漫游

数据信息

hello.c

#include <stdio.h>

int main()
{
    printf("hello,world\n");
    return 0;
}

文件如果只含有ascii字符,那么就是文本文件,如果包含其他字符,就是二进制文件

编译

hello.c经过四个步骤,生成hello可执行文件

  • 预处理:读取源文件hello.c,识别#include<stdio.h>的头文件内容,插入源文件,生成hello.i
  • 编译:将hello.i翻译生成汇编代码hello.s
  • 汇编:将hello.o翻译生成机器语言文件hello.o
  • 链接:hello程序调用了printf,这个函数已经存放在预编译的文件printf.o中,链接步骤就是用来将这个函数整合到hello.o中,最后生成hello文件。该文件可以被操作系统执行

了解编译系统的好处

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

计算机硬件组成

  • 总线:贯穿硬件系统的一组电子通道,在各个部件之间传输字节。字节数据以字(word)为单位传输,现代计算机都是字长都是4字节或者8字节。有IO总线、系统总线、内存总线
  • IO设备:系统与外部联系的通道,每个IO设备通过控制器或适配器与IO总线想连。图中包含四个IO设备:鼠标、键盘、显示器、硬盘
  • 主存:由一组动态随机访问存储器(DRAM)组成,用来存取数据
  • 处理器:读取执行存储在主存中的指令。包含:程序计数器(PC),用来存储内存中某条指令地址;寄存器文件,存储少量数据;算法/逻辑单元(ALU),用来做简单计算

hello执行流程

首先,当输入"./hello"时,shell读取输入字符到寄存器,然后放入主内存

接着,当输入回车时,shell查找硬盘上的hello文件,加载进主内存

最后,cpu读取hello程序中main函数的机器指令并执行。示例指令中,会从主存拷贝"hello,world\n"字符串的字节到寄存器文件,再从寄存器文件拷贝到显示设备,最终显示在屏幕

高速缓存

hello程序执行步骤存在大量从内存到寄存器之间的拷贝操作。相比较寄存器,在内存操作数据会慢很多,大量拷贝操作存在于两端时,会导致内存端成为瓶颈。为了打破瓶颈提高性能,系统设计者提出了高速缓存的概念。它位于寄存器和主存之间。当缓存大量命中时,可减少cpu对主存数据的依赖。

扫描二维码关注公众号,回复: 128137 查看本文章

考虑两个高速缓存的情况:寄存器-L1-L2-主存

L1和L2通过静态随机访问存储器(SRAM)硬件技术实现,L1位于处理器芯片,访问速度媲美寄存器,L2通过特殊总线连接处理器,速度为L1的5倍,主存在最后,访问速度为L2的5-10倍

存储器层次结构

操作系统管理硬件

  • 进程:软件上说是操作系统对正在运行的程序的抽象,硬件上说是操作系统对处理器、主存、IO设备的抽象,利用主存和IO设备存储进程的指令和数据,利用处理器切换执行多进程
  • 线程:在进程内,共享内存和数据,更加轻量级
  • 虚拟内存:操作系统对主存和IO设备的抽象,利用主存和IO设备存储虚拟内存的数据
  • 文件:操作系统对IO设备的抽象,操作文件就是操作各个IO设备

网络

网络也是一个IO设备。系统将数据从主存拷贝到网络适配器,经过网络,目的机器的系统读取网络适配器上的数据,拷贝到主存。这样就完成了数据在网络间的传输

并发与并行

现代计算机发展的两个目标:计算机做的更多,计算机运行更快。前者也就是并发,后者也就是并行,这两个关键字在现代计算机的体现如下

  • 线程级并发:一个进程中有多个控制流,采用多核处理器,可以使同时执行这些控制流,以加快程序运行速度
  • 指令级并行:现代处理器可以在一个周期处理多条指令
  • 单指令、多数据并行(SIMD并行):将一条指令拆成多条,并行执行

图示为四核处理器,每个核都有自己的寄存器、L1高速缓存(分为数据、指令)、L2高速缓存,四个核在一个芯片上,共享一个L3高速缓存,所有处理器芯片共享一个主存

抽象

总结

源程序以ascii文本形式存储,被编译器和链接器翻译成可执行的二进制文件。

处理器读取并处理二进制程序中的指令和数据时,会花费大量时间在寄存器、主存、IO设备之间拷贝数据。为了加速该过程,系统引入高速缓存,将系统分为cpu寄存器-高速缓存-主存-硬盘的多层结构。

操作系统内核作为应用程序和硬件之间的媒介,提供了一层抽象。

  • 文件:对IO设备的抽象
  • 虚拟内存:对主存和IO设备的抽象
  • 进程:对处理器、主存、IO设备的抽象

虚拟机又提供了基于操作系统、处理器、主存、IO设备的抽象

网络作为一种特殊的IO设备,提供了计算机系统之间通信的能力

猜你喜欢

转载自my.oschina.net/u/1378920/blog/1093916