深入理解计算机系统读书笔记(一)
- 一个程序从文件到执行要经过这些过程:
源程序经过预处理器将声明的头部文件导入到程序中生成一个文本文件一般以.i结尾,然后经过编译器编译成汇编程序,一般以.s结尾,然后经过汇编器翻译成机器指令生成可重定位目标程序,此程序是一个二进制文件,然后经过链接器链接程序中使用的链接库函数最终生成一个可执行目标文件,最终该可执行文件被加载到内存中由系统执行。 - 适配器一般是插在主板卡槽中的一块卡,控制器一般是集成在IO设备上的核心控制芯片
- 虚拟内存结构:最上层空间为操作系统内核内存,向下依次为用户栈、共享库映射区域、运行时堆、程序代码和数据。
- 多核超线程:多核-多个CPU内核,超线程,单个CPU内核中能同时执行多个控制流,在core i7中单核可以同时执行两个控制流,这也就解释了我的一个疑惑,当初在编译linux内核的是有执行make -j number 为什么number会是系统内核数量的2倍,原来根源在这儿,果然看书能更增加人的知识面。该功能是通过在单个内核中备份某些硬件来实现的,如备份程序计数器(PC)及寄存器文件。
- 指令级并行,现代处理器可以同时执行多条指令的属性称为指令级并行
- 时钟周期,完成一轮0、1切换花费的时间,上网查的,不一定准确。
- 超标量处理器:一个周期可以执行超过一条指令的处理器
- 操作系统内核是应用程序与硬件的媒介,它提供三个基本抽象,文件时对系统I/O设备的抽象,虚拟内存是对主存和磁盘的抽象,进程是对处理器、主存、I/O设备的抽象,虚拟机是对操作系统、处理器、主存和I/O设备的抽象。
- amdahl定律描述了对系统某一部分进行功能升级对整体性能的影响。其主要思想是在对系统的某个部分进行加速时,其对系统整体性能的影响取决于给部分的重要性与加速程度。如果系统原来的运行时间为T1,假设某部分所需的执行时间占系统运行时间的a,这部分性能提升了k倍,那么不难得出新系统的整体运行时间T2=(1-a)T1+(aT1)/k,加速时间比S=T1/T2=1/((1-a)+a/k)。考虑极端的情况当k无限趋近于无穷大的时候S=1/(1-a),系统整体的性能提升程度取决于该部分的重要程度,该结论通过简单的思考其实也并不难以得出。
-对于一个4字节表示的32为无符号整数来说,其在内存中的存储可采取大端法与小端法两种方式,大端法即字节高位在前,小端法即字节低位在前,比如此处有内存地址0x100 0x101 0x102 0x103,那么采用大端法对于整数0x01234567的存储顺序为01 23 45 67 对于小端法存储顺序为67 45 23 01,当然采用哪一种存储方式往往是没有什么影响的,但是当微处理器固定下来后,数据的存储方式也就被固定了,当然也存在有支持双端法的处理器,由用户来选择使用哪一种存储顺序,当然具体采用那种存储顺序还取决于操作系统支持的存储方式,例如andriod就只支持小端的存储顺序。