Что такое процесс и нить? - PullRequest
51 голосов
/ 23 февраля 2010

Да, я прочитал много материалов, связанных с операционной системой. И я все еще читаю. Но, похоже, что все они описывают процесс и поток «абстрактно», что вызывает много поводов для высокого уровня их поведения и логической организации. Мне интересно, что они физически ? По-моему, это всего лишь некоторые "структуры данных" в памяти, которые поддерживаются и используются кодами ядра для облегчения выполнения программы. , Например, операционная система использует некоторую структуру данных процесса (PCB) , чтобы описать аспекты процесса, назначенного для определенной программы, такие как его приоритет, его адресное пространство и так далее. Это все в порядке?

Ответы [ 22 ]

2 голосов
/ 23 февраля 2010

Процесс - это область памяти, управляемая ОС для запуска приложения. Поток - это небольшая область в памяти процесса, предназначенная для запуска выделенной задачи.

1 голос
/ 23 марта 2010

Я видел много ответов, но большинство из них недостаточно ясны для новичка в ОС.

В любой современной операционной системе один процесс имеет виртуальный ЦП, виртуальную память, виртуальный ввод / вывод.

Виртуальный ЦП: если у вас несколько ядер, процессу может быть назначено одно или несколько ядер для обработки планировщиком.

Виртуальный ввод / вывод: ввод / вывод может быть разделен между различными процессами. Как для примера клавиатуры, которая может использоваться несколькими процессами. Поэтому, когда вы печатаете в блокноте, вы видите, что текст меняется, когда регистратор клавиш, работающий в качестве демона, сохраняет все нажатия клавиш. Таким образом, процесс использует ресурс ввода-вывода.

Виртуальная память: http://en.wikipedia.org/wiki/Virtual_memory Вы можете перейти по ссылке.

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

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

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

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

1 голос
/ 23 февраля 2010

Они не являются физическими нитями, если вы об этом. ;)

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

1 голос
/ 23 февраля 2010

Процессы и потоки являются абстракциями - в них нет ничего физического или какой-либо другой части операционная система в этом отношении. Вот почему мы называем это программным обеспечением.

Если вы просматриваете компьютер в физическом выражении, вы получаете беспорядочную электроника, которая подражает тому, что делает машина Тьюринга . Попытка сделать что-нибудь полезное с сырой Truing Machine превратит ваш мозг в Jell-O в пять минут ровно. Избежать этот неприятный опыт, компьютерные люди разработали набор абстракций для разделения различные аспекты вычислительной техники. Это позволяет вам сосредоточиться на уровне абстракции, интересует вас, не беспокоясь о других вещах, поддерживающих его. Некоторые вещи были отлиты в схему (например, сумматоры и тому подобное), что делает их физическими, но Подавляющее большинство того, с чем мы работаем, основано на множестве абстракций. Как правило, абстракции у нас есть какая-то математическая основа для них. Вот почему стеки, очереди и «состояние» играют такую ​​важную роль в вычислительной технике - есть обоснованные набор математики вокруг этих абстракций, которые позволят нам опираться на и рассуждать о их манипулирование.

Ключ к пониманию того, что программное обеспечение всегда основано на композит абстрактных моделей "вещей". Эти "вещи" не всегда относятся к что-нибудь физическое, более вероятно, что они связаны с какой-то другой абстракцией. Вот почему вы не можете найти удовлетворительную «физическую» основу для процессов и потоков где-нибудь в ваших учебниках.

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

Программное обеспечение похоже на лук, слои на слоях на слоях, как только вы раскроете все слои (абстракции) прочь, ничего особенного не осталось! Но лук все еще очень настоящий.

1 голос
/ 23 февраля 2010

Причина, по которой они упоминаются только абстрактно, заключается в том, что они являются концептами, в то время как они будут реализованы в виде структур данных, и не существует универсального правила их реализации.
По крайней мере, это верно для самих потоков / процессов, они не принесут много пользы без планировщика и таймера прерываний.
Планировщик - это алгоритм, с помощью которого операционная система выбирает следующий поток для запуска в течение ограниченного периода времени, а таймер прерывания представляет собой аппаратное обеспечение, которое периодически прерывает выполнение текущего потока и передает управление обратно планировщику.

Забыл что-то: вышеупомянутое неверно, если у вас есть только кооперативные потоки, кооперативные потоки должны активно передавать управление следующему потоку, который может стать уродливым при опросе одного потока для результатов другого потока, который ждет первого уступить.
Они даже более легкие, чем другие потоки, так как для их работы не требуется поддержка базовой операционной системы.

0 голосов
/ 23 февраля 2010

Процесс - это контейнер потоков.

0 голосов
/ 23 февраля 2010

Процесс не разделяет память между собой - поскольку он работает в так называемой «защищенной плоской модели», с другой стороны, потоки разделяют одну и ту же память.

0 голосов
/ 23 февраля 2010

Процесс - это одно целое, например и EXE-файл или один JVM. Может быть дочерний процесс родительского процесса, где исполняемый файл запускается снова в отдельном пространстве. Поток - это отдельный путь выполнения в том же процессе, где процесс контролирует, какой поток выполнить, остановить и т. Д.

0 голосов
/ 23 февраля 2010

В Windows, по крайней мере после выхода из Win 3.1, операционная система (ОС) содержит несколько процессов, каждый из которых имеет собственное пространство памяти, и не может взаимодействовать с другими процессами без ОС.

Каждый процесс имеет один или несколько потоков, которые разделяют одно и то же пространство памяти и не нуждаются в ОС для взаимодействия с другими потоками.

0 голосов
/ 23 февраля 2010

Ну, я еще не видел ответа на вопрос "Что они физически"? Поэтому я попробую.

Процессы и потоки не являются чем-то особенным. Они являются особенностью операционной системы. Обычно любой физический компонент компьютера не знает о них. Процессор обрабатывает только последовательный поток кодов операций. Эти коды операций могут принадлежать потоку. Затем ОС использует прерывания и прерывает восстановление контроля, решает, какой код выполнять, и переключается на другой поток.

...