基础理解
对关键技术的设计思想、工作原理的立即
bilidi
这个作者很懒,什么都没留下…
展开
-
Linux socket
创建一个socket,利用sys_socket系统调用:1.申请一个socket数据结构并且填入相应的值。由于socket是inode数据结构的一部分,所以申请一个socket实际上是申请一个空白的inode,注册自己的文件操作集proto_ops,其包含了几乎所有的协议操作函数(release、bind、connect、accept、listen等)。(第一层 BSD socket)2.调用下层具体协议族相关的socket创建函数创建sock。(第二层 INET socket 层)...原创 2020-06-09 23:38:48 · 237 阅读 · 0 评论 -
堆与内存管理
当程序对堆的操作比较频繁的时候,使用系统调用的方式向内核索要空间的代价太大。比较好的做法是向操作系统申请一块适当大小的额堆空间,然后又程序自己管理这块空间,所以管理空间分配的往往时程序的运行库。运行库相当于零售商,从内核批发了较大的堆空间,然后零售给程序使用。Linux进程堆管理Linux下的进程堆管理提供了两种堆空间分配方式,即两个系统调用:brk()系统调用和mmap()系统调用。brk():int brk(void* end_data_segment)brk()的作用是设置进程数据段的结束原创 2020-06-01 11:58:02 · 165 阅读 · 0 评论 -
一次完整的函数调用中栈的情形
寄存器 ebp 帧指针,esp栈顶帧寄存器函数调用时的压栈顺序:1.把所有或者一部分参数压入栈中。2.把当前指令的下一条指令的地址压入栈中(返回地址,call)3.跳转到函数执行(2和3由指令call一起执行)。4.push ebp:把ebp压入栈中(old ebp 用于恢复调用者的栈帧)5.mov ebp,esp:ebp下移指向栈顶。6.sub esp,xxx:为被调用函数分配xxx字节的栈空间,若为最深处调用则无此步。7.push xxx:如果由必要,保存名为xxx的寄存器(可以重复多个原创 2020-05-31 22:22:57 · 222 阅读 · 0 评论 -
Redis的文件事件和 I/O 多路复用机制
众所周知,Redis是一款优秀的非关系数据库,用在对访问延迟要求较高的一些项目中。得益于Redis本身的简单性和优良的设计,其在单线程条件下达到了很高的性能指标。其中最为重要的技术是Redis中的 I/O 多路复用。Redis中的事件 Redis中存在两种事件,一种是服务器中通过 socket 和客户端进行通信产生的文件事件。另一种是Redis服务器中需要定时执行的操作,称为时间事件。本...原创 2020-02-25 12:42:28 · 339 阅读 · 0 评论