- •Лекция 1. 7.02.2014
- •Монтирование файловой системы.
- •Лекция 2. 10.02.2014
- •Лекция 3. 17.02.2014
- •Открытые файлы.
- •Лекция 4. 24.02.2014
- •Лекция 5. 3.03.2014 Файлы.
- •Регистрация и дерегистрация фс
- •Лекция 6. 17.03.2014
- •Организация виртуальной файловой системы (vfs)
- •Функции для работы с элементами фс proc.
- •Лекция 7. 24.03.2014
- •Файловая система specfs.
- •Терминалы.
- •Терминальный ввод-вывод.
- •Лекция 8. 31.03.2014
- •Типы флагов структуры termios.
- •Принятые соглашения и стандарты.
- •Простые способы открытия псевдотерминалов.
- •Лекция 9. 7.04.2014
- •Лекция 10. 14.04.2014
- •Реализация доступа к устройствам.
- •Структура контроллера внешнего устройства.
- •Южный и северный мосты.
- •Последовательные и параллельные интерфейсы.
- •Лекция 11. 21.04.2014
- •Управление вводом-выводом.
- •Прерывания.
- •Лекция 12. 28.04.2014 Контроллер прерывания.
- •Лекции 13-14. 5.05.2014, 12.05.2014
- •Проблемы прямого доступа к памяти.
- •Управление устройствами.
- •Многослойная модель системы ввода-вывода.
- •Пространство имен устройств.
- •Доступ к драйверу символьного устройства.
- •Доступ к драйверу блочного устройства.
- •Дополнительная информация о драйверах.
- •Лекция 15. 19.05.2014
- •Типичные точки входа в драйвер устройства.
- •Файлы устройств.
- •Буферизация ввода-вывода.
- •Схемы обменной буферизации
- •Обслуживание прерываний.
- •Лекция 16. 26.05.14
- •Лекция 17. 02.06.14
Лекция 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;
};
