博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
六星经典CSAPP笔记(1)计算机系统巡游
阅读量:5168 次
发布时间:2019-06-13

本文共 1437 字,大约阅读时间需要 4 分钟。

CSAPP即《Computer System: A Programmer Perspective》的简称,中文名为《深入理解计算机系统》。相信很多程序员都拜读过,之前买的旧版没有读完,如今恰好第二版出版,就入手影印版重读经典。一读果然,经典依然是经典,CMU卡内基梅隆大学的本科教材,堪比另一本SICP的六星佳作啊!
1.A Tour of Computer System

1.1 Programs Are Translated by Other Programs into Different Forms
程序被其他程序翻译成不同的形式。”简单一句话,却道破了本质。
整个过程对于程序员,尤其是C程序员都颇为熟悉:
  • 源文件.c =》 预处理各种#命令.i =》 翻译成汇编.s =》 翻译成机器码.o =》 链接外部文件成最终可执行文件
值得注意的是:汇编语言是如此有用,因为它为不同的编译器提供了公共的输出语言。
1.2 It Pays to Understand How Compilation Systems Work
为什么要知道上面这些编译系统的工作过程呢?
  1. 优化程序性能
  2. 理解链接时错误
  3. 避免安全漏洞
打断一下,说一个有趣的问题:CPU空闲时PC指向哪里?这也是一直困扰我的问题。很早以前电脑还装过一种叫Waterfall的CPU降温软件,当时很流行,而且确实好用。
1.3 Caches Matter
为什么缓存很重要?先来看一个例子,看一下在命令行执行一段简单程序时,在硬件中都发生了什么。
1)首先,在命令行中敲击./hello后(注意:此时还没敲回车),Shell将"hello"字符串通过I/O总线读取到CPU寄存器中,并保存到内存。
2)之后,当我们敲回车后,Shell就开始从磁盘加载程序到内存中了(DMA技术能不通过CPU,直接让磁盘和内存通信)。
3)现在hello文件中包含的代码已加载到内存,CPU开始逐条执行机器码了。最终将代码中的"hello, world"读取到寄存器,最终打印到显示器。
通过这个小例子我们就能看出计算机系统的特点:
系统耗费大量时间把数据挪来挪去
于是,为了提高系统性能就有两种策略:
  1. 要么添加缓存,什么CPU的L1/2,磁盘的...
  2. 要么最小化数据移动,如内存计算(in-memory computing)
第二种策略不是本书的主题了,还是说回到缓存吧。所以说缓存很重要!接下来一节看下缓存对并发的影响。
1.4 Thread-Level Concurrency & Instruction-Level Parallelism
下图以Intel Core i7微处理器为例,i7有四核,每个核心都有自己的L1和L2缓存,但共享更高层次的L3缓存。
每个核心都是
超线程技术(hyperthreading),即每个核心中有多套PC和寄存器,但只有一个ALU。这样CPU有更好的并发,例如当某个线程在等待一些数据加载时,CPU可以先去执行一个不同的线程。而且无需上下文切换,因为前面提到了CPU的一些硬件单元是有多份的。而
管道化技术(pipelining)将一个指令的执行进一步洗分为多步(是不是有点像Tez对Hive的优化,Tez也是将MR任务细分为许多种,从而进行优化),从而将部分指令并行化。

转载于:https://www.cnblogs.com/xiaomaohai/p/6157668.html

你可能感兴趣的文章
写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋...
查看>>
【OpenJ_Bailian - 2287】Tian Ji -- The Horse Racing (贪心)
查看>>
Java网络编程--socket服务器端与客户端讲解
查看>>
List_统计输入数值的各种值
查看>>
学习笔记-KMP算法
查看>>
Timer-triggered memory-to-memory DMA transfer demonstrator
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>