File 进程是否需要系统调用来访问内存(如文件、RAM上的本地内存)?

File 进程是否需要系统调用来访问内存(如文件、RAM上的本地内存)?,file,memory-management,operating-system,File,Memory Management,Operating System,每当我们打开一个程序并选择对话框(比如libre-office)来选择一个文件时,我们实际上是在遍历硬盘的文件结构。但这是系统调用吗?。如果是的话,那么当你点击每个文件夹时,切换回用户和内核模式不是太多了吗?这会让用户交互进程变慢 那么为进程加载的本地内存呢。访问该文件系统是否需要系统调用?访问文件系统是一个系统调用 你必须意识到,“慢”在计算机上有多种含义,这取决于你的抽象级别。在汇编级别,您处理的是单CPU周期,在人类规模上,它是无限短且快速的。在C语言的范围内,像Ruby这样的东西速度非常

每当我们打开一个程序并选择对话框(比如libre-office)来选择一个文件时,我们实际上是在遍历硬盘的文件结构。但这是系统调用吗?。如果是的话,那么当你点击每个文件夹时,切换回用户和内核模式不是太多了吗?这会让用户交互进程变慢


那么为进程加载的本地内存呢。访问该文件系统是否需要系统调用?

访问文件系统是一个系统调用

你必须意识到,“慢”在计算机上有多种含义,这取决于你的抽象级别。在汇编级别,您处理的是单CPU周期,在人类规模上,它是无限短且快速的。在C语言的范围内,像Ruby这样的东西速度非常慢。在用户规模上,相同的Ruby代码在相同的(对人而言)不可察觉的时间内执行

在内核和用户空间之间的切换在程序集级别上只是“缓慢的”。您的计算机可能每秒在这两种情况之间切换数千次。您在文件系统操作中发现的任何缓慢都来自于硬盘本身的延迟,硬盘本身按照自己的时间尺度运行


代码始终可以直接访问您自己的进程内存。系统调用仅在设置新的分页区域(如新分配内存、共享内存、mmaped文件等)时才需要。如果您的任何内存访问触发一个页面错误,允许内核在缺少的页面中翻页/移动/出错,那么也会触发到内核空间的切换。

Yes。甚至所有这些鼠标移动也有效地(从)系统调用返回。在访问本地内存时,请注意,尝试访问已映射但未实际驻留的虚拟内存页时发生的页面错误也将触发对内核上下文的更改,因为内核操作可能需要将该页从磁盘移动到物理ram中,并更新MMU状态以反映它在那里。