Yandex 32 bit 19 процессов

Во всех компьютерах предусмотрен механизм, с помощью которого различные устройства (ввода-вывода, памяти) могут прервать нормальную работу процессора. Основные общепринятые классы прерываний перечислены в табл. 1.1.

Таблица 1.1. Классы прерываний

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

Такое положение дел проиллюстрировано на рис. 1.5,а. Программа пользователя содержит ряд вызовов процедуры записи WRITE, в промежутках между которыми расположены другие команды. В отрезках 1, 2 и 3 находятся последовательности команд кода, в которых не используется ввод-вывод. При вызове процедуры WRITE управление передается системной утилите ввода-вывода, которая выполняет соответствующие операции. Программа ввода-вывода состоит из трех частей.

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

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

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

Рис. 1.5. Ход выполнения программы без прерываний и с их использованием

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

Прерывания и цикл команды

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

В тот момент, когда внешнее устройство освобождается и готово для дальнейшей работы, т.е. оно готово принять от процессора новую порцию данных, контроллер ввода-вывода этого устройства посылает процессору сигнал запроса прерывания. В ответ процессор приостанавливает выполнение текущей программы, переключаясь на работу с программой, обслуживающей данное устройство ввода-вывода (эту программу называют обработчиком прерываний). Обслужив внешнее устройство, процессор снова возобновляет прерванную работу. На рис. 1.5,6 места программы, в которых происходит прерывание, обозначены крестиком.

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


Рис. 1.6. Передача управления через прерывание

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

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

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


Рис. 1.7. Цикл команды с прерываниями

Чтобы оценить выигрыш в эффективности, рассмотрим временную диаграмму (рис. 1.8), иллюстрирующую ход процессов, показанных на рис. 1.5,а и б. В ситуации, показанной на рис. 1.5,6 и 1.8, предполагается, что для выполнения операций ввода-вывода требуется сравнительно короткое время, т.е. меньшее, чем время обработки команд, которые расположены в программе пользователя между операциями записи. Более типичным, особенно для таких медленных устройств, как принтер, является случай, когда операции ввода-вывода занимают намного больше времени, чем требуется для выполнения последовательности команд пользователя. Такая ситуация показана на рис. 1.5,в. В этом случае программа пользователя дойдет до следующего вызова WRITE еще до завершения операции ввода-вывода, порожденной предыдущим вызовом. В результате в этом месте программа пользователя будет приостановлена. После завершения обработки предыдущей операции ввода-вывода придет очередь обработать новое обращение к процедуре WRITE, и будут запущены новые операции ввода-вывода. На рис. 1.9 представлена диаграмма выполнения программы в среде без прерываний и с прерываниями для описанного случая. Как видно, в такой ситуации выигрыш в эффективности все равно существует, так как часть времени, в течение которого выполняются операции ввода-вывода, перекрывается выполнением команд пользователя.


Рис. 1.8. Временная диаграмма программы: быстрый ввод-вывод

Обработка прерываний

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

Устройство посылает процессору сигнал прерывания.

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


а) без прерываний
Рис. 1.9. Временная диаграмма программы: медленный ввод-вывод

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


Рис. 1.10. Обработка простого прерывания

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

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

  • Содержимое программного счетчика и слово состояния прерываемой программы уже хранятся в системном стеке. Однако это еще не вся информация, имеющая отношение к состоянию исполняемой программы. Например, нужно сохранить содержимое регистров процессора, так как эти регистры могут понадобиться обработчику прерываний. Поэтому необходимо сохранить всю информацию о состоянии программы. Обычно обработчик прерываний начинает свою работу с записи в стек содержимого всех регистров. Другая информация, которая должна быть сохранена, обсуждается в главе 3, "Описание процессов и управление ими". На рис. 1.11,а показан простой пример, в котором программа пользователя прерывается после выполнения команды из ячейки N. Содержимое всех регистров, а также адрес следующей команды (N+1), в сумме составляющие М слов, заносятся в стек. Указатель стека при этом обновляется, указывая на новую вершину стека. Обновляется и программный счетчик, указывая на начало программы обработки прерывания.
  • Теперь обработчик прерываний может начать свою работу. В процесс обработки прерывания входит проверка информации состояния, имеющая отношение к операциям ввода-вывода или другим событиям, вызвавшим прерывание. Сюда может также входить пересылка устройствам ввода-вывода дополнительных инструкций или уведомляющих сообщений.
  • После завершения обработки прерываний из стека извлекаются сохраненные ранее значения, которые вновь заносятся в регистры, возобновляя таким образом то состояние, в котором они пребывали до прерывания (см., например, рис. 1.11,6).
  • Последний этап - восстановление из стека слова состояния программы и содержимого программного счетчика. В результате следующей будет выполняться команда прерванной программы.

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

Множественные прерывания

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


Рис. 1.11. Изменение памяти и регистров при обработке прерывания

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


б) Вложенная обработка прерываний
Рис. 1.12. Передача управления при множественных прерываниях

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

При втором подходе учитывается приоритет прерывания, что позволяет приостановить обработку прерывания с более низким приоритетом в пользу прерывания с более высоким приоритетом (рис. 1.12,6). Как пример применения этого подхода рассмотрим систему с тремя устройствами ввода-вывода: принтером, диском и коммуникационной линией, которым присвоены приоритеты в возрастающей последовательности - 2, 4 и 5, соответственно. На рис. 1.13 показана очередность обработки прерываний, поступивших от этих устройств. Программа пользователя запускается в момент времени t = 0. В момент t = 10 происходит прерывание принтера. Информация о программе пользователя заносится в системный стек, и в действие вступает стандартная программа обслуживания прерывания (interrupt service routine - ISR). Во время ее работы в момент t = 15 происходит коммуникационное прерывание. Из-за того что его приоритет выше, чем приоритет прерывания принтера, процессор приступает к его обработке. ISR принтера прерывается, информация о ее состоянии заносится в стек, а управление передается коммуникационной ISR. Далее, пока эта программа выполняется, происходит прерывание диска (в момент времени t = 20). Так как его приоритет ниже, коммуникационная ISR продолжает свою работу, пока не закончит ее.


Рис. 1.13. Пример последовательности обработки множественных прерываний

После выполнения ISR коммуникационной линии (t = 25) восстанавливается предыдущее состояние процессора, т.е. работа с ISR принтера. Однако прежде чем успеет выполниться хоть одна команда этой программы, процессор приступает к обработке прерывания диска, которое обладает более высоким приоритетом, и управление передается ISR диска. Только после завершения этой программы (t = 35) возобновляет работу ISR принтера. И, наконец, после завершения обработки этого прерывания управление передается программе пользователя.

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

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

Что делать, если системные прерывания грузят процессор


Чаще всего, когда в диспетчере задач появляется неестественно высокая нагрузка на процессор, причиной является что-то из:

  • Неправильно работающее оборудование компьютера
  • Неправильная работа драйверов устройств

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

Прежде чем приступать к поиску конкретной причины, рекомендую, если это возможно, вспомнить, что выполнялось в Windows непосредственно перед появлением проблемы:

  • Например, если обновлялись драйверы, можно попробовать откатить их.
  • Если было установлено какое-то новое оборудование - убедиться в правильности подключения и работоспособности устройства.
  • Также, если ещё вчера проблемы не было, а с аппаратными изменениями связать проблему не получается, можно попробовать использовать .

Поиск драйверов, вызывающих нагрузку от «Системные прерывания»

Как уже было отмечено, чаще всего дело в драйверах или устройствах. Можно попробовать обнаружить, какое из устройств вызывает проблему. Например, в этом может помочь бесплатная для бесплатного использования программа LatencyMon.


Обычно причина кроется в драйверах сетевых и Wi-Fi адаптеров, звуковых карт, других карт обработки видео или аудио-сигнала.

Проблемы с работой USB устройств и контроллеров

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

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

Поэтому могу рекомендовать более простой метод: откройте диспетчер задач, так чтобы было видно «Системные прерывания» и поочередно отключайте все без исключения USB устройства (включая клавиатуру, мышь, принтеры): если вы увидите, что при отключении очередного устройства нагрузка упала, то ищите проблему в этом устройстве, его подключении или том USB-разъеме, который для него использовался.

Другие причины высокой нагрузки от системных прерываний в Windows 10, 8.1 и Windows 7

В завершение некоторые менее часто встречающиеся причины, вызывающие описываемую проблему:


Есть еще один способ попробовать выяснить, какое оборудование виновато (но что-то показывает редко):

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

Добро пожаловать! Этот блог посвящен интернету и компьютерам, а, точнее был им посвящен.

Наверное, сразу видно, что уже много лет на сайте не появлялось новых статей. Да, такова судьба большинства блогов. Когда-то этот проект был амбициозным начинанием, и у автора, как и у многих других, писавших в то время, были масштабные планы стать одним из лучших российских блоггеров. Что же, если сейчас посмотреть, то из тех блогов, что создавались одновременно с моим, большинство уже растворилось в вечности. И у меня банально стало не хватать времени на блог. Так что да, он больше не обновляется. Хотя когда-то мы с этим сайтом выиграли в конкурсе "Блог рунета 2011".

У меня даже была мысль удалить все это, но потом я пересмотрел старые материалы, и понял, что они все еще могут быть полезны читателям. Да, некоторые статьи устарели (если у меня хватит сил, то они получат соответствующие пометки), но сайт, например, может быть полезен начинающим - здесь можно прочитать про базовые понятия интернета, научиться настраивать интернет, Windows или даже решиться перейти на Linux. Так что посмотрите на рубрики и выберите ту, которая подойдет именно вам.

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

Сандер

Picodi.ru - это скидочный портал от компании International Coupons , польского эксперта в области экономии и дешёвых покупок. Поляки считаются одной из самой экономных наций на свете, поэтому неудивительно, что такого типа проект вырос именно из польского стартапа kodyrabatowe.pl . Чем может пригодиться этот портал рядовому пользователю интернета в России?

Современные телефоны под управлением android это больше, чем телефоны. Вы привыкаете к набору установленных программ, к истории своих звонков и текстовых сообщений, коллекции фотографий и многому другому. Но время идет, и устраивавший вас полностью аппарат начинает тормозить, глючить, или же просто теряет презентабельный вид из-за сколов на корпусе или царапин на экране. Возникает вопрос выбора нового телефона и смены android телефона. И если вопрос выбора мы сейчас обойдем стороной, то "переезд" на новый телефон остается серьезной проблемой - совершенно не хочется заводить все данные с нуля. Вот об этом мы сегодня и поговорим.

Большинство из читателей этого блога, скорей всего, никогда с системами контроля версий не сталкивались и в ближайшее время не столкнутся. А жалко. Это чрезвычайно удобное изобретение достаточно широко используется программистами, но, на мой взгляд, могло бы очень пригодиться и тем, кто активно работает с текстами. Но, наверное, сейчас нет ни одной системы контроля версий, которую было бы легко начать использовать для "офисной" (Microsoft Office) работы. Тем не менее, мне думается, что материал, изложенный в статье, может быть интересным для всех читателей.

Если вы задумывались о том, как с вашего телевизора смотреть фильмы по сети и выходить в интернет, эта статья для вас. Нет, я знаю о том, что у некоторых телевизоров и так есть функциональность Smart TV, однако я ни разу не видел, чтобы она работала нормально. Видимо поэтому недавно корпорация Google продемонстрировала совершенно потрясающее устройство, немедленно ставшее сенсацией. Речь идет о медиа-стримере Chromecast (Хромкаст), более совершенной и доступной версии прошлогоднего провального плеера Nexus Q.

Донгл Хромкаст, размеры которого не превышают 2 дюймов, подключается к порту HDMI телевизора и позволяет наслаждаться просмотром потокового веб-контента. Для управления стримером можно использовать любое устройство (планшет, ПК, смартфон) базирующееся на операционной платформе iOS, Windows, Android или Mac OS.

Эта статья посвящена устройству системной памяти android, проблемам, которые могут возникать из-за ее нехватки и способам их решения. Я сам не так давно столкнулся с тем, что мой телефон на базе android стал регулярно выдавать сообщения о нехватке памяти при попытке установить то или иное приложение. Что было для меня очень странно при том, что по описанию на маркете там должно было иметься около 16GB, да еще и я увеличил этот объем при помощи дополнительной карты памяти. Однако проблема имелась, и пришлось основательно повозиться, прежде чем я нашел правильное решение, не требующее получения root-доступа или полного восстановления телефона к заводскому состояние.

Распространенной проблемой операционной системы Windows любой редакции является загрузка ресурсов компьютера «внутренними» процессами. Одним из таких процессов является системное прерывание, которое может серьезно нагружать ресурсы компьютера, что будет отображаться в «Диспетчере задач». Наиболее часто приходится сталкиваться с ситуацией, когда системное прерывание грузит процессор, из-за чего компьютер серьезно теряет в производительности. В рамках данной статьи мы рассмотрим, почему это происходит, а также можно ли отключить системные прерывания в Windows.

Системные прерывания: что это за процесс

Процесс «Системные прерывания» по умолчанию в операционной системе Windows запущен постоянно, но при обычной работе он не должен нагружать компоненты системы более чем на 5%. Если данный процесс более серьезно воздействует на ресурсы компьютера, это говорит о наличии аппаратной проблемы, а именно о нарушении в работе одного из компонентов компьютера.

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

Как отключить системные прерывания

Как было отмечено выше, системные прерывания являются не более чем указателем, что со стороны Windows идет дополнительное обращение к ресурсам центрального процессора. Отключить системные прерывания, чтобы повысить производительность компьютера, не получится, и нужно искать проблему в работе компонентов PC. Для этого удобно использовать приложение DPC Latency Checker, которое можно загрузить бесплатно в интернете с сайта разработчиков. Программа позволяет определить неисправные компоненты компьютера.

Чтобы провести диагностику системы приложением DPC Latency Checker, запустите его и подождите. Некоторое время уйдет на проверку компьютера, после чего пользователь увидит на графике, если имеются проблемы в работе компонентов системы. Также приложение укажет на возможные ошибки и посоветует их поискать, отключая устройства.

Для этого перейдите в «Диспетчер устройств», нажав правой кнопкой мыши на «Пуск» и выбрав соответствующий пункт, и начните по одному отключать устройства. После каждого отключения проверяйте в «Диспетчере задач» и приложении DPC Latency Checker, устранена ли проблемы с загрузкой процессора системными прерываниями. Если проблема сохранилась, включайте устройство обратно и переходите к следующему.

Важно: В процессе отключения компонентов в «Диспетчере устройств», не отключайте «Компьютер», «Процессор» и «Системные устройства», иначе это приведет к экстренной перезагрузке компьютера.

Когда будет найдено устройство, при отключении которого нагрузка на процессор снизится до нормального состояния, обновите драйвера для этого компонента с официального сайта разработчиков.

Обратите внимание: Если были предприняты попытки отключить все компоненты системы, но процесс «Системные прерывания» продолжает нагружать систему, попробуйте обновить драйвера для процессора.

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

Стоит отметить, что отключать системные прерывания через «Диспетчер задач» не следует, это приведет к сбою системы, но не решит проблему.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: