Процессы и потоки в Windows.
В операционной системе Windows поддерживаются традиционные процессы, способные общаться и синхронизироваться друг с другом так же, как это делают процессы в UNIX. Каждый процесс содержит по крайней мере один поток, содержащий, в свою очередь, как минимум одно волокно (облегченный поток). Более того, для управления определенными ресурсами процессы могут объединяться в задания. Все вместе – задания, процессы, потоки и волокна – образует общий набор инструментов для управления ресурсами и реализации параллелизма как на однопроцессорных, так и на многопроцессорных машинах. Как и в системе UNIX, процессы представляют собой контейнеры для ресурсов. У каждого процесса есть 4-гигабайтное адресное пространство, в котором пользователь занимает нижние 2 Гбайт (в версиях Windows 2000 Advanced Server и Datacenter Server этот размер может быть по желанию увеличен до 3 Гбайт), а операционная система занимает остальную его часть.
Каждый процесс начинается с одного потока, но новые потоки могут создаваться динамически. Потоки формируют основу планирования центрального процессора, так как операционная система всегда для запуска выбирает поток, а не процесс. Соответственно, у каждого потока есть состояние (готовый, работающий, блокированный и т. д.), тогда как у процессов состояний нет. У каждого потока есть идентификатор потока, выбираемый из того же пространства, что и идентификаторы процессов, поэтому один и тот же идентификатор никогда не будет использован одновременно для процесса и для потока. Идентификаторы процессов и потоков кратны четырем, поэтому они могут использоваться в роли байтовых индексов в таблицах ядра, как и другие объекты.
Управление памятью в Windows.
В Windows каждый процесс имеет свое адресное пространство до 4 Гб памяти (не физическое ОЗУ). Физическая память ограничена системными ресурсами: ОЗУ и дисковым пространством. Windows выделяет приложению 2 Гб памяти, а остальные 2 Гб резервируются для нужд ядра. Если объем ОЗУ меньше, чем 4 Гб, то Windows использует механизм виртуальной памяти: когда объем ОЗУ будет исчерпан, часть содержимого физической памяти переносится на жесткий диск. Этот механизм называется подкачкой. Для каждого процесса ядро поддерживает таблицу страниц - структуру, позволяющую преобразовать виртуальные адреса в физические.
Виртуальная память Windows использует механизм отображения области физической памяти на любую область 32-разрядных адресов для того, чтобы любая программа как бы обладала своим собственным физическим ОЗУ. Каждая программа имеет собственное виртуальное адресное пространство, которое диспетчер виртуальной памяти преобразует в адреса физического ОЗУ или в файлы на жестком диске.
Физическое и виртуальное (логическое) адресное пространство каждого процесса разделено на страницы - кванты памяти, размер которых зависит от компьютера. Ядро может перемещать страницы памяти в страничный файл на диске и обратно. Когда страница перемещается в физическую память, ядро обновляет таблицу страниц соответствующего процесса. Когда ядру требуется место в физической памяти, оно вытесняет самые старые страницы физической памяти в страничный файл. Все это происходит незаметно для приложения.
Безопасность Windows.
Операционная система Windows обладает рядом достаточно совершенных и эффективных свойств безопасности, включая следующие:
1. Безопасная регистрация в системе с мерами предосторожности против попыток применения фальшивой программы регистрации.
2. Дискреционное управление доступом.
3. Управление привилегированным доступом.
4. Защита адресного пространства для каждого процесса.
5. Обнуление страниц перед выделением их процессу.
6. Аудит безопасности.
Безопасная регистрация означает, что системный администратор может потребовать ото всех пользователей наличия пароля для входа в систему. Дискреционное управление доступом позволяет владельцу файла или другого объекта указать, кто может пользоваться объектом и каким образом. Средства управления привилегированным доступом позволяют системному администратору (суперпользователю) получать доступ к объекту, несмотря на установленные его владельцем разрешения доступа. Под защитой адресного пространства имеется в виду лишь то, что у каждого процесса есть собственное защищенное виртуальное адресное пространство, недоступное для любого неавторизованного процесса. Следующий пункт означает, что при увеличении стека выделяемые для него страницы заранее обнуляются, так что процесс не может обнаружить в них информации, помещенной предыдущим владельцем страницы памяти (страницы подаются процессам из списка обнуленных страниц). Наконец, аудит безопасности следует понимать как регистрацию системой в журнале определенных событий, относящихся к безопасности. Впоследствии этот журнал может просматривать системный администратор.
У каждого пользователя (и группы) операционной системы Windows есть идентификатор безопасности SID (Security IDentifier), по которому операционная система отличает его от других пользователей. Идентификаторы безопасности представляют собой двоичные числа с коротким заголовком, за которым следует длинный случайный компонент. Каждый SID должен быть уникален в пределах всей планеты. Когда пользователь запускает процесс, этот процесс и его потоки работают под идентификатором пользователя. Большая часть системы безопасности спроектирована так, чтобы гарантировать предоставление доступа к каждому объекту только потокам с авторизованными идентификаторами безопасности. У каждого процесса есть маркер доступа, в котором указывается SID и другие свойства. Как правило, он назначается при регистрации в системе процедурой winlogon. Заголовок маркера содержит некоторую административную информацию.
Обзор системы Unix.
UNIX — семейство переносимых, многозадачных и многопользовательских операционных систем. Первая система UNIX была разработана в 1969 г. в подразделении Bell Labs компании AT&T. Некоторые отличительные признаки UNIX-систем включают в себя:
• использование простых текстовых файлов для настройки и управления системой;
• широкое применение утилит, запускаемых в командной строке;
• взаимодействие с пользователем посредством виртуального устройства — терминала;
• представление физических и виртуальных устройств и некоторых средств межпроцессового взаимодействия как файлов;
• использование конвейеров из нескольких программ, каждая из которых выполняет одну задачу.
Первоначально ОС предназначалась для разработки программного обеспечения. ОС UNIX обладает простым, но очень мощным командным языком и независимой от устройств файловой системой. При создании ОС UNIX использовался язык высокого уровня С, поэтому системные и прикладные программы получились легко переносимыми (мобильными). Компилятор с языка С для всех оттранслированных программ дает реентерабельный и разделяемый код, что позволяет эффективно использовать имеющиеся в системе ресурсы. При разработке ОС UNIX преследовались следующие цели:
• сохранить простоту и обойтись минимальным количеством функций;
• общность - одни и те же методы и механизмы должны были использоваться во многих случаях;
• создать операционную среду, в которой большие задачи можно решать, комбинируя небольшие программы, а не создавая программы заново.
Общность в ОС UNIX проявляется во многих аспектах:
• обращение к файлам, устройствам ввода/вывода и буферам межпроцессных сообщений выполняется с помощью одних и тех же средств;
• одни и те же механизмы именования, присвоения альтернативных имен и защиты от несанкционированного доступа применяются к файлам с данными, к каталогам и устройствам;
• одни и те же механизмы обслуживают программные и аппаратные прерывания.
В настоящее время UNIX используются в основном на серверах, а также как встроенные системы для различного оборудования. На рынке ОС для рабочих станций и домашнего применения лидером является Microsoft Windows, UNIX занимает только второе (Mac OS X), третье (GNU/Linux) и многие последующие места. UNIX-системы имеют большую историческую важность, поскольку благодаря им распространились некоторые популярные сегодня концепции и подходы в области ОС и программного обеспечения. Также, в ходе разработки Unix-систем был создан язык Си.
Процессы Unix.
В ОС UNIX процесс - программа, выполняемая в собственном адресном пространстве. При удачной регистрации пользователя в системе автоматически создается процесс, в котором выполняется программа командного интерпретатора. Если командному интерпретатору встречается команда, соответствующая выполняемому файлу, то он создает новый процесс и запускает в нем эту команду. Процесс может выполняться в одном из двух состояний:
• пользовательском. Процесс выполняет пользовательскую программу и имеет доступ к пользовательскому сегменту данных;
• системном. Процесс выполняет программы ядра и имеет доступ к системному сегменту данных.
Когда пользовательскому процессу требуется выполнить системную функцию, он создает системный вызов. Фактически происходит вызов ядра системы как подпрограммы. С момента появления системного вызова процесс считается системным. Пользовательский и системный процессы являются двумя фазами одного и того же процесса, но они никогда не пересекаются между собой. Каждая фаза пользуется своим собственным стеком. Стек задачи содержит: аргументы; локальные переменные; другую информацию относительно функций, выполняемых в режиме задачи. Диспетчерский процесс не имеет пользовательской фазы.
В ОС UNIX используется разделение времени, каждому процессу выделяется квант времени:
• процесс завершается сам до истечения отведенного ему кванта времени;
• процесс откладывается по истечении кванта времени.
Пользовательским процессам устанавливаются приоритеты в зависимости от количества получаемого ими процессорного времени:
- процессам, которые получили больше процессорного времени, назначаются более низкие приоритеты;
- процессам, которые получили небольшое количество процессорного времени, приоритет повышают.
Такой метод диспетчеризации обеспечивает хорошее время реакции для всех пользователей системы. Все системные процессы имеют более высокие приоритеты по сравнению с пользовательскими и поэтому всегда обслуживаются в первую очередь.
Управление памятью в Unix.
В UNIX реализована виртуальная память процессов. Каждый процесс исполняется в собственном адресном пространстве и не может непосредственно обращаться к памяти других процессоров. Такая изоляция процессов друг от друга обеспечивается механизмами операционной системы и поддерживается на аппаратном уровне в современных процессорах.
Разделение виртуальной памяти отдельных процессов необходимо в целях безопасности — процессы не должны иметь возможность по собственной инициативе менять данные других процессов — не только из-за потенциальных возможностей злоумышленников, но и потому, что программы могут совершать ошибки, и аварийное завершение одного процесса не должно отражаться на ходе работы других процессов и операционной системы в целом.
В современных реализациях UNIX для большинства аппаратных архитектур используется страничная организация виртуальной памяти. В этом случае всё адресное пространство процесса разбивается на участки одинакового размера (страницы), аналогичным образом разбивается вся физическая память. Каждая станица адресного пространства процесса может отображаться на какую-то страницу физической памяти. Это обеспечивается специальной таблицей преобразования адресов, которую операционная система поддерживает в адекватном состоянии. Таким образом, физическая память разделяется между множеством процессов, причём каждый из процессов имеет доступ только к «своим» страницам, что гарантируется операционной системой и аппаратными возможностями процессора.
В 32-разрядной архитектуре объём адресного пространства процесса равен 4 гигабайтам. Так как число процессов в системе потенциально не ограничено, очевидно, что суммарный размер адресного пространства, необходимого всем процессам, вполне может превысить размеры физической памяти. Конечно, большая часть программ оперирует довольно небольшим объёмом памяти. Однако страничное преобразование позволяет решить проблему недостатка физической памяти: неиспользуемые страницы могут копироваться из физической памяти на диск в специальную область подкачки и храниться там до момента, когда они вновь потребуются для исполнения процесса.
Ещё один мощный механизм, возможный благодаря страничному преобразованию, — это файлы, проецируемые в память. Процесс может «присоединить» файл к своему виртуальному адресному пространству. Это означает, что при обращении к файлу или изменении данных в нем операционная система будет автоматически выполнять отображение содержимого файла в страницы памяти процесса и обратно. Фактически операционная система здесь использует тот же механизм, что и при работе с областью подкачки, когда данные перемещаются с внешнего носителя в память при обращении к соответствующему адресу виртуальной памяти. Отображаемые в память файлы используются в тех случаях, когда необходимо с минимальными временными затратами многократно модифицировать содержимое файла, например, в базах данных или редакторах.
Файловые системы Unix.
Файл в ОС UNIX - множество символов с произвольным доступом. В файле содержатся произвольные данные, помещенные туда пользователем и ничего более. Информация на дисках размещается поблочно, по 512 байт в каждом блоке, блок равен сектору. Диск разбивается на следующие области:
• неиспользуемый блок;
• управляющий блок или суперблок, в котором содержится размер диска и границы других областей;
• i-список, состоящий из описаний файлов, называемых i-узлами;
• область для хранения содержимого файлов.
Каждый i-узел содержит:
- идентификационный номер владельца;
- идентификационный номер группы владельцев;
- права доступа;
- физические адреса на диске, где находится содержимое файла;
- размер файла;
- время создания файла;
- время последней модификации файла;
- время последнего изменения атрибутов;
- число ссылок на файл;
- тип файла: каталог, обычный файл или специальный файл.
Следом за i-списком идут блоки, предназначенные для хранения файлов. Пространство на диске, оставшееся свободным от файлов, образует связанный список свободных блоков.
Защита файлов осуществляется при помощи идентификатора пользователя и десяти битов защиты - прав доступа. Права доступа подразделяются на три типа:
• чтение (read);
• запись (write);
• исполнение (execute).
Эти права доступа могут быть предоставлены трем классам пользователей:
- владельцу файла;
- группе, в которую входит владелец;
- всем прочим пользователям.
Атрибуты доступа определяют, что разрешено делать с данным файлом данной категории пользователей. При создании файла модифицируется не сам файл, а каталог, в котором появляются новые ссылки на узлы. Удаление файла заключается в удалении ссылки. Право на создание и удаление файла - это право на запись в каталог. Право на выполнение каталога интерпретируется как право на поиск в нем, прохождение через него. Оно позволяет обратиться к файлу по пути, содержащему данный каталог, даже тогда, когда каталог не разрешено читать и список всех его файлов недоступен.
Файловая система UNIX характеризуется:
• иерархической структурой;
• возможностью создания и удаления файлов;
• защитой информации в файлах;
• трактовкой периферийных устройств как файлов и так далее.