diff options
-rw-r--r-- | kernel/drivers/pit.c | 14 | ||||
-rw-r--r-- | kernel/init/kernel.c | 2 | ||||
-rwxr-xr-x | meta/run.sh | 3 |
3 files changed, 13 insertions, 6 deletions
diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c index 1e9048f..060fc54 100644 --- a/kernel/drivers/pit.c +++ b/kernel/drivers/pit.c @@ -4,7 +4,8 @@ #define PIT_IO_MODE_COMMAND 0x43 u64 clock_num_ms_ticks = 0; -u64 pit_counter = 0; +u32 pit_counter = 0; +u32 switch_counter = 0; u16 hertz; u64 pit_num_ms(void) { @@ -22,7 +23,8 @@ u16 read_pit_count(void) { return count; } -void set_pit_count(u16 hertz) { +void set_pit_count(u16 _hertz) { + hertz = _hertz; u16 divisor = 1193180 / hertz; /* @@ -44,9 +46,13 @@ void set_pit_count(u16 hertz) { void int_clock(reg_t regs) { outb(0x20, 0x20); pit_counter++; - if (pit_counter*1000 >= hertz) { + if (pit_counter * 1000 >= hertz) { pit_counter = 0; - clock_num_ms_ticks++; + clock_num_ms_ticks += 1000 / hertz; + } + switch_counter++; + if (switch_counter * 500 >= hertz) { + switch_counter = 0; switch_task(); } } diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c index 6b160a6..55c65b2 100644 --- a/kernel/init/kernel.c +++ b/kernel/init/kernel.c @@ -67,7 +67,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, klog("Syscalls Initalized", LOG_SUCCESS); pit_install(); - set_pit_count(500); + set_pit_count(100); klog("PIT driver installed", LOG_SUCCESS); ata_init(); diff --git a/meta/run.sh b/meta/run.sh index 6cf1787..9231f14 100755 --- a/meta/run.sh +++ b/meta/run.sh @@ -2,7 +2,8 @@ scriptdir="$(dirname "$0")" cd "$scriptdir" cd .. -qemu-system-i386 -netdev user,id=n0,hostfwd=tcp:127.0.0.1:6001-:6000 -device rtl8139,netdev=n0 -object filter-dump,id=id,netdev=n0,file=./logs/netout -d int -no-reboot -no-shutdown -chardev stdio,id=char0,logfile=./logs/serial.log,signal=off -serial chardev:char0 -drive id=disk,file=./meta/ext2.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -m 512M -cdrom ./kernel/myos.iso -s +#qemu-system-i386 -netdev user,id=n0,hostfwd=tcp:127.0.0.1:6001-:6000 -device rtl8139,netdev=n0 -object filter-dump,id=id,netdev=n0,file=./logs/netout -d int -no-reboot -no-shutdown -chardev stdio,id=char0,logfile=./logs/serial.log,signal=off -serial chardev:char0 -drive id=disk,file=./meta/ext2.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -m 512M -cdrom ./kernel/myos.iso -s +qemu-system-i386 -netdev user,id=n0,hostfwd=tcp:127.0.0.1:6001-:6000 -device rtl8139,netdev=n0 -object filter-dump,id=id,netdev=n0,file=./logs/netout -no-reboot -no-shutdown -chardev stdio,id=char0,logfile=./logs/serial.log,signal=off -serial chardev:char0 -drive id=disk,file=./meta/ext2.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -m 512M -cdrom ./kernel/myos.iso -s # Sync the sysroot cd ./meta/ mkdir ./mount |