- •Ос в общей структуре компьютера.
- •История операционных систем.
- •Классификация современных ос. Задачи современных ос.
- •6. Понятие процесса – ключевое понятие ос.
- •8. Трансляторы: компиляторы и интерпретаторы.
- •9. Иерархия зу (запоминающих устройств).
- •10. Управление оперативной памятью (оп). Менеджер памяти; swapping; виртуальная память.
- •11. Модели организации виртуальной памяти.
- •12. История ос unix.
- •13. Общая архитектура unix. Основные подсистемы ядра.
- •14. Пользовательская среда unix.
- •Командный интерпретатор shell.
- •16. Система каталогов в oс unix. Управление с помощью команд языка Bourn shell.
- •17. Управление файлами с помощью команд языка Bourn shell. Перенаправление ввода/вывода.
- •19. Обработка аргументов командной строки. Переменные окружения.
- •20. Пользователь и группа. Права доступа к файлу.
- •21. Системные вызовы и функции стандартных библиотек. Обработка ошибок.
- •22.Структура программы на языке с. Параметры главной функции (пример).
- •23. Файловая система ос unix: монтирование, индексные дескрипторы, жесткие и символические ссылки, файлы устройств.
- •24.Системные вызовы для работы с файлами
- •25. Понятие «процесс» в ос unix. Контекст процесса; свойства процесса; состояние процесса.
- •26.Создание процессов и упр-е ими.
- •27. Запуск внешней программы
- •29.Общая классификация средств взаимодействия процессов в ос unix.
- •30.Иерархия процессов в ос unix. Понятие сеанса. Фоновые процессы.
- •31.Каналы – средства взаимодействия процессов. Неименованные каналы. Организация конвейера (пример программы).
- •33.Сигналы как средство взаимодействия процессов в ос unix. Диспозиция сигналов.
- •34.Ограничения для процесса в ос unix (по ресурсам). Связь со свойствами процесса.
- •36.Отображение файлов в виртуальное адресное пространство. Разделяемая память.
- •37. Взаимодействие процессов через псевдотерминал.
- •38. Недостатки потокового взаимодействия процессов. Средства System vipc. Пространство имен. Общие принципы работы со средствами System vipc.
- •39. Организация очереди сообщений в ос unix. Структура сообщения. Отправка и принятие сообщений.
- •40.Семафоры, как средство взаимодействия процессов System vipc. Понятие атомарной операции. Массив семафоров.
- •41.Разделяемая память, как средство взаимодействия процессов System vipc.
- •42.Взаимодействие по сети. Понятие протокола. Семейства адресации и типы взаимодействия. Создание сокета в ос unix.
- •45. Потоковые сокеты. Клиент – серверная модель.
- •46. Проблема очередности действий и ее решение.
- •47. Процессы-демоны. Система журнализации.
- •48. Загрузка и жизненный цикл в ос unix.
- •49. Взаимоисключения. Понятие критической секции. Устаревшие подходы к организации взаимного исключения.
- •50.Поддержка взаимоисключения на уровне ос. Мьютексы и семафоры (Дейкстры). Команда ассемблера tsl.
- •51.Проблема тупиков. Граф ожидания
- •52. Нити исполнения (pthreads) в ос unix. Мьютексы pthreads.
- •53.Графический интерфейс в ос unix. Базовые принципы построения x_window.
- •54.Файловая подсистема. Общая структура. Методы выделения дискового пространства. Управление дисковым пространством.
- •55.Файловая подсистема. Структура файловой системы на диске. Реализация директорий. Поиск в директории (хеширование).
- •56.Подсистема ввода/вывода. Схема взаимодействия подсистем ос. Понятие драйвера. Типы драйверов.
16. Система каталогов в oс unix. Управление с помощью команд языка Bourn shell.
Система каталогов в Unix отличается от windows. Отсутствуют буквы, обозначающие устройства. Путь прописывается через прямой слеш. После входа в систему, оказываемся в домашнем каталоге – место для хранения личных файлов. Чтобы узнать имя текущего каталога вводят команду pwd. Домашний каталог – личное пространство. Узнать, какие файлы находятся в текущем каталоге можно с помощью команды ls. Имеет несколько ключей: ls –lrt
t – сортировка по времени
r – сортировка в обратном порядке
cd – смена каталога, если без параметров, то переход в домашний каталог. cd/ - в корневой, cd bin – переход в bin, находящийся в текущем. cd.. – на уровень выше.
cp –r dir1 dir2 - все содержимое dir1 рекурсивно копируется в dir2. Если dir2 существует, то внутри него будет создан dir1.
mv /dir1 /dir2 – переименовать dir1 в dir2.
rm –r /dir2 – удаление dir2 и все, что в нем (с каталогами работают рекурсивно
mkdir work – создание каталога в текущем
rmdir work – удаление пустого каталога
17. Управление файлами с помощью команд языка Bourn shell. Перенаправление ввода/вывода.
С каждым файлом в Unix связано 12-битное слово, называемое правами доступа к файлу. Младшие 9 бит этого слова объединены в три группы по три бита; каждая группа задает права доступа для владельца файла, для его группы и для всех остальных пользователей. Три бита в каждой группе отвечают за право на чтение, запрос и использование файла.
Чтобы узнать права доступа к тому или иному файлу, можно воспользоваться командой ls –l, например:
$ ls -l /bin/cat
-rwxr-xr-x l root root 14232 Feb 4 2003 /bin/cat
Расположенная в начале строки группа символов -rwxr-xr-x показывает тип файла (первый символ; минус означает, что мы имеем дело с обыкновенным файлом, буква d означала бы каталог и т.п.) и права доступа, соответственно, для владельца (в данном случае rwx, т.е. чтение, запись и исполнение), группы и всех остальных (в данном случае r-x , т.е. права на запись отсутствуют). Таким образом, файл /bin/cat доступен любому пользователю на чтение и исполнение, но модифицировать его может только пользователь root (т.е. администратор).
1 – количество ссылок. (у каталога минимум 2: ссылка на себя и на родителя)
root – имя владельца файла, название группы, к которой относится владелец.
14232 – размер файла в байтах
Feb 4 2003 – дата и время последнего изменения
/bin/cat – имя файла
Можно записать слово прав доступа к файлу в виде восьмеричного числа (3 знака восьмеричная цифра), трехзначного (владелец, группа, остальные пользователи) каждый знак в этом трехзначном восьмеричном числе формируется как сумма прав: 4 права на чтение, 2 права на запись, 1 на использование (из двоичной триады): (111)2=20+21+22=(1+2+4)10.
Например, 7 = 1 + 2 + 4 права r w x: 4 2 1
6 = 0 + 2+ 4 права r: 4 2 0
В трехзначном числе задания прав: 744 для владельца определены все права, для группы только чтение, для остальных пользователей только на чтение.
Для использования прав доступа к файлам используется команда chmod, которая позволяет задать новые права доступа в виде восьмеричного числа, например: $ chmod 744 filel.c.
cp f1 f2 – копирует содержимое f1 в f2, если f2 уже существует
-I – для запроса на подтверждение, если не существует, то тогда создаст новый f2
cp f1 f2 /active – копирует f1 и f2 в каталог /active
mv f1 f2 – переименование f1 в f2
mv f1 /dir1 – перемещение f1 в dir1
mv f1 /dir1/f2 - перемещение f1 в dir1 и переименование в f2
rm f1 f2 – удаление f1 и f2
touch f1 – создание файла f1
cat f1 – вывод содержимого файла на экран
cat > f1 – создание f1 с вводом информации с клавиатуры
wc f1 – подсчет строк, слов и символов в файле, если – l – только строки
Перенаправление ввода/вывода.
В Unix каждая программа имеет поток стандартного ввода, стандартного вывода и поток сообщений об ошибках. Им присваиваются дескрипторы – числовые значения, являющиеся указателями на соответствующий поток. Для ввода – 0, вывода – 1, вывода ошибок – 2. Перенаправлять потоки можно, используя эти стандартные дескрипторы.
Осуществляя обмен данными через стандартные потоки, большинство программ не делает предположения о том, с чем связан поток. Это позволяет использовать одни и те же программы как для работы с терминалом, так и с файлами.
Интерпретатор Bourne Shell предоставляет возможность управления вводом/выводом запускаемых программ. Для перенаправления используются специальные символы: <, >, >>, >$, |
cmd1 > file1 – запустить программу cmd1, направив ее вывод в file1.
cmd2 < file2 – запустить программу cmd2, предоставив ей содержимое file2 в качестве стандартного потока ввода, если файл не существует – произойдет ошибка.
cmd3 > file1 < file2 – запустить cmd3 перенаправив как ввод, так и вывод
cmd1|cmd2 – запустить одновременно cmd1 и cmd2, подав данные со стандартного вывода cmd1 на стандартный ввод cmd2 по конвеерую
cmd4 2 >errfile – направить поток об ошибках при выполнении cmd4 в errfile
cmd5 2 >&1|cmd6 – объединить потоки стандартного вывода и вывода ошибок программы cmd5 и направить все это на стандартный ввод cmd6.
Подавить ввод ошибок:
run 2>/dev/null
/dev/null – псевдоустройство, удаляющее все введенные в него символы.
Управление процессами на уровне интерпретатора. Командные файлы (пример программы).
Список процессов, выполняющихся в настоящий момент:
ps – выдает список процессов, запущенных в данном сеансе работы:
PID TTY TIME CMD
2199 pts/5 00:00:00 bsh
TTY – управляющий терминал процесса.
-ax – список всех существующих процессов.
-axu - список всех существующих процессов + информация о владельцах.
Снять процесс можно сигналами
Kill 2736 – снимает процесс с указанным номером, если процесс не предпринял специальных мер.
Kill -9 2736 – уничтожает процесс в любом случае.
Система управления заданиями. Каждая команда в системе, запущенная со своего терминала, называется заданием. Оно может выполнять в фоновом или интерактивном режиме
inf.j &
Результат: [1] 9112; [1] – номер задания, 9112 – PID задания.
В команде управления заданиями можно указать номер задания.
stop %1 – остановить 1-ое задание
job – выводит информацию о приостановленных и фоновых заданиях с указанием их номеров.
Ctrl + Z – приостановить задачу.
Организация командных файлов. Скрипт – обычный текстовый файл, в котором записаны инструкции интерпретатора. Фактически это файл с программой для выполнения. Первой командой должна быть команда обращения к интерпретатору: #!/bin/sh – тогда последующий текст скрипта будет интерпретироваться именно Bourne Shell.
Язык Bourne Shell поддерживает работу с переменной. Чтобы присвоить ей значение надо написать оператор присваивания: var=value. В имени переменной и вокруг знака присваивания не должно быть пробелов, иначе знак = пойдет как один из параметров командной строки, что не правильно.
Вывести значение переменной на экран можно с помощью команды echo. Для обращения к содержимому переменной требуется спецсимвол $
echo $MyFile – вывод содержимого переменной на экран.
При необходимости скомпоновать слитый текст из значений переменных можно, если имена переменных заключить в {}
I=10
echo ${I}abc вывод: 10abc
cmd1; cmd2 Последовательное выполнение команд cmd1 & Выполнение в фоновом режиме (демон)
cmd1 && cmd2 Выполнение cmd2 в случае успешного завершения cmd1
cmd1 || cmd2 Выполнение cmd2 в случае ненормального завершения cmd1
Для выполнения арифметических действий – двойные круглые скобки:
I=$(($I+5))
Встроенная функция test осуществляет проверку выполнения условия, если условие истина, команда имеет нулевой успешный код возврата, иначе 1 – неуспех. Синоним команды test – квадратные скобки [].
Условия проверки файлов.
-f file Файл "file" является обычным файлом. -d file Файл "file" является каталогом -c file Файл "file" является специальным файлом -r file Файл "file" имеет разрешение на чтение -w file Файл "file" имеет разрешение на запись -x file Файл "file" имеет разрешение на исполнение -s file Файл "file" не пустой Условия проверки строк string1=string2 Строки string1 и string2 совпадают string1!=string2 Строки string1 и string2 не совпадают. -n string1 Строка string1 существует -z string1 Строка string1 не существуетУсловия операций с целыми числами
x -eq y x равно y
x -ne y x не равно y
x -gt y x больше y x -ge y x больше или равно y
x -lt y x меньше y x -le y x меньше или равно y В этом случае команда test воспринимает строки именно как целые числа. Нулевому значению так же соответствует пустая строка. Логические операции в контексте test ! (not) Логическое "НЕ" -o (or) Логическое "ИЛИ" -a (and) Логическое "И" Условный оператор "if" Общий вид использования условного оператора if представляется следующим образом: if <условие> then <список команд> [ elif <условие> then <список> ] [else <список> ] fi Выражения, выделенные в квадратных скобках, являются необязательными. Т.е. можно представить наиболее употребительную "порезанную" модификацию условного оператора: if <условие> then <список команд> fi В этом случае если <условие> выполнено (код завершения 0 ) то выполняется <список команд>. В противном случае <список команд> пропускается. Оператор вызова case В общем случае синтаксис оператора case выглядит следующим образом: case <строка> in шаблон1) cmd1 cmd2 ........ ;;
.... *) cmdn ........ ;; esac Значение <строка> сравнивается с шаблонами, по порядку. Если было найдено совпадение, тогда выполняются команды соответствующего раздела. Следует отметить, что шаблоны допускают использование масок. Если совпадения не было найдено, тогда выполняются команды из раздела с шаблоном "*" ( аналогично default селектора switch в Си).
Оператор цикла с перечислением for Синтаксис оператора for в общем случае имеет следующую структуру: for <имя> [in список значений] do <список команд> done Фрагмент, выделенный в квадратные скобки, может отсутствовать. Оператор for обеспечивает выполнение цикла столько раз, сколько слов в списке значений. При этом переменная <имя> принимает последовательно значения слов из списка. Сам по себе список может формироваться из вывода других команд. Если же список отсутствует, тогда <имя> принимает значения, переданные как позиционные параметры скрипта. Оператор цикла с истинным условием while Синтаксис оператора while в общем случае имеет следующую структуру: while <условие> do <список команд> done Оператор while предпочтителен тогда, когда не известен заранее список значений параметров. Список команд будет выполняться в цикле до тех пор, пока сохраняется истинность условия. При первом входе в цикл условие должно выполняться. Оператор цикла с ложным условием until Синтаксис оператора until в общем случае имеет следующую структуру: until <условие> do <список команд> done Список команд будет выполняться в цикле до тех пор, пока сохраняется ложность условия. При первом входе в цикл условие не должно выполняться. Следует заметить, что условие цикла проверяется на ложность после каждого, в т.ч. и первой выполненной команды в цикле.
Команда printf берет данные и передает их в поток вывода stdout с возможностью форматирования.
printf “\n Hello_world\n\a” – вывод на новой строке с звуковым сигналом.
Для считывания входных данных – команда read – из потока stdin и если ввод перенаправлен, то можно из файла.
Скрипт сохраняют в файле *.sh и запускают на выполнение в терминале: ./*.sh