zoukankan
html css js c++ java
中断发生时寄存器的保存和恢复
http://blog.csdn.net/zhuichao001/article/details/5686058
进程在运行之前TSS.ESP0指向了当前进程表的
REGS
末尾
执行中断之前,CPU已经把ESP指向进程表的REGS末尾,并且保存了SS,ESP,CS ,IP ,IF寄存器
,自动操作的
么?没看到人工代码
ALIGN 16
hwint00: ; Interrupt routine for irq 0 (the clock).
sub esp, 4
pushad ; ┓
push ds ; ┃
push es ; ┣ 保存原寄存器值
push fs ; ┃
push gs ; ┛
mov dx, ss
mov ds, dx
mov es, dx
mov esp, StackTop ; 切到内核栈
inc byte [gs:0] ; 改变屏幕第 0 行, 第 0 列的字符
mov al, EOI ; ┓reenable master 8259
out INT_M_CTL, al ; ┛
push clock_int_msg
call disp_str
add esp, 4
mov esp, [p_proc_ready] ; 离开内核栈;
lea eax, [esp + P_STACKTOP]
mov dword [tss + TSS3_S_SP0], eax
;进程在运行之前 TSS.ESP0指向了当前进程表的
REGS
末尾
pop gs ; ┓
pop fs ; ┃
pop es ; ┣ 恢复原寄存器值
pop ds ; ┃
popad ; ┛
add esp, 4
iretd
完成进程切换:
ALIGN 16
hwint00: ; Interrupt routine for irq 0 (the clock).
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] ; 改变屏幕第 0 行, 第 0 列的字符
mov al, EOI ; ┓reenable master 8259
out INT_M_CTL, al ; ┛
inc dword [k_reenter]
cmp dword [k_reenter], 0
jne .re_enter
mov esp, StackTop ; 切到内核栈
sti
push 0
call clock_handler
;中断里面修改p_proc_ready,会导致TSS里面的ESP值改变,
; 中断返回时,根据TSS里面的ESP值恢复寄存器的值,就会导 致 进 程切换
add esp, 4
cli
mov esp, [p_proc_ready] ; 离开内核栈;
lldt [esp + P_LDT_SEL]
lea eax, [esp + P_STACKTOP]
mov dword [tss + TSS3_S_SP0], eax
.re_enter: ; 如果(k_reenter != 0),会跳转到这里
dec dword [k_reenter] ; k_reenter--;
pop gs ; ┓
pop fs ; ┃
pop es ; ┣ 恢复原寄存器值
pop ds ; ┃
popad ; ┛
add esp, 4
iretd
查看全文
相关阅读:
项目开发中需要注意的
数据库函数
C#中 ?. 运算符
字符串格式化String.Format
day37 进程理论 多进程
36 网络编程---操作系统 并发
day35 socket的常用方法,
day34
day33天 网络编程udp pycharm控制台输出带颜色
day32 网络编程初识
原文地址:https://www.cnblogs.com/wanghj-dz/p/3986583.html
最新文章
poj 1182 食物链(高级的带权并查集)
hdu 6058 Kanade's sum(模拟链表)
hdu 6059 Kanade's trio(字典树)
hdu 6069 Counting Divisors(求因子的个数)
hdu 6097 Mindis(数学几何,圆心的反演点)
康托展开(有关全排列)
向量的差乘和点乘
程序设计协会算法模板
压位的高精度大数模板
HDU4542 小明系列故事——未知剩余系
热门文章
The Evaluation of Determinant(求行列式mod一个数的值)
HDU1565 方格取数1(构图+网络流最大独立集合)
HDU1530(最大团)
HDU1914(稳定婚姻)
常用正则表达式
Sublime Text3搭建PHP开发环境
VirtualBox虚拟机-安装增强功能
MaRVIN
待做
推动式&拉动式生产
Copyright © 2011-2022 走看看