socket是应用层与TCP/IP协议族通信的中间软件抽象层。它是一组接口,把复杂的TCP/IP协议族隐藏在socket接口中。
socket工作流程
TCP:
UDP:
socket
int socket(int domain, int type, int protocol);
domai...
阅读更多
可执行文件的加载
当我们在 Linux 下的bash下输入一个命令执行可执行程序时,
bash 进程会调用fork()创建一个新的进程,
新的进程调用execve()系统调用来执行指定的可执行程序。
bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户的输入。
execve()的系统...
阅读更多
地址无关代码和非地址无关代码主要区别在于代码中的地址引用方式。
非地址无关代码
非地址无关代码所有的地址引用都是固定的绝对地址。编译器在编译时就确定了函数调用、全局变量访问等指令中的具体内存地址。
编译和链接:在链接阶段,链接器会为函数调用和全局变量访问生成绝对地址(这里的绝对不是指物理内存地址,而是...
阅读更多
页
页是操作系统进行内存管理的基本单位,在虚拟内存系统中,计算机将虚拟地址空间和物理内存都分割成固定大小的块,这些块就称为页,通常大小为4KB(也有更大页的支持,如2MB或1GB,称为大页或巨页)。
页是操作系统进行虚拟内存管理的基石。无论是分配内存、读写磁盘上的文件,还是进行进程间的内存共享,都是以页为单位来...
阅读更多
mmap()系统调用,用于将文件映射到进程的地址空间中。这个过程创建了一个虚拟内存区域,把对文件的操作转为对内存的操作,以此避免更多的lseek()与read()、write()操作,这点对于大文件或者频繁访问的文件带来显著的性能提升。
传统的读写文件
页缓存(page cache)是读写文件时的中间层,...
阅读更多
ELF (Executable and Linking Format) 是Linux 下标准的可执行文件格式,一个ELF文件主要用来表示3种类型的文件:
可执行文件 : 被操作系统中的加载器从硬盘中读取,加载到内存中去执行。
目标文件(.o) :被链接器读取,用来产生一个可执行文件或者共享文件。
共...
阅读更多
延时ACK
延时ACK是一种优化TCP性能的机制。它的核心思想是:接收方不立即发送对每个数据包的确认(ACK),而是等待一小段时间,如果在这段时间内有数据需要发送给对方,就把ACK和数据捎带一起发送。
linux实现中,每连续收到两个完整的报文段,或者等待40毫秒(延时ACK计时器超时时间)未收到新的报文...
阅读更多
SACK
在传统的TCP确认机制中,接收方只能发送一个累积确认,告诉发送方它已经收到了某个序列号之前的所有数据。例如,发送方发送了数据包1、2、3、4、5,如果数据包3丢失了,接收方只能发送ACK 3,表示它收到了2,但期待3。发送方收到ACK 3后,并不知道3后面的4和5是否已经收到,它会重新发送3以及3后面的...
阅读更多