
- •Республики казахстан
- •Республики казахстан
- •Астана 2012
- •Республики казахстан
- •1. Сведения о преподавателе:
- •2. Характеристика дисциплины
- •3. Система оценки знаний студентов
- •4. Тематический план дисциплины Распределение часов по видам занятий Очная форма обучения
- •5. Содержание учебной дисциплины
- •6. Учебно-методическое обеспечение дисциплины
- •6.1 Список рекомендуемой литературы
- •6.2 Программное и мультимедийное сопровождение учебных занятий:
- •Программа обучения по дисциплине (Syllabus) для студента
- •Время и место проведения учебной дисциплины (определяется в соответствии с утвержденным расписанием: _согласно штатному расписанию,
- •Предварительные обязательные курсы (пререквизиты):
- •Характеристика дисциплины
- •План изучения дисциплины
- •Список основной и дополнительной литературы
- •Контроль знаний
- •Политика учебной дисциплины
- •Методические рекомендации по изучению учебной дисциплины
- •Лекционный комплекс лекция №1 Основные понятия. Определение ос, задачи и функции ос
- •Лекция №2 Классификация операционных систем
- •Лекция №3 Аппаратная зависимость и переносимость операционных систем
- •Лекция №4 Архитектура операционных систем
- •Лекция №5 Процессы и потоки
- •Лекция №6 Организация параллельных взаимодействующих процессов
- •Лекция №7 Подсистема управления процессами и потоками
- •Лекция №8 Управление памятью
- •Лекция №9 Сегментная, страничная и сегментно-страничная организация памяти
- •Лекция №10 Файловые системы.
- •Матрица прав доступа
- •Отображаемые в память файлы
- •Лекция №11 Структура каталогов
- •Физическая организация файла
- •Лекция №12 Управление вводом-выводом
- •Лекция №13 Взаимодействие драйверов с программной и аппаратной средой
- •Лекция №14 Поддержка широкого спектра драйверов и простота включения нового драйвера в систему
- •Лекция №15 ос для рабочих групп и ос для сетей масштаба предприятия
- •Планы семинарских (практических) занятий и методические рекомендации по подготовке к семинарским занятиям
- •Практическая работа № 1
- •Практическая работа № 2
- •Практическая работа №3.
- •Практическая работа № 4
- •Практическая работа № 5
- •Практическая работа № 6
- •Практическая работа № 7
- •Практическая работа № 8
- •Практическая работа № 9
- •Практическая работа №10
- •Материалы для самостоятельной работы обучающегося
- •Задания для срс.
- •Глоссарий
- •Материалы по контролю и оценке учебных достижений обучающихся (письменные контрольные задания, тестовые задания; перечень вопросов для самоподготовки, экзаменационных вопросов и др.);
- •Лист регистрации изменений и дополнений
Практическая работа № 5
Моделирование работы интерпретатора
Цель работы
Практическое освоение средств управления ресурсами ОС UNIX на основе разработки программы, моделирующей работу интерпретатора в плане создания процессов, реализующих команды в командной строке, их синхронизации и взаимодействию по данным.
Содержание работы
Изучить программные средства наследования дескрипторов файлов (системные вызовы dup(), fcntl()).
Ознакомиться с заданием к практической работе.
Выбрать набор системных вызовов, обеспечивающих решение задачи.
Для указанного варианта составить программу на языке Си, реализующую требуемые действия.
Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.
Методические указания
При выполнении операции перенаправления ввода-вывода важным моментом является наследование пользовательских дескрипторов, осуществляемое с помощью системных вызовов dup() и fcntl().
Системный вызов dup() обрабатывает свой единственный параметр как пользовательский дескриптор открытого файла и возвращает целое число, которое может быть использовано как еще один пользовательский дескриптор того же файла. С помощью копии пользовательского дескриптора файла к нему может быть осуществлен доступ того же типа и с использованием того же значения указателя записи-чтения, что и с помощью оригинального пользовательского дескриптора файла.
Системный вызов fcntl(), имеющий формат
int fcntl(int fd, char command, int argument);
выполняет действия по разделению пользовательских дескрипторов в зависимости от пяти значений аргумента command, специфицированных в файле fcntl.h. Например, при значении второго аргумента, равного F_DUPFD, системный вызов fcntl() возвращает первый свободный дескриптор файла, значение которого не меньше значения аргумента argument. Этот пользовательский дескриптор файла должен быть копией пользовательского дескриптора файла, заданного аргументом fd.
С помощью системных вызовов dup() и fcntl() пользовательские программы, а также и интерпретатор команд Shell реализуют каналы и переназначение стандартного ввода и стандартного вывода на файл. Пусть, например, некоторая программа prog читает данные из стандартного входного потока и выводит результаты в стандартный выходной поток. Для того, чтобы та же программа читала данные из файла aa.txt, а осуществляла вывод в файл bb.txt, необходимо выполнить:
#include <fcntl.h> ............... int fd, fd2; fd = open("aa.txt", O_RDONLY); close(0); fcntl(fd,F_DUPFD,0); fd = open("bb.txt", O_WRONLY | O_CREAT); close(1); fcntl(fd2, F_DUPFD, 1); execlp("prog", "prog", 0);
Интерпретатор Shell представляет собой обычную, с точки зрения пользователя, программу, которая в ходе своего функционирования создаёт процессы, реализующие простые команды командного языка, выполняет перенаправление ввода-вывода, строит программные каналы между командами и т.д. Например, схему обработки командной строки
cat < a.txt | sort | pr
интерпретатором команд, опуская детали, связанные с наследованием дескрипторов файлов, можно представить в виде:
Варианты заданий
Составить программу, моделирующую работу Shell-интерпретатора при обработке командной строки, указанной в варианте. При реализации программы путём выдачи сообщений информировать обо всех этапах ее работы (создан процесс, выполнение команды закончено и т.д.).
(cc pr1.c & cc pr2.c) && cat pr1.c pr2.c > prall.c.
wc -c < a.txt & wc -c < b.txt & cat a.txt b.txt | wc -c > c.txt.
who | wc -l & ps | wc -l.
tr -d "[p-z]" < a.txt | wc -c & wc -c < a.txt.
ls -la > a.txt & ps > b.txt; cat a.txt b.txt | sort.
ls -lisa | sort | wc -l > a.txt.
cat a.txt b.txt c.txt | tr -d "[a-i]" | wc -w.
ls -al | wc -l && cat a.txt b.txt > c.txt.
tr -d "[0-9]" < a.txt | sort | uniq > b.txt.
ls -al | grep "April" | wc -l > a.txt.