![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入理解计算机系统-读书笔记
修行在人间
哈尔滨工业大学电气工程及其自动化专业,2016年本科毕业,工作前两年从事嵌入式软件开发,2019年起转行互联网it,从事服务端后台开发。个人vx,欢迎关注,原创技术相关优质文章,可搜索 itsrohan
展开
-
《深入理解计算机系统》Syetem level I/O
unix中文件种类:EOL在不同系统上的区别:0 1 2三个fd代表的文件:关闭已经关闭的文件,会导致close返回错误(多线程同时操作时)执行一个系统调用大概需要小号20000~40000个时钟周期strace -e trace=write ./xxx只跟踪write系统调用strace -e trace=write,read ./xxx跟踪write和read两个系统调用内核用3个数据结构来表示打开的文件:1. 描述符表:每原创 2020-05-20 21:43:57 · 297 阅读 · 0 评论 -
《深入理解计算机系统》Dynamic Memory Allocation-Basic Concepts
calloc:malloc后,内存清零。realloc:alloc后,改变分配的大小。sbrk:内存分配内部使用,用来增长和缩小堆碎片:内部碎片:外部碎片:需要分配N字节内存时,内存中空间足够,但是没有N字节的块可供分配内存分配需要考虑的问题:1. 如何知道free的指针,包含多大的空间;2. 如何组织空闲块3. 分配一个小块内存时,如何处理原本这个空闲块的剩余部分;4. 如何在许多空闲块中选择一个用来分配内存;5. 如何合并释放...原创 2020-05-20 21:43:04 · 336 阅读 · 0 评论 -
《深入理解计算机系统》Vitual memory system
linux虚拟内存管理:结构如上图所示,pgd指向一级页表的基地址;mmap指向一个,vm_area_struct的结构,每个vm_area_struct都指向了虚拟地址空间的一个区域。vm_area_struct解析:vm_start:虚拟内存块的起始位置;vm_end:虚拟内存快的终止位置;vm_prot:这块内存块的读写执行权限;vm_flags:这块内存是进程私有的,还是与其他进程共享的;vm_next:指向下一块mmaplinux缺页异常处理:当原创 2020-05-20 21:41:43 · 180 阅读 · 0 评论 -
《深入理解计算机系统》Vitual memory concepts
使用虚拟内存,使用mmu的原因:1. 更有效地使用内存,当作磁盘的缓存。由于局部性,将最近访问过的磁盘空间,缓存到内存中;2. 更简单地管理每个进程的内存空间:每个进程具有相似的虚拟内存空间;3. 可以实现对内存访问的保护,隔离每个进程的内存使用,避免一个进程踩到其他进程的内存。术语:PTE page table entry 页表项 页表条目page table 为 page table entry 的数组page hit的情况:这种情况也是需要访问内存,原因时...原创 2020-05-20 21:40:26 · 134 阅读 · 0 评论 -
《深入理解计算机系统》Exceptional Control Flow-Exception and Processes
分支跳转和过程调用与返回,也是异常的一种。较低层次的异常:由操作系统和硬件共同管理较高层次的异常:1. 进程上下文切换:操作系统+硬件定时器2. signals3. 各类跳转异常:当发生一些异常事件(除0,段错误,缺页,算数溢出,IO请求完成)时,控制权从用户态进程交给内核。由内核的异常处理函数来执行。执行结束后,有三种方式处理:1.回到原来的地址重新执行(缺页异常);2.跳到下一条指令继续执行(中断服务程序执行完成后,或按了ctrl-c后,或执行系统调用);3.原创 2020-05-20 21:39:15 · 184 阅读 · 0 评论 -
《深入理解计算机系统》Exceptional Control Flow-Signals and Nonlocal Jumps
shell:shell有一些内建命令,收到命令行字符串之后,首先检查是否时内置命令,如果是,则直接执行;如果不是,则认为命令行是需要执行的可执行文件,直接fork-exec执行。通过这样的方式达到可扩展的优势。信号是一小条消息,通知进程系统中发生了一个某种类型的事件。是完全由软件基于异常机制实现的。以下摘自man 7 signalSignal Value Action Comment ────────────────────────────────...原创 2020-05-20 21:37:51 · 179 阅读 · 0 评论 -
《深入理解计算机系统》Cache memories
cache完全由硬件管理。cache替换算法:假设4个组(set),地址总共4位。四个地址位,被分为标记位(tag),一位;索引位(index),两位,类似虚拟内存管理中的页号(页帧号);偏移位(offset),一位;索引位和偏移位组合,称为块号(block);如果一个组,只有一个缓存行,那么如果块号相同, 则该内容会被清除,换新的内存的数据过来,此时标记位一定是不同的。因为地址是由tag+block组成的。但实际计算机中,往往一个组不只有一个缓存行。这取决于cpu的原创 2020-05-20 21:34:50 · 439 阅读 · 0 评论 -
《深入理解计算机系统》The memory Hierarchy
SRAM(静态RAM)和D%RAM(动态)的比较solid state disk想要写某个页,必须先把它擦除。存储器层次结构示意图:cache miss的几种情况:1. cold miss: cache 是空的2. capcity miss: cache 容量不足以放置所需要读取的数据时(working set > cache size)3. conflict miss: 和cache实现方式有关,cache实现上对特定的block原创 2020-05-20 21:32:52 · 286 阅读 · 0 评论 -
《深入理解计算机系统》Programing Optimization
通用的优化措施:1. for循环里尽可能不放计算;2. 乘法用加法替代;3. 避免在循环中使用内存别名(使用指针进行读写),原因是,编译器无法知道是否有指向相同地址的指针,同时也在对该地址进行读写操作,因此每次循环必须重新从内存中读取新值,建议使用全局变量统一操作,最后循环结束后,再统一赋值给指针。4. 尽量使不同的计算过程无关化,以充分利用流水线/通常来讲,cpu寄存器都有上百个寄存器副本,所以分支预测时,会暂时将计算结果存在副本中,如果预测正确,则写入生效副本中;如果原创 2020-05-20 21:31:08 · 126 阅读 · 0 评论 -
《深入理解计算机系统》Machine level programming-V Advanced topics
B 0KB 3MB 6GB 9TB 12PB pegabytes 15EB Exabyte 18ZB Zettabyte 210x0000 7FFF FFFF FFFF 这个地址在Linux中为栈的起始地址。不安全的函数:getsstrcpystrcatsscanf fscanf scanf 当传入%s时栈溢出:如果发生栈溢出,则由很大可能栈空间的...原创 2020-05-17 12:37:56 · 165 阅读 · 0 评论 -
《深入理解计算机系统》Machine level programming-IV Data
主要讲解数组,之前几节&有关整形。申请数组和申请指针在汇编语言上的区别:申请数组:1.申请了一块内存空间;2.申请了一个指针别名申请指针:只申请了指针别名对齐问题:需要进行对齐的原因:硬件方面的原因。从内存中取值不是一个字节一个字节来取的,而是一块一块来取的,不进行对齐的话,会导致cpu在某些情况下为了取一个int不得不进行2此取值,导致效率问题。在x86上,仅仅会导致效率问题,在某些cpu上,则会导致内存错误。从大到小排列可有效减少内存空原创 2020-05-17 12:36:39 · 201 阅读 · 0 评论 -
《深入理解计算机系统》Machine level programming-III Procedures
主要讲解程序运行的各种过程, 涉及栈,函数调用过程中的数据传输,栈上数据存储.栈结构:栈的数据结构特征是后入先出,有一些场景适合用栈数据结构来设计。%rsp---x86下的16个cpu之中普通的一个,stack pointer。它的值代表现在栈顶的地址。每次在栈上分配空间时,都会对%rsp进行自减。一般会倒着画栈图,为了和linux虚拟地址空间做对应(个人理解)。注意,栈的弹出,只是移动栈指针,被弹出的地址的数据暂时还在。实际执行call指令的时候,一原创 2020-05-17 12:35:12 · 170 阅读 · 0 评论 -
《深入理解计算机系统》machine level programing - II control
Single bit registers:用于条件控制的CF:carry bit 两个数做运算,如果溢出,该位置一,对于无符号计算SF:有符号计算中,最高位为1,即计算结果为负数ZF:如果计算结果为0,该位置位OF:与CF相同。对于有符号计算注:这几个bit在lea指令下不会置位。这些位,一般情况下都会被忽略,只有在 条件判断指令时,会起作用,如cmpq...原创 2020-05-17 12:33:33 · 155 阅读 · 0 评论 -
《深入理解计算机系统》 machine level programing-I
from有道云笔记gcc -Og -S sum.c-Og为为调试准备的优化等级,更容易看懂;-S为只编译出汇编文件;这样编译出来的汇编文件中,以点(.)开头的行,不用理会,为一些标识符,符号等信息。gcc -Og sum.c -o sum编译之后,可以使用objdump工具,进行反汇编:objdump -d sum > sum.d或者使用gdb中的disassemble工具:disassemble sum,其中sum是函数名,可以进行移个函数的反汇编。原创 2020-05-17 12:32:16 · 188 阅读 · 0 评论 -
《深入理解计算机系统》第二章 信息的表示及处理
只记自己觉得需要记的。1. 计算机系统中广泛采用二进制的原因:二进制特别适合存储及传输,纸带的有孔或无孔,点平的高或低等等;2. 大端:最高有效字在前;小端:最低有效字在前;3. &按位与 |按位或 ~按位非未完待续。。。...原创 2019-03-09 16:59:19 · 164 阅读 · 0 评论 -
《深入理解计算机系统》第一章 计算机系统漫游
前言:感觉自己由于是电气工程专业出身,既然现在正在从事软件编程相关工作,同时兴趣也在这里,那么就应该将自身在软件编程方面的基础知识补充一下。通过这阵的面试了解和平常的了解,发现自己在计算机系统、linux内核、数据结构算法方面基础还需加强,虽然自己有意识地去理解,但我觉得还需要系统性地学习才行!只记自己觉得有必要记的。深入理解计算机系统---计算机系统漫游1. 指针与数组索引哪个更高效...原创 2019-03-09 15:39:52 · 700 阅读 · 0 评论