操作系统笔记

进程与线程

区别与联系

进程是系统资源分配的最小单位,线程是程序执行的最小单位,进程使用独立的数据空间,为线程共享进程的数据空间。

线程调度

  • 时间片轮转调度
  • 先来向服务调度
  • 优先级调度
  • 多级反馈队列调度

线程切换的步骤

线程的上下文切换,明白线程切换的代价。

进程之间的通信(IPC)面试中间件研发常考

六种进程间通信方式的原理和适用场景。
例如:

  • 进程间数据共享的场景:共享内存
  • 进程间数据交换的场景:UnixSocket和消息队列

协程

TCP协议

tcp是传输层协议,对应OSI网络模型中的第四层传输层。

TCP协议的特点:

  • 基于链接(点对点)
  • 双工通信
  • 可靠传输
  • 拥塞控制
  • 基于字节流而非报文(通过ACK确认收到的数据编号)

TCP实现细节:

  • 8种报文状态
  • 滑动窗口机制——流量控制能力——本质:动态缓冲区
  • 拥塞控制:慢启动、拥塞避免、拥塞发生、快速回复四个算法
  • KeepAlive 的参数设置
  • Nagel算法的规则

三次握手建立连接

Client Server SYN_SENT LISTEN SYN SYN_RCVD SYN、ACK ESTABLISHED ACK ESTABLISHED Client Server TCP三次握手建立连接

三次握手是为了建立Client和Server的双向连接。

SYN洪水攻击发生的原因:Server收到Client的SYN请求并回应SYN和ACK,但是Client却不回应ACK,导致Server端大量的链接处于SYN_RCVD状态,进而影响其他正常请求的建链。
解决办法可以通过设置Linux的参数tcp_synack_retries的数值来加快半连接的回收速度。

net.ipv4.tcp_synack_retries = 2

传送门-关于TCP 半连接队列和全连接队列

四次挥手断连

Client Server ESTABLISHED FIN_WAIT_1 ESTABLISHED FIN CLOSE_WAIT ACK FIN_WAIT_2 LAST_ACK FIN TIME_WAIT ACK CLOSED 2MSL CLOSED Client Server TCP四次挥手断开连接

MSL: 最大报文段生存时间

为什么需要等待2MSL再关闭连接?
1、保证TCP协议的全双工连接可靠关闭
2、保证这次连接中的重复数据段能从网络中消失,防止端口重用的时候出现数据混淆

实际应用中出现大量Socket处在TIME_WAIT和CLOSE_WAIT状态的问题
开启Linux的TCP参数tcp_tw_reuse、tcp_tw_recycle 能够加快TIME_WAIT状态的回收
CLOSE_WAIT被动关闭连接的一方代码存在bug,没有正确关闭连接导致

TCP三次握手和四次挥手

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值