在操作系统(OS)中,保持对计算机的控制权是至关重要的,同时还需要为用户提供高性能的并发。为了实现这一目标,OS采用了一些特定的机制。
在微内核OS中,通常存在两种模式:内核模式(Kernel Mode)和用户模式(User Mode)。普通用户进程主要在用户模式中运行,只能执行一些基本操作。而一些特权操作,比如I/O操作、中断处理、时钟管理以及进程调度等,则必须在内核模式中由操作系统执行,而用户模式下则无法执行这些特权操作。
内核模式和用户模式的关系类似于父母为孩子建立的安全屋:危险的事物被保护起来,孩子可以在其中安全活动。但是一旦孩子想要进行任何“危险行为”,就需要寻求父母的帮助。
因此,当某个程序需要执行特权操作时,它会调用OS内核(syscall)来执行,从而将CPU的控制权移交给OS。
然而,这种方式并未解决另一个问题:如果一个进程一直不愿意交出CPU控制权怎么办?这种进程很容易实现,只需使用无限循环。针对这些不友好的进程,需要采取措施来保证OS的控制权。
一种解决方法是定时将控制权移交给OS,这可以利用时钟(如石英振荡器)来实现,通过定时syscall强制将计算机控制权移交给OS,当然这需要硬件中断的支持。
综上,现在有两种方式来保证OS对计算机的控制权:一是友好的进程会主动syscall来移交控制权;二是对于不友好的进程,采用定时中断的方式获得控制权。
然而,上述两种方式也带来了新问题:所有用户模式的进程在将控制权移交给OS后(无论是主动还是被动),相当于从原本的运行状态被硬生生地打断。因此,下一次运行时需要将计算机恢复到被打断之前的状态,这需要利用Process Control Block实现,这个过程称为 上下文切换(Context Switch) 。
此外,OS在获得控制权后,还必须决定接下来要运行哪个用户进程。这就需要通过 调度算法(Scheduler) 来实现。
标签:游戏攻略