zoukankan      html  css  js  c++  java
  • 基础教材系列:《深入理解计算机系统》读书笔记

    第一章  全书概述
    一  基础
    1、程序的生命周期分为四个阶段:
      Hello.c (源程序)
      预处理器(cpp)Hello.i
      编译器(ccl)hello.s
      汇编器(as)hello.o(这时是个二进制文件)
      链接器(id)(将函数并入到程序)
      Hello (最后变成可执行的目标程序)
    2、了解编译过程什么用:
      优化程序性能、理解链接时出现的错误、避免安全漏洞
     
    二  系统的硬件组成
      总线:贯穿整个系统的一组电子管道
      I/O设备:系统与外界联系的通道(如鼠标键盘;显示器;磁盘)。I/O设备通过控制器和适配器与I/O总线连接。控制器和适配器的区别在于其组成方式,控制器是主印制电路板(主板)上的芯片组,适配器是一块插在主板插槽上的卡。它俩的功能都是在I/O设备和I/O总线之间传递信息
      主存:一个临时存储设备,处理器执行程序时,它被用来存放程序和程序处理的数据。
        物理上,它由一组DRAM(动态随机存取存储器)芯片组成。
        逻辑上,它由一个线性的字节数组组成,每个字节都有自己唯一的地址(数组索引)
      处理器:(CPU)是解释(或执行)主存中指令的引擎。核心是个叫做程序计数器(PC)的存储设备(或寄存器)。一通电就从程序计数器指向的存储器处读取指令、解释指令中的位,执行指令指示的简单操作,然后更新程序计数器指向下一条指令。
     
    三  高速缓存
    寄存器是L1的高速缓存;L1是L2的高速缓存;L2是主存的高速缓存;主存是磁盘的高速缓存。
     
    四  操作系统
    它有两个基本功能:防止硬件被失控的应用程序滥用;为应用程序提供简单一致的方法控制低级硬件
     
    五  进程
    操作系统实现进程交错执行的机制称为上下文切换(context switing);上下文切换就是——保存当前进程的上下文(context),恢复新进程的上下文。
    进程所看到的虚拟地址空间由多个区(area)组成:由低到高是:程序代码和数据;堆;共享库;栈;内核虚拟存储器。
     
    第二章 信息的表示和处理
    一  信息存储
    存储器的每一个字节都由一个唯一的数字来标识,成为地址(address);所有可能地址的集合就称为虚拟地址空间(virtual address space)。
    C语言的指针有两个方面:它的值和它的类型,它的值表示的是某个对象的位置,而它的类型表示那个位置上所存储对象的类型(比如,整数或浮点数)
     
    二  进制转换
    对于2n,其十六进制转换公式为i+4j
    例如211,十进制位2048,十六进制转换时,因为1(i=0),2(i=1),4(i=2),8(i=3)且11=3+4*2,所以它就是8的后面跟两个0,即0x800  (详见书上48页)
     
    三  寻址和字节顺序
    在几乎所有的机器上,字节对象都被存储为连续的字节序列,对象的地址为所使用字节序列中最小的地址。
    表示一个对象的字节序列排序,有俩通用规则,
      最低有效数字在最前面——小端法(little endian);
      最高有效数字在最前面——大端法(big endian)
    这是芯片加电启动时所用到的字节顺序规则。
     
    程序编译过程:
    假如,写一个C程序,有两个文件p1.c和p2.c,然后用Unix命令编译这行代码。这个命令实际上调用了一系列程序,将源代码转化成可执行代码。
    首先,C预处理器会扩展源代码,插入所有用#include命令指定的文件,并扩展所有的宏。其次,编译器产生两个源文件的汇编代码,名字分别为p1.s和p2.s。接下来,汇编器会将汇编代码转化成二进制目标代码文件p1.o和p2.o。最后,链接器将两个目标文件与实现标准Unix库函数(例如printf)的代码合并,并产生最终可执行文件。
    汇编程序员能看到的处理器状态:
    程序计数器(称为%eip):表示将要执行的下一条指令在存储器中的地址。
    整数寄存器:存储地址(对应C的指针)、整数数据,纪录程序状态,保存临时数据。
    条形码寄存器:保存最近执行的算术指令状态信息。
    浮点寄存器:存放浮点数据。
     
    附相关概念扩展:
    GNU计划所使用的汇编器,一般称为gas,或依其可执行文件名称简称为as。它是GCC的默认后端。它用于汇编GNU操作系统Linux内核以及其他各种软件。
    (GNU是“GNU is Not Unix”的递归缩写,GNU将要实现UNIX系统的接口标准)
    GCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器。以及大部分UNIX系统的程序库和工具。
    GAS中的每个操作都有一个字符后缀,表明操作数的大小。如mov(传送数据)指令有三种形式:movb(传送字节)、movw(传送字)和movl(传送双字)
     
    本书是本经典的国外大学计算机专业教材,类似国内的计算机原理这门课,很厚,很详尽,刚开始看的时候自己毫无基础,看不懂,就没看完,如今工作多年再回过头来翻翻,反而觉得读起来津津有味。实践与理论的反复结合,能使自己的技术越来越扎实。
  • 相关阅读:
    TeeChart的X轴,使用伪装的时间
    线程池
    修练8年C++面向对象程序设计之体会
    使用RESTClient插件数据模拟(GET,POST)提交
    :施密特建议尾随年轻的专业人士了解技术公司
    社会保障系列1《介绍》
    Centos根据系统VPS安装SendMail组件使WordPress支持E-mail
    Codeforces Round #107 (Div. 2)---A. Soft Drinking
    [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版
    怎么样ubuntu 64 11.04 在执行32位程序
  • 原文地址:https://www.cnblogs.com/zhaot1993/p/13054106.html
Copyright © 2011-2022 走看看