CSAPP
文章平均质量分 80
NULL
aeroseat
这个作者很懒,什么都没留下…
展开
-
深入理解计算机系统 笔记 day13 三种并发编程
@[toc]并发编程三种构造并发程序的方法:进程每个逻辑控制流都是一个进程,由内核调度有独立的虚拟地址空间,和其他流通信要显式的IPC(进程间通信)机制I/O多路复用程序在一个进程上下文中显式调度自己的逻辑流,程序为单独进程,所有流共享地址空间线程线程是运行在单一进程上下文的逻辑流,由内核调度共享地址空间,由内核调度(内核调度的IO多路复用?)基于进程的并发编程 P682构建:父进程接收客户端的连接请求,创建一个新的子进程为每个新客户端提供服务.原创 2021-05-19 18:01:17 · 361 阅读 · 0 评论 -
深入理解计算机系统 笔记 day12 Web,网络
@[toc]网络编程 P643客户端-服务器编程模型模型中应用由服务器进程和客户端进程组成的服务器管理资源,代表客户端进行操作基本操作:事务客户端需要服务时,向服务器发出亲求,即发起一个事务.服务器收到请求后解释并操作它的资源服务器给客户端发送一个响应,等待下一个请求网络简单思维模型对主机而言,网络只是一种IO设备硬件&概念主机上的适配器:IO总线扩展槽上的提供了到网络的物理接口存储一个48位的以太网适配器唯一地址接收的数据从适配器,经过IO.原创 2021-05-19 17:59:56 · 474 阅读 · 0 评论 -
深入理解计算机系统 笔记 day11 系统级IO,共享文件
系统级IO P624Unix IO所有IO设备都模型化为文件,输入输出当作对文件的读写打开文件:程序向内核请求打开相应文件表示想访问一个IO设备内核返回非负整数描述符,标识此文件文件所有信息由内核记录,程序只需记住描述符shell创建每个进程开始时都有3个打开的文件:标准输入 标准输出 标准错误改变文件位置:内核对打开的文件维护文件位置k,为文件开头起始的字节偏移量读写文件:文件位置k>=文件大小m时,读操作会触发EOF(文件结尾没有明确的EOF)关闭.原创 2021-05-03 14:37:04 · 326 阅读 · 0 评论 -
深入理解计算机系统 笔记 day10 虚拟内存
虚拟内存(VM) P559虚拟内存将主存看作磁盘上地址空间的高速缓存,主存中保存活动区域,根据需要在主存和磁盘中传送数据.(一致)为每个进程提供一致的地址空间(私有)保护每个进程的地址空间地址概念 P560物理地址: 主存上,以字节为单位物理地址空间不要求M=2mM=2^mM=2m虚拟地址虚拟地址空间N=2nN=2^nN=2n虚拟地址--地址翻译硬件(MMU(内存管理单元)+操作系统) + 页表(物理内存中)-->物理地址虚拟内存 P561虚拟内存存放在磁盘上也被分.原创 2021-05-02 22:05:08 · 314 阅读 · 0 评论 -
深入理解计算机系统 笔记 day9 异常控制流,进程,信号
异常控制流ECF1.系统需要通过控制流突变对系统状态的变化作出反应2.处理器检测到异常,通过一个异常表跳转表进行间接过程调用,异常表的起始地址放在异常表基址寄存器中,每个异常都有唯一的异常号,为异常表中的索引,有处理器分配的也有操作系统内核分配的.3.异常处理程序运行在内核模式下,从用户程序转移到内核时,信息会被压入内核栈异常的类别 P504中断: IO等待硬件,指令执行过程中处理器检测到中断引脚电压变高,就从系统总线读取异常号,调用适当异常处理程序,处理程序返回时将控制返回给下一条指令原创 2021-04-28 14:42:47 · 148 阅读 · 0 评论 -
深入理解计算机系统 笔记 day8 链接
链接 P465 //待补充编译器驱动程序main.c --C预处理器->main.i(ASCII码中间文件) --C编译器(ccl)->main.s(ASCII码汇编文件) --汇编器(as)->main.o(可重定位目标文件) --链接器程序(ld),组合->prog(可执行目标文件)shell调用加载器,将prog中的代码和数据复制到内存,将控制转移到这个程序开头目标文件: (代码和数据节组成)纯粹是字节块的集合,包含程序代码,程序数据或引导链接器或加载器的原创 2021-04-28 14:40:03 · 86 阅读 · 0 评论 -
深入理解计算机系统 笔记 day7 存储器结构
存储器层次结构 P398随机访问存储器(RAM) P400静态SRAM 双稳态存储器单元 有电永远保持 用于高速缓存动态DRAM 易干扰不稳定 系统会周期性读出重写纠错DRAM16 * 8(d * w)d个(r行c列)超单元,每个超单元由w个DRAM单元(1位)组成8个data引脚传出入一个字节,2个addr引脚携带行列的超单元地址读取:内存控制器先将整行内容复制到内部行缓冲区,再从行缓冲区复制出列地址的超单元主存访问,总线 P405CPU芯片<–系统总线–>原创 2021-04-28 14:36:23 · 267 阅读 · 0 评论 -
深入理解计算机系统 笔记 day6 优化性能,处理器结构,并发与性能
优化程序性能 P342考虑内存别名使用(不同指针可能指向相同地址),限制了编译器的优化策略减少循环中的重复调用某个函数(特别其值一直不变时),将其存储于一个变量中减少不必要的内存引用,在重复计算中计算过程用局部变量替代现代处理器的整体结构控制单元(ICU)读出指令序列并生成一组基本操作,执行单元(EU)执行操作ICU在执行指令前很早就从指令高速缓存中取指,有足够时间译码发送给EU内存引用和算数计算会被分开成不同的基本操作加载和存储单元负责读写内存,每个单元都有一个加法器原创 2021-04-28 14:34:03 · 87 阅读 · 0 评论 -
深入理解计算机系统 笔记 day4 栈,寄存器行为,系统安全,浮点行为
汇编3过程过程调用的机制:传递控制。在进入过程Q的时候,程序计数器必须被设置为Q的代码的起始地址,然后在返回时,要把程序计数器设置为P中调用Q后面那条指令的地址。传递数据。P必须能够向Q提供一个或多个参数,Q必须能够向P返回一个值分配和释放内存。在开始时,Q可能需要为局部变量分配空间,而在返回前,又必须释放这些存储空间运行时栈 P164栈和寄存器存放传递控制和数据,分配内存的信息.超出寄存器存放的大小时就会在栈上分配空间p->q调用时:p压入返回地址q保存p的寄存器状态(如q原创 2021-04-28 14:31:55 · 332 阅读 · 0 评论 -
深入理解计算机系统 笔记 day3 汇编2控制,跳转部分
汇编2控制条件码 P135(略读)leaq只进行地址运算不改变条件码CMP和TEST指令,只改变条件码,有大小后缀,cmp为减test为加先用比较和测试指令再用SET跳转指令 P138直接跳转 jmp .L1 //跳转目标作为指令的一部分编码间接跳转 jmp *%rdx //跳转目标从寄存器或内存中读出(加括号为求值)无括号则跳寄存器中的值,有括号跳寄存器中的值指向的地址条件跳转只能直接跳转,名字与SET指令相匹配跳转指令的编码 P139常用PC相对的(PC-rel原创 2021-04-28 14:30:04 · 136 阅读 · 0 评论 -
深入理解计算机系统 笔记 day2 汇编基础,访问,算数部分
汇编1数据格式一个字节(FF)为8位,2个16进制数一个字(FF FF)为双字节,16位访问信息指令后缀 P119(下为整数,浮点用的另一套寄存器和指令,可能有歧义)b = bytew = wordl = double words(long word)q = quad words(四字)CPU包含一组16个存储四字的通用目的寄存器(x86-64) P119存储整数和指针以 %r 开头内存引用 P121立即数 常见$后跟整数(10或16进制),表示常数值(该地址)寄存器原创 2021-04-28 14:26:28 · 213 阅读 · 0 评论 -
深入理解计算机系统 笔记 day1 整数,浮点
整数运算加法p62无符号 判断相加是否溢出:合是否小于加数有符号 0___+MAX -MAX____-1正溢出结果为负补数(减去2w),负溢出为正补数(加上2w)检测:加数同号(异号不会溢出)但合与其异号-(-MAX) = -MAX (-x 为 ~x+1)乘除法p67乘 可分解为几个2的n次方的合(14 = 232^323 + 222^222 + 212^121) (可通过该乘数的二进制表示的1判断)乘次方则左移n位,最后相加除 2的n次方 右移n位,但负数须加..原创 2021-04-28 14:23:56 · 108 阅读 · 0 评论 -
深入理解计算机系统 笔记 day0 大小端,补码,指针类型与存储地址问题
大小端法p29* 判断:c的unit, 地址强转指针查看,即 unsigned char a = 0x1234567891; printf("%x", (&a)[0]); //指针也可用数组表示法读取字节可以实现溢出,查看别处字节区别数组与元素的关系,如字符串为char数组,没有大小端行为(只为单字节)指针指向地址与指针类型的取指问题p34指针依旧存储首地址,指针类型影响解引用.const char *cp = "abcdef";pri原创 2021-04-28 14:21:26 · 180 阅读 · 0 评论