当前位置:  技术问答>linux和unix

vm_operations_struct 结构体解析?

    来源: 互联网  发布时间:2017-01-06

    本文导语:      我的系统是 2.6.17内核: struct vm_operations_struct { void (*open)(struct vm_area_struct * area); void (*close)(struct vm_area_struct * area); int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); /* notification that a previously ...

    我的系统是 2.6.17内核:

struct vm_operations_struct {
void (*open)(struct vm_area_struct * area);
void (*close)(struct vm_area_struct * area);
int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);

/* notification that a previously read-only page is about to become
 * writable, if an error is returned it will cause a SIGBUS */
int (*page_mkwrite)(struct vm_area_struct *vma, struct page *page);

/* called by access_process_vm when get_user_pages() fails, typically
 * for use by special VMAs that can switch between memory and hardware
 */
int (*access)(struct vm_area_struct *vma, unsigned long addr,
      void *buf, int len, int write);
#ifdef CONFIG_NUMA
/*
 * set_policy() op must add a reference to any non-NULL @new mempolicy
 * to hold the policy upon return.  Caller should pass NULL @new to
 * remove a policy and fall back to surrounding context--i.e. do not
 * install a MPOL_DEFAULT policy, nor the task or system default
 * mempolicy.
 */
int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);

/*
 * get_policy() op must add reference [mpol_get()] to any policy at
 * (vma,addr) marked as MPOL_SHARED.  The shared policy infrastructure
 * in mm/mempolicy.c will do this automatically.
 * get_policy() must NOT add a ref if the policy at (vma,addr) is not
 * marked as MPOL_SHARED. vma policies are protected by the mmap_sem.
 * If no [shared/vma] mempolicy exists at the addr, get_policy() op
 * must return NULL--i.e., do not "fallback" to task or system default
 * policy.
 */
struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
unsigned long addr);
int (*migrate)(struct vm_area_struct *vma, const nodemask_t *from,
const nodemask_t *to, unsigned long flags);
#endif
};


最近在学习linux驱动开发,正学习内存映射这块内容。其中提到。struct vm_operations_struct结构体里有
      nopage这个函数指针,我用的内涵源代码里没有。我想可能内核api 改动了。希望知道的大虾们,帮忙解答一下。
      告诉我,改动后的结果。


      下面的定义,我想是2.6.17以前的内核:

struct vm_operations_struct {
    void (*open)(struct vm_area_struct * area);
    void (*close)(struct vm_area_struct * area);
    struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int *type);
    unsigned long (*nopfn)(struct vm_area_struct * area, unsigned long address);
    int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock);

    /* notification that a previously read-only page is about to become
     * writable, if an error is returned it will cause a SIGBUS */
    int (*page_mkwrite)(struct vm_area_struct *vma, struct page *structpage);
#ifdef CONFIG_NUMA
    int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
    struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
                    unsigned long addr);
    int (*migrate)(struct vm_area_struct *vma, const nodemask_t *from,
        const nodemask_t *to, unsigned long flags);
#endif
};


|
不太清楚,纯帮顶

这是2.4.34的
/*
 * These are the virtual MM functions - opening of an area, closing and
 * unmapping it (needed to keep files on disk up-to-date etc), pointer
 * to the functions called when a no-page or a wp-page exception occurs.
 */
struct vm_operations_struct {
        void (*open)(struct vm_area_struct * area);
        void (*close)(struct vm_area_struct * area);
        struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int unused);
};

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3