1. Состав компьютерной системы
![]()
|
Процессы WindowsУ каждого процесса есть есть 4-х гигабайтное адресное пространство(32 разряда) в котором пользователь занимает 2 гигабайта (однако это может быть до 3-х гигов увеличено) а операционная система занимает оставшуюся часть. Т.о. операционная система присутствует в адресном пространстве каждого процесса, хотя она защищена от изменений с помощью аппаратного блока управления памятью MMU. У процесса есть идентификатор процесса, один или несколько потоков, список дескрипторов и маркер доступа, хранящий информацию защиты. Процесса создаются с помощью вызова Win32, который принимает на входе имя исполняемого файла, определяющего начальное содержимое адресного пространства и создает первый поток. Потоки могут создаваться динамически в процессе работы. Когда поток завершает свою работу, он может прекратить свое существование, процесс же завершается с завершением последнего активного потока. Потоки представляют собой концепцию планирования, а не владения ресурсами. Любой поток может получить управление ко всем объектам его процесса. Т.к. переключение потоков в Win2k занимает много времени (переключение в режим ядра а затем возврат в режим пользователя), то есть более простой механизм но обеспечивающий псевдопараллелизм – волокна, подобны потокам но планируемые в пространстве пользователя создавшей их программой. У каждого потока может быть несколько волокон, так же как у процесса может быть несколько потоков, с той разницей, что когда волокно логически блокируется, оно помещается в очередь блокированных волокон, после чего для работы выбирается другое волокно в контексте того же потока. ОС не знает о смене волокон, так как все тот же поток продолжает работу. Необходимые параметры для системного вызова CreateProcess
Хотя нет иерархии процессов, (родительский-дочерний) однако один из 18 возвращающися значений – это дескриптор процесса. Хотя сначала есть один поток, далее можно создать новые потоки с помощью CreateThread которой передается:
22. Идентификаторы Процесс называется интерактивным, если в настоящий момент он подключен к терминалу. И пользователь не может какие-либо другие команды, пока не завершен этот процесс. Фоновый-это процесс, отключенный от терминала и работающий независимо от пользователя. По умолчанию, процессы запускаются как интерактивные. В языке С есть специальные системные вызовы, чтобы сделать процесс фоновым.(демонизировать) DAEMON - системный фоновый процесс. Запускается с правами системного фонового админа либо со специальной учетной записью. Web-сервер запускается с учетной записью .ftp – anonym.ftp 1) Идентификатор процесса PID Каждому процессу присваивается свой номер, уникальный в каждый момент времени и неизменный в течении всего срока выполнения. Может принимать знач от 1 до 32 000 либо до 65 535 в зависимости от реализации системы. 0 – зарегистрирован под планировщик процессов. Никакого др смысла, кроме как идентификации процессов номера не несут. По номеру нельзя ничего сказать о привилегии процесса. В Windows номера даются: ближайший свободный от 1. В UNIX используется специальный счетчик: номер дается равный значению счетчика +1, при условии, что задаваемый номер свободен. Когда доходит до конечного номера, то отсчет идет заново. 2) Идентификатор процесса, породнившего данный процесс PPID Т.к. все процессы создаются путем создания нового, система работает с удаленными пользователями, если пользователь отключается от терминала, то система должна завершить все процессы данного сеанса. Когда он входит в систему он вводит login -> sh -> echo. Программа логин все процессы должна завершить. Если 1 из процессов не прин данному пользователю завершится не может, то его идентиф процесса предка становится = идентиф процесса (главному процессу системы). Далее процесс unit заботится об этом процессе. UID – идентификатор пользователя, STIME –процессорное время, TIME – процессорное время, TTY– терминал, через который подключается пользователь 3) Идентификатор группы процессов. Каждый процесс выполняется в рамках какой-либо группы. Состав группы может быть из 1 процесса либо из нескольких. Напр find/|grip virus| more. Команда find/ выводит на экран список всех файлов системы, но из-за использования программного канала весь вывод передается не каждому grip который в свою очередь выводит на экран только те строки, в которых есть слово virus. 4) Реальные и эффективные идентификаторы пользователя. Каждый пользователь в системе имеет своё идентифицированное значение, может быть 0,1,2,3,….. Они обозначаются UID. Пользователь обладающий идентификатором 0 называется супер-пользователь, системный администратор, привилегированный пользователь, ROOT. Ид. 1-99 зарезервированы под служебные цели. 23. системные вызовы для управления процессами Ядро системы предоставляет возможности (набор системных вызовов) для порождения новых процессов, отслеживания окончания порожденных процессов и т.д. Каждый процесс может образовать полностью идентичный подчиненный процесс с помощью системного вызова fork() и дожидаться окончания выполнения своих подчиненных процессов с помощью системного вызова wait. Каждый процесс в любой момент времени может полностью изменить содержимое своего образа памяти с помощью одной из разновидностей системного вызова exec. Каждый процесс может установить свою собственную реакцию на "сигналы", производимые операционной системой в соответствие с внешними или внутренними событиями. Наконец, каждый процесс может повлиять на значение своего статического (а тем самым и динамического) приоритета с помощью системного вызова nice. Для создания нового процесса используется системный вызов fork. В среде программирования нужно относиться к этому системному вызову как к вызову функции, возвращающей целое значение - идентификатор порожденного процесса, который затем может использоваться для управления (в ограниченном смысле) порожденным процессом. Реально, все процессы системы UNIX, кроме начального, запускаемого при раскрутке системы, образуются при помощи системного вызова fork. Для завершения процесса по его собственной инициативе используется системный вызов Exit (status), где status - это целое число, возвращаемое процессу-предку для его информирования о причинах завершения процесса-потомка. 24. форматы исполняемых файлов С точки зрения архитектуры, данные системы имеют достаточно сильные отличия. Формат исполняемого файла должен в той или иной мере отражать эти отличия. В настоящее время существуют четыре формата исполняемых файлов для перечисленных операционных систем: .com (CP/M и MS-DOS); .exe (MS-DOS); .exe (Windows 3.1) или NE-формат исполняемых файлов; .exe (Windows 95/98/NT) или PE-формат исполняемых файлов; COFF- и ELF-форматы исполняемого файла UNIX. Исполняемый файл COM-формата Данный формат исполняемого файла является самым старым. Исходный файл должен удовлетворять определенным требованиям. NE-формат (New Executeable code file) исполняемого файла был разработан для операционной системы Windows 2.0. Этот же формат использовался в операционной системе OS/2 фирмы IBM. Загрузчик MS-DOS впрямую запускает программу с расширением .exe на исполнение. Данная маленькая программа добросовестно исполняется, и благополучно завершается. Исполняемый файл PE-формата (Windows NT 3.5/95/98) Для 32-разрядных операционных систем фирма Microsoft разработала специальный формат исполняемого файла. Он получил название переносимый формат исполняемого файла (PE — Portable Executable). Детальное рассмотрение PE-формата требует очень много места, но вряд ли это так необходимо. В большинстве случаев достаточно представлять общую структуру файла PE-формата. Основы этого формата были заложены в операционной системе UNIX, где аналогичный формат назывался COFF-формат (Common Object File Format — стандартный формат объектного файла). Почему формат файла в 32-разрядных операционных системах назван переносимым (portable)? Это сделано из-за стремления фирмы Microsoft создать единый формат исполняемого файла для реализаций операционной системы Windows NT на различных аппаратных платформах (что, конечно, не означает совместимости на уровне машинных команд). 25. основные команды Unix для управления процессами Состояние процессов В многозадачной (многопроцессной) системе процесс может находиться в одном из трех основных состояний: ВЫПОЛНЕНИЕ - активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором; ОЖИДАНИЕ - пассивное состояние процесса, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса; ГОТОВНОСТЬ - также пассивное состояние процесса, но в этом случае процесс заблокирован в связи с внешними по отношению к нему обстоятельствами: процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса. В состоянии ВЫПОЛНЕНИЕ в однопроцессорной системе может находиться только один процесс, а в каждом из состояний ОЖИДАНИЕ и ГОТОВНОСТЬ - несколько процессов, эти процессы образуют очереди соответственно ожидающих и готовых процессов. КОМАНДЫ ps (="print status(печать статуса)" или "process status(статус процессов)") выводит список процессов, выполняемых в текущий момент с указанием идентификаторов процессов(ID или PID). некая_команда & выполнение команды в фоновом режиме (символ "&" значит "выполнять в фоновом режиме"). jobs выводит список моих фоновых и остановленных заданий и показывает их номера. at 17:00 выполнить команду в заданное время. kill PID Завершить процесс. Для начала определите идентификатор процесса(PID), который собираетесь завершить, используя ps. killall имя_программы Завершить программу (программы) с указанным именем. К примеру, killall pppd завершит вашу работу с удаленным соединением. lpc (как "root") Проверка и управление принтерами. lpq Показывает содержимое очереди принтера. Под KDE (X-Windows), вы можете использовать "Printer Queue(Очередь принтера)" доступную из меню "K"-"Utilities(Утилиты)". 26. память. Типы адресов Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной операционной системы. Распределению подлежит вся оперативная память, не занятая операционной системой. Обычно ОС располагается в самых младших адресах, однако может занимать и самые старшие адреса. Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место, а также настройка адресов программы на конкретную область физической памяти. Типы адресов Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере. Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами:
27. методы распределения памяти между процессами без использования внешнего накопителя Все методы управления памятью могут быть разделены на два класса: методы, которые используют перемещение процессов между оперативной памятью и диском, и методы, которые не делают этого. В однозадачной ОС – зависит от программиста и задач. А. Фиксированными разделами. Память делится на равные части фиксированного размера. Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины. Это может быть выполнено вручную оператором во время старта системы или во время ее генерации. Очередная задача, поступившая на выполнение, помещается либо в общую очередь, либо в очередь к некоторому разделу. Б. Динамическими разделами. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача ждет, пока освободится достаточный непрерывный объем памяти. В этом случае память машины не делится заранее на разделы. Сначала вся память свободна. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. Задачами операционной системы при реализации данного метода управления памятью является: ведение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти. Выбор раздела для вновь поступившей задачи может осуществляться по разным правилам, таким, например, как "первый попавшийся раздел достаточного размера", или "раздел, имеющий наименьший достаточный размер", или "раздел, имеющий наибольший достаточный размер". Все эти правила имеют свои преимущества и недостатки. По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток - фрагментация памяти. Фрагментация - это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти. В. Перемещаемыми разделами. Принцип тот же что у методов динамических разделов, только периодически (либо по таймеру либо когда фрагментация памяти больше порогового значения) происходит перемещение всех занятых разделов либо с сторону старших либо в сторону младших адресов, так чтобы вся свободная память образовывала единую свободную область. Недостаток – требуется значительное время на выполнение процедуры сжатия. 28. методы распределения памяти между процессами с использованием внешнего накопителя Уже достаточно давно пользователи столкнулись с проблемой размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением было разбиение программы на части, называемые оверлеями. 0-ой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами операционной системы. Однако разбиение программы на части и планирование их загрузки в оперативную память должен был осуществлять программист. Существуют два основных подхода к управлению памятью, зависящие от доступного аппаратного обеспечения:
Хороших результатов можно достигнуть комбинируя оба этих способа. Своппинг При свопинге, в отличие от страничного, сегментного и сегментно-страничного методов реализации виртуальной памяти, процесс перемещается между памятью и диском целиком, то есть в течение некоторого времени процесс может полностью отсутствовать в оперативной памяти. Существуют различные алгоритмы выбора процессов на загрузку и выгрузку, а также различные способы выделения оперативной и дисковой памяти загружаемому процессу. При его реализации могут использоваться методы без использования дискового пространства. |