Создание процессов в Unix с помощью функции fork . Копирование при записи в виртуальную память.



UNIX, IV семестр.

1. Системные вызовы в Unix. errno. Отличие системных вызовов от обычных функций. Обработка ошибок системных вызовов с помощью функций perror и strerror.
Что такое, чем отличается от обычной функции, привелегированный режим работы процесса.
ерно – почему,для чего, особенность использования в многопоточной системе. Режим ядра и режим пользователя.

 

2. Создание процессов в Unix с помощью функции fork. Копирование при записи в виртуальную память.
Что форк делает и куда возвращает, процессы зомби, когда работает хорошо(когда в форке просто есть экзек), когда нет

3. Структура двоичных выполняемых файлов. Загрузка выполняемых файлов в текущий процесс. Статические и динамически библиотеки.
Какой сист вызов используют( екзек и екзек пе), надо знать 4 функции экзеков и буквой п вконце и нет

4. Завершение процессов. Отличие функции exit от системного вызова _exit. Функция atexit
Что будет есть последнюю функцию вызвать несколько раз

5. Процессы зомби. Системные вызовы wait и waitpid. Анализ причин завершения процесса.
Кто усыновляет, про макросы какие-то :/

6. Сигналы. Наследование сигналов. Задание обработчика сигнала.
Что такое сигнал, какие бывают, какие обработки по умолчанию бывают, что происходит при наследовании сигналов, что-то там про екзек.
Что возвращает функция обработчик, какие у него параметры

7. Чтение директорий из программы на языке C. Функции opedir, readdir, closedir. Функции stat, lstat, fstat.
Что-то там про 2 этапа, откуда берется информация у риддир, откуда у стат (очень подробно)

8. Использование функции flock для взаимной блокировки процессов. Виды файловых замков.
Что происходит с замками при завершении процессов и закрытии файлы

9. Чтение мягких ссылок с помощью системного вызова readlink. Системные вызовы link, symlink, readlink, unlink.
Как работать с мягкими и жескими ссылками,что делают перечисленный функции

10. Функции работы с временем в ОС Unix: time, ctime, gettimeofday, times.
обращаем внимание на функцию последнюю!!

11. Системные вызов для работы с файлами: open, close, creat, read, write, lseek, ioctl. Команда umask.
Что возвращает умаск, что-то там с маской и создание процессов

12. Перенаправление ввода/вывода с помощью функции dup2.
про первый дап тоже надо

13. Системный вызов pipe. Функция mkfifo. Сравнение использования именованных и неименованных pipe.

14. Сравнение протоколов TCP и UDP. Преимущества и недостатки. Архитектура клиент-сервер.
Что такое клиент, что такое сервер, примеры привести.

15. Запуск демонов через суперсервер inetd. Формат файла inetd.conf. Файл /etc/services.
Зачем суперсервер нужен, какое содержание у этих файлов, как работают

16. Семейства и типы сокетов. Создание сокетов. Сравнение Unix и IP сокетов. Сетевой порядок байтов.
Системные вызовы преобразования порядка байт

17. Последовательность системных вызовов при использовании BSD сокетов в клиенте и сервере.

18. Отличие демонов от обычных процессов. Использование syslog для диагностических сообщений. Формат файла syslog.conf.
Что такое демон,чем отличается от обычного

19. Использование BSD сокетов в параллельном сервере. Сигнал SIGCHILD.
Что такое параллельный сервер, как он утроен когда делаем программу на форках

20. Функции getsockname и getpeername.

21. Функции gethostbyname и gethostbyaddr. Структура hostent.

22. Потоки. Создание потоков. Завершение потока. Функции pthread_join и pthread_detach.
как обращаться с потоками.

Системные вызовы в Unix. errno . Отличие системных вызовов от обычных функций. Обработка ошибок системных вызовов с помощью функций perror и strerror .

UNIX предоставляет строго определенный ограниченный набор входов в ядро операционной системы, через которые прикладные задачи имеют возможность воспользоваться базовыми услугами, предоставляемыми UNIX. Эти точки входа  - системные вызовы .
Системный вызов определяет функцию, выполняемую ядром операционной системы от имени процесса, выполнившего вызов, и является интерфейсом самого низкого уровня взаимодействия прикладных процессов с ядром.

В среде программирования UNIX они определяются как функции С, каждый системный вызов имеет соответствующую функцию с тем же именем, хранящуюся в стандартной библиотеке языка С. Функции библиотеки выполняют необходимое преобразование аргументов и вызывают требуемую процедуру ядра, т.е. библиотечный код выполняет только роль оболочки, фактические инструкции расположены в ядре операционной системы.

Функции общего назначения - не являются точками входа в ядро операционной системы (хотя в процессе выполнения многие из них выполняют системные вызовы), хранятся в стандартных библиотеках С. Как минимум часть библиотечных функций является "надстройкой" над системными вызовами, обеспечивающей более удобный способ получения системных услуг.

 

Ошибки

Функции: не устанавливают значение переменной errno, а код возврата различен для разных функций.

Системные вызовы: возвращают -1 и устанавливают значение переменной errno, указывающее причину возникновения ошибки. Файл заголовков < errno . h > содержит коды ошибок, значения которых может принимать переменная errno (с краткими комментариями).
! значение errno не обнуляется следующим нормально завершившимся системным вызовом !

Есть две функции, помогающие сообщить причину ошибочной ситуации:
strerror принимает в качестве аргумента номер ошибки и возвращает указатель на строку, содержащую сообщение о причине ошибки
perror выводит в стандартный поток сообщений об ошибках информацию об ошибке, основываясь на значении переменной errno. Как аргумент можно передать строку, которая будет писаться перед текстом ошибки (т.е. можно передать какую-то дополнительную информацию, чтобы было понятнее)


 

Создание процессов в Unix с помощью функции fork . Копирование при записи в виртуальную память.

Вообще о процессах:
Есть программа (допустим, исполняемый файл). Чтобы она могла быть запущена на выполнение, ОС должна создать ей окружение (ресурсы памяти, возможность дотупа к другим устройствам и системным ресурсам) Это окружение в UNIX’е называется процесс.

Все выполняющиеся программы представлены в UNIX в виде процессов. Процесс состоит из инструкций, выполняемых процессором, данных и информации о выполняемой задаче: размещенная память, открытые файлы и статус процесса. Программа может породить более одного процесса. UNIX многозадачный т.е. одновременно может выполняться несколько процессов.

Выполнение процесса заключается в точном следовании набору инструкций, который никогда не передает управление набору инструкций другого процесса. Процесс считывает и записывает информацию в раздел данных и в стек, но ему недоступны данные и стеки других процессов.

Создание процесса:

Процесс создается системным вызовом fork.
Новый процесс является точной копией родителя. Сохраняются все инструкции и данные, выполнение начинается с одной и той же инструкции, следующей за fork’ом, различаются только PID’ом.
forkвыполняется и в родителе, и в потомке. Фишка в том, что он возвращает:
-1 – ошибка
0 – дочернему
PID дочернего – родителю

А теперь про память.

Оперативная память – достаточно дорогостоящий ресурс (обеспечивается максимальная производительность, но ресурс ограничен) Совместное использование несколькими задачами одних и тех же областей памяти. Например, несколько процессов, выполняющих одну и ту же программу, могут совместно использовать сегмент кода.
В многозадачных системах могут быть проблемы, если использовать филько физические адреса – один процесс может залезть на участок другого процесса, ограниченная оп. Память дает ограничение на число процессов и т.д

Подсистема управления памятью многозадачной ОС должна обеспечивать:
1) Выполнение задач, размер которых превышает размер оперативной памяти.»
2) Выполнение частично загруженных в память задач для минимизации времени их запуска
3) Размещение нескольких задач в памяти одновременно для повышения эффективности использования процессора.
4) Размещение задачи в произвольном месте оперативной памяти.
5) Размещение задачи в нескольких различных частях оперативной памяти
6) Совместное использование несколькими задачами одних и тех же областей памяти. Например, несколько процессов, выполняющих одну и ту же программу, могут совместно использовать сегмент кода.

Всё это реализовано в UNIXс помощью виртуальной памяти.

Смысл виртуальной памяти заключается в том, что каждый процесс выполняется в собственном виртуальном адресном пространстве.
Плюсы: 1)виртуальная память может превышать физическую 2)процессы изолированы друг от друга и не могут никому навредить.
В современных компьютерных системах процесс отображения виртуального адреса в физический выполняется на аппаратном уровне (с помощью MMU) обеспечивая высокую скорость трансляции. Операционная система осуществляет управление этим процессом

Размер виртуальной памяти может существенно превышать размер физи! ческой за счет использования вторичной памяти или области свопинга — как правило, дискового пространства, где могут сохраняться временно не используемые участки адресного пространства процесса. Например, если при выполнении процесса происходит обращение к виртуальному адресу, для которого присутствует соответствующая страница физической памяти, операция чтения или записи завершится успешно. Если страница в опера! тивной памяти отсутствует, процессор генерирует аппаратное прерывание, называемое страничной ошибкой (page fault), в ответ на которое ядро опреде! ляет положение сохраненного содержимого страницы в области свопинга, считывает страницу в память, устанавливает параметры отображения вирту! альных адресов в физические и сообщает процессору о необходимости по! вторить операцию. Все эти действия невидимы для приложения, которое работает с виртуальной памятью.


Дата добавления: 2019-11-25; просмотров: 177; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!