大家一起写操作系统(4)-简单的任务切换

下面这段程序定义了两个任务,每个任务都有自己的TSS,LDT。任务0打印字符‘a’,任务1打印字符'b'.任务切换通过时钟中断处理过程完成。时钟到达时,判断当前任务号,切换到另一个任务,并用jmp tss:0的方式实现任务切换。任务中通过0x80系统调用打印字符。任务切换时,cpu会自动把当前任务的上下文(主要是各种寄存器,ldt)等保存当当前任务的TSS段中,并加载目标任务的TSS段相关信息,切换到新任务。


LATCH equ 11930 ;时钟中断
VIDEO_DS equ 0x18 ;显存段
TSS0_CS equ 0x20  ;任务0 TSS段
TSS0_LDT equ 0x28 ;任务0 LDT段
TSS1_CS equ 0x30  ;任务1 TSS段
TSS1_LDT equ 0x38 ;任务1 LDT段

[SECTION text]
[BITS 32]
startup_32:
    mov eax,0x10
    mov ds,ax
    lss esp,[init_stack] ;mem low->reg,mem high->ss
    call setup_idt ;设置默认IDT
    call setup_gdt ;设置GDT
    mov  eax,0x

你可能感兴趣的:(Linux/Unix)