vja*_*n27 38 operating-system process system-calls
我很遗憾在问到这个问题时会问这个问题,但我无法从他们那里得到澄清.所以我要问以下相关问题来区分系统调用(模式切换)和上下文切换
为什么在进行调用的进程的上下文必须保存然后重新加载时,系统调用不需要上下文切换.是否只是因为根据上下文切换的定义,必须对另一个进程进行切换.
在进行系统调用时,内核在"用户上下文"中执行是什么意思.
系统调用不需要上下文切换,但它取决于操作系统,并且在系统调用期间可能会发生上下文切换.我想知道在系统调用时发生上下文切换的情况会发生什么.任何例子?
Ale*_*nze 67
您需要了解一个线程/进程上下文有多个部分,一个与执行直接相关,并且保存在CPU和CPU使用的内存中的某些系统表(例如页表)中,另一部分需要操作系统,用于簿记(考虑各种ID,句柄,特殊操作系统特定权限,网络连接等).
完整的上下文切换将涉及交换这两者,旧的当前线程/进程消失一段时间并且新的当前线程/进程进入一段时间.这是线程/进程调度的本质.
现在,系统调用彼此非常不同.
考虑一些简单的事情,例如,系统调用请求当前日期和时间.CPU从用户切换到内核模式,保留用户模式寄存器值,执行一些内核代码以获取必要的数据,将其存储在内存或调用者可以访问的寄存器中,恢复用户模式寄存器值和回报.这里没有太多的上下文切换,只有模式,用户和内核之间的转换需要什么.
现在考虑一个系统调用,它涉及阻止调用者直到某些事件或数据可用性.操作互斥锁和读取文件将是此类系统调用的示例.在这种情况下,内核被强制保存调用者的完整上下文,将其标记为已阻塞,以便调度程序在该事件或数据到达之前无法运行它,并加载另一个就绪线程/进程的上下文,以便它可以运行.
这就是系统调用与上下文切换相关的方式.
在用户或进程的上下文中执行的内核意味着每当内核代表某个进程或用户工作时,它必须考虑用户/进程的上下文,例如当前进程/线程/用户ID,当前目录,区域设置,各种资源(例如文件)的访问权限,所有这些东西,在不同的进程/线程/用户之间可以是不同的.
如果进程具有单独的地址空间,则地址空间也是进程上下文的一部分.因此,当内核需要访问进程的内存(读/写文件数据或网络数据包)时,它必须能够访问进程的地址空间,IOW,它必须在其上下文中(它不是但是,内核必须加载完整的上下文才能访问特定地址空间中的内存.
这有用吗?
| 归档时间: |
|
| 查看次数: |
20299 次 |
| 最近记录: |