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

自己动手增加一个新进程

如果用户想自己动手增加一个新的进程,如名为task4的进程,须在kernel.asm程序中做如下几处修改:

1.将MAXTASKS的值定义为4。

2.在程序中增加一个入口地址为task4的一段代码,功能上应为一段无限循环的、有动态信息输出的程序,如一个字符在屏幕的某行上反复滚动显示。程序不要用iret指令,否则会破坏调度程序为该进程在其堆栈内设定的调度信息。

3.在task3初始化之后,调用taskinit过程,为增加的新进程初始化,此时应将task4的入口偏移量送入ax, 即mov ax, task4。

4.将修改后的程序编译运行。

编译及安装运行


这两个程序在Linux 下采用nasm进行编译,编译为纯二进制文件,即内存映像程序,编译方法如下:

1.编译boot.asm 为boot.o

     
     # nasm boot.asm -o boot.o -f bin


2.编译kernel.asm 为kernel.o

     
     # nasm kernel.asm -o kernel.o -f bin


3.将boot.o写入软盘引导扇区

     
     # dd if=./boot.o of=/dev/fd0 bs=512 count=1


4.将kernel.o写入软盘0头0道2扇区

     
     # dd if=./kernel.o of=/dev/fd0 bs=512  count=2  seek=1


5.用该软盘引导机器

屏幕上将依次显示如下信息:

     
     System bootup ...
Loading kernel ...


清屏后,在屏幕左侧有3个动态的计数器在不断显示,它们分别由kernel所调度的3个进程产生。若敲击键盘则屏幕上将显示键盘键入的字符。

此程序在以Intel Celeron 433 为CPU的PC机调试成功。在调试时需要在DOS环境下检查一下机器的定时器中断的入口地址是否为0xF000:0xFEA5,若不是,则需要修改kernel.asm中的scheduler内的call 0xF000:0xFEA5这条调用指令,使调用的入口地址为机器的实际定时器中断的入口地址。

这个实验性的操作系统模型功能较为简单,但已经具备了操作系统进程切换的完整功能,具备了多进程并行运行的特点,感兴趣的读者可以在此基础上进一步开发,使其功能进一步完善。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值