系统调用,上下文切换及中断概念的汇总

简介:        仔细揣摩了一段时间.       系统调用过程,用户进程进入内核态,进程栈进入内核态栈, cpu进入内核态,cpu用户态各寄存器的值保存到内核态栈,执行内核态代码. 执行完从内核态返回到用户态,包括进程栈返回到用户态栈,cpu返回到用户态,cpu各寄存器的值用之前保存在内核态栈的值还原.  内核在执行系统调用时处于进程上下文中,current指针指向当前进程,即引发系统调用的进程。

       仔细揣摩了一段时间.

       系统调用过程,用户进程进入内核态,进程栈进入内核态栈, cpu进入内核态,cpu用户态各寄存器的值保存到内核态栈,执行内核态代码. 执行完从内核态返回到用户态,包括进程栈返回到用户态栈,cpu返回到用户态,cpu各寄存器的值用之前保存在内核态栈的值还原.  内核在执行系统调用时处于进程上下文中,current指针指向当前进程,即引发系统调用的进程。

   1 系统调用的过程中 可以发生进程切换(1 来自时钟中断,时间片用完,schedule()。2内核态代码执行过程中阻塞,主动schedule() )。 
   2 系统调用的过程中 可以发生中断,中断任意时刻可以发生,中断不属于任何一个进程上下文. 
    a 当前进程是用户态  cpu进入内核态,使用栈进入到中断栈,并且在中断栈保存用户态各寄存器的值,执行中断代码,中断代码执行过程中 不能被阻塞, 不能被切换。执行完中断代码后,从中断栈恢复用户态寄存器值,cpu进入用户态。(用户态进入到内核栈时,该栈时空的,中断代码可以直接使用进程的内核态栈)
    b 当前进程是内核态,使用栈进入到中断栈,并且在中断栈保存内核态各寄存器的值,执行中断代码,执行完中断代码后,从中断栈恢复内核态寄存器值.

    c 中断代码执行时,处在中断上下文.不属于任何一个进程上下文.

    d 每CPU变量中会有两个栈单独用于中断过程 分别用于软中断和硬中断 (2.6.x版本后)

  3 从内核态返回到用户态的过程中,有很多事情都是这个环节里面做的.

      a  .检查 need_resched,当前进程是否需要发起schedule() ,这个过程也会发生进程切换

      b  会检查所有进程是否有信号到达(深入理解linux内核 第三版 422页 ),  信号的处理是在这个过程来触发的。之前看了很多资料,都没发现一个可以进入信号处理的入口. 几乎所有的文章都是讲怎么发信号,怎么处理信号.就是没有一个说道有信号达到的进程是如何感知到,并且被调度.

目录
相关文章
|
6月前
|
安全
【进程通信】信号的捕捉原理&&用户态与内核态的区别
【进程通信】信号的捕捉原理&&用户态与内核态的区别
|
6月前
|
资源调度 调度 UED
CPU执行系统调用时发生中断,操作系统还能切回中断前的系统调用继续执行吗?
系统调用服务例程在执行过程中,通常不会被中断。系统调用服务例程的执行是一个原子操作,即在执行期间不会被中断。这是为了确保在系统调用服务例程执行期间对内核数据结构的一致性和完整性。
|
6月前
|
Linux
Linux进程与线程的内核实现
task_struct称为进程描述符结构,该结构定义在文件中。进程描述符中包含一个具体进程的所有信息 进程描述符中包含的数据能完整地描述一个正在执行的程序:它打开的文件,进程的地址空间,挂起的信号,进程的状态等
69 0
Linux进程与线程的内核实现
|
调度 数据安全/隐私保护
用户态和内核态 中断处理机制
用户态和内核态 中断处理机制
389 0
|
6月前
|
存储 安全 数据中心
系统调用与用户态陷入内核态
我们都知道操作系统中运行着很多的进程,如果普通的进程可以直接操作硬件那么这个系统的安全性没办法保障,所以操作系统分出了两种状态,一种状态是运行的代码可以操作硬件;一种状态不能操作硬件,只能切换到第一种状态去操作后再切换回来,这就是内核态和用户态。
|
6月前
|
算法 Unix Linux
进程原理及系统调用
进程原理及系统调用
|
Unix Linux
进程原理及其系统调用(下)
进程原理及其系统调用
81 0
|
算法 Linux 调度
进程原理及其系统调用(上)
进程原理及其系统调用
131 0
|
Linux C语言
【Linux线程】二、线程控制原语
【Linux线程】二、线程控制原语
170 0
【Linux线程】二、线程控制原语
|
存储 消息中间件 算法
操作系统学习笔记_2 中断和系统调用;进程和线程
学习自计算机科学单本&b站王道课程。
170 0
操作系统学习笔记_2 中断和系统调用;进程和线程