linux编程备忘

进程

进程内存结构

​​​​​​​在这里插入图片描述

虚拟内存管理

在这里插入图片描述

父子进程创建与通信

在这里插入图片描述

父子进程COW机制

逻辑层面
在这里插入图片描述

物理层面
在这里插入图片描述

进程创建速度

在这里插入图片描述

进程优先级(nice值)

传统UNIX实现中只有特权进程才能赋予自己一个高优先级,而非特权进程只能降低自己的优先级(这样做对其他进程就友好了,nice值也由此而来)
在这里插入图片描述

进程、进程组、会话关系

在这里插入图片描述

作业控制

在这里插入图片描述

孤儿进程组

在这里插入图片描述

系统日志

在这里插入图片描述

线程

线程数据结构

在这里插入图片描述

多线程内存结构

在这里插入图片描述

多线程修改共享变量

无同步处理
在这里插入图片描述

通过互斥量控制同步资源访问
在这里插入图片描述

Reactor模型

Reactor单线程模型

所有IO操作都在一个Reactor线程中执行
在这里插入图片描述

Reactor多线程模型

单独的Acceptor线程处理客户端连接,其余网络IO有IO线程组处理
在这里插入图片描述

主从Reactor多线程模型

不再是单独的Acceptor线程处理客户端连接,而是一组独立的线程池来处理,处理完连接后后续的网络IO交给IO线程组完成
在这里插入图片描述

IPC

进程和线程通信方法
在这里插入图片描述

IPC工具标识符和句柄

在这里插入图片描述

管道通信

在这里插入图片描述

ls | wc -l
在这里插入图片描述

在这里插入图片描述

FIFO实现C/S通信

在这里插入图片描述

System V IPC

System V IPC对象数据结构

在这里插入图片描述

System V 消息队列实现C/S通信

在这里插入图片描述

System V 消息队列实现文件服务器

在这里插入图片描述

System V 信号量同步进程

在这里插入图片描述

多进程同时初始化信号量同步控制
在这里插入图片描述

System V 共享内存

使用共享内存和信号量完成进程通信

在这里插入图片描述

共享内存位置

在这里插入图片描述

通过文件创建内存映射
在这里插入图片描述

多个进程通过文件映射内存

在这里插入图片描述

非线性文件内存映射(虚拟内存顺序和文件页顺序不对应)
在这里插入图片描述

POSIX IPC

在这里插入图片描述

SOCKET

流SOCKET

在这里插入图片描述

未决的socket连接

在这里插入图片描述

流socket通信

在这里插入图片描述

数据报socket

在这里插入图片描述

零拷贝

sendfile()实现零拷贝,不用经过用户空间

在这里插入图片描述

TCP/IP

在这里插入图片描述

网络包结构简单示意

在这里插入图片描述

TCP

报文格式

在这里插入图片描述

TCP报文确认机制

在这里插入图片描述

TCP状态机

在这里插入图片描述

TCP三次握手

在这里插入图片描述

TCP四次挥手

在这里插入图片描述

网络字节序

大端字节顺序和小端字节顺序

在这里插入图片描述

粘包/拆包

粘包拆包有很多原因,最主要是因为TCP是数据流,TCP会根据自己的缓冲区、MTU等进行业务报文的粘拆
在这里插入图片描述

IP

在这里插入图片描述

IPV4转IPV6,前80位全0,接着16位全1,后面32位放IPV4地址
在这里插入图片描述

DNS

在这里插入图片描述

IO

阻塞IO

整个生命周期都阻塞,从调用系统调用到系统调用返回数据期间一直阻塞
在这里插入图片描述

非阻塞IO

设置IO的NON_BLOCKING标识,当无数据返回时返回特定错误。轮询检测是否有数据到来
在这里插入图片描述

IO多路复用

进程监听多个fd,对于select/poll每次调用都要传递监听的fd,某个fd存在文件就绪,就可调用,实际上也是轮询的一种。对于epoll,内核会记住监听的fd列表,不用每次都传, 某个fd存在文件就绪,会通过回调函数通知进程
在这里插入图片描述

IO多路复用方案对比

水平触发,可以在任意时刻检查文件描述符的就绪状态

边缘触发,只有在文件描述符就绪时才会通知,且在下一个文件描述符就绪前不会有任何其他通知

在这里插入图片描述

select()和poll()对比

不同事件对应不同的标识
在这里插入图片描述

epoll\select\poll性能对比

在这里插入图片描述

信号驱动IO

通过信号处理器监听信号,当fd就绪时会发送对于信号,信号处理器收到对应信号通知应用程序完成数据读写
在这里插入图片描述

异步IO

同信号驱动IO类似,区别是信号驱动IO由内核发送信号通知应用程序可进行IO操作,而异步IO由内核告诉应用程序IO操作已完成可以就行对应的数据处理
在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值