iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >怎么进行Linux系统内核架构分析
  • 510
分享到

怎么进行Linux系统内核架构分析

2023-06-28 13:06:15 510人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关怎么进行linux系统内核架构分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux系统中内核是一个非常重要的一部分,那么Linux内核具体是什么样子呢?下面本篇文

这期内容当中小编将会给大家带来有关怎么进行linux系统内核架构分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Linux系统中内核是一个非常重要的一部分,那么Linux内核具体是什么样子呢?下面本篇文章和大家深入讲解一下Linux系统内核机构,有需要的朋友可以参考一下。

1:在内核使用高端内存页之前,必须使用下文讨论的kmap和kunmap函数将其映射到内存虚拟地址空间中。

2:UMA计算机(一致内存访问,unifORM memory access)将可用内存以连续方式组织起来。

3:NUMA计算机(非一致性内存访问,non-uniform memory access)系统的各个CPU都有本地内存,可支持特别快速的访问,各个处理器之间通过总线连接起来,以支持其他CPU的本地内存的访问。

怎么进行Linux系统内核架构分析

4:内核会区分三种配置选项:FLATTMEM,DISCONTIGMEM,SPARSEMEM,DISCONTIGMEM.

怎么进行Linux系统内核架构分析

5:内存划分为结 点。每个节点关联到系统中的一个处理器。在内核中表示为pg_data_t的实例。

6:各个结点又划分为 内存域,是内存域的进一步细分。

7:

怎么进行Linux系统内核架构分析

注:zonelist:指向zonelist数据结构的指针,该数据结构按照优先次序描述了适于内存分配的内存管理区。

8:

怎么进行Linux系统内核架构分析

1)ZONE_DMA标记适合DMA的内存域。

2)ZONE_DMA32标记了使用32位地址字可寻址,适合DMA的内存域。

3)ZONE_NORMAL标记了可直接映射到内核段的普通内存域,这是在所有体系结构上保证都会存在的唯一内存域,但无法保证该地址范围对应了实际的物理内存。

4)ZONE_HIGHMEM标记了超出内核段的物理内存。

5)伪内存域ZONE_MOVABLE.

6)MAX_NR_ZONES充当结束标志,在内核想要迭代系统中的所有内存域时,会用到该常量。

7)各个内存域都关联了一个数组,用来组织属于该内存域的物理内存页(页帧)。对每个页帧,都分配一个struct page实例以及所需的管理数据。

8)每个节点都提供了一个备用列表(借助struct zonelist)。该列表包含了其他节点(和相关的内存域),可用于代替当前节点分配内存。

3.2.2数据结构

1)结点管理

  pg_data_t用于表示节点的基本元素。

   typedef struct pglist_data{        struct zone node_zones[MAX_NR_ZONES];        struct zonelist node_zonelists[MAX_ZONELISTS];        int nr_zones;        struct page*node_mem_map;        struct bootmem_data *bdata;        unsigned long node_start_pfn;        unsigned long node_present_pages;        unsighed long node_spanned_pages;                int node_id;        struct pglist_data *pgdat_next;        wait_queue_head_t kswapd_wait;        struct task_struct *ksward;        int ksward_max_order;}pg_data_t;

注:1)node_zones是一个数组,包含了节点中各内存域的数据结构。

   2)node_zonelists指定了备用节点及其内存域的列表,以便在当前节点没有可用空间时,在备用节点分配内存。

   3)节点中不同内存域的数目保存在nr_zones中

   4)node_mem_map是指向page实例数组的指针,用于描述节点的所有物理内存页,它包含了节点中所有内存域的页。

   5)bdata指向自举内存分配器数据结构的实例。

   6)node_start_pfn是该NUMA节点第一个页帧的逻辑编号。所有页帧是依次编号的,每个页帧的号码都是全局唯一的。

      在UMA中总是0.

   7)node_present_pages指定了节点中页帧的数目,node_spanned_pages则给出了该节点以页帧 为单位计算的长度。

   8)node_id是全局节点ID。

   9)pgdat_next连接到下一个内存节点,系统中所有的内存节点都通过单链表连接起来,其末尾通过空指针标记。

  10)kswapd_wait是交换守护进程(swap daemon)的等待队列,将在页帧换出节点时会用到。

      kswapd指向负责该节点的交换守护进程的task_struct.

      kswapd_max_order用于页交换子系统的实现,用来定义需要释放的区域的长度。

  11)节点的内存域保存在node_zones[MAX_NR_ZONES].该数组总是有3项。即使节点没有那么多内存域,若不足3个,则其余的数组项用0填充。

    enum node_states{     N_POSSIBLES,                        N_ONLINE,                           N_NORMAL_MEMORY,               #ifdef CONFIG_HIGHMEM     N_HIGH_MEMORY,                 #else     N_HIGH_MEMORY = N_NORMAL_MEMORY,#endif     N_CPU,                              NR_NODE_STATES};

注:如果节点有普通或高端内存则使用N_HIGH_MEMORY,仅当节点没有高端内存才设置N_NORMAL_MEMORY.

2)内存域

内核使用zone结构来描述内存域。

  1. struct zone{

  2. unsigned long pages_min,pages_low,pages_high;        注:1)若空闲页的数目多于pages_high,则内存域的状态是理想的

  3. 2)若空闲页的数目低于pages_low,则内核开始将页换出到硬盘

  4. 3)若空闲页的数目低于pages_min,内存域急需空闲页,需页回收

  5. 4)数据结构中水印值得填充由init_per_zone_pages_min处理。

  6. 5)setup_per_zone_pages_min设置struct zone的pages_min,

  7. pages_low,pages_high成员。



  8. unsigned long lowmem_reserve[MAX_NR_ZONES];          注:该数组分别为各种内存域指定了若干项,用于一些无论如何都不能失败                                                             的关键性内存分配。

  9. struct per_cpu_pageset pageset[NR_CPUS];             注:该数组用于实现每个CPU的热/冷页帧列表。内核使用这些列表保存可                                                              用于满足实现的“新鲜”页。

  10. 热页帧:在高速缓存中,可以快速访问,

  11. 冷页帧:不在高速缓存中的页帧

  12. NR_CPUS是一个可以在编译时间配置的宏常数。

  13. 注:数组元素的类型为per_cpu_pageset

  14.         struct per_cpu_pageset{       struct per_cpu_pages pcp[2];}__cacheline_aligned_in_smp;

         注:该结构由一个带有数组项的数组构成,第一项管理热页。第二页管理冷页。

             有用的数据保存在per_cpu_pages中。

            struct per_cpu_pages{       int count;                            int high;                             int batch;                            struct list_head list;         }



  1. spinlock_t           lock;

  2. struct free_area     free_area[MAX_OEDER];           注:是同名数据结构的数组,用于实现伙伴系统,每个数组元素都表示某种                                                             固定长度的一些连续的内存区。对于包含在每个区域中的空闲内存页                                                              的管理。free_area是一个起点。

  3. ZONE_PAGGING(_pad1_)


  4. spinlock_t           lru_lock;

  5. struct list_head     active_list;                     注:是活动页的集合

  6. struct list_head     inactive_list;                   注:是不活动页的集合

  7. unsighed long        nr_scan_active;                  注:回收内存时需要扫描的活动页的数目

  8. unsighed long        nr_scan_inactive;                注:回收内存时需要扫描的不活动页的数目

  9. unsighed long        pages_scanned;                   注:上次回收以来扫描过的页

  10. unsighed long        flags;                          注:描述内存域当前状态


  11.         typedef  enum {         ZONE_ALL_UNERCLAIMABLE,                  ZONE_RECLAIM_LOCKED,                     ZONE_OOM_LOCKED,                }zone_flags_t;

  12. atmoic_long_t        vm_stat[NR_VM_STAT_ITEMS];       注:维护了大量有关内存域的统计信息。辅助函数zone_page_state用来                                                              读取vm_stat中的信息

  13. int prev_priority;                                    注:存储了上一次扫描操作扫描该内存域的优先级。扫描操作是由try_to                                                              _free_pages进行的,直至释放了足够多的页帧。

  14. ZONE_PAGGING(_pad2_)

  15. wait_queue_head_t    *wait_table;                     注:是一个等待队列,可用于等待某一页变为可用进程。进程排成一个队   ``

  16. unsighed long        wait_table_hash_nr_entries;列,等待某些条件, 在条件为真时,内核会通知进程恢复工作。

  17. unsighed long        wait_table_bits;


  18. struct pglist_data  *zone_pgdat;                     注:内存域和父节点之间的关联由zone_pgdat建立,zone_pgdat指向对                                                               应的pg_list_data实例

  19. unsighed long       zone_start_pfn;                  注:内存域第一个页帧的索引

  20. unsighed long       spanned_pages;                      

  21. unsighed long       present_pages;                       实际上可用的页数目

  22. char               *name;                           注:是一个字符串,保存该内存域的惯用名称。3个选项可用,Normal,

  23. DMA,HighMem

  24. }__cacheline_maxaligned_in_smp;

3.内存域水印的计算

在计算水印之前,内核首先确定需要为关键性分配保留的内存空间的最小值。该值随可用内存的大小而非线性增长,并保留在全局变量min_free_kbytes中。

怎么进行Linux系统内核架构分析

注:1)高端内存域的下界SWAP_CLUSTER_MAX.

   2)它定义了分组的大小。

   3)setup_per_zone_lowmem_reserve计算出lowmem_reserve

上述就是小编为大家分享的怎么进行Linux系统内核架构分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网操作系统频道。

--结束END--

本文标题: 怎么进行Linux系统内核架构分析

本文链接: https://www.lsjlt.com/news/319853.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么进行Linux系统内核架构分析
    这期内容当中小编将会给大家带来有关怎么进行Linux系统内核架构分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux系统中内核是一个非常重要的一部分,那么Linux内核具体是什么样子呢?下面本篇文...
    99+
    2023-06-28
  • 怎么进行Linux内核Crash分析
    今天就跟大家聊聊有关怎么进行Linux内核Crash分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打...
    99+
    2023-06-16
  • 如何解析Linux系统架构中的内核
    如何解析Linux系统架构中的内核,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概述Linux系统一般有4个主要部分组成,内核、shell、文件系统和应用程序。内核、shell...
    99+
    2023-06-16
  • Linux系统中如何分析内核
    本篇文章给大家分享的是有关Linux系统中如何分析内核,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Linux系统中,内核是一个很重要的部分,属于Linux系统中的核心程序。...
    99+
    2023-06-28
  • 如何分析linux系统内核bsp
    这期内容当中小编将会给大家带来有关如何分析linux系统内核bsp,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。BSP简介:Board Support Package顾名思义,就是板级支持包,说白了就是最...
    99+
    2023-06-28
  • 怎样进行Linux内核的解析
    本篇文章为大家展示了怎样进行Linux内核的解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。计算机由硬件和软件两大部分组合而成,软件来操作和控制计算机,完成控制工作的软件就称为操作系统,在Linu...
    99+
    2023-06-28
  • 如何分析Linux内核SCSI IO子系统
    如何分析Linux内核SCSI IO子系统,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。概述LINUX 内核中 SCSI 子系统由 SCSI 上层,中间层和底层驱动模块 [...
    99+
    2023-06-17
  • 怎么进行Linux内核XFRM权限提升漏洞的分析
    怎么进行Linux内核XFRM权限提升漏洞的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。0x00 背景介绍2017年11月24日, OSS社区披露了一个由独立安...
    99+
    2023-06-19
  • 如何进行Linux系统syslog分析
    如何进行Linux系统syslog分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、日志系统之syslogsyslog是Linux系统中默认的日志守护进程,RHEL5上...
    99+
    2023-06-28
  • Linux系统中内核调试的示例分析
    这篇文章主要介绍了Linux系统中内核调试的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。调试是软件开发过程中一个必不可少的环节,在 Linux 内核开发的过程中也不...
    99+
    2023-06-12
  • 怎么在CentOS系统中对内核进行编译
    这篇文章给大家介绍怎么在CentOS系统中对内核进行编译,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux 内核简介最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux ...
    99+
    2023-06-07
  • Linux系统内核怎么升级
    小编给大家分享一下Linux系统内核怎么升级,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!查看当前内核打开终端执行: vincent@dell-Insp...
    99+
    2023-06-28
  • Linux系统要怎么进行分区
    Linux系统要怎么进行分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。linux分区方法,不同的人有不同的方法,反正没有统一的方法。在分区方面,我觉得根据自...
    99+
    2023-06-05
  • Windows XP系统内核文件分析
    Windows XP系统内核文件是操作系统的核心组成部分,负责管理计算机的硬件和软件资源。它由许多不同的文件组成,其中一些是:1. ...
    99+
    2023-08-22
    xp
  • Linux五大模块内核源码以及内核整体架构设计的示例分析
    小编给大家分享一下Linux五大模块内核源码以及内核整体架构设计的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言本文是“Linux内核源码分析”系...
    99+
    2023-06-29
  • Linux怎么进行内核参数优化
    今天小编给大家分享一下Linux怎么进行内核参数优化的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sysctl命令及linu...
    99+
    2023-06-28
  • 如何进行Linux 2.6 内核的嵌入式系统应用
    这篇文章给大家介绍如何进行Linux 2.6 内核的嵌入式系统应用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随着多媒体技术与通讯技术相结合的信息技术的快速发展和互联网的广泛应用,PC 时代也过渡到了后PC时代。在数...
    99+
    2023-06-16
  • Linux操作系统的NTFS和内核的示例分析
    今天就跟大家聊聊有关Linux操作系统的NTFS和内核的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。传统编译内核模块的方法繁琐而费时,这里介绍一种快速编译所需要内核模块的新...
    99+
    2023-06-17
  • 如何分析Linux系统内核的作用和功能
    这篇文章主要为大家分析了如何分析Linux系统内核的作用和功能的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何分析Linux系统内核的作用和功能”的知识吧...
    99+
    2023-06-28
  • Linux 内核中reuseport 的演进示例分析
    今天给大家介绍一下Linux 内核中reuseport 的演进示例分析。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。SO_REUSEPORT选项在Linux ...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作