Определение ос: Операционная система — Википедия – Операционная система — это… Что такое Операционная система?

Содержание

Сетевая операционная система — Википедия

Материал из Википедии — свободной энциклопедии

Сетевая операционная система — термин, относящийся к двум различным концепциям:

Операционные системы сетевых устройств[править | править код]

Сетевая операционная система может быть встроена в маршрутизатор или аппаратный межсетевой экран, работающий с функциями сетевого уровня.[2]

  • Примерами могут служить:
    • JUNOS — используется в маршрутизаторах и коммутаторах производителя Juniper Networks.
    • Cisco IOS (бывшая «Cisco Internetwork Operating System») — в продукции Cisco.
    • TiMOS — в коммутаторах от Alcatel-Lucent.
    • VRP (Versatile Routing Platform) — в коммутаторах Huawei.
    • RouterOS — программное обеспечение, превращающее компьютер или оборудование MikroTik в выделенный маршрутизатор.
    • ZyNOSruen — используется устройствами компании ZyXEL.
    • Extensible Operating System — используется коммутаторами фирмы Arista Networks
      ru
      en.
    • ExtremeXOSruen, или EXOS — в сетевых устройствах Extreme Networks.
    • Linux для встраиваемых систем — такие дистрибутивы, как OpenWrt и DD-WRT, работающие на недорогих платформах, подобным Linksys WRT54G.
  • Открытые сетевые операционные системы представлены:
    • Cumulus Linux от Cumulus Networks — дистрибутив, использующий полный TCP/IP стек из Линукс.
    • Dell Networking Operating Systemruen, или DNOS — новое название системы для коммутаторов фирмы Dell Networking. Основана на NetBSD.
    • Open Network Operating System (ONOS)
    • PicOS — основанная на Линуксе ОС фирмы Pica8ruen.
    • VyOS — открытый форк пакета машрутизации Vyatta.
    • OpenSwitch Linux Network Operating System от Hewlett-Packard.[3]

Функциональность[править | править код]

К их возможностям относится поддержка следующего:

  • сетевого оборудования;
  • сетевых протоколов;
  • протоколов маршрутизации;
  • фильтрации сетевого трафика;
  • доступа к удалённым ресурсам: принтерам, дискам посредством сети;
  • сетевых протоколов авторизации.

Сетевая ОС также включает в себя сетевые службы, позволяющие удалённым пользователям использовать те или иные ресурсы компьютера.

Примеры сетевых операционных систем:

Основное назначение[править | править код]

Главными задачами являются разделение ресурсов сети (например, дисковые пространства) и администрирование сети. С помощью сетевых функций системный администратор определяет разделяемые ресурсы, задаёт пароли, определяет права доступа для каждого пользователя или группы пользователей. Отсюда деление:

  • сетевые ОС для серверов;
  • сетевые ОС для пользователей.

Существуют специальные сетевые ОС, которым приданы функции обычных систем (например, Windows NT) и обычные ОС (например, Windows XP), которым приданы сетевые функции. Сегодня практически все современные ОС имеют встроенные сетевые функции.

  • Томаси, У. Электронные системы связи. — Техносфера, 2007. — 1360 с. — ISBN 9785457385535.
  • Поляк-Брагинский, А.В. Сеть своими руками. 3 изд.. — БХВ-Петербург, 2012. — ISBN 9785977501637.
  1. ↑ Dean, Tamara (2009). «Network Operating Systems», Network+ Guide to Networks, 421(483)
  2. ↑ Al-Shawakfa, Emad; Evens, Martha (2001). «The Dialoguer: An Interactive Bilingual Interface to a Network Operating System.», Expert Systems Vol. 18 Issue 3, p131, 19p, Retrieved 5/7/2011.
  3. ↑ HP Launches OpenSwitch Linux Network Operating System

Что такое операционная система в компьютере: как узнать вашу ОС

Здравствуйте, друзья! Многие, пользуясь компьютером, даже не подразумевают, что он работает благодаря установленной на него операционной системы, которая отвечает за аппаратное и программное обеспечение компьютера (ПК).

Сейчас существует несколько основных операционных систем, о которых мы будем говорить в этой статье, но более популярной среди новичков является windows. Поэтому больше внимания я буду уделять именно ей.

Операционная система (ОС)

И так друзья что же такое операционная система в компьютере?

Если говорить простым языком это программное обеспечение вашего ПК, как правило, предоставляемое вместе с компьютером, которое управляет ресурсами ПК и организует взаимодействие с пользователями.

ОС отвечает за работу всех установленных программ, запущенных процессов и правильную работу подключенного оборудования к вашему ПК. Без установленной операционной системы компьютер просто бесполезен.

После нажатия кнопки старт на ПК сразу начинается процесс загрузки ОС и во время него происходит следующие:

  • Проверка BIOS и оборудования
  • Проверяются и загружаются драйверы устройств
  • На последнем этапе запускается сама ОС

ОС выполняет следующие основные функции

  1.  Прием и выполнение команд пользователей
  2.  Запуск, остановка и работа программ
  3.  Управление оперативной памятью
  4.  Доступ к подключаемым к компьютеру устройствам (мышь, клавиатура, принтер…)
  5.  Сбор и сохранение данных об ошибках в работе системы

Основные виды ОС

Используя ПК дома, вы даже не задумываетесь, какая именно стоит ОС. А эту информацию знать необходимо хотя бы, потому что если вы вдруг захотите установить, какую ни будь программу, то вам придется выбрать именно ту, которая будет совместима с вашей системой.

Приступим к небольшому обзору трех самых популярных операционных систем.

Windows

Самая востребованная это Microsoft Windows выпущенная корпорацией Microsoft а сама система Windows в переводе означает – окна.

В настоящее время поддерживаются производителем несколько версий:

  • Windows 7 с пакетом обновления 1 – обслуживаться будет до 14 января 2020 года
  • Windows 8.1 – обслуживаться будет до 10 января 2023 года
  • Windows 10 – с 2015 года розничные продавцы предоставляют компьютеры именно с этой предустановленной версией

Но не пугайтесь, у кого сейчас установлены версии 7 и 8.1. Прекращение обслуживания не означает, что у вас они перестанут работать, корпорация просто прекратит выпускать обновления для них. Я знаю людей, которые до сих пор работают с Виндовс XP, хотя обновления для нее прикатились выпускаться еще в 2014 году.

Располагается операционная система на жестком диске, в большинстве случаях это раздел «Локальный диск С» где при установке создаются такие папки как:

  • Windows – располагается сама ОС со всеми настройками.
  • Program Files – здесь находятся папки с установленными на ПК программами.
  • Users (пользователи) – папка где хранятся профили пользователей
  • PerfLogs – хранит файлы отчетов о производительности системы

Внимание настоятельно рекомендую в первых двух папках, не вносить ни каких изменений, так как так как можно повредить файлы ОС или установленных программ. В результате чего ПК или установленная программа может перестать работать.

Теперь давайте подробнее разберем, как узнать свою версию Windows.

1. На рабочем столе находим значок «Компьютер» или «Этот компьютер»

Если этого значка у вас нет, то мы можем за несколько кликов вывести его на рабочий стол.

Для этого кликаем правой кнопкой мыши на свободной области рабочего стола, в открывшемся меню выбираем пункт персонализация.

В открывшемся окне для виндовс 7 и 8 ищем пункт «Изменение значков рабочего стола»

Для виндовс 10 пункт будет называться «Темы» и уже в правой части открытого окна ищем и жмем на «Параметры значков рабочего стола»

В появившемся окне (для всех Windows оно практически одинаковое) ставим галочку возле надписи компьютер и жмем кнопку «ок». Вот и все, значок мой компьютер на рабочем столе.

2. Наводим курсор мыши на значок компьютера, жмем правую кнопку и в открывшемся меню выбираем «свойства»

В открывшемся окне внимательно изучаем информацию о системе, которая установлена на ваш ПК.

У меня это Windows 10 Pro. Помимо этого есть информация о процессоре, объеме оперативной памяти, о типе системы, а также об активации моей Windows.

И так с виндовс разобрались, теперь переходим разбору остальных систем.

Apple Mac Os X

Mac Os специально выпускается компанией Apple (в переводе с английского — яблоко) с 1984 года для компьютеров Macintosh сокращенно «Mac».

Так как данная ОС устанавливается только на продукцию Apple а эти устройства стоят дорого, среди пользователей большей популярностью пользуется виндовс ведь она может работать на любых компьютерах.

Для того чтобы посмотреть какая версия Mac Os установлена нужно курсор мыши навести в левый верхний угол на кнопку Apple или значок «яблока» и нажать левой кнопкой. В открывшемся меню выбрать пункт «Об этом Mac»

Linux

Отличительной чертой Linux является то, что эта ОС с открытым исходным кодом, который может изменить любой пользователь, в связи с этим сейчас существует много версий этой ОС, каждая из которых имеет свой собственный внешний вид.

Вот три самых популярных версий (дистрибутив) Linux:

  1. Ubuntu
  2. Fedora
  3. Mint

Есть несколько преимуществ Люнекс:

  • Она бесплатная
  • Все программы установлены в одном месте
  • Можно забыть про вредоносное ПО, так как вирусы пишут в основном для виндовс.

Если у вас установлен Linux но вы не знаете какой именно дистрибутив используется то следует в консоли ввести следующие команды:

  • cat /etc/*release
  • cat /etc/*version
  • cat /etc/issue

Российские разработки

Совсем недавно государством был дан курс на импортозамещение, это вдохнуло новую жизнь в разработку отечественных операционных систем.

Разработчиками было предложено много интересных продуктов, даже одна из госкорпораций анонсировала ОС с интересным названием «ОСь».

Она должна была заменить Windows в государственных учреждениях, но почему-то сегодня на официальном сайте ее даже невозможно скачать.

Еще хотелось бы отметить, что в основном все отечественные ОС написаны на основе Linux. Лично у меня складывается такое впечатление, что они просто меняют обои рабочего стола. За бюджетные деньги.

А так хочется что-то наше на русском языке и чтобы работало с программным обеспечением, заточенным под другие системы.

Заключение

Теперь я думаю, что вы разобрались, что такое ОС и с легкостью сможете посмотреть, какая версия у вас установлена.

А остальные навыки работы за компьютером вам поможет развить обучение компьютерной грамотности.

Ну вот, вроде бы и все. Ничего сложного. Это все что я хотел рассказать вам сегодня.

Как вам статья? Считаете ее полезной? То поделитесь ей в социальных сетях, нажав кнопки расположенные ниже. И подпишитесь на обновления блога чтобы не пропустить следующую.

С уважением, Александр Зырянов.

Основные термины и определения

Класификация ПО

ОС – комплекс системных программных средств, предназначенных для эффективного управления ресурсами компьютера и обеспечения удобного интерфейса для пользователя и прикладных программ.

Оболочки ОС – программные средства, предназначенные для расширения и изменения встроенных в систему возможностей.

Операционная среда (прикладная среда)– среда, создаваемая ОС для выполнения прикладных программ.

Инструментальные системы – программные продукты, предназначенные для разработки программного обеспечения.

  • Интегрированные среды–Turbo Pascal 7.1, Quick Basic.

  • Визуальные среды, RAD-системы (среды быстрого программирования) –Delphi,VisualBasic.

Компилятор –программа, транслирующая программный код, написанный на языке программирования вы­сокого уровня, в эквивалентный код на машинном языке. Результат называется «объектным кодом».

Утилиты – служебные программы, предназначенные для обслуживания вычислительной системы и ОС.

Системы технического обслуживания – совокупность программно-аппаратных средств ПК, предназначенных для обнаружения сбоев в процессе работы компьютера.

Классификация ОС

Процесс (задача) – выполнение отдельной программы с ее данными на отдельном процессоре (программа в стадии ее выполнения).

Нить (поток) – части процесса, предназначенные для параллельного выполнения

Ресурсы – аппаратные, программные и информационные объекты, которые распределяются в системе между процессами.

Многозадачность (мультипрограммность) – режим работы ОС, при котором возможно одновременное выполнение нескольких процессов (задач) в системе.

  • Системы пакетной обработки. Поддержка максимальной пропускной способности.

  • Системы разделения времени. Поддержка максимального удобства пользователя. Каждому пользователю выделяется квант времени.

  • Системы реального времени. Минимальное время реакции на запросы устройств системы. Применяются для управления, например, технологическими процессами. самолетом и пр.

Вытесняющая многозадачность – способ реализации многозадачности, при котором переключение процессов выполняет ОС.

Невытесняющая многозадачность – способ реализации многозадачности, при котором разрешение на переключение процесса дает сам активный процесс, т.о. планирование вычислительных процессов выполняют совместно активный вычислительный процесс и ОС.

Многопользовательский режим – способ функционирования ОС, при котором возможна одновременная работа нескольких пользователей одной системы. При этом имеются средства защиты информации каждого пользователя.

Многопроцессорная обработка – возможность ОС выполняться в системе с несколькими процессорами.

Сетевые ОС – ОС, предназначенные для управления ресурсами компьютеров, объединенных в сеть с целью совместного использования данных и ресурсов.

Технология “клиент-сервер” – способ организации вычислений в сети, при котором совместно работают средства предоставления собственных ресурсов и услуг в общее пользование –сервер– и средства запроса доступа к удаленным услугам и ресурсам –клиент.

Сетевая служба– совокупность серверной и клиентской частей, предоставляющих доступ к конкретному типу ресурса в сети. Сетевая служба может быть представлена в ОС либо обеими частями, либо одной из них.

Транспортные средства –

аппаратные и программные средства, а также протоколы (семиуровневые протоколыOSI), предназначенные для обмена данными между компьютерами сети.

Переносимость (мобильность) ОС – возможность ОС выполняться на различных аппаратных платформах (компьютерах с различными архитектурами). Переносимые ОС написаны на языках высокого уровня.

Модульная архитектура ОС – построение ОС на основе функциональных модулей, работающих под управлением ядра. Функции ядра выполняются в привилегированном (защищенном) режиме, ядро постоянно находится в оперативной памяти. Модули загружаются в память только на время выполнения своих функций.

Ядро ОС– модуль или модули, выполняющие основные функции ОС. Функции ядра выполняются в привилегированном (защищенном) режиме, ядро постоянно находится в оперативной памяти.

Микроядерные ОС – ОС, ядро которых выполняет только базовые функции управления процессами.

Монолитные ОС – ОС, ядро которых выполняет все основные функции операционной системы.

Функциональные компоненты автономных ОС

Управление процессами

Дескриптор процесса – информация о процессе, необходимая ОС для управления процессом.

Контекст процесса – информация о состоянии операционной среды процесса (состояние регистров процессора и системного счетчика, режим работы процессора, состояние указателей на открытые файлы и др.).

Планирование процессов– определение момента времени для смены текущего процесса и выбор нового процесса для выполнения.

Диспетчеризация процессов– реализация найденного в процессе планирования решение, т. е. переключение процессора с одного процесса на другой.

Состояния процессов– Ожидание, Выполнение, Готовность…

Очередь процессов —

Управление памятью

Способы размещения процессов в памяти – непрерывное, страничное, сегментное, странично-сегментное.

Виртуализация памяти (вытеснение процессов) – способ управления памятью в ОС, при котором при выполнении процесса используется перемещение кодов и данных между оперативной памятью и диском.

  • Свопинг – образы процессов выгружаются на диск и возвращаются в оперативную память

    целиком;

  • Виртуальная память – между оперативной памятью и дисками перемещаются части (сегменты, страницы и т. п.) образов процессов.

Кэширование – способ совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных, при котором происходит динамическое копирование в “быстрое ” ЗУ наиболее часто используемой информации из “медленного” ЗУ.

Файл подкачки– зарезервированный блок дискового пространства, который используется для временной выгрузки страниц из физической памяти при организации виртуальной памяти. ВWindows–PageFile.sys

Файловые системы. Управление файлами

Ядро операционной системы — Википедия

У этого термина существуют и другие значения, см. Ядро.

Ядро́ (англ. kernel) — центральная часть операционной системы (ОС), обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память, внешнее аппаратное обеспечение, внешнее устройство ввода и вывода информации. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов.

Как основополагающий элемент ОС, ядро представляет собой наиболее низкий уровень абстракции для доступа приложений к ресурсам системы, необходимым для их работы. Как правило, ядро предоставляет такой доступ исполняемым процессам соответствующих приложений за счёт использования механизмов межпроцессного взаимодействия и обращения приложений к системным вызовам ОС.

Описанная задача может различаться в зависимости от типа архитектуры ядра и способа её реализации.

Типы архитектур ядер операционных систем[править | править код]

Монолитное ядро[править | править код]

Монолитное ядро предоставляет богатый набор абстракций оборудования. Все части монолитного ядра работают в одном адресном пространстве. Это такая схема операционной системы, при которой все компоненты её ядра являются составными частями одной программы, используют общие структуры данных и взаимодействуют друг с другом путём непосредственного вызова процедур. Монолитное ядро — старейший способ организации операционных систем. Примером систем с монолитным ядром является большинство UNIX-систем.

  • Достоинства: Скорость работы, упрощённая разработка модулей.
  • Недостатки: Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.

Примеры: Традиционные ядра UNIX (такие как BSD), Linux; ядро MS-DOS, ядро KolibriOS.

Некоторые старые монолитные ядра, в особенности систем класса UNIX/Linux, требовали перекомпиляции при любом изменении состава оборудования. Большинство современных ядер позволяют во время работы подгружать модули, выполняющие часть функций ядра. В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы, называемой монолитным ядром (monolithic kernel), которое представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме.

Модульное ядро[править | править код]

Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем.

В отличие от «классических» монолитных ядер, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).

Микроядро[править | править код]

Микроядро предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Бо́льшая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами. Решающим критерием «микроядерности» является размещение всех или почти всех драйверов и модулей в сервисных процессах, иногда с явной невозможностью загрузки любых модулей расширения в собственно микроядро, а также разработки таких расширений.

  • Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы. Основное достоинство микроядерной архитектуры — высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая её работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.
  • Недостатки: Передача данных между процессами требует накладных расходов.

Классические микроядра предоставляют лишь очень небольшой набор низкоуровневых примитивов, или системных вызовов, реализующих базовые сервисы операционной системы.

  • Сервисные процессы (в принятой в семействе UNIX терминологии — «демоны») активно используются в самых различных ОС для задач типа запуска программ по расписанию (UNIX и Windows NT), ведения журналов событий (UNIX и Windows NT), централизованной проверки паролей и хранения пароля текущего интерактивного пользователя в специально ограниченной области памяти (Windows NT). Тем не менее, не следует считать ОС микроядерными только из-за использований такой архитектуры.

Примеры: Symbian OS; Windows CE; OpenVMS; Mach, используемый в GNU/Hurd и Mac OS X; QNX; AIX; Minix; ChorusOS; AmigaOS; MorphOS.

Экзоядро[править | править код]

Экзоядро — ядро операционной системы, предоставляющее лишь функции для взаимодействия между процессами, безопасного выделения и освобождения ресурсов. Предполагается, что API для прикладных программ будут предоставляться внешними по отношению к ядру библиотеками (откуда и название архитектуры).

Возможность доступа к устройствам на уровне контроллеров позволит эффективней решать некоторые задачи, которые плохо вписываются в рамки универсальной ОС, например, реализация СУБД будет иметь доступ к диску на уровне секторов диска, а не файлов и кластеров, что положительно скажется на быстродействии.

Наноядро[править | править код]

Наноядро — архитектура ядра операционной системы, в рамках которой крайне упрощённое и минималистичное ядро выполняет лишь одну задачу — обработку аппаратных прерываний, генерируемых устройствами компьютера. После обработки прерываний от аппаратуры наноядро, в свою очередь, посылает информацию о результатах обработки (например, полученные с клавиатуры символы) вышележащему программному обеспечению при помощи того же механизма прерываний. Примером является KeyKOS — самая первая ОС на наноядре. Первая версия вышла ещё в 1983 году.

Гибридное ядро[править | править код]

Гибридные ядра — это модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра. Пример: ядра ОС Windows семейства NT.

Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, сейчас ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра[1]. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.

Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляются монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.

Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйвера устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер.

Примеры: Windows NT, DragonFly BSD.

Определение операционной системы. Место ОС в программном обеспечении (стр. 1 из 2)

ОПРЕДЕЛЕНИЕ ОПЕРАЦИОННОЙ СИСТЕМЫ. МЕСТО ОС В ПРОГРАММНОМ ОБЕСПЕЧЕНИИ

Операционная система компьютера представляет собой комплекс взаимосвязанных программ, который действует как интерфейс между приложениями и пользователями с одной стороны, и аппаратурой компьютера с другой стороны. В соответствии с этим определением ОС выполняет две группы функций (рис.1):

— предоставление пользователю или программисту вместо реальной аппаратуры компьютера расширенной виртуальной машины, с которой удобней работать и которую легче программировать;

повышение эффективности использования компьютера путем рационального управления его ресурсами в соответствии с некоторым критерием.

Для того, чтобы успешно решать свои задачи, современный пользователь или даже прикладной программист может обойтись без досконального знания аппаратного устройства компьютера. Ему не обязательно быть в курсе того, как функционируют различные электронные блоки и электромеханические узлы компьютера. Более того, очень часто пользователь может не знать даже системы команд процессора. Пользователь-программист привык иметь дело с мощными высокоуровневыми функциями, которые ему предоставляет операционная система.

В результате реальная компьютер, способный выполнять только небольшой набор элементарных действий, определяемых ее системой команд, превращается в виртуальную машину, выполняющую широкий набор гораздо более мощных функций. Виртуальная машина тоже управляется командами, но это уже команды другого, более высокого уровня.

Таким образом, назначение ОС состоит в предоставлении пользователю/программисту некоторой расширенной виртуальной машины, которую легче программировать и с которой легче работать, чем непосредственнос аппаратурой, составляющей реальный компьютер или реальную сеть.

Операционная система не только предоставляет пользователям и программистам удобный интерфейс к аппаратным средствам компьютера, но и является механизмом, распределяющим ресурсы компьютера.

К числу основных ресурсов современных вычислительных систем могут быть отнесены такие ресурсы, как

— процессоры,

— основная память,

— таймеры,

— наборы данных,

— диски,

— накопители на магнитных лентах,

— принтеры,

— сетевые устройства и др.

Ресурсы распределяются между процессами.

Программа — это статический объект, представляющий собой файл с кодами и данными.

Процесс (задача)представляет собой базовое понятие большинства современных ОС и часто кратко определяется как программа в стадии выполнения. Процесс — это динамический объект, который возникает в операционной системе после того, как пользователь или сама операционная система решает «запустить программу на выполнение», то есть создать новую единицу вычислительной работы. Например, ОС может создать процесс в ответ на команду пользователя runprgl.exe, где prgl.exe — это имя файла, в котором хранится код программы.

Управление ресурсами вычислительной системы с целью наиболее эффективного их использования является назначением операционной системы. ОС также отслеживает и разрешает конфликты, возникающие при обращении нескольких процессов к одному и тому же устройству ввода-вывода или к одним и тем же данным.

Критерий эффективности, в соответствии с которым ОС организует управление ресурсами компьютера, может быть различным. Например, в одних системах важен такой критерий, как пропускная способность вычислительной системы, в других — время ее реакции. Соответственно выбранному критерию эффективности операционные системы по-разному организуют вычислительный процесс.

Управление ресурсами включает решение следующих общих, не зависящих от типа ресурса задач (рис.2):

— планирование ресурса — то есть определение, какому процессу, когда и в каком количестве (если ресурс может выделяться частями) следует выделить данный ресурс;

— удовлетворение запросов на ресурсы;

— отслеживание состояния и учет использования ресурса — то есть поддержание оперативной информации о том, занят или свободен ресурс и какая доля ресурса уже распределена;

— разрешение конфликтов между процессами.

Для решения этих общих задач управления ресурсами разные ОС используют различные алгоритмы, особенность которых, в конечном счете, и определяют облик ОС в целом, включая характеристики производительности, область применения и даже пользовательский интерфейс.

Задача организации эффективного совместного использования ресурсов несколькими процессами является весьма сложной, и сложность эта порождается в основном случайным характером возникновения запросов на потребление ресурсов. В мультипрограммной системе образуются очереди заявок от одновременно выполняемых программ к разделяемым ресурсам компьютера: процессору, странице памяти, к принтеру, к диску.


Операционная система организует обслуживание этих очередей по разным алгоритмам: в порядке поступления, на основе приоритетов, кругового обслуживания и т. д. Анализ и определение оптимальных дисциплин обслуживания заявок является предметом специальной области прикладной математики — теории массового обслуживания. Эта теория иногда используется для оценки эффективности тех или иных алгоритмов управления очередями в операционных системах. Очень часто в ОС реализуются и эмпирические алгоритмы обслуживания очередей, прошедшие проверку практикой.

Функции операционной системы автономного компьютера обычно группируются либо в соответствии с типами локальных ресурсов, которыми управляет ОС, либо в соответствии со специфическими задачами, применимыми ко всем ресурсам. Такие группы функций называют подсистемами. Наиболее важными подсистемами управления ресурсами являются (рис.3):

— Подсистемы управления процессами,

— Подсистемы управления памятью,

— Подсистемы управления файлами и внешними устройствами,

— Подсистемы защиты данных и администрирования,

— Интерфейс прикладного программирования,

— Подсистемы пользовательского интерфейса.


Управление процессами

Важнейшей частью операционной системы, непосредственно влияющей на функционирование вычислительной машины, является подсистема управления процессами.

Для каждого вновь создаваемого процесса ОС генерирует системные информационные структуры, которые содержат данные о потребностях процесса в ресурсах вычислительной системы, а также о фактически выделенных ему ресурсах. Таким образом, процесс можно также определить как некоторую заявку на потребление системных ресурсов.

Чтобы процесс мог быть выполнен, операционная система должна назначить ему область оперативной памяти, в которой будут размещены коды и данные процесса, а также предоставить ему необходимое количество процессорного времени. Кроме того, процессу может понадобиться доступ к таким ресурсам, как файлы и устройства ввода-вывода.

В информационные структуры процесса часто включаются вспомогательные данные, характеризующие историю пребывания процесса в системе, его текущее состояние (активное или заблокированное), степень привилегированности процесса (значение приоритета). Данные такого рода могут учитываться операционной системой при принятии решения о предоставлении ресурсов процессу.

В мультипрограммной операционной системе одновременно может существовать несколько процессов. Часть процессов порождается по инициативе пользователей и их приложений, такие процессы обычно называют пользовательскими. Другие процессы, называемые системными, инициализируются самой операционной системой для выполнения своих функций.

Важной задачей операционной системы является защита ресурсов, выделенных данному процессу, от остальных процессов. Одним из наиболее тщательно защищаемых ресурсов процесса являются области оперативной памяти, в которой хранятся коды и данные процесса. Совокупность всех областей оперативной памяти, выделенных операционной системой процессу, называется его адресным пространством. Говорят, что каждый процесс работает в своем адресном пространстве, имея в виду защиту адресных пространств, осуществляемую ОС, Защищаются и другие типы ресурсов, такие как файлы, внешние устройства и т. д. Операционная система может не только защищать ресурсы, выделенные одному процессу, но и организовывать их совместное использование, например разрешать доступ к некоторой области памяти нескольким процессам.

На протяжении периода существования процесса его выполнение может быть многократно прервано и продолжено. Для того чтобы возобновить выполнение процесса, необходимо восстановить состояние его операционной среды. Состояние операционной среды идентифицируется состоянием регистров и программного счетчика, режимов работы процессора, указателя на открытые файлы, информацией о незавершенных операциях ввода-вывода, кодами ошибок выполняемых данным процессом системных вызовов и т.д. Эта информация называется контекстом процесса. Говорят, что при смене процесса происходит переключение контекстов.

Операционная система берет на себя также функции синхронизации процессов, позволяющие процессу приостанавливать свое выполнение до наступления какого-либо события в системе, например завершения операции ввода-вывода, осуществляемой по его запросу операционной системой.

В операционной системе нет однозначного соответствия между процессами и программами. Один и тот же программный файл может породить несколько параллельно выполняемых процессов, а процесс может в ходе своего выполнения сменить программный файл и начать выполнять другую программу. Для реализации сложных программных комплексов полезно бывает организовать их работу в виде нескольких параллельных процессов, которые периодически взаимодействуют друг с другом и обмениваются некоторыми данными. Так как операционная система защищает ресурсы процессов и не позволяет одному процессу писать или читать из памяти другого процесса, то для оперативного взаимодействия процессов ОС должна предоставлять особые средства, которые называют средствами межпроцессного взаимодействия.

Оболочка операционной системы — Википедия

Оболо́чка операцио́нной систе́мы (от англ. shell «оболочка») — интерпретатор команд операционной системы, обеспечивающий интерфейс для взаимодействия пользователя с функциями системы.

В общем случае различают оболочки с двумя типами интерфейса для взаимодействия с пользователем: текстовый пользовательский интерфейс (TUI) и графический пользовательский интерфейс (GUI).

Для обеспечения интерфейса командной строки в операционных системах часто используются командные интерпретаторы, которые могут представлять собой самостоятельные языки программирования с собственным синтаксисом и отличительными функциональными возможностями. В операционные системы MS-DOS и Windows 9x включён командный интерпретатор command.com, в Windows NT включён cmd.exe, начиная с Windows XP (пакет обновления 2) доступен PowerShell, который является встроенным компонентом ОС начиная с Windows 7 и Windows 2008 Server.

В UNIX-подобных системах у пользователя есть возможность менять командный интерпретатор, используемый по умолчанию. Из командных оболочек UNIX наиболее популярны bash, csh, ksh, zsh.

Функции[править | править код]

Командный интерпретатор исполняет команды своего языка, заданные в командной строке или поступающие из стандартного ввода или указанного файла.

В качестве команд интерпретируются вызовы системных или прикладных утилит, а также управляющие конструкции. Кроме того, оболочка отвечает за раскрытие шаблонов имен файлов и за перенаправление и связывание ввода-вывода утилит.

В совокупности с набором утилит оболочка представляет собой операционную среду, язык программирования и средство решения как системных, так и некоторых прикладных задач, в особенности автоматизации часто выполняемых последовательностей команд.

Стандартный командный интерпретатор[править | править код]

Стандартом POSIX (ISO/IEC 9945) (Том 3. Оболочка и утилиты) определён язык оболочки, включающий конструкции последовательного (перевод строки, точка с запятой), условного (if, case, ||, &&) и циклического (for, for in, while, until) исполнения команд, а также оператор присваивания.

Стандартом также определён режим редактирования вводимых команд, являющийся подмножеством команд стандартного текстового редактора (vi).

Альтернативы[править | править код]

В UNIX-подобных системах наиболее распространены такие языки командных интерпретаторов, как bash, sh и ksh, но также применяются альтернативные оболочки zsh, csh и tcsh, отличающиеся синтаксисом управляющих конструкций и поведением переменных.

Некоторые операционные системы поставляются с интерпретаторами собственных языков командных файлов (такими, как язык командных файлов MS-DOS и Windows, язык REXX в ОС OS/2)

Многие пользователи и разработчики программного обеспечения пользуются для автоматизации часто выполняемых последовательностей команд операционной системы интерпретируемыми языками программирования, например, Perl или Python.

Графические оболочки для Windows[править | править код]

Последние версии операционной системы Windows используют в качестве своей оболочки интегрированную среду Проводника Windows. Проводник Windows представляет собой визуальную среду управления, включающую в себя Рабочий стол, Меню Пуск, Панель задач, а также функции управления файлами. Ранние версии Windows 3.xx в качестве графической оболочки включают Диспетчер программ. Также существует большое количество альтернативных графических оболочек для Windows.

Бибарсов М. Р., Бибарсова Г. Ш., Кузьминов Ю. В. «Операционные системы, среды и оболочки: Учебное пособие». Ставрополь: Изд-во СГПИ, 2010. — 120 с.

Поток выполнения — Википедия

Процесс с двумя потоками выполнения на одном процессоре

Пото́к выполне́ния (тред; от англ. thread — нить) — наименьшая единица обработки, исполнение которой может быть назначено ядром операционной системы. Реализация потоков выполнения и процессов в разных операционных системах отличается друг от друга, но в большинстве случаев поток выполнения находится внутри процесса. Несколько потоков выполнения могут существовать в рамках одного и того же процесса и совместно использовать ресурсы, такие как память, тогда как процессы не разделяют этих ресурсов. В частности, потоки выполнения разделяют инструкции процесса (его код) и его контекст (значения переменных, которые они имеют в любой момент времени). В качестве аналогии потоки выполнения процесса можно уподобить нескольким вместе работающим поварам. Все они готовят одно блюдо, читают одну и ту же кулинарную книгу с одним и тем же рецептом и следуют его указаниям, причём не обязательно все они читают на одной и той же странице.

На одном процессоре многопоточность обычно происходит путём временного мультиплексирования (как и в случае многозадачности): процессор переключается между разными потоками выполнения. Это переключение контекста обычно происходит достаточно часто, чтобы пользователь воспринимал выполнение потоков или задач как одновременное. В многопроцессорных и многоядерных системах потоки или задачи могут реально выполняться одновременно, при этом каждый процессор или ядро обрабатывает отдельный поток или задачу.

Многие современные операционные системы поддерживают как временные нарезки от планировщика процессов, так и многопроцессорные потоки выполнения. Ядро операционной системы позволяет программистам управлять потоками выполнения через интерфейс системных вызовов. Некоторые реализации ядра называют потоком ядра, другие же — легковесным процессом (англ. light-weight process, LWP), представляющим собой особый тип потока выполнения ядра, который совместно использует одни и те же состояния и данные.

Программы могут иметь пользовательское пространство потоков выполнения при создании потоков с помощью таймеров, сигналов или другими методами, позволяющими прервать выполнение и создать временную нарезку для конкретной ситуации (Ad hoc).

Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:

  • процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов
  • процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы
  • процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство
  • процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами
  • переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами.

Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства, которое подразумевает использование буфера ассоциативной трансляции.

Многопоточность, как широко распространённая модель программирования и исполнения кода, позволяет нескольким потокам выполняться в рамках одного процесса. Эти потоки выполнения совместно используют ресурсы процесса, но могут работать и самостоятельно. Многопоточная модель программирования предоставляет разработчикам удобную абстракцию параллельного выполнения. Однако, пожалуй, наиболее интересное применение технологии имеется в том случае, когда она применяется к одному процессу, что позволяет его параллельное выполнение на многопроцессорной системе.

Это преимущество многопоточной программы позволяет ей работать быстрее на компьютерных системах, которые имеют несколько процессоров, процессор с несколькими ядрами или на кластере машин — из-за того, что потоки выполнения программ естественным образом поддаются действительно параллельному выполнению процессов. В этом случае программисту нужно быть очень осторожным, чтобы избежать состояния гонки, и другого неинтуитивного поведения. Для того, чтобы правильно манипулировать данными, потоки выполнения должны часто проходить через процедуру рандеву, чтобы обрабатывать данные в правильном порядке. Потокам выполнения могут также потребоваться мьютексы (которые часто реализуются с использованием семафоров), чтобы предотвратить одновременное изменение общих данных или их чтение во время процесса изменения. Неосторожное использование таких примитивов может привести к тупиковой ситуации.

Другим использованием многопоточности, применяемым даже для однопроцессорных систем, является возможность для приложения реагирования на ввод данных. В однопоточных программах, если основной поток выполнения заблокирован выполнением длительной задачи, всё приложение может оказаться в замороженном состоянии. Перемещая такие длительные задачи в рабочий поток, который выполняется параллельно с основным потоком, становится возможным для приложений продолжать реагировать на действия пользователя во время выполнения задач в фоновом режиме. С другой стороны, в большинстве случаев многопоточность — не единственный способ сохранить чувствительность программы. То же самое может быть достигнуто через асинхронный ввод-вывод или сигналы в UNIX.[1]

Операционные системы планируют выполнение потоков одним из двух способов:

  1. Приоритетная многопоточность, вообще говоря, считается более совершенным подходом, так как она позволяет операционной системе определить, когда должно происходить переключение контекста. Недостаток приоритетной многопоточности состоит в том, что система может сделать переключение контекста в неподходящее время, что приводит к инверсии приоритета и другим негативным эффектам, которых можно избежать, применяя кооперативную многопоточность.
  2. Кооперативная многопоточность полагается на сами потоки и отказывается от управления, если потоки выполнения находятся в точках остановки. Это может создать проблемы, если поток выполнения ожидает ресурс, пока он не станет доступным.

До конца 1990-х процессоры в настольных компьютерах не имели поддержки многопоточности, так как переключение между потоками, как правило, происходило медленнее, чем полное переключение контекста процесса. Процессоры во встраиваемых системах, которые имеют более высокие требования к поведению в реальном времени, могут поддерживать многопоточность за счёт уменьшения времени на переключение между потоками, возможно, путём распределения выделенных регистровых файлов для каждого потока выполнения, вместо сохранения/восстановления общего регистрового файла. В конце 1990-х идея выполнения инструкций нескольких потоков одновременно, известная как одновременная многопоточность, под названием Hyper-Threading, достигла настольных компьютеров с процессором Intel Pentium 4. Потом она была исключена из процессоров архитектуры Intel Core и Core 2, но позже восстановлена в архитектуре Core i7.

Критики многопоточности утверждают, что увеличение использования потоков имеет существенные недостатки:

Хотя кажется, что потоки выполнения — это небольшой шаг от последовательных вычислений, по сути они представляют собой огромный скачок. Они отказываются от наиболее важных и привлекательных свойств последовательных вычислений: понятности, предсказуемости и детерминизма. Потоки выполнения, как модель вычислений, являются потрясающе недетерминированными, и уменьшение этого недетерминизма становится задачей программиста.[2]

Процессы, потоки выполнения ядра, пользовательские потоки и файберы[править | править код]

Процесс является «самой тяжёлой» единицей планирования ядра. Собственные ресурсы для процесса выделяются операционной системой. Ресурсы включают память, дескрипторы файлов, разъёмы, дескрипторы устройств и окна. Процессы используют адресное пространство и файлы ресурсов в режиме разделения времени только через явные методы, такие как наследование дескрипторов файлов и сегментов разделяемой памяти. Процессы, как правило, предварительно преобразованы к многозадачному способу выполнения.

Потоки выполнения ядра относятся к «лёгким» единицам планирования ядра. Внутри каждого процесса существует по крайней мере один поток выполнения ядра. Если в рамках процесса могут существовать несколько потоков выполнения ядра, то они совместно используют общую память и файл ресурсов. Если процесс выполнения планировщика операционной системы является приоритетным, то потоки выполнения ядра тоже являются приоритетно многозадачными. Потоки выполнения ядра не имеют собственных ресурсов, за исключением стека вызовов, копии регистров процессора, включая счётчик команд, и локальную память потока выполнения (если она есть). Ядро может назначить по одному потоку выполнения для каждого логического ядра системы (поскольку каждый процессор разделяет сам себя на несколько логических ядер, если он поддерживает многопоточность, либо поддерживает только одно логическое ядро на каждое физическое ядро, если не поддерживает многопоточность), а может выполнять свопинг заблокированных потоков выполнения. Однако потоки выполнения ядра требуют гораздо больше времени, чем требуется на свопинг пользовательских потоков выполнения.

Потоки выполнения иногда реализуются в пользовательском пространстве библиотек, в этом случае они называются пользовательскими потоками выполнения. Ядро не знает о них, так что они управляются и планируются в пользовательском пространстве. В некоторых реализациях пользовательские потоки выполнения основываются на нескольких верхних потоках выполнения ядра, чтобы использовать преимущества многопроцессорных машин (модели M:N). В данной статье под термином «поток выполнения» по умолчанию (без квалификатора «ядра» или «пользовательский») имеется в виду «поток выполнения ядра». Пользовательские потоки выполнения, реализованные с помощью виртуальных машин, называют также «зелёными потоками выполнения». Пользовательские потоки выполнения, как правило, можно быстро создавать, и ими легко управлять, но они не могут использовать преимущества многопоточности и многопроцессорности. Они могут блокироваться, если все связанные с ним потоки выполнения ядра заняты, даже если некоторые пользовательские потоки готовы к запуску.

Файберы являются ещё более «лёгкими» блоками планирования, относящимися к кооперативной многозадачности: выполняющийся файбер должен явно «уступить» право другим файберам на выполнение, что делает их реализацию гораздо легче, чем реализацию потоков выполнения ядра или пользовательских потоков выполнения. Файберы могут быть запланированы для запуска в любом потоке выполнения внутри того же процесса. Это позволяет приложениям получить повышение производительности за счет управления планированием самого себя, вместо того чтобы полагаться на планировщик ядра (который может быть не настроен на такое применение). Параллельные среды программирования, такие как OpenMP, обычно реализуют свои задачи посредством файберов.

Проблемы потоков выполнения и файберов[править | править код]

Параллелизм и структуры данных[править | править код]

Потоки выполнения одного и того же процесса совместно используют одно и то же адресное пространство. Это позволяет одновременно выполняющимся кодам быть плотно связанными и удобно обмениваться данными без накладных расходов и сложности межпроцессного взаимодействия. При совместном доступе нескольких потоков даже к простым структурам данных возникает опасность возникновения состояния гонки в том случае, если для обновления данных требуется более одной инструкции процессора: два потока выполнения могут в конечном итоге попытаться одновременно обновить структуры данных и получить в итоге данные, состояние которых отличается от ожидаемого. Ошибки, вызванные состоянием гонки, бывает очень трудно воспроизвести и изолировать.

Чтобы избежать этого, прикладные программные интерфейсы (API) потоков выполнения предлагают примитивы синхронизации, такие как мьютексы, для блокировки структур данных от одновременного доступа. На однопроцессорных системах поток выполнения, обратившийся к заблокированному мьютексу, должен остановить работу и, следовательно, инициировать переключение контекста. На многопроцессорных системах поток выполнения может вместо опроса мьютекса произвести захват спинлока. Оба этих способа могут снижать производительность и вынуждать процессор в SMP-системах конкурировать за шину памяти, особенно если уровень модульности блокировок слишком высокий.

Ввод-вывод и планирование[править | править код]

Реализация пользовательских потоков выполнения и файберов, как правило, производится полностью в пользовательском пространстве. В результате переключение контекста между пользовательскими потоками выполнения и файберами в одном и том же процессе очень эффективно, поскольку вообще не требует никакого взаимодействия с ядром. Переключение контекста производится локально путём сохранения регистров процессора, используемых работающим пользовательским потоком выполнения или файбером, и затем загрузкой регистров, требуемых для нового выполнения. Поскольку планирование происходит в пользовательском пространстве, политика планирования может быть легко адаптирована к требованиям конкретной программы.

Однако использование блокировок системных вызовов для пользовательских потоков выполнения (в отличие от потоков выполнения ядра) и файберов имеет свои проблемы. Если пользовательский поток выполнения или файбер выполняет системный вызов, другие потоки выполнения и файберы процесса не могут работать до завершения этой обработки. Типичный пример такой проблемы связан с выполнением операций ввода-вывода. Большинство программ рассчитаны на синхронное выполнение ввода-вывода. При инициации ввода-вывода делается системный вызов, и он не возвращается до его завершения. В промежутке весь процесс блокируется ядром и не может исполняться, лишая возможности работы другие пользовательские потоки и файберы этого процесса.

Общим решением этой проблемы является обеспечение отдельного API для ввода-вывода, который реализует синхронный интерфейс с использованием внутреннего неблокирующего ввода-вывода, и запуск другого пользовательского потока выполнения или файбера на время обработки ввода-вывода. Подобные решения могут быть предусмотрены для блокирующих системных вызовов. Кроме того, программа может быть написана так, чтобы избежать использования синхронного ввода-вывода или других блокирующих системных вызовов.

В SunOS 4.x реализованы так называемые «легковесные процессы» или LWP. В NetBSD 2.x + и DragonFly BSD реализованы LWP как потоки выполнения ядра (модель 1:1). В SunOS 5.2 и до SunOS 5.8, а также в NetBSD 2 и до NetBSD 4 реализована двухуровневая модель, использующая один или несколько пользовательских потоков выполнения на каждый поток выполнения ядра (модель M:N). В SunOS 5.9 и последующих версиях, а также в NetBSD 5 ликвидирована поддержка пользовательских потоков выполнения, произошёл возврат к модели 1:1.[3] В FreeBSD 5 реализована модель M:N. В FreeBSD 6 поддерживаются обе модели: 1:1 и M:N, и пользователь может выбрать, какую из них он будет использовать в данной программе, используя /etc/libmap.conf. В FreeBSD начиная с версии 7 модель 1:1 стала использоваться по умолчанию, а в FreeBSD 8 и последующих версиях модель M:N не поддерживается совсем.

Использование потоков выполнения ядра упрощает код пользователя, перемещая некоторые из наиболее сложных аспектов многопотоковости в ядро. От программы не требуется планирование потоков выполнения и явных захватов процессора. Пользовательский код может быть записан в привычном процедурном стиле, включая вызовы блокирующего API без лишения доступа к процессору других потоков выполнения. Тем не менее, потоки выполнения ядра могут вызвать переключение контекста между потоками выполнения в любое время и тем самым подвергнуть опасности появления ошибок гонки и одновременности, которые могли бы не возникать. На SMP-системах это ещё более усугубляется, потому как потоки выполнения ядра могут в прямом смысле выполняться одновременно на разных процессорах.

1:1 (потоки выполнения на уровне ядра)[править | править код]

Потоки выполнения, созданные пользователем в модели 1-1, соответствуют диспетчируемым сущностям ядра. Это простейший возможный вариант реализации потоковости. В Windows API этот подход использовался с самого начала. В Linux обычная библиотека C реализует этот подход (через библиотеку потоков POSIX, а в более старших версиях через LinuxThreads). Такой же подход используется ОС Solaris, NetBSD и FreeBSD.

N:1 (потоки выполнения уровня пользователя)[править | править код]

В модели N:1 предполагается, что все потоки выполнения уровня пользователя отображаются на единую планируемую сущность уровня ядра, и ядро ничего не знает о составе прикладных потоков выполнения. При таком подходе переключение контекста может быть сделано очень быстро, и, кроме того, он может быть реализован даже на простых ядрах, которые не поддерживают многопоточность. Однако, одним из главных недостатков его является то, что в нём нельзя извлечь никакой выгоды из аппаратного ускорения на многопоточных процессорах или многопроцессорных компьютерах, потому что только один поток выполнения может быть запланирован на любой момент времени. Эта модель используется в GNU Portable Threads.

M:N (смешанная потоковость)[править | править код]

В модели M:N некоторое число M прикладных потоков выполнения отображаются на некоторое число N сущностей ядра или «виртуальных процессоров». Модель является компромиссной между моделью уровня ядра («1:1») и моделью уровня пользователя («N:1»). Вообще говоря, «M:N» потоковость системы являются более сложной для реализации, чем ядро или пользовательские потоки выполнения, поскольку изменение кода как для ядра, так и для пользовательского пространства не требуется. В M:N реализации библиотека потоков отвечает за планирование пользовательских потоков выполнения на имеющихся планируемых сущностях. При этом переключение контекста потоков делается очень быстро, поскольку модель позволяет избежать системных вызовов. Тем не менее, увеличивается сложность и вероятность инверсии приоритетов, а также неоптимальность планирования без обширной (и дорогой) координации между пользовательским планировщиком и планировщиком ядра.

Есть много различных, несовместимых друг с другом реализаций потоков. К ним относятся как реализации на уровне ядра, так и реализации на пользовательском уровне. Чаще всего они придерживаются более или менее близко стандарта интерфейса POSIX Threads.

Примеры реализаций потоков на уровне ядра[править | править код]

  • Light Weight Kernel Threads (LWKT) в различных версиях BSD
  • Потоковость MxN
  • Библиотека потоков POSIX (NPTL) для Linux, реализация стандарта POSIX Threads
  • Apple Multiprocessing Services, версия 2.0 и последующие, использует встроенное микроядро в Mac OS 8.6, в более поздних версиях сделана модификация с целью последующего сопровождения.
  • Windows начиная с Windows 95, Windows NT и после них.

Примеры реализаций потоков на уровне пользователя[править | править код]

  • GNU Portable Threads
  • FSU Pthreads
  • Thread Manager компании Apple
  • REALbasic (включая API для совместного использования потоков)
  • Netscape Portable Runtime (включая реализацию файберов в пользовательском пространстве)

Примеры реализаций смешанных потоков[править | править код]

  • «Scheduler activations» используется в собственной библиотеке приложений потоков POSIX для NetBSD (модель M:N в противоположность модели 1:1 ядра или модели приложений пользовательского пространства)
  • Marcel из проекта PM2
  • ОС для суперкомпьютера Tera/Cray MTA
  • Windows 7

Примеры реализаций файберов[править | править код]

Файберы могут быть реализованы без поддержки операционной системы, хотя некоторые операционные системы и библиотеки предоставляют явную поддержку для них.

Многие языки программирования поддерживают потоки иначе. Большинство реализаций С и С++ (до стандарта C++11) сами по себе не обеспечивают прямой поддержки потоков, но обеспечивают доступ к потокам, предоставляемым операционной системой, через API. Некоторые языки программирования более высокого уровня (как правило, кросс-платформенные), такие как Java, Python, и .NET, предоставляют потоковость разработчику в виде абстрактной специфической платформы, отличающейся от реализации потоков в среде выполнения разработчика. Ряд других языков программирования также пытается полностью абстрагировать концепцию параллелизма и потоковости от разработчика (Cilk, OpenMP, MPI…). Некоторые языки разрабатываются специально для параллелизма (Ateji PX, CUDA).

Некоторые интерпретирующие языки программирования, такие, как Руби и CPython (реализация Python), поддерживают потоки, но имеют ограничение, которое известно как глобальная блокировка интерпретатора (GIL). GIL является взаимной блокировкой исключений, выполняемых интерпретатором, которая может уберечь интерпретатор от одновременной интерпретации кода приложений в двух или более потоках одновременно, что фактически ограничивает параллелизм на многоядерных системах (в основном для потоков, связанных через процессор, а не для потоков, связанных через сеть).

  • David R. Butenhof. Programming with POSIX Threads. Addison-Wesley. ISBN 0-201-63392-2
  • Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farell. Pthreads Programming. O’Reilly & Associates. ISBN 1-56592-115-1
  • Charles J. Northrup. Programming with UNIX Threads. John Wiley & Sons. ISBN 0-471-13751-0
  • Mark Walmsley. Multi-Threaded Programming in C++. Springer. ISBN 1-85233-146-1
  • Paul Hyde. Java Thread Programming. Sams. ISBN 0-672-31585-8
  • Bill Lewis. Threads Primer: A Guide to Multithreaded Programming. Prentice Hall. ISBN 0-13-443698-9
  • Steve Kleiman, Devang Shah, Bart Smaalders. Programming With Threads, SunSoft Press. ISBN 0-13-172389-8
  • Pat Villani. Advanced WIN32 Programming: Files, Threads, and Process Synchronization. Harpercollins Publishers. ISBN 0-87930-563-0
  • Jim Beveridge, Robert Wiener. Multithreading Applications in Win32. Addison-Wesley. ISBN 0-201-44234-5
  • Thuan Q. Pham, Pankaj K. Garg. Multithreaded Programming with Windows NT. Prentice Hall. ISBN 0-13-120643-5
  • Len Dorfman, Marc J. Neuberger. Effective Multithreading in OS/2. McGraw-Hill Osborne Media. ISBN 0-07-017841-0
  • Alan Burns, Andy Wellings. Concurrency in ADA. Cambridge University Press. ISBN 0-521-62911-X
  • Uresh Vahalia. Unix Internals: the New Frontiers. Prentice Hall. ISBN 0-13-101908-2
  • Alan L. Dennis. .Net Multithreading. Manning Publications Company. ISBN 1-930110-54-5
  • Tobin Titus, Fabio Claudio Ferracchiati, Srinivasa Sivakumar, Tejaswi Redkar, Sandra Gopikrishna. C# Threading Handbook. Peer Information. ISBN 1-86100-829-5
  • Tobin Titus, Fabio Claudio Ferracchiati, Srinivasa Sivakumar, Tejaswi Redkar, Sandra Gopikrishna. Visual Basic .Net Threading Handbook. Wrox Press. ISBN 1-86100-713-2

Leave a comment