Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
1c77c3b0
提交
1c77c3b0
2月 23, 2012
创建
作者:
Nickolai Zeldovich
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
macro for fixed-size operator new and delete
上级
958c2e7f
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
33 行增加
和
97 行删除
+33
-97
buf.hh
include/buf.hh
+2
-9
cpputil.hh
include/cpputil.hh
+15
-3
cpu.hh
include/cpu.hh
+2
-0
crange.hh
include/crange.hh
+2
-17
crange_arch.hh
include/crange_arch.hh
+1
-0
file.hh
include/file.hh
+1
-9
ns.hh
include/ns.hh
+2
-16
proc.hh
include/proc.hh
+2
-0
vm.hh
include/vm.hh
+4
-27
fs.cc
kernel/fs.cc
+1
-8
proc.cc
kernel/proc.cc
+1
-8
没有找到文件。
include/buf.hh
浏览文件 @
1c77c3b0
#include "gc.hh"
#include "gc.hh"
#include "atomic.hh"
#include "atomic.hh"
#include "cpputil.hh"
using
std
::
atomic
;
using
std
::
atomic
;
...
@@ -17,15 +18,7 @@ struct buf : public rcu_freed {
...
@@ -17,15 +18,7 @@ struct buf : public rcu_freed {
buf
()
:
rcu_freed
(
"buf"
)
{}
buf
()
:
rcu_freed
(
"buf"
)
{}
virtual
void
do_gc
()
{
delete
this
;
}
virtual
void
do_gc
()
{
delete
this
;
}
NEW_DELETE_OPS
(
buf
)
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
assert
(
nbytes
==
sizeof
(
buf
));
return
kmalloc
(
sizeof
(
buf
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
buf
));
}
};
};
#define B_BUSY 0x1 // buffer is locked by some process
#define B_BUSY 0x1 // buffer is locked by some process
#define B_VALID 0x2 // buffer has been read from disk
#define B_VALID 0x2 // buffer has been read from disk
...
...
include/cpputil.hh
浏览文件 @
1c77c3b0
...
@@ -67,8 +67,20 @@ namespace std {
...
@@ -67,8 +67,20 @@ namespace std {
}
}
/* C++ runtime */
/* C++ runtime */
void
*
operator
new
(
unsigned
long
nbytes
);
// void *operator new(unsigned long nbytes);
void
*
operator
new
(
unsigned
long
nbytes
,
void
*
buf
);
// void *operator new(unsigned long nbytes, void *buf);
void
operator
delete
(
void
*
p
);
void
*
operator
new
[](
unsigned
long
nbytes
);
// void operator delete(void *p);
void
operator
delete
[](
void
*
p
);
extern
"C"
void
__cxa_pure_virtual
(
void
);
extern
"C"
void
__cxa_pure_virtual
(
void
);
#define NEW_DELETE_OPS(classname) \
static void* operator new(unsigned long nbytes) { \
assert(nbytes == sizeof(classname)); \
return kmalloc(sizeof(classname)); \
} \
\
static void operator delete(void *p) { \
return kmfree(p, sizeof(classname)); \
}
include/cpu.hh
浏览文件 @
1c77c3b0
#pragma once
#include "mmu.h"
#include "mmu.h"
#include "atomic.hh"
#include "atomic.hh"
...
...
include/crange.hh
浏览文件 @
1c77c3b0
...
@@ -110,14 +110,7 @@ struct range_head : public range {
...
@@ -110,14 +110,7 @@ struct range_head : public range {
range_head
(
crange
*
cr
,
u64
k
,
u64
sz
,
int
nlevel
)
range_head
(
crange
*
cr
,
u64
k
,
u64
sz
,
int
nlevel
)
:
range
(
cr
,
k
,
sz
,
nlevel
)
{}
:
range
(
cr
,
k
,
sz
,
nlevel
)
{}
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
NEW_DELETE_OPS
(
range_head
)
assert
(
nbytes
==
sizeof
(
range_head
));
return
kmalloc
(
sizeof
(
range_head
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
range_head
));
}
virtual
void
do_gc
()
{
virtual
void
do_gc
()
{
delete
this
;
delete
this
;
...
@@ -165,15 +158,7 @@ struct crange {
...
@@ -165,15 +158,7 @@ struct crange {
range_iterator
begin
()
const
{
return
range_iterator
(
crange_head
->
next
[
0
].
ptr
());
};
range_iterator
begin
()
const
{
return
range_iterator
(
crange_head
->
next
[
0
].
ptr
());
};
range_iterator
end
()
const
{
return
range_iterator
(
0
);
};
range_iterator
end
()
const
{
return
range_iterator
(
0
);
};
NEW_DELETE_OPS
(
crange
)
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
assert
(
nbytes
==
sizeof
(
crange
));
return
kmalloc
(
sizeof
(
crange
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
crange
));
}
};
};
static
inline
range_iterator
static
inline
range_iterator
...
...
include/crange_arch.hh
浏览文件 @
1c77c3b0
...
@@ -6,3 +6,4 @@
...
@@ -6,3 +6,4 @@
#include "atomic.hh"
#include "atomic.hh"
#include "proc.hh"
#include "proc.hh"
#include "cpu.hh"
#include "cpu.hh"
#include "cpputil.hh"
include/file.hh
浏览文件 @
1c77c3b0
...
@@ -42,15 +42,7 @@ struct inode : public rcu_freed {
...
@@ -42,15 +42,7 @@ struct inode : public rcu_freed {
inode
();
inode
();
~
inode
();
~
inode
();
virtual
void
do_gc
()
{
delete
this
;
}
virtual
void
do_gc
()
{
delete
this
;
}
NEW_DELETE_OPS
(
inode
)
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
assert
(
nbytes
==
sizeof
(
inode
));
return
kmalloc
(
sizeof
(
inode
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
inode
));
}
};
};
#define I_BUSYR 0x1
#define I_BUSYR 0x1
...
...
include/ns.hh
浏览文件 @
1c77c3b0
...
@@ -24,14 +24,7 @@ class xelem : public rcu_freed {
...
@@ -24,14 +24,7 @@ class xelem : public rcu_freed {
delete
this
;
delete
this
;
}
}
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
NEW_DELETE_OPS
(
xelem
)
assert
(
nbytes
==
sizeof
(
xelem
));
return
kmalloc
(
sizeof
(
xelem
));
}
static
void
operator
delete
(
void
*
p
)
{
kmfree
(
p
,
sizeof
(
xelem
));
}
};
};
template
<
class
K
,
class
V
>
template
<
class
K
,
class
V
>
...
@@ -227,14 +220,7 @@ class xns : public rcu_freed {
...
@@ -227,14 +220,7 @@ class xns : public rcu_freed {
return
iterator
();
return
iterator
();
}
}
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
NEW_DELETE_OPS
(
xns
)
assert
(
nbytes
==
sizeof
(
xns
));
return
kmalloc
(
sizeof
(
xns
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
xns
));
}
};
};
template
<
class
K
,
class
V
,
u64
(
*
HF
)(
const
K
&
)
>
template
<
class
K
,
class
V
,
u64
(
*
HF
)(
const
K
&
)
>
...
...
include/proc.hh
浏览文件 @
1c77c3b0
#pragma once
#include "spinlock.h"
#include "spinlock.h"
#include "atomic.hh"
#include "atomic.hh"
...
...
include/vm.hh
浏览文件 @
1c77c3b0
#include "gc.hh"
#include "gc.hh"
#include "atomic.hh"
#include "atomic.hh"
#include "crange_arch.hh"
#include "crange.hh"
#include "crange.hh"
#include "cpputil.hh"
#include "cpputil.hh"
#include "hwvm.hh"
#include "hwvm.hh"
...
@@ -26,15 +27,7 @@ struct vmnode {
...
@@ -26,15 +27,7 @@ struct vmnode {
vmnode
*
copy
();
vmnode
*
copy
();
int
demand_load
();
int
demand_load
();
NEW_DELETE_OPS
(
vmnode
)
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
assert
(
nbytes
==
sizeof
(
vmnode
));
return
kmalloc
(
sizeof
(
vmnode
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
vmnode
));
}
};
};
// A mapping of a chunk of an address space to
// A mapping of a chunk of an address space to
...
@@ -51,15 +44,7 @@ struct vma : public range {
...
@@ -51,15 +44,7 @@ struct vma : public range {
~
vma
();
~
vma
();
virtual
void
do_gc
()
{
delete
this
;
}
virtual
void
do_gc
()
{
delete
this
;
}
NEW_DELETE_OPS
(
vma
)
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
assert
(
nbytes
==
sizeof
(
vma
));
return
kmalloc
(
sizeof
(
vma
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
vma
));
}
};
};
// An address space: a set of vmas plus h/w page table.
// An address space: a set of vmas plus h/w page table.
...
@@ -83,15 +68,7 @@ struct vmap {
...
@@ -83,15 +68,7 @@ struct vmap {
int
pagefault
(
uptr
va
,
u32
err
);
int
pagefault
(
uptr
va
,
u32
err
);
int
copyout
(
uptr
va
,
void
*
p
,
u64
len
);
int
copyout
(
uptr
va
,
void
*
p
,
u64
len
);
NEW_DELETE_OPS
(
vmap
)
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
assert
(
nbytes
==
sizeof
(
vmap
));
return
kmalloc
(
sizeof
(
vmap
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
vmap
));
}
private
:
private
:
int
pagefault_wcow
(
vma
*
m
);
int
pagefault_wcow
(
vma
*
m
);
...
...
kernel/fs.cc
浏览文件 @
1c77c3b0
...
@@ -485,14 +485,7 @@ class diskblock : public rcu_freed {
...
@@ -485,14 +485,7 @@ class diskblock : public rcu_freed {
delete
this
;
delete
this
;
}
}
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
NEW_DELETE_OPS
(
diskblock
)
assert
(
nbytes
==
sizeof
(
diskblock
));
return
kmalloc
(
sizeof
(
diskblock
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
diskblock
));
}
};
};
static
void
static
void
...
...
kernel/proc.cc
浏览文件 @
1c77c3b0
...
@@ -188,14 +188,7 @@ class delayed_proc_free : public rcu_freed {
...
@@ -188,14 +188,7 @@ class delayed_proc_free : public rcu_freed {
delete
this
;
delete
this
;
}
}
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
NEW_DELETE_OPS
(
delayed_proc_free
)
assert
(
nbytes
==
sizeof
(
delayed_proc_free
));
return
kmalloc
(
sizeof
(
delayed_proc_free
));
}
static
void
operator
delete
(
void
*
p
)
{
return
kmfree
(
p
,
sizeof
(
delayed_proc_free
));
}
};
};
static
void
static
void
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论