地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

メモ:files_structの入り口

file_struct データ構造体は、プロセスがオープンしたファイルについて 記述するものである。 定義はinclude/linux/sched.hで定義されている。

struct files_struct {
  int count;
  fd_set close_on_exec;
  fd_set open_fds;
  struct file * fd[NR_OPEN];
};

プロセスがこのfiles_struct構造体を参照していて、file構造体がfcheck_files(files, fd)得られたなら、このfile構造体は、すでにopenシステムコールで、その参照カウンタがインクリメントされているため、fget_light()で取得したfile構造体は、あえて参照カウンターをインクリメントする必要がない

プロセス管理を行うtask_structでも情報は保持している

struct task_struct {
          struct files_struct* files; //ファイルディスクリプタ
          struct signal_struct* sig;  //シグナルハンドラ
          struct mm_struct* mm;       //メモリ管理モジュール

          long stat                   //プロセス状態
          task_struct*  next_run, prev_run;  //RUNキュー接続用
          long  priority;             //ベースプライオリティ
          long  counter;              //変動プライオリティ

          char comm[];                //コマンド名
          struct thread_struct tss;   //コンテキストセーブ域
};