网络IO_草稿图
2024-01-22 16:34:19   1  举报             
     
         
 网络IO_草稿图
    作者其他创作
 大纲/内容
 1.数据从外部到达网络
  复制完成
  9.唤醒被阻塞的用户程序
  进程C
    总线
  Client-2
  监听
  网卡
  DMA拷贝
  Client
  文件读取缓冲区
  rdllist
  主动关闭
  系统调用
  递交在aio_read中指定的信号中
  数据链路层
  工作队列
  应用层
  Socket
  注册
  用户
  recvfrom
  CPU拷贝
  2.网卡把数据DMA到内存
  EWOULDBLOCK
  ThreadPool
  文件描述符
  等待队列
  buffer
  内存
  Client-1
  socket = new Socket()bind()accept()read()
  9999
  应用进程recvfrom
  thread
  1
  内核空间
  磁盘
  物理层
  进程继续执行
  5.kssoftirqd进程处理软中断,调用网卡驱动收包
  Thread
  CLOSED
  返回可读条件
  FIN_WAIT-2
  处理数据报
  ESTABLISHED
  无数据报准备好
  将数据从内核复制到用户空间
  进程B
  应用进程缓冲区(任意大小)
  用户程序
  套接字发送缓冲区(SO_SNDBUF)
  拷贝
  OSI七层模型
  内核
  SYN_RECV
  ....
  进程A
  引用
  3
  应用进程
  等待数据
  硬件控制器
  read完成
  LISTEN
  客户端连接
  返回
  直接内存
  LAST_ACK
  接收缓冲区
  ServerSocketChannel
  eventpoll
  中断处理程序
  递交SIGIO
  Client-3
  用户进程
  信号处理程序处理数据报
  返回成功提示
  Socket发送缓冲区接收缓冲区等待列表
  6.保存为skb
  selector(多路复用器)
  客户端/服务端
  socketchannel
  .......
  SYNC_SEND
  网络设备缓冲区
  表示层
  内存映射(MMAP)
  task
  数据报准备好复制数据报
  FIN_WAIT-1
  ........
  网络
  Server
  传输层
  开始read
  就绪事件列表rdllist
  内核无数据准备好
  操作系统物理内存
  发送数据
  SelectionKey
  7.协议层处理skb
  进程受阻于select调用,等待可能多个套接字中的任一个变为可读
  4.响应硬中断,发出软中断
  数据复制到应用缓冲区期间进程阻塞
  ESTABLISH
  TIME_WAIT等待2*MSL
  开始send
  2
  socket缓冲区
  网络层
  数据复制到引用缓冲区期间进程阻塞
  添加到等待列表
  复制数据报
  PIPE
  channel注册完返回的SelectionKey与Channel绑定
  数据报准备好
  CLOSE_WAIT
  返回成功指示
  拷贝完成
  会话层
  拷贝数据报
  进程反复调用recvfrom等待返回成功指示(轮询)
  8.放入socket的接收队列
  文件描述符列表
  套接字发送缓冲区(SO_SNDBUF)
  sigaction系统调用
  JVM
  进程阻塞于recvfrom的调用
  select
  发送缓冲区
  3.硬中断通知CPU
  send完成
  将数据从内核拷贝到用户空间
  内核无数据报准备好
  CPU
  建立SIGIO的信号处理程序
  信号处理程序recvfrom
  TCP/IP四层模型
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 