10.1.1 Отличия Linux и uClinux

Предыдущая  Содержание  Следующая V*D*V

На обычной системе Linux пользовательский процесс может быть определён как исполняющаяся программа. Каждая программа представляет собой исполняемый файл, хранящийся в файловой системе; он или автономен (слинкован статически), или динамически слинкован с общими библиотеками. Виртуальная память позволяет выделять для каждого процесса отдельное пространство памяти. Однако на uClinux, поскольку MMU нет, будут иметься сомнения, есть ли в uClinux отдельные программы, или это будет похоже на традиционную ОС с линейной памятью, где ОС и приложения формируют один единственный образ. В этом разделе мы подробно рассмотрим различия между uClinux и Linux.

 

Обработка адресного пространства и защита памяти

 

В стандартном Linux приложения представляют собой пользовательские процессы, которые выполняются в собственном адресном пространстве, называемом адресным пространством процесса. MMU обеспечивает защиту памяти и, следовательно, ни одно из приложений не может повредить адресное пространство любого другого приложения. MMU также обеспечивает виртуальную память (VM) и каждое приложение способно адресовать максимально доступный предел виртуальной памяти (* Ограничением виртуальной памяти на 32-х разрядных (x86) машинах является 4 Гб.) независимо от ограничения, налагаемого размером системной физической памяти.

С другой стороны, в uClinux, не имеющем VM, приложения не могут работать в индивидуальном виртуальном адресном пространстве процесса. Поэтому распределители адресных пространств приложений совместно используют доступную память. Отсутствие MMU означает, что нет способа реализации защиты памяти и, следовательно, все процессы вместе используют единое глобальное пространство памяти. Поскольку все процессы используют совместно одно пространство памяти, любой процесс может повредить данные другого процесса. Это главный недостаток с которым придётся жить разработчикам uClinux.

 

Пользовательский режим и режим ядра

 

Защита памяти в пользовательском режиме/режиме ядра вместе с рабочими режимами процессора в системе Linux осуществляется с помощью эффективного использования MMU. Из-за отсутствия MMU uClinux не имеет защиты памяти и разделения ядра и приложений пользовательского пространства. Это означает, что любое приложение пользовательского пространства может повредить память ядра или даже вызвать поломку системы.

 

Вызов страниц по требованию и подкачка

 

В имеющих MMU процессорах можно запрограммировать обработчики ошибок отсутствия страниц в памяти. Linux использует обработчик ошибки отсутствия страницы в памяти (* На самом деле большинство особенностей виртуальной памяти используемого в  Linux страничного кэша, COW (копирование при записи) и своп имеют части, реализованные в обработчике ошибки отсутствия страницы в памяти.) для реализации вызова страниц по требованию и своппинга. Поскольку обработчики  ошибки отсутствия страницы в памяти в не имеющих MMU процессорах не могут быть установлены, это означает, что не может быть вызова страниц по требованию и подкачки. Хотя uClinux имеет общее пространство памяти для ядра и приложений, он позволяет образу приложения отличаться от ядра. Таким образом, приложение и ядро могут быть сохранены как отдельные программы в файловой системе и могут быть загружены отдельно. uClinux достигает этого искусной настройкой набора инструментов для сборки программ (компиляторов, компоновщиков и так далее) и загрузчиков, которые необходимы для выполнения программы. uClinux имеет свой собственный набор программ для разработки ПО. На самом деле, большая часть работы по портированию uClinux на новую платформу состоит в том, чтобы получить рабочий набор инструментов для сборки программ. После того, как набор инструментов стал доступен, получение работающих на uClinux приложений становится удивительно простым. Обсуждение изменений, необходимых для портирования набора инструментов, выходит за рамки данной главы; вместо этого данная глава посвящена тому, как uClinux стремится поддерживать для разработчиков то же окружение, что и обычный Linux.

 

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

Оставшаяся часть этой главе разделена на две части.

 

В первой части (Разделы с 10.2 по 10.6) подробно обсуждаются концепции, лежащие в основе uClinux, очертания строительных блоков, а также описываются изменения, внесённые в Linux, чтобы иметь возможность работать на системе без MMU.

Вторая часть является подробным руководством по портированию приложений на uClinux. Если вы заинтересованы только в портировании приложений и не интересуетесь внутренностями системы, то можете пропустить эти разделы и перейти к Разделу 10.7.

 

Предыдущая  Содержание  Следующая