struct map_segment 的用途/目的是什么

struct map_segment 的用途/目的是什么

我正在查看 Linux 内核(版本 v2.6.38)的源代码,我偶然发现了一个未定义的struct map_segment定义exec_domain

struct exec_domain {
    const char      *name;      /* name of the execdomain */
    handler_t       handler;    /* handler for syscalls */
    unsigned char       pers_low;   /* lowest personality */
    unsigned char       pers_high;  /* highest personality */
    unsigned long       *signal_map;    /* signal mapping */
    unsigned long       *signal_invmap; /* reverse signal mapping */
    struct map_segment  *err_map;   /* error mapping */
    struct map_segment  *socktype_map;  /* socket type mapping */
    struct map_segment  *sockopt_map;   /* socket option mapping */
    struct map_segment  *af_map;    /* address family mapping */
    struct module       *module;    /* module context of the ed. */
    struct exec_domain  *next;      /* linked list (internal) */
};

exec_domain用于thread_info.

我的问题:

  1. 在哪里map_segment定义的? (所有成员变量是什么?到目前为止我最好的猜测是它指向一些低级体系结构相关结构)
  2. 它的目的是什么以及在哪里使用? (在评论中,它说它可以在套接字类型映射中使用,但我对此不太熟悉。套接字类型映射是什么?)

任何有关此主题的信息将不胜感激。

答案1

  1. struct map_segment没有在内核中的任何地方定义,至少在 2.6.38 版本中没有定义。这在 C 中没问题——只要永远不需要成员的内容,编译器需要知道的只是字段的大小,并且由于那是一个指针,所以它只是指针的大小。

  2. 这些struct map_segment字段从未被使用过。我想他们的目的是让个性来定义映射——可能errno值在err_map插座类型socktype_map插座选项sockopt_map, 和地址家庭af_map

exec_domain结构在内核版本 4.1 中被删除

相关内容