diff --git a/kernel/driver/timers/HPET/HPET.c b/kernel/driver/timers/HPET/HPET.c index 60923c04..d898a65b 100644 --- a/kernel/driver/timers/HPET/HPET.c +++ b/kernel/driver/timers/HPET/HPET.c @@ -70,15 +70,12 @@ void HPET_handler(uint64_t number, uint64_t param, struct pt_regs *regs) // if (current_pcb->pid == 2) // kwarn("timer_jiffies = %ld video_refresh_expire_jiffies=%ld", timer_jiffies, video_refresh_expire_jiffies); - if (timer_jiffies >= video_refresh_expire_jiffies) + // 当时间到了,或进程发生切换时,刷新帧缓冲区 + if (timer_jiffies >= video_refresh_expire_jiffies || (video_last_refresh_pid != current_pcb->pid)) { raise_softirq(VIDEO_REFRESH_SIRQ); } - else - { - if (video_last_refresh_pid != current_pcb->pid) - raise_softirq(VIDEO_REFRESH_SIRQ); - } + sched_update_jiffies(); @@ -154,7 +151,7 @@ int HPET_init() HPET_NUM_TIM_CAP = (tmp >> 8) & 0x1f; // 读取计时器数量 // kinfo("HPET CLK_PERIOD=%#03lx Frequency=%f", HPET_COUNTER_CLK_PERIOD, (double)HPET_freq); - kdebug("HPET_freq=%ld", (long)HPET_freq); + // kdebug("HPET_freq=%ld", (long)HPET_freq); // kdebug("HPET_freq=%lf", HPET_freq); struct apic_IO_APIC_RTE_entry entry; diff --git a/kernel/driver/video/video.c b/kernel/driver/video/video.c index 13720a01..17295846 100644 --- a/kernel/driver/video/video.c +++ b/kernel/driver/video/video.c @@ -104,11 +104,9 @@ int video_init(bool level) // timer_func_init(tmp, &video_refresh_framebuffer, NULL, 10*REFRESH_INTERVAL); // timer_func_add(tmp); register_softirq(VIDEO_REFRESH_SIRQ, &video_refresh_framebuffer, NULL); - kdebug("15/5=%#ld", 15 / 5); - kdebug("1212121=%#ld", REFRESH_INTERVAL / 5); - kdebug("sdds21=%#ld", REFRESH_INTERVAL / 5 + (REFRESH_INTERVAL % HPET0_INTERVAL ? 1 : 0)); + video_refresh_expire_jiffies = cal_next_n_ms_jiffies(10 * REFRESH_INTERVAL); - kdebug("video_refresh_expire_jiffies=%ld", video_refresh_expire_jiffies); + raise_softirq(VIDEO_REFRESH_SIRQ); } } \ No newline at end of file diff --git a/kernel/process/process.c b/kernel/process/process.c index 1a98e1df..2942a430 100644 --- a/kernel/process/process.c +++ b/kernel/process/process.c @@ -622,7 +622,7 @@ unsigned long do_fork(struct pt_regs *regs, unsigned long clone_flags, unsigned spin_unlock(&process_global_pid_write_lock); tsk->cpu_id = proc_current_cpu_id; - tsk->state = PROC_RUNNING; + tsk->state = PROC_UNINTERRUPTIBLE; tsk->parent_pcb = current_pcb; wait_queue_init(&tsk->wait_child_proc_exit, NULL);