在创建fd时如何在内核中向用户发生上下文切换?

时间:2017-12-12 05:32:07

标签: linux-kernel

创建fd时如何在内核中向用户发生上下文切换?因为用户到内核contextAswitch发生它将触发INT ox80 signanl.but但在内核中用户是如何发生的?

1 个答案:

答案 0 :(得分:0)

您应该阅读有关操作系统的内容,例如Operating Systems: Three Easy Pieces(可免费下载)。您还可以阅读有关Linux内核实现的书籍。不要忘记研究Linux kernel的源代码并查看kernelnewbies

内核为用户模式应用程序创建file descriptor的常用方法是system call,例如open(2)

在处理该系统调用期间,可以调用scheduler并生成context switch

对于open,内核需要执行一些path_resolution(7),并且该处理可能需要磁盘访问(对于尚未位于page cache中的文件元数据),因此可能需要一些上下文开关。一旦内核需要一些磁盘访问,它就会进行上下文切换(让其他一些可运行的进程运行)。在磁盘控制器(或DMA控制器)通过某些interrupt发出磁盘块传输结束信号后,内核可能会重新安排该进程。

请记住,磁盘访问可以take十几毫秒;在此期间,可能会发生多次上下文切换,并且处理器有时间执行数百万个机器代码指令。

另请阅读continuationcontinuation-passing style。这些概念确实适用于内核及其进程调度程序。

还在Linux计算机上试用/proc(请参阅proc(5))。例如,在一两秒内重复cat /proc/interrupts命令两次,并观察差异。您将了解上下文切换经常发生在您的计算机上(每秒可能有一千个交换机)。

另请参阅OSDEV wiki

BTW,最近的Linux系统没有使用INT 0x80机器指令切换到内核模式(但有些SYSENTERSYSCALL机器指令)。另请参阅vdso(7)

相关问题