2016-08-28 5 views
0

Я являюсь абсолютным новичком в операционных системах. Поэтому, пожалуйста, не против, если вопрос кажется слишком наивным или базовым. Из того, что я читал, каждый процесс имеет свой стек ядра и стек пользователя. Так и каждый поток. Темы процесса имеют одинаковое адресное пространство. Они также разделяют сегмент кода и данных, но не стек. Но как это возможно? В CPU есть только один указатель стека, так как каждый поток может иметь свой собственный стек? И какова разница между стеклом стека и стекю? Из того, что я прочитал, на нем только один стек и кадры. Опять же, это физический стек? Существуют ли эти стеки в виртуальной памяти? Может кто-то прояснит мои концепции? Я смущен и не могу двигаться вперед.Управление стеками по операционной системе

+1

Каждый поток имеет свой собственный набор регистров процессора. Переключение процессора из одного потока в другой требует замены регистров. Указатель стека является его частью. https://en.wikipedia.org/wiki/Context_switch –

+0

Это может помочь https://www.cs.columbia.edu/~smb/classes/s06-4118/l06.pdf – Rupsingh

ответ

0

Из того, что я читал, каждый процесс имеет свой стек ядра и стек пользователя. Так и каждый поток.

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

Темы процесса имеют одинаковое адресное пространство. Они также разделяют сегмент кода и данных, но не стек. Но как это возможно?

Поскольку термин «доля» используется двумя различными способами.

Моя жена и я совместно владеем двумя автомобилями, поэтому в этом смысле мы разделяем две машины. Но у меня есть одна машина, которую я использую, и у нее есть одна машина, которую она использует только. В этом смысле у каждого из нас есть свой автомобиль.

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

В ЦПУ имеется только один указатель на стек, так как каждый поток может иметь свой собственный стек?

Стек может находиться на диске. Стек может находиться в памяти, но не используется как стек.

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

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

Опять же, это физический стек?

Я не знаю, что это значит.

Существуют ли эти стеки в виртуальной памяти?

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

+0

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

+0

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

+0

Например, один поток может создавать некоторые объекты, которые нуждаются в работе над своим стекем, а затем запускать пул потоков для работы над этими объектами, дожидаться завершения работы потоков и затем просмотреть результаты в этих объектах. Нет проблем с этим, если блокировки используются правильно. Нитки должны взаимодействовать. –

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