gpt4 book ai didi

c - 当想要将某些内容写入文件时,在操作系统级别会发生什么?

转载 作者:可可西里 更新时间:2023-11-01 11:46:14 26 4
gpt4 key购买 nike

当想要将某些内容写入文件时,在操作系统级别会发生什么?任何操作系统都可以,但我熟悉 Linux,所以如果有人在 Linux 中给我答案,那就太好了。

我知道当我们打开一个文件用 C 编写时会发生一些事情,下面是我的粗略代码。

FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fputs("This is testing for fputs...\n", fp);
  • C 将调用库函数 write()。
  • write() 库函数将调用系统调用 write()。
  • 将调用128号中断,进入内核态执行。
  • 将在eax寄存器中传递系统调用号。
  • 将在 ebx、ecx 等寄存器中传递写入调用的参数。
  • >???现在我想知道它将如何解析文件路径,如何写入文件,是否涉及任何磁盘调度程序(Linus Elevator、Anticipatory Scheduler、CFS Scheduler 等),是否涉及任何 DMA 或任何其他如果我遗漏了什么???

最佳答案

接下来,sys_write 内核函数被调用。去下载 Linux kernel 的副本来源,并查看它。您正在 fs/read_write.c 中寻找 SYSCALL_DEFINE3(write...

sys_write 将调用 fdget 基本上得到一个 struct file* 指针,并调用 vfs_write(在同一个文件)。

请记住,write 是一个非常通用的系统调用,它允许您将数据写入任何打开的文件描述符(甚至可能根本不是磁盘上的文件) ).在struct file* 中是一个指针(f_op)指向许多函数指针。由于"file"是一个完全通用的东西,这些函数指针是知道如何进行实际写入的,具体取决于文件的类型。这提供了一种“多态性”,但使用的是纯 C 代码。所以 vfs_write 将调用 file->f_op->write()

这些调用将向下传递到文件系统层(在 fs/ 目录中)。同样,这取决于您安装的文件系统(例如 ext3nfs 等)

最终他们将进入 block 设备层,这是完成 block 数据到真实硬件的原始读/写的地方。同样,这取决于您连接的设备(例如 PATA、SATA/SCSI、RAID、USB、网络...)

设备驱动程序是与硬件进行实际通信的地方。这是任何 DMA 或内存映射 I/O 发生的地方。

这可能最好用 good book 来描述.

关于c - 当想要将某些内容写入文件时,在操作系统级别会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22429789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com