Call monitor thread from os thread.
This commit is contained in:
parent
90d1aaaccc
commit
7f355dfed2
23
umka.asm
23
umka.asm
@ -22,6 +22,7 @@ public sha3_256_oneshot as 'hash_oneshot'
|
|||||||
public kos_time_to_epoch
|
public kos_time_to_epoch
|
||||||
public kos_init
|
public kos_init
|
||||||
|
|
||||||
|
public monitor_thread
|
||||||
public CURRENT_TASK as 'kos_current_task'
|
public CURRENT_TASK as 'kos_current_task'
|
||||||
public current_slot as 'kos_current_slot'
|
public current_slot as 'kos_current_slot'
|
||||||
public TASK_COUNT as 'kos_task_count'
|
public TASK_COUNT as 'kos_task_count'
|
||||||
@ -360,6 +361,8 @@ proc umka_os uses ebx esi edi
|
|||||||
|
|
||||||
mov dword[TASK_COUNT], 6
|
mov dword[TASK_COUNT], 6
|
||||||
|
|
||||||
|
stdcall umka_install_thread, [monitor_thread]
|
||||||
|
|
||||||
ccall raise, SIGPROF
|
ccall raise, SIGPROF
|
||||||
|
|
||||||
jmp osloop
|
jmp osloop
|
||||||
@ -425,6 +428,25 @@ change_task:
|
|||||||
mov [REDRAW_BACKGROUND], 0
|
mov [REDRAW_BACKGROUND], 0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
public umka_install_thread
|
||||||
|
proc umka_install_thread _func
|
||||||
|
stdcall kernel_alloc, RING0_STACK_SIZE
|
||||||
|
mov ebx, eax
|
||||||
|
; mov edx, SLOT_BASE+256*6
|
||||||
|
mov edx, [TASK_COUNT]
|
||||||
|
shl edx, 8
|
||||||
|
add edx, SLOT_BASE
|
||||||
|
call setup_os_slot
|
||||||
|
mov dword [edx], 'USER'
|
||||||
|
sub [edx+APPDATA.saved_esp], 4
|
||||||
|
mov eax, [edx+APPDATA.saved_esp]
|
||||||
|
mov ecx, [_func]
|
||||||
|
mov dword[eax], ecx
|
||||||
|
xor ecx, ecx
|
||||||
|
call sched_add_thread
|
||||||
|
inc dword[TASK_COUNT]
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
sysfn_saveramdisk:
|
sysfn_saveramdisk:
|
||||||
sysfn_meminfo:
|
sysfn_meminfo:
|
||||||
@ -551,6 +573,7 @@ task_base_addr dd TASK_BASE
|
|||||||
task_data_addr dd TASK_DATA
|
task_data_addr dd TASK_DATA
|
||||||
slot_base_addr dd SLOT_BASE
|
slot_base_addr dd SLOT_BASE
|
||||||
|
|
||||||
|
monitor_thread dd ?
|
||||||
|
|
||||||
win_stack_addr dd WIN_STACK
|
win_stack_addr dd WIN_STACK
|
||||||
win_pos_addr dd WIN_POS
|
win_pos_addr dd WIN_POS
|
||||||
|
6
umka.h
6
umka.h
@ -317,12 +317,12 @@ typedef struct {
|
|||||||
} arp_entry_t;
|
} arp_entry_t;
|
||||||
|
|
||||||
void umka_os(void);
|
void umka_os(void);
|
||||||
//void umka_idle(void);
|
void umka_install_thread(void *func) __attribute__((__stdcall__));
|
||||||
void kos_init(void);
|
void kos_init(void);
|
||||||
void i40(void);
|
void i40(void);
|
||||||
uint32_t kos_time_to_epoch(uint32_t *time);
|
uint32_t kos_time_to_epoch(uint32_t *time);
|
||||||
|
|
||||||
void *disk_add(diskfunc_t *disk, const char *name, void *userdata, uint32_t flags) __attribute__((__stdcall__));
|
void *disk_add(diskfunc_t *disk, const char *name, void *userdata, uint32_t flags) __attribute__((__stdcall__));
|
||||||
void *disk_media_changed(diskfunc_t *disk, int inserted) __attribute__((__stdcall__));
|
void *disk_media_changed(diskfunc_t *disk, int inserted) __attribute__((__stdcall__));
|
||||||
void disk_del(disk_t *disk) __attribute__((__stdcall__));
|
void disk_del(disk_t *disk) __attribute__((__stdcall__));
|
||||||
|
|
||||||
@ -460,7 +460,7 @@ extern size_t kos_task_count;
|
|||||||
extern void *kos_task_base;
|
extern void *kos_task_base;
|
||||||
extern void *kos_task_data;
|
extern void *kos_task_data;
|
||||||
extern appdata_t *kos_slot_base;
|
extern appdata_t *kos_slot_base;
|
||||||
|
extern void (*monitor_thread)(void);
|
||||||
extern uint32_t *kos_lfb_base;
|
extern uint32_t *kos_lfb_base;
|
||||||
extern uint16_t *kos_win_stack;
|
extern uint16_t *kos_win_stack;
|
||||||
extern uint16_t *kos_win_pos;
|
extern uint16_t *kos_win_pos;
|
||||||
|
10
umka_os.c
10
umka_os.c
@ -32,6 +32,14 @@ void scheduler(int signo, siginfo_t *info, void *context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void monitor() {
|
||||||
|
while (1) {
|
||||||
|
for (int i = 0; i < 10000000; i++) {}
|
||||||
|
printf("6 usera\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
|
||||||
@ -44,6 +52,8 @@ int main() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monitor_thread = monitor;
|
||||||
|
|
||||||
umka_os();
|
umka_os();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user