随笔分类 - CSAPP
CSAPP学习笔记
摘要:这篇博文由一个 bug 引出了编译链接的整个过程。我们可以看到一个源代码文件最终变成一个可执行文件中间经历了编译和链接两个过程,编译过程又分为预编译,编译,和汇编;预编译阶段主要处理#开头的代码,编译则是进行一些语法分析和优化,最终生成汇编代码,而汇编则是生成机器代码,同时将源文件通过一个叫做可重定位目标文件进行保存。这个可重定位目标文件里面有一个段,叫做符号表段,里面存储了当前源文件的符号(主要是函数,以及一些全局变量)。之后链接过程会分为合并,符号解析,重定位三个阶段。合并主要就是合并.text,.data, .bss段等,其中符号表段合并时由于不同文件之间可能会有一些重名的符号,因此在这一步可能会触发一些隐晦的 bug,重定位则是根据最终合并后的一些数据和函数的地址,将对应的机器码调用地址进行修改。
阅读全文
摘要:本篇博文讨论了处理器体系结构中的指令集和流水线相关的知识,书中还结合着硬件电路去介绍了指令各个执行阶段的细节,由于时间原因,电路这部分我是略读的;最后的实验在软件层面帮助我巩固了汇编,指令集,以及优化程序的相关知识。
阅读全文
摘要:本篇博文介绍了现代操作系统中异常的一些概念,我们常见的系统调用其实也是异常的一种,内核会先保存调用者的上下文,进入内核模式,执行系统调用,当执行完毕之后,再去恢复调用者的上下文,继续执行,另外还有中断,陷阱等,这些是操作系统和硬件层面的异常;而对于进程层面的异常,则主要围绕信号这一抽象概念,包括接受信号和处理信号,最后介绍了有关信号安全的知识,还引出了一个如何有效释放进程资源的例子。
阅读全文
摘要:基于信号的定义介绍如何关闭命令行程序
阅读全文
摘要:本篇博文介绍了并发编程的相关知识,基于进程的并发,它的缺点主要是进程之间通信的成本过高;基于I/O多路复用的并发,主要缺点是编写困难;而基于线程的并发是最常用的,先是用其扩展了echo服务器,使其能够同时处理多个连接请求,然后再结合生产者消费者模型进行了进一步的拓展。最后介绍了有关线程安全的一些概念。
阅读全文
摘要:本篇博文介绍了《深入理解计算机系统中》Unix I/O,以及网络编程章节的一些概念,之所以合在一起介绍是因为Unix I/O在网络编程中会用到。同时我们观察到此时的echo服务器统一时刻只能处理一个客户端的连接。下一章的并行编程我们会对echo服务器进行拓展,基于并发的理论使其能够同时处理多个连接。
阅读全文
摘要:这一章主要介绍了现代操作系统中虚拟内存的概念,先是介绍了虚拟内存的一般概念,这一部分我将在本文第一小节进行一个串联;第二部分介绍了内存映射,并以Linux为例,介绍了fork函数,execve函数的实现细节;第三部分则是介绍了动态内存分配,程序员通过如`malloc`, `new`, `free`, `delete`等语言特定的函数和操作符来控制,重点介绍了动态内存分配器如何维护进程的堆区域。
阅读全文

浙公网安备 33010602011771号