- •1. Состав компьютерной системы
- •2. Функции операционной системы. Операционная система как расширенная машина и менеджер ресурсов
- •3. Этапы развития операционных систем
- •4. Типы ос
- •5. Принципы разработки и основные функции современных ос
- •Особенности методов построения
- •6. Рыночные требования, предъявляемые к ос
- •7. Cisc и risc процессоры, конвейерная обработка (микропроцессор, разрядность микропроцессора)
- •8. Транспьютер. Векторные и матричные процессоры.
- •9. Персональный компьютер, рабочая станция, современные периферийные устройства.
- •10. Машинный язык, компилятор, ооп.
- •12. Основные понятия, концепция ос
- •13. Ядро ос. Основные понятия (монолитные системы, многоуровневые системы, виртуальные машины).
- •14. Ядро ос. Модель клиент-сервер и микроядро.
- •15. Классификация ос
- •16. Мультипрограммирование или многозадачность, критерии организации
- •17. Мультипроцессорность: сложность планирования загрузки процессоров, конфликты доступа к общим ресурсам
- •18. Процессы. Основные понятия, состояния процессов
- •19. Обработка прерываний, вектор прерывания
- •20. Алгоритмы планирования процессов
- •21. Создание процессов
- •Идентификатор процесса (pid)
- •Идентификатор родительского процесса (ppid)
- •Поправка приоритета (ni)
- •Терминальная линия (tty)
- •Реальный (uid) и эффективный (euid) идентификаторы пользователя
- •Реальный (gid) и эффективный (egid) идентификаторы группы
- •Образ, дескриптор, контекст процесса
- •22. Идентификаторы
- •Идентификатор процесса (pid)
- •Идентификатор родительского процесса (ppid)
- •Реальный (uid) и эффективный (euid) идентификаторы пользователя
- •Реальный (gid) и эффективный (egid) идентификаторы группы
- •Привилегированный пользователь
- •23. Системные вызовы для управления процессами
- •24. Форматы исполняемых файлов
- •25. Основные команды Unix для управления процессами
- •26. Память. Типы адресов
- •27. Методы распределения памяти между процессами без использования внешнего накопителя
- •Распределение памяти фиксированными разделами
- •Распределение памяти разделами переменной величины
- •Перемещаемые разделы
- •28. Методы распределения памяти между процессами с использованием внешнего накопителя
- •29. Виртуальная память. Способы организации виртуальной памяти Понятие виртуальной памяти
- •Страничное распределение
- •Сегментное распределение
- •Странично-сегментное распределение
- •30. Организация виртуальной памяти при меньшем размере оперативной памяти. Алгоритмы подкачки
- •31. Иерархия запоминающих устройств. Принцип кэширования данных
- •32. Управление файлами и внешними устройствами
- •33. Физическая структура файловой системы
- •34. Физическая структура файловой системы
- •36. Логическая организация файловой системы (типы файлов, иерархическая структура каталогов)
- •37. Структура файловой системы unix.( каталоги root /etc /dev /usr /var /prog.)
- •38. Логическая организация файловой системы ms windows (program files,documents and settings, windows,win nt)
- •40. Механизм защиты файлов в файловой системе oc unix (код защиты файла, дополнительные разряды кода защиты файла. Команды управления кодом защиты (доступ к файлу))
- •41. Многотомные фс (монтируемые фс, распределенные фс)
- •42. Специальные файлы (файлы устройств)
- •43. Дополнительные возможности файловых систем (дисковые квоты, резервное копирование, журнализируемые файловые системы)
- •1) Дисковая квота.
- •2) Резервное копирование
- •3) Журналируемые файловые системы
- •44. Сетевые интерфейсы и протоколы
- •45 Топология сети
- •46. Семиуровневая модель взаимосвязи открытых систем - iso (osi)
- •47. Компьютерные сети. Локальные сети. Глобальные сети с коммутацией пакетов. Vpn.
- •Принцип коммутации пакетов с использованием техники виртуальных каналов
- •48. Межсетевое взаимодействие (шлюзы, мультиплексирование стеков протоколов, вопросы реализации).
- •49. Сравнение вариантов организации взаимодействия сетей
- •50. Сущность маршрутизации. Протоколы настройки маршрутизации в сетях tcp/ip (протоколы длины вектора, протоколы состояния канала, протоколы политики маршрутизации)
- •Протокол состояния связей ospf
- •51. Сетевые службы и протоколы (dhcp, snmp, dns)
- •52. Межсетевые экраны (FireWall), демилитаризованная зона (dmz), трансляция сетевых адресов (nat, Masquerade)
- •55. Открытые системы на базе ос unix
- •56. Системные журналы. Проверка и восстановление файловой системы
- •57. Система X-Window. Преимущества X-Window. Отличие X-Window от ms-Window
23. Системные вызовы для управления процессами
Ядро системы предоставляет возможности (набор системных вызовов) для порождения новых процессов, отслеживания окончания порожденных процессов и т.д.
Каждый процесс может образовать полностью идентичный подчиненный процесс с помощью системного вызова fork() и дожидаться окончания выполнения своих подчиненных процессов с помощью системного вызова wait. Каждый процесс в любой момент времени может полностью изменить содержимое своего образа памяти с помощью одной из разновидностей системного вызова exec (сменить образ памяти в соответствии с содержимым указанного файла, хранящего образ процесса (выполняемого файла)). Каждый процесс может установить свою собственную реакцию на "сигналы", производимые операционной системой в соответствие с внешними или внутренними событиями. Наконец, каждый процесс может повлиять на значение своего статического (а тем самым и динамического) приоритета с помощью системного вызова nice.
Для создания нового процесса используется системный вызов fork. В среде программирования нужно относиться к этому системному вызову как к вызову функции, возвращающей целое значение - идентификатор порожденного процесса, который затем может использоваться для управления (в ограниченном смысле) порожденным процессом. Реально, все процессы системы UNIX, кроме начального, запускаемого при раскрутке системы, образуются при помощи системного вызова fork.
Для установки реакции на поступление определенного сигнала используется системный вызов
oldfunction = signal(signum, function),
Система предоставляет возможность для пользовательских процессов явно генерировать сигналы, направляемые другим процессам. Для этого используется системный вызов
kill(pid, signum)
(Этот системный вызов называется "kill", потому что наиболее часто применяется для того, чтобы принудительно закончить указанный процесс.) Параметр signum задает номер генерируемого сигнала (в системном вызове kill можно указывать не все номера сигналов).
Для завершения процесса по его собственной инициативе используется системный вызов
exit(status),
где status - это целое число, возвращаемое процессу-предку для его информирования о причинах завершения процесса-потомка (как описывалось выше, для получения информации о статусе завершившегося процесса-потомка в процессе-предке используется системный вызов wait)
Для выполнения произвольной программы в текущем процессе используются системные вызовы семейства exec. Разные варианты exec слегка различаются способом задания параметров. Здесь мы не будем вдаваться в детали (за ними лучше обращаться к документации по конкретной реализации). Рассмотрим некоторый обобщенный случай системного вызова
exec(filename, argv, argc, envp)
24. Форматы исполняемых файлов
С точки зрения архитектуры, данные системы имеют достаточно сильные отличия.
Формат исполняемого файла должен в той или иной мере отражать эти отличия. В
настоящее время существуют четыре формата исполняемых файлов для
перечисленных операционных систем:
.com (CP/M и MS-DOS);
.exe (MS-DOS);
.exe (Windows 3.1) или NE-формат исполняемых файлов;
.exe (Windows 95/98/NT) или PE-формат исполняемых файлов;
COFF- и ELF-форматы исполняемого файла UNIX.
Исполняемый файл COM-формата
Данный формат исполняемого файла является самым старым. Если считать началом
«нашей эры» конец 70-х годов, когда появились компьютеры на базе
микропроцессора i8086, то основы формата COM появились еще «до нашей эры».
В то время были популярны компьютеры на базе 8-разрядных микропроцессоров
i8080 (отечественный аналог — КР580ВМ80). Одной из отличительных
характеристик этих микропроцессоров была поддержка размера оперативной памяти
не более 64 Кбайт. Таким образом, размер программы, выполняющейся на
компьютере с микропроцессором i8080, изначально был ограничен его архитектурой.
А с учетом того, что некоторая часть оперативной памяти отводилась для программ
операционной системы, — реальный размер программы был еще меньше. COM-
формат поддерживался операционной системой CP/M фирмы Digital Research и
показал свою эффективность. С появлением 16-разрядного микропроцессора фирмы
Intel i8086/88, возникла необходимость в операционной системе, которая в полной
мере использовала бы его возможности. Фирма Microsoft разработала операционную
систему MS-DOS. Большинство программ в то далекое время имело небольшой
размер, и фирма Microsoft, не изобретая заново велосипед, ввела поддержку COM-
формата в операционную систему MS-DOS. На уроке 10 мы уже обсуждали данный
формат исполняемого файла. При этом отмечалось, что исходный файл должен
удовлетворять определенным требованиям. Поэтому мы не будем повторять то, что
уже было сказано, а проникнем немного вглубь вопроса. Для этого в качестве
примера рассмотрим исходный текст программы, оформленный в соответствии с
требованиями COM-формата
MZ-формат был разработан фирмой Microsoft для поддержки многосег-
ментных программ в среде MS-DOS. С точки зрения структуры, файл MZ-формата
имеет три части:
заголовок;
таблицу размещения;
программный код.
Заголовок состоит из полей фиксированного размера
NE-формат (New Executeable code file) исполняемого файла был разработан для
операционной системы Windows 2.0. Этот же формат использовался в операционной
системе OS/2 фирмы IBM. Исполняемый файл NE-формата состоит из двух
исполняемых файлов:
исполняемый файл MZ-формата;
исполняемый файл NE-формата.
Если посмотреть на пример дампа исполняемого файла NE-формата (рис. 4), то
видно, что первые несколько десятков байт являются не чем иным, как только что
рассмотренным нами файлом MZ-форматa (MS-DOS). В его задачу входит вывод
сообщения типа «This program required Microsoft Windows». Наверняка оно вам
известно, как и та ситуация, при которой это сообщение выводится. Загрузчик
Windows знает об этой особенности загрузочного файла и сразу начинает работать со
второй его частью. Загрузчик MS-DOS впрямую запускает программу с расширением
.exe на исполнение. Данная маленькая программа добросовестно исполняется,
выводя вышеуказанное (или подобное ему) сообщение, и благополучно завершается.
В принципе, вместо этой маленькой программы может быть полноценная программа,
представляющая собой DOS-версию приложения.
Определить тот факт, что исполняемый файл с расширением .exe является файлом
формата NE, достаточно просто. Для этого достаточно посмотреть на значение в
байте со смещением 18h от начала файла. Если там значение 40h, то перед вами не
MZ-формат. Далее необходимо посмотреть на содержимое слова со смещением 3Сh.
Значение в нем показывает смещение заголовка NE исполняемого файла
относительно начала файла. Общий формат исполняемого файла NE-формата
показан на рис. 3. Фрагменты дампа файла NE-формата показаны на рис. 4. В начале
файла расположена программа-заглушка MS-DOS. Формат этой части файла NE-
формата показан в табл.
Исполняемый файл PE-формата
(Windows NT 3.5/95/98)
Для 32-разрядных операционных систем фирма Microsoft разработала специальный
формат исполняемого файла. Он получил название переносимый формат
исполняемого файла (PE — Portable Executable). В нашем изложении мы будем
называть его PE-форматом. Детальное рассмотрение PE-формата требует очень
много места, но вряд ли это так необходимо. В большинстве случаев достаточно
представлять общую структуру файла PE-формата («знать, что где лежит»). Для
получения детальной информации всегда можно обратиться к документации.
Необходимо отметить, что идеи, заложенные в PE-формат, не новы. Основы этого
формата были заложены в операционной системе UNIX, где аналогичный формат
назывался COFF-формат (Common Object File Format — стандартный формат
объектного файла). Почему формат файла в 32-разрядных операционных системах
назван переносимым (portable)? Это сделано из-за стремления фирмы Microsoft
создать единый формат исполняемого файла для реализаций операционной системы
Windows NT на различных аппаратных платформах (что, конечно, не означает
совместимости на уровне машинных команд).
Перечислим особенности данного формата:
простота загрузки файла PE-формата. Если сравнивать этот процесс с загрузкой
файла NE-формата, то для PE-исполняемого файла он значительно проще. Чтобы
загрузить NE-файл, загрузчик должен создать рабочие структуры в памяти, найти
информацию для их заполнения внутри NE-файла;
поддержка сплошной модели памяти. Конструкция PE-файла максимально
упрощена с точки зрения загрузки в память. Фактически он представляет собой
слепок участка оперативной памяти;
не требуется настраивать сегменты команд или данных, так как их нет в том виде,
как это было в 16-разрядной среде;
расположение многих полей в PE-файле задается с помощью относительного
смещения от начала PE-файла — Относительного Адреса Поля (ОАП). Сам PE-
файл располагается по Базовому Адресу Памяти (БАП) — физическому адресу
памяти, с которого начинается загруженный в память модуль.
Информация в PE-файле является, в основном, высокоуровневой и используется
системой или u1087 приложениями, чтобы определить правила обращения с конкретным
исполняемым файлом.
