какие ресурсы потока являются его собственными

Какие ресурсы распределяются между потоками?

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

В. Знаете ли вы сегменты, в которых программа делится?

Мой ответ: да (думал, что это было легко) Стек, Данные, Код, Куча

Q. Итак, скажите мне: какими сегментами делятся потоки?

Я не мог ответить на это и в итоге сказал все из них.

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

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

Из Википедии (я думаю, это было бы действительно хорошим ответом для интервьюера: P)

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

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

У нас есть следующее из раздела 2.2.2 Модель классической нити в современных операционных системах 3e от Tanenbaum:

Далее он предоставляет следующую таблицу:

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

Скажите интервьюеру, что это полностью зависит от реализации ОС.

Возьмите Windows x86 для примера. Есть только 2 сегмента [1], Код и Данные. И они оба сопоставлены с целым 2 ГБ (линейным, пользовательским) адресным пространством. База = 0, предел = 2 ГБ. Они бы сделали один, но x86 не позволяет сегменту быть как для чтения / записи, так и для выполнения. Таким образом, они сделали два и установили CS для указания на дескриптор кода, а остальные (DS, ES, SS и т. Д.) Для указания на другой [2]. Но оба указывают на то же самое!

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

Так что относительно

Q. Так скажите мне, какой сегмент разделяет поток?

Возможно * nix делает что-то другое. Кто знает. Предпосылка, на которой был основан вопрос, была нарушена.

Обычно потоки называются легковесным процессом. Если мы разделим память на три части, то это будет: код, данные и стек. Каждый процесс имеет свой собственный раздел кода, данных и стека, и из-за этого время переключения контекста немного велико. Чтобы сократить время переключения контекста, люди придумали концепцию потока, который разделяет сегмент данных и кода с другим потоком / процессом и имеет собственный сегмент STACK.

Потоки разделяют код и сегменты данных и кучу, но они не разделяют стек.

1 Код является логически закрытым, но может использоваться совместно для повышения производительности. 2 Я не уверен на 100%.

Темы делятся всем [1]. Есть одно адресное пространство для всего процесса.

Каждый поток имеет свой собственный стек и регистры, но стеки всех потоков видны в общем адресном пространстве.

Если один поток выделяет некоторый объект в своем стеке и отправляет адрес другому потоку, они оба будут иметь равный доступ к этому объекту.

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

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

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

[1] Хорошо, я знаю: маски сигналов, TSS / TSD и т. Д. Адресное пространство, включая все отображаемые сегменты программы, все еще используется совместно.

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

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

Источник

Как работать «в потоке»? Нужны всего 3 ресурса

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными
Знакомо ли вам такое состояние, когда вы настолько увлечены идеей, что полностью погружаетесь в процесс ее реализации, забывая о времени и окружающем мире? А завершив, испытываете радость и даже счастье? Значит, у вас есть опыт потоковых состояний – особых ресурсных состояний сознания, когда все внимание сфокусировано на цели, и в результате замечательные идеи рождаются сами собой, и время концентрируется, вмещая гораздо больше, чем в обычном состоянии.
Тема эффективности потоковых состояний для работы и творчества уже несколько раз поднималась на Хабре, и в этой статье мы хотим обсудить практическую часть – что необходимо для того, чтобы вызывать это состояние «на заказ»?

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

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

Формула потока

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

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными

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

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными

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

Время

Первый ресурс, который является невосполнимым и потому самым ценным, это время.
Можно говорить о внешней линии времени и о внутреннем, субъективном времени.

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными

Внешняя линия времени объективна, измерима приборами, линейна, жестко зафиксирована внешними событиями и другими людьми. Когда мы находимся в тесном контакте с внешней линией времени, то четко следим за временем, планируем, соблюдаем график, соотносим собственные действия с внешними событиями. Такая метапрограмма называется «сквозное время» (Through Time).
Внутреннее время нелинейно, измеряется субъективно. Когда мы входим в глубокое потоковое состояние, то переходим с внешней линии времени на внутреннюю (такая метапрограмма называется «включенное время», In Time). Все, кто описывал свое творческое потоковое состояние, говорил о незаметном течении времени в потоке. Выйдя из глубокой концентрации, мы можем поразиться тому, сколько времени прошло в реальном мире – это могут быть многие часы, а могут – минуты! При этом количество и качество работы, сделанной в этом состоянии, значительно превышает результаты аналогичной деятельности в обычном состоянии. Таким образом, если говорить о ресурсе времени, на выходе из потока мы получаем повышение эффективности в единицу времени. Поток сохраняет наше время, а мы помним, что время – невосполнимый ресурс, поэтому бесценно!
Как работать со временем?
Начнем с внешней линии времени, на которой мы находимся в обычном состоянии.
Во-первых, выделите на ней время для нахождения в потоке. На это время не планируйте никаких других дел, встреч. Изолируйте на это время свое творческое пространство от внешних раздражителей. Если у вас есть жесткие временные ограничители, то лучше поставить таймер «на выход», чтобы беспокойство не мешало вашей концентрации.
Во-вторых, выберите для себя оптимальную стратегию взаимодействия со временем в потоке.

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными

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

Информация

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

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными
Прежде чем войти в поток, на входе, соберите всю необходимую информацию. Если уровень сложности задачи превышает ваш уровень знаний, умений и навыков на текущий момент – пройдите обучение по этой теме или выберите ту часть задачи, с которой можете справиться прямо сейчас.
Разбейте задачу на шаги. Ответьте на вопросы: Как вы будете измерять свой прогресс? Как вы увидите, что достигаете успеха? Видимое представление немедленных результатов является одним из важных условий потоковой деятельности.
Подготовьте инструменты и материалы, которые могут вам пригодиться во время процесса. Вы же не хотите прерывать творческое состояние, чтобы искать точилку для карандаша?
Если мы вложили достаточно усилий «на входе», то в состоянии потока мы получаем ясность сознания, мысли приходят сами собой, «текут», выстраиваются наилучшим образом. Возникают неожиданные креативные решения, инсайты.
На выходе мы получаем высокое качество продукта деятельности, содержащего наши творческие находки. Часто следствием нашей работы является синхронистичность – когда отзвуки наших идей начинают появляться в окружающем мире в самых неожиданных ситуациях.

Энергия

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

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

Резюме

Итак, кратко представим основные три шага для создания Потока:

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными

Иллюстрации Kung Fu Panda (С) DreamWorks Animation

upd: в статью добавлено уточнение о том, что подразумевается под «начинать работу с простых шагов», что бы избежать неоднозначности в понимании. Спасибо VitaZheltyakov за дополнение.

Источник

Какие ресурсы распределяются между потоками?

Недавно мне задали вопрос в интервью, какая разница между процессом и потоком. На самом деле, я не знал ответа. Я подумал минуту и ​​дал очень странный ответ.

Q. Знаете ли вы сегменты, в которых программа разделяется?

Мой ответ: yep (подумал, что это легко) Stack, Data, Code, Heap

Q. Итак, скажите мне: какие сегменты разделяют потоки?

Я не мог ответить на этот вопрос и в итоге сказал все.

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

ОТВЕТЫ

Ответ 1

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

Ответ 2

Из Wikipedia (я думаю, что это сделало бы действительно хороший ответ для интервьюера: P)

Темы отличаются от традиционных многозадачная операционная система процессов в этом:

Ответ 3

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

У нас есть следующее из раздела 2.2.2 Модель классической резьбы в современных операционных системах 3e от Tanenbaum:

Модель процесса основана на двух независимых концепциях: группировка ресурсов и выполнение. Иногда полезно разделить их; это где темы вступают.

Далее он предоставляет следующую таблицу:

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

Ответ 4

Сообщите интервьюеру, что он полностью зависит от реализации ОС.

Возьмем Windows x86, например. Есть только 2 сегменты [1], код и данные. И они оба отображаются на все 2 ГБ (линейное, пользовательское) адресное пространство. Base = 0, Limit = 2GB. Они бы сделали один, но x86 не позволяет сегменту быть как Read/Write, так и Execute. Таким образом, они сделали два и установили, что CS указывает на дескриптор кода, а остальные (DS, ES, SS и т.д.) Указывают на другой [2]. Но оба указывают на то же самое!

Человек, у которого вы проводили собеседование, сделал скрытое предположение, что он/она не заявлял, и это глупая трюка.

Так что в отношении

Q. Так скажите мне, какой сегментный поток поделиться?

Сегменты не имеют отношения к вопросу, по крайней мере, в Windows. Темы разделяют все адресное пространство. Существует только 1 сегмент стека, SS, и он указывает на то же самое, что DS, ES и CS делают [2]. То есть цельное кровавое пространство пользователя. 0-2GB. Конечно, это не означает, что потоки имеют только 1 стек. Естественно, каждый из них имеет свой собственный стек, но сегменты x86 не используются для этой цели.

Может быть, * nix делает что-то другое. Кто знает. Посылка, на которой основывался вопрос, была нарушена.

Ответ 5

Как правило, нитки называются легкими процессами. Если мы разделим память на три раздела, это будет: код, данные и стек. Каждый процесс имеет свои собственные разделы кода, данных и стека, и из-за этого контекста время переключения немного велико. Чтобы уменьшить время переключения контекста, люди придумали концепцию потока, которая разделяет данные и сегмент кода с другим потоком/процессом и имеет свой собственный сегмент STACK.

Ответ 6

Процесс имеет сегменты кода, данных, кучи и стека. Теперь указатель инструкций (IP) потока или потоков указывает на сегмент кода процесса. Сегменты данных и кучи разделяются всеми потоками. Как насчет области стека? Что такое область стека? Это область, созданная процессом только для использования ее потока. потому что стеки могут использоваться гораздо быстрее, чем кучи и т.д. Область стека процесса делится между потоками, т.е. Если есть три потока, то область стека процесса делится на 3 части, и каждая из них предоставляется 3 нитям. Другими словами, когда мы говорим, что каждый поток имеет свой собственный стек, этот стек фактически является частью области стека процессов, выделенной для каждого потока. Когда поток заканчивает выполнение, стек потока восстанавливается процессом. Фактически, не только стек процесса разделен между потоками, но все регистры, которые используют поток, такие как SP, ПК и регистры состояния, являются реестрами процесса. Поэтому, когда дело доходит до обмена, области кода, данных и кучи являются общими, а область стека разделена только на потоки.

Ответ 7

Потоки разделяют сегменты кода и данных и кучу, но они не делят стек.

Ответ 8

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

1 Код логически приватен, но может использоваться по соображениям производительности. 2 Я не уверен на 100%.

Ответ 9

Темы разделяют все [1]. Для всего процесса есть одно адресное пространство.

Каждый поток имеет свой собственный стек и регистры, но стеки всех потоков видны в общем адресном пространстве.

Если один поток выделяет некоторый объект в своем стеке и отправляет адрес в другой поток, они оба будут иметь равный доступ к этому объекту.

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

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

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

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

[1] ОК, я знаю: маски сигналов, TSS/TSD и т.д. Пространство адресов, включая все его отображенные программные сегменты, по-прежнему разделяется.

Ответ 10

Ответ 11

Поток делится кучей (есть исследование о конкретной куче потока), но текущая реализация разделяет кучу. (и, конечно, код)

Ответ 12

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

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

Ответ 13

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

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

Источник

Прочитайте онлайн Параллельное и распределенное программирование на С++ | Ресурсы потоков

какие ресурсы потока являются его собственными. Смотреть фото какие ресурсы потока являются его собственными. Смотреть картинку какие ресурсы потока являются его собственными. Картинка про какие ресурсы потока являются его собственными. Фото какие ресурсы потока являются его собственными

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

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

Внимание! Текст предназначен только для предварительного ознакомительного чтения.

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

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

Источник

Какие ресурсы разделяются между потоками?

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

потоки разделяют одну и ту же память, процессы не. Отвечая на этот вопрос, интервьюер злобно улыбнулся и засыпал меня вопросами:—1—>

вопрос:знаете ли вы сегменты, в которых программа делится?

мой ответ: да (думал, что это было легко) стек, данные, код, куча

вопрос:Итак, скажите мне: какие сегменты разделяют потоки?

Я не мог ответить на это и закончил тем, что сказал все из них.

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

12 ответов

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

с Википедия (Я думаю, что это будет действительно хороший ответ для интервьюера: P)

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

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

у нас есть следующее из раздела 2.2.2 Классическая Модель Резьбы на современный Операционные системы 3Э по Таненбаума:

модель процесса основана на двух независимых концепциях: resource группировка и исполнение. Иногда полезно разделить их; вот где появляются нити.

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

далее он предоставляет следующую таблицу:

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

скажите интервьюеру, что это полностью зависит от реализации ОС.

человек, интервьюирующий вас, сделал скрытое предположение, что он/она не заявил, и это глупый трюк.

вопрос: Так скажите мне, какой сегмент нить поделиться?

сегменты не имеют отношения к вопросу, по крайней мере, в Windows. Потоки разделяют все адресное пространство. Существует только 1 сегмент стека, SS, и он указывает на то же самое, что DS, ES и CS do [2]. Т. е. все чертово пользовательское пространство. 0-2 ГБ. Конечно, это не означает, что потоки имеют только 1 стек. Естественно, у каждого есть свой стек, но сегменты x86 не используются для этой цели.

возможно *nix делает что-то другое. Кто знает. Предпосылка, на которой был основан вопрос, была нарушена.

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

процесс имеет сегменты кода, данных, кучи и стека. Теперь указатель инструкции (IP) потока или потоков указывает на сегмент кода процесса. Сегменты данных и кучи совместно используются всеми потоками. А как насчет области стека? Что на самом деле стек? Его область, созданная процессом только для его потока, чтобы использовать. потому что стеки можно использовать гораздо быстрее, чем кучи и т. д. Область стека процесса разделена между потоками, т. е. если есть 3 темы, затем область стека процесса делится на 3 части, и каждая из них отдается 3 потокам. Другими словами, когда мы говорим, что каждый поток имеет свой собственный стек, этот стек фактически является частью области стека процесса, выделенной каждому потоку. Когда поток завершает свое выполнение, стек потока восстанавливается процессом. Фактически, не только стек процесса разделен между потоками, но и весь набор регистров, которые поток использует как SP, PC и государственные регистры, являются регистрами процесса. Поэтому, когда дело доходит до совместного использования, код, данные и области кучи являются общими, а область стека просто разделена между потоками.

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

потоки обмениваются данными и кодом, а процессы-нет. Стек не является общим для обоих.

1 код логически частные, но могут быть разделены по соображениям производительности. 2 Я не уверен на 100%.

поделиться нити все [1]. Существует одно адресное пространство для всего процесса.

каждый поток имеет свой собственный стек и регистры, но стеки всех потоков отображаются на общее адресное пространство.

Если один поток выделяет некоторый объект в своем стеке и отправляет адрес другому потоку, они оба будут иметь равный доступ к этому объекту.

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

формат файла для исполняемого файла (например, ELF) имеет в нем отдельные разделы, которые можно назвать сегментами, содержащими скомпилированный код (текст), инициализированные данные, символы компоновщика, отладочную информацию и т. д. Здесь нет сегментов кучи или стека, так как это только конструкции времени выполнения.

эти сегменты двоичного файла могут быть сопоставлены в адресное пространство процесса отдельно, с различными разрешениями (например, исполняемый файл только для чтения для кода / текста и copy-on-write non-executable для инициализированных данных).

[1] Хорошо, я знаю: маски сигналов, TSS/TSD и т. д. Однако адресное пространство, включая все его сопоставленные сегменты программы, по-прежнему является общим.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *