mm-types.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include <common/glib.h>
  3. struct mm_struct;
  4. /**
  5. * @brief 内存页表结构体
  6. *
  7. */
  8. typedef struct
  9. {
  10. unsigned long pml4t;
  11. } pml4t_t;
  12. typedef struct
  13. {
  14. unsigned long pdpt;
  15. } pdpt_t;
  16. typedef struct
  17. {
  18. unsigned long pdt;
  19. } pdt_t;
  20. typedef struct
  21. {
  22. unsigned long pt;
  23. } pt_t;
  24. /**
  25. * @brief 虚拟内存区域(VMA)结构体
  26. *
  27. */
  28. struct vm_area_struct
  29. {
  30. struct List list; // 循环链表结构体
  31. // 虚拟内存区域的范围是一个左闭右开的区间:[vm_start, vm_end)
  32. uint64_t vm_start; // 区域的起始地址
  33. uint64_t vm_end; // 区域的结束地址
  34. struct mm_struct *vm_mm; // 虚拟内存区域对应的mm结构体
  35. uint64_t vm_flags; // 虚拟内存区域的标志位
  36. struct vm_operations_t *vm_ops; // 操作方法
  37. uint64_t ref_count; // 引用计数
  38. void *private_data;
  39. };
  40. /**
  41. * @brief 内存空间分布结构体
  42. * 包含了进程内存空间分布的信息
  43. */
  44. struct mm_struct
  45. {
  46. pml4t_t *pgd; // 内存页表指针
  47. struct vm_area_struct *vmas; // VMA列表
  48. // 代码段空间
  49. uint64_t code_addr_start, code_addr_end;
  50. // 数据段空间
  51. uint64_t data_addr_start, data_addr_end;
  52. // 只读数据段空间
  53. uint64_t rodata_addr_start, rodata_addr_end;
  54. // BSS段的空间
  55. uint64_t bss_start, bss_end;
  56. // 动态内存分配区(堆区域)
  57. uint64_t brk_start, brk_end;
  58. // 应用层栈基地址
  59. uint64_t stack_start;
  60. };