Как "Стек" играет в исполнении потока?
Я работаю над Pintos.
Что-то вроде учебного пособия для обучения по созданию операционных систем, и я нахожусь на втором проекте, который ориентирован на создание поддержки пользовательских программ.
Итак, первым делом стоит установить стек! Отлично.
Проблема в том, что с самого начала урока я дрожу от этих слов "стек", потому что я никогда не могу понять, что такое стек и как он влияет на выполнение программы или потока. Итак, я понимаю, что это область памяти, настроенная в оперативной памяти, но это все.
Мои вопросы следующие:
- Какова функция стека?
- Как "стек" влияет на выполнение потока в ЦП по отношению к счетчику программ, регистрам и указателю стека?
- Как вещи добавляются в стек и как они удаляются из него?
- Более того, даже если вы не знаете о Pintos, что значит "настроить стек" при создании поддержки пользовательских программ в операционной системе?
1 ответ
Стек - это просто память. Единственное, что делает память стеком, - это то, что процесс обращается к ней "первым пришел - первым вышел".
Какова функция стека?
Функция стека в компьютере заключается в поддержке вызовов функций. Вызовы функций отражают работу стека. Вызов функции толкает ее. Выход из функции всплывает.
Как "стек" влияет на выполнение потока в ЦП по отношению к счетчику программ, регистрам и указателю стека?
С точки зрения процессора поток - это процесс. Операционные системы обманывают ЦП, поскольку несколько процессов совместно используют одно адресное пространство. Таким образом, процесс становится потоком.
Счетчик программы и указатель стека являются регистрами. На большинстве процессоров есть инструкции, которые манипулируют регистром указателя стека. Например, инструкция вызова функции поместит счетчик программ в стек, уменьшив указатель стека и сохранив счетчик программ в новом месте, на которое ссылается указатель стека.
Как вещи добавляются в стек и как они удаляются из него?
Stack memory is allocated by decrementing the stack pointer. Something like:
SUB #32, SP
выделит 32 байта в стеке и
ADD #32, SP
освободит эту память. Преимущество стека в том, что он очень быстр для выделения памяти.
Кроме того, как упоминалось выше, некоторые инструкции могут манипулировать стеком.
Более того, даже если вы не знаете о Pintos, что значит "настроить стек" при создании поддержки пользовательских программ в операционной системе?
Чтобы настроить стек, вы должны:
- Выделите память для стека.
- Вы также можете выделить защитную память, которая защищена с обеих сторон стека для обнаружения переполнений и переполнений.
- Вы назначаете переместить адрес вершины стека в регистр указателя состояния.
Как я уже говорил, стек - это просто память. Программа может легко выделить свою собственную память и переместить свой адрес в указатель стека, чтобы создать новый стек.