提交 1d3338c0 编写于 作者: Y Yanyan Jiang

make asye more concise

上级 2a3a5f30
......@@ -51,7 +51,7 @@
* `_EVENT_TRAP`:系统调用自陷(无cause),系统调用参数将`_RegSet`转换为`intptr_t*`后按次序排列。第一个参数为返回值。
* `_RegSet *_make(_Area kstack, void *entry, void *arg);`创建一个内核上下文,参数arg。
* `void _trap();`在内核态自陷。线程需要睡眠/让出CPU时使用。
* `int _interrupt(int enable);`设置中断状态(enable非0时打开)。返回设置前的中断状态。
* `int _istatus(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()`调用后有效。
......@@ -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)
......
......@@ -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;
}
......@@ -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.
先完成此消息的编辑!
想要评论请 注册