flat assembler
Message board for the users of flat assembler.

Index > OS Construction > scheduler question

Author
Thread Post new topic Reply to topic
christiandy



Joined: 03 Mar 2011
Posts: 25
Location: 101
christiandy
hi there,
I'm learning a scheduler with round robin algorithm module with two task and 55 ms quantum using system interrupt.
I have a problem when the task B running, it won't back to task A
here's the code
Code:
sched:   push ebx
    push ecx

                mov [tss_esp0],esp
; LOAD USER REGS
              lea esp,[ebx]
               popa
                pop ds
              pop es
              pop fs
              pop gs
              iret
    


here's the isr for interrupt 20 (sys timer)
Code:
push gs
          push fs
             push es
             push ds
             pusha
               lea esi,[sch_msg]
           call wrstr
; reset 8259 interrupt controller
     push  eax
   mov   al,0x20
       out   0xa0,al
       out   0x20,al                                   ; quiet screaming irq chip.
 pop   eax
; SAVE USER REGS
               mov ax,ss
           mov ds,ax
           mov es,ax
           mov fs,ax
           mov gs,ax
           lea esi,[esp]
               mov edi,[esp + 72]      ; saved kernel EBX -> user regs
          mov ecx,17              ; 17 dwords worth (68 bytes)
                rep movsd
           add esp,68
; LOAD KERNEL REGS
    pop ecx
     pop ebx
; reschedule
     cmp ebx,regsA
       je next
     lea ebx,[regsA]
     jmp again
next:  lea ebx,[regsB]
again:   jmp sched
; print ending msg
     lea esi,[end_msg]
   call wrstr

      jmp $

 

taskA:        lea esi,[hi_msgA]
   int 0x30                ; wrstr syscall
     a:
      mov ecx,0x7fffff
    ai:
     loop ai
     jmp a 

taskB:        lea esi,[hi_msgB]
   int 0x30                ; wrstr syscall
     b:
      mov ecx,0x7fffff
    bi:
     loop bi
     jmp b
       
tss and regs
tss:    dw 0, 0                 ; back link
tss_esp0:
        dd 0                    ; ESP0
      dw SYS_DATA_SEL, 0      ; SS0, reserved
     dd 0                    ; ESP1
      dw 0, 0                 ; SS1, reserved
     dd 0                    ; ESP2
      dw 0, 0                 ; SS2, reserved
     dd 0                    ; CR3
       dd 0, 0                 ; EIP, EFLAGS (EFLAGS=0x200 for ints)
       dd 0, 0, 0, 0           ; EAX, ECX, EDX, EBX
        dd 0, 0, 0, 0           ; ESP, EBP, ESI, EDI
        dw 0, 0                 ; ES, reserved
      dw 0, 0                 ; CS, reserved
      dw 0, 0                 ; SS, reserved
      dw 0, 0                 ; DS, reserved
      dw 0, 0                 ; FS, reserved
      dw 0, 0                 ; GS, reserved
      dw 0, 0                 ; LDT, reserved
     dw 0, 0                 ; debug, IO perm. bitmap

        times 63 dd 0
stackA:    dd 0
; regs popped by popa (ESP is popped and discarded)
regsA:       dd 0, 0, 0, 0, 0, 0, 0, 0       ; EDI, ESI, EBP, EBX, EDX, ECX, EDX
; regs popped by pop ds, etc.
regsA1:     dw USER_DATA_SEL, 0             ; DS
        dw USER_DATA_SEL, 0             ; ES
        dw USER_DATA_SEL, 0             ; FS
        dw USER_DATA_SEL, 0             ; GS
; regs popped by iret
regsA2:    dd taskA                        ; EIP
       dw USER_CODE_SEL, 0             ; CS
        dd 0x200                        ; EFLAGS (0x200 enables ints)
       dd stackA                       ; ESP
       dw USER_DATA_SEL, 0             ; SS
regsA3:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      taskB data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        times 63 dd 0
stackB:    dd 0
regsB:      dd 0, 0, 0, 0, 0, 0, 0, 0
regsB1:        dw USER_DATA_SEL, 0
 dw USER_DATA_SEL, 0
 dw USER_DATA_SEL, 0
 dw USER_DATA_SEL, 0
regsB2:      dd taskB
    dw USER_CODE_SEL, 0
 dd 0x200
    dd stackB
   dw USER_DATA_SEL, 0
regsB3:

    


actually this is Christopher Giese <geezer[AT]execpc.com> protected mode module and i just modify it and it won't work
the output in this program is [hi_msgA] sched_msg hi_msgB sch_msg sch_msg and so on
Post 04 Jul 2011, 08:43
View user's profile Send private message AIM Address Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2020, Tomasz Grysztar. Also on GitHub, YouTube, Twitter.

Website powered by rwasa.