#multithreading #process #operating-system
#многопоточность #процесс #операционная система
Вопрос:
Как мы можем видеть, процесс, в котором есть части стека, кучи, данных, текста. Как четкое объяснение, которое я получил из книг и многих других ресурсов. Все понятно.
Когда я перехожу к процессу с многопоточностью, то эти разделы резко меняются. Почему?
Здесь вы можете видеть, что стек, данные — это то же самое, что также упоминается на приведенной выше диаграмме. но мы видим, что в нем есть и другие части. например, файлы? код? что подразумевается под файлами и кодом? в любом случае, если мы рассмотрим 1.файлы 2.код, прочитаем определения и примем его. тогда почему автор не упомянул их в приведенной выше схеме процесса?
простой в том, что процесс есть процесс, почему он отличается от приведенной выше диаграммы. даже обе диаграммы совпадают с вещью (процессом). почему части отличаются? Я взял обе диаграммы из книги. На обеих диаграммах показан процесс. Даже когда мы видим процесс с одним потоком, это также отличается от приведенной выше схемы процесса?
кто-нибудь может объяснить разницу между процессом или процессом с одним потоком? Обе диаграммы должны содержать одинаковые части.
Ответ №1:
Это верхняя картинка для однопоточного процесса:
high stack
free-address-space
heap
data
low text
В многопоточном процессе вы получаете несколько стеков в верхней части адресного пространства с некоторым свободным адресным пространством между ними:
high stack thread 1
free-address-space
stack thread 2
free-address-space
...
stack thread N
free-address-space
heap
data
low text
Максимальный размер стека для каждого потока фиксирован (см. ulimit -a
, по умолчанию 8 МБ в Linux), так что ОС может продолжать создавать новые стеки для новых потоков от верхней части адресного пространства до нижней.