首页 > 其他分享 >《深入理解计算机系统》

《深入理解计算机系统》

时间:2024-06-20 22:53:55浏览次数:12  
标签:计算机系统 主存 系统 理解 深入 处理器 进程 alpha 内核

深入理解计算机系统

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

第一章:计算机系统漫游

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

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} \]

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

标签:计算机系统,主存,系统,理解,深入,处理器,进程,alpha,内核
From: https://www.cnblogs.com/Hai-ke/p/18259616

相关文章

  • 【AI原理解析】— 字节豆包模型
    目录1.数据收集与处理2.模型架构3.训练过程4.原理细节5.推理与生成6.模型优化与迭代7.规模与参数8.应用场景1.数据收集与处理数据收集:豆包大语言模型基于大规模的数据集进行训练,这些数据通常包括网络文本、书籍、新闻、社交媒体内容等。数据清洗:收集到的......
  • 学习MySQL数据库:理解与实践
    学习MySQL数据库:理解与实践MySQL是一款开源的关系型数据库管理系统,广泛应用于各类应用程序中,从个人项目到大型企业解决方案。在本文中,我将分享我在学习和使用MySQL过程中的一些心得体会,希望能为初学者提供一些有价值的信息和技巧。1.MySQL的选择与简介MySQL作为开源数据......
  • 深入分析Edge浏览器的插件兼容性:拥抱开放网络生态
    微软Edge浏览器自推出以来,一直在积极扩展其插件生态系统,以提高用户的浏览体验。插件兼容性是Edge浏览器用户体验的关键因素之一,它决定了用户能够无缝使用多少现有的Chrome扩展。本文将深入探讨Edge浏览器的插件兼容性,分析其优势、挑战以及未来的发展方向。1.插件兼容性的......
  • 视觉革命:深入解析OpenAI Sora文生视频技术
    视觉革命:深入解析OpenAISora文生视频技术在数字内容创作和人工智能的交汇点上,OpenAISora文生视频技术正引发一场视觉革命。通过将自然语言处理与生成视频技术相结合,Sora不仅为创作者提供了全新的表达方式,更为各行各业开创了无限可能。一、什么是OpenAISora?OpenAISora......
  • 深入探索WebKit中的跨域资源共享(CORS)实现
    跨域资源共享(CORS)是一个安全协议,允许不同源之间的资源共享。在现代Web应用中,CORS对于实现WebAPI调用、Ajax跨域请求等至关重要。WebKit作为广泛使用的浏览器引擎之一,其对CORS的支持直接影响到Web应用的跨域交互能力。本文将深入探讨WebKit如何实现CORS,以及这一机制对开发者......
  • 深入理解和实现Windows进程间通信(消息队列)
    常见的进程间通信方法常见的进程间通信方法有:管道(Pipe)消息队列共享内存信号量套接字下面,我们将详细介绍消息队列的原理以及具体实现。什么是消息队列?Windows操作系统使用消息机制来促进应用程序与操作系统之间的通信。每当发生事件(如键盘按键、鼠标移动或系统事件)时,......
  • 深入理解AQS:Java并发编程中的核心组件
    目录AQS简介AQS的设计思路AQS的核心组成部分状态(State)同步队列(SyncQueue)条件队列(ConditionQueue)AQS的内部实现节点(Node)锁的获取与释放独占锁共享锁条件变量AQS的应用案例ReentrantLockCountDownLatchSemaphore总结参考文献AQS简介AbstractQueuedSynchronizer(AQ......
  • 理解 Java 中的 Future 及其底层实现
    目录什么是Future?Future的基本用法Future的局限性及改进Future的底层实现小结什么是Future?Future是Java中一个用于表示异步计算结果的接口。它主要用于处理那些可能需要较长时间运行的任务,使得主线程可以继续执行其他工作,而无需等待任务完成。Future的定义Fut......
  • 深入理解指针(1)
    目录:1.内存和地址2.指针变量和地址3.指针变量类型的意义4.const修饰指针5.指针运算6.野指针7.assert断⾔8.指针的使⽤和传址调用1.内存和地址1.1内存在讲内存和地址之前,我们想有个⽣活中的案例:假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没......
  • 深入解析微软Edge浏览器:探索其功能与应用
    微软Edge浏览器是微软公司推出的一款现代化网页浏览器,旨在为用户提供快速、安全和高效的上网体验。本文将全面解析微软Edge浏览器,从其历史背景、核心功能、性能表现、安全特性到实际应用场景,带领读者深入了解这款浏览器的优势和使用技巧。一、Edge浏览器的历史背景1.1Edge的......