《深入理解计算机系统》--notes--day one

Content

1.1 信息就是位 + 上下文

hello 程序的生命周期是从一个源程序(或者说是源文件)开始的。源程序由 0 和 1 组成的位(bite),8 个位为一个字节。

hello.cASCII文本表示

# i n c l u d e SP < s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62
\n \n i n t \n m a i n ( ) \n { \n SP SP SP
10 10 105 110 116 10 109 97 105 110 40 41 10 123 10 32 32 32
SP p r i n t f ( h e l l o , SP w o
32 112 114 105 110 116 102 40 34 105 101 108 108 111 44 32 119 111
r l d \ n ) ; \n SP SP SP SP r e t u r
114 108 100 92 110 34 41 59 10 32 32 32 32 114 110 116 117 114
n SP 0 ; \n } \n
110 32 48 59 10 125 10

1.2 程序被其他程序翻译成不同版本

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

Linux$ gcc hello.c -o hello

编译执行四个阶段

Created with Raphaël 2.1.2预处理器(cpp)预处理器(cpp)编译器(ccl)编译器(ccl)汇编器(as)汇编器(as)链接器(ld)链接器(ld)hello.c 源程序(文本)hello.i 修改了的源程序(文本)hello.i 汇编程序(文本)hello.o 可重定位目标程序(二进制)printf.ohello 可执行目标程序(二进制)
预处理

读取头文件,修改源程序。

编译阶段

翻译成文本hello.s,其中包含汇编语言程序。main函数如下:

1  main:
2      subq        $8, %rsp
3      movl        $.LC0, %edi
4      call          puts
5      movl        $0, %eax
6      addq       $8, %rsp
7      ret
汇编阶段

翻译成机器语言hello.o文件。

链接阶段

合并其他库函数文件到hello文件中(这里指printf.o文件)。

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

linux$ ./hello
hello, world
linux$

1.4.1 系统的硬件组成

1. 总线

贯穿整个系统的是一组电子管道,称作总线。

2. I/O 设备

I/O (输入/输出)设备是系统与外部世界的联系通道。
一个典型系统的硬件组成

3. 主存

主存是一个临时存储设备(动态随机存取存储器DRAM芯片组成),在CPU执行程序时,用来存放程序和程序处理的数据。

4. 处理器

中央处理单元(CPU),简称处理器,是解释(或者执行)存储在主存中指令的引擎。

1.4.2 运行 hello 程序

从键盘上读取hello命令
从硬盘加载可执行文件到主存
将输出字符串从存储器写到显示器

1.5 高速缓存至关重要

高速缓存存储器

1.6 存储设备形成层次结构

存储器层次结构示例

1.7 操作系统管理硬件

操作系统有两个基本功能:
(1)防止硬件被失控的应用程序滥用;
(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
操作系统提供的抽象表示

1.7.1 进程

进程是操作系统一个正在运行的程序的抽象。而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。
操作系统保持跟踪进程运行所需的所有状态信息。这种状态称为上下文
进程的上下文切换

1.7.2 线程

一个进程可以由多个线程的执行单元组成。

1.7.3 虚拟内存

虚拟内存是一个抽象概念,其为每个进程提供一个假象,即每个进程都在独占地使用主存。
每个进程看到的内存都是一致的,称为虚拟地址空间
进程的虚拟地址空间
几个概念:

程序代码和数据。
堆。
共享库。
栈。
内核虚拟内存。

1.7.4 文件

文件就是字节序列。

网络也是一种 I/O 设备

1.9 重要主题

1.9.1 Amdahl 定律

若系统执行某应用程序需要时间为Told。 假设系统某部分所需执行时间与该时间的比例为a, 而该部分性能提升比例为k。即该部分初始所需时间为a * Told, 现在所需时间为(a * Told)/ k。因此,总的执行时间应为:
Tnew = (1 - a) * Told + (a * Told) / k = Told * [(1 - a) + a / k ]
由此,可以计算加速比 S = Told / Tnew
S = 1 / [(1 - a) + a / k ]

1.9.2 并发和并行

并发指一个同时具有多个活动的系统。
并行指用并发来使一个系统运行的更快。
不同的处理器配置分类。随着多核处理器和超线程的出现,多核处理器变得普遍了
多核处理器的组织结构。4个处理器核集成在一个芯片上
超线程有时称为同时多线程(simultaneous multi-threading),是一项允许一个CPU执行多个控制流的技术。
指令级并行在较低的抽象层次上,现代处理器可以同时执行多条指令的属性。
超标量(super-scalar)处理器是指处理器可以达到比一个周期一条指令更快的执行速率。
单指令、多数据(SIMD并行)指在最低层次上,拥有特殊的硬件的处理器,允许一条指令产生多个可以并行执行的操作。

1.9.3 计算机系统中抽象的重要性

抽象的使用是计算机科学中最为重要的概念之一。
例如: 应用程序接口(API
例如:指令集架构提供了对实际处理器硬件的抽象。
计算机系统提供的一些抽象。计算机系统中的一个重大课题就是提供不同层次的抽象表示,来隐藏实际实现的复杂性

1.10 小结

计算机系统是由硬件和系统软件组成的,他们共同协作以运行应用程序。计算机内部的信息被表示为一组组的位(bite),他们依据上下文有不同的解释方式。程序被其他程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制的可执行文件。
处理器读取并解释存放在主存里的二进制指令。因为计算机花费了大量的时间在内存、I/O 设备和CPU寄存器之间复制数字,所以将系统中的存储设备划分为层次结构——CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和硬盘存储器。在层次模型中,位于更高层的存储设备比底层的存储设备要更快,单位比特造价也更高。层次结构中较高层次的存储设备可以作为较低层次设备的高速缓存。通过理解和运用这种存储层次结构的知识,程序员可以优化C程序的性能。
操作系统内核是应用程序和硬件之间的媒介。它提供三个抽象: 1)文件是对 I/O 设备的抽象; 2) 虚拟内存是对主存和硬盘的抽象; 3) 进程是处理器、主存和 I/O 设备的抽象。
最后,网络提供了计算机系统间通信的手段。从特殊系统的角度来看,网络是一种 I/O 设备。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章