Skip to content

Latest commit

 

History

History
45 lines (30 loc) · 3.28 KB

lecture3.md

File metadata and controls

45 lines (30 loc) · 3.28 KB

Файловая система (что, опять?)

Вспоминаем struct proc_info - информацию о процессе. Допустим, процесс хочет создать директорию или файл. Как выставить права доступа? По дефолту, это rw-rw-rw-. Если мы хотим другие права, нужно об этом mkdir'у сказать. Для этого в proc_info есть umask. Делается & ~umask с правами, которые мы указали при создании файла (дефолтные для файла 666, для директории 777). Например, если мы вызовем mkdir с umask = 022, мы получим 755 = rwxr-xr-x

NB: umask наследуется при fork'e. Стандартная для bash'a - 022.

Links

Знакомые всем ссылки-ярлыки

  • Hard links
  • Soft (symbolic) links

SOFT В структуре inode указано, что эта нода - символьная ссылка, так же там содержится path. Все обращения к этой inode переадресуются на path

HARD Два имени в разных папках содержат на одну и ту же inode. Работает только в пределах одной FS. Чтобы узнать, когда на самом деле удалять файл, inode хранит количество hard ссылок на неё. Так как все записи у нас одинаковые, мы не можем узнать, кто оригинал.

man ln расскажет всё о том, как делать ссылки.

Треды и т. д.

У нас в proc_info есть всякие pid, ppid, fdtable, regs и т. д. Часть из них - числа и влезают в регистр. Большие же структуры (типа fdtable) хранятся по указателям. Какие-то из них наследуются при fork'e, но, например, не общая память. Если же мы хотим расшарить больше, есть системный вызов clone. Например, если мы передадим наследнику всё, кроме регистров, у нас получится не новый процесс, а новый тред.

pthreads - сокращение от POSIX Threads. Можно юзать из С.

При создании нового треда все страницы памяти из стека становятся copy on write (т.е., создается новый стек), если ты не зааллоцировал его сам.

Межпроцессное взаимодействие

IPC - InterProcess communication

  • pipe - 2 fd, в один валится, из другого вываливается. Если закрывают все fd на один из концов, в другой прилетает EOF(в читающий) или EPIPE (в пишущий).
  • fifo - 1 fd, один процесс открывает на чтение, другой на запись. man 3 mkfifo
  • Сигналы, см. следующую лекцию