
- •Лекция 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
Функции для работы с элементами фс proc.
create_proc_entry(name, mode, parent);
Создает файл с именем name, режимом mode и указателем на структуру proc_dir_entry parent, в которой появится файл. Обычно mode = 0.
Получим указатель на структуру proc_dir_entry:
//proc/net/test
// для инициализации файла test:
char[] name, test_entry;
test_entry = create_proc_entry("test", 0600, proc_net);
test_entry->nlink = 1;
test_entry->data = (void *)&test_data;
test_entry->read_proc = test_read_proc;
test_entry->write_proc = test_write_proc;
Удаляет файл из proc. Для этого необходим указатель, относительный путь или структура proc_dir_entry.
remove_proc_entry(Name, parent);
Создание директории с именем name в parent, возвращает указатель на proc_dir_entry созданной поддиректории.
proc_mkdir(name, parent);
create_proc_read_entry();
create_proc_read_entry(name, mode, base, get_info);
Создает в proc файл name и регистрирует функцию get_info – метод, который используется для чтения из файла с именем name. Для примера, приведенного выше, указанная функция может использоваться следующим образом:
test_entry = create_proc_read_entry("test", 0600, proc_net, test_get_info);
create_proc_info_entry(name, mode, base, read_proc, data);
Аналогично (4) и дополнительно в proc_dir_entry устанавливает параметр data
test_entry = create_proc_info_entry("test", 0600, proc_net, test_read_proc, &test_data);
struct proc_dir_entry *proc_symlink(const char* name, struct proc_dir_entry *parent, const char* dest);
Создание символической ссылки.
unsigned long copy_to_user(void _user* to, const void* from, unsigned long n);
unsigned long copy_from_user(void _user* to, const void *from, unsigned long n);
Лекция 7. 24.03.2014
Дополнительные функции.
Symlink.
static inline struct proc_dir_entry *proc_symlink(const char *, struct proc_dir_entry *, const char *);
Перемещение данных различных типов с помощью API функций.
copy_to_user(to, from, n);
Проверяет с помощью access_ok() доступен ли указатель пространства пользователя, затем вызывается _copy_to_user(), которая вызывает функцию _copy_from_user_atomic().
Файловая система specfs.
В Linux для работы с внешними устройствами практически не используется.
Только если программист хочет работать с внешними устройствами через streams (подсистема потокового ввода-вывода, в линуксе от нее отказались из-за тяжеловесности и сложности), ее можно отключить.
Терминалы.
Исторически — удаленное устройство, которое подключалось к центральному процессору (к центральной машине).
Серия — то, что описано и документировано таким образом, что можно создать несколько экземпляров.
PDP11 — серийная однопроцессорная машина.
Терминал — совокупность устройства ввода и устройства вывода, удаленно подключенного к центральному процессору (кабельное соединение).
Консоль — балка, закрепленная одним концом.
Поскольку терминал - это устройство, подключенное к ЦП и изначально оно создавалось для ввода-вывода пользователю, отсюда все понятия, связанные с терминалом и терминальным вводом-выводом.
В UNIX и Юникс-подобных системах вход в систему осуществляется через терминальное устройство, которое автоматически реализует семантику терминала. Управление взаимодействием запускаемых с терминала программ осуществляется модулем дисциплины обслуживания линии связи, т. е. некоторым ПО, с помощью которого можно назначать специальные символы терминала и изменять его характеристики.
Вход с терминала в BSD-системах (в Linux реализован аналогично).
Когда мы запускаем систему, система создает несколько терминалов. Терминалы являются процессами и запускаются fork'ом.