Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
f51e9863
提交
f51e9863
4月 26, 2012
创建
作者:
Austin Clements
提交者:
Silas Boyd-Wickizer
4月 27, 2012
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
asharing vm2 test that does lots of non-commutative operations
The only unexpected sharing is on the VMA refcount, which is exactly what we expected.
上级
69cbd10a
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
53 行增加
和
0 行删除
+53
-0
asharing.cc
bin/asharing.cc
+53
-0
没有找到文件。
bin/asharing.cc
浏览文件 @
f51e9863
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
#include <sys/mman.h>
#include <sys/mman.h>
#include "atomic.hh"
#include "atomic.hh"
#include <utility>
static
int
cpu
;
static
int
cpu
;
std
::
atomic
<
int
>
barrier
;
std
::
atomic
<
int
>
barrier
;
...
@@ -38,6 +39,14 @@ ready(void)
...
@@ -38,6 +39,14 @@ ready(void)
}
}
}
}
u64
rnd
(
void
)
{
static
u64
rseed
;
rseed
=
rseed
*
6364136223846793005
+
1442695040888963407
;
return
rseed
;
}
void
*
void
*
vmsharing
(
void
*
arg
)
vmsharing
(
void
*
arg
)
{
{
...
@@ -55,6 +64,48 @@ vmsharing(void* arg)
...
@@ -55,6 +64,48 @@ vmsharing(void* arg)
return
0
;
return
0
;
}
}
std
::
atomic
<
int
>
round
;
void
*
vm2sharing
(
void
*
arg
)
{
u64
i
=
(
u64
)
arg
;
char
*
base
=
(
char
*
)
0x1000
;
ready
();
while
(
true
)
{
while
(
round
%
ncore
!=
i
)
asm
volatile
(
"pause"
);
if
(
round
>=
50
)
{
round
++
;
return
0
;
}
int
op
=
rnd
()
%
2
;
int
lo
=
rnd
()
%
10
,
hi
=
rnd
()
%
10
;
if
(
lo
>
hi
)
std
::
swap
(
lo
,
hi
);
if
(
lo
==
hi
)
continue
;
if
(
op
==
0
)
{
// Map
void
*
res
=
mmap
(
base
+
lo
*
4096
,
(
hi
-
lo
)
*
4096
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_FIXED
|
MAP_ANONYMOUS
,
-
1
,
0
);
if
(
res
==
MAP_FAILED
)
die
(
"asharing: mmap failed"
);
}
else
{
// Unmap
int
res
=
munmap
(
base
+
lo
*
4096
,
(
hi
-
lo
)
*
4096
);
if
(
res
<
0
)
die
(
"asharing: munmap failed"
);
}
round
++
;
}
}
void
*
void
*
fssharing
(
void
*
arg
)
fssharing
(
void
*
arg
)
{
{
...
@@ -84,6 +135,8 @@ main(int ac, char **av)
...
@@ -84,6 +135,8 @@ main(int ac, char **av)
void
*
(
*
op
)(
void
*
)
=
0
;
void
*
(
*
op
)(
void
*
)
=
0
;
if
(
ac
==
2
&&
strcmp
(
av
[
1
],
"vm"
)
==
0
)
if
(
ac
==
2
&&
strcmp
(
av
[
1
],
"vm"
)
==
0
)
op
=
vmsharing
;
op
=
vmsharing
;
else
if
(
ac
==
2
&&
strcmp
(
av
[
1
],
"vm2"
)
==
0
)
op
=
vm2sharing
;
else
if
(
ac
==
2
&&
strcmp
(
av
[
1
],
"fs"
)
==
0
)
else
if
(
ac
==
2
&&
strcmp
(
av
[
1
],
"fs"
)
==
0
)
op
=
fssharing
;
op
=
fssharing
;
else
else
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论