自己写内核——多任务调度

本文通过分析和简单的代码展示了操作系统内核如何实现任务调度功能,让计算机看似同时处理多个任务。首先从任务调度的工作原理出发,解释了计算机通过快速任务切换制造多任务并行的错觉。然后详细介绍了程序实现过程,包括设置系统定时器、初始化任务控制块和链表、任务处理函数以及调度程序的代码。最后,通过运行结果和理论分析加深了对内核调度的理解。
摘要由CSDN通过智能技术生成

          慕课18原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”

         很多人对于写程序都不陌生,但是大部分都是写一个应用程序或是驱动程序,这些程序都有意个特点,那就是以为自己“独占“了整个计算机或是单片机,但是实际上一个处理器可能“同时“运行着多个程序,那么计算机是如何同时处理多个任务却能让每个任务都以为计算机是在单独为其服务的呢?这就要说到操作系统内核的任务调度功能了!

        接下来我们就通过一些简单的代码来看看,内核是怎样实现这一功能的!

一、问题分析

1、首先我们从整体上来了解一下其工作的原理。

         计算机之所以看上去能够同时处理多个任务,是因为计算机快速的在多个任务处理中切换,也就是说假如有3个任务,计算机先运行任务1,运行了时间安长度T后去运行任务2,运行了时间T后去运行任务3,接着T时间长度后又运行任务一(不考虑任务的优先级问题),这样在3T的时间长度内,每个任务都运行了一次,当时间长度T足够小,比如说几毫秒、几微秒,小到不能察觉,就像频率足够大是的脉冲图像一样。这就有了3个任务同时运行的错觉。

                                             

                                 

2、了解了工作原理后,我们就有了几个需要解决的问题:

       (1)、设定一个固定的时间长度,经过这个固定的时间计算机转向下一个任务。

       (2)、完成任务的交接,保存当前任务的状态,以备下一次接着运行,并将接下来要运行的任务状态恢复到计算机中继续运行。

       下面就一一解决这些问题!

二、程序实现

1、PCB.h

                                                                            

  在PCB.h 文件中之定义了两个结构体,Thread和PCB,在Thread中定义了两个变量,分别用于在任务切换时保存任务的堆栈指针寄存器的值和指令指针寄存器的值,在PCB结构体中则定义了其他一些任务运行状态的变量,如进程的ID号、进程的堆栈空间、指向下一个任务的进程控制块的指针等。


2、设置一个系统定时器

    linux中定时器的方案很多种,可以参看

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值