Контрольная работа – Операционные системы
Оглавление
Введение 2
Задание 1 3
Работа с файловой системой операционной системы UNIX 3
Содержание отчета по контрольной работе 8
Требования к оформлению 9
Может быть интересно
Введение
В учебном пособии представлены контрольные работы по практикуму, который сопровождает курс «Операционные системы».
Курс посвящен принципам построения современных операционных систем, его предметом являются операционные системы FreeBSD и Windows 8 как примеры наиболее распространенных операционных систем.
Программа курса составлена с учетом того, что студенты уже знакомы с объектно-ориентированным языком С/С++, так как данный язык программирования был разработан в системе UNIX. Все примеры программ для работы с системными объектами в FreeBSD приведены на языке С.
Курс посвящен изучению основных функций операционной системы и их практической реализации в системах FreeBSD и Windows. Подробно изучается механизм взаимного исключения и синхронизации процессов, настройки операционной системы, создания командных скриптов, установки операционной системы и перекомпиляции ядра в системе FreeBSD. Система FreeBSD более подробно рассматривается на практике, так как, как правило, студенты менее знакомы с ней до изучения курса «Операционные системы».
Для первого задания контрольной работы представлены десять вариантов одного уровня сложности.
Задание 1
Работа с файловой системой операционной системы UNIX
Цель работы: познакомиться с файловой системой ОС UNIX, изучить механизмы ее функционирования, основные элементы файловой системы: суперблок, массив индексных дескрипторов файлов, типы файлов, список свободных индексных дескрипторов файлов, список свободных блоков данных.
Ход работы
Познакомиться с файловой системой ОС UNIX и программными средствами работы с ней.
Ознакомиться с заданием к работе.
Для своего варианта составить программу на языке Си, реализующую требуемые действия.
Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.
Ответить на контрольные вопросы.
Краткий обзор
Все файлы ОС UNIX в соответствии с их типом могут быть отнесены к одной из следующих групп: обычные файлы, каталоги, специальные файлы устройств, каналы, символические ссылки.
Обычный файл представляет собой совокупность блоков диска, входящих в состав файловой системы ОС UNIX. В указанных блоках может быть произвольная информация.
Каталоги представляют собой файлы особого типа, каждый элемент каталога состоит из двух полей: поля имени файла и поля, содержащего указатель на дескриптор файла, где хранится вся информация о файле: дата создания, размер, код защиты, имя владельца и т.д. В любом каталоге содержится, по крайней мере, два элемента, содержащие в поле имени файла имена “.” и “..”. Элемент каталога, содержащий в поле имени файла контекст “.”, в поле ссылки содержит ссылку на дескриптор файла, описывающий этот каталог. Элемент каталога, содержащий в поле имени файла контекст “..”, в поле ссылки содержит ссылку на дескриптор файла, в котором хранится информация о родительском каталоге текущего каталога. Перед именем каталога, как правило, стоит косая черта /. Косая черта в начале имени обозначает “корневой каталог”, который является, точкой, в которой “склеены” между собой все диски системы. В ОС UNIX никогда не обращаются к самому диску, а всегда – к подкаталогам корневого каталога.
Специальные файлы – это файлы, каждому из которых ставится в соответствие внешнее устройство, поддерживаемое ОС UNIX и имеющее специальную структуру. Его нельзя использовать для хранения данных, как обычный файл или каталог. В то же время над специальным файлом можно производить те же операции, что и над обычным файлом: открывать, вводить и/или выводить информацию и т.д. Результат применения любой из этих операций зависит от того, какому конкретному устройству соответствует обрабатываемый специальный файл, однако в любом случае будет осуществлена соответствующая операция ввода-вывода на внешнее устройство, которому соответствует выбранный специальный файл.
Четвертый вид файлов – каналы. Программные каналы представляют собой средство обмена данными между процессами в UNIX.В этом случае для выполнения обмена используются не команды чтения/записи в память, а функции чтения/записи в файл. Программный канал считается файлом, для работы с ним используются те же операции, что для последовательного доступа к файлу: открытие, чтение, запись, закрытие. Однако источником читаемых данных служит не файл на диске, а процесс, выполняющий запись в другой конец канала. Данные, записанные одним процессом, но пока не прочитанные другим, хранятся в системном буфере. Если же процесс пытается прочесть данные, которые пока не записаны другим процессом, то процесс-читатель блокируется до получения данных.
В таблице 1 приведены системные функции ОС UNIX для работы с файловой системой.
Таблица1
Функции для работы с файловой системой
Возвращают дескриптор файла Преобразуют имя в описатель Назначают inode Работают с атрибутами Ввод/вывод из файла Работают со структурой ФС Управляют деревьями
Open, creat, dup, pipe, close Open, creat, chdir, chmod, stat, mkfifo, mound, mknod, link, unmount, unlink, chown Creat, link, unlink, mknod Chown, chmod, stat Read, write, lseek Mount, unmount Chmod, chown
Остановимся на тех из них, которые требуются для выполнения работы. Для получения информации о типе файла необходимо воспользоваться системными вызовами stat() (fstat()). Формат системных вызовов stat() (fstat()):
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char *name, struct stat *stbuf)
int fstat(int fd, struct stat *stbuf)
Оба системных вызова помещают информацию о файле (в первом случае специфицированным именем name, а во втором – дескриптором файла fd) в структурную переменную, на которую указывает stbuf. Вызывающая функция должна позаботиться о резервировании места для возвращаемой информации; в случае успеха возвращается 0, в противном случае -1 и код ошибки в errno. Описание структуры stat содержится в файле <sys/stat.h>. С небольшими модификациями она имеет вид:
struct stat
{
dev_t st_dev; /* device file */
ino_t st_ino; /* file serial inode */
ushort st_mode; /* file mode */
short st_nlink; /* number of links */
ushort st_uid; /* user ID */
ushort st_gid; /* group ID */
dev_t st_rdev; /* device ident */
off_t st_size; /* size of file */
time_t st_atime; /* last access time */
time_t st_mtime; /* last modify time */
time_t st_ctime; /* last status change */
}
Поле st_mode структуры stat содержит флаги, описывающие файл. Флаги несут следующую информацию:
S_IFMT 0170000 – тип файла
S_IFDIR 0040000 – каталог
S_IFCHR 0020000 – байт-ориентированный специальный файл
S_IFBLK 0060000 – блок-ориентированный специальный файл
S_IFREG 0100000 – обычный файл
S_IFFIFO 0010000 – дисциплина FIFO
S_ISUID 04000 – идентификатор владельца
S_ISGID 02000 – идентификатор группы
S_ISVTX 01000 – сохранить свопируемый текст
S_ISREAD 00400 – владельцу разрешено чтение
S_IWRITE 00200 – владельцу разрешена запись
S_IEXEC 00100 – владельцу разрешено выполнение.
Символьные константы, четыре первых символа которых совпадают с контекстом S_IF, могут быть использованы для определения типа файла.
Большинство системных вызовов, работающих с каталогами, оперируют структурой dirent, определенной в заголовочном файле <dirent.h>
struct dirent
{
ino_t d_ino; /* номер индексного дескриптора */
char d_name[DIRSIZ]; /* имя файла */
}
Если файл был стерт, то в поле d_ino записи каталога будет содержаться 0 (именно поэтому I-узлы нумеруются начиная с 1, а не с 0). При удалении файла содержимое его (блоки) уничтожается, I-узел освобождается, но имя в каталоге не затирается физически, а просто помечается как стертое: d_ino=0; поэтому имена с d_ino==0 – это имена уже уничтоженных файлов.
При создании нового имени (creat, link, mknod) система просматривает каталог и использует первый от начала свободный слот (ячейку каталога) где d_ino==0, записывая новое имя в него (только в этот момент старое имя окончательно исчезнет физически). Если пустых мест нет – каталог удлиняется.
Любой каталог всегда содержит два стандартных имени: “.” – ссылка на текущий каталог (на его собственный I-node), “..” – на вышележащий каталог. У корневого каталога “/” оба этих имени ссылаются на него самого (т.е. содержат d_ino==2).
Имя каталога не содержится в нем самом. Оно содержится в родительском каталоге “..”.
Создание каталога выполняется системным вызовом mkdir():
#include <sys/types.h>
#include <sys/stat.h>
int mkdir (char *pathname, mode_t mode);
При удалении каталога необходимо выполнить системный вызов rmdir().
#include <unistd.h>
int rmdir (char *pathname);
Открытие и закрытие каталога выполняется системными вызовами opendir() и closedir():
#include <sys/types.h>
#include <dirent.h>
DIR *opendir (char *dirname);
При успешном открытии каталога системный вызов возвращает указатель на переменную типа DIR, являющуюся дескриптором каталога, определенную в файле <dirent.h> и используемую при чтении и записи в каталог. При неудачном вызове возвращается значение NULL.
#include <dirent.h>
int closedir (DIR *dirptr);
где dirptr – дескриптор каталога.
Для смены каталога служит системный вызов chdir():
#include <unistd.h>
int chdir (char *pathname);
Чтение записей каталога выполняется системным вызовом readdir():
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir (DIR *dirptr);
Системный вызов readdir() по номеру дескриптора каталога возвращает очередную запись из каталога в структуру dirent, либо нулевой указатель при достижении конца каталога. При успешном чтении, указатель каталога перемещается к следующей записи.
Дополнительный системный вызов void rewinddir (DIR *dirptr);переводит указатель каталога к первой записи каталога.
Функция getcwd получает полное имя текущего рабочего каталога и запоминает его в pathbuf. Целый аргумент n определяет максимальную длину для имени директории. Возникает ошибка, если длина имени каталога, включая нулевой символ окончания, превышает n.
#include <direct.h>
char *getcwd(pathbuf,n);
Здесь char *pathbuf – память для path-имени, int n – максимальная длина имени.
Аргумент pathbuf может быть NULL; буфер размером n будет автоматически захватываться посредством malloc и использоваться для хранения path-имени.
Функция getcwd возвращает pathbuf. Возвращаемое значение NULL свидетельствует об ошибке и errno устанавливается в одно из следующих значений:
ENOMEM – памяти недостаточно для размещения n байт (когда аргумент NULL задан как pathbuf).
ERANGE – path-имя длинее, чем n символов.
Для разработки программы необходимо использовать компилятор GCC (GNU Compiler Collection), который входит в дистрибутив UNIX. Для создания исходного кода программ можно воспользоваться любым текстовым редактором (ee, vi и т.д.). После создания файла его необходимо сохранить с расширением .c, затем с консоли набрать команду gcc 1.c (вместо 1.с имя Вашего файла). После этого в каталоге должен появиться файл a.out, который необходимо запустить, чтобы просмотреть результаты работы программы, для этого выполните команду: ./a.out. Компилятор gсс по умолчанию присваивает всем созданным исполняемым файлам имя a.out. Если Вы хотите назвать его по-другому, нужно к команде на компиляцию добавить флаг -o и имя, которым необходимо назвать исполняемый файл: gсс 1.c –o primer. После чего в каталоге появится файл primer, который необходимо выполнить командой ./primer.
Пример программы, которая просматривает текущий каталог и записывает в файл имена всех встретившихся в нем файлов и каталогов:
//Подключение библиотек
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
// Объявление констант имени просматриваемого каталога и файла для записи результата
#define DIRNAME “.”
#define OFNAME “out.log”
int main(void)
{
FILE *ofp;
DIR *dp;
struct dirent *dent;
if( (dp = opendir(DIRNAME)) == NULL) {
//Если открыть каталог не удалось, выводим в файл сообщение об ошибке и возвращаем код возврата равный 1
fprintf(stderr, “opendir: %s: %s\n”, DIRNAME, strerror(errno));
return 1;
}
if( (ofp = fopen(OFNAME, “w”)) == NULL) {
fprintf(stderr, “fopen: %s: %s\n”, OFNAME, strerror(errno));
return 1;
}
// построчно считываем имена файлов из каталога
while(dent = readdir(dp))
// проверка, что имя каталога не равно «.» и «..»
// функция strcmp возвращает 0, если значения сравниваемых строк совпадают
if(strcmp(“.”, dent->d_name) && strcmp(“..”, dent->d_name))
//записываем имя каталога в файл
fprintf(ofp, “%s\n”, dent->d_name);
closedir(dp);
fclose(ofp);
return 0; //код возврата равен 0, функция выполнена без ошибок
}
Вариант задания (необходимо выполнить!)
1. Разработать программу, которая выводит на экран содержимое текущего каталога в алфавитном порядке. Каталоги не выводить.
Контрольные вопросы
Как производится выделение свободных блоков под файл?
Как производится освобождение блоков данных, занятых под файл?
Каким образом осуществляется монтирование дисковых устройств?
Что хранится в структуре stat?
Каким образом осуществляется защита файлов в ОС UNIX?
Каковы права доступа к файлу, при которых владелец может выполнять все операции (r, w, x), а прочие пользователи – только читать?
Какие типы файлов можно выделить в UNIX?
Содержание отчета по контрольной работе
Результат выполнения контрольной работы демонстрируется преподавателю. Преподаватель отмечает количество выполненных заданий. После чего выполняется отчет по контрольной работе. Отчёт оформляется на сброшюрованных листах формата А4 (210х297мм) или в электронной версии. Отчёт составляется каждым студентом. Отчёт по контрольной работе оформляется в соответствии с требованиями к оформлению, утвержденными на кафедре и должен включать следующие структурные элементы:
Титульный лист, с указанием номера и названия работы;
Содержание;
Основную часть, включающую:
o Цель работы;
o постановку задачи;
o текст программы с комментариями;
o скриншоты с результатами выполнения программы;
o ответы на контрольные вопросы;
Выводы по работе
Список литературы
Требования к оформлению
Текст работы пишется в безличной форме с соблюдением следующих основных требований: четкости и последовательности изложения; краткости и точности формулировок; конкретности изложения результатов работы; использования только общепринятой терминологии, регламентированной государственными стандартами.
1. Титульный лист. Выполняется в соответствии с образцом (см. пример ниже). Шрифт (здесь и далее, если не оговорено другое) Times New Roman, размер шрифта 12 пт, отступы и интервалы указаны далее на образце. Номер страницы на титульном листе не указывается. Поля 25 (слева), 20 (сверху и снизу), 15 (справа) мм устанавливаются на весь документ.
2. Содержание. Должно генерироваться автоматически из заголовков разделов работы («Вставка» → «Ссылка» → «Оглавление и указатели», стиль «Из шаблона»). Содержание, набранное вручную, не допускается. Номер страницы на этой и следующей страницах указывается в нижнем колонтитуле, выравнивание влево. Размер шрифта 12 пт, интервал полуторный.
3. Основной текст. Контролируются следующие параметры.
• Шрифт 12 пт, интервал полуторный, стиль «Обычный» (кроме списков), абзацный отступ 1,27 (устанавливается по умолчанию). Использовать другие начертания, выделение курсивом, полужирным и подчеркиванием, как правило, не допускается (кроме заголовков).
• Каждый раздел начинается с новой страницы. Разделы должны иметь порядковую нумерацию в пределах записки и обозначаться арабскими цифрами с точкой. Подразделы нумеруются арабскими цифрами в пределах каждого раздела. Номер подраздела состоит из номеров раздела и подраздела, разделенных точкой (например: 2.3 – третий подраздел второго раздела). Аналогично нумеруются пункты подраздела (3.1.2 – второй пункт первого подраздела третьего раздела). Допускается нумерация подразделов не более четырех уровней вложения (например: 1.4.4.2 Алгоритм…). Введение, заключение и список литературы не нумеруются.
• Стиль заголовков разделов – «Заголовок N». Использование стиля «Обычный» с изменением начертания или размера не допускается. Выравнивание заголовков любого уровня по центру. Если применяются нумерованные заголовки (1, 1.1, 1.2, 1.2.1 и т.д.) должна использоваться автонумерация. Допускается в заголовках изменять размер и начертание шрифта, увеличивать размер. Точка в конце заголовка не ставится.
• Нумерация рисунков, формул, таблиц – автоматическая («Вставка» → «Ссылка» → «Название», выбрать тип объекта, исключить подпись из названия). Ручная нумерация не допускается. Рисунками («Рис. N») именуются все иллюстрации (фотографии, схемы, графики и т.д.). Точка в конце названия рисунка или таблицы не ставится.
• Рисунки, диаграммы, графики вставляются в текст (не поверх текста и не за текстом) с выравниванием по центру поля. Перед рисунком или таблицей оставляется пробельная строка.
• Таблицы, как правило, не разрываются переносом на другую страницу. Если разрыв необходим (например, таблица не умещается на одной странице), то заголовок таблицы повторяется на каждой следующей странице (выделить строки заголовка, «Таблица» → «Свойства таблицы» → «Строка», поставить галочку «Повторять как заголовок на каждой странице»).
• Подрисуночные подписи и названия таблиц выравниваются по центру, номера таблиц – вправо.
• Формулы выполняются в редакторе Equation или Math Type, размер основного знака 12 пт. Даже если в тексте встречается формула из одной буквы (например, или ), она должна быть набрана в редакторе, а не просто латинской буквой. Формулы целиком (кроме фрагментов формул и разъяснений) размещаются в тексте в отдельной строке с выравниванием по центру, нумерация формул – с выравниванием по правому краю поля. Все переменные формулы должны быть один раз разъяснены в тексте с указанием размерности.
• Латинские буквы (слова, выражения) в тексте выделяются курсивом.
• Схемы алгоритмов, программ, данных и систем оформляются в соответствие с ГОСТ19.701-90 (ИСО 5807-85). При распечатке листингов программ использовать шрифт Times New Roman 12 пт с выделением курсивом. Лишние пробельные строки перед распечаткой листинга необходимо удалить.
• Страницы пояснительной записки имеют сквозную нумерацию арабскими цифрами. Нумерация проставляется в «нижнем колонтитуле» по центру страницы без использования дополнительных знаков (шрифт Times New Roman 12 пт). Титульный лист, задание (если есть), аннотация (если есть) не нумеруются, но учитываются при нумерации обычных страниц.
4. Список литературы оформляется в соответствии с ГОСТ 7.1-2003. Список, оформленный согласно старым ГОСТам (например, ГОСТ 7.1-84), не допускается. Должна использоваться автонумерация списка. При ссылке на элемент списка в тексте в квадратные скобки помещается («Вставка» → «Ссылка» → «Перекрестная ссылка») ссылка на номер абзаца.
5. Один и тот же объект на протяжении всей работы должен называться одинаково. Недопустимо именовать его по-разному в зависимости от ситуации («объект», «система», «устройство», «аппарат» и др.).
6. Ссылки на интернет-ресурсы (не предусмотренные ГОСТ) приводятся полностью, с указанием автора и названия материала (если есть) и полной ссылки. Не допускаются ссылки только на заглавную страницу сайта (например, http://ixbt.com), если только материал не размещен непосредственно на ней. Примеры ссылок приведены в конце списка.
7. Пояснительная записка, выполненная на компьютере, и другие электронные документы, входящие в работу (чертежи, модели, тексты программ, таблицы и т.п.) сдаются в электронном виде преподавателю для помещения в архив кафедры. Руководитель обязан проконтролировать соответствие электронного и бумажного вариантов.
Здравствуйте. Скажите пожалуйста, планирую поступать в магистратуру на факультет Психологии « Психология личности»в РГГУ скажите пожалуйста, есть ли у вас, ответы на вступительные экзамены? так как, планирую, сделать акцент на бюджет. Спасибо.
Арсений, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Дистанционная помощь в защите ВКР
Анастасия, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте. Нужна срочно практическая часть вкр, третья глава. Скину похожие работы, на которые можно ориентироваться
Александр, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
вкр по теме: экологический туризм России : анализ состояния, проблемы и перспективы
Людмила, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте вы защищаете ВКР?
Ольга, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Написать магистерскую ВКР на тему «Совершенствование логистических бизнес-процессов на примере торговой компании». Не менее 100 страниц.
Миша, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте нужна работа Вкр
Лена, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Написать ВКР 3 раздела Тема строительство строительство жилого дома с применением каркасно-монолитных технологий Антиплагиат от 75% ПЗ и чертежи
Владимир, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.