This file contains functions for manipulating regions of virtual memory known as areas.
More...
|
void | list_areas (MemContext_s *psCtx) |
| Prints all areas in the specified memory context to the debug console.
|
|
void | validate_kernel_pages (void) |
|
status_t | put_area (MemArea_s *psArea) |
|
status_t | alloc_area_list (uint32_t nProtection, uint32_t nLockMode, uintptr_t nAddress, uint_fast32_t nCount, const char *const *apzNames, size_t *panOffsets, size_t *panSizes, area_id *panAreas) |
| Allocates an array of areas with the specified names, starting offsets and sizes. More...
|
|
status_t | resize_area (area_id hArea, size_t nNewSize, bool bAtomic) |
| Resizes the specified area. More...
|
|
status_t | delete_area (area_id hArea) |
| Deletes the specified area. More...
|
|
void | empty_mem_context (MemContext_s *psCtx) |
| Deletes all areas in the specified memory context.
|
|
void | delete_mem_context (MemContext_s *psCtx) |
| Deletes the specified memory context and all of its areas.
|
|
status_t | clone_page_pte (pte_t *pDst, pte_t *pSrc, bool bCow) |
| Copies a page-table entry, optionally setting up copy-on-write semantics.
|
|
MemContext_s * | clone_mem_context (MemContext_s *psOrig) |
| Clones the specified memory context.
|
|
status_t | map_area_to_file (area_id hArea, File_s *psFile, flags_t nProtection __attribute__((unused)), off_t nOffset, size_t nSize) |
| Maps the specified area onto a file.
|
|
area_id | sys_clone_area (const char *pzName, void **ppAddress, flags_t nProtection, flags_t nLockMode, area_id hSrcArea) |
| Clones the specified area at a new address. More...
|
|
area_id | create_area (const char *pzName, void **ppAddress, size_t nSize, size_t nMaxSize, flags_t nProtection, flags_t nLockMode) |
| Creates a new memory area in the current process. More...
|
|
area_id | sys_create_area (const char *pzName, void **ppAddress, size_t nSize, flags_t nProtection, flags_t nLockMode) |
| Creates a new memory area with the specified attributes. More...
|
|
status_t | sys_delete_area (area_id hArea) |
| Deletes the specified area. More...
|
|
status_t | get_area_physical_address (area_id hArea, uintptr_t *pnAddress) |
| Returns the starting physical memory address for the specified area. More...
|
|
status_t | get_area_info (area_id hArea, AreaInfo_s *psInfo) |
| Returns an AreaInfo_s for the specified area. More...
|
|
status_t | sys_get_area_info (area_id hArea, AreaInfo_s *psInfo) |
| Returns an AreaInfo_s for the specified area. More...
|
|
status_t | sys_remap_area (area_id hArea, void *pPhysAddress) |
| Remaps the specified area to use a different region of physical memory. More...
|
|
status_t | remap_area (area_id hArea, void *pPhysAddress) |
| Remaps the specified area to use a different region of physical memory. More...
|
|
status_t | memcpy_to_user (void *pDst, const void *pSrc, size_t nSize) |
| Copies a region of memory from kernel space into user space. More...
|
|
status_t | memcpy_from_user (void *pDst, const void *pSrc, size_t nSize) |
| Copies a region of memory from user space into kernel space. More...
|
|
status_t | strncpy_from_user (char *pzDst, const char *pzSrc, size_t nMaxLen) |
| Copies a string from user space into kernel space. More...
|
|
status_t | strndup_from_user (const char *pzSrc, size_t nMaxLen, char **ppzDst) |
| Copies a string from user space into a newly allocated kernel region. More...
|
|
status_t | strcpy_to_user (char *pzDst, const char *pzSrc) |
| Copies a string from kernel space into user space. More...
|
|
status_t | strlen_from_user (const char *pzString) |
| Returns the length of the specified string. More...
|
|
status_t | verify_mem_area (const void *pAddress, size_t nSize, bool bWriteAccess) |
| Verifies a region of user memory for kernel access. More...
|
|
void * | sys_sbrk (int nDelta) |
| Adjusts the upper bound of a user process's data segment. More...
|
|
area_id | clone_from_inactive_ctx (MemArea_s *psArea, uintptr_t nOffset, size_t nLength) |
| clone_from_inactive_ctx() and update_inactive_ctx() are used to access an inactive address space / memory context (the associated process is not currently running, page directory is not loaded into CR3). More...
|
|
status_t | update_inactive_ctx (MemArea_s *psOriginalArea, area_id hCloneArea, uintptr_t nOffset) |
|
int | sys_munmap (void *pStart, size_t nLen) |
|
int | sys_mprotect (void *pStart, size_t nLen, int nProt) |
|
status_t | msync (uint32 nAddr, size_t nLen, int nFlags) |
| Write dirty pages back to the file backing the area.
|
|
int | sys_msync (void *pStart, size_t nLen, int nFlags) |
|
void | init_kernel_mem_context () |
| Creates the memory context for the kernel. More...
|
|
void | init_areas (void) |
| Initializes the area manager.
|
|
This file contains functions for manipulating regions of virtual memory known as areas.
An area can exist in one of several states depending on its access privileges and whether or not it is currently located in physical memory.
- Read only:
- Both the area and the PTE are marked read only.
- Cloned as copy-on-write:
- The PTE is marked as read-only and the area is marked as read-write.
- Memory mapped/not present:
- The area has a non-
NULL
a_psFile
entry and the PTE has the value 0.
- Memory mapped/present:
- The area has a non-
NULL
a_psFile
entry and the PTE is marked present.
- Shared/not-present:
- The area has the
AREA_SHARED
flag set and the PTE is marked not present.
- Swapped out:
- The PTE is marked not-present but the address is non-null.