- •На курсовий проект (роботу) студента
- •К алендарний план
- •1 Постановка задачи
- •2 Выбор архитектуры вычислительной системы
- •3 Проектирование командного языка ос
- •4 Определение состава и общей структуры системы
- •5 Формирование базы данных ос
- •6 Программная реализация
- •7 Определение состава и общей структуры ос
3 Проектирование командного языка ос
При проектировании командного языка рекомендуется выделить основное множество команд, подлежащих дальнейшей реализации в проекте. Дополнительные сервисные команды представить только в таблице команд. Командный язык ОС включает:
- интерактивные команды;
- системные вызовы;
- язык пакетных файлов.
3.1 Интерактивные команды
Интерактивные команды вводятся пользователем с терминала:
основные: начало/завершение сеанса работы, порождение/ уничтожение процесса, создание/удаление элементов файловой структуры, копирование файлов, организация защиты, перенос системы;
дополнительные: установка и модификация параметров процессов/ресурсов, информационные команды.
При разработке интерактивных команд следует определить правила именования ресурсов системы: физических и логических устройств, каталогов, файлов, процессов и др.
Для обеспечения запуска нескольких процессов с одного терминала необходима команда асинхронного запуска процесса, не требующая ожидания завершения текущего процесса перед запуском следующего. Такие команды, как правило, используют для установки фоновых процессов.
Правила именования:
физические устройства именуются кодом из латинских букв и цифр;
логические диски именуются буквами латинского алфавита (‘a’…’z’);
файлы, каталоги и процессы именуются произвольными именами, состоящих из любых букв и цифр в произвольном порядке (имена содержащие пробелы берутся в двойные кавычки).
Список нтрективных команд приведен в таблице 3.1.
Таблица 3.1 – Список интерактивных команд
Мнемоника |
Наименование |
Параметр 1 |
Параметр 2 |
Описание |
||||||
Тип |
Диапазон значений |
Значение по умолчанию |
Тип |
Диапазон значений |
Значение по умолчанию |
|||||
on |
Начало сеанса работы |
- |
- |
- |
- |
- |
- |
Начало сеанса работы
|
||
ShutDown |
Завершение работы компьютера
|
- |
- |
- |
- |
- |
- |
Завершение работы компьютера |
||
П родолжение табл. 3.1 |
||||||||||
CreateProcess |
Создать процесс |
строка |
Буквы (рус./лат.) и цифры |
- |
число |
0-32 |
8 |
Создание и фоновый запуск процесса с заданным именем и приоритетом (параметр 1 и 2 соответственно) |
||
MakeActive |
Переключиться на процесс |
строка |
Буквы (рус./лат.) и цифры |
- |
- |
- |
- |
Переключиться на созданный процесс для непосредственной работы |
||
SetPriority |
Установить приоритет процесса |
строка |
Буквы (рус./лат.) и цифры |
- |
число |
0-32 |
8 |
Устанавливает приоритет для процесса c заданным именем |
||
DestroyProcess |
Уничтожить процесс |
строка |
Буквы (рус./лат.) и цифры |
- |
- |
- |
- |
Принудительное уничтожение процесса с заданным именем |
||
mkdir |
Создать каталог |
строка |
Буквы (рус./лат.) и цифры |
- |
строка |
a, r, h, s, - |
a--- |
Создать каталог с заданным именем и атрибутами (а – архивный, r – только чтение, h – скрытый, s – системный) (параметр 1 и 2 соответственно) |
||
rmdir |
Удалить каталог |
строка |
Буквы (рус./лат.) и цифры |
- |
- |
- |
- |
Удалить каталог с заданным именем |
||
Create |
Создать файл |
строка |
Буквы (рус./лат.) и цифры |
- |
строка |
a, r, h, s, - |
a--- |
Создать файл с заданным именем и атрибутами |
||
del |
Удалить файл(ы) |
строка |
Буквы (рус./лат.) и цифры, *, ? |
- |
- |
- |
- |
Удалить файл с заданным именем, (* - любые символы, ? – любой символ) |
||
copy |
Копирование |
строка |
Буквы (рус./лат.) и цифры, *, ? |
- |
строка |
Буквы (рус./лат.) и цифры |
- |
Копировать файлы и каталоги из источника в назначение |
||
sys |
Создать системный файл |
символ |
'a'…'z' |
- |
- |
- |
- |
Записать системные файлы на диск |
||
attrib |
Установка атрибутов |
строка |
Буквы (рус./лат.) и цифры, *, ? |
- |
строка |
a, r, h, s, - |
a--- |
Установить(сбросить) атрибуты файлов и каталогов (без параметров выводит информацию об атрибутах всех файлов) |
||
rights |
Право на доступ |
строка |
Буквы (рус./лат.) и цифры, *, ? |
- |
строка |
Буквы (рус./лат.) |
- |
Устанавливает разрешение на доступ к файлам и каталогам (параметр 1 – маска файлов, параметр 2 – группа пользователей, имеющих право на доступ) |
||
info |
информация |
строка |
Все буквы и цифры (первая буква) и * |
- |
строка |
dir, file, proc |
Proc |
Выводит информацию на экран о состоянии процесса или о директории, или о файле |
3.2. Системные вызовы
Системные вызовы - это обращение к средствам ОС из выполняемых процессов. Эти средства ОС часто бывают скрыты от конечных пользователей. Для обеспечения переносимости программ работа в среде языков программирования в некоторой степени инвариантна по отношению к текущей операционной системе. Однако реализация алгоритмического языка для определенной операционной системы использует системные вызовы. Например, операторы ввода/ вывода в конечном счете транслируются в последовательности системных вызовов.
Основные системные вызовы: порождение и уничтожение процессов (дочерних), взаимодействие процессов, выделение и освобождение дополнительной оперативной памяти, ввод/вывод для физических устройств, файловый ввод/вывод. Как правило, ввод /вывод на физическом уровне является привилегированным средством и недоступен для прикладных процессов в целях обеспечения защиты информации на устройствах. Список системных вызовов приведен в таблице 3.2.
Таблица 3.2 – Список системных вызовов
Системная функция |
Наименование |
Параметр 1 |
Параметр 2 |
Описание |
||
Тип |
Диапазон значений |
Тип |
Диапазон значений |
|||
sistp |
Ожидать сообщение от процесса |
строка |
Буквы |
- |
- |
Ожидание сообщения от процесса |
kill |
Уничтожить процесс |
строка |
Буквы |
- |
- |
Принудительное уничтожение дочернего процесса64 |
shmget |
Выделить память |
число |
0.. 216 |
число |
0..max |
Выделение памяти с 1 параметром – адрес и 2 параметром – кол-во (max – системная переменная, хранящая максимальное значение выделяемой памяти) |
free |
Освободить память |
число |
0…216 |
- |
- |
Освобождение памяти по указателю (параметр – адрес) |
open |
Открыть файл |
строка |
Буквы |
число |
0..216 |
Открыть файл ([/r]-открыть для чтения; [/w]-открыть зля записи;[/p]-пароль для доступа;) 1 параметр – путь. имя, 2 параметр - адрес |
close |
Закрыть файл |
число |
0.. 216 |
- |
- |
Закрыть файл (параметр – адрес) |
setpos |
Установить позицию файла |
число |
0.. 216 |
число |
0..232 |
Установить позицию в файле, заданным своим дескриптором (1 параметр – адрес файла, 2 параметр - позиция) |
write |
Запись байта в файл |
число |
0.. 216 |
число |
0..255 |
Записать байт в файл и сместить позицию (1 параметр – адрес, 2 параметр – на сколько сместить позицию) |
read |
Чтение байта из файла |
число |
0.. 216 |
число |
0..255 |
Прочитать байт из файла и сместить позицию |
3.3 Язык пакетных файлов
Язык пакетных файлов должен обеспечивать последовательный запуск процессов, условные и безусловные переходы, организацию циклов и вложенных параметрических конструкций. В простейшем случае командный файл представляет собой последовательность интерактивных команд, записанную в специальный файл, предназначенный для автоматического исполнения. Для организации условных переходов в командных файлах необходима информация об успешности завершения процесса. Для этих целей вводится понятие кода завершения процесса, указываемого в системном вызове завершения (уничтожения) процесса. Зарезервированная переменная позволяет анализировать код завершения в командном файле. В командные файлы также включают средства генерации имен и вызова вспомогательных командных файлов с указанием параметров. Команды пакетных файлов приведены в таблице 3.3.
Таблица 3.3 – Команды пакетных файлов
Мнемоника |
Наименование |
Параметр 1 |
Параметр 2 |
Описание |
||
Тип |
Диапазон значений |
Умолчания |
||||
if_proc_done <имя> |
переход если процесс завершен |
строка |
- |
- |
- |
если указанный процесс завершен то выполняется следующий блок команд |
execute <N> <имя> |
запуск процесса |
число |
[0;31] |
10 |
строка |
запуск процесса с указанным приоритетом |
while_work <имя> |
цикл, пока активен процесс |
строка |
- |
- |
- |
пока процесс активен, выполняется следующий блок команд |
goto <N> |
переход на строку |
число |
1 |
|
|
переход на указанную строку пакетного файла |
pause <сообщение> |
пауза выполнения и вывод сообщения |
строка |
- |
«Нажмите любую клавишу…» |
- |
приостанавливает выполнение команд, выводит сообщение на экран и ожидает нажатия любой клавиши |