首页
学习
活动
专区
圈层
工具
发布

linux内存管理slab算法之slab初始化

业余时间写的玩具操作系统,准备把内存管理部分加强一下,伙伴系统分配页面算法已经完成,下面就要开始写更加细粒度的内存分配,毕竟伙伴系统是按照页为基本单位分配的,参考内核版本linux2.6.30,没分析高版本的源码...kmalloc函数就是从slab分配的。整体结构就是如下图,其中一个slab包含1到多个页面,slab管理结构可能在页面上,也可能从其它kmem_cache上动态分配的。    ...每个slab包含页面的阶 /* force GFP flags, e.g....partial list first, better asm code *///部分空slab类型链表 struct list_head slabs_full; //满slab类型链表 struct..., NULL); } //slab早期初始化结束 slab_early_init = 0; while (sizes->cs_size !

1.3K10

Linux slab分配器

在Linux中,伙伴系统是以页为单位分配内存。但是现实中很多时候却以字节为单位,不然申请10Bytes内存还要给1页的话就太浪费了。slab分配器就是为小内存分配而生的。...slab分配器分配内存以Byte为单位。但是slab分配器并没有脱离伙伴系统,而是基于伙伴系统分配的大内存进一步细分成小内存分配。...走进slub 做个小实验: #include linux/module.h> #include linux/init.h> #include linux/slab.h> #include linux...相关参数也可以通过如下路径查看: ? 总结:slab从buddy拿到一个order为0的内存,也就是一页,然后把这一页称为名为slub_test的slab,然后把这一页分成很多小的object的。...当我们使用的时候就从slab中获取一个object使用,用完了在归还给slab管理即可。 ?

2.5K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内存管理 - slab分配器

    Linux内存管理是一个非常复杂的子系统,要完全说清的话估计要一本书的篇幅。但Linux内存管理可以划分成多个部分来阐述,这篇文章主要介绍slab算法。...Linux有个叫伙伴系统的分配算法,这个算法主要解决分配连续个内存页的问题。...为了解决小内存分配问题,Linux使用了slab分配算法。 相关数据结构 slab算法有两个重要的数据结构,一个是kmem_cache_t,另外一个是slab_t。...2) 如果slab_partial列表中没有可用的slab,那么就从slab_free列表中查找可用的slab,如果有可用slab,就从slab分配一个对象,并且把此slab放置到slab_partial...分配对象的时候就是先通过slab结构的free字段查看是否有空闲的对象可用,free字段保存了空闲对象链表的首节点索引。

    3K51

    linux内存源码分析 - SLAB分配器概述

    在SLAB分配器中将SLAB分为两大类:专用SLAB和普通SLAB。...专用SLAB用于特定的场合(比如TCP有自己专用的SLAB,当TCP模块需要小内存时,会从自己的SLAB中分配),而普通SLAB就是用于常规分配的时候。...我们可以使用命令查看SLAB的状态 cat /proc/slabinfo 命令结果如下: ?   ...kmem_cache结构   虽然叫SLAB分配器,但是在SLAB分配器中,最顶层的数据结构却不是SLAB,而是kmem_cache,我们暂且叫它SLAB缓存吧,每个SLAB缓存都有它自己的名字,就是上图中的...如果看了我linux内存源码分析 - 页框分配器的朋友,或许可以联系起来了。SLAB就是一组连续的页框,它的描述符结合在页描述符中,也就是页描述符描述SLAB的时候,就是SLAB描述符。

    2.4K40

    伙伴系统和slab机制

    伙伴系统 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表。...Linux中采用4KB大小的页框作为标准的内存分配单元。 在实际应用中,经常需要分配一组连续的页框,而频繁地申请和释放不同大小的连续页框,必然导致在已分配页框的内存块中分散了许多小块的空闲页框。...为了避免出现这种情况,Linux内核中引入了伙伴系统算法(buddy system)。...slab机制 slab是Linux操作系统的一种内存分配机制。...Linux 的slab 可有三种状态: 满的:slab 中的所有对象被标记为使用。 空的:slab 中的所有对象被标记为空闲。 部分:slab 中的对象有的被标记为使用,有的被标记为空闲。

    2.7K11

    通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)

    linux查看用户密码(linux查看用户密码命令) 2020-05-15 13:18:30 共10个回答 1、用户名和密码的存储位置存储帐号的文件:/etc/passwd存储密码的文件:/etc/shadow2...目前还没有这个命令,如果你非想查看,去下载个软件吧.Windows下都不能查看本地用户的密码,Linux下还没听说呢,可以修改,要查看,去问下Torvals吧,他应该知道!...~~ linux下你只能看到加密后的密码,密码文件在/etc/shadow中,只能通过root用户查看....linux用户身份与群组记录的文件cat/etc/group查看用户组cat/etc/shadow查看个人密码cat/etc/passwd查看用户相关信息这三个文件可以说是:账号,密码,群组信息的的集中地...w或who查看用户在线信息和登录信息 Linux中查看所有用户只需要查看/etc/passwd这个文件就可以了,命令是:cat/etc/passwd.这个文件里面一行内容就是一个帐号,除去一些系统帐号如

    108.6K21

    Linux查看开放端口_linux查看对外端口

    etc/selinux/config 修改 selinux 配置文件 将SELINUX=enforcing改为SELINUX=disabled,保存后退出 reboot #重启服务器 CentOS6 linux...查看并对外开放端口(防火墙拦截处理) 查看端口是否可访问:telnet ip 端口号 (如本机的35465:telnet localhost 35465) 开放的端口位于/etc/sysconfig.../iptables中 查看时通过 more /etc/sysconfig/iptables 命令查看 如果想开放端口(如:8889) (1)通过vi /etc/sysconfig/iptables 进入编辑增添一条...iptables -A和-I的区别](https://www.cnblogs.com/mustark/p/11189883.html) 若/etc/sysconfig/iptables不存在, 原因:在新安装的linux...命令随便写一条防火墙规则,如:iptables -P OUTPUT ACCEPT 使用service iptables save进行保存,默认就保存到了/etc/sysconfig目录下的iptables文件中 Linux

    104.2K32

    linux防火墙状态查看_linux查看iptables状态

    1.查看防火墙状态:active (running) 即是开启状态: systemctl status firewalld 2.查看已开发端口命令:firewall-cmd –list-all...firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewalld 6.配置firewalld-cmd命令 查看版本...: firewall-cmd –version 查看帮助: firewall-cmd –help 显示状态: firewall-cmd –state 查看所有打开的端口: firewall-cmd –zone...=public –list-ports 更新防火墙规则: firewall-cmd –reload 查看区域信息: firewall-cmd –get-active-zones 查看指定接口所属区域:...:systemctl is-enabled firewalld.service 查看已启动的服务列表:systemctl list-unit-files|grep enabled 查看启动失败的服务列表

    42.3K10
    领券