开放系统调用

问题描述:

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

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

谢谢!

+0

我认为你需要更具体的内核......内核在系统调用中做了很多*。 – SoapBox 2009-02-15 21:08:21

大致来说,你能想到以下步骤:

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

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

我会回到教授告诉你的 - 在open()中有很多事情发生,这取决于你打开的是什么(例如设备,文件,目录),除非你写教授寻找什么,你会失分。这是说,它主要涉及检查,看看这个打开是否有效(即该文件是否存在,用户是否有权读取/写入,等等),然后内核句柄表中的条目是分配给跟踪fd和其当前文件位置的(当然,其他一些东西)