Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
3b95801a
提交
3b95801a
8月 29, 2006
创建
作者:
rtm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
i broke sbrk, fix it
上级
2b19190c
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
13 行增加
和
10 行删除
+13
-10
defs.h
defs.h
+1
-1
proc.c
proc.c
+3
-3
syscall.c
syscall.c
+3
-2
trap.c
trap.c
+0
-1
usertests.c
usertests.c
+6
-3
没有找到文件。
defs.h
浏览文件 @
3b95801a
...
@@ -16,7 +16,7 @@ struct jmpbuf;
...
@@ -16,7 +16,7 @@ struct jmpbuf;
void
setupsegs
(
struct
proc
*
);
void
setupsegs
(
struct
proc
*
);
struct
proc
*
copyproc
(
struct
proc
*
);
struct
proc
*
copyproc
(
struct
proc
*
);
struct
spinlock
;
struct
spinlock
;
int
growproc
(
int
);
u
int
growproc
(
int
);
void
sleep
(
void
*
,
struct
spinlock
*
);
void
sleep
(
void
*
,
struct
spinlock
*
);
void
wakeup
(
void
*
);
void
wakeup
(
void
*
);
void
scheduler
(
void
);
void
scheduler
(
void
);
...
...
proc.c
浏览文件 @
3b95801a
...
@@ -138,7 +138,7 @@ copyproc(struct proc* p)
...
@@ -138,7 +138,7 @@ copyproc(struct proc* p)
return
np
;
return
np
;
}
}
int
u
int
growproc
(
int
n
)
growproc
(
int
n
)
{
{
struct
proc
*
cp
=
curproc
[
cpu
()];
struct
proc
*
cp
=
curproc
[
cpu
()];
...
@@ -146,14 +146,14 @@ growproc(int n)
...
@@ -146,14 +146,14 @@ growproc(int n)
newmem
=
kalloc
(
cp
->
sz
+
n
);
newmem
=
kalloc
(
cp
->
sz
+
n
);
if
(
newmem
==
0
)
if
(
newmem
==
0
)
return
-
1
;
return
0xffffffff
;
memmove
(
newmem
,
cp
->
mem
,
cp
->
sz
);
memmove
(
newmem
,
cp
->
mem
,
cp
->
sz
);
memset
(
newmem
+
cp
->
sz
,
0
,
n
);
memset
(
newmem
+
cp
->
sz
,
0
,
n
);
oldmem
=
cp
->
mem
;
oldmem
=
cp
->
mem
;
cp
->
mem
=
newmem
;
cp
->
mem
=
newmem
;
kfree
(
oldmem
,
cp
->
sz
);
kfree
(
oldmem
,
cp
->
sz
);
cp
->
sz
+=
n
;
cp
->
sz
+=
n
;
return
0
;
return
cp
->
sz
-
n
;
}
}
// Per-CPU process scheduler.
// Per-CPU process scheduler.
...
...
syscall.c
浏览文件 @
3b95801a
...
@@ -473,15 +473,16 @@ sys_getpid(void)
...
@@ -473,15 +473,16 @@ sys_getpid(void)
int
int
sys_sbrk
(
void
)
sys_sbrk
(
void
)
{
{
unsigned
addr
;
int
n
;
int
n
;
struct
proc
*
cp
=
curproc
[
cpu
()];
struct
proc
*
cp
=
curproc
[
cpu
()];
if
(
fetcharg
(
0
,
&
n
)
<
0
)
if
(
fetcharg
(
0
,
&
n
)
<
0
)
return
-
1
;
return
-
1
;
if
(
growproc
(
n
)
!=
0
)
if
(
(
addr
=
growproc
(
n
))
==
0xffffffff
)
return
-
1
;
return
-
1
;
setupsegs
(
cp
);
setupsegs
(
cp
);
return
0
;
return
addr
;
}
}
int
int
...
...
trap.c
浏览文件 @
3b95801a
...
@@ -37,7 +37,6 @@ trap(struct trapframe *tf)
...
@@ -37,7 +37,6 @@ trap(struct trapframe *tf)
if
(
v
==
T_SYSCALL
){
if
(
v
==
T_SYSCALL
){
struct
proc
*
cp
=
curproc
[
cpu
()];
struct
proc
*
cp
=
curproc
[
cpu
()];
int
num
=
cp
->
tf
->
eax
;
if
(
cp
->
killed
)
if
(
cp
->
killed
)
proc_exit
();
proc_exit
();
cp
->
tf
=
tf
;
cp
->
tf
=
tf
;
...
...
usertests.c
浏览文件 @
3b95801a
...
@@ -124,6 +124,7 @@ mem(void)
...
@@ -124,6 +124,7 @@ mem(void)
m1
=
0
;
m1
=
0
;
while
((
m2
=
malloc
(
1024
))
!=
0
)
{
while
((
m2
=
malloc
(
1024
))
!=
0
)
{
printf
(
1
,
"malloc %x
\n
"
,
m2
);
*
(
char
**
)
m2
=
m1
;
*
(
char
**
)
m2
=
m1
;
m1
=
m2
;
m1
=
m2
;
}
}
...
@@ -138,6 +139,8 @@ mem(void)
...
@@ -138,6 +139,8 @@ mem(void)
exit
();
exit
();
}
}
free
(
m1
);
free
(
m1
);
printf
(
1
,
"mem ok
\n
"
);
}
}
int
int
...
@@ -145,10 +148,10 @@ main(int argc, char *argv[])
...
@@ -145,10 +148,10 @@ main(int argc, char *argv[])
{
{
puts
(
"usertests starting
\n
"
);
puts
(
"usertests starting
\n
"
);
// pipe1();
// preempt();
// exitwait();
mem
();
mem
();
pipe1
();
preempt
();
exitwait
();
puts
(
"usertests finished
\n
"
);
puts
(
"usertests finished
\n
"
);
exit
();
exit
();
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论