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

Обновлено: 21.11.2024

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

Относится к: Windows 10 — все выпуски
Исходный номер базы знаний: 815065

Обзор

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

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

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

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

Подробнее

DLL — это библиотека, содержащая код и данные, которые могут использоваться более чем одной программой одновременно. Например, в операционных системах Windows библиотека DLL Comdlg32 выполняет общие функции, связанные с диалоговыми окнами. Каждая программа может использовать функциональные возможности, содержащиеся в этой библиотеке DLL, для реализации диалогового окна «Открыть». Это способствует повторному использованию кода и эффективному использованию памяти.

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

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

В следующем списке описаны некоторые файлы, реализованные в виде библиотек DLL в операционных системах Windows:

Файлы элементов управления ActiveX (.ocx)

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

Файлы панели управления (.cpl)

Примером файла .cpl является элемент, расположенный на панели управления. Каждый элемент представляет собой специализированную библиотеку DLL.

Файлы драйверов устройств (.drv)

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

Преимущества DLL

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

Использует меньше ресурсов

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

Поддерживает модульную архитектуру

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

Упрощает развертывание и установку

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

DLL-зависимости

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

  • Зависимая библиотека DLL обновляется до новой версии.
  • Исправлена ​​зависимая библиотека DLL.
  • Зависимая библиотека DLL перезаписывается более ранней версией.
  • Зависимая DLL удаляется с компьютера.

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

В следующем списке описаны изменения, которые были введены в Windows 2000 и более поздних операционных системах Windows, чтобы минимизировать проблемы с зависимостями:

Защита файлов Windows

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

Частные библиотеки DLL позволяют изолировать программу от изменений, внесенных в общие библиотеки DLL. Частные библиотеки DLL используют информацию о версии или пустой файл .local для принудительного применения версии библиотеки DLL, используемой программой. Чтобы использовать частные библиотеки DLL, найдите свои библиотеки DLL в корневой папке программы. Затем для новых программ добавьте информацию о версии в DLL. Для старых программ используйте пустой файл .local. Каждый метод указывает операционной системе использовать частные библиотеки DLL, расположенные в корневой папке программы.

Инструменты устранения неполадок с DLL

Для устранения неполадок с DLL доступно несколько инструментов. Следующие инструменты являются одними из этих инструментов.

Обходчик зависимостей

Инструмент Dependency Walker может рекурсивно сканировать все зависимые библиотеки DLL, используемые программой. Когда вы открываете программу в Dependency Walker, Dependency Walker выполняет следующие проверки:

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

С помощью Dependency Walker вы можете документировать все библиотеки DLL, используемые программой. Это может помочь предотвратить и исправить проблемы с DLL, которые могут возникнуть в будущем. Dependency Walker находится в следующем каталоге при установке Visual Studio 6.0:

диск\Program Files\Microsoft Visual Studio\Common\Tools

Универсальное средство решения проблем DLL

Универсальный инструмент решения проблем DLL (DUPS) используется для аудита, сравнения, документирования и отображения информации о DLL. В следующем списке описаны утилиты, входящие в состав инструмента DUPS:

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

Эта утилита сравнивает библиотеки DLL, перечисленные в двух текстовых файлах, и создает третий текстовый файл, содержащий различия.

Эта утилита загружает текстовые файлы, созданные с помощью утилит Dlister.exe и Dcomp.exe, в базу данных dllHell.

Эта утилита представляет собой версию утилиты Dtxt2DB.exe с графическим интерфейсом пользователя (GUI).

База данных справки DLL

База данных DLL Help помогает найти определенные версии DLL, которые устанавливаются программными продуктами Microsoft.

Разработка DLL

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

Типы DLL

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

Динамическое связывание во время загрузки

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

Динамическое связывание во время выполнения

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

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

Если важна начальная производительность приложения при запуске, следует использовать динамическую компоновку во время выполнения.

При динамическом связывании во время загрузки экспортированные функции DLL аналогичны локальным функциям. Это упрощает вызов этих функций.

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

Точка входа в DLL

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

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

Функция точки входа должна выполнять только простые задачи инициализации и не должна вызывать какие-либо другие функции загрузки или завершения DLL. Например, в функции точки входа не следует прямо или косвенно вызывать функцию LoadLibrary или функцию LoadLibraryEx. Кроме того, не следует вызывать функцию FreeLibrary, когда процесс завершается.

В многопоточных приложениях убедитесь, что доступ к глобальным данным DLL синхронизирован (потокобезопасный), чтобы избежать возможного повреждения данных. Для этого используйте TLS для предоставления уникальных данных для каждого потока.

Экспорт функций DLL

Чтобы экспортировать функции DLL, можно либо добавить ключевое слово функции к экспортируемым функциям DLL, либо создать файл определения модуля (.def), в котором перечислены экспортированные функции DLL.

Чтобы использовать ключевое слово функции, вы должны объявить каждую функцию, которую хотите экспортировать, следующим ключевым словом:
__declspec(dllexport)

Чтобы использовать экспортированные функции DLL в приложении, необходимо объявить каждую функцию, которую вы хотите импортировать, с помощью следующего ключевого слова: __declspec(dllimport)

Как правило, вы должны использовать один заголовочный файл с оператором определения и оператором ifdef для разделения оператора экспорта и оператора импорта.

Вы также можете использовать файл определения модуля для объявления экспортируемых функций DLL. Когда вы используете файл определения модуля, вам не нужно добавлять ключевое слово function к экспортируемым функциям DLL. В файле определения модуля вы объявляете инструкцию LIBRARY и инструкцию EXPORTS для DLL. Следующий код является примером файла определения.

Пример библиотеки DLL и приложения

В Visual C++ 6.0 можно создать библиотеку DLL, выбрав тип проекта Win32 Dynamic-Link Library или тип проекта MFC AppWizard (dll).

Следующий код является примером библиотеки DLL, созданной в Visual C++ с использованием типа проекта Win32 Dynamic-Link Library.

Следующий код является примером проекта приложения Win32, который вызывает экспортированную функцию DLL в библиотеке DLL SampleDLL.

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

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

При компиляции и компоновке приложения SampleDLL операционная система Windows ищет DLL-библиотеку SampleDLL в следующих местах в указанном порядке:

Папка приложения

Текущая папка

Системная папка Windows

Функция GetSystemDirectory возвращает путь к системной папке Windows.

Папка Windows

Функция GetWindowsDirectory возвращает путь к папке Windows.

Файл сборки содержит манифест сборки, метаданные типов, код MSIL и другие ресурсы. Манифест сборки содержит метаданные сборки, содержащие всю информацию, необходимую для того, чтобы сборка имела самоописание. В манифест сборки включается следующая информация:

  • Название сборки
  • Информация о версии
  • Информация о культуре
  • Информация о сильном имени
  • Список файлов
  • Введите справочную информацию.
  • Информация о ссылочной и зависимой сборке

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

В следующем списке описаны некоторые функции сборок по сравнению с функциями библиотек DLL Win32:

При создании сборки вся информация, необходимая среде CLR для запуска сборки, содержится в манифесте сборки. Манифест сборки содержит список зависимых сборок. Таким образом, CLR может поддерживать согласованный набор сборок, используемых в приложении.В библиотеках DLL Win32 невозможно поддерживать согласованность между набором библиотек DLL, используемых в приложении, при использовании общих библиотек DLL.

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

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

Самозащита и изоляция

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

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

Раздел 404 Закона Сарбейнса-Оксли (SOX) требует, чтобы все публичные компании установили внутренний контроль и процедуры.

Закон о защите конфиденциальности детей в Интернете от 1998 года (COPPA) – это федеральный закон, который налагает особые требования на операторов доменов .

План North American Electric Reliability Corporation по защите критически важной инфраструктуры (NERC CIP) представляет собой набор стандартов.

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

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

Метаморфное и полиморфное вредоносное ПО – это два типа вредоносных программ (вредоносных программ), код которых может изменяться по мере их распространения.

Медицинская транскрипция (МТ) – это ручная обработка голосовых сообщений, продиктованных врачами и другими медицинскими работниками.

Электронное отделение интенсивной терапии (eICU) — это форма или модель телемедицины, в которой используются самые современные технологии.

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

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

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

Синхронная репликация — это процесс копирования данных по сети хранения, локальной или глобальной сети, поэтому .

API облачного хранилища — это интерфейс прикладного программирования, который соединяет локальное приложение с облачным хранилищем.

Интерфейс управления облачными данными (CDMI) – это международный стандарт, определяющий функциональный интерфейс, используемый приложениями.

Износ флэш-памяти NAND — это пробой оксидного слоя внутри транзисторов с плавающим затвором флэш-памяти NAND.

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

Откройте "Программы по умолчанию", нажав кнопку "Пуск" и выбрав "Программы по умолчанию".

В программах по умолчанию вы можете:

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

Если программа не отображается в списке, вы можете сделать ее программой по умолчанию, используя Set Associations.

Откройте "Программы по умолчанию", нажав кнопку "Пуск" и выбрав "Программы по умолчанию".

Нажмите "Связать тип файла или протокол с программой".

Нажмите на тип файла или протокол, для которого программа должна действовать по умолчанию.

Нажмите "Изменить программу".

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

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

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

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

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

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

Установка доступа к программам и параметров компьютера по умолчанию (доступно в Windows 7) — это инструмент для установки программ по умолчанию для таких действий, как просмотр веб-страниц и отправка электронной почты для всех, кто использует компьютер.

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

Наши редакторы рассмотрят то, что вы отправили, и решат, нужно ли пересматривать статью.

операционная система (ОС), программа, которая управляет ресурсами компьютера, особенно распределением этих ресурсов среди других программ. Типичные ресурсы включают центральный процессор (ЦП), память компьютера, хранилище файлов, устройства ввода-вывода (I/O) и сетевые соединения. Задачи управления включают планирование использования ресурсов, чтобы избежать конфликтов и помех между программами. В отличие от большинства программ, которые выполняют задачу и завершают работу, операционная система работает бесконечно и завершает работу только при выключении компьютера.

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

Компьютеры размещают веб-сайты, состоящие из HTML, и отправляют текстовые сообщения так же просто, как. РЖУ НЕ МОГУ. Взломайте этот тест, и пусть какая-нибудь технология подсчитает ваш результат и раскроет вам его содержание.

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

Компьютеры приобрели более мощные операционные системы в 1960-х годах с появлением разделения времени, которое требовало системы для управления несколькими пользователями, совместно использующими процессорное время и терминалы. Двумя ранними системами разделения времени были CTSS (совместимая система разделения времени), разработанная в Массачусетском технологическом институте, и базовая система Дартмутского колледжа, разработанная в Дартмутском колледже. Другие многопрограммные системы включали Atlas в Манчестерском университете, Англия, и IBM OS/360, вероятно, самый сложный программный пакет 1960-х годов.После 1972 года система Multics для компьютера General Electric Co. GE 645 (а позже и для компьютеров Honeywell Inc.) стала самой сложной системой с большинством возможностей мультипрограммирования и разделения времени, которые позже стали стандартными.

У мини-компьютеров 1970-х годов был ограниченный объем памяти и требовались операционные системы меньшего размера. Самой важной операционной системой того периода была UNIX, разработанная AT&T для больших миникомпьютеров как более простая альтернатива Multics. Он стал широко использоваться в 1980-х годах, отчасти потому, что он был бесплатным для университетов, а отчасти потому, что он был разработан с набором инструментов, которые были мощными в руках опытных программистов. Совсем недавно Linux, версия UNIX с открытым исходным кодом, разработанная частично группой под руководством финского студента информатики Линуса Торвальдса и частично группой под руководством американского программиста Ричарда Столлмана, стала популярной как на персональных компьютерах, так и на большие компьютеры.

Помимо таких систем общего назначения, на небольших компьютерах работают специальные операционные системы, управляющие сборочными линиями, самолетами и даже бытовой техникой. Это системы реального времени, предназначенные для обеспечения быстрого реагирования на датчики и использования их входных данных для управления механизмами. Операционные системы также были разработаны для мобильных устройств, таких как смартфоны и планшеты. iOS от Apple Inc., работающая на iPhone и iPad, и Android от Google Inc. — две известные мобильные операционные системы.

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

Современные операционные системы для персональных компьютеров обычно имеют графический интерфейс пользователя (GUI). Графический пользовательский интерфейс может быть неотъемлемой частью системы, как в более старых версиях Mac OS от Apple и ОС Windows от Microsoft Corporation; в других случаях это набор программ, которые зависят от базовой системы, как в системе X Window для UNIX и Mac OS X от Apple.

Операционные системы также предоставляют сетевые службы и возможности обмена файлами — даже возможность совместного использования ресурсов между системами разных типов, такими как Windows и UNIX. Такое совместное использование стало возможным благодаря внедрению сетевых протоколов (правил связи), таких как TCP/IP в Интернете.

Читайте также: