byd yes
这个作者很懒,什么都没留下…
展开
-
0. linux-riscv内存管理120问大纲
内存管理之预备知识 1.1 请简述内存架构中UMA和NUMA的区别 1.2 CPU访问各级存储结构的速度是否一样? 1.3 请绘制内存管理常用的数据结构的关系图,如mm_struct、VMA、vaddr、page、PFN、PTE、zone、paddr和pg_data等,并思考如下转换关系 1.3.1 如何由mm_struct和vaddr找到对应的vma? 1.3.2 如何由page和VMA找到vaddr? 1.3.3 如何由page找到所有映射的VMA? 1.3.4 如何由VMA和vaddr找出相应的p原创 2023-09-13 10:22:15 · 401 阅读 · 0 评论 -
5. Linux-riscv内存管理21-24问
MIN水位以下的内存,只能被紧急情况下的用户申请到,最著名的紧急用户莫过于PF_MEMALLOC用户,task_struct设置了这个标记表示忽略MIN水位。在__alloc_pages函数中如果进入慢速分配路径( __alloc_pages_slowpath()函数),在__alloc_pages_slowpath()函数中,会调用。在__zone_watermark_ok函数中,由于ATOMIC有表示ALLOC_HIGH,并且会设置ALLOC_HARDER, 则会触及到5/8*min的内存。原创 2023-09-12 09:57:37 · 429 阅读 · 0 评论 -
4. Linux-riscv内存管理17-20问
由于在prepare_alloc_pages()函数中会根据gfp-mask选取出合适的zone,在遍历zone时,会从刚选择的zone开始扫描zone,一般按照这个方向遍历ZONE_DEVICE->ZONE_MOVABLE->ZONE_HIGHMEM->ZONE_NORMAL->ZONE_DMA32->ZONE_DMA。zone有哪些类型:ZONE_DMA、ZONE_DMA32、ZONE_NORMAL、ZONE_HIGHMEM、ZONE_MOVABLE、ZONE_DEVICE。原创 2023-09-11 10:46:23 · 364 阅读 · 0 评论 -
riscv-linux中的多核启动流程
在注册sbi_ipi_event_create的时候ipi_ops_array[0]为ipi_smode_ops,ipi_ops_array[1]为ipi_halt_ops,异常处理函数sbi_trap_handler,判断为IRQ_M_SOFT,则调用软中断处理函数sbi_ipi_process,根据SBI_EXT_HSM和SBI_EXT_HSM_HART_START可以在opensbi找到对应的回调函数。找到cpu_ops_sbi结构体:sbi_cpu_start是我想找到的启动第二个核的函数。原创 2023-08-30 17:43:50 · 454 阅读 · 0 评论 -
3. Linux-riscv内存管理17-24问
由于在prepare_alloc_pages()函数中会根据gfp-mask选取出合适的zone,在遍历zone时,会从刚选择的zone开始扫描zone,一般按照这个方向遍历ZONE_DEVICE->ZONE_MOVABLE->ZONE_HIGHMEM->ZONE_NORMAL->ZONE_DMA32->ZONE_DMA。在__alloc_pages函数中如果进入慢速分配路径( __alloc_pages_slowpath()函数),在__alloc_pages_slowpath()函数中,会调用。原创 2023-07-20 13:31:26 · 98 阅读 · 0 评论 -
2. Linux-riscv内存管理13-16问
从下表可以看出内核映像文件是被映射到了0xffffffff80000000-0xffffffffffffffff此区域范围内,因为内核映射,可以能随机映射到这个范围的任意地方。linux启动后回去扫描dts文件中的所有节点,其中也包括dts文件中定义的物理内存大小。0xffffffc000000000-0xffffffffffffffff为内核空间,0x0000000000000000- 0xffffffbfffffffff为用户空间。原创 2023-07-17 13:45:22 · 354 阅读 · 1 评论 -
1. Linux-riscv内存管理1-11问
在匿名页面中:page->index表示在vma中的第几个物理页面(单位是PAGE_SIZE)。可能将vma->vm_pgoff 想成0的话,更好理解。原创 2023-07-11 09:41:47 · 315 阅读 · 0 评论