Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
81d52199
提交
81d52199
8月 24, 2006
创建
作者:
kaashoek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bug in sbrk
test malloc
上级
bcfb84b6
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
49 行增加
和
8 行删除
+49
-8
proc.c
proc.c
+2
-3
umalloc.c
umalloc.c
+7
-1
user.h
user.h
+1
-1
usertests.c
usertests.c
+39
-3
没有找到文件。
proc.c
浏览文件 @
81d52199
...
...
@@ -151,10 +151,9 @@ growproc(int n)
oldmem
=
cp
->
mem
;
cp
->
mem
=
newmem
;
kfree
(
oldmem
,
cp
->
sz
);
cprintf
(
"growproc: added %d bytes to %d bytes
\n
"
,
n
,
cp
->
sz
);
cp
->
sz
+=
n
;
cprintf
(
"growproc: added %d bytes starting at address 0x%x
\n
"
,
n
,
newmem
+
cp
->
sz
-
n
);
return
newmem
+
cp
->
sz
-
n
;
return
cp
->
sz
-
n
;
}
// Per-CPU process scheduler.
...
...
umalloc.c
浏览文件 @
81d52199
...
...
@@ -25,7 +25,9 @@ void
free
(
void
*
ap
)
{
Header
*
bp
,
*
p
;
printf
(
1
,
"free
\n
"
);
bp
=
(
Header
*
)
ap
-
1
;
for
(
p
=
freep
;
!
(
bp
>
p
&&
bp
<
p
->
s
.
ptr
);
p
=
p
->
s
.
ptr
)
if
(
p
>=
p
->
s
.
ptr
&&
(
bp
>
p
||
bp
<
p
->
s
.
ptr
))
...
...
@@ -51,6 +53,7 @@ morecore(uint nu)
if
(
nu
<
PAGE
)
nu
=
PAGE
;
printf
(
1
,
"call sbrk
\n
"
);
cp
=
sbrk
(
nu
*
sizeof
(
Header
));
if
(
cp
==
(
char
*
)
-
1
)
return
0
;
...
...
@@ -66,6 +69,8 @@ malloc(uint nbytes)
Header
*
p
,
*
prevp
;
uint
nunits
;
printf
(
1
,
"malloc %d
\n
"
,
nbytes
);
nunits
=
(
nbytes
+
sizeof
(
Header
)
-
1
)
/
sizeof
(
Header
)
+
1
;
if
((
prevp
=
freep
)
==
0
)
{
base
.
s
.
ptr
=
freep
=
prevp
=
&
base
;
...
...
@@ -81,6 +86,7 @@ malloc(uint nbytes)
p
->
s
.
size
=
nunits
;
}
freep
=
prevp
;
printf
(
1
,
"malloc returns: %d
\n
"
,
(
int
)
(
p
+
1
));
return
(
void
*
)
(
p
+
1
);
}
if
(
p
==
freep
)
...
...
user.h
浏览文件 @
81d52199
...
...
@@ -30,5 +30,5 @@ void printf(int fd, char *fmt, ...);
char
*
gets
(
char
*
,
int
max
);
unsigned
int
strlen
(
char
*
);
void
*
memset
(
void
*
dst
,
int
c
,
unsigned
int
n
);
void
*
mall
i
c
(
uint
);
void
*
mall
o
c
(
uint
);
void
free
(
void
*
);
usertests.c
浏览文件 @
81d52199
...
...
@@ -117,14 +117,50 @@ exitwait(void)
puts
(
"exitwait ok
\n
"
);
}
void
mem
(
void
)
{
void
*
m
=
malloc
(
4096
);
void
*
m1
,
*
m2
;
free
(
m
+
3
*
1024
);
free
(
m
+
2
*
1024
);
free
(
m
+
1024
);
free
(
m
);
m1
=
malloc
(
4096
);
if
(
m1
!=
m
)
{
puts
(
"didn't coalesce
\n
"
);
exit
();
}
free
(
m1
);
m1
=
0
;
while
((
m2
=
malloc
(
1024
))
!=
0
)
{
*
(
char
**
)
m2
=
m1
;
m1
=
m2
;
}
while
(
m1
)
{
m2
=
*
(
char
**
)
m1
;
free
(
m1
);
m1
=
m2
;
}
m1
=
malloc
(
1024
*
20
);
if
(
m1
==
0
)
{
puts
(
"couldn't allocate mem?!!
\n
"
);
exit
();
}
free
(
m1
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
puts
(
"usertests starting
\n
"
);
pipe1
();
preempt
();
exitwait
();
// pipe1();
// preempt();
// exitwait();
mem
();
puts
(
"usertests finished
\n
"
);
exit
();
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论