中断相关知识

进程上下文:

当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容

一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。
       用户级上下文: 正文、数据、用户堆栈以及共享存储区;
       寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
       系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。

当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的是模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。

中断上下文:

当一个进程发生中断时,首先保存当前进程的上下文信息,然后跳转到中断子程序去执行,那么此时在中断子程序中又会产生当前堆栈及寄存器等值就称为中断上下文。

内核进入中断上下文是因为中断信号而导致的中断处理或软中断。而中断信号的发生是随机的,中断处理程序及软中断并不能事先预测发生中断时当前运行的是哪个进程。

处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。

内核可以处于两种上下文:进程上下文和中断上下文。在系统调用之后,用户应用程序进入内核空间,此后内核空间针对用户空间相应进程的代表就运行于进程上下文。异步发生的中断会引发中断处理程序被调用,中断处理程序就运行于中断上下文。中断上下文和进程上下文不可能同时发生。

运行于进程上下文的内核代码是可抢占的,但中断上下文则会一直运行至结束,不会被抢占。因此,内核会限制中断上下文的工作。

在系统调用之后,用户应用程序进入内核空间,此后内核空间针对用户空间相应进程的代表就运行于进程上下文。中断时,内核不代表任何进程运行,它一般只访问系统空间,而不会访问进程空间,内核在中断上下文中执行时一般不会阻塞。

相关推荐

  1. 中断相关知识

    2024-07-11 03:06:04       21 阅读
  2. 肺癌相关知识

    2024-07-11 03:06:04       47 阅读
  3. 分享相关知识

    2024-07-11 03:06:04       44 阅读
  4. Mybatis相关知识

    2024-07-11 03:06:04       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 03:06:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 03:06:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 03:06:04       57 阅读
  4. Python语言-面向对象

    2024-07-11 03:06:04       68 阅读

热门阅读

  1. 春风得意特斯拉(六)

    2024-07-11 03:06:04       21 阅读
  2. C语言10 函数

    2024-07-11 03:06:04       20 阅读
  3. 在Qt中使用C++编程与传统C++编程的区别

    2024-07-11 03:06:04       16 阅读
  4. 【Android】【多屏】多屏异显异触调试技巧总结

    2024-07-11 03:06:04       23 阅读
  5. pjsip环境搭建、编译源码生成.lib库

    2024-07-11 03:06:04       23 阅读
  6. 【牛客网】华为2016研发工程师编程题

    2024-07-11 03:06:04       19 阅读
  7. 【Perl CGI脚本全解析】打造动态Web应用的秘籍

    2024-07-11 03:06:04       22 阅读
  8. Leetcode 59. 螺旋打印矩阵

    2024-07-11 03:06:04       23 阅读