Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
nexus-am
提交
1d3338c0
N
nexus-am
项目概览
OpenXiangShan
/
nexus-am
10 个月 前同步成功
通知
0
Star
21
Fork
25
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
nexus-am
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1d3338c0
编写于
6月 26, 2017
作者:
Y
Yanyan Jiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
make asye more concise
上级
2a3a5f30
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
16 addition
and
28 deletion
+16
-28
SPEC.md
SPEC.md
+2
-2
am/am.h
am/am.h
+2
-6
am/arch/x86-qemu/src/asye.cpp
am/arch/x86-qemu/src/asye.cpp
+10
-17
tests/asyetest/main.c
tests/asyetest/main.c
+2
-3
未找到文件。
SPEC.md
浏览文件 @
1d3338c0
...
...
@@ -51,7 +51,7 @@
*
`_EVENT_TRAP`
:系统调用自陷(无cause),系统调用参数将
`_RegSet`
转换为
`intptr_t*`
后按次序排列。第一个参数为返回值。
*
`_RegSet *_make(_Area kstack, void *entry, void *arg);`
创建一个内核上下文,参数arg。
*
`void _trap();`
在内核态自陷。线程需要睡眠/让出CPU时使用。
*
`int _i
nterrupt
(int enable);`
设置中断状态(enable非0时打开)。返回设置前的中断状态。
*
`int _i
status
(int enable);`
设置中断状态(enable非0时打开)。返回设置前的中断状态。
## Protection Extension
...
...
@@ -69,4 +69,4 @@
*
`int _cpu();`
返回当前CPU的编号(从0开始)。
*
`intptr_t _atomic_xchg(volatile void *addr, intptr_t newval);`
原子交换两数。
*
`void _barrier();`
保证内存顺序一致性。
*
`extern int _NR_CPU;`
处理器数量。在
`_mpe_init()`
调用后有效。
\ No newline at end of file
*
`extern int _NR_CPU;`
处理器数量。在
`_mpe_init()`
调用后有效。
am/am.h
浏览文件 @
1d3338c0
...
...
@@ -104,14 +104,10 @@ extern _Screen _screen;
// [2] Asynchronous Extension (ASYE)
// =======================================================================
void
_asye_init
();
void
_listen
(
_RegSet
*
(
*
l
)(
_Event
ev
,
_RegSet
*
regs
));
void
_asye_init
(
_RegSet
*
(
*
l
)(
_Event
ev
,
_RegSet
*
regs
));
_RegSet
*
_make
(
_Area
kstack
,
void
*
entry
,
void
*
arg
);
void
_trap
();
void
_idle
();
void
_ienable
();
void
_idisable
();
int
_istatus
();
int
_istatus
(
int
enable
);
// =======================================================================
// [3] Protection Extension (PTE)
...
...
am/arch/x86-qemu/src/asye.cpp
浏览文件 @
1d3338c0
...
...
@@ -171,7 +171,7 @@ void irq_handle(TrapFrame *tf) {
static
GateDesc
idt
[
NR_IRQ
];
void
_asye_init
()
{
void
_asye_init
(
_RegSet
*
(
*
h
)(
_Event
,
_RegSet
*
)
)
{
smp_init
();
lapic_init
();
ioapic_enable
(
IRQ_KBD
,
0
);
...
...
@@ -204,14 +204,6 @@ void _asye_init() {
// -------------------- system call --------------------------
idt
[
0x80
]
=
GATE
(
STS_TG32
,
KSEL
(
SEG_KCODE
),
vecsys
,
DPL_USER
);
set_idt
(
idt
,
sizeof
(
idt
));
}
void
_idle
()
{
hlt
();
}
void
_listen
(
_RegSet
*
(
*
h
)(
_Event
,
_RegSet
*
))
{
H
=
h
;
}
...
...
@@ -230,12 +222,13 @@ void _trap() {
asm
volatile
(
"int $0x80"
);
}
void
_idisable
(
)
{
cli
()
;
}
void
_ienable
()
{
sti
();
}
int
_istatus
()
{
return
(
get_efl
()
&
FL_IF
)
!=
0
;
int
_istatus
(
int
enable
)
{
int
ret
=
(
get_efl
()
&
FL_IF
)
!=
0
;
if
(
enable
)
{
sti
();
}
else
{
cli
();
}
return
ret
;
}
tests/asyetest/main.c
浏览文件 @
1d3338c0
...
...
@@ -29,9 +29,8 @@ _RegSet* handler(_Event ev, _RegSet *regs) {
int
main
(){
_ioe_init
();
_asye_init
();
_listen
(
handler
);
_ienable
();
_asye_init
(
handler
);
assert
(
!
_istatus
(
1
));
_make
(
_heap
,
main
,
0
);
while
(
1
)
_trap
();
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录