`
erwinbarton
  • 浏览: 12609 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Linux杂记

 
阅读更多

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

 

进程调度算法

 

分享到:
评论

相关推荐

    redhat linux杂记

    【Redhat Linux杂记】 在Linux系统管理中,Red Hat Enterprise Linux(RHEL)是一个广泛使用的发行版。本文主要关注的是在Redhat EL4中如何将系统设置为文本启动模式,以及如何配置和使用Telnet服务,同时也涉及到...

    linux学习杂记.pdf

    Linux学习杂记 本文档总结了Linux学习的要点,涵盖了Linux基础知识、命令操作、文件系统、桌面环境、服务器安装等方面的知识点。 一、Linux基础知识 1. 文本模式密码不显示输入的字符,输入的密码不会出现星号或...

    基于Html语言的Linux知识杂记文档设计源码

    该项目是一个基于HTML语言的Linux知识杂记文档设计源码,共包含39个文件,涵盖33个reStructuredText和Markdown文档、1个许可协议、1个HTML页面、1个JavaScript脚本、1个Python脚本以及2个Markdown文件。内容主要包括...

    Linux 内存杂记(01)1

    在Linux系统中,内存管理是操作系统的核心功能之一。本文主要探讨了Linux内存管理的一些关键概念,包括malloc()函数的工作原理、虚拟内存与物理内存的区别、内存分配策略以及页框管理和Slab缓存机制。 首先,malloc...

    Linux基础命令杂记

    【Linux基础命令杂记】 在Linux环境中,掌握基础命令对于日常运维和开发工作至关重要。这里列举了一些常用的Linux命令,以及如何在Linux系统中与MySQL数据库交互。 1. **登录远程MySQL**: 使用命令 `mysql -h ...

    MartinHub-notes::hundred_points:大数据开发笔记(包括:Hadoop,Hive,HBase,Phoenix,Scala,Spark,Flink,Kafka,Azkaban,Flume,Sqoop,Oozie,DataX等)。Java开发笔记(Java基础,Spring Boot, Spring Cloud,Spring Security,MyBatis-plus,Swagger-UI,Druid,JWT,Lombok)

    Linux 杂记 :bullseye: :hot_beverage: :floppy_disk: :cloud: :memo: :black_nib:本仓库有来源自己总结,网上收集,视频笔记,如果有区别之处,可以联系我进行删除。 :scroll:笔记仓库: GitHub上: ...

    mynane#web-problem#杂记-45.Golang 在 Mac、Linux、Windows 下如何交叉编译1

    Mac 下编译 Linux 和 Windows 64位可执行程序Linux 下编译 Mac 和 Windows 64位可执行程序Windows 下编译 Mac

    liunx操作杂记

    ### Linux操作杂记 在日常使用Linux的过程中,我们经常会遇到各种各样的问题,也需要掌握一些基本的操作技巧来提高工作效率。本文将围绕“liunx操作杂记”这一主题,总结并详细解释一些实用的命令和技巧,包括但不...

    Android平台搭建杂记

    安装NDK时,你可能需要安装Cygwin,这是一个提供Linux命令行环境的工具,对于在Windows下运行NDK命令很有帮助。下载cygwinsetup.zip并安装,选择所有软件包进行安装。安装完成后,打开Cygwin终端,并通过vi编辑器...

    杂记

    【标题】:“杂记”涉及了多个IT领域的知识点,包括数据库、Unix服务、Unix工具、Linux系统管理和配置、密码学以及开发运维。 【数据库】:PostgreSQL和MySQL是两种广泛使用的开源关系型数据库管理系统(RDBMS)。...

    Docs:关于所有事物的杂记

    在“Docs:关于所有事物的杂记”这个压缩包中,我们可以期待找到一系列与软件开发、IT基础架构和数据科学相关的个人笔记。这些笔记可能是作者在长期的学习和实践中积累的知识结晶,涵盖了广泛的IT主题,旨在帮助读者...

    matlab有什么好玩的代码-Blogs:记录一些学习历程与思考的blogs

    matlab有什么好玩的代码 title date categories tags README 2019-11-12 14:39:57 -0800 Blogs 今天(10/21/2017)突然发现我的github不能这样子用,我完全把这玩意儿当成博客网站了,代码...这里是一些杂记:) Matlab 这

    赫夫曼树matlab代码-myBlog:我的博客

    杂记 算法 编程练习题 [Leetcode-19-删除链表的倒数第 n 个节点](./Leetcode-19-删除链表的倒数第 n 个节点.md) [蓝桥杯 基础练习(上)](./蓝桥杯 基础练习(上).md) [蓝桥杯 基础练习(下)](./蓝桥杯 基础练习(下).md)...

    Miscellany:杂项脚本和工具

    杂记 旨在作为Datadog的各种脚本和工具的存储库,以供公众共享。 免责声明 这些项目不是Datadog订阅服务的一部分,仅出于示例目的提供。 不保证它们没有错误,也不是生产质量。 如果您选择使用它们以使其适合在生产...

    谷歌去年玩。调频Scrobbler「Google Play Last.fm Scrobbler」-crx插件

    **当前与Linux媒体密钥支持有关,因此Linux的默认快捷方式分别是previous_song,toggle_play和next_song的Ctrl + Shift + {7,8,9}。 ------------------------------问题:请通过GitHub报告问题。 我以这种方式收到...

    [Python3.X全栈开发]---- 入门与进阶视频教程.docx

    2. **Python环境安装**:涵盖如何在不同操作系统(如Windows、MacOS、Linux)上安装Python解释器,设置环境变量,以及安装集成开发环境(IDE)如PyCharm或VSCode等。 3. **理解写代码与Python的基本类型**:讲解...

    全面系统Python3入门+进阶课程

    此章节详细介绍了如何在不同的操作系统(如Windows、macOS、Linux)上安装Python运行环境。此外,还会涉及如何配置环境变量,以便可以在命令行工具中方便地使用Python。这一章节对于初学者来说至关重要,因为它确保...

    Python3入门到进阶课程

    - **课程目标**:教会学生如何在不同操作系统(Windows、MacOS、Linux)上安装Python环境。 - **核心知识点**: - 下载Python官方安装包 - 安装过程中的注意事项 - 配置环境变量 - 检查安装是否成功 ### 第3章 ...

    CDH5.5.7离线部署文档

    - 下载JDK-7u71-linux-x64.tar.gz,该文件将用于安装Java运行环境,是运行Hadoop及Cloudera Manager的前提条件之一。 3. **CDH下载** - Cloudera Manager的tar.gz文件可以从Cloudera的归档服务器下载,具体文件...

Global site tag (gtag.js) - Google Analytics