
- •Многоуровневая структура компьютера
- •Операционная система
- •Функции ос
- •Архитектуры ядра ос
- •Эволюция операционных систем их классификация и основные идеи
- •Режимы работы процессора и кольца защиты.
- •Особенности создания, компиляции и загрузки модуля ядра
- •Клавиатура
- •Архитектура и характеристики процессора
- •Базовая микроархитектура микропроцессора
- •Программная модель процессора х86
- •Содержимое регистра флагов.
- •Расширение базовой архитектуры микропроцессора
- •Память Иерархическая структура памяти. Ключевой принцип построения памяти эвм и его иерархическая организация.
- •Классификация запоминающих устройств
- •Принцип работы кэш памяти.
- •Факторы влияющие на эффективность кэш-памяти.
- •Способ отображения.
- •Алгоритм замещения информации заполненной кэш-памяти
- •Алгоритм согласования содержимого основной памяти и кэш-памяти.
- •Организация кэш-памяти.
- •Принципы организации оперативной памяти пэвм
- •Организация микросхем памяти
- •Характеристики функционирование и типы динамического озу.
- •Типы памяти
- •13.2. Память ddr
- •13.3. Память rdram (Rambus dram)
- •Устройства ввода/вывода
- •Структура связи между основными устройствами вычислительной системы.
- •1 Прямые межпроцессорные связи.
- •2 Через память
- •3 Межпроцессорные связи через коммуникационные каналы.
- •Контроллер прерываний.
- •Прямой доступ к памяти (dma)
- •Следующий набор регистров общий для всех каналов.
- •Контролер имеет 4 режима работы:
- •Типы передачи пдп:
- •Цикл обмена пдп
- •Видеоадаптер
- •Системный таймер
Особенности создания, компиляции и загрузки модуля ядра
Приложения начинаются с функции main() и заканчивается после выполнения всех команд. Модули исполняются иначе, модуль начинает работу с исполнения функции init_module – это функция запуска модуля, загрузки ее в память, которая подготавливает его для последующих вызовов. После завершения функции init_module модуль ничего не делает, а только ожидает когда ядро обратится к нему. Последняя точка входа в модуль cleanup_module – функция которая загружается перед выгрузкой. Она производит откат тех изменений которые были внесены функцией init_module.
Чтобы модуль быль работоспособен, необходимо его компилировать при помощи компилятора gcc в результате компиляции создается объектный файл с расширением .ko далее имя этого файла задается в качестве параметра команды sudo в командной строке для загрузки модуля insmod ./filename.ko (или для его выгрузки rmmod ./filename.ko).
Компилятор gcc генерирует ассемблерный код, как промежуточный этап компиляции. Увидеть его можно компилируя с ключами –s, -e.
Ассемблерный код для различных типов процессорных архитектур отличается по синтаксису. Существует 2 разновидности синтаксиса ассемблерного кода intel-синтаксис, AT&T –синтаксис
Особенности |
|
Intel |
AT&T |
|
1 другой порядок операндов источника, операндов приемника 2 использование символа % перед именем регистра 3 использование префикса $ перед непосредственным значением, номером прерывания в команде int 4 для указания шестнадцатеричной сс используется OxOA 5 в команде указывается размер операнда (l, b, w) |
mov ax, bx |
movw %bx, %ax |
mov ebx, 0ffh |
movl $OxFF, %ebx |
Int 80h |
Int $0x80 |
mov ecx, [ebx] |
movl(%ebx, %ecx) |
mov ecx, {edi+ebp+3] |
movl 3(%ebx, %ebp), %ecx |
|
movb $0x20, %al – значение movb 0x20, %al – по дадресу movb var, %al – регистр al запишется значение переменной var movb $var, %al – адрес переменной var |
Для вставки ассемблерного кода используется функция asm(char *s) в качестве параметра задается строка. _asm_(char *s).
Asm(“movl %eax, %ebx”);
Asm(“movl %eax, %ebx \n\t” “movb $0x20, %ah \n\t
.
.
.
“);
Чтение системной памяти в CMOS (Comlementary Metal Oxide Semiconductor)
Ограниченная область памяти 128 байт используется для хранения системных настроек. Доступ к ней осуществляется не как к обычной памяти, а по команда int и out через порты ввода вывода. Первых 16 байт от 00 до 00FH занимают часы реального времени (real time clock). Адрес 10h до 2Fh (32 байта) в них находится информация по настройке устройств подключенных к системной шине, по адресу 14h находится байт с информацией об установленном оборудовании. От адреса 30h до 3Fh находится другая специфическая информация BIOS. 40h до 7Fh – расширенная информация о конфигурации системы.
Чтобы прочитать из системной памяти необходимо послать в порт с номером 70h адрес байта, который хотим прочитать, командой чтения из порта с номером 71h можно получить содержимое этого байта.
Чтобы прочитать часы реального времени можно и из файла соответствующего proc/driver/rts на для этого необходимо его открыть с функцией open и пока не конец файла считать информацию cget() и не забыть закрыть этот файл.