CSAPP学习笔记

计组、操作系统、编译原理在奕行智能二面的时候被问烂了,几乎是完全答不上来

计划是看CSAPP,短期内临时补充薄弱的体系结构基础知识,避免再次被问烂掉,长期上作为ics基础为学习os和编译原理,搓riscV和编译器提供知识储备。

指令集的计划选riscV,毕竟趋势摆在这里。

至于编译方面,暂时还很难确定要做什么,还得再看看,等快速的补完基础再说。

熟悉的东西就不记了,只记偏硬件方面的。

  • 总线,字(word)。字节数(字长) 32/64

  • I/O设备 通过控制器/适配器与IO总线相连。

  • 主存 由一组动态随机存取存储器(DRAM)构成。

  • 处理器

    • 大小为一个字(word)的寄存器,程序计数器pc,指向主存中的某条机器语言指令。
    • 加载、存储、运算(ALU)、跳转
    • cache(/kæʃ/),高速缓存,使用静态随机访问存储器(SRAM)

存储器层次结构:寄存器,L1高速缓存,L2,L3,主存,本地二级存储,

虚拟内存是对主存和磁盘I/O设备(文件)的抽象表示,进程是对处理器+虚拟内存的抽象表示。(面试被问到,p都没学过的我还以为是相对于本地二级存储空间的虚拟内存,给面试官整无语了)

进程是操作系统对一个正在运行的程序的抽象。单CPU通过处理器在进程间切换保证多个进程同时执行:上下文切换。

保持跟踪进程状态的信息即上下文。包括PC、CPU寄存器、主存中的内容。

进程间的转换由内核控制。

一个进程由多个线程作为执行单元组成。每个线程运行在进程的上下文中,共享同样的代码和数据。线程比进程更容易共享数据。

虚拟内存使得每一个进程使用同样的内存,成为虚拟地址空间,地址从低到高分别为

  • 程序代码和数据
    • 只读
    • 读写
  • 运行时堆(运行时由malloc创建)
  • 共享库,例如C标准库,数学库
  • 用户栈,编译器用它实现函数调用,调用函数时增长,返回时收缩。
  • 内核虚拟内存,不允许应用程序操作,必须调用内核。

文件就是字节序列,是对I/O设备的抽象