housansan 2015-02-09 13:27
浏览 842
已结题

关于自己动手写操作系统中嵌套中断的处理

Oragner's 操作系统中时钟中断, 为了防止嵌入中断这里添加了 k__reenter 这个变量初始化为 -1,

  1. 在发生第一次中断时 inc [k_reenter] 将, k_reenter 变为0, 将进入输出 ^
  2. 进入 delay 中由于延时将再次导致中断,这时 k_reenter 变为1,退出中断处理 k_reenter 变为0
  3. 当再次进入中断时, 每次 k_reenter 都变为 1 了,按道理应该直接就退出中断处理了,但为什么还是会输出 ^ 呢???
  4. 我觉得应该把 dec [k_reenter] 改为 mov [k_reenter], -1 应该合理啊??

    sub esp, 4
    pushad
    push ds
    push es
    push fs
    push gs
    
    mov dx, ss
    mov ds, dx
    mov es, dx
    
    inc byte [gs:0]
    mov al, EOI
    out INT_M_CTL, al
    
    inc dword [k_reenter]
    cmp dword [k_reenter], 0
    jne .re_enter
    
    mov esp, [kernel_top]
    
    sti
    
    push '^'
    call put_char
    add esp, 4
    
    push 1
    call delay
    add esp, 4
    
    cli
    
    ; 
    mov esp, [current]
    
    lea eax, [esp + P_STACKTOP]
    mov dword [tss + TSS3_S_SP0], eax
    
    .re_enter:
    dec dword [k_reenter]
    pop gs
    pop fs
    pop es
    pop ds
    popad
    add esp, 4
    
    iretd
    
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 BP神经网络控制倒立摆
    • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
    • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
    • ¥30 Unity接入微信SDK 无法开启摄像头
    • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
    • ¥20 cad图纸,chx-3六轴码垛机器人
    • ¥15 移动摄像头专网需要解vlan
    • ¥20 access多表提取相同字段数据并合并
    • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
    • ¥20 Java-Oj-桌布的计算