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

简介: 异常和中断保留现场:通过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在内核空间执行程序
    • 执行完毕, 从系统调用中返回, 进行现场的恢复
目录
相关文章
|
3月前
|
Unix Android开发 iOS开发
操作系统的历史演变过程
【10月更文挑战第15天】操作系统的历史演变过程
79 2
|
6月前
|
Linux
部署09--虚拟机快照,我们无法避免损坏Linux操作系统 ,如果重新装一下就太过麻烦,推荐在关机下制作快照,关机制作效率好,机房要靠近地址,动不动崩溃
部署09--虚拟机快照,我们无法避免损坏Linux操作系统 ,如果重新装一下就太过麻烦,推荐在关机下制作快照,关机制作效率好,机房要靠近地址,动不动崩溃
|
算法 调度 C++
操作系统实验四-同步机构(一)
操作系统实验四-同步机构
452 0
操作系统实验四-同步机构(一)
|
调度
操作系统实验四-同步机构(二)
操作系统实验四-同步机构
207 0
操作系统实验四-同步机构(二)
|
人机交互
请简述操作系统OS是如何介入用户程序的运行过程中。
请简述操作系统OS是如何介入用户程序的运行过程中。
183 0
|
SQL 网络协议 Oracle
关于 Linux中数据备份的一些总结(物理、逻辑、远程差异备份)
  一般需求增量上线的时候,会备份应用和应用数据,保证升级失败也可以回退回去,今天和小伙伴聊聊数据备份的事。日常备份可以通过定时任务进行备份,也可以手动执行备份这里和小伙分享一些备份的脚本Demo,写的很粗。博文内容包括:日志备份,数据库备份(mysql)。备份方式分为:物理备份、逻辑备份、远程差异备份。   等长大就明白了。”小时候总是被人这么说。但那是不折不扣的谎言。我对任何事都只能越来越不明白。……这的确令人不安。但在另一方面,正是因为这样,自己才没有失去对生的好奇这也是事实。 ——中岛敦《山月记》   日志备份这里很简单,这里我们写一个shell脚本,通过脚本的方式进行,当然,如果
226 0
保留正常工作的环境,等自己的搞好后再替换
保留正常工作的环境,等自己的搞好后再替换
97 0
|
Java 关系型数据库 MySQL
日常开发工作快照(三)
    IntelliJ IDEA是java语言的开发集成环境,在业界被公认为最好的java开发工具,没有之一,MyEclipse在它面前绝对是弱爆了,谁用谁知道,唯一的缺点是太占资源,8G内存是标配。
1525 0
|
Java 关系型数据库 Linux
|
NoSQL 开发工具 数据安全/隐私保护