• 《程序是怎样跑起来的》读书笔记


    《程序是怎样跑起来的》读书笔记

    读完这本书之后我后悔了,后悔我没有早点读到它。后悔我没有在学《计算机组成原理》之前读完这本书。

    这本书完全可以作为《计算机组成原理》这门课的先导课,它回避了计算机组成中的一些比较复杂难懂的知识,而把目光集中于,在“计算机运行程序”这一个整体的过程中,计算机中发生了什么。

    声明:本篇内容只为作者本人使用,如有任何问题,与本人无关

    内容不固定,随时更新

    HightLight

    第一章 对程序员来说CPU是什么

    • CPU所负责的就是解释和运行最终转换成机器语言的程序内容
    • 内存的存储场所通过地址编号来区分,而寄存器的种类则通过名字来区分
    • 其中,数据分为“用于运算的数值”和“表示内存地址的数值”两种。数据种类不同,存储该数值的寄存器也不同
    • 用于运算的数值放在累加寄存器中存储,表示内存地址的数值则放在基址寄存器和变址寄存器中存储
    • 程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个
    • 无论当前累加寄存器的运算结果是负数、零还是正数,标志寄存器都会将其保存(也负责存放溢出和奇偶校验的结果 )
    • 函数调用使用的是 call 指令,而不是跳转指令
    • return 命令的功能是把保存在栈中的地址设定到程序计数器中
    • 实际地址 = 基址寄存器 + 变址寄存器

    第二章 数据是用二进制数表示的

    • IC的一个引脚只能表示两种状态
    • 移位后需要在最高位补 0类似于霓虹灯往右滚动的效果这就称为逻辑右移
    • 将二进制数作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0 或 1)。就称为算术右移
    • 只有在右移时才必须区分逻辑位移和算术位移

    第三章 计算机进行小数运算时出错的原因

    • 尾数部分用的是“将小数点前面的值固定为 1 的正则表达式”,而指数部分用的则是“EXCESS系统表现”
    • EXCESS系统表现是指,通过将指数部分表示范围的中间值设为 0,使得负数不需要用符号来表示
    • 计算机运行的过程中如何避免浮点数出错的问题?
      • 首先是回避策略,即无视这些错误
      • 另一个策略是把小数转换成整数来计算

    第四章 熟练使用有棱有角的内存

    • 队列一般是以环状缓冲区(ring buffer)的方式来实现的

    第五章 内存和磁盘的亲密关系

    • 磁盘缓存指的是把从磁盘中读出的数据存储到内存空间中的方式
    • 虚拟内存是指把磁盘的一部分作为假想的内存来使用
    • 虚拟内存的方法有分页式和分段式两种。Windows 采用的是分页式。该方式是指,在不考虑程序构造的情况下,把运行的程序按照一定大小的页(page)进行分割,并以页为单位在内存和磁盘间进行置换
    • 一般情况下,Windows 计算机的页的大小是 4KB
    • 多个应用可以共有同一个 DLL 文件
    • DLL 文件还有一个优点就是,在不变更 EXE文件的情况下,只通过升级 DLL 文件就可以更新
    • 栈清理处理指令不是程序记述的,而是在程序编译时由编译器自动附加到程序中的。编译器默认将该处理附加在函数调用方
    • 另外,在C 语言中,函数的返回值,是通过寄存器而非栈来返回的
    • 栈一般是用来实现函数调用机制的。如果想任意利用栈,程序员就需要自己用程序来实现所需要的栈机制
    • 扇区是对磁盘进行物理读写的最小单位。Windows 中使用的磁盘,一般 1 个扇区是 512 字节。不过,Windows 在逻辑方面(软件方面)对磁盘进行读写的单位是扇区整数倍簇?
    • 不管是硬盘还是软盘,不同的文件是不能存储在同一个簇中的,否则就会导致只有一方的文件不能被删除

    第六章 亲自尝试压缩数据

    • 在任何情况下,文件中的字节数据都是连续存储的
    • 像这样,把文件内容用“数据 ×重复次数”的形式来表示的压缩方法称为 RLE(Run Length Encoding,行程长度编码)
    • 我们把能还原到压缩前状态的压缩称为可逆压缩,无法还原到压缩前状态的压缩称为 非可逆压缩

    第七章 程序是在何种环境中运行的

    • 引导程序是存储在启动驱动器起始区域的小程序
    • 引导程序的功能是把在硬盘等记录的 OS 加载到内存中运行
    • OS 并不能自己启动自己

    第八章 从源文件到可执行文件

    • “想要买的是何种编程语言用的编译器”“编译器生成的本地代码是用于哪种 CPU 的”以及“该编译器是在什么环境下使用的”
    • 在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在 EXE 文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。
    • EXE 文件的再配置信息,就成为了变量和函数的相对地址

    第九章 操作系统和应用的关系

    • 仅具有加载和运行功能的监控程序
    • 基本的输入输出部分的程序就被追加到了监控程序中
    • 初期操作系统 = 监控程序 + 基本输入输出程序
    • Windows 是通过时钟分割技术来实现多任务功能的

    第十章 通过汇编语言了解程序的实际构成

    • 汇编语言的源代码,是由转换成本地代码的指令(后面讲述的操作码)和针对汇编器的伪指令构成的
    • 编译后在函数名前附带上下划线(_),是Borland C++ 的规定
    • 在函数内部利用的寄存器,要尽量返回到函数调用前的状态

    第十一章 硬件控制方法

    • I/O 控制器中有用于临时保存输入输出数据的内存。这个内存就是端口
    • 一个 I/O 控制器既可以控制一个外围设备,也可以控制多个外围设备。各端口之间通过 端口号进行区分。端口号也称为 I/O 地址
    • 这是因为,为了保护系统安全,现在的 Windows 禁止了应用直接控制硬件的方式
    • 大部分的外围设备,都会频繁地发出中断请求。其原因就是为了实时处理从外围设备输入的数据

    第十二章 让计算机“思考”

  • 相关阅读:
    js 笔记
    openstack笔记
    Nginx
    Nginx
    Nginx
    nginx 服务器篇
    Nginx 原理篇
    MySQL 视图、触发器、函数、存储过程
    day41
    MySQL 作业题及答案
  • 原文地址:https://www.cnblogs.com/jancoyan/p/14878898.html
Copyright © 2020-2023  润新知