随笔 - 40  文章 - 0  评论 - 0  阅读 - 1179

【读书笔记】《深入理解计算机系统》第一章 计算机系统漫游

一、编译过程

  • 源程序
    .c源程序是一个文本

  • 预处理
    处理#开头的预处理命令,获得预处理后的文本

  • 编译
    将.i文本文件翻译成.s文本文件
    .s文件是一个汇编语言程序

  • 汇编
    将.s文件翻译成机器语言指令,获得.o二进制文件

  • 链接
    合并调用的库函数的.o文件,最终获得可执行目标程序
    .exe也是二进制文件

二、处理器是如何读和解释内存中指令的

1.系统的硬件组成

  • 总线
    功能:贯穿整个系统的一组电子管道,在各个部件间传递信息字节。

    字长:总线通常传送定长的字节块,就是。字长是一个基本的系统参数,如64位(8字节),32位(4字节)。

  • I/O设备
    功能:系统与外界联系媒介。图中的键鼠、显示器、磁盘都是I/O设备。

    I/O设备通过控制器或适配器和总线相连。

    控制器是I/O设备或系统的电路板上芯片组
    适配器是插在主板插槽上的卡

  • 主存
    临时储存设备,在处理器执行程序时,存放程序和数据。

    物理上说由一组DRAM芯片组成。
    逻辑上说是一个线性的字节数组,索引从0开始。

  • CPU
    解释或执行主存中指令的引擎。

    核心是程序计数器PC,任何时刻,PC都指向主存中某条机器指令的地址。

    从系统通电开始,CPU执行PC指向的指令,然后PC指向下一条指令。

    寄存器临时存储字节数据,ALU对数据进行算术运算。

2.hello程序是如何执行的

当我们给计算机指令执行程序时:
①可执行文件经由总线被读到主存里。
②处理器开始执行机器语言指令。
③字符串从主存复制到寄存器文件,再从寄存器文件复制到显示器上。

三、高速缓存

1.为什么需要高速缓存

为了加快程序工作速度,需要使得数据的复制操作尽可能快地完成。
根据机械原理,大存储设备比小存储设备运行速度慢,而高速设备造价远高于同等的低速设备。因此为了在效率和成本之间找到平衡,我们采用更小更快的存储设备——高速缓存存储区cache来存放近期可能使用的信息。
在CPU和大而慢的存储设备(如主存)间加一个较小的cache是一个普遍的观念。

2. 计算机存储器层次结构

计算机中存储设备事实上都被组织成了一个层次结构。

四、操作系统对硬件进行管理

应用程序通过操作系统来对硬件进行操作。
操作系统通过几个基本的抽象概念来实现自己的功能。

文件-对I/O设备的抽象
虚拟内存-对I/O设备和主存的抽象
进程-对I/O设备、主存和CPU的抽象

1.进程和线程

进程是操作系统对一个正在运行的程序的一种抽象。

并发:进程间指令交错执行

并发通过进程间切换来实现,称为上下文切换。

上下文:进程运行所需所有状态信息
上下文切换:保存当前进程上下文,恢复新进程的上下文,然后把控制权交给新进程。

进程的切换由操作系统内核Kernel来管理。

内核:操作系统代码常驻主存的部分。
内核不是一个进程,是系统管理全部进程所用的代码和数据结构的集合。

程序需要操作系统提供的某些操作时,就通过系统调用指令把控制权交给内核,然后内核执行操作后返回应用程序。

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

线程都运行在进程的上下文中,共享进程的数据和空间。
多线程比多进程更好共享数据,线程一般而言也比进程高效。

2.虚拟内存

虚拟内存是一个抽象的概念。它为每个进程提供一种独占内存的假象。

每个进程看到的内存都是一样的,称为虚拟地址空间。

  • 程序代码和数据
    所有进程的代码都是从同一固定地址开始,然后是C全局变量对应地址。


  • 动态分配的。

  • 共享库
    存放C标准库和数学库等共享库的代码和数据。


  • 用于函数调用。
    调用一个函数,栈增。从一个函数返回,栈缩。

  • 内核

3.文件

就是字节序列,每个I/O设备都可看作是一个文件。
文件的概念为应用程序提供了一个统一的视图来看待各种I/O设备。
对于一个单独的系统而言,网络也可视作一个I/O设备,自然也可以视为一个文件。

五、其他

1.Amdahl定理

计算提升系统某一部分性能对系统整体性能提升的影响。

2.并行和并发

并发:同时具有多个活动的系统。
并行:使用并发来让系统运行得更快。

  • 线程级并发
    ①单处理器系统:单操作系统+单处理器。
    ②多处理器系统:单操作系统+多处理器。
    ③多核处理器:多个CPU集成到一个芯片上。

    ④超线程(同时多线程):允许一个CPU执行多个控制流。

    常规处理器需要大概20000个时钟周期来进行线程切换。
    超线程处理器可以在单个时钟周期基础上决定执行哪个线程。

  • 指令级并行
    可以同时执行多条指令。

  • 单指令、多数据并行
    即SIMD,允许一条指令产生多个可以并行执行的操作。
    如:float的加法运算。

3.抽象

posted on   damnglamour  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示