1

我正在为我的操作系统中期学习,想知道是否可以得到一些帮助。

有人可以解释检查以及内核在 open() 系统调用期间做了什么吗?

谢谢!

4

2 回答 2

4

很粗略的,你可以想到以下几个步骤:

  1. 通过遍历文件系统数据结构,将文件名转换为 inode,它是描述文件内容的实际文件系统对象。
  2. 在此遍历过程中,内核将通过目录路径检查您是否有足够的访问文件的权限,并检查文件本身的访问权限。精确的检查取决于通过什么模式打开。
  3. 在内核中创建有时称为打开文件描述符的内容。内核代表任何进程打开的每个文件都有一个这些对象。
  4. 在每个进程的文件描述符表中分配一个未使用的索引,并将其指向打开的文件描述符。
  5. 从系统调用返回这个索引作为文件描述符。

这个描述对于打开普通文件和/或目录应该基本上是正确的,但是对于各种特殊文件,特别是对于设备来说,情况是不同的。

于 2009-02-15T21:20:16.277 回答
0

我会回到教授告诉你的内容——在 open() 期间会发生很多事情,这取决于你正在打开的内容(即设备、文件、目录),除非你写的是教授的内容因为,你会失去积分。

话虽如此,它主要涉及检查这个打开是否有效(即这个文件是否存在,用户是否有读/写权限等),然后分配内核句柄表中的一个条目来跟踪fd 及其当前文件位置(当然还有其他一些东西)

于 2009-02-15T21:13:31.470 回答