
昨日我们已完成了多窗口显示的功能,每个窗口都能承载各自的任务。这样的系统类似于我们目前所使用的操作系统,但仍有其独特之处。那么,如何实现多任务的并行计算呢?这便是我们今天要探讨的核心。
多任务的实现,背后依托的是定时器这一关键技术。任务虽多,但真正去计算任务的处理器却有限。单核处理器只有一个计算器,而四个核心的处理器也只有四个计算器。我们的任务可能有成百上千个。我们需要一种方式来划分每个计算核心的计算时间。
每个任务在指定的时间片内执行,当属于当前任务的时间片结束,该任务便告一段落。下一个任务开始,并获得一个新的时间片开始执行。这个时间片的划分,正是由定时器来完成的。
CPU如果自己去计算时间,可能会被其他指令干扰,因为时间是一刻不停地走着。更好的方式是利用专门的硬件设备——定时器,来计时。这个硬件设备就像鼠标、键盘一样,配合着CPU的工作。
以鼠标为例,当鼠标有动作时,它会给CPU发送中断。同样地,定时器所设定的时间到了,也会给CPU发送中断。要使用定时器,实际上就是要写C的中断函数、汇编的中断函数,并在中断描述符表(IDT)中写入汇编中断函数的首地址。
今天的内容安排如下:
深入探讨定时器Timer的工作原理
利用定时器制作超时器的方法
实现对多个超时器的有效管理
探讨加速计算的核心技术
关于定时器的设定值和时间计算,我们可以将其视为一个简单的数学问题。例如,如果要设定每10毫秒产生一次中断,那么我们需要计算出设定值应等于多少才能达到这个效果。
这个设定值其实代表了定时器的“指令周期”。而定期器的频率是固定的,所以我们通过频率与设定数相乘的方式,来计算在多少时间后应该产生一次中断。
针对“能否突破定时器的下限”的问题,这里需要明确的是,定时器的下限确实是其基本工作原理决定的物理限制,突破这一点相当困难。然而通过高效的多任务管理和算法优化等手段,我们可以有效提升系统对时间的处理精度和响应速度。
当我们在操作系统中设置好定时器和超时器后,我们需要在中断函数中完成相应的操作,并将状态存入FIFO数据结构中。这样在主循环中就可以从FIFO中读取状态并进行相应的显示或处理。
对于多线程或多个超时器的管理,我们采用排序和筛选的方法来优化遍历过程。只遍历那些处于活动状态的超时器,大大减少了不必要的计算和操作。
通过今天的讨论和优化,我们更深入地理解了定时器在操作系统中的重要作用。明天的day13我们将继续探讨如何进一步优化定时器的使用和实现多线程并行处理的可能性。
在day14中,我们将提升屏幕分辨率以改善多任务操作时的用户体验。而在day15,我们将正式实现多任务的并行处理功能。
这样看来,我们的操作系统正在一步步向着更为先进、实用的方向迈进。
