Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lections_v2.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Лекция 6. 17.03.2014

Примеры спец. файловых систем

Название

Точка монтирования

Описание

pipefs

------

каналы

proc

/proc

среда данных ядра

shm

/dev/shm

общая память

sockfs

------

сокеты

sysfs

/sys

системные данные

tmpfs

любая

временные файлы

Организация виртуальной файловой системы (vfs)

Эта ФС охватывает файлы дисковой ФС и сетевой ФС.

Файлы ВФС:

  • принадлежащие дисковой или сетевой ФС

    • обычный файл

    • каталог

    • символьная ссылка

  • принадлежащие специальной ФС

    • файл блочного устройства

    • файл символьного устройства

    • именованный канал (ФИФО)

    • сокет

Регистрация и дерегистрация фс

Рассмотрим порядок добавления новой ФС в Линукс. При этом ПО ФС может быть выполнено в виде подгружаемого модуля, либо связан со статическим ядром.

Пример. Регистрация ФС BFS.

//fs/bfs/inode.c

#include "linux/module.h"

#include "linux/init.h"

static struct super_block *ffs_read_super(struct super_block *, void *, int );

static DECLARE_FSTYPE_DEV(bfs_fs_type, "bfs", bfs_read_super);

static int _init init_bfs_fs(void)

{

return register_filesystem(&bfs_fs_type);

}

static void _exit exit_bfs_fs(void)

{

uregister_filesystem(&bfs_fs_type);

}

module_init(init_bfs_fs)

module_exit(exit_bfs_fs)

ФС proc не является монтируемой файловой системой, это интерфейс ядра, который позволяет приложениям читать и изменять данные в адресном пространстве ядра, получать инфо о процессах и используемых ими ресурсах, при это используется стандартный интерфейс системных вызовов.

  • доступ к адресному пространству ядра осуществляется с помощью прав на чтение, запись, изменение.

По умолчанию чтение, запись разрешены только для владельцев процессов.

В системе каждый процесс имеет id – целое число, порядковый номер процесса по времени создания.

Этот Pid является именем директории в ФС proc.

/proc/<PID>

В поддиректории каждого процесса находятся файлы и данные, относящиеся к данному процессу.

Элемент

Тип

Содержимое

cmdline

файл

указатель на директорию процесса

cwd

симолическая ссылка

-//- (путь к файлу)

environ

файл

список окружения процесса

exe

симолическая ссылка

указатель на образ процесса (путь к файлу)

fd

директория

ссылки на файлы, используемые процессом

root

soft link

указатель на корень ФС процесса

stat

файл

инфо о процессе

С помощью функции getpid процесс может узнать свой Pid и сконструировать путь к своей директории.

Использование ссылки self: /proc/self

Пример. Программа, печатающая инфо об окружении процесса.

#include <stdio.h>

#define BUF_SIZE 0x100

int main(int argc, char *argv[])

{

char buf[BUF_SIZE];

int len, i;

FILE *f;

f = fopen("/proc/self/environ", "r");

while ((len=fread(buf, 1, BUF_SIZE, f)>0))

{

for (i=0; i<len; i++)

{

if (buf[i]==0)

buf[i] = 10;

}

buf[len]=0;

printf("%s", buf);

}

fclose(f);

return 0;

}

В environ строки разделены не ‘/n’, a ‘/0’. Вся информация в ФС proc – ‘nj ntrcnjdsq afqk/Также proc содержит информацию о разных частях системы.

Команды.

lspci – информация об устройствах, подключенных к шине pci.

apm – информация о состоянии батареи ноутбука.

Особенностю ФС proc является то, что файлы и поддиректории этой ФС могут создаваться, их легко регистрировать и дерегистривать, все это динамически. Поэтому их часто используют другие модули.

ФС proc использует структуру

struct proc_dir_entry

{

unsigned short low_ino; // номер индекса, inode файла

unsigned short namelen; // длина

const char *name; // указатель на имя файла

mode_t mode; // режим файла

nlink_t nkink; // количество ссылок на файл

uid_t uid; // id пользователя

//...

struct proc_dir_entry *next, *parent, *subdir;

void *data;

//...

int deleted;

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]