Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
003c6506
提交
003c6506
4月 11, 2012
创建
作者:
Austin Clements
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
map -> mmap everywhere
上级
52040c66
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
26 行增加
和
20 行删除
+26
-20
asharing.cc
bin/asharing.cc
+4
-2
mapbench.cc
bin/mapbench.cc
+4
-1
maptest.cc
bin/maptest.cc
+4
-1
usertests.cc
bin/usertests.cc
+9
-5
sysproc.cc
kernel/sysproc.cc
+0
-8
wqalloc.cc
lib/wqalloc.cc
+5
-3
没有找到文件。
bin/asharing.cc
浏览文件 @
003c6506
...
...
@@ -6,6 +6,8 @@
#include "mtrace.h"
#include "pthread.h"
#include <sys/mman.h>
static
int
cpu
;
static
pthread_barrier_t
bar
;
enum
{
ncore
=
8
};
...
...
@@ -27,8 +29,8 @@ vmsharing(void* arg)
u64
i
=
(
u64
)
arg
;
volatile
char
*
p
=
(
char
*
)(
0x40000UL
+
i
*
4096
);
if
(
m
ap
((
void
*
)
p
,
4096
)
<
0
)
die
(
"map failed"
);
if
(
m
map
((
void
*
)
p
,
4096
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_FIXED
|
MAP_ANONYMOUS
,
-
1
,
0
)
<
0
)
die
(
"m
m
ap failed"
);
if
(
unmap
((
void
*
)
p
,
4096
)
<
0
)
die
(
"unmap failed"
);
...
...
bin/mapbench.cc
浏览文件 @
003c6506
...
...
@@ -6,6 +6,8 @@
#include "mtrace.h"
#include "pthread.h"
#include <sys/mman.h>
enum
{
readaccess
=
1
};
enum
{
verbose
=
0
};
enum
{
npg
=
1
};
...
...
@@ -33,7 +35,8 @@ thr(void *arg)
fprintf
(
1
,
"%d: %d ops
\n
"
,
tid
,
i
);
volatile
char
*
p
=
(
char
*
)
(
0x100000000UL
+
tid
*
npg
*
0x100000
);
if
(
map
((
void
*
)
p
,
npg
*
4096
)
<
0
)
{
if
(
mmap
((
void
*
)
p
,
npg
*
4096
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_FIXED
|
MAP_ANONYMOUS
,
-
1
,
0
)
==
MAP_FAILED
)
{
fprintf
(
1
,
"%d: map failed
\n
"
,
tid
);
exit
();
}
...
...
bin/maptest.cc
浏览文件 @
003c6506
...
...
@@ -6,6 +6,8 @@
#include "uspinlock.h"
#include "pthread.h"
#include <sys/mman.h>
static
volatile
char
*
p
;
static
struct
uspinlock
l
;
static
volatile
int
state
;
...
...
@@ -50,7 +52,8 @@ int
main
(
void
)
{
p
=
(
char
*
)
0x80000
;
if
(
map
((
void
*
)
p
,
8192
)
<
0
)
{
if
(
mmap
((
void
*
)
p
,
8192
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_FIXED
|
MAP_ANONYMOUS
,
-
1
,
0
)
<
0
)
{
fprintf
(
1
,
"map failed
\n
"
);
exit
();
}
...
...
bin/usertests.cc
浏览文件 @
003c6506
...
...
@@ -6,6 +6,8 @@
#include "traps.h"
#include "pthread.h"
#include <sys/mman.h>
char
buf
[
2048
];
char
name
[
3
];
const
char
*
echoargv
[]
=
{
"echo"
,
"ALL"
,
"TESTS"
,
"PASSED"
,
0
};
...
...
@@ -1712,17 +1714,19 @@ unmappedtest(void)
printf
(
"unmappedtest
\n
"
);
for
(
int
i
=
1
;
i
<=
8
;
i
++
)
{
int
r
=
map
((
void
*
)
off
,
i
*
4096
);
if
(
r
<
0
)
void
*
p
=
mmap
((
void
*
)
off
,
i
*
4096
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_FIXED
|
MAP_ANONYMOUS
,
-
1
,
0
);
if
(
p
==
MAP_FAILED
)
die
(
"unmappedtest: map failed"
);
off
+=
(
i
*
2
*
4096
);
}
for
(
int
i
=
8
;
i
>=
1
;
i
--
)
{
long
r
=
map
(
0
,
i
*
4096
);
if
(
r
<
0
)
void
*
p
=
mmap
(
0
,
i
*
4096
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_ANONYMOUS
,
-
1
,
0
);
if
(
p
==
MAP_FAILED
)
die
(
"unmappedtest: map failed"
);
r
=
unmap
((
void
*
)
r
,
i
*
4096
);
int
r
=
unmap
(
p
,
i
*
4096
);
if
(
r
<
0
)
die
(
"unmappedtest: unmap failed"
);
}
...
...
kernel/sysproc.cc
浏览文件 @
003c6506
...
...
@@ -149,14 +149,6 @@ sys_mmap(userptr<void> addr, size_t len, int prot, int flags, int fd,
}
//SYSCALL
uptr
sys_map
(
userptr
<
void
>
addr
,
size_t
len
)
{
// XXX Compatibility
return
(
uptr
)
sys_mmap
(
addr
,
len
,
PROT_READ
|
PROT_WRITE
,
MAP_ANONYMOUS
|
MAP_PRIVATE
,
-
1
,
0
);
}
//SYSCALL
int
sys_munmap
(
userptr
<
void
>
addr
,
size_t
len
)
{
...
...
lib/wqalloc.cc
浏览文件 @
003c6506
...
...
@@ -4,6 +4,8 @@
#include "lib.h"
#include "percpu.hh"
#include <sys/mman.h>
#define WQCHUNKSZ 8192
#define WQBLOCKSZ 128
static_assert
(
WQCHUNKSZ
%
WQBLOCKSZ
==
0
,
"Bad sizes"
);
...
...
@@ -17,11 +19,11 @@ percpu<wqblock*> block;
static
bool
refill
(
void
)
{
long
r
=
map
(
0
,
WQCHUNKSZ
);
if
(
r
<
0
)
void
*
r
=
mmap
(
0
,
WQCHUNKSZ
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_ANONYMOUS
,
-
1
,
0
);
if
(
r
==
MAP_FAILED
)
return
false
;
for
(
uptr
p
=
r
;
p
<
r
+
WQCHUNKSZ
;
p
+=
WQBLOCKSZ
)
{
for
(
char
*
p
=
(
char
*
)
r
;
p
<
(
char
*
)
r
+
WQCHUNKSZ
;
p
+=
WQBLOCKSZ
)
{
wqblock
*
n
=
(
wqblock
*
)
p
;
n
->
next
=
*
block
;
*
block
=
n
;
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论