《深入理解计算机系统》

news/2024/9/27 19:27:20

深入理解计算机系统

读书先看书之序言:明确他面向的读者——本书是一个导论课本,是面向程序员的,所以并不是那么深入(因为程序员也不需要了解那么多)所以这对于初学者来说是比较容易的,合适的入门之选

第一章:计算机系统漫游

相当于是一个粗略的介绍,导言,但是短小精干

1.1信息就是位+上下文

就像是离散数学里面的谓词逻辑公式,在没有具体的公里系统、结构,模型的情况下,完全就是字符串。所以有了解释才表达具体有效信息

1.2程序被其他程序翻译成不同格式

在 Unix 系统上,从源文件到目标文件的转化是由编译器完成的。主要是4个阶段的程序(预处理器cpp、编译器ccl、汇编器as、链接器ld)一起构成了编译系统(compilation system)

想一想先有鸡还是先有蛋?——当然是长期演化才形成的

1.3了解编译系统如何工作是大有裨益的

  • 优化程序性能
  • 理解链接时出错
  • 避免安全漏洞。如缓冲区溢出漏洞

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

1.4.1系统的硬件组成

  • 1.总线。贯穿整个系统的一组电子管线,它携带信息字节并且负责在各个部件之间传递,通常被设计成为传输定长的字节块,也就是字(word),具体取决于系统
  • 2.I/O设备。系统与外部世界的连通通道
    • 控制器和适配器的区别在适配器相当于可拓展的I/Oimg

    • 图1-4 一个典型的系统硬件组成

      CPU:中央处理器单元;ALU:算术/逻辑单元;PC:程序计数器;USB:通用串行总线

  • 3.主存
    • 一个临时储存设备,在处理器执行程序时,用来存放程序和程序处理的数据
    • 物理上,主存是一组动态随机存取储存器(DRAM)芯片
    • 逻辑上,存储器是一个线性的字节数组
  • 4.处理器
    • 中央处理器(CPU)是解释(或执行)储存在主存中指令的引擎。其核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)

    • 从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。处理器看起来就像是按照一个非常简单的指令执行模型来操作的,这个模型是由指令集架构决定的

    • 更深入的还有抽象化简的图灵机模型

    • 可能的操作

      • 加载:主存到寄存器覆盖

      • 存储:寄存器到主存覆盖

      • 操作:把两个寄存器的内容复制到ALU计算,并放回一个寄存器覆盖

      • 跳转:从指令中抽取一字复制到程序计数器覆盖

      • 现代处理使用了非常复杂的机制来加速程序执行;注意区分处理器指令集架构和处理器的微体系结构

        指令集架构描述每一条机器码效果

        微处理器结构描述处理器是如何实现

1.4.2运行hello程序

1.5高速缓存至关重要

系统花费大量时间把信息从一个地方挪到另一个地方,在程序员看来这就是花销,减慢了程序"真正"的工作。因此,系统设计者的一个主要目标就是使这些复制操作尽可能快完成or减少复制

1.6储存设备组成层次结构

根据局部性原理,可以在处理器和一个较大较慢的设备(如主存)之间插入一个更小更快的储存设备(如高速缓存)

思想就是将上一层次的储存器作为低一层次储存器的高速缓存

1.7操作系统管理硬件

计算机系统分层视图

可在图1-4中画出信息流,涉及一系列复制

操作系统两个基本功能:

(1)防止硬件被失控应用程序滥用;

(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备

操作系统通过几个基本抽象概念(进程虚拟内存文件)来实现这两个功能

操作系统提供的抽象表示

图1-11操作系统提供的抽象表示

Unix,Posix和标准Unix规范

不同的发展分支难以那一形成统一,阻碍兼容性,标准应运而生

1.7.1进程

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

看似是每个进程独占硬件,实则不是

并发运行则是说一个进程的指令和另一个进程的指令是交错执行的。这种实现机制称为上下文切换。当然,多处理器系统更加复杂

操作系统会保持跟踪进程运行所需的所有状态。这种状态就是上下文,包含许多信息,如PC和寄存器文件的当前值,以及主存的内容

图1-12 进程的上下文切换

如图 1-12 所示,从一个进程到另一个进程的转换是由操作系统内核(kernel)管理的

内核是操作系统代码常驻主存的一部分

应用程序执行系统调用(system call)控制权传递给内核,然后内核执行请求操作并返回应用程序

注意:内核不是一个独立的进程,她是系统管理全部进程所用代码和数据结构的集合

1.7.2线程

通常认为一个进程只有单一的控制流,但是现代系统中一个进程实际上可以由多个线程执行单元

每个线程都运行在进程的上下文中,并共享同样的代码和全局数据

网络服务器中对并行处理需求很大,线程成为越来越重要的编程模型。

因为多线程之间比多进程之间更容易共享数据,也因此线程比多进程更高效

1.7.3虚拟内存

虚拟内存是一个抽象概念,它为每一个进程提供了一个假象(虚拟),即每个进程都在独立的使用主存。

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

图 1-13 类Unix系统中进程的虚拟地址空间

每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能

  • 程序代码和数据。对所有程序来说,代码都是从同一固定地址开始,紧接着的是和C全局变量对应的数据位置
  • 堆。
  • 共享库。大约在地址空间的中间部分是一块用来存放像C标准库和数学库这样的共享库的代码和数据的区域。共享库的概念非常强大
  • 栈。位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩
  • 内核虚拟内存。地址空间顶部区域是为内核保留的。不允许程序读写这个区域的内容或者直接调用内核代码定义函数。它们必须调用内核来执行这些操作

虚拟内存的运作需要硬件和操作系统软件之间精密复杂的交互,包括堆处理器生成的每个地址的硬件翻译。

基本思想是把一个进程虚拟地址内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存

1.7.4文件

文件就是字节序列,仅此而已

若要显得高端一些,可以将数据的转移过程称之为

1.8系统之间利用网络通信

现代系统经常通过网络和其他系统连接到一起。从单独的系统来看,网络可以视为一个I/O设备

网络也可以看做总线的抽象的拓扑伸展

1.9重要主题

1.9.1Amdahl定理

Gene Amdahl,计算领域的早期先锋之一,对提升系统某一部分性能所代来的效果做出了简单却有见地的观察。

主要思想是,当我们对系统的某个部分加速时,其对于系统整体性能的影响取决于该部分的重要程度和加速程度。

若系统执行某个应用程序需要时间为\(T_{old}\)。假设系统某部分所需执行时间与该部分时间比例为\(\alpha\),而该部分性能提升比例为\(k\)。即该部分初始所需时间为\(\alpha T_{old}\),现在所需要时间为\((\alpha T_{old})/k\)。因此,总的执行时间应为

\[T_{new}=(1-\alpha)T_{old}+(\alpha T_{old})/k=T_{old}[(1-\alpha)+\alpha/k] \]

由此,可以计算出加速比\(S=T_{old}/T_{new}\)

\[S=\frac{1}{(1-\alpha)+\alpha/k} \]

注意,此处表示相对性能,但其实还有其他方法,比较模糊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/45884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

杨辉三角学习笔记

基本概念 这是一个杨辉三角。记 \(a_{i,j}\) 为第 \(i\) 行第 \(j\) 列的数。 \(a_{i,j} = a_{i-1,j-1} + a_{i-1,j}\) 示例代码 #include <bits/stdc++.h> using namespace std; int n; int a[105][105];int main(){scanf("%d",&n); //输入行数for(int i=…

【原创】EtherCAT主站IgH解析(二)-- Linux/Windows/RTOS等多操作系统IgH EtherCAT主站移植指南

本文探讨IgH EtherCAT Master针对Linux/Windows/RTOS等不同操作系统的移植。版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/ 前言 目前,EtherCAT商用主站有:Acontis、TwinCAT3、KPA、Codesys等,开源…

6.20-合并二叉树

617.合并二叉树 题意描述:给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的…

DIGAT论文阅读笔记

DIGAT: Modeling News Recommendation with Dual-Graph Interaction论文阅读笔记 Abstract ​ 现有的NR方法通常采用新闻-用户表示学习框架,面临两个潜在的限制。首先,在新闻编码器中,单个候选新闻编码存在语义信息不足的问题。其次,现有的基于图形的NR方法很有前景,但缺乏…

Manifest V3 getBackgroundPage() 返回 undefined 或报错 You do not have a background page. 的巨坑

省流:无解了,老老实实 sendMessage罢 这件事挺奇怪的,因为我看官方文档就是这么写的,也没什么特别说明,版本也是最新的,就挺奇怪的……在翻了一大圈,之后看到了这篇帖子:意思就是说,api 已经不能用了,文档因为人手不够就没更新……此外还有一个 chrome.runtime.getB…

【YOLOv8改进】MLCA(Mixed local channel attention):混合局部通道注意力(论文笔记+引入代码)

**摘要:**本文提出轻量级MLCA模块,结合通道、空间、局部及全局信息,提升网络表达效率。在MobileNet-Attention-YOLO(MAY)中应用MLCA,于PASCAL VOC和SMID数据集上对比SE和CA,mAP提升1.0%和1.5%。论文及代码链接提供。MLCA通过局部池化和反池化处理,增强通道交互和空间信息…

百度网盘字幕切换失败

PC端百度网盘客户端观看网盘视频生成的AI字幕切换失败,我的办法是切换失败改dns就好了,推荐一个工具方便更改。 DNS优选 https://www.lanzouj.com/ia5uxeh 软件来源https://www.52pojie.cn/thread-1129234-1-1.html 当你在线观看生成字幕后切换迟迟无反应或者一段时间后显示切…