P13:用户栈和运行时堆有什么区别?数据结构中常常说堆栈,这里的堆和栈同样吗?和操做系统的堆、栈有什么区别?html
参考:堆和栈的区别(内存和数据结构)程序员
操做系统:算法
P31:C格式化指令“%.2x”代表整数必须用至少两个数字的十六进制格式输出。以前学过“%7.2f”,点后的2指的是小数点后两位,那么“.2x”中的点表明什么?编程
点号,用语分隔字段宽度和精度。因此2表示精度。对于字符串,它指定打印的字符的最大个数;对于e、E或f转换,它指定打印的小数点后的数字位数;对于g或G转换,它指定打印的有效数字位数;对于整
型数,它指定打印的数字位数(必要时可填充位0以达到要求的宽度)。也就是若是是0x6,则输出06。但"%2x"输出还是6,2是宽度,6的前面有一个空格(C 格式化输出问题 %2x与%x,有什么区别)。服务器
P117:以前学习系统调用时知道,系统调用传入参数按顺序赋值给ebx、ecx、edx、esi、edi、ebp,虽然这里不是系统调用,可是为何x放在%rdi,y放在%rsi,dest放在%rdx?网络
参考64位和32位的寄存器和汇编的比较数据结构
P284:时刻240时钟上升以前,A中的I2已经到达第一个流水线寄存器的输入,I1在阶段B中的值已经到达第二个流水线寄存器的输入。A中的I2不是该到B中了吗?怎么会跑到第一个流水线寄存器中?并发
首先得先知道流水线寄存器是什么东西,看的比较粗,漏掉了前面的一句话“ABC是三个阶段,在各个阶段之间放上流水线寄存器”。回看后知道了第一个流水线寄存器在A和B之间,因此A中的I2准备到B,在240时钟上升以前到达A和B之间的第一个流水线寄存器的输入,时钟一上升,I2就跑到这个寄存器里,成为它的输出。函数
P392:小结中提到没有任何编译器能用一个好的算法或数据结构代替低效率的算法或数据结构,那么如何选择好的算法或数据结构,程序员怎么才知道本身选择的就是最优?性能
其实我想了想仍是一个经验的问题,写多了见多了天然就知道了。其次对各个算法的时间空间复杂度还需了解。
P404:若是断电,DRAM和SRAM会丢失他们的信息,那咱们在关闭电脑时,数据保存到哪了呢?
通过搜索我知道了外存储器在断电后能保存数据,因此计算机电源关闭后,全部数据保存在硬盘中。开机后,想用硬盘上的信息,请装入内存。
P485:这里提到程序的入口点是_start函数的地址,咱们学的入口点不是Entry point address吗?两者有什么联系?
参考为何 __start 是处理器执行的第一条指令?--entry=__start 在连接时从新指定了程序入口点为 __start。
P504和P526:本章先讲了中断、陷阱、故障、终止,发生后找到异常表中的异常处理号,再找到异常处理程序。而在后面又讲了信号。这两个地方都提到被零除,那发生此状况时究竟是产生异常仍是发出信号?
首先信号和中断的比较 + 中断和异常的比较给出了异常和函数产生信号的方式以及进程的处理过程图:
而后要把CPU和操做系统的行为分开。CPU一条指令一条指令地译码执行,当它执行到被零除错误指令时,就跳转到异常向量。操做系统负责管理全部用户的程序,若是程序要求执行一个除零错,CPU跳到异常向量了,操做系统跳转到信号处理程序。
本章讲的是虚拟内存,还有一个概念是逻辑地址,虚拟地址和逻辑地址有什么区别?
参考LINUX 逻辑地址、线性地址、物理地址和虚拟地址,文章说的很是详细了,再也不赘述。
P624:“open函数返回的描述符老是在进程中当前没有打开的最小描述符”,这句中的描述符是什么?
文件描述符是一个整型的数据,它是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表,全部对文件的操做都经过文件描述符实现。程序刚启动的时候,0是标准输入,1是标准输出,2是标准错误。若是此时打开一个新的文件,它的文件描述符会是3。返回文件描述符fd,因此在关闭该文件的时候就是close(fd)。FILE结构体里包含一个文件描述符和一个I/O缓冲区。
P654:在介绍connect函数时知道了客户端经过调用connect函数来创建和服务器的连接,在这之间,connect函数会阻塞,那么如何解决阻塞问题?
参考connect()函数处阻塞时间过长,如何解决?,里面的代码看的不太明白,大概意思就是设置非阻塞方式链接或另起线程。
本章12.5标题是“用信号量同步线程”,下属小标题为12.5.3“使用信号量来实现互斥”。互斥和同步我以为是一个层次上的概念,互斥是一种特殊的同步,同步是一种更为复杂的互斥,两者没有包含关系。而二级标题是一级标题的展开,在里面有点包含意思,因此这样安排标题是否不妥?