随笔分类 - 【CSAPP】
摘要:本节目录 1、物理和虚拟寻址 2、地址空间 3、虚拟内存作为缓存的工具 4、虚拟内存作为内存管理的工具 5、虚拟内存作为内存保护的工具 6、地址翻译 7、案例研究 8、内存映射 9、动态内存分配 10、垃圾收集 11、C程序中常见的与内存有关的错误 12、小结 本系列文章的观点和图片均来自《深入理解
阅读全文
摘要:1、题目描述 2、分析 之前做过将一个有序数组转化为二叉树,这道题可以先将链表转化为数组,然后再将数组转化为二叉树,不过这样太过于复杂。因为数组的中点更容易找,但是这里可以通过快慢指针的方法来找到链表的中点,之后和前面构造二叉树的方法一样分为两部分,递归构造。 3、代码 4、相关知识点 链表找到中间
阅读全文
摘要:CSAPP是操作系统方面的圣经,一共分为三大部分,共12个章节。第一个章节是简单的介绍了计算机系统,第一章大致浏览可以了解到很多关于计算机的基本知识。接下来分为三大部分。 第一部分是程序的结构和执行,这一部分主要讲了信息的表达和处理、程序的机器级表示、处理器的体系结构、优化程序性能等,这一部分其实比
阅读全文
摘要:本节目录 1、基于进程的并发编程 2、基于I/O多路复用的并发编程 3、基于线程的并发编程 4、多线程程序中地共享变量 5、用信号量同步线程 6、使用线程提高并行性 7、其他并发问题 8、小结 本系列文章的观点和图片均来自《深入理解计算机系统第3版》仅作为学习使用 如果逻辑控制流在时间上重叠,那它们
阅读全文
摘要:1、实现代码 echo_cnt.c代码如下 2、代码分析 在之前,已经知道了如何使用信号量来访问共享变量和调度对共享资源的访问。上面是一个基于称为预线程化技术的并发服务器。在之前基于线程的服务器中,我们为每个新客户创建了一个新线程。这种方法的缺点是,我们为每一个客户端创建一个新线程,导致不小的代价。
阅读全文
摘要:1、实现代码 2、代码分析 SBUF操作类型为sbuf_t的有限缓冲区,项目存放在一个动态分配的n项整数数组中,front和rear索引值记录该数组的第一项和最后一项,三个信号量同步对缓冲区的访问,mutex信号量提供互斥的缓冲区的访问,slots和items信号量分贝纪录空槽位和可用项目的数量。
阅读全文
摘要:1、实现代码 2、代码分析 基于线程的并发echo服务器代码整体结构类似于基于进程的设计。主线程不断等待连接请求,然后创建一个对等线程处理该请求。有一个值得注意的问题就是,调用pthread_create函数时,如何将已连接描述符传递给对等线程,最明显的方法就是传递一个指向这个描述符的指针,就像下面
阅读全文
摘要:1、实现代码 2、代码分析 创建一个pool结构维护着活动客户端的集合,在调用init_pool初始化池之后,服务器进入一个无限循环,在循环的每次迭代中服务器调用select函数来检测两种不同类型的输入事件,a)来自一个新客户端的连接请求到达。b)一个已存在的客户端已连接描述符准备好了可读。当一个连
阅读全文
摘要:1、实现代码 2、代码分析 一开始先用open_listenfd函数打开一个监听描述符,然后使用FD_ZERO创建一个空的读集合。 之后定义由描述符0和描述符3组成的读集合。 之后开始服务器循环,但是不调用accept函数等待一个连接请求,而是调用select函数,这个函数会一直阻塞,直到监听描述符
阅读全文
摘要:客户端代码还是之前的echo的代码,服务器现在更改为基于进程的支持并发的服务器代码。 1、首先服务器会运行很长时间,所以要包含一个SIGCHLD(当一个进程结束或终止时发送信号给父进程)处理程序,回收僵尸进程,这个信号处理程序必须准备回收多个僵尸子进程的资源。 2、七次父子进程必须关闭他们各自的co
阅读全文
摘要:本节目录: 1、异常 2、进程 3、系统调用错误处理 4、进程控制 5、信号 6、非本地跳转 7、操作进程工具 8、小结 本系列文章的观点和图片均来自《深入理解计算机系统第3版》仅作为学习使用 现代系统通过使控制流发生突变来应对一些情况,这些突变也就是异常控制流(ECF)。异常控制流可以发生在计算机
阅读全文
摘要:1、利用fork和execve运行程序 像Unix shell和Web服务器这样的程序使用了大量得fork和execve函数,shell是一个交互型程序,代表用户运行其他程序。shell执行一系列的读/求值步骤,然后终止,读步骤读取来自用户的一个命令行,求值步骤解析命令行,并代表用户运行程序。 主程
阅读全文
摘要:本节目录: 1、客户端-服务器编程模型 2、网络 3、全球IP因特网 4、套接字接口 5、Web服务器 6、总结 本系列文章的观点和图片均来自《深入理解计算机系统第 3 版》仅作为学习使用 网络应用基本都是基于相同的基本编程模型,有着相似的整体逻辑结构,并且以来相同的编程接口。网络应用依赖于前面很多
阅读全文
摘要:1、客户端 echo客户端,在和服务器连接以后,客户端应该进入一个循环,反复从标准输入读取文本行,发送文本行给服务器,从服务器读取回送的行,并输出结果到标准输出。当fgets在标准输入上遇到EOF时,或者因为用户在键盘上输入ctrl+D,或者在遇到一个重定向的输入文件中用尽了所有的文本行时,循环截止
阅读全文
摘要:1、程序 下图给出一个简单的程序,称为HOSTINFO,使用getaddrinfo和getnameinfo展示出域名到它关联的IP地址之间的映射。相当于nslookup指令。 首先初始化hints结构,使getaddrinfo返回我们想要的地址,这里我们只需要查找32位的IP地址,用作连接的端点。所
阅读全文
摘要:本章目录: 1、Unix I/O 2、文件 3、打开和关闭文件 4、读和写文件 5、用RIO包健壮的读写 6、读取文件元数据 7、读取目录内容 8、共享文件 9、IO重定向 10、标准I/O 11、具体使用情况 12、小结 本系列文章的观点和图片均来自《深入理解计算机系统第 3 版》仅作为学习使用
阅读全文
摘要:1、读取一个文件的元数据,文件可以从命令行输入,也可指直接以字符串传进。 (1)直接传字符串进去。也就是文件名。 (2)从命令行传文件进去。
阅读全文
摘要:本篇目录: 1、编译器驱动程序 2、静态链接 3、目标文件 4、可重定位目标文件 5、符号和符号表 6、符号解析 7、重定位 8、可执行目标文件 9、加载可执行目标文件 10、动态链接库 11、从应用程序加载和链接共享库 12、位置无关码 13、库打桩机制 14、处理目标文件的工具 15、小结 16
阅读全文
摘要:1、建立C文件,构造共享库。 前面和静态链接一样。(https://blog.csdn.net/zl6481033/article/details/85340096)。 -fpic 选项指示编译器生成与位置无关的代码,-shared 选项指示链接器创建一个共享的目标文件。一旦创建了这个库就可以链接到
阅读全文
摘要:1、创建两个C文件。 2、并通过gcc -c addvec.c multvec.c生成可重定位文件。可以看到生成了两个.o文件。 3、创建函数的静态库需要使用AR工具。 创建一个.h文件,声明这两个函数。 格式:ar rcs libxxx.a xx1.o xx2.o 参数 r:在库中插入模块 (替换
阅读全文

浙公网安备 33010602011771号