系统调用和上下文切换

时间:2012-02-11 06:27:16

标签: process operating-system system-calls

我很遗憾在问到这个问题时会问这个问题,但我无法从他们那里得到澄清。所以我问以下相关问题来区分系统调用(模式切换)和上下文切换

  • 为什么说上下文时系统调用不需要上下文切换 进行调用的过程必须保存然后重新加载。是否只是因为根据上下文切换的定义,必须对另一个进程进行切换。

  • 在进行系统调用时,内核在“用户上下文”中执行是什么意思。

  • 根据维基百科文章:http://en.wikipedia.org/wiki/Context_switch

系统调用不需要上下文切换,但它取决于操作系统,并且在系统调用期间可能会发生上下文切换。我想知道在系统调用时发生上下文切换的情况会发生什么。有什么例子吗?

2 个答案:

答案 0 :(得分:62)

您需要了解线程/进程上下文有多个部分,一个与执行直接相关,并且保存在CPU和CPU使用的内存中的某些系统表(例如页表)中,另一个,操作系统需要用于簿记(考虑各种ID,句柄,特殊操作系统特定权限,网络连接等)。

完整的上下文切换将涉及交换这两个,旧的当前线程/进程消失一段时间,新的当前线程/进程进入一段时间。这是线程/进程调度的本质。

现在,系统调用与w.r.t非常不同。彼此。

考虑一些简单的事情,例如,系统调用请求当前日期和时间。 CPU从用户切换到内核模式,保留用户模式寄存器值,执行一些内核代码以获取必要的数据,将其存储在内存或调用者可以访问的寄存器中,恢复用户模式寄存器值和回报。这里没有太多的上下文切换,只有模式,用户和内核之间的转换需要。

现在考虑一个系统调用,它涉及阻止调用者直到某些事件或数据可用性。操作互斥锁和读取文件将是此类系统调用的示例。在这种情况下,内核被强制保存调用者的完整上下文,将其标记为已阻塞,以便调度程序在该事件或数据到达之前无法运行它,并加载另一个就绪线程/进程的上下文,以便它可以运行

这就是系统调用与上下文切换的关系。

在用户或进程的上下文中执行的内核意味着每当内核代表某个进程或用户工作时,它必须考虑用户/进程的上下文,例如,当前进程/线程/用户ID,当前目录,区域设置,各种资源(例如文件)的访问权限,所有这些东西,在不同进程/线程/用户之间可能不同。

如果进程具有单独的地址空间,则地址空间也是进程上下文的一部分。因此,当内核需要访问进程的内存(读/写文件数据或网络数据包)时,它必须能够访问进程的地址空间,IOW,它必须在其上下文中(它不是但是,内核必须加载完整的上下文才能访问特定地址空间中的内存。)

这有用吗?

答案 1 :(得分:-2)

当用户只想访问仅适合内核模式的内容时,会发生

模式切换