网站大量收购闲置独家精品文档,联系QQ:2885784924

10 内存管理教学.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* flags标志: SLAB_HWCACHE_ALIGN SLAB_POISON SLAB_RED_ZONE SLAB_PANIC SLAB_CACHE_DMA ctor是高速缓存的构造函数,只有在新的页追加到高速缓 存时,构造函数才能调用。 kmem_cache_create ()成功时返回一个指向所创建高速缓存的指针,否则返回NULL 撤销一个高速缓存 int kmem_cache_destroy(struct kmem_cache *cachep) * 1、从缓存中分配 创建高速缓存之后,获取对象的函数: void * kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags) //函数从给定的高速缓存cachep中返回一个指向对象的指针。 如果高速缓存的所有slab中都没有空闲的对象,slab层必须通 过kmem_getpages()获取新的页,flags的值传递给 _get_free_pages() 释放一个对象,把它返回给原先的slab void kmem_cache_free(struct kmem_cache *cachep, void *objp) * 2、slab分配的使用实例 例子:task_struct结构(进程描述符) 1内核用一个全局变量存放指向task_struct高速缓存的指针 struct kmem_cache *task_struct_cachep; 2 内核初始化,kernel/fork.c的fork_init()创建高速缓存 task_struct_cachep = kmem_cache_create(“task_struct”, sizeof(struct task_struct), ARCH_MIN_TASKALIGN,//slab偏移量 SLAB_PANIC | SLAB_NOTRACK, NULL); * 3 进程调用fork()时,创建一个新的进程描述符: struct task_struct *tsk; tsk = kmem_cache_alloc(task_struct_cachep, GFP_KERNEL); if (!tsk) return NULL; 4 进程执行成功,没有子进程等待,它的进程描述符被释放, 并返回给task_struct_cachep slab高速缓存: kmem_cache_free(task_struct_cachep, tsk); 5 阻止撤销调整缓存 int err; err = kmem_cache_destroy(task_struct_cachep); if (err) /* error destroying cache */ * 12.7 在栈上静态分配 内核的栈小而固定 32位机4KB,64位机8KB 中断栈:中断栈为每个进程提供一个用于中断处理程序的栈,中断处理程序无需与被中断进程共享一个内核栈。 * 12.8 高端内存的映射 高端内存中的页不能永久地映射到内核地址空间上。x86体系结构中,高于896MB的所有物理内存的范围内都是高 端内存,它并不会永久地或自动地映射到内核地址空间。尽管X86处理能够寻址物理RAM的范围达到4GB,一旦这 些页被分配,就必须映射到内核的逻辑地址空间上。在 X86上,高端内存中的页被映射到3GB-4GB 永久映射:映射给定的page结构到内核地址空间的函数 linux/highmem.h: void *kmap(struct page *page) 说明:如页位于低端内存中的一页,函数返回该页的虚 拟地址。如页位于高端内存,建立一个永久映射 * 临时映射 必需创建一个映射而当前的上下文不能睡眠时,内核提供临 时映射,临时映射可用在中断处理程序中,获取映射时不会 阻塞。 * * 12 内存管理 * 前导知识 地址空间 地址空间(address space)是一段表示内存位置的地址范围。 地址空间有两种: 物理地址空间是指由程序产生的与段相关的 偏移地址部分。 逻辑地址空间,也被称为虚拟地址空间是使用物理地址总线中的位表示的地址。物理地址可能与逻辑地址不同,内存管理单元可以将逻辑地址转换成物理地址。 * 在逻辑地址和物理地址之间相互转换的工作是由内核和硬件内存管理单元(MMU—memory management unit)共同完成的MMU是被集成进现代的CPU里的,它们都是同一块CPU芯片内的一个部分。内核告诉MMU如何为每个进程把某逻辑页面映射到某特定物理页面,而MMU在进程提出

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档