Обращение прикладной программы к ядру операционной системы для выполнения какой либо операции

Вызвать прерывание можно оператором int в ассемблере, при этом будет передано управление коду в ячейке с указанным номером из таблицы прерываний. При этом в linux возможен вызов прерывания intx80, именуемого syscall. Со стороны программиста это будет выглядеть как вызов библиотечной функции, которая, тем не менее, будет обработана в пространстве ядра. Так в чём разница между системным вызовом и софтверным прерыванием, если первый всё также вызывается через intx80?

Отслеживать
задан 28 янв 2019 в 18:57
1,284 14 14 серебряных знаков 36 36 бронзовых знаков

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

28 янв 2019 в 19:03

С другой стороны под рабочей ОС с точки зрения пользовательского кода никаких других прерываний не существует. Вызывать больше нечего. Кроме того на некоторых процессорах системы софтварных прерываний и отдельной инструкции подобной int может не быть и там syscall будет реализован по другому. А на других процессорах для вызова ядра вообще служит специализированная инструкция «вызов ядра». Однако его продолжат называть системным вызовом, что бы подчеркнуть что это не обычный библиотечный вызов

Конструирование ядра операционной системы 3. Режимы адресации. Отладка

28 янв 2019 в 19:09
28 янв 2019 в 19:37

Да, вы можете вызвать int 21h, на этом ваша программа аварийно завершится ввиду того, что ядро linux не предоставляет ни на каких прерываний кроме 80h. Все современные ОС работают в защищенном режиме процессора. Ядро не разрешает пользовательским программам ни читать ни писать что либо в таблице прерываний. Соответственно пользовательский код не сможет никуда поместить ссылку ни на какой код (если конечно вы специально для этого не напишите в ядре собственный системный вызов, который это сделает). Во времена ОС реального режима (DOS) программы использовали свои обработчики прерываний

Источник: ru.stackoverflow.com

Операционные системы(теория)

Многозадачность(multitasking) — свойство операционной системы или среды выполнения обеспечивать возможность параллельной (или псевдопараллельной)) обработки нескольких задач. Истинная многозадачность операционной системы возможна только в распределённых вычислительных системах.

Есть несколько разных понятий, связанных с областью параллельных вычислений.

Конкурентность (concurrency)

Конкурентность (concurrency) — это наиболее общий термин, который говорит, что одновременно выполняется более одной задачи. Например, вы можете одновременно смотреть телевизор и комментить фоточки в фейсбуке. К сожалению, вменяемого русскоязычного термина я не знаю. Википедия говорит, что concurrent computing — это параллельные вычисления, но как тогда будет parallel computing по русски?

Конструирование ядра операционной системы 2. Безопасность целевой платформы

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

Конкурентное исполнение говорит о том, что за определенный промежуток времени будет решена более, чем одна задача. Точка.

Параллельное исполнение

Параллельное исполнение (parallel computing) подразумевает наличие более одного вычислительного устройства (например, процессора), которые будут одновременно выполнять несколько задач.

Параллельное исполнение — это строгое подмножество конкурентного исполнения. Это значит, что на компьютере с одним процессором параллельное программирование — невозможно;)

Многопоточность

Многопоточность — это один из способов реализации конкурентного исполнения путем выделения абстракции «рабочего потока» (worker thread).

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

Асинхронное исполнение

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

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

CPU-bound и IO-Bound операции

Еще один важный момент, с точки зрения разработчика — разница между CPU-bound и IO-bound операциями. CPU-Bound операции нагружают вычислительные мощности текущего устройства, а IO-Bound позволяют выполнить задачу вне текущей железки.

Разница важна тем, что число одновременных операций зависит от того, к какой категории они относятся. Вполне нормально запустить параллельно сотни IO-Bound операций, и надеяться, что хватит ресурсов обработать все результаты. Запускать же параллельно слишком большое число CPU-bound операций (больше, чем число вычислительных устройств) бессмысленно.

Процессы и потоки

Существует 2 типа многозадачности:

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

Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.

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

В Linux (в ядре) понятие «threads» отсутствует. С точки зрения ядра все потоки — это полноценные, отдельные, процессы (просто с общим адресным пространством)

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

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

Читайте также:
Скайрим запуск программы невозможен так как отсутствует msvcp140 dll

Если родительский процесс по какой-то причине завершится раньше дочернего, последний становится сиротой (orphaned process). «Сироты» автоматически «усыновляются» программой init, выполняющейся в процессе с номером 1, которая и принимает сигнал об их завершении.

Если же потомок уже завершил работу, а предок не готов принять от системы сигнал об этом событии, то потомок не исчезает полностью, а превращается в зомби (zombie); в поле Stat такие процессы помечаются буквой Z. Зомби не занимает процессорного времени, но строка в таблице процессов остается, и соответствующие структуры ядра не освобождаются. После завершения родительского процесса «осиротевший» зомби на короткое время также становится потомком init, после чего уже «окончательно умирает».

Асинхронность

  • Асинхронный буквально означает “не синхронный”. Например, отправка email асинхронная, потому что отправитель не ожидает получить ответ сразу же. В программировании “асинхронным” называют код, в котором компоненты посылают друг другу сообщения, не ожидая немедленного ответа.
  • Неблокирующий — термин, чаще всего касающийся ввода-вывода. Он означает, что при вызове “неблокирующего” системного API управление сразу же будет возвращено программе, и она продолжит использовать свой квант процессорного времени. Обычные, простые в использовании системные вызовы блокирующие: они усыпляют вызывающий поток до тех пор, пока данные для ответа не будут готовы.
  • Событийный означает, что компонент программы обрабатывает очередь событий с помощью цикла, а тем временем кто-либо добавляет события в очередь, формируя входные данные компонента, и забирает у него выходные данные.

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

В некоторых случаях это допустимо (например, если мы делаем простое консольное приложение, либо какую-либо утилиту, цель которой — отработать и всё), но в некоторых — нет. К примеру, если мы так застрянем в потоке, в котором обрабатывается UI — наше приложение зависнет. За примерами далеко ходить не нужно — если javascript на сайте сделает while(true); , то перестанут вызываться какие-либо другие обработчики событий страницы и её придётся закрыть. Те же дела, если начать что-нибудь вычислять под Android’ом в обработчиках UI-событий (код которых вызывается в UI-потоке), это приведёт к появлению окна «приложение не отвечает, закрыть?» (подобные окна вызываются по watchdog-таймеру, который сбрасывается, когда выполнение возвращается обратно к системе UI).

Асинхронные операции — операции, при которых мы просим совершить некоторую операцию и можем каким-либо образом отслеживать процесс/результат её выполнения. Когда она будет выполнена — неизвестно, но мы можем продолжить заниматься другими делами.

Блокировки — это проблема для всех программ, требующих конкурентного выполнения, поскольку заблокированные потоки процесса засыпают и не получают процессорное время. Существует два различных, но взаимодополняющих способа устранить блокировки:

  • неблокирующий режим ввода-вывода
  • мультиплексирование с помощью системного API, такого как select либо epoll

Event loop

Бесконечный цикл, который берёт события из очереди и как-то их обрабатывает. А в некоторых промежутках — смотрит, не произошло ли каких-нибудь IO-событий, либо не просрочились ли какие-либо таймеры — тогда добавляет в очередь событие об этом, чтобы потом обработать.

Race condition

Состояние гонки (race condition), также конкуренция — ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода. Своё название ошибка получила от похожей ошибки проектирования электронных схем (см. Гонки сигналов).

Термин состояние гонки относится к инженерному жаргону и появился вследствие неаккуратного дословного перевода английского эквивалента. В более строгой академической среде принято использовать термин неопределённость параллелизма.

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

Вытесняющая и кооперативная многозадачность

Совместная или кооперативная многозадачность

Тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно объявит себя готовой отдать процессорное время другим задачам. Как частный случай такое объявление подразумевается при попытке захвата уже занятого объекта мьютекс (ядро Linux), а также при ожидании поступления следующего сообщения от подсистемы пользовательского интерфейса (Windows версий до 3.x включительно, а также 16-битные приложения в Windows 9x).

Кооперативную многозадачность можно назвать многозадачностью «второй ступени», поскольку она использует более передовые методы, чем простое переключение задач, реализованное многими известными программами (например, DOS Shell из MS-DOS 5.0). При простом переключении активная программа получает все процессорное время, а фоновые приложения полностью замораживаются. При кооперативной многозадачности приложение может захватить фактически столько процессорного времени, сколько оно считает нужным. Все приложения делят процессорное время, периодически передавая управление следующей задаче.

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

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

Вытесняющая, или приоритетная, многозадачность (режим реального времени)

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

  • возможность полной реализации многозадачного ввода-вывода в ядре ОС, когда ожидание завершения ввода-вывода одной программой позволяет процессору тем временем исполнять другую программу;
  • cильное повышение надежности системы в целом, в сочетании с использованием защиты памяти — идеал в виде «ни одна программа пользовательского режима не может нарушить работу ОС в целом» становится достижимым хотя бы теоретически, вне вытесняющей многозадачности он не достижим даже в теории.
  • возможность полного использования многопроцессорных и многоядерных систем.
  • необходимость особой дисциплины при написании кода, особые требования к его реентерабельности, к защите всех разделяемых и глобальных данных объектами типа критических секций и мьютексов.
Читайте также:
Компьютерный словарь как называется программа

Системный вызов

Системный вызов(system call) — обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции.

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

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

Источник: backendinterview.ru

Системные вызовы и прерывания. Многозадачность

В операционных системах поддерживается механизм, позволяющий пользовательским программам обращаться к услугам ядра операционной системы. Этот механизм реализует системные вызовы (system calls), которые представляют собой интерфейс между операционной системой и пользовательской программой.

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

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

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

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

Предпосылками изменения состояния процесса являются события. Один из основных видов событий – прерывания (hardware interrupt), событие, генерируемое внешним (по отношению к процессору) устройством. Прерывания являются основной движущей силой любой операционной системы и возникают в процессе выполнения программы в зависимости от внешних событий или при появлении непредвиденных аварийных ситуаций. Сходство прерываний с процессами состоит в том, что в обоих случаях выполняется специальная подпрограмма, обрабатывающая конкретную ситуацию, после чего продолжается выполнение основной ветви программы. В зависимости от источника различают три класса прерываний: внешние, внутренние, программные.

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

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

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

3. Программные прерывания – это прерывания, которые возникают при выполнении особой команды процессора (например: INT в процессорах Intel Pentium; trap в процессорах Motorola; syscall в процессорах MIPS; Ticc в процессорах SPARC), выполнение которой имитирует прерывание, то есть переход на новую последовательность инструкций.

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

Прерывания обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению разделяемыми ресурсами вычислительной системы: принтером, диском, таймером, процессором и пр. Процедуры, вызываемые по прерываниям, называются обработчиками прерываний или процедурами обслуживания прерываний (Interrupt Service Routine, ISR). Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, программные – процедурами операционной системы, обслуживающими системные вызовы. Работу отдельных обработчиков прерываний координирует диспетчер прерываний – программный модуль операционной системы, который занимается диспетчеризацией обработчиков прерываний и при возникновении прерываний вызывается первым.

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

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

Существует два основных способа, с помощью которых шины выполняют прерывания: векторный (vectored) и опрашиваемый (polled). В обоих случаях процессору предоставляется информация об уровне приоритета прерывания на шине подключения внешних устройств.

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

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

Читайте также:
Программа вангуард не запущена валорант

Обобщенная последовательность действий аппаратных и программных средств по обработке прерываний следующая.

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

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

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

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

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

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

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

Схема обработки прерывания

Обработка прерывания нижним уровнем операционной системы
1. Аппаратное обеспечение сохраняет в стеке счетчик команд и т. п. 2. Аппаратное обеспечение загружает новый счетчик команд из вектора прерываний. 3. Процедура на ассемблере сохраняет регистры. 4. Процедура на ассемблере устанавливает новый стек. 5. Запускается программа обработки прерываний на С, которая считывает и буферизирует входные данные. 6. Планировщик выбирает следующий процесс. 7. Программа на С передает управление процедуре на ассемблере. 8.Процедура на ассемблере запускает новый процесс.

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

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

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

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

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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Найдите 2 минуты и прочитайте про:

Организационные структуры управления: понятие, виды Линии полномочий, которыми связаны субъекты управленческой деятельности, образуют основу управленческой структуры организации.
Алгоритм применения пузыря со льдом I. ПОДГОТОВКА К МАНИПУЛЯЦИИ: 1. Приготовьте оборудование: пузырь для льда.
V 1 Методология научного исследования ТЕСТЫ (250) Дисциплина: Основы научных исследований Для специальностей 080502 «Экономика и управление на предприятии».
Эталон ответа. В пульмонологическом отделении находится пациентка С Задача № 1 В пульмонологическом отделении находится пациентка С.
Общеподготовительные упражнения: комплекс упражнений разминки, комплексы упражнений для развития силовой выносливости Комплекс упражнений разминки Главная задача предлагаемого комплекса разминки состоит в том.

Источник: studopedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru