![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《深入理解计算机系统》笔记
文章平均质量分 91
好好du书
这个作者很懒,什么都没留下…
展开
-
第12章--并发编程
到目前为止,我们主要将并发看做是一种操作系统内核用来运行多个应用程序的机制。但是,并发不仅仅局限于内核。它也可以在应用程序中扮演重要角色。例如,我们已经看到 Linux信号处理程序如何允许应用响应异步事件,例如用户键入 Ctrl+C,或者程序访问虚拟内存的一个未定义的区域。应用级并发在其他情况下也是很有用的:访问慢速 I/ 设备。与人交互。通过推迟工作以降低延迟。服务多个网络客户端。在多核机器上进行并行计算。使用应用级并发的应用程序称为并发程序。现代操作系统提供了三种基本的构造并发程序的方法原创 2023-11-14 17:02:19 · 95 阅读 · 0 评论 -
第11章--网络编程
每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并且通过操作这种资源来为他的客户端提供某种服务。客户端-服务器模型中的基本操作是事务。一个客户端-服务器事务由以下四步组成。1)当一个客户端需要服务时,他向服务器发送一个请求,发起一个事务。2)服务器收到请求后,解释它,并以适当的方式操作它的资源。3)服务器给客户端发送一个响应,并等待下一个请求。4)客户端收到响应并处理它。原创 2023-08-08 17:23:28 · 39 阅读 · 0 评论 -
第10章--系统级IO
标准I/O函数提供了Unix I/O函数的一个更加完整的带缓冲的替代品,包括格式化的I/O例程,如printf和scanf。这个库(libc)提供了打开和关闭文件的函数(fopen和fclose)、读和写字节的函数(fread和fwrite)、读和写字符串的函数(fgets和fputs)、以及复杂的格式化的I/O函数(scanf和printf)。一个Linux文件就是一个m个字节的序列,所有的I/O设备都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。RIO提供了两类不同的函数。原创 2023-07-08 14:00:00 · 51 阅读 · 0 评论 -
第9章--虚拟内存
尽管在整个运行过程中程序引用的不同页面的总数可能超出物理内存总的大小,但是局部性原则保证了在任意时刻,程序将趋向于在一个较小的活动页面集合上工作,这个集合叫做工作集或者常驻集合。如果一个进程将一个共享对象映射到它的虚拟地址空间的一个区域内,那么这个进程对这个区域的任何写操作,对于那些也把这个共享对象映射到他们虚拟内存的其他进程而言,也是可见的。mmap函数要求内核创建一个新的虚拟内存区域,最好是从地址start开始的一个区域,并将文件描述符fd指定的对象的一个连续的片映射到这个新的区域。原创 2023-06-29 16:16:48 · 203 阅读 · 0 评论 -
第8章--异常控制流
在内核调度了一个新的进程运行后,它就抢占当前进程,并使用一种称为上下文切换的机制来将控制转移到新的进程,1)保存当前进程的上下文,2)回复某个先前被抢占的进程被保存的上下文,3)将控制传递给这个新恢复的进程。如果想用调试器单步执行程序,我们会看到一系列的程序计数器(PC)的值,这些值唯一的对应于包含在程序的可执行目标文件中的指令,或是包含在运行时动态链接到程序的共享对象中的指令。当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进程,从此刻开始,该进程就不存在了。原创 2023-06-21 16:00:00 · 60 阅读 · 0 评论 -
第7章--链接
在编译时,编译器向汇编器输出每个全局符号,或者是强或者是弱,而汇编器把这个信息隐含地编码在可重定位目标文件的符号表里。函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号。规则1:不允许有多个同名的强符号。规则2:如果有一个强符号和多个弱符号同名,那么选择强符号。规则3:如果有多个弱符号同名,那么从这些弱符号中任意选择一个。原创 2023-06-17 13:50:04 · 190 阅读 · 0 评论 -
第3章--程序的机器级表示
对于机器级编程来说,其中两种抽象尤为重要。第一种是由指令集体系结构或指令集架构来定义机器级程序的格式和行为,它定义了处理器状态、指令的格式,以及每条指令对状态的影响。第二种抽象是,机器级程序使用的内存地址是虚拟地址,提供的内存模型看上去是一个非常大的字节数组。x86-64的机器代码和原始的C代码差别非常大。程序内存包括:程序的可执行机器代码,操作系统需要的一些信息,用来管理过程调用和返回的运行时栈,以及用户分配的内存块。一条机器指令只执行一个非常基本的操作。原创 2023-05-28 15:00:00 · 285 阅读 · 0 评论 -
第2章--信息的表示和处理
大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都有一个唯一的数字来标识,称为它的地址,所有可能地址的集合就称为虚拟地址空间。原创 2023-05-24 15:30:06 · 37 阅读 · 0 评论 -
第1章--计算机系统漫游
系统中所有的信息–包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。原创 2023-05-20 13:00:00 · 36 阅读 · 0 评论