Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
8a9933a2
提交
8a9933a2
8月 09, 2011
创建
作者:
Frans Kaashoek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Tiny bit of cleanup
上级
22c73411
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
7 行增加
和
7 行删除
+7
-7
vm.c
vm.c
+7
-7
没有找到文件。
vm.c
浏览文件 @
8a9933a2
...
@@ -43,7 +43,7 @@ seginit(void)
...
@@ -43,7 +43,7 @@ seginit(void)
// that corresponds to linear address va. If create!=0,
// that corresponds to linear address va. If create!=0,
// create any required page table pages.
// create any required page table pages.
static
pte_t
*
static
pte_t
*
walkpgdir
(
pde_t
*
pgdir
,
const
void
*
va
,
int
create
,
char
*
(
*
alloc
)(
void
))
walkpgdir
(
pde_t
*
pgdir
,
const
void
*
va
,
char
*
(
*
alloc
)(
void
))
{
{
pde_t
*
pde
;
pde_t
*
pde
;
pte_t
*
pgtab
;
pte_t
*
pgtab
;
...
@@ -52,7 +52,7 @@ walkpgdir(pde_t *pgdir, const void *va, int create, char* (*alloc)(void))
...
@@ -52,7 +52,7 @@ walkpgdir(pde_t *pgdir, const void *va, int create, char* (*alloc)(void))
if
(
*
pde
&
PTE_P
){
if
(
*
pde
&
PTE_P
){
pgtab
=
(
pte_t
*
)
p2v
(
PTE_ADDR
(
*
pde
));
pgtab
=
(
pte_t
*
)
p2v
(
PTE_ADDR
(
*
pde
));
}
else
{
}
else
{
if
(
!
create
||
(
pgtab
=
(
pte_t
*
)
alloc
())
==
0
)
if
(
!
alloc
||
(
pgtab
=
(
pte_t
*
)
alloc
())
==
0
)
return
0
;
return
0
;
// Make sure all those PTE_P bits are zero.
// Make sure all those PTE_P bits are zero.
memset
(
pgtab
,
0
,
PGSIZE
);
memset
(
pgtab
,
0
,
PGSIZE
);
...
@@ -76,7 +76,7 @@ mappages(pde_t *pgdir, void *la, uint size, uint pa, int perm, char* (*alloc)(vo
...
@@ -76,7 +76,7 @@ mappages(pde_t *pgdir, void *la, uint size, uint pa, int perm, char* (*alloc)(vo
a
=
PGROUNDDOWN
(
la
);
a
=
PGROUNDDOWN
(
la
);
last
=
PGROUNDDOWN
(
la
+
size
-
1
);
last
=
PGROUNDDOWN
(
la
+
size
-
1
);
for
(;;){
for
(;;){
pte
=
walkpgdir
(
pgdir
,
a
,
1
,
alloc
);
pte
=
walkpgdir
(
pgdir
,
a
,
alloc
);
if
(
pte
==
0
)
if
(
pte
==
0
)
return
-
1
;
return
-
1
;
if
(
*
pte
&
PTE_P
)
if
(
*
pte
&
PTE_P
)
...
@@ -222,7 +222,7 @@ loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz)
...
@@ -222,7 +222,7 @@ loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz)
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
,
kalloc
))
==
0
)
if
((
pte
=
walkpgdir
(
pgdir
,
addr
+
i
,
0
))
==
0
)
panic
(
"loaduvm: address should exist"
);
panic
(
"loaduvm: address should exist"
);
pa
=
PTE_ADDR
(
*
pte
);
pa
=
PTE_ADDR
(
*
pte
);
if
(
sz
-
i
<
PGSIZE
)
if
(
sz
-
i
<
PGSIZE
)
...
@@ -277,7 +277,7 @@ deallocuvm(pde_t *pgdir, uint oldsz, uint newsz)
...
@@ -277,7 +277,7 @@ deallocuvm(pde_t *pgdir, uint oldsz, uint newsz)
a
=
PGROUNDUP
(
newsz
);
a
=
PGROUNDUP
(
newsz
);
for
(;
a
<
oldsz
;
a
+=
PGSIZE
){
for
(;
a
<
oldsz
;
a
+=
PGSIZE
){
pte
=
walkpgdir
(
pgdir
,
(
char
*
)
a
,
0
,
kalloc
);
pte
=
walkpgdir
(
pgdir
,
(
char
*
)
a
,
0
);
if
(
pte
&&
(
*
pte
&
PTE_P
)
!=
0
){
if
(
pte
&&
(
*
pte
&
PTE_P
)
!=
0
){
pa
=
PTE_ADDR
(
*
pte
);
pa
=
PTE_ADDR
(
*
pte
);
if
(
pa
==
0
)
if
(
pa
==
0
)
...
@@ -322,7 +322,7 @@ copyuvm(pde_t *pgdir, uint sz)
...
@@ -322,7 +322,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
,
kalloc
))
==
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"
);
...
@@ -347,7 +347,7 @@ uva2ka(pde_t *pgdir, char *uva)
...
@@ -347,7 +347,7 @@ uva2ka(pde_t *pgdir, char *uva)
{
{
pte_t
*
pte
;
pte_t
*
pte
;
pte
=
walkpgdir
(
pgdir
,
uva
,
0
,
kalloc
);
pte
=
walkpgdir
(
pgdir
,
uva
,
0
);
if
((
*
pte
&
PTE_P
)
==
0
)
if
((
*
pte
&
PTE_P
)
==
0
)
return
0
;
return
0
;
if
((
*
pte
&
PTE_U
)
==
0
)
if
((
*
pte
&
PTE_U
)
==
0
)
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论