【问题标题】:System Call and File Operation in LinuxLinux中的系统调用和文件操作
【发布时间】:2012-10-15 12:47:09
【问题描述】:

我正在阅读有关设备驱动程序的内容,并且我有一个与 UNIX 哲学有关的问题,即一切皆为文件。

当用户发出例如打开文件的命令时,什么会起作用 - 系统调用或文件操作? sys_open 是系统调用,open 是文件操作。能否请您详细说明一下主题。

提前致谢。

【问题讨论】:

标签: linux system-calls


【解决方案1】:

快速回答,希望对你有帮助:

所有系统调用都以相同的方式工作。系统调用号与系统调用参数一起存储在某个地方(例如,在寄存器中)。在打开系统调用的情况下,参数是:指向文件名和权限字符串的指针。然后 open 函数使用适当的指令引发软件中断(syscall,int ...,这取决于硬件)。

对于任何中断,都会调用内核(在内核模式下)来处理中断。系统检测到中断是由系统调用引起的,然后读取寄存器中的系统调用号,发现是open系统调用,在内核内存中创建文件描述符,然后调用驱动程序open继续实际打开文件功能。然后将文件描述符 id 存储回寄存器并返回到用户模式。

然后从寄存器中检索文件描述符并由open()返回。

【讨论】:

  • 好的,非常感谢。所以你的意思是说当用户调用请求时系统调用被调用,然后又使用文件操作?
  • @shingaridavesh 如果通过文件操作您的意思是实际在驱动器上写入,那么是的,系统会为用户执行此操作(在驱动程序的帮助下)。用户没有办法这样做。
  • 所以如果设备驱动程序文件操作和系统调用指向同一事物,就像系统调用中的 open 将指向 open.c(linux/fs/open.c) 或驱动程序中定义的 fops 一样?
【解决方案2】:

"每个打开的文件(内部由一个文件表示 结构,我们将很快检查)与它自己的一组函数相关联 (通过包含一个名为 f_op 的字段,该字段指向一个 file_operations 结构)。 该 操作主要负责实现系统调用,因此, 命名为打开、读取等。"

这是来自 LDD 章节字符驱动程序。谁能详细说明最后一行是什么意思。

【讨论】:

    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2013-08-04
    • 2012-08-27
    • 2011-06-21
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多