Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
9298a90d
提交
9298a90d
3月 13, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Associate brk with vmap (instead of proc)
上级
297c42cd
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
13 行增加
和
10 行删除
+13
-10
proc.hh
include/proc.hh
+0
-1
vm.hh
include/vm.hh
+2
-0
exec.cc
kernel/exec.cc
+1
-1
proc.cc
kernel/proc.cc
+5
-6
sysproc.cc
kernel/sysproc.cc
+1
-1
vm.cc
kernel/vm.cc
+4
-1
没有找到文件。
include/proc.hh
浏览文件 @
9298a90d
...
...
@@ -43,7 +43,6 @@ enum procstate { EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };
// Per-process state
struct
proc
:
public
rcu_freed
{
struct
vmap
*
vmap
;
// va -> vma
uptr
brk
;
// Top of heap
char
*
kstack
;
// Bottom of kernel stack for this process
volatile
int
pid
;
// Process ID
struct
proc
*
parent
;
// Parent process
...
...
include/vm.hh
浏览文件 @
9298a90d
...
...
@@ -88,6 +88,8 @@ struct vmap {
int
copyout
(
uptr
va
,
void
*
p
,
u64
len
);
NEW_DELETE_OPS
(
vmap
)
uptr
brk_
;
// Top of heap
private
:
int
pagefault_wcow
(
vma
*
m
);
};
kernel/exec.cc
浏览文件 @
9298a90d
...
...
@@ -136,6 +136,7 @@ doheap(struct eargs *args)
goto
bad
;
if
(
args
->
vmap
->
insert
(
vmn
,
BRK
,
1
)
<
0
)
goto
bad
;
args
->
vmap
->
brk_
=
BRK
+
8
;
// XXX so that brk-1 points within heap vma..
return
;
...
...
@@ -202,7 +203,6 @@ exec(const char *path, char **argv)
// Commit to the user image.
oldvmap
=
myproc
()
->
vmap
;
myproc
()
->
vmap
=
vmp
;
myproc
()
->
brk
=
BRK
+
8
;
// XXX so that brk-1 points within heap vma..
myproc
()
->
tf
->
rip
=
elf
.
entry
;
// main
switchvm
(
myproc
());
...
...
kernel/proc.cc
浏览文件 @
9298a90d
...
...
@@ -36,7 +36,7 @@ struct kstack_tag kstack_tag[NCPU];
enum
{
sched_debug
=
0
};
proc
::
proc
(
int
npid
)
:
rcu_freed
(
"proc"
),
vmap
(
0
),
brk
(
0
),
kstack
(
0
),
rcu_freed
(
"proc"
),
vmap
(
0
),
kstack
(
0
),
pid
(
npid
),
parent
(
0
),
tf
(
0
),
context
(
0
),
killed
(
0
),
ftable
(
0
),
cwd
(
0
),
tsc
(
0
),
curcycles
(
0
),
cpuid
(
0
),
epoch
(
0
),
on_runq
(
-
1
),
cpu_pin
(
0
),
runq
(
0
),
oncv
(
0
),
cv_wakeup
(
0
),
...
...
@@ -285,10 +285,10 @@ int
growproc
(
int
n
)
{
struct
vmap
*
m
=
myproc
()
->
vmap
;
auto
curbrk
=
m
yproc
()
->
brk
;
auto
curbrk
=
m
->
brk_
;
if
(
n
<
0
&&
0
-
n
<=
curbrk
){
m
yproc
()
->
brk
+=
n
;
m
->
brk_
+=
n
;
return
0
;
}
...
...
@@ -312,7 +312,7 @@ growproc(int n)
if
(
e
->
vma_start
<=
newstart
)
{
if
(
e
->
vma_end
>=
newstart
+
newn
)
{
m
yproc
()
->
brk
+=
n
;
m
->
brk_
+=
n
;
return
0
;
}
...
...
@@ -349,7 +349,7 @@ growproc(int n)
span
.
replace
(
newstart
,
newn
,
repl
);
#endif
m
yproc
()
->
brk
+=
n
;
m
->
brk_
+=
n
;
return
0
;
}
...
...
@@ -453,7 +453,6 @@ fork(int flags)
np
->
vmap
->
ref
++
;
}
np
->
brk
=
myproc
()
->
brk
;
np
->
parent
=
myproc
();
*
np
->
tf
=
*
myproc
()
->
tf
;
...
...
kernel/sysproc.cc
浏览文件 @
9298a90d
...
...
@@ -46,7 +46,7 @@ sys_sbrk(int n)
{
uptr
addr
;
addr
=
myproc
()
->
brk
;
addr
=
myproc
()
->
vmap
->
brk_
;
if
(
growproc
(
n
)
<
0
)
return
-
1
;
return
addr
;
...
...
kernel/vm.cc
浏览文件 @
9298a90d
...
...
@@ -145,7 +145,8 @@ vmap::vmap() :
#if VM_RADIX
rx
(
PGSHIFT
),
#endif
ref
(
1
),
pml4
(
setupkvm
()),
kshared
((
char
*
)
ksalloc
(
slab_kshared
))
ref
(
1
),
pml4
(
setupkvm
()),
kshared
((
char
*
)
ksalloc
(
slab_kshared
)),
brk_
(
0
)
{
if
(
pml4
==
0
)
{
cprintf
(
"vmap_alloc: setupkvm out of memory
\n
"
);
...
...
@@ -289,6 +290,8 @@ vmap::copy(int share)
if
(
share
)
tlbflush
();
// Reload hardware page table
nm
->
brk_
=
brk_
;
return
nm
;
err
:
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论