Подтвердить что ты не робот

Как скомпилированная программа взаимодействует с ОС?

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

PS: Я только начал программирование на С++, и я пытаюсь понять, как работают cin и cout

4b9b3361

Ответ 1

Это очень хороший вопрос (лучше, чем вы знаете), и есть чему поучиться. LOT.

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

   Software
       .
      /|\    
       |   communicates with
      \|/
       '
Operating System
       .
      /|\    
       |   communicates with
      \|/
       '
   Hardware

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

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


Теперь я бы остановился, но вы также сказали:

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

Это сложно, но просто, как только вы понимаете некоторые основы.

Во-первых, весь код - это всего лишь машинный код, запущенный на CPU. Нет кода выше или ниже, чем у другого кода. Итак, вопрос в том, как ОС может быть под контролем?

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

Примеры прерываний включают клавиатуру, мышь и, самое главное, часы.

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

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

Ответ 2

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

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

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