LINUX.ORG.RU

планировщик процессы smp

 


0

1

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

можете объяснить на пальцах как происходит планировщик действует при вклюенном smp в ядре?

Запускается независимый планировщик для каждого ядра.

и главное: способно ли ядро управлять процессами самостоятельно, без планировщика?

Планировщик — это компонент ядра. Собственно ядро — это набор сервисов режима супервизора (или ring 0 в терминологии Intel). Планировщик потоков — один из сервисов.

ими было сказано, что планировщик не может прерывать процессы в ядре

Может. Или писали неумные люди, или это какое-то специализированное ядро.

X512 ★★ ()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

Планировщик — это компонент ядра.

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

Assembler ()
Ответ на: комментарий от X512

ими было сказано, что планировщик не может прерывать процессы в ядре

может. Или писали неумные люди, или это какое-то специализированное ядро.

ну раз может, то надо все пересматривать.

Assembler ()
Ответ на: комментарий от Assembler

способно ли ядро обойтись без своего компанента планировщика?

Есть микроядра где планировщик работает в отдельном процессе, но это создаёт тормоза. И какая-то минимальная поддержка контекстов исполнения в ядре всё равно нужна.

X512 ★★ ()
Ответ на: комментарий от Assembler

с smp можете помочь?

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

X512 ★★ ()
Ответ на: комментарий от X512

ядро процессора — это по сути отдельный процессор

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

Assembler ()
Ответ на: комментарий от Assembler

ну а виртуальные ядра?

Это hyper-threading какой нибудь?

для работы с sMp встраиваются блокировки, которые понижают производительность

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

хотел бы знать как насамом деле планировщик выделяет процессорное время для многопроцессорных машин, как происходят блокировки

Отдельно для каждого ядра. Планировщику на одном ядре не обязательно знать о планировщиках на других ядрах. Блокировки нужны только для общих для всех планировщиков структур, таких как список потоков (всех и активных).

есть ли вытеснения процессов при smp и что происходит когда процесс не завершен и его процессорное время истекло?

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

на какой процессор его переведет планирощик? или он поставит его в очередь на тот же на каком он выполнялся этот процесс?

Это уже детали реализации. Обычно стараются запускать поток на одном и том же ядре чтобы эффективнее использовать кэши.

X512 ★★ ()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

Планировщику на одном ядре(процессоре) не обязательно знать

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

Assembler ()
Последнее исправление: Assembler (всего исправлений: 1)
Ответ на: комментарий от Assembler

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

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

X512 ★★ ()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

А разве разбрасывание потоков по ядрам цпу производится не из одного главного потока планировщика?

Нет никакого потока планировщика. Есть функция Schedule(), которая выбирает следующий поток для исполнения и переключает текущее ядро процессора на него. Она вызывается когда поток вызвал блокирующий системный вызов (IO, взятие семафора и т.п.) или когда истёк квант исполнения и пришло прерывание таймера. Смотрите исходники простой учебной UNIX-подобной системы xv6.

X512 ★★ ()
Последнее исправление: X512 (всего исправлений: 1)