Using smaller divisor now, for faster multitasking

This commit is contained in:
notsomeidiot123 2025-09-21 09:11:07 -04:00
parent a1abe56104
commit 09fa845774
4 changed files with 27 additions and 7 deletions

View File

@ -119,6 +119,26 @@ void kernel_panic(char *message, cpu_registers_t *regs){
void install_irq_handler(void (*handler)(), uint8_t irqno){
interrupt_handlers[irqno] = handler;
}
void pit_reload(uint8_t mode, uint16_t reload){
const uint16_t PIT_CMD = 0x43;
const uint16_t PIT_DATA = 0x40;
outb(PIT_CMD, 0b00110000 + mode); //channel 0, low/high byte, rate generator mode
outb(PIT_DATA, reload >> 8);
outb(PIT_DATA, reload & 0xff);
return;
}
void pit_init(uint32_t freq){
uint32_t reload_value = 0x10000;
if(freq <= 18){
pit_reload(0b100, reload_value);
}
if(freq >= 1193181){
pit_reload(0b100, reload_value >> 16);
}
reload_value = ((3579545 * 256)/(3 * 256))/(freq);
pit_reload(0b100, reload_value);
}
void idt_load(){
// for(uint32_t i = 0; i < 32; i++){
@ -169,6 +189,8 @@ void idt_load(){
for(int i = 0; i < 16; i++){
interrupt_handlers[i] = 0;
}
pit_init(1193181);
// asm volatile("lidt (%0)" : : "m"(&idt_desc));
// outb(0x20, 0x11 );
// outb(0xa0, 0x11);

View File

@ -36,8 +36,6 @@ extern void kmain(kernel_info_t *kernel_info){
fcreate("/dev", VFILE_DIRECTORY, kmalloc(1), 1);
fcreate("/tmp", VFILE_DIRECTORY, kmalloc(1), 1);
vfile_t *file = fopen("/dev");
printf("%x", file);
mlog("KERNEL", "Initializing Scheduler & starting PID 1\n", MLOG_PRINT);
boot_info = kernel_info;
scheduler_init();

View File

@ -30,7 +30,7 @@ void scheduler_init(){
install_irq_handler(schedule, 0);
// printf("Installing scheduler");
}
uint32_t timer = 0;
cpu_registers_t *schedule(cpu_registers_t *regs){
// if(queue_length == 0){
// return regs;

View File

@ -174,9 +174,9 @@ vfile_t *fopen(char *name){
if(name[strlen(name) - 1] == '/'){
name[strlen(name) - 1] = 0;
}
printf("%s\n", name);
// printf("%s\n", name);
char *dir = strtok(name, '/');
printf("%s", name);
// printf("%s", name);
char *tmp = dir;
uint32_t filename_offset = 0;
vfile_t *current_dir = &root_dir;
@ -185,12 +185,12 @@ vfile_t *fopen(char *name){
dir = tmp;
tmpfile = search_dir(tmp, *current_dir);
if(!tmpfile){
printf("not found\n");
// printf("not found\n");
return 0;
}
switch(tmpfile->type){
case VFILE_DIRECTORY:
printf("found directory in %s: %s\n", current_dir->name, tmpfile->name);
// printf("found directory in %s: %s\n", current_dir->name, tmpfile->name);
current_dir = tmpfile;
break;
case VFILE_MOUNT: