Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
14835ec9
提交
14835ec9
9月 02, 2011
创建
作者:
Austin Clements
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Style
上级
cf7b6702
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
7 行增加
和
7 行删除
+7
-7
vm.c
vm.c
+7
-7
没有找到文件。
vm.c
浏览文件 @
14835ec9
...
@@ -74,8 +74,8 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa,
...
@@ -74,8 +74,8 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa,
char
*
a
,
*
last
;
char
*
a
,
*
last
;
pte_t
*
pte
;
pte_t
*
pte
;
a
=
(
char
*
)
PGROUNDDOWN
((
uint
)
va
);
a
=
(
char
*
)
PGROUNDDOWN
((
uint
)
va
);
last
=
(
char
*
)
PGROUNDDOWN
(((
uint
)
va
)
+
size
-
1
);
last
=
(
char
*
)
PGROUNDDOWN
(((
uint
)
va
)
+
size
-
1
);
for
(;;){
for
(;;){
if
((
pte
=
walkpgdir
(
pgdir
,
a
,
alloc
)
==
0
)
if
((
pte
=
walkpgdir
(
pgdir
,
a
,
alloc
)
==
0
)
return
-
1
;
return
-
1
;
...
@@ -119,7 +119,7 @@ static struct kmap {
...
@@ -119,7 +119,7 @@ static struct kmap {
int
perm
;
int
perm
;
}
kmap
[]
=
{
}
kmap
[]
=
{
{
P2V
(
0
),
0
,
1024
*
1024
,
PTE_W
},
// I/O space
{
P2V
(
0
),
0
,
1024
*
1024
,
PTE_W
},
// I/O space
{
(
void
*
)
KERNLINK
,
V2P
(
KERNLINK
),
V2P
(
data
),
0
},
// kernel text+rodata
{
(
void
*
)
KERNLINK
,
V2P
(
KERNLINK
),
V2P
(
data
),
0
},
// kernel text+rodata
{
data
,
V2P
(
data
),
PHYSTOP
,
PTE_W
},
// kernel data, memory
{
data
,
V2P
(
data
),
PHYSTOP
,
PTE_W
},
// kernel data, memory
{
(
void
*
)
DEVSPACE
,
DEVSPACE
,
0
,
PTE_W
},
// more devices
{
(
void
*
)
DEVSPACE
,
DEVSPACE
,
0
,
PTE_W
},
// more devices
};
};
...
@@ -135,7 +135,7 @@ setupkvm(char* (*alloc)(void))
...
@@ -135,7 +135,7 @@ setupkvm(char* (*alloc)(void))
return
0
;
return
0
;
memset
(
pgdir
,
0
,
PGSIZE
);
memset
(
pgdir
,
0
,
PGSIZE
);
k
=
kmap
;
k
=
kmap
;
if
(
p2v
(
PHYSTOP
)
>
(
void
*
)
DEVSPACE
)
if
(
p2v
(
PHYSTOP
)
>
(
void
*
)
DEVSPACE
)
panic
(
"PHYSTOP too high"
);
panic
(
"PHYSTOP too high"
);
for
(
k
=
kmap
;
k
<
&
kmap
[
NELEM
(
kmap
)];
k
++
)
for
(
k
=
kmap
;
k
<
&
kmap
[
NELEM
(
kmap
)];
k
++
)
if
(
mappages
(
pgdir
,
k
->
virt
,
k
->
phys_end
-
k
->
phys_start
,
if
(
mappages
(
pgdir
,
k
->
virt
,
k
->
phys_end
-
k
->
phys_start
,
...
@@ -201,7 +201,7 @@ loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz)
...
@@ -201,7 +201,7 @@ loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz)
uint
i
,
pa
,
n
;
uint
i
,
pa
,
n
;
pte_t
*
pte
;
pte_t
*
pte
;
if
((
uint
)
addr
%
PGSIZE
!=
0
)
if
((
uint
)
addr
%
PGSIZE
!=
0
)
panic
(
"loaduvm: addr must be page aligned"
);
panic
(
"loaduvm: addr must be page aligned"
);
for
(
i
=
0
;
i
<
sz
;
i
+=
PGSIZE
){
for
(
i
=
0
;
i
<
sz
;
i
+=
PGSIZE
){
if
((
pte
=
walkpgdir
(
pgdir
,
addr
+
i
,
0
))
==
0
)
if
((
pte
=
walkpgdir
(
pgdir
,
addr
+
i
,
0
))
==
0
)
...
@@ -285,7 +285,7 @@ freevm(pde_t *pgdir)
...
@@ -285,7 +285,7 @@ freevm(pde_t *pgdir)
panic
(
"freevm: no pgdir"
);
panic
(
"freevm: no pgdir"
);
deallocuvm
(
pgdir
,
KERNBASE
,
0
);
deallocuvm
(
pgdir
,
KERNBASE
,
0
);
for
(
i
=
0
;
i
<
NPDENTRIES
;
i
++
){
for
(
i
=
0
;
i
<
NPDENTRIES
;
i
++
){
if
(
pgdir
[
i
]
&
PTE_P
)
{
if
(
pgdir
[
i
]
&
PTE_P
){
char
*
v
=
p2v
(
PTE_ADDR
(
pgdir
[
i
]));
char
*
v
=
p2v
(
PTE_ADDR
(
pgdir
[
i
]));
kfree
(
v
);
kfree
(
v
);
}
}
...
@@ -306,7 +306,7 @@ copyuvm(pde_t *pgdir, uint sz)
...
@@ -306,7 +306,7 @@ copyuvm(pde_t *pgdir, uint sz)
if
((
d
=
setupkvm
(
kalloc
))
==
0
)
if
((
d
=
setupkvm
(
kalloc
))
==
0
)
return
0
;
return
0
;
for
(
i
=
0
;
i
<
sz
;
i
+=
PGSIZE
){
for
(
i
=
0
;
i
<
sz
;
i
+=
PGSIZE
){
if
((
pte
=
walkpgdir
(
pgdir
,
(
void
*
)
i
,
0
))
==
0
)
if
((
pte
=
walkpgdir
(
pgdir
,
(
void
*
)
i
,
0
))
==
0
)
panic
(
"copyuvm: pte should exist"
);
panic
(
"copyuvm: pte should exist"
);
if
(
!
(
*
pte
&
PTE_P
))
if
(
!
(
*
pte
&
PTE_P
))
panic
(
"copyuvm: page not present"
);
panic
(
"copyuvm: page not present"
);
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论