操作系统的中断、异常和系统调用 中断 硬件 设置中断标记【CPU初始化】 将内部、外部事件设置中断标记 中断事件的ID 软件 保存当前处理状态 中断服务程序处理 清除中断标记 恢复之前保存的处理状态 异常 异常编号 保存现场 异常处理 杀死产生异常程序 重新执行异常指令 恢复现场 系统调用 应用程序 ...
分类:
其他好文 时间:
2020-06-24 17:46:02
阅读次数:
64
一、fork进程分析 1.1理论分析 什么是fork:fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进 ...
分类:
系统相关 时间:
2020-06-15 20:56:25
阅读次数:
53
在Intel i386 CPU中,提供了TSS与TR用于任务切换,但是Linux出于效率的考虑自己实现了任务切换。但Linux内核还是使用了TSS,用于完成系统堆栈空间的自动切换(从用户空间进入系统空间时的堆栈切换)。 进程调度与切换 三种不同应用的需求:交互式,批处理,实时 调度政策:内核为系统中 ...
分类:
系统相关 时间:
2020-04-30 17:25:02
阅读次数:
79
一. 三种中断 1. 外中断 2. 异常 3. 系统调用 二 . 比较三种中断 三. 外中断 中断使能标志 -> CPU处理中断(CPU初始化时设置)中断向量表 -> 中断源编号中断嵌套 四. 系统调用和库函数调用 系统调用 int 和 iret 存在堆栈切换函数调用 call 和 ret 没有堆栈 ...
分类:
其他好文 时间:
2018-11-18 13:35:34
阅读次数:
194
系统调用 操作系统服务的编程接口 通常由高级语言编写(C或C++) 程序访问通常通过高层次 的API接口(C标准库的库函数)而不是直接进行系统调用 每个系统调用对应一个系统调用编号 系统调用与函数调用的区别 系统调用 1.使用INT和IRET指令,内核和应用程序使用的是不同的堆栈,因此存在堆栈的切换 ...
分类:
其他好文 时间:
2018-09-23 15:11:58
阅读次数:
148
通过调用门进行控制转移
1.关于堆栈切换
2.通过调用门进行控制转移和返回的具体过程...
分类:
编程语言 时间:
2016-05-12 15:29:04
阅读次数:
290
基于JOS 80x86 的堆栈切换简要分析
这个问题一直困扰很久,发现还是有点粗心,源头--堆栈初始化没怎么搞明白.
这里首先强调,一定一定要搞清楚分段和分页保护的机制.
现有分段,后有分页,分页可有可无,看寄存器cr0是否开启PE位(page enable. 在JOS系统的boot.S里就已经开启了)
文章从三个方面对栈进行分析
0. GDT 全局段寻址描述表...
分类:
其他好文 时间:
2015-04-25 16:43:59
阅读次数:
207
一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换? 用户态堆栈指针:ss和esp; 内核态堆栈指针:ss0和esp0; 二者均位于任务的tss结构中。这里的任务是指除任务0和1之外的普通任务。 CPU进行用户态堆栈到内核态堆栈的切换操作时,CPU会从当前任务的任务状...
分类:
系统相关 时间:
2014-10-10 23:09:25
阅读次数:
252
http://blog.163.com/di_yang@yeah/blog/static/86118492201212534924900/一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换?用户态堆栈指针:ss和esp;内核态堆栈指针:ss0和esp0;二者均位于任务...
分类:
系统相关 时间:
2014-09-22 10:32:22
阅读次数:
229