摘要:
一、强度削弱 之前在偶尔看gcc对于除以一个常数的表达式生成的汇编代码中,发现一条除法表达式生成的汇编指令非常多,这些指令中没有乘法操作,比较明显的特征就是进行了一个大整数的乘法,之后是移位啊、减法啊什么的操作,虽然不知道是什么意思,但是感觉很厉害的样子。 后台就觉得这应该是一个优化,搜索了一下,看 阅读全文
摘要:
so运行的方法 在我之前的印象中,so文件是不能直接运行的,但是ld.so改变了我的这种偏见。执行一下动态链接库文件,执行结果为 tsecer@harry :/lib/ld-linux.so.2 Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-P 阅读全文
摘要:
一、udp的报文发送 udp在通常的应用中使用的比较少,可靠的协议通常使用TCP传输,对于的关注自然没有TCP多。尽管UDP具有不可靠的传输问题,和TCP相比,它有一个隐性的优点就是对于packet结构本身的完整性保持。严格意义上讲,这个属性并不是UDP协议单独完成的,而是由IP层完成,对于上层应用 阅读全文
摘要:
一、当前进程current 在内核中,current绝对是一个出镜率非常高的变量,在几乎所有的系统调用中都会用到该变量。由于该变量被使用的频率比较高,所以它的实现要尽可能的快速高效。在最早的内核版本中,这个实现在内核的不同版本中一直在变化,从这个变量也可以引申出一些有意思的问题。 二、早期内核实现 阅读全文
摘要:
一、终端编辑 之前的终端都是为了便于人机交互而设计,交互性比较强。用户输入过程中,通常不是一蹴而就,也不可能没有笔误。所以终端通常是基于行为单位进行处理,在用户输入了回车之后才向用户态返回整个输入内容,也就是shell的一条命令。同样是为了便于用户编辑,在内核态支持简单的编辑命令,例如删除一个单词, 阅读全文
摘要:
一、gdb 硬件watch断点原理 1、直观的例子 硬件断点的watch功能是查找内存被改写的一个必备工具,和其它调试器断点功能一样,它可以快速的理解一个系统的特定方便而不用理解整个系统。对于某些关键变量,我们想知道有哪些地方使用或者初始化这些数据,只需要在该表达式打上数据断点,待命中时查看调用链即 阅读全文
摘要:
一、文件写入的原子性 管道在整个unix系统中有重要的基础设施意义,它使unix工具设计的“职能简单”原则得以实现的基础,不同的工具使用管道协调完成自己的功能,并把一个功能做好。一个想法的提出通常具有明确的场景和简洁的原理,后来需求的不断发展导致问题看起来极为复杂,就像我们现在社会的进化,可能原始社 阅读全文
摘要:
一、文件映射和匿名页面相比,文件映射算是比较幸福的一种映射方式了,它可以依靠每个文件都有的address_space结构来引伸出自己需要的信息,例如,所有映射了这个页面的page可以指向文件对应的inode的address_space结构。在vma侧,它们可以在address_space中建立一个自 阅读全文
摘要:
一、基础数据结构及面临的问题页面结构struct page对于反向映射的实现使用了两个成员:一个是表示映射挂靠位置的内核级唯一结构。对于匿名映射来说,这个结构为一个全局的anon_vma结构;对于文件映射结构来说,这个指针指向的是一个表示地址空间的address_space结构,这个结构也就是我们通 阅读全文
摘要:
一、现象so文件被不同的进程共享,映射入各个进程的地址空间中,这也是SO文件存在的重要原因。作为文件,它的只读部分可以供系统中任意多的进程使用,从而节省系统物理内存使用以及磁盘空间的使用。对于系统级的so文件,我们一般不会修改这些文件的内容,即使修改可能也是无意修改。但是对于一些自己编写的so文件, 阅读全文