每当我们打开一个程序并选择对话框(比如libre office)来选择文件时,我们实际上是遍历硬盘的文件结构。但这是系统调用吗?如果是,那么当您点击每个文件夹时,过多的切换回用户和内核模式会导致用户交互过程变慢。
为进程加载的本地内存怎么样?是否需要系统调用来访问它?
答案 0 :(得分:1)
访问文件系统是系统调用。
你需要意识到的是,“慢”具有多种含义,具体取决于你的抽象程度。在汇编级别,您正在处理单个CPU周期,这在人类规模上是无限短的和快速的。在C语言规模上,像Ruby这样的东西非常慢。在用户规模上,相同的Ruby代码在相同(对人类)不可观察的时间内执行。
在程序集级别上,内核和用户空间之间的切换只是“慢”。您的计算机可能每秒每秒切换两千次。您在文件系统操作中感知到的任何缓慢都来自硬盘驱动器本身的延迟,该驱动器本身在其自己的时间范围内运行。
您自己的进程内存始终可以直接访问代码。系统调用仅用于设置新的分页区域,如新分配的内存,共享内存,mmaped文件等。如果您的任何内存访问触发页面错误以允许内核页面进入/移动/错误丢失页面,也会触发切换到内核空间。