Сколько процессов может выполняться в однопроцессорной системе
Обновлено: 21.11.2024
В этом разделе представлены основные понятия многопоточности.
Параллелизм и параллелизм
В многопоточном процессе на одном процессоре процессор может переключать ресурсы выполнения между потоками, что приводит к параллельному выполнению. Параллелизм указывает на то, что более чем один поток работает, но на самом деле эти потоки не выполняются одновременно. Переключение между потоками происходит достаточно быстро, поэтому кажется, что потоки выполняются одновременно.
В одном и том же многопоточном процессе в многопроцессорной среде с общей памятью каждый поток в процессе может выполняться одновременно на отдельном процессоре, что приводит к параллельному выполнению, что является настоящим одновременным выполнением. Когда количество потоков в процессе меньше или равно количеству доступных процессоров, система поддержки потоков операционной системы обеспечивает выполнение каждого потока на отдельном процессоре. Например, в матричном умножении, которое запрограммировано с четырьмя потоками и выполняется в системе с двумя двухъядерными процессорами, каждый программный поток может выполняться одновременно на четырех процессорных ядрах для одновременного вычисления строки результата.
Многопоточная структура
Традиционный UNIX уже поддерживает концепцию потоков. Каждый процесс содержит один поток, поэтому программирование с несколькими процессами — это программирование с несколькими потоками. Но процесс также является адресным пространством, и создание процесса включает в себя создание нового адресного пространства.
Создание потока обходится дешевле, чем создание нового процесса, поскольку вновь созданный поток использует адресное пространство текущего процесса. Время, необходимое для переключения между потоками, меньше времени, необходимого для переключения между процессами. Переключение между потоками выполняется быстрее, поскольку не происходит переключения между адресными пространствами.
Обмен данными между потоками одного процесса прост, поскольку потоки совместно используют все, в первую очередь адресное пространство. Таким образом, данные, созданные одним потоком, немедленно становятся доступными для всех других потоков процесса.
Однако такое совместное использование данных приводит к другому набору проблем для программиста. Необходимо соблюдать осторожность при синхронизации потоков, чтобы защитить данные от изменения более чем одним потоком одновременно или от чтения некоторыми потоками при одновременном изменении другим потоком. Дополнительную информацию см. в разделе Синхронизация потоков.
Обсуждения на уровне пользователя
Потоки — это основной программный интерфейс в многопоточном программировании. Потоки видны только внутри процесса, где потоки совместно используют все ресурсы процесса, такие как адресное пространство, открытые файлы и т. д.
Состояние потоков на уровне пользователя
Следующее состояние уникально для каждого потока.
Состояние регистра, включая счетчик программ (ПК) и указатель стека
Потоки совместно используют инструкции процесса и большую часть данных процесса. По этой причине изменение общих данных одним потоком может быть замечено другими потоками в процессе. Когда потоку необходимо взаимодействовать с другими потоками в том же процессе, он может сделать это без участия операционной среды.
Потоки пользовательского уровня называются так, чтобы отличать их от потоков уровня ядра, которыми занимаются только системные программисты. Поскольку эта книга предназначена для программистов приложений, потоки на уровне ядра не обсуждаются.
Планирование потоков
Стандарт POSIX определяет три политики планирования: "первым пришел - первым обслужен" (SCHED_FIFO), циклическим (SCHED_RR) и пользовательским (SCHED_OTHER). ). SCHED_FIFO — это планировщик на основе очередей с разными очередями для каждого уровня приоритета. SCHED_RR похож на FIFO, за исключением того, что у каждого потока есть квота времени выполнения.
И SCHED_FIFO, и SCHED_RR являются расширениями POSIX Realtime. Потоки, выполняемые с этими политиками, относятся к классу планирования Solaris Real-Time (RT), обычно требующему специальных привилегий. SCHED_OTHER – это политика планирования по умолчанию. Потоки, выполняемые с политикой SCHED_OTHER, относятся к традиционному классу планирования Solaris Time-Sharing (TS).
Solaris предоставляет другие классы планирования, а именно класс интерактивного разделения времени (IA), класс Fair-Share (FSS) и класс Fixed-Priority (FX). Такие специализированные классы здесь не обсуждаются. Дополнительную информацию см. на странице руководства Solaris priocntl(2).
Информацию о политике SCHED_OTHER см. в разделе LWP и классы планирования.
Доступны две области планирования: область процесса (PTHREAD_SCOPE_PROCESS) и область системы (PTHREAD_SCOPE_SYSTEM). Потоки с разными состояниями области действия могут сосуществовать в одной системе и даже в одном процессе. Область действия процесса заставляет такие потоки конкурировать за ресурсы только с другими такими же потоками в том же процессе.Область действия системы заставляет такие потоки конкурировать со всеми другими потоками в системе. На практике, начиная с версии Solaris 9, система не делает различий между этими двумя областями.
Отмена темы
Поток может запросить завершение любого другого потока в этом процессе. Целевой поток, тот, который был отменен, может удерживать запросы на отмену в ожидании, а также выполнять очистку для конкретного приложения, когда поток действует в соответствии с запросом на отмену.
Функция отмены pthreads допускает асинхронное или отложенное завершение потока. Асинхронная отмена может произойти в любое время. Отложенная отмена может произойти только в определенных точках. По умолчанию используется отложенная отмена.
Синхронизация потоков
Синхронизация позволяет контролировать ход выполнения программы и доступ к общим данным для одновременно выполняемых потоков.
Четыре модели синхронизации – это блокировка мьютекса, блокировка чтения/записи, условные переменные и семафоры.
Мьютексы позволяют только одному потоку одновременно выполнять определенный раздел кода или получать доступ к определенным данным.
Блокировки чтения/записи разрешают одновременное чтение и эксклюзивную запись в защищенный общий ресурс. Чтобы изменить ресурс, поток должен сначала получить монопольную блокировку записи. Исключительная блокировка записи не разрешена до тех пор, пока не будут сняты все блокировки чтения.
Переменные условия блокируют потоки до тех пор, пока определенное условие не станет истинным.
Семафоры-счетчики обычно координируют доступ к ресурсам. Количество — это ограничение на количество потоков, которые могут иметь одновременный доступ к данным, защищенным семафором. Когда счетчик достигнут, семафор вызывает блокировку вызывающего потока до тех пор, пока счетчик не изменится. Двоичный семафор (со счетом один) аналогичен блокировке мьютекса.
Или, если компьютер с одноядерным процессором может одновременно выполнять только одну задачу, то как мы можем делать несколько вещей, таких как редактирование документов, прослушивание музыки, сканирование компьютера и т. д., одновременно без каких-либо перерывов?
В однопроцессорной многозадачной системе несколько процессов фактически не выполняются одновременно, поскольку имеется только один процессор. Вместо этого процессор переключается между процессами, активными в любой момент времени. Поскольку компьютеры настолько быстры по сравнению с людьми, пользователю кажется, что компьютер выполняет все задачи одновременно.
Многозадачность в многопроцессорной системе по-прежнему связана с переключением процессоров между задачами, потому что задач почти всегда больше, чем процессоров. Однако обратите внимание, что одновременно может выполняться столько задач, сколько процессоров в системе. Многозадачные ОС действительно могут выполнять несколько задач одновременно. Несколько вычислительных механизмов работают независимо над разными задачами.
Поэтому, чтобы одно ядро могло выполнять несколько потоков, использовалась форма мультиплексирования с временным разделением. Чтобы немного упростить: ОС устанавливает таймер, который прерывает работу системы через фиксированный интервал. Отдельный интервал называется квантом времени. Каждый раз, когда происходит это прерывание, ОС запускает процедуру планирования, которая выбирает следующий поток, который должен быть выполнен. Затем контекст ядра переключается с текущего потока на новый поток, и выполнение продолжается.
Поскольку эти временные интервалы обычно очень короткие , пользователь обычно даже не замечает переключения. Например, если вы воспроизводите mp3-файл, процессор должен декодировать звук небольшими блоками и отправлять их на звуковую карту. Звуковая карта подаст сигнал об окончании воспроизведения, и это заставит mp3-плеер загрузить новые блоки из mp3-файла, декодировать их и отправить на звуковую карту. Тем не менее, даже одноядерный процессор без проблем воспроизводит mp3 в фоновом режиме, пока вы продолжаете работать в других приложениях. Ваша музыка не будет пропускать, а ваши приложения будут работать так же хорошо, как и когда музыка не играет. В современной системе это неудивительно, так как воспроизведение mp3 требует многозадачности: задача обычно относится к одному приложению/процессу. Таким образом, многозадачность означает, что вы используете несколько приложений одновременно. Многозадачность контрастирует с однозадачностью, когда один процесс должен быть полностью завершен, прежде чем может начаться другой. MS-DOS — это, прежде всего, однозадачная среда, а Windows XP или более поздние ОС — многозадачные среды.
Итак, многозадачность — это способность ОС быстро переключаться между каждой вычислительной задачей, чтобы создать впечатление, что разные приложения выполняют несколько действий одновременно.
Многопоточность. Многопоточность распространяет идею многозадачности на приложения, поэтому вы можете разделить определенные операции в одном приложении на отдельные потоки. Каждый из потоков может работать параллельно. ОС распределяет время обработки не только между разными приложениями, но и между каждым потоком внутри приложения. Многопоточность позволяет выполнять более одного потока в одном и том же процессе, позволяя каждому потоку обращаться к одному и тому же адресному пространству памяти. Это обеспечивает очень быструю связь между потоками.
Hyper-Threading: одно физическое ядро ЦП с гиперпоточностью отображается в операционной системе как два логических ЦП. ЦП по-прежнему один ЦП, так что это немного обман. В то время как операционная система видит два ЦП для каждого ядра, реальное аппаратное обеспечение ЦП имеет только один набор ресурсов выполнения для каждого ядра. Другими словами, операционная система обманом видит два процессора для каждого фактического ядра процессора. Гиперпоточность позволяет двум логическим ядрам ЦП совместно использовать физические ресурсы выполнения. Это может несколько ускорить процесс — если один виртуальный ЦП остановлен и ждет, другой виртуальный ЦП может занять свои исполнительные ресурсы. Гиперпоточность может помочь ускорить вашу систему, но она далеко не так хороша, как наличие дополнительных ядер.
Несколько ядер. Первоначально процессоры имели одно ядро. Это означало, что на физическом ЦП был один центральный процессор. Для повышения производительности производители добавляют дополнительные «ядра» или центральные процессоры. Двухъядерный ЦП имеет два центральных процессора, поэтому операционной системе он представляется как два ЦП. Например, ЦП с двумя ядрами может одновременно запускать два разных процесса. Это ускоряет вашу систему, потому что ваш компьютер может делать несколько вещей одновременно.
В отличие от гиперпоточности здесь нет никаких хитростей — двухъядерный ЦП буквально имеет два центральных процессора на кристалле ЦП. Четырехъядерный ЦП имеет четыре центральных процессора, восьмиядерный ЦП — восемь центральных процессоров и т. д.
Несколько ЦП. Сегодня системы с несколькими ЦП не очень распространены среди домашних ПК. Даже мощный игровой настольный компьютер с несколькими видеокартами обычно имеет только один ЦП. Вы найдете многопроцессорные системы среди суперкомпьютеров, серверов и подобных высокопроизводительных систем, которым требуется максимальная вычислительная мощность.
Говорят, что на компьютере с одноядерным процессором в любой момент времени выполняется только одна задача.
Теперь у меня есть сомнения. Когда я слушаю музыку, я одновременно конвертирую видео в мобильный формат и одновременно редактирую свой документ на своем одноядерном процессоре Pentium. Таким образом, выполняется более одной задачи. Но я не чувствовал, что выполняется только одна задача или процесс.
Я вижу, что все три задачи выполняются без перерыва, и мне даже кажется, что они выполняются параллельно. Если бы в любой момент выполнялась только одна задача, а также если бы ЦП переключался между различными процессами или задачами, то, когда я слушал бы музыку без перерыва и если ЦП переключал бы одну задачу на другую, другая задача должна была бы ждать своей очереди, и в это время воспроизведение музыки или преобразование видео могут остановиться, но я этого не почувствовал. Так что помогите мне в этой теме. Заранее спасибо.
Однопроцессорные системы используют планирование и могут обеспечивать многозадачность, поскольку время процессора распределяется между несколькими процессами, что позволяет каждому процессу выполняться параллельно. Таким образом, процесс выполняется в течение некоторого времени, а очередь переходит к другому ожиданию.
Переназначение ЦП с одной задачи на другую называется переключением контекста. Но переключение контекста имеет свою цену, о которой программист должен знать.
В синергии между аппаратным обеспечением и операционной системой ЦП выделяется для разных процессов несколько раз в секунду, и это действие называется «квантованием времени», поэтому его не следует путать с многопоточностью. «квантование времени» устарело. технологии по сравнению с многопоточностью.
Многозадачность — это функция операционной системы, которая позволяет переключаться между задачами, создавая впечатление, что они выполняются одновременно.
Многопоточность как бы расширяет эту функциональность до единого процесса, позволяя нескольким потокам формировать один и тот же процесс, который может работать одновременно.
Ни одна из функций не требует фактического многоядерного процесса, но они выигрывают от него с точки зрения скорости, производительности и настоящей одновременной обработки.
некоторые ссылки, которые стоит прочитать:
это похоже на иллюзию: когда ваш глаз видит 12 или 25 изображений в секунду, вы думаете, что смотрели видео продолжительностью в одну секунду.
аналогичным образом он переключается между задачами несколько раз в секунду, что приводит к многозадачности.
нет ничего лучше, чем видео меняется раз в секунду!
Поправка: 1 гигафлоп = 1 000 000 000 флопов, а не 1 000 000. Так что вы даже можете умножить мой пример расчетов на 1000!
200 000 000 расчетов, пока вы нажимаете на кнопку!
(сорри за ошибку, пытаться быть таким же толстым, как человек, видимо не получается ;)
На самом деле одноядерный процессор может одновременно обрабатывать только одну задачу. Но каждая задача (например, щелчок мышью) состоит из сотен, тысяч или даже миллионов вычислений. Это позволяет выполнить только часть одной такой задачи, а затем продолжить выполнение части другой задачи.
Поскольку каждое вычисление выполняется невероятно быстро, создается впечатление, что компьютер делает что-то в одно и то же время.
Но эй, вы говорите, мой mp3 не шатается, если я печатаю! Правда, это отчасти из-за скорости, а отчасти из-за того, что компьютер состоит из более чем одного чипа, а между этими чипами он заполнен кэшами в очередях. Процессор может вычислить свою роль для воспроизведения следующей секунды mp3 и передать данные результата звуковой карте, которая будет воспроизводить секунду, предоставив центральному процессору другие задачи.
Вы можете работать в многозадачном режиме, потому что современные процессоры используют "многопоточность", которая позволяет выполнять параллельную обработку, даже если только одноядерный процессор. Чем больше у вас ядер, тем лучше распределяется рабочая нагрузка. Каждое ядро может выполнять только одну инструкцию за раз, однако это происходит настолько быстро, что кажется, будто вы запускаете несколько потоков одновременно.
Потоки, в которых есть сообщения, ожидающие в очереди, помещаются в "активный пул", который использует метод приоритезации "первым пришел - первым обслужен", чтобы упорядочить, какая инструкция должна быть вызвана первой. Чем больше у вас процессоров, тем больше инструкций может быть выполнено в одном экземпляре.
Вы можете идентифицировать программу, которая не использует несколько потоков, потому что, если она попадет в сложную операцию, она не будет реагировать на действия пользователя, поскольку в настоящее время она выполняет другое действие и просто не обработала действие пользователя.
Это проясняет ситуацию?
Ядро отвечает за выполнение циклов потока. Чем больше у вас ядер, тем больше потоков вы можете запускать одновременно. Очевидно, что чем больше тактов вы сможете выполнить, тем быстрее будет работать ваша система.
Хотите улучшить этот вопрос? Добавьте подробности и уточните проблему, отредактировав этот пост.
Закрыт 2 года назад.
Кто-нибудь может помочь мне со следующим вопросом?
Рассмотрите систему с одним процессором, поддерживающую два запущенных процесса, A и B, со следующими шаблонами последовательного выполнения:
A: [ЦП 8 мс; ввод-вывод 1 мс; ЦП 8 мс; ввод-вывод 1 мс; ЦП 8 мс]
B: [ЦП 2 мс; ввод-вывод 1 мс; ЦП 2 мс; ввод-вывод 1 мс; ЦП 2 мс]
Предположим, что операции ввода-вывода не мешают друг другу и не блокируются, а время планирования и переключения контекста незначительно.
a) Каково общее время, затраченное на завершение двух процессов?
b) Предположим, что в системе работает невытесняющий планировщик, в котором процессы планируются в том порядке, в котором они становятся доступными для выполнения, и что B имеет приоритет над A в случае ничьей. Дайте комбинированный шаблон выполнения двух процессов в формате, как в части (ii), и определите общее время, затраченное на выполнение двух процессов до завершения.
c) Повторите часть (ii) b) с упреждающим планировщиком, работающим с временным интервалом 4 мс.
d) Каковы затраты и преимущества планировщика с вытеснением по сравнению с планировщиком без вытеснения для этой рабочей нагрузки, что бы вы выбрали и почему?
$\begingroup$ Какую помощь вы ищете? Пока это выглядит как дословная копия какого-то упражнения. Что вы пробовали? Где ты застрял? $\endgroup$
$\begingroup$ Так и есть. И я понятия не имею, что на это ответить. поэтому любая помощь будет высоко оценена $\endgroup$
$\begingroup$ Укажите первоисточник проблемы в вопросе. Вы всегда должны указывать источник всех скопированных материалов. $\endgroup$
$\begingroup$ Мы будем рады помочь вам понять концепции, но вряд ли вы этого добьетесь, просто решая за вас упражнения. Эта страница может оказаться полезной для улучшения вашего вопроса. $\endgroup$
1 Ответ 1
Невытесняющий, начиная с задания A, выполняет 8 мс для задания A, 2 мс для задания B, 8 мс для задания A, 2 мс для задания B, 8 мс для задания A, 2 мс для задания B. Ввод-вывод выполняется, пока другое задание использует ЦП, поэтому оно бесплатно. Задание А завершается через 28 мс, задание Б — через 30 мс.
Если бы вы начали с потока B, B завершился бы через 22 мс, а A через 30 мс.
Вы можете завершить B значительно быстрее, назначив ему более высокий приоритет: задание B за 2 мс, задание A за 1 мс (пока B выполняет ввод-вывод), задание B за 2 мс, задание A за 1 мс, задание B за 2 мс, затем задание A завершится, не получив Ввод/вывод бесплатно. Б завершается через 8 мс, А – через 32 мс.
Если мы вытесняем через 4 мс, если мы начинаем с A, мы запускаем A на 4 мс, B на 2 мс, A на 4 мс, B на 2 мс, A на 4 мс, B на 2 мс, затем A на 4 мс, 1 мс I/ О, А в течение 8 мс. Занимает 18 мс для B, 31 мс для A. Вы получите другие числа, если начнете с B.
Все это весьма неудовлетворительно. Без вытеснения и с небольшим вводом-выводом время выполнения каждого задания в основном зависит от количества операций ввода-вывода, потому что мы включаем операции ввода-вывода. Однако если мы отдаем приоритет задаче, требующей меньше ресурсов, она может завершиться гораздо быстрее, что неудовлетворительно, поскольку мы не знаем, какая работа требует меньше ресурсов.
Приоритетное прерывание через 4 мс ускоряет завершение процесса, использующего меньше процессорного времени.
Несколько процессоров могут быть двух основных типов, только один из которых представляет интерес с точки зрения операционной системы. Так называемые сопроцессоры «слушают» инструкции, загруженные на системную шину, и «захватывают» те, для которых они предназначены (например, математический сопроцессор захватывает и выполняет арифметические инструкции); эта форма многопроцессорной системы полностью опосредована аппаратным обеспечением. В другой форме два или более процессора могут быть «равны» или расположены в конфигурации «главный-подчиненный»; но именно операционная система решает, как распределяется работа между такими несколькими процессорами. Это может быть вопрос распределения конкретного запроса на работу процессору для выполнения или поддержки взаимодействия между процессорами в одном процессе. Модель выделения относительно просто реализовать из общей очереди запросов на работу. Кооперативная модель более сложна и включает память, совместно используемую взаимодействующими процессорами (каждый из которых, возможно, также имеет свою собственную выделенную память). В последней модели переключение контекста должно гарантировать, что любой взаимодействующий процессор может возобновить запрос в любой момент выполнения процесса. (В конфигурации «ведущий-ведомый» взаимодействующих процессоров назначенный главный процессор обычно обрабатывает все запросы на работу и ввод-вывод, а подчиненные процессоры выполняют только вычисления. Таким образом, прерывание вычислений на подчиненном процессоре, например, для запроса услуг ввода-вывода, приводит к дальнейшему прерыванию работы главного процессора, чтобы он мог перехватить запрос, а затем выполнить его, прежде чем позволить подчиненному процессору продолжить работу.)
Обмен данными на уровне регистров в мультипроцессорах Speculative Chip
Милан Б. Радулович , . Велько М. Милутинович, Достижения в области компьютеров, 2014 г.
3.3.2.3 Регистрация сообщения
Каждый ЦП имеет собственный набор глобальных регистров, не используемых совместно с другими ЦП на том же кристалле. Доступ к этому набору глобальных регистров может получить любой FU, принадлежащий тому же CPU. Размер регистрового файла зависит от реализации и может варьироваться от 32 до 512 регистров [17,44]. Регистры могут хранить данные любого типа («независимые от данных»). Некоторые из этих регистров могут быть настроены как частные для каждого FU, в то время как другие (почти сотня) являются глобальными и общими для всех FU внутри ЦП, чтобы обеспечить быструю связь между потоками.
Предположение MAJC основано на поддержке компилятора. У FU есть условные инструкции для увеличения ILP, в то время как безаварийные нагрузки включают спекулятивную загрузку [44]. MAJC обеспечивает межпроцессорное взаимодействие и синхронизацию через аппаратный буфер сообщений, который включает физические каналы, структурированные в виде очередей. В MAJC-5200 общие значения регистров передаются от неспекулятивных или менее спекулятивных потоков к более спекулятивным через виртуальные каналы с использованием синхронизации производитель-потребитель. Инструкция, выполняющая передачу данных, определяет виртуальный канал в аппаратном буфере сообщений, на который направляется передача данных. Затем виртуальный канал транслируется в физический канал в аппаратном буфере сообщений, в котором выполняется передача данных. Этот механизм можно рассматривать как передачу сообщений на уровне регистров.
Виртуальные каналы доступны через операции загрузки и сохранения и не имеют прямого доступа к архитектурным регистрам. Они также позволяют легко поддерживать зависимости регистров между неспекулятивным потоком и спекулятивными потоками и принимают участие в восстановлении после ошибок. MAJC использует механизм быстрого прерывания в кластере процессоров, чтобы позволить потокам уведомлять друг друга о соответствующих событиях. Этот механизм уменьшает накладные расходы на спекулятивные потоки, поскольку позволяет быстро создавать спекулятивные потоки и откатывать их. И виртуальные каналы, и механизм быстрого прерывания подходят для многопоточных программ, которым требуется обмен данными между производителем и потребителем и быстрая связь между потоками.
Основы Simics
Измерение скорости многопроцессорной симуляции
При моделировании нескольких процессоров моделируемое время в секунду хоста (RTF) прекрасно работает. Целевое время будет прогрессировать с некоторой скоростью, и моделирование более крупной системы обычно просто замедляет это движение. Однако симуляция инструкций в секунду хоста (IPS) становится немного сложнее, поскольку ее можно учитывать как для каждого процессора в отдельности, так и для симуляции в целом.
Начиная с ISS, которая работает со скоростью N IPS для одного целевого процессора, и запуская P таких процессоров в одном и том же моделировании с использованием циклического планирования, каждый ISS будет работать. за 1/P каждой реальной секунды. Таким образом, прогресс каждой отдельной ISS будет составлять N/P IPS. Однако ход симуляции в целом будет P·(N/P), то есть N. Таким образом, будет справедливо назвать это симулятором N IPS независимо от количества моделируемых процессоров. Для ясности общую IPS можно назвать совокупной IPS, указывающей на сумму прогресса на всех процессорах за одну секунду хоста.
Измерения, зависящие от предметной области, такие как количество кадров в секунду или количество пакетов в секунду, могут отражать или не отражать эффект циклического моделирования; это зависит от поведения и баланса нагрузки программного обеспечения, работающего на симуляторе. Замедление имеет тенденцию к увеличению по мере того, как с помощью одного хост-процессора моделируется большее количество процессоров.
При использовании нескольких ядер хоста для имитации нескольких целевых процессоров или процессорных ядер фактически несколько ISS работают параллельно. Таким образом, если для запуска N IPS IPS используется H ядер хоста, совокупное количество IPS будет равно H·N эм>. Для измерения фундаментальной технологии N IPS базовой ISS по-прежнему кажется наиболее подходящей. Обратите внимание, что число N·H предполагает линейное масштабирование по мере увеличения количества ядер хоста, что разумно только в том случае, если целевое программное обеспечение идеально распараллеливается и между смоделированные ядра.
Операционные системы реального времени
7.1.11 Несколько процессоров
Развертывание нескольких процессоров во встроенных системах становится все более распространенным явлением. Это может быть связано с несколькими платами в системе, несколькими устройствами на плате, несколькими процессорными ядрами на кристалле или любой их комбинацией. С точки зрения отладки архитектурные детали относительно не важны.
К отладке с несколькими процессорами можно подходить по-разному. Можно использовать несколько отладчиков — по одному на каждый процессор, — но такой подход может быть сложным, поскольку каждый из них, скорее всего, будет отдельным инструментом. Также могут быть проблемы с пропускной способностью соединения. Один отладчик возможен, если выбранная архитектура отладки соответствует парадигме «настоящей одновременности». Это приводит к менее крутой кривой обучения (только один инструмент) и открывает возможности для расширенных функций отладки, таких как синхронизированные точки останова.
Конечно, многопроцессорные системы также могут использовать RTOS и, следовательно, иметь особые потребности в отладке. Это может стать более «интересным», потому что несколько продуктов RTOS могут фактически быть развернуты в одной системе. Это было бы проблемой для любой технологии отладки — проблемой, но не непреодолимой. Ситуация становится еще более интересной, если используется симметричная многопроцессорная обработка (SMP), когда один экземпляр операционной системы выполняется на нескольких процессорах. Эта тема будет рассмотрена в следующей главе, посвященной многоядерным встраиваемым системам.
Миникомпьютеры
II.C Несколько процессоров в миникомпьютерах
Большинство современных миникомпьютеров имеют несколько процессоров с единым адресным пространством, которые называются мультипроцессорами. Количество процессоров, присутствующих в приобретенном компьютере, зависит от потребностей пользователя, обычно с возможностью добавления дополнительных процессоров по мере увеличения требований к использованию. Обычно это те же самые процессоры, которые используются в персональных компьютерах и мейнфреймах. Общепризнано, что мультипроцессор, состоящий из нескольких однопроцессорных процессоров, обеспечивает лучшее соотношение цены и производительности, чем создание сопоставимого однопроцессорного компьютера с использованием усовершенствованной технологии.
Несколько процессоров связаны между собой сложной сетью и классифицируются как симметричные мультипроцессоры (SMP) [часто называемые унифицированным доступом к памяти (UMA)] или неоднородным доступом к памяти (NUMA). Мультипроцессор SMP с поддержкой операционной системы — это мультипроцессор, в котором каждый процессор имеет равный доступ ко всем модулям памяти и всем устройствам ввода-вывода. Преимущество NUMA заключается в возможности масштабирования до большего количества процессоров. Одной из самых больших проблем при проектировании мультипроцессора является непротиворечивость памяти данных.
Высокоэффективная бизнес-аналитика
Симметричная многопроцессорность
Симметричная многопроцессорная система (SMP) – это аппаратная конфигурация, в которой несколько процессоров объединены в одной архитектуре. Все процессоры в SMP-машине совместно используют одну операционную систему, устройства ввода-вывода (I/O) и память, и каждый процессор (или CPU) поддерживает свой собственный кэш, связанный с общей памятью. В SMP-системе несколько процессов могут быть назначены разным процессорам внутри системы, что делает SMP-машину хорошей платформой для грубого параллелизма.
Машина SMP также может быть разработана для конвейерного выполнения путем выделения каждому ЦП отдельного этапа приложения и распространения частичных результатов посредством связи через систему с общей памятью.
Многоядерные машины
Многоядерный процессор включает в себя несколько процессоров на одном кристалле, совместно использующих основную память, а иногда и кэши второго уровня и шину. Каждый процессор будет иметь свой собственный кэш первого уровня. Различные процессоры работают независимо друг от друга, что позволяет реализовать встроенный параллелизм на уровне задач или потоков. Однако разные процессоры также можно настроить для одновременного выполнения одной и той же программы с разными данными, что также обеспечивает параллелизм данных.
Массовая параллельная обработка
Система массовой параллельной обработки (MPP) состоит из большого количества небольших однородных узлов обработки, соединенных между собой через высокоскоростную сеть. Узлы обработки в машине MPP независимы — они обычно не используют общую память, и обычно каждый процессор может запускать свой собственный экземпляр операционной системы, хотя могут быть приложения системного контроллера, размещенные на ведущих узлах обработки, которые инструктируют отдельные узлы обработки в конфигурация MPP для выполняемых задач.
Узлы на машинах MPP также могут быть подключены непосредственно к их собственным устройствам ввода-вывода, или ввод-вывод может быть направлен во всю систему через высокоскоростные межсоединения. Связь между узлами, скорее всего, будет происходить скоординировано, когда все узлы прекращают обработку и участвуют в обмене данными по сети, или нескоординировано с сообщениями. предназначен для конкретных получателей, независимо внедряемых в сеть.
Поскольку данные могут передаваться по сети в потоковом режиме и нацеливаться на определенные узлы, машина MPP идеально подходит для приложений с параллельными данными. В этом случае все процессоры выполняют одну и ту же программу с разными потоками данных. Кроме того, поскольку отдельные процессоры могут выполнять разные программы, машина MPP прекрасно подходит для крупномодульного параллелизма и может быть настроена для конвейерного выполнения.
Сети рабочих станций
Сеть рабочих станций – это слабосвязанная версия системы MPP. рабочие станции, скорее всего, будут настроены как отдельные машины, подключенные через сеть. Задержки связи (т. е. задержки при обмене данными), вероятно, будут на порядок больше в такой конфигурации, и машины в сети также могут быть разнородными (т. е. с участием различных систем). Из-за конфигурации сеть рабочих станций лучше подходит для крупномодульного параллелизма, хотя любое приложение, работающее с параллельными данными, без большого объема обмена данными, может быть хорошо адаптировано к этой конфигурации.
Облачные вычисления
Облачные вычисления позволяют использовать высокопроизводительные вычисления как утилиту: можно задействовать кластеры вычислительных узлов и использовать слой для обеспечения виртуализированной высокопроизводительной среды. По сути, облачная среда использует потенциально эластичный набор доступных узлов обработки плюс доступное хранилище в качестве утилиты вместо капитализированного приобретения оборудования. Облака часто управляются внешними поставщиками, хотя мы можем внедрить облако за вашим корпоративным брандмауэром в интересах внутренних потребителей.
Читайте также: