· 2007网络安全热点话题征集
· 技术社区精美礼品实物竞拍
· 专家坐镇赛迪网病毒求助专区
 赛迪网 > IT技术 Linux 技术开发
  IT资讯搜索
 
IT产品搜索

编写实模式多任务操作系统模型之二 (1)

发布时间:2002.12.31 11:22     来源:开放系统世界——赛迪网    作者:高克强 王兴泰

在《编写实模式多任务操作系统模型之一》中,我们了解了X86模式的功能特点,运行机制并对程序模块进行了分析。本文中,我们将继续分析程序模块的进程调度子程序和其他辅助程序,并完成这个程序的编译及安装运行。

进程调度子程序scheduler

scheduler是系统的进程调度程序,是实现多任务关键的部分。它实质上是嵌入到系统时钟中断内来完成进程调度功能的。由于系统时钟以18.2次/秒的频率发生中断,这样每当时钟中断一发生,便可带动进程调度程序执行,所以这个OS模型是以时钟中断来驱动的。为了不影响原来时钟中断程序的例行工作,它开始运行时首先要调用位于ROMBIOS中的 0xF000:0xFEA5 处的时钟中断服务程序。返回后,它从current_task单元中找到当前被中断进程的进程号,根据该进程号在SPtable中找到其进程栈指针的存放地址,将其栈指针存入到该地址中,为下一次运行做好准备。而后将 current_task 加1,得到下一个将被调度运行的进程号。由该进程号在 SPtable 中找到上一次该进程被中断时的进程栈指针,将CPU的SP寄存器设为该值,这样堆栈指针便指向进程栈的栈顶。由于每次进程被中断运行时在进程栈顶都保存有断点处的CPU内部通用寄存器及ES和DS的值,此时将这些值恢复到相应的寄存器中,最后通过一条IRET指令便可将CPU的控制权转移到这一进程上,这个进程便重新从断点处重新运行。整个系统便在调度程序的控制下循环往复地运行,依次将CPU分时地切换到各个进程上。由于切换的速度较快,所以宏观上我们便看到几个进程在同时向前并行推进,互不影响。在微观上,几个进程轮流占用CPU,分时运行。

Scheduler初次被激活是Kernel全部初始化工作完成后。Kernel初始化工作完成后,各个进程堆栈空间布局均如图7所示的形式,其中“Task1偏移地址”单元中为相应进程入口地址的偏移地址。在Kernel程序中:

jmp $        ; kernel在此等待时钟中断的到来

该指令相当一条无穷循环指令 while(1);,当时钟中断到来时,它将从无穷循环中转到scheduler去执行,而后每一次时钟中断都引起scheduler的运行,这时的各个进程堆栈空间布局仍有如图7所示的形式,只不过此时堆栈的底端由于进程的运行已经有进程所压入的数据,留下了进程运行过的痕迹,如图8所示。调度程序运行流程如图9所示。

具体工作步骤如下(假设调度程序运行前,CPU正处于task1的进程空间,SP指向task1的进程堆栈的栈顶,此时发生时钟中断,scheduler投入运行):

1.调度程序将task1进程断点处的CPU内部通用寄存器及ES和DS的值压入到task1进程堆栈中,代码如下:

pusha
 push es
 push ds

2.向中断控制器8259发送EOI中断结束指令:

mov al, 0x20
out 0x20, al

3.将标志寄存器Flag压入堆栈,调用位于ROMBIOS中的 0xF000:0xFEA5 处的原时钟中断服务程序,使原时钟中断服务程序完成其原有的工作,代码如下:

pushf
call 0xF000:0xFEA5

由于原时钟中断为硬件中断,所以中断服务程序返回指令为iret。iret指令依次将栈顶字单元的内容弹出到IP、CS及Flag中,这样为了保证上述call指令的正确返回及堆栈不被破坏,所以要在call指令的前面加入pushf指令,以和iret的动作相配合。

4.保存将被剥夺执行权的task1进程堆栈指针。由于进程堆栈中保存有进程被中断时的断点信息,而其它进程运行时也要使用CPU内部的SP寄存器,所以在进行任务切换前要做进程的堆栈指针的保存工作。如下指令所示:

mov ax, [current_task]
mov bx, ax
shl bx, 1	
lea si, [SPtable]
mov [ds:si + bx], SP

在current_task内存中存放当前运行进程的进程号,以为索引可以在 SPTABLE 数组中找到该进程堆栈指针的存放地址,即进程堆栈指针的存放地址=SPtable+2*进程号,找到该地址将进程断点处的SP存入其中。

1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 编写实模式多任务操作系统模型之一 (12-31) · 推进Linux发展 服务信息化 (12-31)
· Linux时代来临,您的企业准备好了吗? (12-26) · Linux、开放源码软件与公共政策 (12-26)
· Linux重点行业应用市场份额统计 (12-23) · 如何提高linux命令行的工作效率 (12-20)
· 中国Linux市场应用分布结构图 (12-17) · 用语言控制Linux:Linux的语音识别软件 (12-13)
· 在Linux系统中搭建JSP开发环境 (12-12) · 优化Linux系统硬盘 (12-12)
  客户需求反馈表
* 姓  名:
更多资料 了解方案 认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管