`
waterlife
  • 浏览: 67874 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux内核之内核缓冲区的管理

阅读更多

Linux内核采用slab方法来管理内核缓冲区,slab类似于面向对象的方法进行内核区的分配和回收。

 

1. slab可能由1个,2个,4个.......最多32个连续的物理页面构成;

2. 每个slab都有slab的描述结构slab_t,用于同一种对象或多个slab通过描述结构队列头形成一个双向链队列。每个slab结构逻辑上分成3段,对一段是各个slab上所有的对象都已分配使用;第二个是各个slab已经部分使用;最后一段是各个slab上的全部对象都处于空闲状态。

3. 每个slab上都有一个对象区,这是对象数据结构的数组,以对象的序号为下标就可以得到具体对象的起始地址;

4. 每个slab上还有一个对象链接数组,用来实现一个空闲对象链;

5. 每个slab上有个字段,表明slab上第一个空闲的对象;

6. slab上还有一个计数器,当一个空闲对象分配时,计数器加1,并从空闲队列中脱链;

7. 当释放一个对象时,只要调整链接数组中的相应元素以及计数器,并且根据此slab的使用情况调整其在slab中的位置;

8. slab的头部都有一个着色区,用来和高速缓存对齐,并且每个slab的着色区尽量安排成不同大小,以使得不同slab上的同一位置的对象的起始地址在高速缓冲中相互错开;

9. 每个slab上最后一个对象也有一个小小的废料区是不用的,这是对着色区的补偿。但该区域与着色区的总和对于同一种对象的各个slab是个常数;

 

系统有个总的slab队列,其对象是各个其它对象的slab队头,其对象是各个其他对象的slab队头。对于大对象和小对象,slab结构略有不同。小对象的控制结构不是放在它所在的slab上,而是集中放置在另外的slab上。并非所有内核的数据结构都使用专用的缓冲区队列,一些不太常用的或初始化开销不大的还是使用通用的缓冲机制。

 

所以Linux中还有既类似于物理页面中所采用按大小分配的方法,又采用slab方式管理的通用缓冲池,称为slab_cache与cache_cache不同,它的顶层不是一个队列而是一个结构数组,数组中的每个元素指向一个不同的slab队列。这些slab队列的不同之处在于所载对象的大小,最小32,64直至128K。

 

分配一个不具slab队列的数据结构而不必为之使用整个页面时,就应该通过kmalloc()分配,释放是kfree();大小接近一个页面时,使用alloc_pages()。

vmalloc()从内核虚拟空间(3G以上)分配一块虚存以及物理内存,类似于系统调用brk();只不过brk()是由进程在用户空间启动并从用户空间分配,而vmalloc()则是在系统空间启动并分配的。由vmalloc()分配的空间不会被kswapd换出,因为kswapd只扫描各进程的用户空间;对于kmalloc()分配的空间,kswapd只是在各个slab队列中寻找和收集空闲不用的slab,不会将尚在使用的slab所占的页面换出

分享到:
评论

相关推荐

    Linux内核缓冲区管理

    Linux内核缓冲区管理是操作系统核心中的重要组成部分,它负责高效地处理系统中数据的存储和传输。在Linux系统中,缓冲区管理机制确保了内存资源的有效利用,尤其是在处理I/O操作时,如磁盘读写,网络传输等。本文将...

    linux内核缓冲区管理

    ### Linux内核缓冲区管理详解 #### 一、概述 Linux内核中的缓冲区管理是一项关键技术,它确保了操作系统能够高效地处理各种内存资源。在Linux内核2.6及之后的版本中,针对内存管理和缓冲区管理采用了多种优化算法...

    linux内核缓冲区管理课件.rar

    Linux内核缓冲区管理是操作系统核心的一个重要组成部分,它涉及到数据在内存与磁盘之间高效、安全地交换。本课件“Linux内核缓冲区管理”深入探讨了这一主题,帮助用户理解Linux如何管理和优化这一过程。其中包含的...

    Linux内核缓冲区管理 ppt

    Linux内核缓冲区管理 ppt 本人制作的操作系统讲稿,感觉讲的还比较清晰,希望对你有帮助

    Linux2.6+slab内核缓冲区管理

    总的来说,Linux 2.6的slab内核缓冲区管理通过对象缓存策略,实现了内存分配的高性能和低开销,这对于现代操作系统来说至关重要,尤其是在服务器和嵌入式设备中,内存资源往往非常宝贵。通过理解slab的工作机制,...

    Linux2.6 slab内核缓冲区管理

    Linux2.6 slab内核缓冲区管理 讲的非常不错,对Linux内核的理解非常有帮助

    Linux内核Slab内存缓冲区管理器.pdf

    Linux内核的Slab内存缓冲区管理器是用于高效管理内核对象的一种机制,它针对的是内核在运行过程中频繁创建、使用和回收的小对象内存分配。Slab管理器的引入解决了传统内存分配方法中可能导致的浪费和低效问题。 在...

    linux内核缓冲区管理课件.avi

    linux内核缓冲区管理课件.avi

    Linux内核源码剖析:TCP IP实现(上册).pdf

    针对特定应用场景,可以通过调整TCP参数来优化网络性能,例如增加TCP缓冲区大小以减少丢包率,或启用快速重传机制提高传输效率。 #### 2. 安全性考虑 在实现TCP/IP协议栈时还需要考虑安全性问题,例如防止SYN洪水...

    Linux内核的内存管理探秘之三 物理内存的管理(二)页面周转与缓冲区.pdf

    "Linux内核的内存管理探秘之三 物理内存的管理(二)页面周转与缓冲区" Linux内核的内存管理探秘之三 物理内存的管理(二)页面周转与缓冲区是Linux内核的内存管理机制中一个重要的部分。物理内存的管理是指操作系统...

    linux内核技术文档

    这份文档对于软件开发者、系统管理员、设备驱动程序编写者以及对Linux内核感兴趣的任何人都具有极高的价值。 在Linux内核技术文档中,你可以找到以下关键知识点: 1. **内核架构**:Linux内核采用微内核架构,其...

    linux内核调试方法总结

    4 记录缓冲区 5 syslogd/klogd 6 dmesg 7 注意 8 内核printk和日志系统的总体结构 9 动态调试 六 内存调试工具 1 MEMWATCH 2 YAMD 3 Electric Fence 七 strace 八 OOPS 1 ksymoops 2 kallsyms 3 Kdump 九 KGDB 1 ...

    《Linux 0.11内核完全注释》PDF

    4. **文件系统**:Linux 0.11内核支持的文件系统类型,如EXT(Extended File System),文件的读写操作,目录结构的管理,以及缓冲区管理和缓存策略。 5. **设备驱动**:内核如何与硬件交互,包括字符设备和块设备...

    基于linux用户态可自控缓冲区管理设计与实现1

    【基于Linux用户态可自控缓冲区管理设计与实现】 在计算机系统中,尤其是在网络通信领域,高效地管理和使用内存是至关重要的。传统的缓冲区管理方式可能会因为频繁的内存分配和释放导致内存泄露或者资源浪费。针对...

    深入分析Linux内核源码.chm

    第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 ...2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    - **2.10 内核缓冲区的管理** - 缓冲区用于暂时存储数据,以减轻磁盘I/O的压力。 - 缓冲区管理的好坏直接影响到系统的整体性能。 - **2.11 外部设备存储空间的地址映射** - 外部设备如硬盘、网络接口等,也需要...

    linux内核0.11和2.40

    Linux内核是操作系统的核心部分,负责管理系统的硬件资源、提供系统调用接口以及调度进程等。本主题将探讨两个重要的Linux内核版本:Linux 0.11和2.4.0,它们在Linux发展史上具有里程碑式的意义。 **Linux 0.11内核...

    深入理解linux内核word版本

    这些字段包括通用字段如数据指针和长度,以及功能专用字段如头部和尾部指针,还有管理函数,如用于分配和释放缓冲区的函数。接着,作者深入剖析了网络设备数据结构net_device,它包含了设备的配置信息、统计信息、...

Global site tag (gtag.js) - Google Analytics