Compare commits

..

3 Commits

Author SHA1 Message Date
d1364f5c1f clean: use toris(); instead of asm(sti) 2025-11-06 14:39:45 +01:00
4bc9dfa589 fix: block kernel excution 2025-11-06 14:39:11 +01:00
d12371d4a2 fix: add: threads to process 2025-11-06 14:38:49 +01:00
4 changed files with 23 additions and 9 deletions

View File

@ -4,6 +4,8 @@
#include "apic.h"
#include "gdt.h"
#include "idt.h"
#include "interrupts.h"
#include "sys/io.h"
#include "kprintf.h"
#define PIC1 0x20 /* IO base address for master PIC */
@ -44,5 +46,5 @@ void init_idt(void)
for (uint8_t j = 0; j < 16; j++)
idt_set_descriptor(i + j, irq_stub_table[j], 0x8E);
load_idt(&idtr);
__asm__ volatile("sti");
// toris();
}

View File

@ -48,4 +48,5 @@ void kernel_main(multiboot_info_t *mbd, uint32_t magic)
create_process(1);
create_thread(current_pcb, shell_init);
toris();
while (true);
}

View File

@ -46,13 +46,19 @@ struct pcb *create_process(uint8_t uid)
return NULL;
}
memcpy(new_pcb->heap, current_pcb->heap, 4096);
new_pcb->next = current_pcb->next;
new_pcb->prev = current_pcb;
current_pcb->next = new_pcb;
if (current_pcb->prev == current_pcb)
current_pcb->prev = new_pcb;
if (current_pcb) {
new_pcb->next = current_pcb->next;
new_pcb->prev = current_pcb;
current_pcb->next = new_pcb;
if (current_pcb->prev == current_pcb)
current_pcb->prev = new_pcb;
}
else {
current_pcb = new_pcb;
}
new_pcb->signals.pending = SIG_IGN;
new_pcb->thread_list = NULL;
return new_pcb;
}

View File

@ -28,9 +28,14 @@ struct tcb *create_thread(struct pcb *process, void (*routine)(void))
new_tcb->state = NEW;
struct tcb *it = process->thread_list;
while (it)
it = it->next;
it = new_tcb;
if (it) {
while (it)
it = it->next;
it = new_tcb;
}
else {
process->thread_list = new_tcb;
}
return new_tcb;
}