Разница между переключением контекста потока и переключением контекста процесса

Я знаю здесь, есть объяснение этого вопроса. Но я я немного запутался с некоторыми моментами-:

Пусть у меня есть потоки T(1-a) и T(1-b), принадлежащие процессу P1, и потоки T(2-a) и T(2-b), принадлежащие процессу P2.

Теперь мой вопрос -:

  1. Поток T (1-a) хочет выполнить переключение контекста на поток T (1-b). Согласно этот ответ,
    #P4#

Сомневаться

если T(1-a) и T(1-b) являются потоками пользовательского уровня, ядро ​​не сможет различить T(1-a) и T(1-b), то как будет осуществляться переключение контекста?

  1. Пусть все потоки T(1-a),T(1-b),T(2-a) и T(2-b) являются потоками уровня ядра, и если поток T(1-a) хочет переключиться на контекст T( 2-б).

Сомневаться

не будет ли стоимость/сделка такой же, как у переключения контекста процесса, поскольку изменяется не только пространство виртуальной памяти, но и сбрасывается TLB ??


person laura    schedule 13.04.2017    source источник
comment
переключение потоков подразумевает перезагрузку регистров, которые указывают на стек, а переключение процесса также подразумевает перезагрузку всего механизма виртуальной памяти.   -  person Alexei Kaigorodov    schedule 13.04.2017


Ответы (1)


Можно подумать об этом так, что пользовательские потоки и потоки ядра — это два совершенно разных зверя.

В пользовательских потоках нет переключения контекста в обычном и обычном значении этого термина.

Оба типа (переключение контекста процесса и переключение контекста потока) включают передачу управления ядру операционной системы для выполнения переключения контекста (в основном я говорю о переключении контекста потока).

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

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

если T(1-a) и T(1-b) являются потоками пользовательского уровня, ядро ​​не сможет различить T(1-a) и T(1-b), то как будет осуществляться переключение контекста?

Если это потоки пользовательского уровня, ядро ​​не знает о них и не заботится о них. Переключение между ними осуществляется пользовательской библиотекой. Переключение «потоков» не является переключением контекста.

не будет ли стоимость/сделка такой же, как у переключения контекста процесса, поскольку изменяется не только пространство виртуальной памяти, но и сбрасывается TLB ??

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

Я убежден, что ученые должны отказаться от конструкций ядра/пользовательского потока (и, что еще хуже, 1-к-1, многие-к-1 и многие-ко-многим [yuk]). Вместо них я предлагаю использовать термины

«настоящие потоки» и «симулированные потоки».

person user3344003    schedule 13.04.2017
comment
: не будет ли стоимость/сделка такой же, как у переключения контекста процесса, поскольку изменяется не только пространство виртуальной памяти, но и сбрасывается TLB ?? я спрашиваю об этом в контексте того, хочет ли поток T (1-a) переключить контекст на T (2-b). ??? будет так же? - person laura; 14.04.2017
comment
Я смущен здесь. TLB — это системная конструкция. Будем надеяться, что ОС не выполняет сброс при переключении между потоками одного и того же процесса. - person user3344003; 14.04.2017