- •1 Понятие операционной Системы. Иерархическая структура. Привилегированный режим.
- •2 Многослойная структура ос
- •3 Характеристики современных ос. Многопоточность. Распределенные ос. Концепция ос на основе микроядра. Функции микроядра.
- •4.Принципы построения ос. Переносимость операционной системы.
- •1.Принцип модульности
- •2.Принцип виртуализации
- •3.Принцип особого режима работы
- •4.Принцип мобильности
- •6 Многопоточная модель процесса. Создание потоков. Преимущества много поточности. Уровни потоков
- •5 Виды процессов
- •7 Цели и необходимость синхронизации процессов и потоков. Критическая секция. Блокирующие переменные. Семафоры Дейкстры.
- •8 Тупики. Восстановление после тупиков. Предотвращение тупиков за счет нарушения условий возникновения.
- •9. Синхронизирующие объекты ос разных процессов. Мьютекс. Сигналы. Почтовый ящик.
- •10) Функции ос по управлению памятью. Физический и виртуальный адрес. Способы преобразования виртуального адреса в физический.
- •11) Соотношение объемов виртуального адресного пространства и физической памяти. Части виртуальных адресных пространств.
- •12 Распределение памяти фиксированными разделами. Распределение памяти динамическими разделами.
- •13 Перемещаемые разделы памяти. Свопинг. Виртуальная память. Разделяемые сегменты памяти.
- •14. Страничное распределение. Сегментное распределение. Сегментно-страничное распределение.
- •Сегментное распределение
- •15 Иерархия запоминающих устройств. Кэш-память. Способы отображения основной памяти на кэш. Схемы выполнения запросов в системах с кэш-памятью.
- •16 Задачи ос по управлению файлами и устройствами. Организация параллельной работы устройств ввода-вывода и процессора.
- •17 Согласование скоростей обмена и кэширование данных. Разделение устройств и данных между процессами. Обеспечение удобного логического интерфейса между устройствами и остальной частью системы.
- •18 Поддержка синхронных и асинхронных операций ввода-вывода в ос. Многослойная модель подсистемы ввода - вывода.
- •19. Логическая организация файловой системы. Типы файлов. Иерархическая структура файловой системы. Имена файлов. Монтирование. Атрибуты файлов. Логическая организация файла.
- •Иерархическая файловая система
- •Логическая организация файла
- •20 Физическая организация файловой системы. Диски, разделы, секторы, кластеры. Адресация файла.
- •21 Физическая организация fat.
- •22 Физическая организация ntfs.
- •23 Регистры процессора. Привилегированные команды. Средства поддержки сегментации памяти.
- •24. Аппаратно-программные особенности процессоров. Виртуальное адресное пространство. Защита данных при сегментной организации памяти. Сегментно-страничный механизм.
- •25 Особенности 64-ох разрядной архитектуры процессоров.
- •26) Модель osi. Стек протоколов tcp/ip.
- •27 Пакеты и инкапсуляция. Ethernet-заголовок. IPv4-заголовок. IPv6-заголовок.
- •28 Пакеты и инкапсуляция. Arp-заголовок. Icmp-заголовок.
- •29. Пакеты и инкапсуляция. Udp-заголовок. Tcp-заголовок.
- •30 Сетевые файловые системы. Принципы построения. Интерфейс сетевой файловой службы. Файловые серверы типа stateful и stateless.
- •31 Определение unix. Архитектурные особенности ос unix. Стандарты. Лицензии.
- •32 Различия дистрибутивов Linux.
- •33 Ядро Linux.
- •35) Bash. Команды управления каталогами. Команды управления файлами. Команды chown и chgrp
- •4.6.2. Команда mkdir
- •4.6.3. Команда cat
- •4.6.4. Команда cp
- •36 Bash. Сценарии. Маски
- •37 Компилятор gcc.
- •38 Работа с файлами и директориями в Unix. Функции open, write, read, opendir, scandir.
- •39. Posix. Работа с потоками. Синхронизация потоков при помощи мьютексов и условных переменных.
- •40 Создание и использование статических библиотек.
- •41 Создание и использование динамических библиотек. Раннее и позднее связывание.
- •42 Socket api. Атрибуты сокета. Адреса. Функции для работы с dns. Функции socket, bind, listen, connect, close.
- •43 Socket api. Реализация tcp- сервера и клиента.
- •44 Socket api. Реализация udp- сервера и клиента.
- •45 Socket api. Использование низкоуровневых сокетов Понятие сокета
- •Атрибуты сокета
- •Установка соединения (сервер)
- •Установка соединения (клиент)
- •Обмен данными
- •Закрытие сокета
- •46) Socket api. Неблокирующие сокеты. Пример реализации tcp- сервера.
- •47 OpenSsl. Генерация псевдослучайной последовательности.
- •48 OpenSsl. Шифрование и дешифрование ассиметричных алгоритмов.
- •49.Программирование драйверов в Linux. Виды драйверов. Методы включения драйвера в ядро. Отличие драйверов от обычных приложений. Файлы устройств. Функции драйвера устройства.
- •52 Программирование интерфейсов. Библиотека qt. Структура программы на qt.
5 Виды процессов
- системные: являются частью ядра ОС и всегда находятся в оперативной памя-ти. Они не имеют соответствующих программ в виде исполняемых файлов и за-пускаются особым образом при инициализации ядра системы. Инструкции и данные этих процессов находятся в ядре системы, и они могут обращаться к функциям и данным, недоступным для остальных процессов.
- демоны: не интерактивные процессы, которые запускаются обычным образом (загрузка соответствующей программы) и выполняются в фоновом режиме. Обычно демоны запускаются при инициализации системы и обеспечивают рабо-ту различных подсистем (терминального доступа, печати, сетевого доступа и т.д.)
Каждый процесс входит в состав какой-либо группы процессов (одной или не-скольких). Принадлежность к группе позволяет организовать более плотное вза-имодействие между процессами. Один процесс может послать сигнал всем про-цессам, входящим в определенную группу. Каждая группа имеет идентификато группы (Process group ID). Идентификатор группы – это идентификатор процес-са, являющегося лидером этой группы.
Когда новый пользователь входит в систему, создается новый сеанс, состоящий из одного процесса, которым является командный интерпретатор или командная оболочка. Этот процесс выполняет роль лидера сеанса, и его идентификатор яв-ляется идентификатором сеанса. ратегия планирования определяет, какие про-цессы планируются на выполнение, чтобы достичь поставленной цели. Суще-ствует много стратегий, можно назвать некоторые из них:
a) по возможности заканчивать вычислительные процессы в том же самом порядке, в котором они были начаты;
b) отдавать предпочтение более коротким процессам;
c) предоставлять всем процессам пользователей одинаковые услуги, в том числе и одинаковое время ожидания.
Известно большое количество правил (дисциплин) диспетчеризации, в соответствии с которыми формируется список (очередь) готовых к выполнению задач. Различают два больших класса таких дисциплин – бесприоритетные и приоритетные. При реализации приоритетных дисциплин отдельным задачам предоставляется преимущественное право попасть в состоя-ние исполнения.
6 Многопоточная модель процесса. Создание потоков. Преимущества много поточности. Уровни потоков
Многопоточная модель процесса: В многопоточном режиме процессы обычно запускаются с одним потоком. Этот поток может создавать новые потоки, определив их указатели команд и аргументы. Новые потоки создаются со своим собственным контекстом регистров и стековым пространством, после чего помещаются в очередь готовых к выполнению потоков. В случае необходимости ожидания некоторого события поток блокируется (при этом сохраняется содержимое его пользовательских регистров, счетчика команд и указателя стека). После этого процессор может перейти к выполнению другого потока. После завершения потока его контекст регистров и стеки удаляются.
Многопоточная модель процесса охватывает две категории потоков: потоки на уровне пользователя (user-level threads – ULT) и потоки на уровне ядра (kernel – level threads – KLT) [3,5]. Потоки на уровне пользователя управляются самим приложением. Обычно приложение в начале своей работы состоит из одного потока, с которого начинается выполнение данного приложения, и который размещается в процессе, управляемом ядром. Приложение может создать новый поток при помощи вызова библиотечной процедуры работы с потоками, например thread_create(). В результате создается структура данных для нового потока и управление передается к одному из готовых к выполнению потоков данного процесса в соответствии с заданным алгоритмом планирования. При этом контекст текущего потока сохраняется. При возврате управления к данному потоку его контекст восстанавливается. Все управление ULT осуществляется в пользовательском пространстве в рамках одного процесса. Связь с ядром отсутствует. Ядро продолжает осуществлять планирование процесса как одного целого. Однако существует взаимосвязь между планированием потоков и планированием процессов. В случае возникновения прерывания процесса, например по вводу-выводу или таймеру, выполняющийся поток процесса продолжает оставаться в состоянии выполнения, хотя перестает выполняться на процессоре. При возврате управления процессу возобновляется выполнение потока на процессоре.
Создание потоков: Создание потока в большей степени напоминает программу для Windows, чем создание процесса. Дело в том, что для создания потока используется функция CreateThread() (аналог WinMain()), одним из аргументов которой является указатель на функцию потока (аналог оконной функции). Для создания потока требуется следующая информация:
- Размер стека потока.
- Атрибуты защиты потока. Для указания установленной по умолчанию защиты в NT/XP/2000 либо в среде Windows 9.x, где защита не поддерживается, можно использовано значение NULL.
- Адрес процедуры, с которой начинается выполнение. Это должна быть функция, которая получает в качестве единственного параметра 32-разрядное значение.
- Дополнительное 32-разрядное значение, которое передается в процедуру потока.
- Флаги, которые, помимо прочего, допускают установку уровня приоритета потока.
- Адрес для хранения идентификатора потока. Идентификатор потока представляет собой уникальное системное значение.
Функция CreateThread(). При вызове этой функции происходит следующее:
- в памяти создаются все необходимые для управления потоком структуры (назовем их объектом "поток");
- код завершения потока инициализируется значением STILL_ACTIVE;
- создается структура типа CONTEXT для потока;
- создается стек потока;
- инициализируется регистр - указатель стека в структуре типа CONTEXT так, чтобы он указывал на верхнюю границу стека, а регистр -указатель команд - на точку входа функции потока.
Синтаксис функции следующий.
HANDLE CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadld);
Возвращаемое значение: если выполнение функции выполнено успешно, то возвращается хэндл нового объекта потока.
Преимущества многопоточности: Если операционная система поддерживает концепции потоков в рамках одного процесса, она называется многопоточной. Многопоточные приложения имеют ряд преимуществ:
1) Улучшенная реакция приложения - любая программа, содержащая много не зависящих друг от друга действий, может быть перепроектирована так, чтобы каждое действие выполнялось в отдельном потоке. Например, пользователь многопоточного интерфейса не должен ждать завершения одной задачи, чтобы начать выполнение другой.
2) Более эффективное использование мультипроцессирования - как правило, приложения, реализующие параллелизм через потоки, не должны учитывать число доступных процессоров. Производительность приложения равномерно увеличивается при наличии дополнительных процессоров. Численные алгоритмы и приложения с высокой степенью параллелизма, например перемножение матриц, могут выполняться намного быстрее.
3) Улучшенная структура программы - некоторые программы более эффективно представляются в виде нескольких независимых или полуавтономных единиц, чем в виде единой монолитной программы. Многопоточные программы легче адаптировать к изменениям требований пользователя.
4) Эффективное использование ресурсов системы - Программы, использующие два или более процессов, которые имеют доступ к общим данным через разделяемую память, содержат более одного потока управления. При этом каждый процесс имеет полное адресное пространство и состояние в операционной системе. Стоимость создания и поддержания большого количества служебной информации делает каждый процесс более затратным, чем поток. Кроме того, разделение работы между процессами может потребовать от программиста значительных усилий, чтобы обеспечить связь между потоками в различных процессах или синхронизировать их действия.
Уровни потоков: Пользовательские потоки.
При использовании этого уровня ядро не знает о существовании потоков - все управление потоками реализуется приложением с помощью специальных биб-лиотек. Переключение потоков не требует привилегий режима ядра, а планиро-вание полностью зависит от приложения. При этом ядро управляет деятельно-стью процесса. Если поток вызывает системную функцию, то будет блокирован весь процесс, но для поточной библиотеки этот поток будет находиться в актив-ном состоянии. Здесь состояние потока не зависит от состояния процесса.
Потоки уровня ядра
На этом уровне все управление потоком выполняется ядром. Используется про-граммный интерфейс приложения (системные вызовы) для работы с потоками уровня ядра. Ядро поддерживает информацию о контексте процесса и потоков; переключение потоков требует выполнения дисциплины планирования ядра на уровне этих потоков.
