Добавлен: 14.05.2023
Просмотров: 325
Скачиваний: 3
Также, процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытые файлы и так далее.
Поток выполнения - наименьшая единица обработки, исполнение которой может быть назначено ядром операционной системы. Реализация потоков выполнения и процессов в разных операционных системах отличается друг от друга, но в большинстве случаев поток выполнения находится внутри процесса. Несколько потоков выполнения могут существовать в рамках одного и того же процесса и совместно использовать ресурсы, такие как память, тогда как процессы не разделяют этих ресурсов. В частности, потоки выполнения разделяют инструкции процесса (его код) и его контекст (значения переменных, которые они имеют в любой момент времени). В качестве аналогии потоки выполнения процесса можно уподобить нескольким вместе работающим поварам. Все они готовят одно блюдо, читают одну и ту же кулинарную книгу с одним и тем же рецептом и следуют его указаниям, причём не обязательно все они читают на одной и той же странице.
На одном процессоре многопоточность обычно происходит путём временного мультиплексирования (как и в случае многозадачности): процессор переключается между разными потоками выполнения. Это переключение контекста обычно происходит достаточно часто, чтобы пользователь воспринимал выполнение потоков или задач как одновременное. В многопроцессорных и многоядерных системах потоки или задачи могут реально выполняться одновременно, при этом каждый процессор или ядро обрабатывает отдельный поток или задачу.
Многие современные операционные системы поддерживают как временные нарезки от планировщика процессов, так и многопроцессорные потоки выполнения. Ядро операционной системы позволяет программистам управлять потоками выполнения через интерфейс системных вызовов. Некоторые реализации ядра называют потоком ядра, другие же — легковесным процессом, представляющим собой особый тип потока выполнения ядра, который совместно использует одни и те же состояния и данные.
Программы могут иметь пользовательское пространство потоков выполнения при создании потоков с помощью таймеров, сигналов или другими методами, позволяющими прервать выполнение и создать временную нарезку для конкретной ситуации.
Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:
- процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов
- процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы
- процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство
- процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами
- переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами.
Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства, которое подразумевает использование буфера ассоциативной трансляции.
Межпроцессное взаимодействие (англ. inter-process communication, IPC) — обмен данными между потоками одного или разных процессов. Реализуется посредством механизмов, предоставляемых ядром ОС или процессом, использующим механизмы ОС и реализующим новые возможности IPC. Может осуществляться как на одном компьютере, так и между несколькими компьютерами сети.
Из механизмов, предоставляемых ОС и используемых для IPC, можно выделить:
- механизмы обмена сообщениями;
- механизмы синхронизации;
- механизмы разделения памяти;
- механизмы удалённых вызовов (RPC).
Для оценки производительности различных механизмов IPC используют следующие параметры:
- пропускная способность (количество сообщений в единицу времени, которое ядро ОС или процесс способно обработать);
- задержки (время между отправкой сообщения одним потоком и его получением другим потоком).
Межпроцессное взаимодействие, наряду с механизмами адресации памяти, является основой для разграничения адресного пространства между процессами.
Разделение времени
Разделение времени - способ распределения вычислительных ресурсов между многими пользователями с помощью мультипрограммирования и многозадачности. Появление данной концепции в начале 1960-х годов и активное развитие в 1970-е привело к значительному технологическому прорыву в истории вычислительной техники.
Позволяя многим пользователям одновременно взаимодействовать с одним компьютером, разделение времени значительно снизило цену предоставления вычислительных мощностей, сделав возможным использование компьютера организациями и индивидами без необходимости его покупки. Также разделение времени содействовало разработке новых интерактивных программ.
Первые компьютеры были очень дорогими и медленными устройствами. Обычно они предназначались для выполнения конкретного набора задач и управлялись с панели оператора, который вручную вводил короткие программы посредством изменения позиции переключателей на панели. Эти программы могли выполняться в течение нескольких часов или даже недель. Но когда скорость компьютеров начала расти, простой машины в связи с вводом очередной программы стал неприемлем. Методология пакетной обработки появилась с целью уменьшить время простоя машины при вводе программы. В пакетной обработке, как только одна программа завершала выполнение, компьютер загружал следующую.
Чтобы поддерживать процесс пакетной обработки, программисты использовали перфораторы перфокарт или перфолент. Это были недорогие устройства, позволившие создавать программы в режиме «офлайн». После набора программы её передавали операторам машины, которые занимались планированием времени её запуска. Важные программы запускались в первую очередь, менее важные — после выполнения всех остальных. Когда программа, наконец, выполнялась, результат её работы обычно в распечатанном виде возвращался программисту. Весь процесс мог занимать много времени, в течение которого программист вообще не видел компьютера.
Альтернатива позволить пользователю управлять компьютером напрямую, была как правило слишком дорога чтобы её вообще могли рассматривать. Эта ситуация ограничивала интерактивную разработку лишь теми организациями, которые могли позволить себе тратить вычислительные циклы: в основном это были крупные университеты.
Концепция «разделения времени» появилась как результат понимания того, что, хотя каждый отдельный пользователь использует компьютер неэффективно, группа пользователей вместе — нет. Это связано с самой формой взаимодействия: пользователь вводит информацию посимвольно, между нажатиями клавиш следует пауза, за время которой компьютер может выполнить тысячи операций, но, если одновременно работает группа пользователей, паузы одного пользователя могут заполняться активностью других. Если подобрать оптимальный размер группы, эффективность использования компьютера значительно повысится. Точно так же пользователям могут предоставляться интервалы времени, которые компьютер тратит на ожидание операций чтения диска, ленты или передачи по сети.
По сравнению с пакетной обработкой, реализация системы, использующей преимущество разделения времени, сложна. Пакетная обработка являлась просто формой организации работы с ранними компьютерными системами. Компьютеры продолжали выполнять одну программу для одного пользователя за раз, а всё, что изменила пакетная обработка — было сокращение времени между запусками программ. Разработка системы, которая поддерживала бы одновременную работу многих пользователей, принципиально отличалась от этого. Контексты («состояния») каждого пользователя и его программ должны были храниться в машине, и иметь возможность быстро заменяться другими. Переключение контекста требовало значительного количества процессорных тактов, и было большой проблемой для медленных машин той эпохи. Тем не менее, так как компьютеры быстро увеличивали скорость, и, что ещё важнее, размер памяти, в которой могли храниться состояния пользователей, накладные расходы на разделение времени соответственно уменьшались.
Полагают, что эта концепция была впервые описана Джоном Бэкусом во время летней сессии 1954 года в Массачусетском технологическом институте, а затем Боб Бемер в начале 1957 года в статье «How to consider a computer» для журнала «Automatic Control Magazine». Первый проект реализации системы с разделением времени был начат Джоном Маккарти в конце 1957 года, на модификации IBM 704, и позже на модифицированном IBM 7090. Хотя он и бросил работу ради проекта MAC и других, один из полученных результатов, известный как Compatible Time-Sharing System или CTSS, был продемонстрирован в ноябре 1961 года. Утверждается что CTSS — первая система с разделением времени. Она использовалась до 1973 года. Другим претендентом на первую демонстрацию системы разделения времени была созданная Дональдом Блитцером система PLATO II, публично демонстрировавшаяся в Роберт Аллертон Парк в Университете Иллинойса в начале 1961 года. Блитцер говорил, что проект PLATO получил бы патент на разделение времени, если бы только Университет Иллинойса знал, как обрабатывать заявки на патент быстрее. Первой коммерчески успешной системой разделения времени была Dartmouth Time Sharing System.
В период с конца 1960-х до конца 1970-х годов, компьютерные терминалы подключались к крупным централизованным вычислительным системам организаций, которые во многих реализациях последовательно опрашивали терминалы чтобы увидеть, есть ли какие-либо дополнительные данные или действия, запрошенные пользователем компьютера. В дальнейшем, вместо опроса терминалов стали использоваться прерывания, а для связи — применяться технологии параллельной передачи данных, таких как стандарт IEEE 488. Как правило, компьютерные терминалы размещались в высших учебных заведениях и использовались также, как настольные (персональные) компьютеры сегодня. В самом начале эпохи персональных компьютеров, многие из них фактически использовались как терминалы для систем с разделением времени.
С развитием микрокомпьютеров в начале 1980-х годов, разделение времени отошло на второй план, поскольку отдельные микропроцессоры были достаточно дёшевы для того, чтобы один человек мог единолично распоряжаться всем процессорным временем, даже во время бездействия. Тем не менее, интернет вернул популярность концепции разделения времени. Дорогие корпоративные серверные «фермы» стоимостью в миллионы долларов предоставляют тысячам пользователей доступ к одним и тем же общим ресурсам. Как и ранние последовательные терминалы, сайты имеют дело в основном с всплесками активности, за которыми следуют периоды простоя. Подобный «всплесковый» характер позволяет использовать сервис множеству посетителей сайта одновременно так, что ни один из них не замечает каких-либо задержек передачи данных, пока загрузка серверов не станет слишком велика.
Разграничение доступа
Основными понятиями процесса разграничения доступа к объектам ОС являются объект доступа, метод доступа к объекту и субъект доступа.
Объектом доступа (или просто объектом) называют любой элемент ОС, доступ к которому пользователей и других субъектов доступа может быть произвольно ограничен. Возможность доступа к объектам ОС определяется не только архитектурой ОС, но и текущей политикой безопасности. Под объектами доступа понимают как ресурсы оборудования (процессор, сегменты памяти, принтер, диски и ленты), так и программные ресурсы (файлы, программы, семафоры), т. е. все то, доступ к чему контролируется. Каждый объект имеет уникальное имя, отличающее его от других объектов в системе, и каждый из них может быть доступен через хорошо определенные и значимые операции.
Методом доступа к объекту называется операция, определенная для объекта. Тип операции зависит от объектов. Например, процессор может только выполнять команды, сегменты памяти могут быть записаны и прочитаны, считыватель магнитных карт может только читать, а для файлов могут быть определены методы доступа «чтение», «запись» и «добавление» (дописывание информации в конец файла).
Субъектом доступа называют любую сущность, способную инициировать выполнение операций над объектами (обращаться к объектам по некоторым методам доступа). Обычно полагают, что множество субъектов доступа и множество объектов доступа не пересекаются. Иногда к субъектам доступа относят процессы, выполняющиеся в системе. Однако логичнее считать субъектом доступа именно пользователя, от имени которого выполняется процесс. Естественно, под субъектом доступа подразумевают не физического пользователя, работающего с компьютером, а «логического» пользователя, от имени которого выполняются процессы ОС.
Таким образом, объект доступа — это то, к чему осуществляется доступ, субъект доступа — это тот, кто осуществляет доступ, и метод доступа — это то, как осуществляется доступ.
Для объекта доступа может быть определен владелец — субъект, которому принадлежит данный объект и который несет ответственность за конфиденциальность содержащейся в объекте информации, а также за целостность и доступность объекта.
Обычно владельцем объекта автоматически назначается субъект, создавший данный объект, в дальнейшем владелец объекта может быть изменен с использованием соответствующего метода доступа к объекту. На владельца, как правило, возлагается ответственность за корректное ограничение прав доступа к данному объекту других субъектов.