操作系统中涉及到现场保留和恢复的点

简介: 异常和中断保留现场:通过push指令将寄存器中的值都压入到栈中恢复现场:通过pop指令将栈中的值赋值给寄存器中进程间切换保留现场:通过创建并初始化一个结构体(struct pt_regs该结构体中的属性就是用来保存各个寄存器中的数据的), 将该结构体中的所有数据直接...

异常和中断

  • 保留现场:
    • 通过push指令将寄存器中的值都压入到栈中
  • 恢复现场:
    • 通过pop指令将栈中的值赋值给寄存器中

进程间切换

  • 保留现场:
    • 通过创建并初始化一个结构体(struct pt_regs该结构体中的属性就是用来保存各个寄存器中的数据的), 将该结构体中的所有数据直接memcpy到栈中, 提高了效率
  • 恢复现场:
    • 也是通过pop指令将栈中的数据重新还原到各个寄存器中

在应用层的代码通过系统调用访问内核空间

  • CPU在执行应用层的代码的时候, 遇到了系统调用, 那么就需要切换栈空间到内核的栈空间, 这里涉及到了特权的转换, 具体的执行流程如下
    • 当前esp, ss, eip等寄存器的值被保存到了CPU内部
    • CPU通过读取TSS结构, 从中提取出内核栈空间的栈段选择子和栈基地址, 将这个值更新到esp, ss中, 这个时候就是在了内核空间了, 因为我们的已经指向了内核的栈空间了
    • 将第一步保存的应用层代码的esp, ss等值压栈
    • 将调用者(应用层)的栈空间的参数复制到内核的栈中
    • 通过门描述符获取系统调用的入口地址, 将其更新到eip, cs寄存器中
    • CPU在内核空间执行程序
    • 执行完毕, 从系统调用中返回, 进行现场的恢复
目录
相关文章
|
11月前
|
消息中间件 NoSQL Java
【操作系统】生产环境消失的进程如何排查
【操作系统】生产环境消失的进程如何排查
【操作系统】生产环境消失的进程如何排查
|
算法 调度 C++
操作系统实验四-同步机构(一)
操作系统实验四-同步机构
332 0
操作系统实验四-同步机构(一)
|
调度
操作系统实验四-同步机构(二)
操作系统实验四-同步机构
148 0
操作系统实验四-同步机构(二)
从硬件出发,浅谈操作系统的段机制与页机制【转】
转自:https://www.jianshu.com/p/f4a909f3fd2e 我们写一个程序,经过编译之后会变成一堆的指令。操作系统在执行这个程序的时候,也正是执行这堆指令。 指令可以是 取数据的指令 或 取下一条被执行指令 的指令。
1130 0
《操作系统真象还原》——0.10 什么是段重叠
依然假设在实模式下(并不是说在保护模式下就不存在段重叠,只是这样就会少解释了相关数据结构,如段描述符,不过这不重要,原理是一样的),一个段最大为64KB,其大小由段内偏移地址寻址范围决定,也就是2的16次方。其起始位置由段基地址决定。
1460 0

热门文章

最新文章