Как стать автором
Обновить

Комментарии 9

Интересная у вас статья. Спасибо. Жду продолжение, надеюсь, будет не менее интересным.

Спасибо за отзыв, скоро выйдет перевод второй части.

Как скоро?)
Билл Кеннеди ГОнит лучше чем кто-либо. Очень нравится его курс ultimate go (всем бы языкам такой...) и как он бомбит у себя в блоге иногда ) Спасибо за перевод
*Вильям
… что в короткой форме является Биллом)

Системные вызовы (system calls) в операционной системе - это интерфейс, предоставляемый операционной системой для взаимодействия прикладных программ с ядром операционной системы. Они позволяют приложениям выполнять привилегированные операции, такие как чтение/запись файлов, создание/закрытие процессов, управление сетевыми соединениями, выделение памяти и многое другое.

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

Примеры системных вызовов в разных операционных системах могут включать:

  • openreadwriteclose для работы с файлами и сокетами.

  • forkexecexit для создания и управления процессами.

  • socketbindlistenaccept для работы с сетевыми соединениями.

  • mallocfree для выделения и освобождения памяти.

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

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

Ожидание аппаратного обеспечения (hardware waiting) - это ситуация, когда программа приостанавливает своё выполнение, ожидая завершения операций, связанных с аппаратным обеспечением, такими как чтение/запись данных на диск, передача данных через сеть, получение сигналов от устройств ввода-вывода и т.д.

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

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

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

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

Когерентность кэша (cache coherence) и инвалидация кэша (cache invalidation) - это два связанных, но различных понятия в контексте кэшей.

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

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории