2015-08-16 3 views
1

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

ответ

0

Каждый поток имеет свой собственный стек и место в исполняемом файле.

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

2

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

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

Другая часть ваших вопросов уже ответила в этой теме переполнения стека.

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

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

thread context switch vs process context switch

+0

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

+0

Мы говорим, что потоки работают одновременно, потому что они могут запускаться одновременно, но не все потоки запускаются одновременно. Ядро процессора может запускать один поток одновременно. Если у вас есть двухъядерный процессор, тогда два потока могут запускаться одновременно. Поэтому, если у нас есть программа с тремя потоками, для запуска третьего потока должен быть контекстный переключатель. – shf301

Смежные вопросы