首页 > 编程知识 正文

系统调用与过程调用,上下文切换用在哪里

时间:2023-05-05 03:14:05 阅读:170830 作者:3201

CPU寄存器与程序计数器(保存CPU执行指令的位置,或保存即将执行的下一指令的位置)一起构成CPU上下文。

CPU上下文切换是指保存上一个任务的CPU上下文,将新任务的上下文加载到这些寄存器和程序计数器中,最后跳转到程序计数器指向的新位置以执行新任务。 保存的上下文保存在系统内核中,并在重新调度和执行任务时重新加载。

根据任务的不同,CPU的上下文切换可以分为几个不同的场景。 (进程上下文切换、线程上下文切换、中断上下文切换) )。

流程上下文切换系统调用

众所周知,进程的执行区域分为内核区域和用户区域。 内核空间可以访问所有资源,用户空间只能访问有限的资源,而不能访问内存等硬件设备。

从用户状态到内核状态的转换必须在系统调用中进行。 对文件(如open、read、write和close )的所有操作都是系统调用。

在系统调用过程中产生CPU上下文开关,首先切换到内核状态,执行内核状态代码,然后返回用户状态代码。 因此,一次系统调用将导致两次CPU上下文切换。 也称为特权模式切换,但仍然运行着相同的进程。

进程上下文切换性能问题

进程由内核管理和调度,进程切换仅在内核状态下进行。 流程上下文不仅包括虚拟内存、堆栈、全局变量等用户空间资源,还包括内核堆栈、寄存器等内核空间状态。 每次需要进程上下文切换几十纳秒到几微秒的CPU时间。

另外,Linux通过TLB管理着从虚拟内存到物理内存的映射,虚拟内存更新后还需要更新TLB,对存储器的访问也很慢。 特别是在多处理器系统中,高速缓存由多个处理器共享,刷新高速缓存不仅会影响当前处理器的进程,还会影响共享高速缓存的其他处理器的进程。

进程上下文切换发生的时机

安排进程时,必须在上下文之间切换。 Linux为每个CPU维护就绪队列,并激活进程(正在运行和等待CPU的进程)

按优先级和等待CPU的时间进行排序,选择并运行最需要CPU的进程。 (优先级高、等待时间长的过程)

1、CPU时间被划分为一定的时间片,当某个进程的时间片用完时,就被系统挂起,切换到其他等待的进程

2、流程在系统资源不足的情况下,在资源满足之前无法运行。 在这种情况下,该过程也被挂起,并且CPU转交给其他过程

3、进程主动挂起sleep休眠函数,CPU让位给其他进程

4、当优先级更高的进程运行时,当前进程将被挂起

5、发生硬件中断,CPU进程被中断挂起,运行内核中的中断服务程序

进程上下文切换线程是调度的基本单元,而进程是资源拥有的基本单元。 如果进程只有一个线程,则进程被认为等于线程。

如果进程有多个线程,则这些线程将共享相同的虚拟内存和全局变量等资源。

线程主要是私有数据、堆栈、寄存器等资源。

线程上下文切换分为以下两种情况:

1、两个线程属于不同的线程,不共享资源,所以与进程的上下文切换相同

2、两个线程属于同一个进程,只是在专用数据、寄存器等不共享的数据之间切换

中断上下文切换与系统调用不同,中断上下文切换与进程的用户状态无关。 因此,中断进程会中断处于用户状态的进程,无需保存和恢复进程的虚拟内存和全局变量等用户资源。 仅包含运行内核状态中断服务程序所需的状态、CPU寄存器、内核堆栈和硬件中断参数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。