- •Классификация эвм, краткие характеристики суперЭвм, мейнфреймов и мини-эвм
- •Настольная вычислительная система.
- •Классификация процессоров.
- •Регистровая модель процессора x86.
- •Режимы работы процессора 80386.
- •1.Реальный режим
- •2. Защищенный режим
- •Процессор х86: непосредственная и регистровая адресация.
- •Процессор х86: прямая адресация и прямая со сдвигом.
- •Процессор х86: косвенная адресация и косвенная со сдвигом.
- •Процессор х86: регистровая адресация и регистровая с масштабированием.
- •Адресация с масштабированием
- •Размещение в памяти многомерных статических массивов и доступ к их элементам.
- •Размещение в памяти многомерных динамических массивов и доступ к их элементам.
- •Формирование исполнительного адреса из трех и четырех составляющих.
- •Процессор х86: инструкции копирования данных.
- •Процессор х86: инструкции ввода-вывода.
- •Представление целых чисел: прямой код, дополнительный код, bsd.
- •Процессор х86: инструкции сложения, сложения с переносом и сложение чисел в формате bcd.
- •Процессор х86: инструкции вычитания, вычитания с заемом и вычитание чисел в формате bcd.
- •Процессор х86: инструкции умножения.
- •Процессор х86: инструкция деления и операции расширения знакового бита.
- •Процессор х86: поразрядные логические инструкции, использование масок.
- •Процессор х86: инструкции сдвига. Умножение и деление на константы.
- •Процессор х86: инструкции цикла. Ожидание готовности пу с тайм-аутом.
- •Процессор х86: безусловный переход и виды меток.
- •Процессор х86: вызов процедуры; рамка стека функции в с.
- •Процессор х86: инструкции условного перехода.
- •Процессор х86: строковый примитив копирования данных.
- •Процессор х86: строковые примитивы сравнения данных, сканирования данных и заполнения данных.
- •Сегменты реального и защищенного режима. Глобальная и локальная таблицы дескрипторов.
- •Селектор сегмента. Механизм получения линейного адреса в защищенном режиме процессора x86.
- •Механизм преобразования линейного адреса в физический в процессоре x86.
- •Преимущества виртуального отображения страниц и адресное пространство процесса.
- •Формат дескриптора сегмента в процессорах x86. Прикладные сегменты.
- •Формат вентиля вызова и исключения. Область применения вентилей вызова.
- •Основные исключения защиты; обработка исключения отсутствие страницы в памяти.
- •Уровни привилегий и кольца защиты защищенного режима.
- •Аппаратная поддержка многозадачности, формат сегмента состояния задачи - tss.
- •Карта ввода/вывода. Прямой доступ к портам ввода/вывода в Windows и Linux.
- •Методы управления пу
- •Использование буферов при проведении обменов
- •Принципы, заложенные в подсистему управления вводом-выводом в ос unix
- •Система управления данными (файловая система)
- •Логическая организация файлов
- •1. Последовательная организация.
- •2. Библиотечная организация.
- •Физическая организация файлов
- •1. Распределение при помощи цепочек блоков.
- •2. Распределение при помощи цепочек индексов
- •Дескриптор файла (дф)
- •Матрица управления доступом (МтУд)
- •Управление доступом в зависимости от класса пользователей
- •Копирование и восстановление информации
- •Свопинг и пейджинг
- •2. Стратегии подкачки страниц
- •3. Стратегии размещения
Процессор х86: строковый примитив копирования данных.
Инструкции для работы с участками памяти или строковые примитивы позволяют за один прием без изменения значения программного счетчика выполнить копирование участка памяти, инициализацию участка памяти (заполнение всех ячеек определенным значением), сравнение двух участков памяти. Участки памяти могут рассматриваться как последовательности байт(b), слов(w) или двойных слов(d). Данные инструкции значительно превосходят по эффективности участки кода на языках высокого уровня, предназначенные для выполнения аналогичных задач. Это объясняется тем, что в строковых примитивах адреса источника и приемника модифицируются аппаратно параллельно с обработкой данных, в то время как на языках высокого уровня для этого используются дополнительные машинные инструкции, выполняемые последовательно с обработкой данных. Кроме того, в строковых примитивах осуществляется операция копирования из памяти в память без загрузки и выгрузки данных в один из регистров, как это происходит в программах на языках высокого уровня.
Инструкция копирования строк имеет мнемокод movsb/movsw/movsd. Окончание инструкции b, w или d указывает на размер обрабатываемых данных: байт, слово или двойное слово соответственно. Эти инструкции безоперандные, т.е. приемник и источник не указываются явно за мнемокодом инструкции. В этом нет необходимости, поскольку они всегда адресуются через указательные регистры ESI (источник) и EDI (приемник). Эти инструкции также обычно используются с префиксом повторения REP; при наличии данного префикса количество повторов определяется содержимым регистра-счетчика ECX. После каждого повтора содержимое регистров ESI и EDI изменяется на 1 при копировании байт, на 2 при копировании слов и на 4 при копировании двойных слов. Направление копирования, т.е. увеличение или уменьшение содержимого регистров ESI и EDI определяется состоянием флага направления FD. Если флаг FD сброшен, то копирование осуществляется от младших адресов к старшим; если установлен, то от старших адресов к младшим. Флаг FD можно сбросить инструкцией CLD и установить инструкцией STD.
Процессор х86: строковые примитивы сравнения данных, сканирования данных и заполнения данных.
Инструкции для работы с участками памяти или строковые примитивы позволяют за один прием без изменения значения программного счетчика выполнить копирование участка памяти, инициализацию участка памяти (заполнение всех ячеек определенным значением), сравнение двух участков памяти. Участки памяти могут рассматриваться как последовательности байт(b), слов(w) или двойных слов(d). Данные инструкции значительно превосходят по эффективности участки кода на языках высокого уровня, предназначенные для выполнения аналогичных задач. Это объясняется тем, что в строковых примитивах адреса источника и приемника модифицируются аппаратно параллельно с обработкой данных, в то время как на языках высокого уровня для этого используются дополнительные машинные инструкции, выполняемые последовательно с обработкой данных. Кроме того, в строковых примитивах осуществляется операция копирования из памяти в память без загрузки и выгрузки данных в один из регистров, как это происходит в программах на языках высокого уровня.
Инструкция сравнения строк имеет мнемокод cmpsb/cmpsw/cmpsd и использует регистры ESI, EDI и флаг направления FD, также как и инструкция копирования строк. Но данная инструкция осуществляет не копирование данных, а вычитает из ячейки памяти, указываемой через ESI, содержимое ячейки памяти, указываемой через EDI при этом устанавливается или сбрасывается флаг нуля FZ. Инструкция сравнения используется совместно с префиксами REPNZ (повторять пока не 0) и REPZ (повторять пока 0), позволяющими найти первое совпадение или несовпадение в двух областях памяти.
Инструкция сканирования строки имеет мнемокод scasb/scasw/scasd и сравнивает содержимое регистра аккумулятора AL/AX/EAX с элементами массива, адрес которого помещен в регистр EDI. Сканирование, также как и сравнение строк, осуществляется совместно с префиксами REPNZ и REPZ и позволяет найти позицию символа в строке или позицию первого символа, отличающегося от заданного.
Инструкция сохранения строки имеет мнемокод stosb/stosw/stosd и позволяет инициализировать массив, адресуемый через EDI, значением, содержащемся в аккумуляторе AL/AX/EAX.
Поскольку операции копирования и инициализации массивов часто встречаются в прикладных программах, а использование встроенного ассемблера для обращения к строковым примитивам не всегда возможно, то в большинство языков программирования ввели специальные функции, которые являются оболочками над строковыми примитивами и поэтому выполняются практически также быстро, как и ассемблерные вставки. В частности в стандартной библиотеке языка C имеются следующие функции:
void *memset(void *s, int c, size_t n);
s – адрес участка памяти
с – байт, которым будет забиваться участок памяти
n – количество байт для заполнения
void *memmove(void *dest, const void *src, size_t n);
dest – адрес приемника
srs – адрес источника
n – количество копируемых байт
Приемник и источник могут частично накладываться друг на друга, при этом копирование произойдет без потери информации.