Контекст выполнения процесса.
Системные данные, используемые при выполнении процесса (когда его образ загружен в RAM), составляют контекст процесса. Контекст процесса формально описан структурой structuser в файле /usr/include/sys/user.h.Область контекста процесса имеет фиксированный размер и не входит в виртуальное адресное пространство процесса. В пространстве физических адресов контекст процесса располагается перед процедурным сегментом или перед сегментом данных в случае разделяемого процедурного сегмента. Контекст текущего процесса отображается в область текущего процесса виртуального адресного пространства ядра. Адрес этой области сохраняет системная переменная u, через которую поля контекста текущего процесса доступны доступны подпрограммам ядра. Доступ к полям контекста процесса на уровне пользователя реализован через системные вызовы ядра, например, chdir, chroot, signal, ulimit.
Регистры. Счетчик команд.Стек.
Регистры
Несколько триггеров можно объединить в регистр - узел для хранения чисел с двоичным представлением цифр разрядов. Основными видами регистров являются параллельные и последовательные (сдвигающие).
В параллельном регистре на тактируемых D-триггерах рисунок 1 код запоминаемого числа подается на информационные входы всех триггеров и записывается в регистр с приходом тактового импульса. Выходная информация изменяется с подачей нового входного слова и приходом следующего синхроимпульса. Такие регистры используют в системах оперативной памяти. Число триггеров в них равно максимальной разрядности хранимых слов.
считывания.
Счетчик команд
Счетчик команд — регистр процессора, содержащий адрес текущей выполняемой команды. В зависимости от архитектуры содержит либо адрес инструкции, которая будет выполняться, либо той, которая выполняется в данный моментВ большинстве процессоров, после выполнения команды, если она не нарушает последовательности команд (например, команда перехода), счетчик автоматически увеличивается (постинкремент). Понятие счётчика команд сильно связано с фон Неймановской архитектурой, одним из принципов которой является выполнение команд друг за другом в определенной последовательности.
|
Стек
Стек (англ. stack — стопка) — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.
Стеки широко применяются в вычислительной технике. Например, для отслеживания точек возврата изподпрограмм используется стек вызовов, который является неотъемлемой частью архитектуры большинства современных процессоров. Языки программирования высокого уровня также используют стек вызовов для передачи параметров при вызове процедур.
Арифметические сопроцессоры, программируемые микрокалькуляторы и язык Forth используют стековую модель вычислений.
В ЦВК стек называется магазином — по аналогии с магазином в огнестрельном оружии (стрельба начнётся с патрона, заряженного последним)
Виртуальное адресное пространство.
Виртуальное адресное пространство - это системе адресации, используемая в современных операционных системах - в частности - при работе операционной системы с процессами (/потоками). ]
Такая система удобна по различным причинам - в том числе и потому, что позволяет изолировать "рабочие пространства" процессов друг от друга.
Очередной адрес, создаваемый процессом для идентификации области памяти, а которой процесс хранит некоторые данные называется логическим (виртуальным) адресом и относится именно к виртуальному адресному пространству.
|
Потоки.
Определение потока довольно простое: потоки — это объекты, получающие время процессора. Время процессора выделяется квантами (quantum, timeslice). Квант времени — это интервал, имеющийся в распоряжении потока до тех пор.пока время не будет передано в распоряжение другого потока.
Обратите внимание, что кванты выделяются не программам или процессам, а порожденным ими потокам. Как минимум, каждый процесс имеет хотя бы один (главный) поток, но современные операционные системы, начиная с Windows 95 (для приверженцев BorlandKylix и Linux также), позволяют запустить в рамках процесса несколько потоков.
Модель потока.
Модель потока
С каждым потоком связывается:
- счетчик выполнения команд; - регистры для текущих переменных; - стек; - состояние.
Потоки делят между собой элементы своего процесса:
- адресное пространство; - глобальные переменные; - открытые файлы;
- таймеры; - семафоры; - статистическую информацию.
В остальном модель идентична модели процесса. В POSIX и Windows есть поддержка потоков на уровне ядра. В Linux есть новый системный вызов clone для создания потоков, отсутствующий во всех остальных версиях системы UNIX. В POSIX есть новый системный вызов pthread_create для создания потоков. В Windows есть новый системный вызов CreateThread для создания потоков.
|
Использование потоков. Отличия от процессов.
Преимущества:
- упрощение программы в некоторых случаях, за счет использования общего адресного пространства;
- быстрота создания потока по сравнению с процессом примерно в 100 раз;
- повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, формировать текст и записывать на диск резервную копию.
главное отличие процессов от потоков, состоит в том, что процессы изолированы друг от друга, так используют разные адресные пространства, а потоки, могут использовать одно и то же пространство (внутри процесса) при этом, выполняя действия не мешаяя друг другу. В этом и заключается удобство многопоточного программинга: разбив приложение на несколько последовательных потоков, мы можем увеличить производительность, упростить пользовательский интерфейс и добиться масштабируемости (если Ваше приложение установят на многопроцессорную систему, выполняя потоки на разных процах, ваша прога будет работать с аховой скоростью.