Тема3,4,5: процессы и потоки ос Linux
Основными активными сущностями в ос Linuxявляются процессы. Процессы в Linux — классические, последовательные процессы. Каждый процесс выполняет одну программу и изначально получает один поток управления. У процесса есть один счетчик команд, который отслеживает следующую исполняемую команду. Linuxпозволяет процессу создавать дополнительные потоки. Также Linux представляет собой многозадачную систему, так, что несколько независимых процессов могут работать одновременно. У каждого процесса в Linux есть пользовательская часть, в которой работает программа пользователя, однако, когдаодин из потоков делает системный вызов,то происходит эмулированное прерывание с переключением в режим ядра. После этого поток начинает работу в контексте ядрас другой картой памяти, своимстеком ядра, счетчиком команд в режиме ядра и полным доступом ко всем ресурсам машины. Ядро ОC Linux внутренним образом представляет процессы как задачи при помощи структуры задачtask_struct. Процесс с одним потоком представляется одной структурой задач, а многопоточный процесс будет иметь по одной структуре задачи для каждого из потоков пользовательского уровня. Само ядро является многопоточным и имеет потоки уровня ядра, которые не связаны ни с какими пользовательскими процессами и выполняют код ядра. Для каждого процесса в памяти находится его дескриптор типа task_struct. Он содержит важную информацию, необходимую ядру для управления всеми процессами. Дескриптор процесса создается при создании процесса. Для совместимости с другими системами unix процессы в Linux идентифицируются при помощи идентификатора процессаPID(ProcessIdentifier). Ядро организует все процессы в двунаправленный список структур задач. Информация в дескрипторе процесса подразделяется на следующие категории:
- Параметры блокирования (приоритет процесса, израсходованное за последний учитываемый период времени, количество проведенного в режиме ожидания времени)
- Образ памяти (указатели на сегмент текста, данных и стека) Когда процесса нет в памяти, то здесь так же хранится, как найти его части на диске.
- Сигналы (маски, указывающие, какие сигналы перехватываются, какие временно заблокированы, и какие находятся в процессе доставки).
- Машинные регистры. Когда происходит эмулированное прерывание в ядро, то машинные регистры сохраняются здесь
- Состояние системного вызова (здесь хранится информация о текущем системном вызове)
- Таблица дескрипторов файлов (Когда делается системный вызов, использующий дескриптор файла, то файловый дескриптор используется как индекс в этой таблице для обнаружения соответствующей этому файлу структуры данных).
- Учетные данные (Указатель на таблицу, в которой отслеживается использованное процессом пользовательское и системное время процесса).
- Стек ядра (фиксированный стек для использования той частью процесса, которая работает в режиме ядра)
- Разное (текущее состояние процесса, ожидаемое процессом событие, PID процесса, идентификаторы родительского процесса, группы)
- Выделение структуры задач для потомка
- Заполнение структуры задач потоком данными родителя
- Выделение памяти для стека и области пользователя дочернего процесса
- Заполнение области пользователя дочернего процесса
- Выделение идентификатора для дочернего процесса
- Настройка дочернего процесса на использование программы родительского процесса
- Копирование таблицы страниц для данных и стека
- Настройка совместного использования открытых файлов
- Копирование регистров родительского процесса в дочерний процесс
- Поиск исполняемого файла
- Проверка разрешения на выполнение
- Чтение и проверка заголовка
- Копирование аргументов, среды в ядро
- Освобождение нового адресного пространства
- Копирование аргументов среды в стек
- Сбрасывание сигнала
- Инициализация регистров
Для продолжения скачивания необходимо пройти капчу:
Что из этого является потоками?
Доброго времени суток. Не могу разобраться, что из этого является именно потоками, и как их вообще отличать от процессов. Самой системы Linux на PC нет, опираюсь на скриншоты. Именно этот сделан в командной строке с «top H». Очень надеюсь на Вашу помощь, т.к. сам разобраться не смог, да и в сети что-то так и не нашел однозначного ответа на то, как их отличать.
Всё что вы видите это потоки — кто вам такое сказал . Читаем man: The top program provides a dynamic real-time view of a running system. It can display system summary information as well as a list of processes or threads А опция H означает, что треды печаются отдельно, а НЕ суммируются внутри процесса: *H — Instructs top to display individual threads. Without this command-line option a summation of all threads in each process is shown. Later this can be changed with the `H’ interactive command.
@Sergey: да, каждая строчка это поток — всё что вы видите (каждая строчка в таблице) это потоки. Я тоже man процитировать могу: «top -H :Threads-mode operation Instructs top to display individual threads. Without this command-line option a summation of all threads in each process is shown.» [выделение моё]¶ Используйте \@-синтаксис, если хотите, чтобы мне уведомления о вашем комментарии приходили.
Вы как раз и процитировали то место, в котором говорится, что ооция -H показывать треды отдельно. Т.е. можно показывать треды внутри процесса-хозяина, а можно — отдельно. Но далеко не все процессы содержат треды. Процесс — первичен, а тред — вторичен.
@Sergey: каждый процесс содержит как минимум один поток, поэтому каждой строчке в таблице соответствует поток¶ У вас похоже проблемы с чтением как документации так и комментариев — даже после подсказки не способны \@-синтаксис использовать.
Процесс и потоков в Linux
Изучение
Программисты должны быть знакомы с такими терминами, как процесс и потоки, но даже те, кто не знаком с ними, также могут извлечь выгоду из их понимания. Linux может помочь вам определить, какие приложения создают трудности на вашем компьютере и нужно ли вам добавлять дополнительную оперативную память для повышения производительности, управляя процессами и потоками. Давайте погрузимся в сферу компьютерных систем и разберемся, что означают эти термины. Некоторые концепции будут упрощены и обобщены, но общие принципы, которые мы обсуждаем, должны помочь проиллюстрировать различия между этими терминами.
Как этот процесс работает в Linux
Недостаточно предоставить компьютеру двоичный код, который сообщает ему, что выполнять программу. Для запуска программы требуется много памяти и других ресурсов операционной системы. Итак, » Процесс » — это программа, загруженная в память со всеми необходимыми ресурсами. Управление ресурсами вашей программы — это работа операционной системы.
Счетчик программ, регистры и стек — все это критически важные ресурсы для каждого процесса. ЦП содержит набор регистров для хранения данных. Регистры могут содержать информацию, необходимую процессу, такую как инструкции или адреса хранения. Компьютеры отслеживают, где они находятся в своих программах, используя «счетчик программ», также известный как «указатель команд». Стеки данных используются в компьютерных программах как временное пространство, поскольку они содержат информацию об активных подпрограммах. Динамически выделяемая память отличается от «кучи» — процесса, который является автономным и неограниченным.
Отдельная программа может выполняться более чем в одном экземпляре, и каждый из них называется » Процессом «. Адресное пространство памяти для каждого процесса является отдельным, поэтому он может работать независимо и быть изолированным от других процессов. Приложение не может напрямую обращаться к данным, которые используются другими процессами. При переключении одного процесса на другой сохраняются и загружаются регистры, карты памяти и другие ресурсы, загрузка которых займет некоторое время.
Операционные системы пытаются разделить процессы по отдельности, чтобы отказ одного процесса не повлиял на другие процессы. Например, вы, вероятно, столкнулись с ситуацией, когда одно из ваших компьютерных приложений зависает или дает сбой, и все же вы смогли остановить его, не затрагивая другие приложения. Каждый процесс имеет собственное адресное пространство, поэтому у каждого свой набор данных.
Как поток работает в Linux
» Поток » — это набор инструкций, выполняемых в процессе, который может варьироваться от одного потока до нескольких. Процесс — это процесс, который выделяет память и ресурсы, которые позже используются потоком. Иногда это называют легковесным процессом, потому что они могут получить доступ к общим данным, имея собственный стек. Поскольку оно работает параллельно, производительность приложения также будет улучшена. Наличие одного и того же адресного пространства потоков и процессов означает, что обмен данными между потоками не требует больших затрат. Недостатком является то, что отказ одного потока определенно повлияет на другие потоки и сделает процесс менее жизнеспособным. В графическом представлении ниже вы можете увидеть, как работает процесс и потоки.
Разница между процессом и потоками Linux
Заметные различия отмечены на следующем изображении:
Заключение
Термины «процесс» и «поток» могут сбивать с толку новичков. Итак, эта статья написана с учетом этого момента, и вы должны иметь основную идею после прочтения статьи. После этого он объяснил основные различия между ними. Поток — это часть процесса, которая распределяет свои ресурсы по другим потокам. Это улучшит производительность приложения, поскольку теперь ресурсы разделены.