在 OS 中分配内存
Allocating memory in OS
为了动态分配内存,我们使用了一些系统调用。所以操作系统在相应进程的堆上分配内存。但是操作系统本身是如何分配内存的?
当必须创建某些数据结构(例如进程表)时,如何分配操作系统内存? dose OS 内核有自己的栈和堆?
Linux 操作系统确实为每个线程使用了自己固定大小的堆栈。您可以在定义 thread_union
.
的源代码中看到堆栈
当在 x86/x64 中执行系统调用时,内核换出 GS 段和 CR3 寄存器以引用其自己的内存,然后使用 GS 段寄存器定位指向 cpu_current_top_of_stack
调用线程的相应内核堆栈指针。你可以在 entry_SYSCALL_64
.
中看到这个
当内核需要分配动态内存时,它使用kamlloc
which uses the slob allocator。
为了动态分配内存,我们使用了一些系统调用。所以操作系统在相应进程的堆上分配内存。但是操作系统本身是如何分配内存的?
当必须创建某些数据结构(例如进程表)时,如何分配操作系统内存? dose OS 内核有自己的栈和堆?
Linux 操作系统确实为每个线程使用了自己固定大小的堆栈。您可以在定义 thread_union
.
当在 x86/x64 中执行系统调用时,内核换出 GS 段和 CR3 寄存器以引用其自己的内存,然后使用 GS 段寄存器定位指向 cpu_current_top_of_stack
调用线程的相应内核堆栈指针。你可以在 entry_SYSCALL_64
.
当内核需要分配动态内存时,它使用kamlloc
which uses the slob allocator。