Виртуальные команды ввода-вывода
XalionВ прошлой статье мы разобрали как ОС может запустить внутри себя несколько других. Этот способ называется виртуализацией.
Команды ввода-вывода на уровне операционки называются виртуальными, они отличаются от команд ввода-вывода на уровне ISA по двум причинам:
- Чтобы не перезаписать или удалить сектора памяти с данными операционной системы и не сломать её.
- Чтобы файловые операции проходили в фоновом режиме.
Для упрощения ввода-вывода, в операционную систему добавили объединение байтов — файл. С файлом работают виртуальные команды ввода-вывода.
Файл в домашнем компьютере
Для пользователя, файл — текст, картинка или экселевская таблица.
Файлы хранят однотипные или смешанные данные:
вордовский документ со списком покупок — однотипные данные,
презентация — смешанные данные.
Для операционной системы, файл — группа байтов в памяти.
ОС знает какие группы относятся к конкретным файлам.
Чтобы работать с файлом виртуальные команды используют несколько системных вызовов: открытия, чтения, записи и закрытия файла.
Системные вызовы мы разбирали в вводной статье про ОС.
Например, программе нужно прочитать данные пользователя из вордовского документа. Процесс чтения будет выглядеть так:
- Вызов открытия файла найдёт для ОС файл на жёстком диске и загрузит в оперативку информацию для открытия этого файла.
- Файл открыт, начинает работать вызов чтения файла.
Он принимает три параметра:
Какой файл нужно считать,
Откуда считать файл,
Сколько весит файл.
На открытые файлы ставится указатель, он показывает какой байт читать дальше. Когда команда чтения из файла закончит свою работу, в указатель добавится количество считанных байт. Так сделали, чтобы последовательные команды чтения из файла не считывали одни и те же байты.
Файл в мейнфреймах
Обычно в мейнфреймах стоят UNIX подобные ОС, но в некоторых до сих пор стоят старые операционки, например OS/390 1995 года. В старых мейнфреймовских ОС, структура файла отличается от структуры в домашних ОСках.
Для мейнфрейма, файл — последовательность логических записей.
Каждая запись имеет свою структуру, например, запись может состоять из двух символьных строк, двух целых чисел и одного логического значения.
![](/file/76296607764cdc7ba5588.png)
Для считывания файла системный вызов должен получить два параметра: какой файл считывать и куда его считывать.
Можно передать третий параметр — какую запись из файла нужно считать. Например: файл хранит данные работников офиса, одна логическая запись — один работник. Если пользователю нужны данные по одному работнику, а не по всем, команда чтения найдет его запись и прочитает. Системные вызовы находят записи по ключу или по их месту в файле.
В следующей статье повторим уровень ОС и соберем все статьи по теме.