Linux 杂记
file-max/file-nr 全局文件打开数,ulimit -n 当前session的文件打开数;
分配算法和数据结构:bitmap,last_fd,
Linux的内存cache的分配算法和数据结构
kmalloc
socket的read()==0 时,什么情况会发生?
tcp的client调用了shutdown,关闭了client -> server的写(也就是收到FIN信号)
udp
socket 还没accept()时,客户端不能connet()?
(非阻塞)能connect,但block在read上?背后的运行是怎样的?返回EINPROGRESS错误,
代表连接还在进行中,可以通过poll/select判断是否可写,可写则是连接完成了;
CLOSE_WAIT, TIME_WAIT 和 FIN_WAIT_1/2状态
TIME_WAIT 会占用资源
SO_LINGER 在close sock前把所有数据发出去;
send() EAGAIN
发送缓冲区满了,需要等一下;
调大发送缓冲区,但每个缓冲区是否对应一个连接还是一个进程?
int opt = 256*1024; //512k setsockopt(tcp_client_sock,SOL_SOCKET,SO_SNDBUF,&opt,sizeof(int));
洗牌算法
socket的连接问题:
长短连接?
连接返回fd<0时,什么情况?刚刚连接上又关闭了。
socket的关闭问题:
shutdown可以关闭一个端口;
FIN_WAIT_2:主动发出FIN后,等待ACK;
TIME_WAIT:主动关闭的一方处于此状态,需要等待MSL,除非同时收到FIN+ACK;
CLOSE_WAIT:被动端,收到FIN后的状态,但自己还需要发数据给主动方;
服务器FIN_CLOSE2状态,
如何在代码中判断出这两种状态:
send/recv两个函数的调用,
send:1)检查sockfd的发送缓冲区,2)如果缓冲区还有数据没发完,等协议发完;或者看看空余的空间;3)copy数据到缓冲区即可返回,交由协议完成发送;
recv:1)等send区发送完毕,然后等协议完成接收完数据;2)recv仅是copy数据,接收数据是协议完成的;
等待协议完成时,网络中断,SIGPIPE,默认是程序退出。
EAGAIN的错误意思:
关于send函数在阻塞模式和非阻塞模式下的区别:
在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调用recv);
在非阻塞模式下,send函数的过程仅仅是将数据拷贝到协议栈的缓存区而已,如果缓存区可用空间不够,则尽能力的拷贝,返回成功拷贝的大小;如缓存区可用空间为0,则返回-1,同时设置errno为 EAGAIN.
accept()惊群现象
一个accept调用激起所有线程的epoll_wait返回,但只有一个线程能accept()成功
prefork or pre-threaded
application层的cache是如果控制一个连接只有一个。
BSD的kqueue:
返回的event里面,flag和filter的区别?,目前标记可读可写的是filter,
另外这是EVFILT_READ和EVFILT_WRITE等是负数,而POLLIN和POLLOUT是正数,不是对应的。
文件描述符的分配策略和数据结构
分配是按需分配?
inode的结构、文件/目录的结构(分配?回收?搜寻?)
Linux Cache
Application->PageTable->FSCache/Slab/AnonymousMem->VFS
进程调度算法
相关推荐
收录了最常用的命令集合及说明,图片来息电子书
linux学习杂记.pdf
Linux 内存杂记(01)1
Linux 杂记 :bullseye: :hot_beverage: :floppy_disk: :cloud: :memo: :black_nib:本仓库有来源自己总结,网上收集,视频笔记,如果有区别之处,可以联系我进行删除。 :scroll:笔记仓库: GitHub上: ...
Mac 下编译 Linux 和 Windows 64位可执行程序Linux 下编译 Mac 和 Windows 64位可执行程序Windows 下编译 Mac
又一次搞Linux生产环境搭建。这是种步骤很多,很繁琐而且又不得不做的事情。虽然做过很多次,但还是有很多步骤、命令不记得,每一次到处找资料很麻烦,于是将一些步骤记下,以便查找。 登录远程MySQL mysql -h...
非常实用的嵌入式Ubuntu使用教程,脉络清晰,知识点全面又不让人迷失在庞大的Linux丛林中,讲解了Linux的基本操作及驱动开发
杂记 数据库(PostgreSql,MySql) Unix服务 Unix工具 Linux 配置_管理_系统 Криптография 开发运维 Курсы
matlab有什么好玩的代码 title date categories tags README 2019-11-12 14:39:57 -0800 Blogs 今天(10/21/2017)突然发现我的github不能这样子用,我完全把这玩意儿当成博客网站了,代码...这里是一些杂记:) Matlab 这
杂记 算法 编程练习题 [Leetcode-19-删除链表的倒数第 n 个节点](./Leetcode-19-删除链表的倒数第 n 个节点.md) [蓝桥杯 基础练习(上)](./蓝桥杯 基础练习(上).md) [蓝桥杯 基础练习(下)](./蓝桥杯 基础练习(下).md)...
杂记 旨在作为Datadog的各种脚本和工具的存储库,以供公众共享。 免责声明 这些项目不是Datadog订阅服务的一部分,仅出于示例目的提供。 不保证它们没有错误,也不是生产质量。 如果您选择使用它们以使其适合在生产...
**当前与Linux媒体密钥支持有关,因此Linux的默认快捷方式分别是previous_song,toggle_play和next_song的Ctrl + Shift + {7,8,9}。 ------------------------------问题:请通过GitHub报告问题。 我以这种方式收到...