Я являюсь абсолютным новичком в операционных системах. Поэтому, пожалуйста, не против, если вопрос кажется слишком наивным или базовым. Из того, что я читал, каждый процесс имеет свой стек ядра и стек пользователя. Так и каждый поток. Темы процесса имеют одинаковое адресное пространство. Они также разделяют сегмент кода и данных, но не стек. Но как это возможно? В CPU есть только один указатель стека, так как каждый поток может иметь свой собственный стек? И какова разница между стеклом стека и стекю? Из того, что я прочитал, на нем только один стек и кадры. Опять же, это физический стек? Существуют ли эти стеки в виртуальной памяти? Может кто-то прояснит мои концепции? Я смущен и не могу двигаться вперед.Управление стеками по операционной системе
ответ
Из того, что я читал, каждый процесс имеет свой стек ядра и стек пользователя. Так и каждый поток.
Каждый поток имеет собственное ядро и пользовательский стек. Процессы могут содержать любое количество стеков - по крайней мере одно для каждого из их потоков, возможно, больше.
Темы процесса имеют одинаковое адресное пространство. Они также разделяют сегмент кода и данных, но не стек. Но как это возможно?
Поскольку термин «доля» используется двумя различными способами.
Моя жена и я совместно владеем двумя автомобилями, поэтому в этом смысле мы разделяем две машины. Но у меня есть одна машина, которую я использую, и у нее есть одна машина, которую она использует только. В этом смысле у каждого из нас есть свой автомобиль.
Аналогично, процесс с двумя потоками имеет два совместно используемых стека. Один для каждого потока. Поэтому каждый поток имеет свой собственный стек, хотя они могут получить доступ к стокам друг друга, если захотят.
В ЦПУ имеется только один указатель на стек, так как каждый поток может иметь свой собственный стек?
Стек может находиться на диске. Стек может находиться в памяти, но не используется как стек.
И какова разница между ч/б стеклом и стеком? Из того, что я прочитал, на нем только один стек и кадры.
Правильно, поэтому один стек может иметь несколько кадров, наложенных на него. Когда одна функция заканчивается, она выталкивает свой стек стека и возвращается к вызывающей стороне с кадром вызывающего абонента в верхней части стека.
Опять же, это физический стек?
Я не знаю, что это значит.
Существуют ли эти стеки в виртуальной памяти?
Да. Вот почему один поток может легко обращаться к переменным в стеке другого потока, если адрес передается от одного к другому. Стек - это просто память, которая используется как стек.
Если каждый поток может получить доступ к стеку другого пользователя и наоборот, разве это не было бы причудливой ситуацией? Я имею в виду, что, если поток начинает писать в стек другого потока? Есть ли какая-либо защита? –
@PrashantPandey Весь смысл потоков заключается в том, что они могут легко получить доступ к общей памяти. Совершенно нормально, когда потоки читают или записывают друг в друга стеки. Если вы не думаете, что можете сделать эту работу разумно, либо не делайте этого, либо не используете потоки. Защита - это программист, который знает, что они делают. –
Например, один поток может создавать некоторые объекты, которые нуждаются в работе над своим стекем, а затем запускать пул потоков для работы над этими объектами, дожидаться завершения работы потоков и затем просмотреть результаты в этих объектах. Нет проблем с этим, если блокировки используются правильно. Нитки должны взаимодействовать. –
- 1. Управление памятью в операционной системе BADA
- 2. Деятельность Управление стеками
- 3. в операционной системе многопользовательского
- 4. Mutex в операционной системе
- 5. fork() в операционной системе
- 6. Управление стеками в коде сборки
- 7. Управление навигационными стеками в IOS
- 8. Как сборка может работать в операционной системе?
- 9. Книги Android в операционной системе
- 10. Получить информацию о операционной системе
- 11. Планирование процесса в операционной системе
- 12. Обработчики прерываний в операционной системе
- 13. Android: управление стеками для просмотров на вкладке?
- 14. Как принять файлы с указанным типом контента по операционной системе
- 15. Открытие сеанса в вашей операционной системе
- 16. проблема сафари jquery на операционной системе Windows
- 17. Python на операционной системе реального времени (RTOS)
- 18. capybara Как получить информацию о операционной системе
- 19. ли процессы, выполняемые в операционной системе
- 20. Отправка нажатия клавиши операционной системе в EmacsW32
- 21. WeakReferences не освобождены во встроенной операционной системе
- 22. Tricking Java Web Start О операционной системе
- 23. Планирование процессов и потоков в операционной системе
- 24. Оценка логики процессов в операционной системе
- 25. Как bash получает команды в операционной системе?
- 26. Как OpenGl реализован в операционной системе?
- 27. Развертывание приложения JavaFX в устаревшей операционной системе
- 28. Программа распознает копию себя в операционной системе
- 29. Пользовательские настройки в операционной системе и архитектуре
- 30. Выполнение Java команд в операционной системе
Каждый поток имеет свой собственный набор регистров процессора. Переключение процессора из одного потока в другой требует замены регистров. Указатель стека является его частью. https://en.wikipedia.org/wiki/Context_switch –
Это может помочь https://www.cs.columbia.edu/~smb/classes/s06-4118/l06.pdf – Rupsingh