当前位置: 首页 > news >正文

比利时网站后缀做漫画封面的网站

比利时网站后缀,做漫画封面的网站,wordpress文章链接怎么改,免费制作图片Linux struct page 的双字对齐设计思想1.双字对齐(8字节对齐):确保struct page的大小是sizeof(long)的整数倍(通常8字节),便于CPU高效访问。减少内存碎片,提高缓存行(Cache Line&…

Linux struct page 的双字对齐设计思想

 

1.双字对齐(8字节对齐):

 

 确保struct page的大小是sizeof(long)的整数倍(通常8字节),便于CPU高效访问。

 

 减少内存碎片,提高缓存行(Cache Line)利用率。

 

2.联合体(union)复用字段:

 

 不同场景(如匿名页、文件页、Slab页等)共用同一存储空间。

 

 例如:mapping字段既可能指向address_space(文件页),也可能指向匿名页的anon_vma。

 

3.标志位压缩:

 

 使用flags的高位存储页状态(如PG_locked、PG_dirty),低位存储区信息(如zone_id)。

 

4.引用计数与映射计数分离:

 

 _refcount记录物理页的引用数,_mapcount记录页表映射数。

 

 

类似结构体设计示例

 

以下是一个模仿struct page设计的简化结构体,用于管理自定义内存对象(如用户态内存池的块):

 

#include <linux/types.h>

#include <linux/mm_types.h>

 

struct my_mem_chunk {

    // --- 双字1: 标志和状态 ---

    unsigned long flags; // 状态标志(对齐到8字节)

    

    // --- 双字2: 联合体复用字段 ---

    union {

        struct list_head lru; // LRU链表(用于缓存)

        struct {

            void *virtual; // 虚拟地址(内核映射用)

            atomic_t _refcount; // 引用计数

        };

        struct {

            unsigned long private; // 私有数据(如所有者ID)

            struct address_space *mapping; // 关联的地址空间

        };

    };

 

    // --- 双字3: 类型相关数据 ---

    union {

        unsigned long _mapcount; // 映射计数(类似page_mapcount)

        void *freelist; // 空闲链表(Slab用)

        struct {

            unsigned int obj_size; // 对象大小

            unsigned int obj_type; // 对象类型

        };

    };

 

    // --- 双字4: 预留扩展 ---

    u64 extended[1]; // 保留未来扩展

} __attribute__((aligned(8))); // 强制8字节对齐

 

 

关键设计点解析

 

1.双字对齐强制:

 

 使用__attribute__((aligned(8)))确保结构体起始地址和大小均为8字节对齐。

 

2.联合体复用:

 

 字段复用:lru链表、虚拟地址virtual和mapping共享同一存储空间。

 

 场景区分:

 

  缓存管理场景:使用lru链表。

 

  内核映射场景:使用virtual和_refcount。

 

  文件关联场景:使用mapping和private。

 

3.标志位设计(flags):

 

 模仿Linux的page-flags.h,可通过位掩码定义状态:

 

 #define MY_CHUNK_LOCKED 0x00000001 // 块已锁定

 #define MY_CHUNK_DIRTY 0x00000002 // 块已修改

 #define MY_CHUNK_TYPE_MASK 0x0000000C // 类型掩码(2位)

 

4.引用计数与映射计数:

 

 _refcount:原子操作确保线程安全。

 

 _mapcount:记录块被映射的次数(如共享内存)。 

 

使用场景示例

 

场景1:用户态内存池分配 

 

struct my_mem_chunk *chunk = alloc_chunk();

chunk->flags |= MY_CHUNK_LOCKED;

chunk->virtual = user_vaddr;

atomic_set(&chunk->_refcount, 1);

 

场景2:文件缓存

 

struct my_mem_chunk *chunk = get_cached_chunk();

chunk->mapping = file->f_mapping;

chunk->private = (unsigned long)file;

 

场景3:Slab分配器

 

struct my_mem_chunk *chunk = slab_alloc();

chunk->freelist = next_free_obj;

chunk->obj_size = size;

 

性能优化点

 

1.缓存行友好:

 

 将高频访问字段(如flags、_refcount)放在结构体头部。

 

2.原子操作优化:

 

 _refcount使用atomic_t避免锁竞争。

 

3.内存压缩:

 

 通过联合体将结构体大小控制在32字节(4个双字),接近Linux的struct page(通常40字节)。

 

对比Linux的struct page

 

特性 Linux struct page 本设计 my_mem_chunk

 

对齐方式 8字节对齐 显式8字节对齐

 

核心字段 flags, mapping, _refcount flags, 联合体, _refcount

 

多场景支持 匿名页、文件页、Slab等 内存池、缓存、Slab等

 

大小 40字节(典型) 32字节(可扩展) 

 

通过这种设计,既能复用Linux内存管理的核心思想,又能根据实际需求灵活调整字段,适用于高密度内存管理的场景。 

http://www.dtcms.com/a/439183.html

相关文章:

  • [创业之路-666]:第四次工业革命(智能革命)未来将创造大量的财富,普通人通过哪些方式参与这些财富的创造与分享?
  • 力扣2653. 滑动子数组的美丽值
  • 网站开发的常见编程语言有哪些成都广告公司招聘信息
  • 给网站做引流多少钱网站sem怎么做
  • 辽宁省水利建设市场信用信息平台网站营销推广策划
  • 欢迎进入河南国安建设集团有限公司网站十大不收费看盘软件排名下载
  • 淘宝上面建设网站安全么夜猫直播视频下载
  • 宝应网站设计17做网站 一件代发
  • DBCA静默创建Oracle CDB与PDB:两种实战方法详解
  • ARM内核
  • 佛山网站建设哪个wordpress主题汉化版
  • 乐山网站制作设计公司网页设计规范图标设计
  • Kubernetes中配置NGINX仅支持TLSv1.3全攻略
  • 国外直播做游戏视频网站有哪些开个网站卖机器怎么做
  • c 网站开发架构多用户商城app
  • 【面板数据】华政ESG评级年度中位数年度均值(2009-2024年)
  • ORB_SLAM2原理及代码解析:ORBmatcher::SearchForInitialization() 函数
  • 国家城乡和建设厅特殊工种网站网站建设需求多少钱大概
  • 系统架构设计师教程第二版重要的图
  • 网站开发代码无中文ppt制作网站推荐
  • 因果推断想突破传统局限?深度学习 × 结构经济模型,异质性研究的创新契机在这
  • 郑州网站推广报价做淘宝优惠券网站要多少钱
  • 网站建设推广 seoseo网站页面优化
  • 第7篇|场址适应性评估:把“课本里的风机”落到“具体那座山谷和海岸”
  • 网站建设找客户国外jquery特效网站
  • 《强化学习数学原理》学习笔记6——贝尔曼最优方程的压缩性质
  • linux 学习平台 arm+x86 搭建
  • 哪里的网站可以做围棋死活题黄江镇网站仿做
  • 制作网站结构设计国外服务器网站打开慢
  • 数据结构---栈和队列详解(下)