
Linux
文章平均质量分 86
0Resurrection0
这个作者很懒,什么都没留下…
展开
-
malloc的具体实现
malloc的具体实现转载 2017-03-21 17:10:01 · 571 阅读 · 0 评论 -
Linux的slab分配器
最近一直在看Linux的内存管理,其中在物理内存中Linux对页面的管理引入了伙伴系统和slab。通过学习发现slab其实是一个为了解决伙伴系统的内部碎片和内核对内存初始化性能提升的一种机制。slab小对象分配思想 伙伴关系也好、slab技术也好,从内存管理理论角度而言目的基本是一致的,它们都是为了防止“碎片”,不过碎片又分为外部碎片和内部碎片之说,所谓内部碎片是说系统为了满足一小段内存区(连续)原创 2017-04-28 17:51:17 · 334 阅读 · 0 评论 -
僵尸进程
僵尸进程 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程而会变成孤儿进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程……僵尸进程的危原创 2017-05-06 19:31:27 · 448 阅读 · 0 评论 -
详解kmalloc、vmalloc
IA-32环境下的Linux对用户进程分配4G的虚拟地址空间,低3G是用户独立的空间,高1G是内核空间。用户空间的动态内存分配用malloc,而在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmalloc ,vmalloc。释放内存用的是kfree,vfree,或free_pages. kmalloc函数返回的是虚拟地址(线性地址). kmalloc – 内核分配内存void *原创 2017-04-29 18:37:26 · 2606 阅读 · 1 评论 -
Linux内存管理
内存管理是一个比较大的概念,大家可能在各个地方都会遇到,无论语言中的内存管理、操作系统中的内存管理、数据结构中的内存管理。虽说它们都是对于内存的管理,但是唯独不同的是它们前面的定语不同以及立场不同。比如说数据结构中的内存管理主要关注的是内存管理的方式以及方法,它说关注的并不是内存,它并不管这个内存是物理的还是虚拟的还是堆内存什么的。总的来说它并不在乎对象是什么,而在乎的是管理上的方法。而操作系统中的原创 2017-04-22 20:05:01 · 488 阅读 · 0 评论 -
epoll源码剖析
epoll的实现主要依赖于一个虚拟文件系统:eventpollfs。epoll是个module,module的入口eventpoll_init,通过eventpoll_init初始化。在初始化的过程中,eventpollfs create两个slub分别是:epitem和eppoll_entry。 epoll使用过程中有几个基本的函数分别是epoll_create,epoll_c原创 2017-05-25 15:45:25 · 468 阅读 · 0 评论 -
Linux中listen函数的backlog参数含义
如果你熟悉linux网络编程,那么对listen系统调用一定不会陌生,listen系统调用使一个socket变为一个passive socket。那什么是passive socket呢?就是一个可以用来接收连接,可以在其上调用accept调用的一个socket。调用listen会使socket从CLOSE状态转移到LISTEN状态。因为socket默认创建的是一个主动的socket,所以要作为服务器原创 2017-05-20 13:29:57 · 1349 阅读 · 0 评论 -
linux TCP发送过程源码分析
linux TCP发送过程源码分析——socket层内核版本:3.15.2 Socket数据结构关系发送流程图 以下是send()、sendto()、sendmsg()和sendmmsg()的发送流程图,这四个函数除了在系统调用层面上有些差别,在Socket层和TCP层的实现都是相同的。 应用层 应用层可以使用以下Socket函数来发送数据:...原创 2018-12-29 16:55:48 · 1385 阅读 · 1 评论