《深入理解计算机系统》读书笔记
全书讲的什么
全书讲的是当系统执行程序时,系统发生了什么并且为什么会这样
以hello.c为例
#include<sutdio.h>intmain()
{
printf("hello worldn")
return0;
}
计算机漫游-计算机系统总览
主要讲了计算机系统总体是怎么工作的
计算机中的信息是如何表示的
系统中所有的信息-包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令
程序是如何被编译的
预处理器、编译器、汇编器、链接器一起构成了编译系统
程序由高级语言被编译系统编译为可以被机器读懂的低级语言(机器代码)
了解编译系统有什么好处
- 优化程序性能。比如一个函数调用的开销有多大
- 理解链接时出现的额错误。比如静态变量和全局变量的区别是什么
- 避免安全漏洞。安全编程的第一步就是理解数据和控制信息存储在程序栈上的方式会引起的后果
处理器如何读并解释存储在内存中的指令
比如在Unix系统中,通过shell输入./hello,“hello world”是如何展示到屏幕上的呢
linux> ./hellohello world
linux>
要想了解其中原理,需要先知道计算机的硬件组成
1)总线
贯穿整个系统的电子通道,传输的是定长的字节块。而字节中的字长是一个系统参数,各系统不相同,现在通常是4字节(32位),8字节(64位)
2)I/O设备
I/O(输入/输出)设备是系统与外部世界的联系通道。键盘、鼠标、显示器、磁盘都输入I/O设备,并通过控制器或者适配器与I/O总线相连
3)主存
主存是一个临时存储设备,在处理器处理程序过程中,临时存储程序和数据,从物理上讲,是由一组动态随机存取存储器(DRAM)芯片组成的,从逻辑上讲,存储的是一个线性的字节数组,每个字节都有唯一的地址(数组索引)。
4)处理器
中央处理单元(CPU),简称处理器,是解释或执行存储在主存中指令的引擎。处理器的核心是寄存器(存储设备),称为程序计数器(PC)。PC用来指向主存中的指令。处理器处理主存中的指令后,会更新程序计数器,然后指向下一个指令,这个模型是由指令集架构决定的。
回到刚才的问题,“hello world”是如何展示到屏幕上的呢?
1)shell程序检测到键盘的回车键,会将“hello world”字符串数据从磁盘复制到主存中
2)一旦数据被复制到主存中,处理器会将数据复制到寄存器中,再由寄存器复制到显示设备中
中间会经过多次复制操作,这肯定是耗时的,如何优化呢,通过缓存
什么是高速缓存
为了减少多次复制操作的开销,系统增加了高速缓存存储器
存储设备层次结构是怎样的
从上到下,存储容量越来越大,而存储设备越来越大,上一级是下一级的高速缓存,即寄存器文件时L1的高速缓存,L1是L2的高速缓存
操作系统如何管理硬件
操作系统可以看作应用程序和硬件之间插入的一层软件,用来
- 防止硬件被失控的软件滥用
- 向应用程序提供简单一致的机制来控制复杂的低级硬件设备
而操作系统通过进程、文件、虚拟内存来实现这两个功能
以上是 《深入理解计算机系统》读书笔记 的全部内容, 来源链接: utcz.com/a/19964.html