Читайте также:
|
|
Ядро любой современной ОС представляет собой набор очень большого количества функций, с запутанными взаимосвязями и очень расплывчатыми границами между основными подсистемами. В результате любая модификация организованной таким образом системы дается тяжело и приводит к появлению в новых версиях большого количества ошибок. Кроме того, не во всех инсталляциях нужны все компоненты ядра, а при монолитном его построении удаление ненужных функций затруднено. Недостатки, присущие операционным системам с большим монолитным ядром (а это, в первую очередь, различные версии Unix), породили интерес к системам, построенным на основе микроядра.
Микроядерный подход заключается в том, что базовые функции ядра оформляются в виде отдельной небольшой компоненты, выполняемой в привилегированном режиме, а остальные функции ОС выполняются в пользовательском режиме с использованием примитивов микроядра. Ввиду больших потенциальных преимуществ, которые сулит этот подход, можно предположить, что в ближайшее время большинство новых операционных систем будет строиться на основе микроядра. Наиболее известными реализациями этого подхода являются микроядра Mach и Chorus.
Основной сложностью использования микроядерного подхода на практике является замедление скорости выполнения системных вызовов при передаче сообщений через микроядро по сравнению с классическим подходом.
Микроядро по определению содержит базовые механизмы, имеющиеся внутри любой операционной системы, поэтому знакомство с этими механизмами в чистом виде полезно и для изучения любой конкретной ОС.
Микроядра лицензируются и используются как готовый программный продукт в качестве основы для построения коммерческой сетевой операционной системы. Сейчас имеется несколько коммерческих реализаций операционных систем на основе, например, микроядра Mach (NextStep фирмы Next, Unix BSD, OSF/1 v.1.3).
Контрольные вопросы к теме
1. Дать определение понятия процесса. Зачем оно требуется?
2. Дать определение понятия прерывания. Зачем оно требуется?
3. Дать определение понятия виртуальности. Зачем оно требуется?
4. Дать определение понятия ресурса. Зачем оно требуется?
5. Охарактеризуйте понятие "ядро ОС"?
6. Охарактеризуйте понятие "микроядро ОС"?
Директивы общего назначения
1.1. LIST - Список параметров
Синтаксис: list [<list option>, …,<list option>]
Директива LIST должна быть размещена на отдельной строке. Она изменяет параметры компиляции исходного файла и генерации файла листинга. Один или несколько следующих параметров может быть указан в директиве LIST:
Параметр | Значение по умолчанию | Описание |
b=nnn | Число пробелов при табуляции | |
C=nnn | Число символов в строке | |
f=<format> | INHX8M | Формат выходного HEX файла <format>: |NHX32, INHX8M, |NHX8S |
free | FIXED | Использование свободного формата печати |
fixed | FIXED | Использование фиксированного формата печати |
mm={ON|OFF} | On | Включать карту памяти в файл листинга программы |
n=nnn | Число строк на одной странице | |
p=<type> | НЕТ | Тип микроконтроллера. Например. PIC16C54 |
r=<radix> | hex | Система счисления по умолчанию: hex, dec, oct |
st={ON|OFF } | On | Включать таблицу символов в файл листинга программы |
t={ON|OFF} | Off | Усечение длинных строк |
w={0|1|2} | Установка уровня сообщений. См. ERRORLEVEL | |
x={ON|OFF} | On | Включать полный текст макроса |
Примечание: Все параметры директивы LIST указываются в десятичных числах.
Пример
list p=17c42, f=INHX32, r=DEC
1.2. CONFIG - Установка битов конфигурации микроконтроллера
Синтаксис: _ _config <значение> или _ _config <адрес>,<значение>
или
_ _config <значение текст>& … &<значение текст>
Устанавливает биты конфигурации микроконтроллера в соответствии с числовым полем <значение> или текстовыми полями обозначений параметров. Набор конфигурационных битов индивидуален для каждого типа и подробно описан в технической документации на соответствующий микроконтроллер.
Предварительно, перед директивой CONFIG, надо указать тип микроконтроллера с помощью директивы LIST или PROCESSOR.
Пример
list p=16F84A
____ _ _config H'FFFF'; Конфигурация по умолчанию
или
____ _ _config_XT_OSC&_PWRT_ON&_WDT_OFF
1.3. INCLUDE - Подключение дополнительного исходного файла
Синтаксис: include <<include_file>>
include “<include_file>”
Указанный файл читается как исходный текст программы. Эффект аналогичен копирования полного текста программы указанного файла в место расположения директивы. После окончания компиляции подключенного модуля, компиляция продолжается в исходной программе. Допускается до шести уровней вложения файлов.
<include_file> может быть указан в кавычках или угловых скобках. Если указан полный путь к файлу, то поиск файла будет происходить только в указанной директории. Если путь к подключаемому файлу не указан, то поиск файла будет выполняться в текущей рабочей директории, директории исходного файла и директории выполняемого MPASM.
Пример:
include "с:\sys\sysdefs.inc"; системные параметры
include <regs.h>; список регистров
1.4. EQU - Определение константы ассемблера
Синтаксис
<label> equ <expr>
Присваивает значение <ехрг> константе <label>.
Пример
four equ 4: присваивает значение 4 константе four
1.5. ORG - Установить адрес программы
Синтаксис: <label> org <expr>
Установить адрес начала части программы равным числовому значению <ехрг>. Если указана метка <label> то она будет иметь адрес равный <ехрг>. Если в тексте граммы не встречается директива ORG, то считается, что программа начинается с нулевого адреса. Данная директива требует создания модуля в абсолютном формате и не может быть использована при генерации объектного файла.
Пример
int_l org 0x2 0; Вектор с адресом 20
int_2 org int_l+0xl0; Вектор с адресом 30
1.6. CODE - Начало кода объектного файла в памяти программ
Синтаксис: [<label>] code [<ROM address>]
Используется при генерации объектного файла. Объявляет начало секции кода программы. Если <label> не указана, секции присваивается имя.code. Если не указан адрес секции, то ей будет присвоено текущее значение адреса в памяти программ.
Пример
RESET code H' 01FF'
goto START
1.7. END - Окончание программы
Синтаксис: end
Указывает окончание текста программы.
Пример
list p=17c42
:; текст программы
:
end; конец всех команд
1.8. PAGESEL - Произвести выбор страницы
Синтаксис: pagesel <label>
Используется при генерации объектного файла. Линкер генерирует команды выбора страницы памяти программ в соответствии с указанной меткой <label>. Только одна метка может быть указана в директиве и она должна соответствовать назначению директивы. Не обязательно предварительно объявлять метку.
Для микроконтроллеров с 12-разрядными командами будет изменено значение регистра STATUS. Для микроконтроллеров с 14/16-разрядными будет изменено значение регистра PCLATH командами MOVLW и MOVWF. Если микроконтроллеры содержат только одну страницу памяти программ, то никакой дополнительный код не будет сгенерирован.
1.9. GLOBAL - Внешняя метка
Синтаксис: global <label>[,<label>]
Используется при генерации объектного файла. Объявляет имена меток, которые определены в текущем модуле программы и должны быть доступны другими модулями. Директива GLOBAL должна быть указана после описания соответствующей метки. По крайне мере одна метка должна быть описана в директиве GLOBAL.
Дополнительную информацию смотрите в главе 6.
Пример
udata
Varl res 1
Var2 res 1
global Varl, Var2 code AddThree
global AddThree addlw 3 return
1.10. EXTERN - Определение внешних меток
Синтаксис
extern <label>[,<label>]
Используется при генерации объектного файла. Объявляет имена меток, которые могут использоваться в текущем модуле, но определены как глобальные в других модулях. Директива EXTERN должна быть расположена раньше по тексту программы, чем использование <label>. При использовании директивы EXTERN должна быть указана хотя бы одна метка. Если метка определена в текущем модуле программы, то возникает двойная ошибка метки.
Пример
extern Function
call Function
Дата добавления: 2014-12-19; просмотров: 92 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
КОНЦЕПЦИЯ ПРЕРЫВАНИЯ | | | Перспективы |