2017-01-21 11 views
1

я проходил через следующие примечания лекции по ОС:Как же яблоки упали нити, чтобы быть понята

http://williamstallings.com/Extras/OS-Notes/h2.html

Что я мог сделать, что «Процесс представляет собой поток исполнения, iebasically последовательность операторов и т. д. - поток. Однако состояния регистров одного процесса не зависят от состояний регистров другого процесса, но состояния регистров другого потока могут быть доступны внутри потока. Для каждого процесса выделяется хотя бы один поток или посвященный, когда процесс запускается, действия ОС для этого процесса захватываются нитью (или потоком) «

Каково было обоснование идеи потоков? Когда ОС запускает определенный процесс, почему нам нужно какое-то промежуточное звено, как поток между ними?

«Однако состояния регистров одного процесса не зависят от состояний регистров другого процесса, но состояния регистров другого потока могут быть доступны внутри потока». Можно ли принять вышеуказанный оператор, как в коде процесса, мы не можем получить доступ к состояниям регистров другого процесса, но в коде для потока мы можем получить доступ к состояниям регистров другого потока? (У вышеупомянутого вопроса была замена процесса и потока по их определению как кодов или последовательностей потоков)

P.S: Название вопроса является метафорическим. Пожалуйста, простите, если он вводит в заблуждение. : P Могу ли я взять на себя смелость расширить и спросить, что если процессор генерирует поток для каждого процесса, что он пишет в коде для потока? (Как выглядит код для потока?)

ответ

1

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

Ранние (1960-е годы) экземпляры многопроцессорной обработки были мейнфреймами, которые выполняли несколько процессов, которые обычно не связывались друг с другом. Большая часть этой активности была предназначена для пакетно-ориентированных заданий с потоком заданий, который должен выполняться, часто с помощью перфокарта или в более сложных ситуациях, с удаленных сайтов входа на работу, которые были другими компьютерами с несколькими периферийными устройствами (считыватели карт, ленточные накопители, линейные принтеры, ...), которые связывались с мэйнфреймом для запуска заданий. Были также приложения для совместного использования времени, похожие на серверы, за исключением случаев, когда для связи с основным фреймом использовались относительно немые терминалы. К 1970-м годам APL/SV (A Programmming Language/Share Variables) был временем приложения/языка программирования для совместного использования переменных между пользователями.

Для многопроцессорных/многопоточных операционных систем драйверы устройств работают из очереди запросов (например, чтения или записи файла). Каждый запрос, который должен быть добавлен в очередь драйвера устройства, выполняется аналогично коммутатору контекста, поэтому конфликтов между процессами или потоковыми запросами для ввода-вывода не будет. Некоторые периферийные устройства, такие как мейнфреймы, SCSI или ... дисковые накопители, также работали из внутренней очереди и могли обрабатывать запросы ввода-вывода не по порядку, чтобы уменьшить накладные расходы на случайный доступ.

0

Основная проблема, связанная с потоком, заключалась в том, как приложение может обрабатывать несколько задач одновременно и делать это независимо от системы?

В классических евнухах процесс мог делать только одно за раз. Если вам нужно было обрабатывать несколько вещей, вы открыли несколько процессов.

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

Другим подходом к решению нескольких задач сразу было использование очередей событий (Windoze, X Windows).

Язык программирования ADA был первым (и по-прежнему единственным) основным языком программирования для поддержки потоков (задач) как независимого от системы способа решения этих проблем. Соответствие требованиям DOD привело к созданию потоков.

Первоначально потоки были реализованы через библиотеки («использовать потоки», «многие к одной модели»). С ростом многопроцессорных систем увеличился спрос на возможность параллельного выполнения потоков на разных процессорах. Это привело к созданию потоков ядра в операционных системах. (Многие операционные системы по-прежнему не поддерживают потоки ядра).

+0

Извините, что вернулся после долгого времени, но не могли бы вы рассказать мне, что именно вы подразумеваете под «Системным независимым способом»? –