【CSAPP】
深入理解计算机控制系统读书笔记
吾之求索
https://github.com/Small-Cube
展开
-
CSAPP-----总结
CSAPP是操作系统方面的圣经,一共分为三大部分,共12个章节。第一个章节是简单的介绍了计算机系统,第一章大致浏览可以了解到很多关于计算机的基本知识。接下来分为三大部分。 第一部分是程序的结构和执行,这一部分主要讲了信息的表达和处理、程序的机器级表示、处理器的体系结构、优化程序性能等,这一部分其实比较偏向于硬件和底层,如果有时间这一部分应该好好看,如果只是想了解操...原创 2019-03-08 08:58:08 · 14265 阅读 · 0 评论 -
CSAPP-----并发编程
本节目录1、基于进程的并发编程2、基于I/O多路复用的并发编程3、基于线程的并发编程4、多线程程序中地共享变量5、用信号量同步线程6、使用线程提高并行性7、其他并发问题8、小结 本系列文章的观点和图片均来自《深入理解计算机系统第3版》仅作为学习使用 如果逻辑控制流在时间上重叠,那它们就是并发的。这种常见的现象称为并发。目前位置,...原创 2019-03-07 10:05:48 · 875 阅读 · 0 评论 -
深入理解计算机系统-----基于预线程化的并发服务器
1、实现代码/* * echoservert_pre.c - A prethreaded concurrent echo server *//* $begin echoservertpremain */#include "csapp.h"#include "sbuf.h"#define NTHREADS 4#define SBUFSIZE 16void echo_cn...原创 2019-03-05 21:25:08 · 480 阅读 · 4 评论 -
深入理解计算机系统-----生产者消费者程序
1、实现代码#include "sbuf.h"#include "csapp.h" typedef struct{ int *buf; int n; int front; int rear; sem_t mutex; sem_t solts; sem_t items; }sbuf_t;//初始化,分配内存,初始...原创 2019-03-04 10:28:29 · 592 阅读 · 0 评论 -
深入理解计算机系统-----基于线程的服务器
1、实现代码 #include "csapp.h" void echo(int connfd); void *thread(void *vargp);int main(int argc, char **argv){ int listenfd, connfd, port, clientl int *connfdp;// static pool pool; s...原创 2019-02-28 21:15:38 · 335 阅读 · 0 评论 -
深入理解计算机系统-----基于IO多路复用的并发事件驱动服务器
1、实现代码 #include "csapp.h"typedef struct{ int maxfd; fd_set read_set; fd_set ready_set; int nready; int maxi; int clientfd[FD_SETSIZE]; rio_t clientrio[FD_SETSIZE];}poo...原创 2019-02-27 17:45:17 · 482 阅读 · 0 评论 -
深入理解计算机系统-----基于IO复用的并发服务器
1、实现代码 #include "csapp.h" void echo(int connfd); void command(void); int main(int argc, char **argv) { int listenfd, connfd, port, clientlen; struct sockaddr_in clientaddr; s...原创 2019-01-26 21:41:11 · 228 阅读 · 0 评论 -
深入理解计算机系统-----基于进程的并发服务器
客户端代码还是之前的echo的代码,服务器现在更改为基于进程的支持并发的服务器代码。 1、首先服务器会运行很长时间,所以要包含一个SIGCHLD(当一个进程结束或终止时发送信号给父进程)处理程序,回收僵尸进程,这个信号处理程序必须准备回收多个僵尸子进程的资源。 2、七次父子进程必须关闭他们各自的connfd副本,这对父进程尤为重要,以避免内存泄漏...原创 2019-01-25 19:35:43 · 339 阅读 · 0 评论 -
深入理解计算机系统-----fork和execve
1、利用fork和execve运行程序 像Unix shell和Web服务器这样的程序使用了大量得fork和execve函数,shell是一个交互型程序,代表用户运行其他程序。shell执行一系列的读/求值步骤,然后终止,读步骤读取来自用户的一个命令行,求值步骤解析命令行,并代表用户运行程序。 主程序主要是等待用户在stdin输入命令行,并且对命令行求值。eva...原创 2019-01-18 15:50:32 · 822 阅读 · 0 评论 -
CSAPP-----网络编程
本节目录:1、客户端-服务器编程模型2、网络3、全球IP因特网4、套接字接口5、Web服务器6、总结本系列文章的观点和图片均来自《深入理解计算机系统第 3 版》仅作为学习使用 网络应用基本都是基于相同的基本编程模型,有着相似的整体逻辑结构,并且以来相同的编程接口。网络应用依赖于前面很多概念,进程、信号、字节顺序、内存映射、以及动态内存分配。需要理解基本...原创 2019-01-14 17:13:31 · 733 阅读 · 0 评论 -
深入理解计算机系统-----echo客户端服务器
1、客户端 echo客户端,在和服务器连接以后,客户端应该进入一个循环,反复从标准输入读取文本行,发送文本行给服务器,从服务器读取回送的行,并输出结果到标准输出。当fgets在标准输入上遇到EOF时,或者因为用户在键盘上输入ctrl+D,或者在遇到一个重定向的输入文件中用尽了所有的文本行时,循环截止。//CSAPP中的一些辅助函数的定义#include "csapp.h"...原创 2019-01-11 17:39:20 · 1504 阅读 · 0 评论 -
深入理解计算机系统-----HOSTINFO
1、程序 下图给出一个简单的程序,称为HOSTINFO,使用getaddrinfo和getnameinfo展示出域名到它关联的IP地址之间的映射。相当于nslookup指令。 #include"csapp.h"int main(int argc,char **argv){ struct addrinfo *p,*listp,hints; char buf[MAXLI...原创 2019-01-10 10:51:49 · 1598 阅读 · 0 评论 -
CSAPP-----系统级IO
本章目录:1、Unix I/O2、文件3、打开和关闭文件4、读和写文件5、用RIO包健壮的读写6、读取文件元数据7、读取目录内容8、共享文件 9、IO重定向10、标准I/O11、具体使用情况12、小结 本系列文章的观点和图片均来自《深入理解计算机系统第 3 版》仅作为学习使用 输入输出(I/O)是主存和外部设备(磁盘、终端...原创 2019-01-07 18:03:12 · 587 阅读 · 0 评论 -
深入理解计算机系统-----读取文件元数据
1、读取一个文件的元数据,文件可以从命令行输入,也可指直接以字符串传进。 (1)直接传字符串进去。也就是文件名。#include<unistd.h>#include<sys/stat.h>#include<stdio.h>#include<stdlib.h>#include<sys/types.h>int mai...原创 2019-01-07 17:03:28 · 710 阅读 · 0 评论 -
CSAPP-----异常控制流
本节目录:1、异常2、进程3、系统调用错误处理4、进程控制5、信号6、非本地跳转7、操作进程工具8、小结 本系列文章的观点和图片均来自《深入理解计算机系统第3版》仅作为学习使用 现代系统通过使控制流发生突变来应对一些情况,这些突变也就是异常控制流(ECF)。异常控制流可以发生在计算机系统的各个层次,硬件层、操作系统层、应用层。作为程序员理解...原创 2019-01-21 20:08:01 · 1212 阅读 · 0 评论 -
深入理解计算机系统-----动态链接
1、建立C文件,构造共享库。 前面和静态链接一样。(https://blog.csdn.net/zl6481033/article/details/85340096)。 -fpic 选项指示编译器生成与位置无关的代码,-shared 选项指示链接器创建一个共享的目标文件。一旦创建了这个库就可以链接到程序中。2、链接,创建可执行文件。 ...原创 2019-01-03 15:55:17 · 273 阅读 · 0 评论 -
深入理解计算机系统-----静态链接
1、创建两个C文件。2、并通过gcc -c addvec.c multvec.c生成可重定位文件。可以看到生成了两个.o文件。3、创建函数的静态库需要使用AR工具。创建一个.h文件,声明这两个函数。格式:ar rcs libxxx.a xx1.o xx2.o参数 r:在库中插入模块 (替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个...原创 2018-12-29 16:19:42 · 273 阅读 · 0 评论 -
深入理解计算机系统-----readelf分析
ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库,等信息。 ELF文件主要三种文件类型,具体参考(https://blog.csdn.net/zl6481033/artic...原创 2018-12-28 10:28:46 · 683 阅读 · 0 评论 -
CSAPP-----链接
本篇目录:1、编译器驱动程序2、静态链接3、目标文件4、可重定位目标文件5、符号和符号表6、符号解析7、重定位8、可执行目标文件9、加载可执行目标文件10、动态链接库11、从应用程序加载和链接共享库12、位置无关码13、库打桩机制14、处理目标文件的工具15、小结16、本篇相关实践 本系列文章的观点和图片均来自...原创 2019-01-03 17:06:57 · 482 阅读 · 0 评论 -
CSAPP-----计算机系统漫游
本章目录:1、信息就是位+上下文2、 程序被其他程序翻译成不同的格式3、了解编译系统如何工作好处4、处理器读并解释储存在内存中的指令5、高速缓存至关重要6、存储设备形成层次结构 7、操作系统管理硬件8、系统之间利用网络通信9、重要主题 本系列文章的观点和图片均来自《深入理解计算机系统第3版》仅作为学习使用1、信息就是位+上下文 ...原创 2018-12-03 21:51:39 · 472 阅读 · 0 评论