Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
aed48c5c
提交
aed48c5c
2月 07, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove dead kmalloc code
上级
f92cb207
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
0 行增加
和
121 行删除
+0
-121
kmalloc.c
kmalloc.c
+0
-121
没有找到文件。
kmalloc.c
浏览文件 @
aed48c5c
...
@@ -109,127 +109,6 @@ kmfree(void *ap)
...
@@ -109,127 +109,6 @@ kmfree(void *ap)
release
(
&
freelists
[
c
].
lock
);
release
(
&
freelists
[
c
].
lock
);
}
}
#if 0
// Memory allocator by Kernighan and Ritchie,
// The C programming Language, 2nd ed. Section 8.7.
typedef struct header {
struct header *ptr;
u64 size; // in multiples of sizeof(Header)
} __mpalign__ Header;
static struct freelist {
Header base;
Header *freep; // last allocated block
struct spinlock lock;
char name[MAXNAME];
} freelists[NCPU];
void
kminit(void)
{
for (int c = 0; c < NCPU; c++) {
freelists[c].name[0] = (char) c + '0';
safestrcpy(freelists[c].name+1, "freelist", MAXNAME-1);
initlock(&freelists[c].lock, freelists[c].name);
}
}
static void
domfree(void *ap)
{
Header *bp, *p;
bp = (Header*)ap - 1;
if (kalloc_memset)
memset(ap, 3, (bp->size-1) * sizeof(*bp));
for(p = freelists[mycpu()->id].freep; !(bp > p && bp < p->ptr); p = p->ptr)
if(p >= p->ptr && (bp > p || bp < p->ptr))
break;
if(bp + bp->size == p->ptr){
bp->size += p->ptr->size;
bp->ptr = p->ptr->ptr;
} else
bp->ptr = p->ptr;
if(p + p->size == bp){
p->size += bp->size;
p->ptr = bp->ptr;
} else
p->ptr = bp;
freelists[mycpu()->id].freep = p;
}
void
kmfree(void *ap)
{
acquire(&freelists[mycpu()->id].lock);
domfree(ap);
mtunlabel(mtrace_label_heap, ap);
release(&freelists[mycpu()->id].lock);
}
// Caller should hold free_lock
static Header*
morecore(u64 nu)
{
static u64 units_per_page = PGSIZE / sizeof(Header);
char *p;
Header *hp;
if(nu != units_per_page) {
if (nu > units_per_page)
panic("morecore");
nu = units_per_page; // we allocate nu * sizeof(Header)
}
p = kalloc();
if(p == 0)
return 0;
hp = (Header*)p;
hp->size = nu;
domfree((void*)(hp + 1));
return freelists[mycpu()->id].freep;
}
void*
kmalloc(u64 nbytes)
{
Header *p, *prevp;
u64 nunits;
void *r = 0;
acquire(&freelists[mycpu()->id].lock);
nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
if((prevp = freelists[mycpu()->id].freep) == 0){
freelists[mycpu()->id].base.ptr =
freelists[mycpu()->id].freep = prevp = &freelists[mycpu()->id].base;
freelists[mycpu()->id].base.size = 0;
}
for(p = prevp->ptr; ; prevp = p, p = p->ptr){
if(p->size >= nunits){
if(p->size == nunits)
prevp->ptr = p->ptr;
else {
p->size -= nunits;
p += p->size;
p->size = nunits;
}
freelists[mycpu()->id].freep = prevp;
r = (void*)(p + 1);
break;
}
if(p == freelists[mycpu()->id].freep)
if((p = morecore(nunits)) == 0)
break;
}
release(&freelists[mycpu()->id].lock);
if (r)
mtlabel(mtrace_label_heap, r, nbytes, "kmalloc'ed", sizeof("kmalloc'ed"));
return r;
}
#endif
int
int
kmalign
(
void
**
p
,
int
align
,
u64
size
)
kmalign
(
void
**
p
,
int
align
,
u64
size
)
{
{
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论