奔跑吧Linux读书笔记–思考题总目录奔跑吧Linux-内存管理思考题(1)奔跑吧Linux-内存管理思考题(2)奔跑吧Linux-内存管理思考题(3)奔跑吧Linux-内存管理思考题(4)奔跑吧Linux-内存管理思考题(5)奔跑吧Linux-内存管理思考题(6)奔跑吧Linux-内存管理思考题(7)奔跑吧Linux-内存管理思考题(8)奔跑吧Linux-内存管理(9)奔跑吧Linux-内存管理思考题(10)–cacheLinux进程管理–init进程...
1.内存屏障产生的原因要想知道内存屏障产生的原因,首先我们必须要了解内存乱序执行,内存乱序执行的出现是为了提高程序运行时的性能,由于现在的处理器技术都采用超标量、乱序发射以及乱序执行技术来提高执行效率。所以指令的实际执行顺序会和我们写的代码逻辑顺序不一致,执行序列在处理器中会被打乱。再加上现代处理器多采用多级存储结构,确保处理器正确访问存储系统也就成为了一大挑战。在多核处理器并发访问存储的情况下,每次存储器的读写操作就很难获得最近写入的结果。我们可以使用一个全局时间比例部件(严格一致性)来决定多核处理器
1.slab分配器是如何分配和释放小内存块的?1.1分配函数kmem_cache_alloc1.1.1从对象缓冲池获取分配对象使用cpu_cache_get()来获取slab描述符cachep中的本地对象缓冲池ac,如果ac中没有空闲的分配对象,则直接通过ac_get_obj来分配一个对象。1.1.2实际分配函数cache_alloc_refill()首先去判断共享对象缓冲池有没有空闲对象,如果有,就尝试迁移batchcount个空闲对象到本地对象缓冲池ac中;如果没有,就会去查看slab节点中的
1.简述get_user_page的作用及实现流程用于把用户空间的虚拟内存空间传到内核空间,然后内核空间为其分配物理内存并建立相应的映射关系,实现流程以框图的形式展现。2.简述follow_page的作用和实现流程通过虚拟地址address寻找对应的物理页面,会去查询页表,返回normal mapping页面对应的struct page结构。3.简述私有映射和共享映射的区别MAP_SHARED(共享映射):创建一个共享映射的区域,多个进程可以通过共享映射的当时来映射一个文件,这样其他进程就可以看
1.kmalloc、vmalloc和malloc之间有什么区别以及实现上的差异?kmalloc基于slab分配器,slab缓冲区建立在连续物理地址的大内存上,所以分配的内存是物理连续的(分配内核空间的内存)。vmalloc使用的分配掩码是GFP_KERNEL|GFP_HIGHMEM,优先使用高端内存,虚拟地址上连续。使用alloc_page来分配物理页面(PGD->PUD->PMD->PTE)(分配内核空间的内存)。malloc使用brk向系统申请内存(分配用户空间的内存)。2.使
阅读最新RMAP机制的代码,画出VMA,AVC,anon_vma和page等数据结构之间的关系图最新的RMAP机制新增了AVC数据结构(struct anon_vma_chain),父进程和子进程都有各自的AV数据结构并且都有一棵红黑树,此外父进程和子进程都有各自的AVC挂入进程的AV红黑树中。还有一个AVC枢纽,来联系父进程和子进程。AVC枢纽挂入父进程的AV红黑树中,因此所有子进程都有一个AVC枢纽用于挂入都父进程的AV红黑树。需要反向映射遍历时,只需要扫描父进程的AV红黑树即可。当子进程V.
1.Struct page数据结构中的_count和_mapcount有什么区别?1.1 _count_count和_mapcount都是引用计数,它们都是atomic类型的变量,但是它们的用途各不一样。 其中,_count表示内核中引用该页面的次数,当_count值为0时,表示该page页面为空闲或即将要被释放的页面。当_count的值大于0时,表示该page页面以及被分配且内核正在使用,暂时不会被释放。内核中加减_count引用计数的API为get_page()和put_page()。_count
1.概念处理器访问主存储器使用地址编码的方式。Cache也使用类似的地址编码,因此处理器使用这些编码地址可以访问各级cache。下图是经典的Cache架构图处理器在访问存储器时,会把地址传给TLB和cache,TLB是一个存储虚拟地址到物理地址转换的小缓存。处理器先使用EPN在TLB 中查找最终的RPN(Real Page Number)。如果在这期间发生TLB Miss, 将会带来一系列的系统惩罚,处理器需要查询页表,假设这里TLB Hit, 此时很快获得合适的RPN,并得到相应的物理地址PA(Ph
1.Kswapd按照什么原则来换出页面?页面在活跃LRU链表,需要从链表头到链表尾的一个老化过程才能迁移到不活跃LRU链表。在不活跃LRU链表中又经过一个老化过程后,首先剔除那些脏页面或者正在回写的页面,然后那些在不活跃LRU链表老化过程中没有被访问引用的页面是最佳的被换出的候选者,具体请看shrink_page_list()函数。2.Kswapd按照什么方向来扫描zone?从低zone到高zone,和分配页面的方向相反。3.Kswapd按照什么标准来退出扫描LRU?判断当前内存节点是否处于"生态
简述内核在理
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号