在进程间切换

在进程间切换

在前面了解过,运行在操作系统上的多个进程可以并发执行,而进程的并发就需要进程间进行切换。

操作系统完成进程的切换,问题来了:当一个进程正在运行,操作系统怎么获得CPU的控制权

操作系统重获CPU控制权的方法

1.协作方式:等待系统调用

通过yield系统调用:这个系统调用只是将CPU的控制权交给操作系统。

或者当程序发生异常时,会陷入操作系统,操作系统再次控制CPU。

弊端:如果程序中没有通过系统调用将控制权交给操作系统,也不会出现问题,操作系统也就没了作用。

2.非写作方式:操作系统进行控制

为了解决协作方式必须显式的进行系统调用,在硬件(时钟设备)的帮助下,使用非协作的方式,将CPU的控制权交给操作系统。

时钟中断:始终设备可以隔固定的时间产生一次中断。产生中断时,当前正在运行的程序暂停执行,改为执行预先配置的中断处理程序。中断处理程序,将CPU控制权交给操作系统

使用中断需要的技术支持:保存和恢复上下文

当进程进行切换时,为了保证下次切换回来时,CPU的内部寄存器(上下文)与切换之前一样,就需要进行保存和恢复上下文。

保存和恢复上下文:假设当前进程为A,操作系统要切换到进程B,就需要将A的各个寄存器的值保存起来;将B的上下文进行恢复。

首先直接执行协议(时钟中断)

操作系统@启动时(内核模式) 硬件 程序(用户模式)
初始化陷阱表    
  记住一以下地址:
系统调用处理程序
始终处理程序
 
启动中断时钟    
  启动时钟
每隔x毫秒中断CPU
 
操作系统@运行时(内核模式) 硬件 程序(用户模式)
    进程A执行中
  时钟中断
保存上下文(将寄存器的值保存到内核栈)

转向内核模式
程序计数器跳到中断处理程序
 
执行中断处理程序
调用switch()例程(上下文切换)
中断返回
切换到进程B
   
  恢复B的上下文
转向用户模式
程序计数器跳入进程B
 
    进程B执行中

 

发布了213 篇原创文章 · 获赞 116 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq2071114140/article/details/104089544