重构内存分配器、增加中断支持、整理rust运行时环境 #4
5
Makefile
5
Makefile
|
@ -1,6 +1,6 @@
|
||||||
SOURCE := $(shell pwd)/src/scripts
|
SOURCE := $(shell pwd)/src/scripts
|
||||||
|
|
||||||
.PHONY: all clear run debug config
|
.PHONY: all clear run debug config disass
|
||||||
|
|
||||||
all: config
|
all: config
|
||||||
@make -C src all --no-print-directory
|
@make -C src all --no-print-directory
|
||||||
|
@ -25,3 +25,6 @@ config:
|
||||||
touch metaverse_kernel; \
|
touch metaverse_kernel; \
|
||||||
"${SOURCE}/depcheck"; \
|
"${SOURCE}/depcheck"; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
disass:
|
||||||
|
objdump -D src/metaverse.elf > kerndisass.txt
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
*
|
*
|
||||||
* 物理地址空间:
|
* 物理地址空间:
|
||||||
*
|
*
|
||||||
* * 0 \~ 2MB:不使用,不映射
|
* * 0 \~ 1MB:保留。
|
||||||
|
* * 1MB \~ 2MB:内核头。
|
||||||
* * 2MB \~ 4MB:中断栈。
|
* * 2MB \~ 4MB:中断栈。
|
||||||
* * 4MB \~ 16MB:内核栈。
|
* * 4MB \~ 16MB:内核栈。
|
||||||
* * 16MB \~ ?:内核镜像。
|
* * 16MB \~ ?:内核镜像。
|
||||||
|
|
|
@ -16,14 +16,6 @@ typedef struct __raw_allocator_cell
|
||||||
} raw_allocator_cell;
|
} raw_allocator_cell;
|
||||||
#define raw_allocator_next_cell(cell) (raw_allocator_cell *)((void *)((cell)->content) + (cell)->capacity)
|
#define raw_allocator_next_cell(cell) (raw_allocator_cell *)((void *)((cell)->content) + (cell)->capacity)
|
||||||
|
|
||||||
// 原始分配器
|
|
||||||
//
|
|
||||||
// 包括至少一个cell,分配时像cell的分裂一样将空白的一段分成两段,
|
|
||||||
// 释放时,只把length归零,并不将cell合并。
|
|
||||||
// length=0的cell称为空cell
|
|
||||||
//
|
|
||||||
// 统计从上次细胞合并以来free的调用次数,当调用次数很多或可用空间不足时
|
|
||||||
// 触发细胞合并。
|
|
||||||
/**
|
/**
|
||||||
* @name raw_allocator_t
|
* @name raw_allocator_t
|
||||||
*
|
*
|
||||||
|
@ -33,6 +25,8 @@ typedef struct __raw_allocator_cell
|
||||||
*
|
*
|
||||||
* 统计从上次细胞合并以来free的调用次数,当调用次数达到`RAW_ALLOCATOR_FREE_MAX`或无可用空间时触发细胞合并。
|
* 统计从上次细胞合并以来free的调用次数,当调用次数达到`RAW_ALLOCATOR_FREE_MAX`或无可用空间时触发细胞合并。
|
||||||
*
|
*
|
||||||
|
* 使用建议:只在少量allocate和free的情况下使用。使用大量allocate时效率低下并难以得到内存安全保证。
|
||||||
|
*
|
||||||
* @internal free_count
|
* @internal free_count
|
||||||
*
|
*
|
||||||
* free方法的调用次数,达到`RAW_ALLOCATOR_FREE_MAX`时归零。
|
* free方法的调用次数,达到`RAW_ALLOCATOR_FREE_MAX`时归零。
|
||||||
|
|
Reference in New Issue