CSAPP第七章Linking

Object Files

Object file 有三种形式

  • Relocatable object file
  • Executable object file
  • Shared object file

Relocatable Object Files

CSAPP 书中选取的是ELF格式。

ELF从16字节的序列作为起始,这16字节规定了字的大小和机器的字节顺序(大端或者小端),ELH header剩下的内容帮助连接器分析解释这个object file。而各种sections的信息,如位置和大小,由section header table 给出,它包含了每个sections固定大小的入口。

sections的类型

  • .te xt
    编译后的机器码
  • .rodata
    只读数据,例如printf中的format strings 或者switch的jump tables
  • .data
    初始化的全局和静态变量
  • .bss
    未初始化的全局和静态变量,并且这个section并不占据object file的实际磁盘空间,当程序运行时,这些变量会申请内存并初始化为0
  • .symtab
    symbol table,包含了函数和全局变量的信息。
  • .rel.rext
    是.text section中需要重定位的位置的列表,例如外部函数或者外部的局部变量。和并不包含没有用到的指令。
  • .rel.data
    包含这个object module中定义或者引用的全局变量的重定位信息。
  • .debug
    debugging symbol,只有用了-g选项编译才会产生
  • .line
  • .strtab
    字符串表

计算机网络笔记3.7

Classic TCP Congestion Control

这种方法是当网络拥塞时,TCP减少发送的速率。当网络不拥塞时,TCP增加发送速率。
这样就带来三个问题

  • 当遇到网络阻塞时,TCP如何限制发送的速率?
  • TCP如何感知拥塞?
  • 当发送方感知到了端对端的拥塞时,应当采用什么算法改变速率?

前提概念

$LastByteRead$ 应用进程从缓存中独处的数据流的最后一个字节的编号
$LastByteRcvd$ 从网络中到达的并且已放入主机接受缓存中的数据流最后一个字节的编号
$rwnd$为接受窗口,是表明当前缓存中还有多少剩余的空间
$$ rwnd = RcvBuffer -[LastByteRcvd - LastByteRead] $$
rwnd为白色块

$ cwnd $ 为拥塞窗口,它对发送方向网络中发送流量的速率进行了限制

TCP发送方限制发送连接流量

$ cwnd $ 会对一个TCP发送方能向防落中发送流量的速率进行限制。在一个发送方中未被确认的数据流不会超过$cwnd$和$rwnd$中的最小值。
$$ LastByteSent - LastByteAcked \le min{cwd, rwnd}$$
如果rwnd足够大的时候,发送方能发送的未被确认的数据量取决于$cwdn$,所以通过调节$cwdn$的值,就可以调节发送方向它连接发送数据的速率。