Обоснование выбора операционной системы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обоснование выбора операционной системы



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

Строго говоря, Linux - это только ядро ОС, находящее в свободном публичном доступе. Системные библиотеки и утилиты разрабатываются сообществом GNU (http://www.gnu.org), поэтому иногда название ОС пишется как GNU/Linux - с целью подчеркнуть заслуги GNU. Уже в 1993 г. Linux можно было полноценно использовать для решения многих задач!

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

Первоначально портирование Linux на платформы, отличные от i386, не предполагалось, однако через три года после начала разработки ОС появился порт Linux на аппаратную архитектуру DEC Alpha (эту работу спонсировала компания Digital Equipment). На сегодняшний день Linux поддерживает целый ряд 32- и 64-разрядных архитектур и процессоров: Sun SPARC и UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64 и CRIS. Такое разнообразие архитектур не ведет к распылению усилий разработчиков, а, наоборот, заставляет строить ядро системы с высоким уровнем абстракций и модульности, повышать качество его кода. Множество поддерживаемых архитектур подтверждает и масштабируемость Linux - от мобильных телефонов и КПК до мейнфреймов./ MIPS является портом широко распространенного UNIX клона Linux для архитектуры MIPS. Linux / MIPS может работает с большим количеством технически весьма различных систем, начиная от небольших встроенных систем до больших настольных машин и серверов.

Благодаря общему происхождению и одинаковому API, современные ядра Unix имеют много общих черт. За некоторым исключением это монолитные статические бинарные файлы. Они существуют в виде больших исполняемых образов, которые выполняются один раз и используют одну копию адресного пространства. Для работы Unix обычно требуется система с контроллером управления страничной адресацией памяти (MMU, Memory Management Unit); эта система позволяет обеспечить защиту памяти в системе и предоставить каждому процессу виртуальное адресное пространство. Ядро Linux не базируется на какой-то версии Unix, оно является монолитным, однако поддерживает некоторые свойства микроядерной архитектуры. Отличия Linux от других разновидностей Unix:

Поддержка динамически загружаемых модулей ядра. Хотя ядро Linux является монолитным оно дополнительно поддерживает динамическую загрузку и выгрузку кода по мере необходимости. Эта возможность впервые появилась в версии 0.99 благодаря Питеру Мак-Дональду. Часто в виде модулей поставляются драйверы устройств.

Ядро Linux поддерживает симметричную многопроцессорную обработку (SMP). Большинство коммерческих вариантов Unix поддерживают SMP, но большинство традиционных реализаций этой поддержки не имеет.

Ядро Linux является преемптивным. Ядро в состоянии вытеснить выполняющееся задание, даже если оно работает в режиме ядра. Среди коммерческих реализаций Unix преемптивное ядро имеют только Solaris, IRIX, и сам Unix.

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

В ядре Linux отсутствуют некоторые функции Unix, которые считаются плохо реализованными (например, STREAMS).

Ядро Linux создается с использованием компилятора GNU C. Причем разработчики ядра используют расширение C ISO C99, поддерживающее функции с подстановкой тела (объявляются с помощью ключевых слов static inline), ассемблерные вставки (используется директива компилятора asm()), аннотацию ветвлений (макросы likely() и unlikely() - более вероятное и менее вероятное события; используются для оптимизации кода) и другие возможности.

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

Разработка

 

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

· Ядро не имеет доступа к стандартным библиотекам языка C. Причина этого - скорость выполнения и объем кода. Даже самая необходимая часть библиотеки - очень большая и неэффективная для ядра. Часть функций, однако, реализованы в ядре. Например, обычные функции работы со строками описаны в файле lib/string.c.

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

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

·   Фиксированный стек. Стеком называют область адресного пространства, в которой выделяются локальные переменные. Локальные переменные - это все переменные, объявленные внутри левой открывающей фигурной скобки тела функции (или любой другой левой фигурной скобки) и не имеющие ключевого слова static. Стек в режиме ядра ни большой, ни изменяющийся. Поэтому в коде ядра не рекомендуется использоватьрекурсию. Обычно стек равен двум страницам памяти, что соответствует 8 Кбайт для 32-разрядных систем и 16 Кбайт для 64 -разрядных.

·   Переносимость. Платформо-независимый код, написанный на языке C, должен компилироваться без ошибок на максимально возможном количестве систем.

Perl -эмулятор

Отличительными особенностями MIPS 64 реализации фирмы KEDAH являются:

 

· Отсутствие операций с плавающей точкой (программная эмуляция FPU математического сопроцессора).

·   TLB - 32 входное

·   Раздельный кэш данных и кэш команд - по 32 КБайт

·   Шина адреса - 32-разрядная

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

В силу особенностей реализации процессора фирмой KEDAH, в качестве средства кросс-отладки операционной системы использовался собственный эмулятор kem-2.0.2, написанный на языке Perl.

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

· просмотра памяти

·   установки точек остановок в ходе отладки

·   пошагового выполнения команд

·   просмотра содержимого регистров процессора в интерактивном режиме.

 

Вывод в порт

Следующим шагом отладки был запуск программы «Hello, world!». Для получения сообщений в ходе отладки ядра в драйвер консоли был включен модуль printf для вывода сообщений в последовательный порт. Результатом послужил успешный запуск на эмуляторе kem-2.0.2 программы «Hello, World!»

Сборка ядра

Процесс сборки ядра состоял из следующих этапов:

1) Приобретение исходников ядра.

Исходный код ядра версии 2.6.28 с http://www.kernel.org/pub. Данная версия ядра поддерживает интересующую нас архитектуру MIPS64.

После получения исходных кодов ядра в архиве linux-2.6.28.tar.bz2, его нужно распаковать (обычно распаковывают в каталог /usr/src/) с помощью утилиты tar от имени суперпользователя.

2) Подготовка каталогов с исходниками ядра.

Дерево исходных кодов ядра содержит подкаталоги, описание которых приведено в Табл. 1. В корне дерева также содержится ряд файлов: COPYING - лицензия, CREDITS - список основных разработчиков, MAINTAINERS - список разработчиков, занимающихся поддержкой подсистем и драйверов ядра, Makefile - основной сборочный файл ядра.


Таблица 1

Каталог Описание
Arch  Специфичный для аппаратной платформы код
block Подсистема блочного ввода/вывода
crypto Криптографический API
Documentation Документация исходного кода
drivers Драйверы устройств
fs Подсистема VFS и отдельные файловые системы
include Заголовочные файлы ядра
init Загрузка и инициализация ядра
ipc  Код межпроцессорного взаимодействия
kernel Основные подсистемы (планировщик и др.)
lib Вспомогательные подпрограммы
mm Подсистема управления памятью и поддержка виртуальной памяти
net Сетевая подсистема
scripts Сценарии компиляции кода
security Модуль безопасности Linux
sound Звуковая подсистема
usr Начальный код пространства пользователя

 

3) Конфигурирование ядра (config.mips64r2):

4) Сборка ядра осуществляется командой make. Ускорить процесс можно, запустив команду make -j2. Параметр -j2 означает запуск двух потоков выполнения (обычно используют два потока на процессор):

# make -j 2 ARCH=mips CROSS_COMPILE=mipsel-linux- menuconfig

Сборка ядра:

# make -j 2 ARCH=mips CROSS_COMPILE=mipsel-linux- vmlinux.bin

5) Компиляция ядра и установка модулей:

Также загружен патч с кросс-компилятором MIPS (http://linux-mips.org, mipsel-sdelinux-v6.05.00-4.i386.rpm)

Получение патча. Все изменения исходного кода ядра распространяются в виде заплат (patch). Заплаты - это результат вывода утилиты diff в формате, который подается на вход утилиты patch.

# diff -uprN -X linux-2.6.28.orig/Documentation/dontdiff linux-2.6.28.orig linux-2.6.28.dev > linux-2.6.28-kem-mips64r2.le.001.patch

6) Перемещение ядра

Перенос ядра в рабочую директорию:

# mv ~/vmlinux.bin./vmlinux.kem.mips64.r2.le.001.bin

Доступ к серверу:

# ssh alexey@verilog.ru (xxxxxx)

# ssh server (xxxxxx)

# cd project ng

7) Копирование ядра на удаленный сервер с эмулятором kem:

# scp arch/mips/boot/vmlinux.bin renatn@verilog.ru:

8) Запуск эмулятора

# perl../kem-2.0.2.pl -i vmlinux.kem.mips64.r2.le.001.bin -l 0xffffffff80100000

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

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

Также бы отключен режим предварительного выбора команд (Prefetch).

Анализ результатов

 

) Поставлена задача портирования операционной системы Linux на процессор MIPS64 Release 2 реализации фирмы KEDAH.

2) Рассмотрены различные походы к решению данной задачи.

)   Изучены особенности загрузки операционной системы Linux, эмулятор kem-2.0.2 фирмы KEDAH.

)   Проведена настройка конфигурации операционной системы Linux для работы с эмулятором kem-2.0.2 фирмы KEDAH.

)   Проведены отладка конфигурации операционной системы.

)   Проведены тестовые запуски операционной системы и анализ возникших ошибок.

)   Проведена успешная загрузка операционной системы Linux на эмуляторе kem-2.0.2 фирмы KEDAH.

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

В процессе конфигурирования и компиляции дистрибутива ОС Linux на Perl-эмуляторе kem-2.0.2 процессора, аналогичного MIPS64 Release 2, был получен устойчивый порт ОС Linux на данную платформу.

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


Экологическая часть



Поделиться:


Последнее изменение этой страницы: 2020-03-27; просмотров: 185; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.65.65 (0.034 с.)