Using smaller divisor now, for faster multitasking
This commit is contained in:
parent
a1abe56104
commit
09fa845774
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue