深入理解计算机系统笔记--备忘

  1. 多核cpu:将多个cpu(称为“核”)集成到一个集成电路芯片上、
  2. 超线程:允许一个cpu执行多个控制流的技术,cpu的某些硬件有多个备份,比如程序计数器(pc)和寄存器,而其他的硬件可能只有一份,比如浮点运算单元。超线程技术可以使cpu(核)在单个周期的基础上决定要执行哪个线程,而传统cpu可能需要20 000个时钟周期完成线程的切换。(从这里来看,一个核同一时刻还是只能执行一个控制流的,只不过快的多的线程切换速度可以将一个核模拟为两个核)
  3. 文件是对i/o设备的抽象,虚拟内存是对程序存储器的抽象,进程是对一个正在运行程序的抽象
  4. 跳转指令的编码最常用的是相对编码:将目标指令的地址与紧跟在跳转指令后面的那条指令之间的差作为编码;
  5. 一个模块中的两个c文件中可以定义两个同名的全局变量,但其中要有弱定义的。比如一个强定义,一个弱定义,或者多个弱定义。强定义:可以被外部文件调用的函数名,初始化了的全局变量;弱定义:比如未赋值的全局变量。 链接器处理多重定义符号的规则:1.不允许有多个同名的强符号2.若有一个强符号和多个弱符号,那么选择强符号3.如果是多个弱符号同名,任意选一个;注意:若这些同名符号不同类型,也是可以链接过的。。。。。
  6. 链接可执行于编译时,加载时,运行时。
  7. 链接:符号解析,重定位
  8. 编译时指定库的顺序:被依赖的要放在依赖它的的右边,若存在相互引用,可以重复出现,比如foo.c依赖libx.a,libx.a依赖liby.a,而liby.a又依赖libx.a那么,gcc foo.c libx.a liby.a libx.a
  9. 程序的运行时内存映像,代码段总是从0x400000开始,后面是数据段,运行时堆。用户栈最大合法用户地址空间位2的48次方。再往上的地址就是内核的代码和数据了。代码段与数据段之间有空隙(为了对齐要求),而栈,共享模块,堆由于安全行还会使用地址空间布局随机化,每次程序运行时,他们的地址都会改变。
  10. 处理目标文件的工具:
    strings:列出一个目标文件中所有可打印的字符串 strip:从目标文件中删除符号表信息
    nm:列出一个目标文件中的符号表中定义的符号
    size:显示目标文件中节的名字和大小
    readelf:显示一个目标文件的完整结构,包括elf头中编码的所有信息,包含size和nm的功能
    objdump:能够显示一个目标文件中的所有信息,它最大的作用时反汇编.text段中的二进制指令
  11. 操作进程的工具
    strace:打印一个进程及其子进程调用的每个系统调用的轨迹
    strace -fp 可以跟踪所有线程的系统调用 进一步的,指定线程的tid可以监视特定线程的系统调用
    pstack 打印栈信息

你可能感兴趣的:(其他)