Раздел 1. Основы ЭВМ Тема 1.1. Арифметические основы ЭВМ Системы счисления Система счисления — совокупность приемов и правил наименования и обозначения чисел, позволяющих установить взаимно однозначное соответствие между любым числом и его представлением в виде конечного числа символов. В любой системе счисления выбирается алфавит, представляющий собой совокупность некоторых символов (букв или цифр), с помощью которого в результате каких-либо операций можно представить любое их количество. Изображение любого количества символов называется числом, а символы алфавита — буквами и цифрами. Символы алфавита должны быть разными и значение каждого из них должно быть известно. В современном мире наиболее распространенной является десятичная система счисления, происхождение которой связано с пальцевым счетом. Она возникла в Индии и в XIII в. была перенесена в Европу арабами. Поэтому десятичную систему счисления стали называть арабской, а используемые для записи чисел цифры, которыми мы теперь пользуемся, — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 — арабскими. С давних времен для подсчетов и вычислений применялись различные системы счисления. Например, на Древнем Востоке довольно широко была распространена двенадцатеричная система. Многие предметы (ножи, вилки, тарелки и т. д.) и сейчас считают дюжинами. Число месяцев в году — двенадцать. Эта система счисления сохранилась в английской системе мер (например, 1 фут = 12 дюймов) и в денежной системе (1 шиллинг =12 пенсов). В Древнем Вавилоне существовала весьма сложная 60-ричная система. Она, как и 12-ричная система, в какой-то степени сохранилась и до наших дней (например, в системе измерения времени: 1 ч = 60 мин, 1 мин = 60 с, аналогично в системе измерения углов: 1 = 60, 1 = 60). Первые цифры (знаки для обозначения чисел) появились у египтян и вавилонцев. У ряда народов (древние греки, сирийцы, финикийцы) цифрами служили буквы алфавита. Аналогичная система до XVI в. применялась и в России. В Средние века в Европе пользовались системой римских цифр, которые и сейчас часто применяют для обозначения глав, частей, разделов в различного рода документах, книгах, для обозначения месяцев и т. д. Все системы счисления можно разделить на позиционные и непозиционные. Непозиционная система счисления — система, в которой символы, обозначающие то или иное количество, не меняют своего значения в зависимости от местоположения (позиции) в изображении числа. Запись числа А в непозиционной системе счисления D может быть представлена выражением N AD = D 1 + D 2 + … D N = Di , i1 где AD — запись числа А в системе счисления D; Di — символы системы. Непозиционной системой счисления является самая простая система с одним символом (палочкой). Для изображения какого-либо числа в этой системе надо записать количество палочек, равное данному числу. Например, запись числа 12 в такой системе счисления будет иметь вид: IIIIIIIIIIII. Эта система неэффективна, так как форма записи очень громоздка. К непозиционной системе счисления относится и римская, символы алфавита которой и обозначаемое ими количество представлены в табл. 1.1. Таблица 1.1 Римские цифры I V X L С Значение (обозначаемое количество) 1 5 10 50 100 D М 500 1000 Запись чисел в этой системе осуществляется по следующим правилам: 1) если цифра слева меньше, чем справа, то левая цифра вычитается из правой (IV: 1 < 5, следовательно, 5 – 1 = 4, XL: 10 < 50, следовательно, 50 – 10 = 40); 2) если цифра справа меньше или равна цифре слева, то эта цифры складываются (VI: 5 + 1 = 6, VIII: 5 + 1 + 1 + 1 = 8, XX: 10 + 10 = 20). Так, число 1964 в римской системе счисления имеет вид MCMLXIV (М – 1000, СМ – 900, LX – 60, IV – 4), здесь «девятьсот» получается посредством вычитания из «тысячи» числа «сто», «шестьдесят» — посредством сложения «пятидесяти» и «десяти», «четыре» — посредством вычитания из «пяти» «единицы». В общем случае непозиционные системы счисления характеризуются сложными способами записи чисел и правилами выполнения арифметических операций. В настоящее время все наиболее распространенные системы счисления относятся к разряду позиционных. Позиционные системы счисления Систему счисления, в которой значение цифры определяется ее местоположением (позицией) в изображении числа, называют позиционной. Упорядоченный набор символов (букв и цифр) {а0, a1, ... , аn}, используемый для представления любых чисел в заданной позиционной системе счисления, называют ее алфавитом, число символов (цифр) алфавита p = n + 1 — ее основанием, а саму систему счисления называют р-ричной. Основание позиционной системы счисления — количество различных цифр, используемых для изображения чисел в данной системе счисления. Самой привычной для нас является десятичная система счисления. Ее алфавит — {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, а основание р = 10, т. е. в этой системе для записи любых чисел используется только десять разных символов (цифр). Эти цифры введены для обозначения первых десяти последовательных чисел, а все последующие числа, начиная с 10 и т. д., обозначаются уже без использования новых цифр. Десятичная система счисления основана на том, что 10 единиц каждого разряда объединяются в одну единицу соседнего старшего разряда, поэтому каждый разряд имеет вес, равный степени 10. Следовательно, значение одной и той же цифры определяется ее местоположением в изображении числа, характеризуемым степенью числа 10. Например, в изображении числа 222,22 цифра 2 повторяется 5 раз, при этом первая слева цифра 2 означает количество сотен (ее вес равен 102); вторая — количество десятков (ее вес равен 10), третья — количество единиц (ее вес равен 100), четвертая — количество десятых долей единицы (ее вес равен 10-1) и пятая цифра — количество сотых долей единицы (ее вес равен 10-2), т. е. число 222,22 может быть разложено по степеням числа 10: 222,22 = 2 102 + 2 101 + 2 100 + 2 10-1 + 2 10-2. Аналогично 725 = 7 102 + 2 101 + 5 100; 1304,5 = 1 103 + 3 102 + 0 101 + 4 100 + 5 10-1; 50328,15 = 5 104 + 0 103 + 3 102 + 2 101 + 8 100 + 1 10-1 + 5 10-2. Таким образом, любое число А можно представить в виде полинома путем разложения его по степеням числа 10: A10 = аn 10n + аn-1 10n-1 + ... + а1 101 + а0 100 + a-1 10-1 + ... + а–m10-m +..., последовательность из коэффициентов которого представляет собой десятичную запись числа А10: A10 = аn аn-1 ... а1 а0 , a–1 ... a –m … Запятая, отделяющая целую часть числа от дробной, служит для фиксации конкретных значений каждой позиции в этой последовательности цифр и является началом отсчета. Двоичная, восьмеричная и шестнадцатеричная системы счисления Примеры изображения чисел в данных системах счисления представлены в табл. 1.2. В современной вычислительной технике, в устройствах автоматики и связи используется в основном двоичная система счисления, что обусловлено рядом преимуществ данной системы счисления перед другими системами. Так, для ее реализации нужны технические устройства лишь с двумя устойчивыми состояниями, например материал намагничен или размагничен (магнитные ленты, диски), отверстие есть или отсутствует (перфолента и перфокарта). Этот метод обеспечивает более надежное и помехоустойчивое представление информации, дает возможность применения аппарата булевой алгебры для выполнения логических преобразований информации. Кроме того, арифметические операции в двоичной системе счисления выполняются наиболее просто. Таблица 1.2 Десятичная 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Двоичная 00000 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 01011 01100 01101 01110 01111 10000 10001 10010 10011 10100 Восьмеричная 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 Шестнадцатеричная 0 1 2 3 4 5 6 7 8 9 А В С D Е F 10 11 12 13 14 Недостаток двоичной системы — быстрый рост числа разрядов, необходимых для записи больших чисел. Этот недостаток не имеет существенного значения для ЭВМ. Если же возникает необходимость кодировать информацию, «вручную», например при составлении программы на машинном языке, то используют восьмеричную или шестнадцатеричную системы счисления. Числа в этих системах читаются почти так же легко, как десятичные, требуют соответственно в 3 (восьмеричная) и в 4 (шестнадцатеричная) раза меньше разрядов, чем в двоичной системе (числа 8 и 16 — соответственно 3-я и 4-я степени числа 2), а перевод их в двоичную систему счисления и обратно осуществляется гораздо проще в сравнении с десятичной системой счисления. Арифметические операции в двоичной системе счисления Правила выполнения арифметических действий над двоичными числами задаются таблицей сложения, вычитания и умножения (табл. 1.3). Таблица 1.3 Сложение 0+0=0 0+1=1 1+0=1 1 + 1 = 10 Вычитание 0–0=0 1–0=1 1–1=0 10 – 1 = 1 Умножение 00=0 01=0 10=0 11=1 Единица – перенос в старший разряд Правила арифметики во всех позиционных системах счисления аналогичны. В двоичной системе счисления арифметическое сложение происходит по правилу сложения по модулю два с учетом переноса единицы в старший разряд. Пример. Выполнить операцию арифметического сложения в двоичной системе счисления чисел 13 и 7. 1310 = 11012 710 = 01112 Решение: + 13 + 01101 7 00111 20 10 10100 2 При сложении двух единиц результат операции равен нулю и единица переносится в соседний разряд. 43210 1 0 1 0 0 2 = 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 0 2 0 = 20 10. Пример. Выполнить операцию арифметического вычитания в двоичной системе счисления чисел 12 и 7. 1 11 – 12 –1 10 0 Решение: 7 0111 5 10 01012 При вычитании из нулевого разряда в данном разряде образуются две единицы, а в соседних нулевых разрядах возникает единица. 3210 0 1 0 1 2 = 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 5 10. Таблицы сложения для восьмеричной и шестнадцатеричной систем счисления представлены на рис. 1.1 и 1.2. + 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 1 1 2 3 4 5 6 7 10 2 2 3 4 5 6 7 10 11 3 3 4 5 6 7 10 11 12 4 4 5 6 7 10 11 12 13 5 5 6 7 10 11 12 13 14 6 6 7 10 11 12 13 14 15 7 7 10 11 12 13 14 15 16 Рис. 1.1. Таблица сложения для восьмеричной систем счисления + 0 1 2 3 4 5 6 7 8 9 А В С D Е F 0 0 1 2 3 4 5 6 7 8 9 А В С D Е F 1 1 2 3 4 5 6 7 8 9 А В С D Е F 10 2 2 3 4 5 6 7 8 9 А В С D Е F 10 11 3 3 4 5 6 7 8 9 А В С D Е F 10 11 12 4 4 5 6 7 8 9 А В С D Е F 10 11 12 13 5 5 6 7 8 9 А В С D Е F 10 11 12 13 14 6 6 7 8 9 А В С D Е F 10 11 12 13 14 15 7 7 8 9 А В С D Е F 10 11 12 13 14 15 16 8 8 9 А В С D Е F 10 11 12 13 14 15 16 17 9 9 А В С D Е F 10 11 12 13 14 15 16 17 18 А А В С D Е F 10 11 12 13 14 15 16 17 18 19 В В С D Е F 10 11 12 13 14 15 16 17 18 19 1A С С D Е F 10 11 12 13 14 15 16 17 18 19 1А 1B D D Е F 10 11 12 13 14 15 16 17 18 19 1А 1В 1С Е Е F 10 11 12 13 14 15 16 17 18 19 1А 1В 1С 1D F F 10 11 12 13 14 15 16 17 18 19 1А 1В 1С 1D 1E Рис. 1.2. Таблица сложения для шестнадцатеричной системы счисления При сложении цифры суммируются по разрядам, и если при этом возникает избыток, то он переносится влево. Перевод числа из одной системы счисления в другую При переводе целого десятичного числа в систему с основанием q его необходимо последовательно делить на q до тех пор, пока не останется остаток, меньший или равный q–1. Число в системе с основанием q записывается как последовательность остатков от деления, записанных в обратном порядке, начиная с последнего. Пример. Перевести число 75 из десятичной системы в двоичную, восьмеричную и шестнадцатеричную: в двоичную в восьмеричную в шестнадцатеричную Ответ: 7510 = 1 001 0112 = 1138 = 4B16. Другой способ записи перевода числа из десятичной системы счисления в двоичную осуществляется следующим способом. Исходное число делят на 2, результат пишут под исходным числом, а справа от черты в строке с исходным числом ставят 0, если деление без остатка, и 1, если остаток есть. Деление повторяют до тех пор, пока делимое не станет меньше делителя. Считывание результата производится снизу вверх. Пример. В десятичной системе число А10 = 37. Получить число А в двоичной системе счисления. 37 18 9 4 2 1 0 1 0 0 1 А10 = 37 А2 = 100101 Перевод восьмеричных и шестнадцатеричных чисел в двоичную систему осуществляется путем замены каждой цифры эквивалентной ей двоичной триадой (тройкой цифр) или тетрадой (четверкой цифр) соответственно. Пример. 537,18 = 101 011 111, 0012; 1А3, F16 = 1 1010 0011, 11112. 5 3 7 1 1 А 3 F Чтобы перевести число из двоичной системы в восьмеричную или шестнадцатеричную, его нужно разбить влево и вправо от запятой на триады (для восьмеричной) или тетрады (для шестнадцатеричной) и каждую такую группу заменить соответствующей восьмеричной или шестнадцатеричной цифрой. Например: 10101001,101112 = 10 101 001, 101 1102 = 251, 568; 2 5 1 5 6 10101001,101112 = 1010 1001, 1011 10002 = А9, В816. А 9 В 8 При переводе числа из двоичной (восьмеричной, шестнадцатеричной) системы счисления в десятичную надо это число представить в виде суммы степеней основания его системы счисления. Примеp. Разряды Число Разряды Число Разряды Число 3 2 1 0 -1 1 0 1 1, 12 = 1 23 + 1 21 + 1 20 + 1 2-1 = 11,510 2 1 0 -1 2 7 6, 58 = 2 82 + 7 81 + 6 80 + 5 8-1 = 190,62510 210 1 F 316 = 1 162 + 15 161 + 3 160 = 49910 Контрольные вопросы 1. Что такое система счисления? 2. Какие система счисления используются для представления информации в компьютерах? 3. В чем отличие позиционной системы счисления от непозиционной? 4. Что называется основанием системы счисления? 5. Назовите порядок перевода чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления. Системы счисления. Перевод чисел из одной системы счисления в другую Система счисления — совокупность приемов и правил для записи чисел цифровыми знаками. Любая предназначенная для практического применения система счисления должна обеспечивать: возможность представления любого числа в рассматриваемом диапазоне величин; единственность представления (каждой комбинации символов должна соответствовать одна и только одна величина); простоту оперирования числами. Типы систем счисления: позиционные, непозиционные. Непозиционные системы счисления (СС) характеризуются тем, что для представления какого-либо числа используется определенный набор символов, который изменяется при изменении диапазона представляемых чисел. В качестве типичного примера непозиционной системы счисления обычно приводится римская система счисления, в которой для небольших чисел и коррекции чисел с большим значением используется символ I. Для представления больших чисел приходится вводить новые символы (V, X, C и т.д.). В позиционных системах счисления значение единицы цифры каждого разряда числа имеет постоянный вес. Этот вес определяется позицией, которую разряд занимает по отношению к запятой: 234,5610 = 2*102 + 3*103 + 4*104 + 5*10-1 + 6*10-2 С этой точки зрения, римская система счисления не является чисто непозиционной, т.к., например, число IV равно четырем, а число VI – шести. Любая позиционная система счисления характеризуется своим основанием. Основание (базис) p-й позиционной системы счисления – количество знаков, или символов, используемых для изображения числа в данной системе: p=10 → {ai} = 0,1, …,9; → {ai} = 0,1; → {ai} = 0,1,2.3.4; p=16 → {ai} = 0, 1, …, 9, A, B, C, D, E, F; p=q→ {ai} = 0,1.,…,q-1 p=2 p=5 Десятичное число 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Эквиваленты в некоторых других системах счисления p=2 p=5 p=8 p = 16 0000 00 00 0 0001 01 01 1 0010 02 02 2 0011 03 03 3 0100 04 04 4 0101 10 05 5 0110 11 06 6 0111 12 07 7 1000 13 10 8 1001 14 11 9 1010 20 12 A 1011 21 13 B 1100 22 14 C 1101 23 15 D 1110 24 16 E 1111 30 17 F 10000 31 18 10 Для любой позиционной системы счисления основание изображается числом 10 в данной системе. В общем виде число А в p-ной позиционной системе счисления представляется в виде: (1) При k = Const получается число, носящее, в общем случае, название числа с фиксированной точкой, но имеющее две разновидности: k=0: правильная дробь – число с фиксированной запятой, то есть правильную дробь A = a-1*p-1+a-2*p-2+…+a-m*p-m k=r: целое число – число с фиксированной точкой, то есть целое число A = an*pn+an-1*pn-1+…+a1*p1+a0*p0 При k ≠Const получается число с плавающей запятой. Представление в виде числа с фиксированной точкой (или ее разновидности – с фиксированной запятой) влияет на диапазон представляемых чисел и их точность. Микропроцессоры, которые в настоящее время служат основой для построения ЭВМ различных типов, содержат в своем составе как блоки, предназначенные для обработки целых чисел (СPU –CentralPointUnit), так и блоки для обработки чисел с плавающей запятой (FPU – FloatingPointUnit, в силу англоязычной специфики представления дробных чисел целая часть от дробной отделяется не запятой, а точкой). Представление чисел с плавающей запятой включает в себя порядок (целое число) и мантиссу (правильную дробь), которые обрабатываются в отдельных блоках FPU. Поэтому изучение особенностей представления и обработки каждого из типов чисел чрезвычайно важно для изучения устройства ЭВМ, выбора необходимого формата данных как с точки зрения требуемого диапазона, так и допустимой погрешности. Обсуждение способов кодирования и различных алгоритмов обработки чисел мы будем проводить, в основном, на примере чисел с фиксированной запятой, так как именно в этом формате представляются мантиссы чисел с плавающей запятой, что сказывается на обработке чисел с плавающей запятой в целом. В свою очередь использование чисел с плавающей запятой играет в настоящее время весьма важную роль в процессе человеко-машинного общения, снимая с программиста во многих случаях обязанность по отслеживанию диапазона и точности используемых и получаемых данных. К тому же числа с фиксированной запятой играют заметную самостоятельную роль в специализированных компьютерах, работающих в определенном диапазоне чисел, повышая при этом быстродействие таких вычислений, что особенно проявилось в ЭВМ второго и третьего поколений. Выбор системы счисления Основными определяющими факторами в данном вопросе являются степень сложности выполнения арифметических операций в выбранной системе счисления, объем оборудования, необходимый для представления чисел в данной системе счисления, и условия реализации (создания) оборудования для представления цифр. Если принять, что каждый разряд числа представлен не одним элементом с p устойчивыми состояниями, a p элементами, каждый из которых имеет одно устойчивое состояние, то показатель экономичности укажет условное количество оборудования, которое необходимо затратить на представление чисел в этой системе. Допустим, что имеется n разрядов для изображения числа в р-ичной системе счисления. В этом случае максимальное число М будет отвечать выражению: (2) Наряду с величиной М, являющейся мерой максимального количества информации, которое может быть представлено в п разрядах, оценим число элементов N, необходимое для изображения числа М: (3) Равенство (2) справедливо при условии, что для изображения каждого из допустимых в некотором разряде символов (цифр) требуется один элемент. Определим N как непрерывную функцию от р и М. Из равенства (2) следует, что Подставляя это выражение в (3), получаем Используя полученную зависимость, можно найти основание системы счисления, при которой требуется минимум оборудования. Так, определив производную и приравняв ее к нулю, получим экстремум при р = е. Характер экстремума соответствует минимуму, так как при р = е N''>0 Таким образом, система при р = е требует минимума оборудования. Но e = 2, 718… , т. е. не целое число. Поэтому на практике целесообразно использовать системы с основаниями р = 3 или р = 2. Эти системы, согласно приведенной оценке, практически равноценны, так как отношение N2/N3 = (2 ln3) / (3 ln2)≈1,056 Подобное сравнение десятичной и двоичной систем показывает, что десятичная система примерно в полтора раза менее экономична двоичной: N10/N2 = (10 ln2) / (2 ln10) ≈ 1,505 Перевод чисел из одной системы счисления в другую При переводе чисел из одной позиционной системы счисления в другую необходимо выполнять различные арифметические операции. Не останавливаясь подробно на механизме выполнения этих операций в каждой системе счисления, отметим лишь, что числа, представленные в различных позиционных системах счисления, обрабатываются схожим образом с учётом, естественно, особенностей данной системы счисления и имеющихся в ней символов. Так, на примере операции сложения это будет выглядеть следующим образом: Cq = Aq +Bq Aq = an*qn+an-1*qn-1+…+a1*q1+a0*q0 Bq = bm*qm+bm-1*qm-1+…+b1*q1+b0*q0 Промежуточная сумма: si = ai+bi+ pi-1 , где ai, и bi - соответствующие разряды слагаемых, pi-1– перенос из предыдущего разряда. Пример: 52648 + 65318 = 140158 Выполнение операции по шагам: +5 2 6 4 A8 6 5 3 1 B8 11 7 9 5 S1 +3 7 1 5 C1 1 0 1 0 0 P1 1 3 8 1 5 S2 1 3 0 1 5 C2 0 1 0 0 0 P2 1 4 0 1 58 S3=A+B Для перевода смешанного числа, то есть числа, содержащего как целую, так и дробную части, из p-ичной системы счисления в q-ю существует несколько способов. Прежде всего, отметим, что перевод целой части числа и его дробной части осуществляется по различным правилам. Рассмотрим некоторые из них. Перевод целых чисел Метод 1. Данный метод используется наиболее часто. Его суть состоит в том, что исходное p-ичное число делится на основание q новой системы счисления. Получаемый остаток представляет собой p-ичную запись q-ичной цифры нового представления числа. Частное от деления вновь делится на основание qновое системы счисленияи т.д. до тех пор, пока не будет получено частное, меньшее, чем q. Запись нового представления числа начинается с младшей цифры. Действия производятся в p-ичной системе счисления. Обоснование метода 1: Ap = an*pn+an-1*pn-1+…+a1*p1+a0*p0 Bq = br*qr+br-1*qr-1+…+b1*q1+b0*q0 Aq /q = {А1,S1}, гдеА1 –целая часть результата, S1 – остаток. Bq /q = {В1,R1}, гдеB1- целая часть результата, R1-остаток. B1= br*qr-1+br-1*qr-2+…+b1*q0 R1= b0 Т.к. Ap ≡ Bq,тоb0 = S1. Пример 1. Перевести число 181 из 10-й системы счисления в 7-ю. В результате преобразования получим: 18110= 3467 Пример 2. Перевести число 346 из 7-й системы счисления в 10-ю. При выполнении этого перевода необходимо помнить следующие особенности: действия проводятся в исходной системе счисления и, следовательно, основание новой системы счисления тоже должно быть представлено в исходной системе счисления; т.к. при переводе числа в систему счисления с бОльшим основанием остаток может получиться многозначным числом, которое при представлении исходного числа в новой системе счисления должен быть представлен одной цифрой в новой системе счисления. Так, 35 х 35 = 215, т.к. символа "6" в 5-й системе счисления нет, а согласно общей записи числа в позиционной системе счисления (см 6.1) 215 = 2*51 + 1*50. Основание новой системы счисления будет представлено в исходной 7-й системе значением: 1010 = 137. Вернемся к нашему первому методу перевода. Выполним перевод: На одном из этапов деления мы получили остаток, меньший делителя, но не являющийся одной цифрой. Вспомним, что мы переводим число в систему счисления с бОльшим основанием, где количество символов для представления знаков числа больше, поэтому запишем окончательный результат: 3467 = 18110, что согласуется с предыдущим примером. Метод 2. Все цифры и основание представления числа согласно формуле (6.1) в исходной системе счисления записываются в новой системе счисления. Над полученным выражением проводятся вычисления, результат которых и будет представлять собой запись исходного числа в новой системе счисления. Пример. Перевести число 321 из 4-й в 3-ю систему счисления. 3214 = (3х42+2х41+1х40)4 = (10х112+2х111+1х110)3 = = (10х11х11+2х11+1)3 = 20103 3214 = 20103 Метод 3. Основным недостатком метода 2 является необходимость выполнения большого количества операций умножения при большой разрядности переводимого числа. Некоторое сокращение этих операций может быть получено при вычислении многочлена по схеме Горнера для многоразрядного числа. Покажем это на том же примере: 3214 = (3х42+2х41+1х40)4 = (10х112+2х111+1х110)3 = = (10х11х11+2х11+1)3= =(((0+10)х11+2)х11+1)3 = 20103 Если в предыдущем примере для получения результата потребовалось выполнить четыре операции умножения, то в этом примере только три. Так как умножение выполняется в компьютере достаточно долго, то сокращение этих операций может существенно уменьшить общее время преобразования целого числа из одной системы счисления в другую. Перевод чисел с фиксированной запятой (правильных дробей) В этом случае исходное p-ичное число имеет следующий вид: Ap = a-1*p-1+a-2*p-2+…+a-m*p-m Основной метод, используемый для перевода чисел с фиксированной запятой из p ичной системы счисления в q-ичную заключается в следующем. В q-ичной системе счисления данная дробь будет иметь вид: Bq = b-1*q-1+b-2*q-2+…+b-n*q-n... Очевидно, что в новой системе счисления количество разрядов может отличаться от количества разрядов числа в исходной системе счисления и, более того, в новой системе счисления некоторые числа не могут быть представлены конечным числом знаков. Погрешность числа в его новом представлении должна соответствовать его погрешности в исходной системе счисления, то есть 0,5 a-m*p-m= 0,5b-n*q-n Отсюда, решая данное показательное уравнение относительно n, получаем n = p lnn / lnq На практике рекомендуется получить (n+1) знак в новом представлении дроби и округлить дробь до n знаков, используя общее правило округления: если (n+1)-я цифра больше или равна половине основания новой системы счисления, то к остающимся разрядам добавляется "1". В противном случае - "0". Так, 0,543147 ≈ 0,54327. А теперь рассмотрим собственно метод перевода. Для перевода правильной дроби из p-ичной системы счисления в q-ичную необходимой исходную дробь умножить на основание q новой системы счисления. Целая часть полученного результата даст старшую цифру дроби нового представления числа. Дробная часть результата будет использована на следующем шаге операции перевода. Операция проводится до получения необходимого количества знаков в новом представлении числа. Этот метод достаточно легко обосновать. Обоснование правила перевода правильных дробей (4) (5) Ap*q = {D1,S1}, где D1 – целая часть результата, S1 – дробная часть результата. Bq *q = {K1,R1}, где K1– целая часть результата, R1 – дробная часть результата. Из (6.5): K1 = b-1. Т.к. Ap≡ Bq, то b-1 = D1. Умножив Bq на q, получим целую часть результата, равную b-1. Так как Bq = Ap, то умножение AP на q в качестве целой части результата тоже даст b-1. Аналогичные действия над полученной дробной частью результата позволят получать очередные цифры нового представления числа. Пример 3. Перевести число с фиксированной запятой 0,652 из 10-й системы счисления в 4 ю. Сначала определим необходимое количество знаков в новом числе: p=10, q=4, n=3. m = 3 ln10/ln4 ≈ 5 Следовательно, в новом представлении числа нужно получить n+1 = 6 знаков и округлить число до 5 знаков. Таким образом, 0,65210 = 0,2212324 ≈ 0,221304 Пример 4. Перевести число с фиксированной запятой 0,2011 из 3-й системы счисления в 7 ю. Число знаков в новом представлении числа: m = 4 ln7/ln3 ≈ 2 Учитываем, что 7 = 213. Получаем: 0,20113 = 0,5457 ≈ 0,557 Перевод чисел из p-ичной системы счисления в q-ичную при p = qk Если основания систем счисления связаны таким соотношением, то на основании (6.1) после некоторых преобразований можно получить правила, которые существенно облегчат перевод из одной системы счисления в другую. Обычно они применяются при переводе между 16-ми и двоичными или 8-ми и двоичными системами счисления. Перевод целых чисел При переводе целых чисел из p-ичной СС в q-ичную необходимо каждую цифру исходного p-ичного числа заменить ее k-разрядным q ичным эквивалентом. При необходимости, дополнить число слева нулями. Пример 5. Перевести число 101101 из 2-й системы счисления в 16-ю. Решение. Определим k. 16=24. Следовательно, k=4. Исходное число содержит только 6 знаков. Но цело число не изменится, если слева к нему приписать необходимое количество нулей. Таким образом, получаем 2 группы по 4 знака в каждой: 0010 1101. Заменяя каждую группу одной 16-й цифрой, получим результат: 1011012 = 2D16 Перевод правильных дробей При переводе правильных дробей из p-ичной СС в q-ичную необходимо каждую цифру исходного p-ичного числа заменить ее k разрядным q-ичным эквивалентом. При необходимости, дополнить число справа нулями. Пример 6. Перевести число 0,1011011 из 2-й системы счисления в 8 ю. Решение. Определим k. 8=23. Следовательно, k=3. Перевод чисел между такими системами счисления (как для случая, когда q=pk) имеет большое практическое значение. Как известно, информация в ЭВМ передается и обрабатывается в двоичном виде. В то же время на экране или печатающем устройстве мы видим зачастую ее отображение в 16-м (в некоторых типах ЭВМ – в 8-м) виде. Это имеет ряд преимуществ. Во-первых, экономится место на экране или печатающем устройстве. Одна 16-я цифра заменяет четыре двоичные. В то же время, при некотором навыке, легко представить, что за двоичное число отображается. Во-вторых, существенно облегчается ввод числовой информации. Гораздо проще набрать на клавиатуре набор "A4C", чем "101001001100". При этом также сокращается и количество ошибок ввода. Перевод чисел из p-ичной системы счисления в q-ичную при q = pk Перевод целых чисел При переводе целых чисел из p-ичной СС в q-ичную необходимо исходное p ичное число разбить на группы по k разрядов, начиная справа, и каждую группу заменить одной q ичной цифрой. При необходимости старшая группа дополняется слева нулями до k разрядов. Перевод правильных дробей При переводе правильных дробей из p-ичной СС в q-ичную необходимо исходное p ичное число разбить на группы по k разрядов, начиная слева, и каждую группу заменить одной q-ичной цифрой. При необходимости младшая группа дополняется справа нулями до k разрядов. Примеры перевода чисел, представленных в 2k-ичных системах счисления Пример 7. Перевести число 571,45 из 8-й в 2-ю систему счисления. Так как 8 = 23, то каждую 8-ричную цифру необходимо заменить её 3-х разрядным двоичным эквивалентом: 571,458 = 101 111 001, 100 1012. Пример 8. Перевести число 10111011001,1011012 из 2-й в 16-ю CC. Так как 16 = 24, то исходное число необходимо разбить на группы по 4 разряда, при этом придется дополнить старшую группу целой части числа двумя нулями слева, а младшую группу дробной части нулем справа: 0010 1101 1001,1011 00102 = 2D9,B216 Пример 9. Перевести число E4,57 из 16-й в 8-ю систему счисления. Так как 16 ≠ 8k, то прямой перевод по упрощенным правилам невозможен. В этом случае необходимо либо воспользоваться правилами перевода в произвольных СС, либо выполнить промежуточный перевод в 2-ю СС, так как 8=23 и 16=24: Воспользуемся вторым подходом. E4,5716 = 1110 0100,0101 01112 = 011 100 100,010 101 1102 = 344,2568 Перевод смешанных чисел Как отмечалось выше, перевод смешанных чисел, то есть чисел, имеющих как целую, так и дробную части, проводится раздельно для целой части и для дробной части числа. Так, чтобы перевести число 343,201 из 5-й системы счисления в 3-ю, сначала одним из описанных выше методов переводим целую часть числа: 3435 = 101223 Затем переводим дробную часть числа: 0,2015 ≈ 0,10203 Таким образом, итоговый результат будет выглядеть следующим образом: 343,2015 = 10122,10203 Здесь встает вопрос: "А что изменится, если вместо числа 10122,10203мы запишем число 10122,1023 ?" . Разрядность числа тесно связана с двумя его характеристиками: погрешностью и точностью представления числа. Рассмотрим их на примере чисел в двоичной системы счисления как используемой в подавляющем количестве ЭВМ. Диапазон и точность представления чисел с фиксированной точкой Для чисел с фиксированной запятой, у которых под запись самого числа отводится n разрядов и 1 разряд отводится для указания знака числа, то есть они имеют вид (рис. 1) Рис. 1. Представление числа с фиксированной запятой модуль максимального числа будет иметь значение | X | макс = 0,1 ... 1 = 1 – 2-п, а модуль минимального числа, не равного нулю: | X | мин = 0,0 ...01 = 2-п. Для чисел с фиксированной точкой также при условии, что один разряд отводится под значение знака числа и n разрядов – под значение самого числа (рис. 2), получим: Рис. 2. Представление числа с фиксированной точкой | X | макс = 0,1 ... 1 = 2п-1, а модуль минимального числа, не равного нулю: | X | мин = 0,0 ...01 = 20 = 1. Погрешности представления чисел Абсолютная погрешность представления – разность между истинным значением входной величины А и ее значением, полученным из машинного изображения Ам, т. е. Δ[А] = А –Ам. , где Ам – машинное представление величины А, которое отличается от истинной в силу ограниченного количества разрядов машинной сетки. Относительная погрешность представления – величина σ [А] = Δ[А] / А Погрешности представления чисел с фиксированной точкой Абсолютная погрешность составляет половину единицы младшего разряда числа. Для правильных дробей (числа с фиксированной запятой): Δ[А] = 0.5* 2-n. σ [А]мин = Δ[А] / Амакс = (0.5 * 2-n)/ (1-2-n) ≈ 0.5 *2-n σ [А]макс = Δ[А] / Амин = (0.5 * 2-n) / 2-n = 0.5 Для целых чисел (числа с фиксированной точкой): Δ[А] = 0.5* 20= 0.5. σ [А]мин = Δ[А] / Амакс = 0.5 / (2п-1) ≈0.5 / 2п =0.5* 2-n σ [А]макс = Δ[А] / Амин = 0.5 / 1 = 0.5 Как мы видим, и в том и в другом случае эта погрешность может существенно меняться в зависимости от представляемой величины. Диапазон и точность представления чисел с плавающей запятой k – порядок числа; M – мантисса числа Пример: 567 = 567*100 = 5670*10-1 = 5,67*102 = 0,567*103 = 0,00567*105 = … Нормализованная мантисса удовлетворяет условию: 1 > |M| ≥ p-1 567 → 0,567*103 Формат числа с плавающей запятой n-1 1 ЗнП 2 2 20 ЗнМ 2-1 2-2 ... . . . 2-m Порядок (n+1 разряд) Мантисса (m+1разряд) п Пмакс = 0,1 ... 1 = 2 -1 М макс = 0,1 ... 1 = 1-2-m -Пмакс = -(2п-1) М мин = 0,1 = 2-1 Погрешности представления чисел с плавающей запятой Δ[А] = 0.5* 2-m* 2P σ [А]мин = Δ[А] / Амакс = ((0.5 * 2-m) * 2P) /((1-2-m) * 2P)≈ 0.5 *2-m σ [А]макс = Δ[А] / Амин = ((0.5 * 2-m) * 2P) / 2-1 = 2-m Краткие итоги Рассмотрены типы систем счисления. По критерию минимальности используемого оборудования выбрана двоичная система счисления для реализации элементов вычислительной техники. Приведены правила перевода целых и дробных чисел из одной произвольной системы счисления в другую. Особое внимание обращено на перевод чисел, представленных в 2k-ичных системах счисления (двоичных, восьмеричных, 16ных) между собой, что, с одной стороны, выполняется достаточно просто, а с другой стороны, требуется делать относительно часто в тех или иных случаях как при программировании, так и при разработке аппаратуры. Показаны механизмы расчета диапазонов представления и погрешностей для чисел различных форматов. Контрольные вопросы 1. Чем отличаются позиционные системы счисления от непозиционных? Приведите примеры позиционных и непозиционных систем счисления. 2. Укажите достоинства, недостатки и области применения позиционных и непозиционных систем счисления. 3. Запишите число "14" в римской системе счисления. 4. Запишите число "5" 3-й и 9-й системах счисления. 5. Укажите методы перевода целых чисел из одной позиционной системы счисления в другую. 6. Переведите число 5323 из 7-й системы счисления в 5-ю и 9-ю различными методами. Сравните полученные результаты. Если результаты не совпадают, объясните причину расхождения. 7. В какой системе счисления одно и то же число буде иметь больше знаков: в системе с бОльшим или с меньшим основанием? Почему? Всегда ли число в системах с разными основаниями имеет разное количество знаков? 8. Одно и то же число записано в системах счисления с разными основаниями. Можно ли сказать, для какой записи числа основание системы счисления больше? 9. Укажите методы перевода правильных дробей из одной позиционной системы счисления в другую. 10. Всегда ли правильная конечная дробь в одной системе счисления будет правильной конечной дробью в другой системе счисления? Почему? 11. Как определяется количество разрядов, которое необходимо для представления правильной конечной дроби в другой системе счисления? Каким образом определяется соотношение между количеством разрядов правильной дроби в разных системах счисления? 12. Как производится округление дробной части числа в p-й системе счисления? 13. В какой системе счисления для указания дробной части числа потребуется большее количество разрядов: в системе счисления с бОльшим или с меньшим основанием? Почему? 14. Укажите методы перевода смешанных чисел из одной позиционной системы счисления в другую. 15. Переведите число 345, 67 из 8-й системы счисления в 5-ю и 9-ю. 16. Как определяется диапазон представления двоичных чисел с фиксированной точкой? 17. Как определяется диапазон представления двоичных чисел с фиксированной запятой? 18. Как определяется диапазон представления двоичных чисел с плавающей запятой? 19. Как определяется относительная погрешность представления двоичных чисел с фиксированной точкой? 20. Как определяется относительная погрешность представления двоичных чисел с фиксированной запятой? 21. Как определяется относительная погрешность представления двоичных чисел с плавающей запятой? 22. Укажите достоинства и недостатки представления двоичных чисел в виде чисел с фиксированной точкой, фиксированной запятой, плавающей запятой. 23. Какие характеристики числа с плавающей запятой изменятся при изменении количества разрядов, отводимых под порядок и под мантиссу числа? 24. Для двоичного числа, представленного в формате с плавающей запятой, 3 разряда отведено под порядок и 7 разрядов – под мантиссу (знаки не учитываются). Укажите диапазон изменения таких чисел, максимальную и минимальную погрешности. Представление двоичных чисел в прямом, обратном и дополнительном кодах Для определения знака числа в двоичном коде используются 0 и 1. Нулем кодируется знак "+", Единицей кодируется знак "-". Для представления положительных и отрицательных чисел в вычислительной технике используются ПРЯМОЙ, ОБРАТНЫЙ и ДОПОЛНИТЕЛЬНЫЙ коды. Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково - двоичными кодами с цифрой 0 в знаковом разряде. Например: Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение. 1. Прямой код. В знаковый разряд помещается цифра 1, а в разряды цифровой части числа — двоичный код его абсолютной величины. Например: 2. Обратный код. Получается инвертированием всех цифр двоичного кода абсолютной величины числа, включая разряд знака: нули заменяются единицами, а единицы — нулями. Например: 3. Дополнительный код. Получается образованием обратного кода с последующим прибавлением единицы к его младшему разряду. Например: Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа. Пример: Представить число +7, -12, -15, -16 в прямом, обратном и дополнительном кодах. Число Прямой код Обратный код Дополнительный код -12 1 0001100 1 1110011 1 1110100 -15 1 0001111 1 1110000 1 1110001 -16 1 0010000 1 1101111 1 1110000 При переводе из обратного в прямой код происходит инверсия цифр числа. При переводе из дополнительного в прямой код происходит 1) инверсия цифр числа, 2)добавляется +1 в младший разряд инвертированного числа. Арифметические действия над числами со знаком В большинстве компьютеров операция вычитания не используется. Вместо нее производится сложение обратных или дополнительных кодов уменьшаемого и вычитаемого. Это позволяет существенно упростить конструкцию АЛУ. Сложение обратных кодов. Здесь при сложении чисел А и В имеют место четыре основных и два особых случая: Алгебраическое сложение |A|<|B| Обратный код Дополнительный код |A|>|B| или (A<0,B<0) Если результат получен со знаком минус (с "1"), то результат необходимо преобразовать в прямой код!!! 1. А и В положительные. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю. Например: Получен правильный результат. 2. А положительное, B отрицательное и по абсолютной величине больше, чем А. |A| < |B| Например: Если результат получен со знаком минус с "1", то результат необходимо преобразовать в прямой код!!! Получен правильный результат в обратном коде. При переводе в прямой код биты цифровой части результата инвертируются: 1 0000111 = -710. 3. А положительное, B отрицательное и по абсолютной величине меньше, чем А. |A| > |B| Например: Компьютер исправляет полученный первоначально неправильный результат (6 вместо 7) переносом единицы из знакового разряда в младший разряд суммы. 4. А и В отрицательные. Например: Полученный первоначально неправильный результат (обратный код числа 1110 вместо обратного кода числа -1010) компьютер исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части числа инвертируются: 1 0001010 = -1010. При сложении может возникнуть ситуация, когда старшие разряды результата операции не помещаются в отведенной для него области памяти. Такая ситуация называется переполнением разрядной сетки формата числа. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства. Ниже приведены два возможных случая переполнения. 5. А и В положительные, сумма А+В больше, либо равна 2n-1, где n — количество разрядов формата чисел (для однобайтового формата n=8, 2n-1 = 27 = 128). Вариант переполнения. Например: Семи разрядов цифровой части числового формата недостаточно для размещения восьмиразрядной суммы (16210 = 101000102), поэтому старший разряд суммы оказывается в знаковом разряде. Это вызывает несовпадение знака суммы и знаков слагаемых, что является свидетельством переполнения разрядной сетки. 6. А и в отрицательные, сумма абсолютных величин а и в больше, либо равна 2n-1. Вариант переполнения. Например: Здесь знак суммы тоже не совпадает со знаками слагаемых, что свидетельствует о переполнении разрядной сетки. Сложение дополнительных кодов. Здесь также имеют место рассмотренные выше шесть случаев: 1. А и В положительные. Здесь нет отличий от случая 1, рассмотренного для обратного кода. 2. А положительное, b отрицательное и по абсолютной величине больше, чем а. Например: Получен правильный результат в дополнительном коде. При переводе в прямой код биты цифровой части результата инвертируются и к младшему разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = -710. 3. А положительное, b отрицательное и по абсолютной величине меньше, чем а. Например: Получен правильный результат. Единицу переноса из знакового разряда компьютер отбрасывает. 4. А и В отрицательные. Например: Получен правильный результат в дополнительном коде. Единицу переноса из знакового разряда компьютер отбрасывает. Случаи переполнения для дополнительных кодов рассматриваются по аналогии со случаями 5 и 6 для обратных кодов. Сравнение рассмотренных форм кодирования целых чисел со знаком показывает: на преобразование отрицательного числа в обратный код компьютер затрачивает меньше времени, чем на преобразование в дополнительный код, так как последнее состоит из двух шагов — образования обратного кода и прибавления единицы к его младшему разряду; время выполнения сложения для дополнительных кодов чисел меньше, чем для их обратных кодов, потому что в таком сложении нет переноса единицы из знакового разряда в младший разряд результата. ВАЖНО: Результат всегда представляется в том виде, в котором представлены исходные операнды. Примеры Числа даны без знаковых разрядов. 10110101 – 10010110 выполнить алгебр. сложение в обратном коде - 11010 – 10101 выполнить алгебр. сложение в дополнительном коде, разрядная сетка 8 бит. - 110011 – 101101 выполнить алгебр. сложение в обратном коде, разрядная сетка 8 бит. - 101010 + 110001 выполнить алгебр. сложение в дополнительном коде, разрядная сетка 8 бит. Решение: 1) Ответ: +11111 2. Сначала числа представляются в прямом коде в разрядной сетке, а затем происходят необходимые преобразования. Ответ: -101111. 2. Ответ: -1100000. 2. Ответ: +0111. Задание: Выполнить алгебраическое сложение в двоичной системе счисления. Результат представить в 10 с/с. Разрядная сетка 8 бит. Указать на переполнение разрядной сетки, если есть. -2 Обратный код 20-19 Обратный код -120-15 Обратный код -9 Дополнительный код 0-25 Дополнительный код -126-1 Дополнительный код 5-7 Обратный код 27-1 Обратный код 101+43 Обратный код -4-10 Дополнительный код 75-12 Дополнительный код -73+45 Дополнительный код Ключевые термины Дополнительный код - запись числа, в которой для отрицательных чисел значащие разряды получаются как увеличенный на 1 обратный код модуля числа. Служит для замены вычитания сложением чисел с учётом их знаков. Обратный код - запись числа, в которой для отрицательных чисел значащие разряды записываются в виде инверсии разрядов модуля числа. Самостоятельного значения не имеет. Основание системы счисления - это число, равное количеству знаков, которые используются в этой системе для записи чисел. Позиционная система счисления - в которой вес разряда определяется его позицией в записи числа. Прямой код - запись числа, в которой к значащим разрядам приписывается знаковый разряд. Система счисления - совокупность знаков, применяемая для записи чисел. Принятые сокращения ДК - дополнительный код. ОК - обратный код. ПК - прямой код. Краткие итоги При описании работы ЭВМ широко используется двоичная система счисления, поскольку в ней используются два знака для записи чисел. Данный факт хорошо сочетается с тем, что все схемы ЭВМ могут находиться в двух состояниях - состояниях логического нуля и логической единицы. Для двоичных чисел действуют свои правила двоичной арифметики. Основными её операциями являются сложение и вычитание. Поскольку сложение является более простым и универсальным действием, вычитание заменяется сложением двоичных чисел с учётом их знаков. Знак чисел также обозначается одним двоичным разрядом и все действия над знаковыми разрядами осуществляются по тем же правилам двоичного сложения. КОНТРОЛЬНЫЕ ВОПРОСЫ: 1. Напишите формулу (2) для следующих систем счисления: o двоичной; o троичной; o восьмеричной; o шестнадцатеричной. 2. Что такое основание системы счисления? 3. Почему при описании работы ЭВМ и программировании востребованы двоичная, восьмеричная и шестнадцатеричная системы счисления? 4. Сколько знаков используется для написания чисел в пятеричной системе счисления? 5. Как получить прямой код положительного числа? 6. Как получить прямой код отрицательного числа? 7. Как получить обратный код положительного числа? 8. Как получить обратный код отрицательного числа? 9. Как получить дополнительный код положительного числа? 10. Как получить дополнительный код отрицательного числа? 11. Каков недостаток обратного кода? 12. Каким образом обозначается знак числа? Упражнения Упражнение 1 Вариант 1.Переведите десятичное число 25 в двоичный, восьмеричный и шестнадцатеричный коды. Вариант 2. Переведите десятичное число 30 в двоичный, восьмеричный и шестнадцатеричный коды. Вариант 3. Переведите десятичное число 35 в двоичный, восьмеричный и шестнадцатеричный коды. Упражнение 2 Вариант 1. Напишите прямой, обратный и дополнительный коды числа (-40) Вариант 2. Напишите прямой, обратный и дополнительный коды числа (-44) Вариант 3. Напишите прямой, обратный и дополнительный коды числа (-49) Упражнение 3 Вариант 1. Напишите прямой, обратный и дополнительный коды числа (+40) Вариант 2. Напишите прямой, обратный и дополнительный коды числа (+44) Вариант 3. Напишите прямой, обратный и дополнительный коды числа (+49) Упражнение 4 Вариант 1. Сложите в двоичном коде 45 и 25, сделайте проверку результата. Вариант 2. Сложите в двоичном коде 40 и 15, сделайте проверку результата. Вариант 2 . Сложите в двоичном коде 31 и 38, сделайте проверку результата. Упражнение 5 Вариант 1. Сделайте вычитание в двоичном коде из 45 числа 25, сделайте проверку Вариант 2. Сделайте вычитание в двоичном коде из 65 числа 63 , сделайте проверку Вариант 2. Сделайте вычитание в двоичном коде из 55 числа 35, сделайте проверку Упражнение 6 Вариант 1 Вычислите в дополнительном коде (66-55), сделайте проверку результата. Вариант 2 Вычислите в дополнительном коде (128-55), сделайте проверку результата. Вариант 3 Вычислите в дополнительном коде (266-55), сделайте проверку результата. Упражнение 7 Вариант 1 Вычислите в дополнительном коде (6-57), сделайте проверку результата. Вариант 2 Вычислите в дополнительном коде (18-55), сделайте проверку результата. Вариант 3 Вычислите в дополнительном коде (26-155), сделайте проверку результата. Упражнение 8 Вариант 1. Вычислите в дополнительном коде (-46-55), сделайте проверку результата. Вариант 2 Вычислите в дополнительном коде (-120-55), сделайте проверку результата. Вариант 3 Вычислите в дополнительном коде (-6-125), сделайте проверку результата. Тема 1.2. Представление информации в ЭВМ Представление информации в ЭВМ Представление символьной информации в ЭВМ. Символьная (алфавитно-цифровая) информация хранится и обрабатывается в ЭВМ в форме цифрового кода, то есть каждому символу ставится в соответствие отдельное бинарное слово-код. При выборе метода кодирования руководствуются объемом и способом обработки символьной информации. Так как многие типы информации содержат в значительном объеме цифровую информацию, то применяются две системы кодирования: символьной информации и десятичных чисел. Необходимый набор символов, предусмотренный в конкретной ЭВМ, обычно включает в себя: 1. буквально-цифровые знаки алфавита (алфавитов); 2. специальные знаки (пробел, скобки, знаки препинания и др.); 3. знаки операций. Кроме того, в состав набора входят управляющие символы, соответствующие определенным функциям. Среди наборов символов наибольшее распространение получили знаки кода ASCII (ASCII – American Standard Code for Information Interchange) – стандартный американский код обмена информацией и кода EBCDIC (Extended Binary Code Decimal Interchage Code)- расширенный двоичнодесятичный код обмена информацией. Набор EBCDIC используется главным образом на «больших» машинах, тогда как набор ASCII, созданный в 1963 г. и введённый в действие институтом стандартизации США (ANSI – American National Standart Institute), находит наиболее широкое применение в мини - и микроЭВМ, в том числе в персональных компьютерах. ASCII – это семиразрядный код, обеспечивающий 128 различных битовых комбинаций. Стандартный знакогенератор современного персонального компьютера IBM PC имеет 8-битовую кодировку символов, состоящую из двух таблиц кодирования: базовой и расширенной. Базовая таблица построена по стандарту ASCII и одинакова для всех IBM-совместимых компьютеров. Расширенная относится к символам с номерами от 128 до 255 и может отличаться на компьютерах разного типа (рис.5.1). Первые 32 кода базовой таблицы, начиная с нулевого, отданы производителям аппаратных средств (в первую очередь производителям компьютеров и печатающих устройств). В этой области размещаются так называемые управляющие коды, которым не соответствуют никакие символы языков, и соответственно эти коды не выводятся ни на экран, ни на устройства печати, но они могут управлять тем, как производится вывод прочих данных. Начиная с 32 кода по код 127 размещены коды символов английского алфавита, знаков препинания, цифр, арифметических действий и некоторых вспомогательных символов. В расширенной таблице стандартной кодировки фирмы IBM три смежные колонки (коды 176…223) занимают символы псевдографики, колонки с кодами от 128 до 175 и от 224 до 239 используются для размещения некоторых символов национальных алфавитов различных европейских языков, а последняя колонка (коды 240…255) для размещения специальных знаков. С учетом этого расположения символов разрабатывается подавляющее большинство программ зарубежного производства. 032 00 048 064 0 080 096 112 Р ` р 00 128 144 160 176 192 208 224 240 00 ζ É á │││ └ ╜ α ≡ 00 01 ! 1 А Q a q 01 01 ü æ İ ▌▌▌ ┴ ┬ β 02 « 2 B R b r 02 02 ė Α ó █ ┬ ╥ Γ ≤ 02 03 # З С S c s 03 03 â ô ú │ │ ╙ ∏ ≥ 03 04 $ 4 D T d t 04 04 ä ö ñ ┤ ─ ╘ ∑ ⌠ 04 05 % 5 E U e u 05 05 á ó Ñ ┤ ┼ ┌ σ ⌡ 05 06 & 6 F V f v 06 06 å û ╢ ╞ ╔ μ ÷ 06 07 ` 7 G W g w 07 07 с ù ╖ ╟ ╫ Ґ ≈ 07 08 ( 8 H X h x 08 08 ê ÿ ¿ ┐ ╙ ╪ 09 ) 9 I Y i y 09 09 ë Ö ⌐ ╣ ╓ ┘ θ ∙ 09 10 ` : J Z j z 10 10 è Ü ¬ ║ ╩ ┌ Ω ∙ 10 11 + ; K [ k { 11 11 ï څ 1/2 ╗ ╦ █ Ỗ √ 11 12 , < L \ l | 12 12 î ₤ 1/4 ╝ ╠ ▄ n 12 13 - = M ] m } 13 13 ì ╜ ═ ▌ х 13 14 . > N ˆ n ─ 14 14 Ä « ╛ ╬ ▐ Є ■ 14 15 / ? О ─ о 15 15 Å » ┐ ╧ ▀ П 01 08 15 а) б) Рис1. Стандартная кодировка фирмы IBM: а) для кодов 1…127; б) для кодов 128…255 Для представления букв русского алфавита в рамках ASCII первоначально был разработан ГОСТ-овский вариант кодировки – КОИ-7 (код обмена информацией 7- битный). Расположение символов во второй половине таблицы этой кодировки резко отличается от принятого фирмой IBM, что затрудняет использование зарубежного программного обеспечения на отечественных ЭВМ. В связи с этим он практически не применяется, а на отечественных ПК введена так называемая ГОСТ - альтернативная кодировка, главное достоинство которой – расположение символов псевдографики на тех же местах, что и в кодировке IBM (рис.2). 128 144 160 176 192 208 224 240 00 А Р а ▌ └ ╜ р ≡ 00 01 Б С б ▌▌ ┴ ┬ с ± 01 02 В Т в ██ ┬ ╥ т ≥ 02 03 Г У г │ │ ╙ у ≤ 03 04 Д Ф д ┤ ─ ╘ ф ⌠ 04 05 Е Х е ┤ ┼ ┌ х ⌡ 05 06 Ж Ц ж ╢ ├ ╓ ц ÷ 06 07 З Ч з ╖ ╟ ╫ ч ≈ 07 08 И Ш и ╕ ╚ ╪ ш 09 Й Щ й ╣ ╔ ⌡ щ ∙ 09 10 К Ъ к ║ ╩ ъ ∙ 10 11 Л Ы л ╗ ╦ ы √ 11 12 М Ь м ╝ ╠ ь n 12 13 Н Э н ╜ ▌ э k 13 14 О Ю о ╛ ╬ ▐ ю ■ 14 15 П Я п ┐ ╧ ▀ я 08 15 Рис.2 ГОСТ - альтернативная кодировка В настоящее время находят широкое применение и другие виды кодировки. Так, в связи с массовым распространением операционных систем и других продуктов компании Microsoft в нашей стране нашла применение кодировка символов русского языка, известная как кодировка Windows – 1251 (рис.5.3). 128 Ђ 144 ђ 160 176 ° 192 А 208 Р 224 а 240 р 129 Ѓ 145 ‘ 161 Ў 177 ╧ 193 Б 209 С 225 б 241 с 130 , 146 ’ 162 ў 178І 194 В 210 Т 226 в 242 т 131 ѓ 147 “ 163 J 179 i 195 Г 211 У 227 г 243 у 132 ,, 148 ” 164 ¤ 180 ґ 196 Д 212 Ф 228 г 244 ф 133 … 149 • 165 ґ 181 μ 197 Е 213 Х 229 е 245 х 134 † 150 – 166 ¦ 182 ¶ 198 Ж 214 Ц 230 ж 246 ц 135 ‡ 151 — 167 § 183 · 199 З 215 Ч 231 з 247 ч 136 € 152 ~ 168 Ё 184 ё 200 И 216 Ш 232 и 248 ш 137 ‰ 153 тм 169 © 185 № 201 Й 217 Щ 233 й 249 щ 138 Љ 154 љ 170 186 є 202 К 218 Ъ 234 к 250 ъ 139 ‹ 155 › 171 « 187 » 203 Л 219 Ы 235 л 251 ы 140 Њ 156 њ 172 — 188 j 204 М 220 Ь 236 м 252 ь 141 Ќ 157 ќ 173 – 189 S 205 Н 221 Э 237 н 253 э 142 Ћ 158 ћ 174 ® 190 s 206 О 222 Ю 238 о 254 ю 143 Џ 159 џ 175 Ї 191 ї 207 П 223 Я 239 п 255 я Рис.3. Кодировка Windows – 1251 Эта кодировка используется на большинстве персональных компьютеров, работающих на платформе Windows. Другая распространенная кодировка носит название КОИ-8 (код обмена информацией восьмизначный) (рис.5.4) её происхождение относится ко временам действия Совета Экономической Взаимопомощи государств Восточной Европы. Сегодня кодировка КОИ-8 имеет широкое распространение в компьютерных сетях на территории России и в некоторых службах российского сектора Интернета. В частности, в России она де-факто является стандартной в сообщениях электронной почты и телеконференций. 128 144▌▌▌ 160— 176 ├ 192 ю 208 п 224 Ю 240 П 129 | 145 █ 161 Ё 177 ├ 193 а 209 я 225 А 241 Я 130 ┌ 146 █ 162 ┌ 178 ┤ 194 б 210 р 226 Б 242 Р 131 ┐ 147 ⌠ 163 ё 179 Ё 195 ц 211 с 227 Ц 243 С 132 └ 148 ▄ 164 ┌ 180 ┤ 196 д 212 т 228 Д 244 Т 133 ┘ 149 . 165 ┌ 181 ┤ 197 е 213 у 229 Е 245 У 134 ├ 150 √ 166 ┐ 182 ┬ 198 ф 214 ж 230 Ф 246 Ж 135 ┤ 151 ≈ 167 ┐ 183 ┬ 199 г 215 в 231 Г 247 В 136 ┬ 152 ≤ 168 ┐ 184 ┬ 200 х 216 ь 232 Х 248 Ь 137 ┴ 153 ≥ 169 └ 185 ┴ 201 и 217 ы 233 И 249 Ы 138 + 154 170 └ 186 ┴ 202 й 218 з 234 Й 250 З 139 ─ 155 ⌡ 171 ┘ 187 ┴ 203 к 219 ш 235 К 251 Ш 140 ─ 156 ∙ 172 ┘ 188 ┼ 204 л 220 э 236 Л 252 Э 141 ▀ 157 ² 173 ┘ 189 ┼ 205 м 221 щ 237 М 253 Щ 142 ▌ 158 . 174 ┘ 190 + 206 н 222 ч 238 Н 254 Ч 143 ▌ 159 ÷ 175 ├ 191 ё 207 о 223 ъ 239 О 255 Ъ Рис.4. Кодировка КОИ-8 В последнее время всё большее распространение получает универсальная система кодирования текстовых данных – UNICODE. В данной системе символы кодируются не восьмиразрядными двоичными числами, а 16разрядными числами. Шестнадцать разрядов позволяют обеспечить уникальные коды для 65536 различных символов – этого достаточно для размещения в одной таблице всех широко употребляемых языков. В отличие от символьной для десятичной цифровой информации при байтовой организации в целях экономии памяти и удобства обработки используют специальные форматы кодирования десятичных чисел – зонный и упакованный. При этом десятичные числа рассматриваются как десятичные со знаком, имеющие переменную длину. В упакованном формате для каждой десятичной цифры отводится по 4 двоичных разряда (полбайта), при этом знак числа кодируется в крайнем правом полубайте числа (1100 – знак «+» и 1101 – знак «-«). Структура поля упакованного формата: цф цф цф байт цф … цф байт знак байт Упакованный формат применяется обычно в ЭВМ при выполнении операций сложения и вычитания двоично-десятичных чисел. В зонном (распакованном) формате для каждой десятичной цифры отводится по целому байту, при этом старшие полубайты (зона) каждого байта (кроме самого младшего) в ПК заполняются кодом 0011, а в младших (левых) полубайтах обычным образом кодируются десятичные цифры. Старший полубайт (зона) самого младшего (правого) байта используется для кодирования знака числа. Структура поля распакованного формата: зона байт цф зона цф … байт зона цф байт зона цф байт Распакованный формат применяется в ЭВМ при вводе-выводе информации в ЭВМ, а так же при выполнении операций умножения и деления двоично-десятичных чисел. Пример: Число -28310= -0010 1000 00112-10 в ЭВМ будет: В упакованном формате 0010 1000 0011 1101 В распакованном формате 0011 0010 0011 1000 1101 0011 Представление графической информации. Современные компьютерные системы способны обрабатывать не только простейшие текстовые и цифровые данные. Они позволяют работать также с изображениями и с аудиои видеоинформацией. В отличие от методов представления символьной и числовой информации, для представления изображений, аудио- и видеоинформации пока не существует общепризнанных стандартов. Наиболее распространенные из существующих методов представления изображений можно разделить на две большие категории: растровые методы и векторные методы. При растровом методе изображение представляется как совокупность точек, называемых пикселями (pixel – сокращение от hicture element – элемент изображения). Поскольку линейные координаты и индивидуальные свойства каждой точки (яркость) можно выразить с помощью целых чисел, то можно сказать, что растровое кодирование позволяет использовать двоичный код для представления графических данных. Общепринятым на сегодняшний день считается представление черно-белых иллюстраций в виде комбинации точек с 256 градациями серого цвета, и, таким образом, для кодирования яркости любой точки обычно достаточно восьмиразрядного двоичного числа. Для кодирования цветных графических изображений применяется принцип декомпозиции произвольного цвета на основные составляющие. В качестве таких составляющих используют три основных цвета: красный (Red, R), зеленый (Green, G ) и синий (Blue.B). На практике считается, что любой цвет, видимый человеческим глазом, можно получить путем механического смешения этих трех основных цветов. Такая система кодирования называется системой RGB (по первым буквам названий основных цветов). Если для кодирования яркости каждой из основных составляющих использовать по 256 значений (восемь двоичных разрядов), как это принято для полутоновых черно-белых изображений, то на кодирование цвета одной точки надо затратить 24 разряда (рис.5) 24 бит Красный Зеленый Синий 8 бит 8 бит 8 бит Рис.5 Кодирование цветного изображения При этом система кодирования обеспечивает однозначное определение 16,5 миллионов различных цветов, что близко к чувствительности человеческого глаза. Режим представления цветной графики с использованием 24 двоичных разрядов называют полноцветным (True Color). Графические файлы, в которых применяется цветовая система RGB, представляют каждый пиксель в виде цветового триплера – трех числовых величин (R, G, B), соответствующих интенсивностям красного, зеленого и синего цветов (рис.6). Рис.6 Цветовая схема RGB Для 24-битового цвета триплетом (0, 0, 0) обычно представляется черный цвет, а триплетом (255, 255, 255) – белый. Если все три величины RGB имеют одинаковые значения, например (63, 63, 63), (127, 127, 127) или (191, 191, 191), то результирующим будет один из оттенков серого цвета. Кроме RGB, другими популярными системами кодирования цветных изображений являются CMY и HSB. CMY (Cyan-Madenta-Yellow – голубой-пурпурный-желтый) – цветовая система, применяемая для получения цветных изображений на белой поверхности. Эта система используется в большинстве устройств вывода, таких как лазерные и струйные принтеры, когда для получения твердых копий краски наносятся на белую бумагу. При освещении каждый из трех основных цветов поглощает дополняющий его цвет: голубой цвет поглощает красный, пурпурный – зеленый, а желтый – синий. Например, если увеличить количество желтой краски, то интенсивность синего цвета в изображении уменьшится. Новые цвета в системе CMY получают вычитанием цветовых составляющих из белого цвета. Они имеют длину волны отраженного света, не поглощенного основными цветами CMY. Например, в результате поглощения голубого и пурпурного цветов образуется желтый, т.е. можно сказать, что желтый цвет является результатом «вычитания» из отраженного цвета голубой и пурпурной составляющих. Если все составляющие CMY будут вычтены (или поглощены), то результирующим цветом станет черный. На практике же получить идеальный черный цвет без дорогостоящих красителей в системе CMY весьма сложно. Существует более практичный вариант CMY – система CMYK, в которой символ К означает черный цвет. Введение в эту цветовую систему черного цвета в качестве независимой основной цветовой переменной позволяет использовать недорогие красители. Систему CMYK часто называют четырехцветной, а результат ее применения – четырехцветной печатью. Во многих моделях точка, окрашенная в составной цвет, группируется из четырех точек, каждая из которых окрашена в один из основных цветов CMYK. Данные в системе CMYK представляются либо цветовым триплетом RGB, либо четырьмя величинами. Если данные представлены цветовым триплетом, то отдельные цветовые величины противоположны величинам RGB. Так, для 24-битового пиксельного значения триплет (255, 255, 255) соответствует черному цвету, а триплет (0, 0, 0) – белому. Однако в большинстве случаев для представления цветов в системе CMYK используется последовательность четырех величин. Как правило, четыре цветовые составляющие CMYK задаются в процентах в диапазоне от 0 до 100. Модель HSV (Hue, Saturation, Value – оттенок, насыщенность, величина) – одна из многих цветовых систем, в которых при представлении новых цветов не смешивают основные цвета, а изменяют их свойства. Оттенок – это «цвет» в общеупотребительном смысле этого слова, например красный, оранжевый, синий и т.д. Насыщенность (так же называемая цветностью) определяется количеством белого в оттенке. В полностью насыщенном (100%) оттенке не содержится белого, такой оттенок считается чистым. Частично насыщенный оттенок светлее по цвету. Красный оттенок с 50%-ной насыщенностью соответствует розовому. Величина (также называемая яркостью) определяет интенсивность свечения цвета. Оттенок с высокой интенсивностью является очень ярким, а с низкой – темным. Модель HSV напоминает принцип, используемый художниками для получения нужных цветов – смешивание белой, черной и серой с чистыми красками для получения различных тонов и оттенков (tint, shаde, lone). Оттенок tint является чистым, полностью насыщенным цветом, смешанным с белым, а оттенок shаde – полностью насыщенным цветом, смешанным с черным. Тон (lone) – это полностью насыщенный цвет, к которому добавлены черный и белый цвета (серый). Если рассматривать систему HSV с точки зрения смеси этих цветов, то насыщенность будет представлять собой количество белого, величина – количество черного, а оттенок – тот цвет, к которому добавляются белый и черный. Режим, когда для кодирования цвета каждой точки используется 32 двоичных разряда, также называется полноцветным (True Color). Если уменьшить количество двоичных разрядов, используемых для кодирования цвета каждой точки, то можно сократить объем данных, но при этом диапазон кодируемых цветов заметно сокращается. Кодирование цветной графики 16-разрядными двоичными числами называют режимом High Color. При кодировании информации о цвете с помощью восьми бит данных можно передать только 256 цветовых оттенков. Такой метод кодирования цвета называют индексным. Смысл названия состоит в том, что, поскольку 256 значений недостаточно, чтобы передать весь диапазон цветов, доступный человеческому глазу, код каждой точки растра выражает не цвет сам по себе, а только его номер (индекс) в справочной таблице, называемой палитрой. Эта палитра прикладывается к графическим данным. Одним из недостатков растровых методов является трудность пропорционального изменения размеров изображения до произвольно выбранного значения. В сущности, единственный способ увеличить изображение - это увеличить сами пиксели. Однако это приводит к появлению зернистости – пикселизации. Векторные методы позволяют избежать проблем масштабирования, характерных для растровых методов. В этом случае изображение представляется в виде совокупности линий и кривых. Вместо того чтобы заставлять устройство воспроизводить заданную конфигурацию пикселей, составляющих изображение, ему передается подробное описание того, как расположены образующие изображение линии и кривые. На основе этих данных устройство, в конечном счете, и создает готовое изображение. С помощью подобной технологии описываются различные шрифты, поддерживаемые современными принтерами и мониторами. Они позволяют изменять размер символов в широких пределах и по этой причине получили название масштабируемых шрифтов. Например, технология True Type, разработанная компаниями Microsoft и Apple Computer, описывает способ отображения символов в тексте. Для подобных целей предназначена и технология Post Script (разработка компании Adobe System), позволяющая описывать способ отображения символов, а так же других, боле общих графических данных. Векторные методы так же широко применяются в автоматизированных системах проектирования, которые отображают на экране мониторов чертежи сложных трехмерных объектов и предоставляют средства манипулирования ими. Однако векторная технология не позволяет достичь фотографического качества изображений объектов как при использовании растровых методов. Представление звуковой информации. Развитие аппаратной базы современных компьютеров параллельно с развитием программного обеспечения позволяет сегодня записывать и воспроизводить на компьютерах музыку и человеческую речь. Существуют два способа звукозаписи: Цифровая запись, при которой реальные звуковые волны преобразуются в цифровую информацию путем измерения звука тысячи раз в секунду; MIDI-запись, при которой, вообще говоря, записывается не реальный звук, а определенные команды- указания (какие клавиши надо нажимать, например, на синтезаторе). MIDI-запись является электронным эквивалентом записи игры на фортепиано. Для того чтобы можно было воспользоваться первым указанным способом, в компьютере должна быть звуковая карта (плата). Звук представляет собой звуковую волну с непрерывно меняющейся амплитудой (сила, интенсивность звука) и частотой (высота тона звука). Частота волны (количество «волн» в секунду) измеряется в герцах (Гц). Чем больше амплитуда сигнала, тем громче звук, чем больше частота сигнала, тем выше тон. Человек воспринимает звуковые волны с частотой из диапазона от 20 Гц до 20 000 Гц. Для того чтобы компьютер мог обрабатывать звук, непрерывный звуковой сигнал должен быть превращен в цифровую последовательность, состоящую из нулей и единиц. Данную функцию выполняет специальный блок, входящий в состав звуковой карты и называемый аналого-цифровым преобразователем (АЦП). Рис 7 Реальные звуковые волны АЦП производит дискретизацию звукового сигнала по времени путем измерения уровня интенсивности звука несколько тысяч раз в секунду (через равные промежутки времени). Частота, с которой производят измерения звукового сигнала, называется частотой дискретизации. Например, при записи музыкальных компактдисков используют частоту дискредитации 44 кГц, а при записи речи вполне достаточно частоты дискредитации 8 кГц. В результате дискретизации амплитуды звукового сигнала непрерывная зависимость амплитуды от времени А (t) заменяется на дискретную последовательность стандартных (заранее определенных) уровней громкости. Графически это выглядит как замена гладкой кривой на последовательность «ступенек». Рис 8 Дискретизация амплитуды звукового сигнала Таким образом, в ходе оцифровки звука мы получаем поток целых чисел, представляющих собой номера стандартных амплитуд сигналов. Получившиеся значения записываются в виде 0 и 1 в память компьютера (в файлы с расширением WAV). Аналоговый электрический сигнал (запись на грампластинке, магнитной ленте) теоретически представляет собой точную копию исходной звуковой волны, а цифровой код – лишь более или менее точное приближение. Тем не менее, цифровая запись имеет множество преимуществ. Так, например, цифровые копии всегда идентичны цифровым оригиналам, а это значит, что записи можно контролировать много раз без ухудшения качества. При воспроизведении записанного в компьютерный файл звука имеет место обратное преобразование; из дискретной цифровой формы – в непрерывную аналоговую. Это преобразование осуществляет устройство, находящееся на звуковой плате и называемое цифро-аналоговый преобразователь (ЦАП). Хранение звука в виде цифровой записи занимает достаточно много места в памяти компьютера. В качестве примера оценим объем файла, в котором хранится стерео-аудио звучание длительностью 1 секунда. При этом при оцифровке звука использовалось 65 536 стандартных уровней звука (для хранения номера уровня требуется 16 бит), а частота дискредитации равна 48 кГц. Следовательно, для хранения в компьютере 1 секунды требуется: 16 бит *48 000*2 = 1 536 000 бит = 192 000 байт = 187,5 Кб. Умножение на коэффициент 2 связано с тем, что хранится стереозвук. MIDI-запись была разработана в начале 80-х годов ХХ века (MIDI – Musical Instrument Digital Interfase – интерфейс цифровых музыкальных инструментов). MIDI- информация представляет собой команды, а не звуковую волну. Эти команды – инструкции синтезатору. В качестве команды музыкальному синтезатору может передаваться указание нажать или отпустить определенную клавишу, изменить высоту или тембр звучания, изменить силу давления на клавиатуру, включить или выключить полифонический режим и т.п. MIDI-команды делают запись музыкальной информации более компактной, чем цифровая запись. Однако для записи MIDI-команд вам потребуется устройство, имитирующее клавишный синтезатор, которое воспринимает MIDI-команды и при их получении может генерировать соответствующие звуки. Из всех видов информации, представляемых и обрабатываемых в компьютерах, звуковая информация хуже всего поддается упаковке. Это связано с тем, что звуковые сигналы обладают малой избыточностью (в частности, в закодированных звуковых фрагментах редко появляются повторяющиеся последовательности байтов). Объем звуковых файлов можно сжать в два раза с помощью метода компандирования ( от англ. Compound – состав, составление). Этот метод основан на том, что фактически мы «слышим» логарифм громкости, а не саму громкость. Поэтому при компандировании значение амплитуды звука заменяется на логарифм этого значения. Абсолютная величина амплитуды при 8-битовом кодировании звука не превосходит 2 в седьмой степени, значит логарифм по основанию. Раздел 2. Архитектура и принципы работы основных логических блоков ЭВМ Тема 2.1. Логические основы ЭВМ, элементы и узлы Логические основы ЭВМ Любая цифровая вычислительная машина состоит из логических схем - таких схем, которые могут находиться только в одном из двух возможных состояний либо "логический ноль", либо "логическая единица". За логический 0 и логическую 1 можно принять любое выражение, в том числе и словесное, которое можно характеризовать как "истина" и "ложь". В вычислительной технике логические 0 и 1 это состояние электрических схем с определенными параметрами. Так, для логических элементов и схем, выполненных по технологии транзисторно-транзисторной логики (ТТЛ-схемы), логический 0 - это напряжение в диапазоне 0 … + 0,4 В, а логическая 1 это напряжение в диапазоне + 2,4 … + 5 В [1]. Работа логических схем описывается посредством специального математического аппарата, который называется логической (булевой) алгеброй или алгеброй логики. Булева алгебра была разработана Джорджем Булем (1815 - 1864 гг.), она является основой всех методов упрощения булевых выражений. Логические переменные и логические функции - это такие переменные и функции, которые могут принимать только два значения - либо логический 0, либо логическая 1. Основные логические функции и элементы Логический элемент - графическое представление элементарной логической функции. Логическое умножение (конъюнкция) - функция И Рассмотрим ключевую схему представленную на рис. 1,а. Примем за логический 0 [2]: на входе схемы разомкнутое состояние соответствующего ключа, например, ; на выходе схемы ( ) - такое ее состояние, когда через сопротивление R ток не протекает. Таблица истинности - это таблица, содержащая все возможные комбинации входных логических переменных и соответствующие им значения логической функции. Рис. 1. Трёх-входовой логический элемент И Таблица истинности для логической схемы, представленной на рис. 1,б, состоит из 8 строк, поскольку данная схема имеет три входа - , и . Каждая из этих логических переменных может находиться либо в состоянии логического 0, либо логической 1. Соответственно количество сочетаний этих переменных равно . Очевидно, что через сопротивление R ток протекает только тогда, когда замкнуты все три ключа - и , и , и . Отсюда еще одно название логического умножения логический элемент И. В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 1,в. Правило логического умножения :если на вход логического элемента И подается хотя бы один логический 0, то на его выходе будет логический 0. Уровень логического 0 является решающим для логического умножения . В логических выражениях применяется несколько вариантов обозначения логического умножения. Так, для приведенного на рис.1,в трёх-входового элемента И, логическое выражение можно представить в виде: либо , но при этом из контекста должно быть ясно, что данное умножение именно логическое; либо ; либо - с использованием знака конъюнкции; либо , но при этом из контекста должно быть ясно, что между переменными , и производится логическое умножение. Логическое сложение (дизъюнкция) - функция ИЛИ Рассмотрим ключевую схему, представленную на рис.2,а. Таблица истинности для данной логической схемы (рис.2,б) состоит из 4 строк, поскольку данная схема имеет два входа и . Количество сочетаний этих переменных равно . Очевидно, что через сопротивление R ток протекает тогда, когда замкнуты или , или . Отсюда еще одно название логического сложения логическое ИЛИ. В логических схемах соответствующий логический элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 2,в. Рис. 2. Логический элемент ИЛИ на два входа Правило логического сложения: если на вход логического элемента ИЛИ подается хотя бы одна логическая , то на его выходе будет логическая 1. Для логического сложения решающим является уровень логической 1. В логических выражениях применяется два варианта обозначения логического сложения. Так, для приведенного двух-входового элемента ИЛИ, логическое выражение можно представить в виде: либо , но при этом из контекста должно быть ясно, что данное сложение именно логическое; либо - с использованием знака дизъюнкции. Логическое отрицание (инверсия) - функция НЕ Рассмотрим ключевую схему, представленную на рис. 1.3,а. Таблица истинности для данной схемы (рис. 1.3,б) самая простая и состоит всего из 2 строк, поскольку она (единственная из всех логических элементов) имеет только один вход - . Количество вариантов для единственной логической переменной равно . Очевидно, что через сопротивление R ток протекает ( ) тогда, когда не замкнут, т.е. . Еще одно название этой логической функции - отрицание, а соответствующий логический элемент называется инвертором. В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 3,в. Поскольку он имеет только один вход, в его обозначении допустимым является и знак логического сложения, и знак логического умножения. Рис. 3. Логический элемент НЕ Правило инверсии: проходя через инвертор, сигнал меняет свое значение на противоположное. В логических выражениях применяется единственный вариант обозначения инверсии: К основным логическим элементам относятся еще два элемента, которые являются комбинацией элементов И, ИЛИ и НЕ: элемент И-НЕ и ИЛИ-НЕ. Логическая функция и элемент И-НЕ Данная функция производит логическое умножение значений входных сигналов, а затем инвертирует результат этого умножения. В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 4,а. Таблица истинности приведена на рис. 4,б. Рис. 4. Логический элемент И-НЕ на три входа Если на вход логического элемента И-НЕ подается хотя бы один логический 0, то на его выходе будет логическая 1. В логических выражениях применяются обозначения: либо , но при этом из контекста должно быть ясно, что данное умножение именно логическое; либо ; либо ; либо . Логическая функция и элемент ИЛИ-НЕ В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 5,а. Таблица истинности приведена на рис.5,б. Если на вход логического элемента ИЛИ-НЕ подается хотя бы одна логическая 1, то на его выходе будет логический 0.В логических выражениях применяются обозначения: либо , но при этом из контекста должно быть ясно, что данное сложение именно логическое; либо . Рис. 5. Логический элемент ИЛИ-НЕ на два входа Логические схемы Составление таблиц истинности для логических схем Для логических схем, представляющих собой соединение нескольких логических элементов, в левой части таблицы перечисляются все возможные комбинации входных сигналов, а в правой части - соответствующие значения на выходе логической схемы. Очевидно, что левые части таблицы будут одинаковыми для всех функций двух переменных, для всех функций трёх переменных и т.д. Традиционно комбинации сигналов в них располагают в порядке возрастания соответствующих двоичных кодов. На рис. 6 приведен пример логической схемы и таблица истинности, полностью описывающая ее работу. Рис. 6. Логическая схема и соответствующая ей таблица истинности Вероятность ошибки уменьшается, если не решать задачу "в лоб", а проанализировать её работу с точки зрения уже известных нам правил логического сложения, умножения и инверсии. Очевидно, что в рассматриваемой схеме осуществляется логическое сложение нескольких логических произведений [3]. Можно записать логическое выражение, соответствующее данной схеме: ( 1) Булево выражение в виде суммы произведений называется дизъюнктивно нормальной формой (ДНФ). Булево выражение в виде произведения сумм называется конъюнктивной нормальной формой (КНФ). По правилу логического сложения выражение (1.1) имеет на выходе логическую 1 только в том случае, если равно 1 хотя бы одно из четырех произведений, входящих в сумму. По правилу логического умножения каждое произведение будет равно 1 только в том случае, когда все входящие в произведение переменные равны 1. Рассмотрим все эти возможности отдельно и по порядку. Произведение будет равно 1 только тогда, когда будет выполняться условие: и ,и . При этом от значений остальных входных переменных и - значение данного произведения не зависит. Поэтому логические 1 будут в строках, соответствующих полным произведениям , в которых , а переменные и перечисляются во всех четырех возможных комбинациях: , , и . Произведение будет равно 1 только тогда, когда будет выполняться условие: и (т.е. ), и , и . От значения не вошедшей в данное произведение переменной произведение не зависит. Поэтому логические 1 будут в строках таблицы истинности, соответствующих полным произведениям , в которых и одновременно , а переменная перечисляется во всех двух возможных комбинациях: . Произведение будет равно 1 только тогда, когда будет выполняться условие: и (т.е. ), и , и . От значения не вошедшей в данное произведение переменной произведение не зависит. Поэтому логические 1 будут в строках таблицы истинности, соответствующих полным произведениям , в которых и одновременно , а переменная перечисляется во всех двух возможных комбинациях: . Произведение будет равно 1 только тогда, когда будет выполняться условие: и (т.е. ), (т.е. ), и и . Поэтому логическая 1, соответствующая данному полному произведению всех переменных, будет только в той строке таблицы истинности, где . Анализ всех этих возможностей показывает, что они могут совпадать для нескольких произведений. Например, комбинация входных переменных 0011 встречается в произведениях и . А сочетание встречается даже в трех произведениях: и в ив ,ив . Это говорит о том, что для данного логического выражения есть возможности минимизации.Правила минимизации рассматриваются в лекции 2. Ключевые термины ДНФ - дизъюнктивно-нормальная форма - представление логического выражения в виде суммы произведений. Инверсия - операция НЕ- логическое действие, при котором появление хотя бы одного логического нуля на входе даёт логическую единицу на выходе. Инвертор - логический элемент, реализующий операцию НЕ. КНФ конъюктивно-нормальная форма - представление логического выражения в виде произведения сумм. Логическая переменная - переменная, значение которой может быть равно либо логическому нулю, либо логической единице. Логическая схема - схема, состоящая из логических элементов. Логическая функция - функция, включающая в себя логические переменные, значение которой может быть равно либо логическому нулю, либо логической единице. Логический элемент - графическое представление элементарной логической функции. Логическое отрицание - операция НЕ, инверсия - логическое действие, при котором происходит изменение состояния на противоположное. Логическое сложение - операция ИЛИ, дизъюнкция - логическое действие, при котором появление хотя бы одной логической единицы на входе даёт логическую единицу на выходе. Логическое умножение - операция И, конъюнкция - логическое действие, при котором появление хотя бы одного логического нуля на входе даёт логический нуль на выходе. Таблица истинности - таблица, содержащая все возможные комбинации входных логических переменных и соответствующие им значения логической функции. Краткие итоги Любая цифровая вычислительная машина состоит из логических схем. Логические схемы, в свою очередь, состоят из логических элементов. Самыми простыми логическими элементами являются элементы И, ИЛИ и НЕ. Им соответствуют функции логического умножения, сложения и инверсии. Набор для практики Вопросы для самопроверки 1. Нарисуйте элементы И на два, четыре и пять входов, составьте для каждого из них таблицу истинности, напишите соответствующее каждому элементу логическое выражение. 2. Нарисуйте элементы ИЛИ на три, четыре и пять входов, составьте для каждого из них таблицу истинности, напишите соответствующее каждому элементу логическое выражение. 3. Нарисуйте элементы И-НЕ на два, четыре и пять входов, составьте для каждого из них таблицу истинности, напишите соответствующее каждому элементу логическое выражение. 4. Нарисуйте элементы ИЛИ-НЕ на три, четыре и пять входов, составьте для каждого из них таблицу истинности, напишите соответствующее каждому элементу логическое выражение. 5. Какой уровень сигнала является решающим для логического сложения? для логического умножения? для функции И-НЕ? для функции ИЛИ-НЕ? 6. Что такое таблица истинности? 7. Сколько строк в таблице истинности для 5-входовой логической схемы? для 4входовой? для 2-входовой? 8. Функция скольких переменных описывается таблицей истинности длиной 4 строки? 64 строки? 512 строк? Логические узлы ЭВМ и их классификация Тема 2.2. Основы построения ЭВМ Этапы развития ЭВМ Развитие электронных вычислительных машин (ЭВМ) можно условно разбить на несколько этапов (поколений), которые имеют свои характерные особенности. Первый этап (ЭВМ первого поколения) — до конца 1950-х гг. Точкой отсчета эры ЭВМ считают 1946 г., когда был создан электронный цифровой компьютер – ENIAK (Electronic Numerical Integrator and Computer), созданный Джоном Моучли и Преспером Эккертом. Первая ЭВМ содержала 18000 электронных ламп, ее энергопотребление составляло 150 кВт. Вычислительные машины этого поколения строились на электронных лампах, потребляющих огромное количество электроэнергии и выделяющих много тепла. Числа в ЭВМ вводились с помощью перфокарт и набора переключателей, а программа задавалась соединением гнезд на специальных наборных платах. Производительность такой гигантской ЭВМ была ниже, чем современного калькулятора. Широкому использованию этих ЭВМ препятствовали также низкая надежность, ограниченность их ресурсов и чрезвычайно трудоемкий процесс подготовки, ввод и отладка программ, написанных на языке машинных команд. Основными их пользователями были ученые, решавшие наиболее актуальные научно-технические задачи, связанные с развитием реактивной авиации, ракетостроения и т. д. Среди известных отечественных машин первого поколения необходимо отметить БЭСМ-1, «Стрела», «Урал», М-20. Характеристики ЭВМ первого поколения (на примере БЭСМ-1, 1953 г.): емкость памяти — 2048 слов; быстродействие — от 7000 до 8000 опер./с; разрядность — 39 разрядов; арифметика — двоичная с плавающей запятой; система команд — трехадресная; устройство ввода — перфолента; количество электронных ламп в аппаратуре — около 4000; внешние запоминающие устройства — барабаны на 5120 слов; магнитная лента — до 120 000 слов; вывод на быструю цифровую печать — 300 строк в минуту. Отечественная ЭВМ М-20 (20 тыс. опер./с) была одной из самых быстродействующих машин первого поколения в мире. Основной режим использования ЭВМ первого поколения состоял в том, что математик, составивший программу, садился за пульт управления ЭВМ и производил необходимые вычисления. Чаще всего работа за пультом была связана с отладкой своей собственной программы — наиболее длительным по времени процессом. При этом уровень математика-программиста определялся его умением быстро находить и исправлять ошибки в своих программах, хорошо ориентироваться за пультом ЭВМ. В этот период началась интенсивная разработка средств автоматизации программирования, создание входных языков разных уровней, систем обслуживания программ, упрощающих работу на ЭВМ и увеличивающих эффективность ее использования. Второй этап (ЭВМ второго поколения) — до середины 1960-х гг. Развитие электроники привело к изобретению в 1948 г. нового полупроводникового устройства — транзистора, который заменил лампы. Создатели транзистора — сотрудники американской фирмы Bell Laboratories, физики У. Шокли, У. Браттейн и Дж. Бардин за это достижение были удостоены Нобелевской премии. Появление ЭВМ, построенных на транзисторах, привело к уменьшению их габаритов, массы, энергопотребления и стоимости, а также к увеличению их надежности и производительности. Одной из первых транзисторных ЭВМ была созданная в 1955 г. бортовая ЭВМ для межконтинентальной баллистической ракеты ATLAS. Если с технической точки зрения переход к машинам второго поколения четко очерчен переходом на полупроводники, то со структурной точки зрения ЭВМ второго поколения характеризуются расширенными возможностями по вводу-выводу, увеличением емкости запоминающих устройств, развитыми системами программирования. В рамках второго поколения все более четко проявляется разделение ЭВМ на малые, средние и большие, позволившие существенно расширить сферу применения ЭВМ, приступить к созданию автоматизированных систем управления (АСУ) предприятиями, целыми отраслями и технологическими процессами. Стиль использования ЭВМ второго поколения характерен тем, что теперь математик-программист не допускался в машинный зал, а свою программу, обычно за- писанную на языке высокого уровня, отдавал в группу обслуживания, которая занималась дальнейшей обработкой его задачи — перфорированием и пропуском на ЭВМ. Большой вклад в развитие вычислительной техники внес советский конструктор Сергей Александрович Лебедев. С 1951 г. под его руководством была создана первая в СССР ЭВМ – малая электронно-счетная машина. Среди известных отечественных ЭВМ второго поколения необходимо отметить БЭСМ-4, М-220 (200 тыс. опер./с), «Наири», «Мир», «Минск», «Раздан», «Днепр». Наилучшей отечественной ЭВМ второго поколения считается БЭСМ-6, созданная в 1966 г. Она имела основную и промежуточную память (на магнитных барабанах) объемами, соответственно, 128 и 512 Кбайт, быстродействие порядка 1 млн опер./с и довольно обширную периферию (магнитные ленты и диски, графопостроители, разно- образные устройства ввода-вывода). В этот период появились так называемые алгоритмические языки высокого уровня, средства которых допускают описание всей необходимой последовательности вычислительных действий в наглядном, легко воспринимаемом виде. Программа, написанная на алгоритмическом языке, непонятна компьютеру, воспринимающему только язык своих «собственных» машинных команд. Поэтому специальные программы, которые называются трансляторами, переводят программу с языка высокого уровня в машинный код. Появился широкий набор библиотечных программ для решения разнообразных математических задач. Были созданы мониторные системы, управляющие режимом трансляции и исполнения программ. Из мониторных систем в дальнейшем получили развитие современные операционные системы (ОС) – комплексы служебных программ, обеспечивающих лучшее распределение ресурсов ЭВМ при исполнении пользовательских задач. Первые ОС автоматизировали работу оператора ЭВМ, связанную с выполнением задания пользователя: ввод в ЭВМ текста программы, вызов нужного транслятора, вызов необходимых библиотечных программ и т. д. Теперь же вместе с программой и данными в ЭВМ вводится инструкция, где перечисляются этапы обработки и приводится ряд сведений о программе и ее авторе. Затем в ЭВМ стали вводить сразу по нескольку заданий пользователей (пакет заданий), ОС стали распределять ресурсы ЭВМ между этими заданиями — появился мультипрограммный режим обработки. Третий этап (ЭВМ третьего поколения) — до начала 1970-х гг. Элементной базой в ЭВМ третьего поколения являются интегральные схемы. Создание технологии производства интегральных схем, состоящих из десятков электронных элементов, образованных в прямоугольной пластине кремния с длиной стороны не более 1 см, позволило увеличить быстродействие и надежность ЭВМ на их основе, а также уменьшить габариты, потребляемую мощность и стоимость ЭВМ. Машины третьего поколения — это семейство машин с единой архитектурой, т. е. программно-совместимых. Они имеют развитые операционные системы, обладают возможностями мультипрограммирования, т. е. одновременного выполнения нескольких программ. Примеры ЭВМ третьего поколения — семейство IBM-360, IBM-370, PDP-8, PDP-11, отечественные ЕС ЭВМ (единая система ЭВМ), СМ ЭВМ (семейство малых ЭВМ) и др. Быстродействие компьютеров изменяется от нескольких десятков тысяч до миллионов операций в секунду, емкость оперативной памяти достигает нескольких сотен тысяч слов. В этот период широкое распространение получило семейство мини-ЭВМ. Простота обслуживания мини-ЭВМ, их сравнительно низкая стоимость и малые габариты позволили использовать их коллективами исследователей, разработчиками экспериментаторами и т. д., т. е. непосредственно пользователями. В начале 1970-х гг. с термином мини-ЭВМ связывали уже два существенно различных типа средств вычисли- тельной техники: универсальный блок обработки данных и выдачи управляющих сигналов, серийно выпускаемых для применения в различных специализированных системах контроля и управления; универсальную ЭВМ небольших габаритов, проблемно-ориентированную пользователем на решение ограниченного круга задач, – микроЭВМ. В период ЭВМ третьего поколения произошел крупный сдвиг в области применения компьютеров. Если раньше ЭВМ использовались в основном для научно- технических расчетов, то в 1960 – 1970-е гг. все больше места стала занимать обработка символьной информации. Четвертый этап (ЭВМ четвертого поколения) — по настоящее время. Этот этап условно делят на два периода: первый — до конца 1970-х гг. и второй — с начала 1980-х гг. по настоящее время. В первый период успехи в развитии электроники привели к созданию больших интегральных схем (БИС), где в одном кристалле размещалось несколько десятков тысяч электронных элементов. Это позволило разработать ЭВМ, имеющие большие объемы памяти и скорости выполнения команд. Разрабатывались новые ОС, позволяющие программистам отлаживать свои программы прямо за дисплеем ЭВМ, что ускоряло разработку программ. В 1971 г. был изготовлен первый микропроцессор — 4-разрядный Intel 4004 – большая интегральная схема (БИС), в которой полностью размещался процессор ЭВМ простой архитектуры. Стала реальной возможность размещения в одной БИС почти всех электронных устройств несложной по архитектуре ЭВМ. Появились микрокалькуляторы и микроконтроллеры — управляющие устройства, построенные на одной или нескольких БИС, содержащих процессор, память и системы связи с датчиками и исполнительными органами в объекте управления. Программа управления объектами вводилась в память ЭВМ либо при изготовлении, либо непосредственно на предприятии. С появлением микропроцессоров начал развиваться новый класс компьютеров — микроЭВМ. МикроЭВМ подразделяются на несколько подклассов (рис. 1). Рис. 1. Классификация микроЭВМ Многопользовательские ЭВМ — это мощные микрокомпьютеры, оборудованные несколькими видеотерминалами и функционирующие в режиме разделения времени, что позволяет эффективно работать на них сразу нескольким пользователям. Персональные компьютеры (ПК) — однопользовательские микрокомпьютеры, удовлетворяющие требованиям общедоступности и универсальности применения. Рабочие станции (workstation) представляют собой однопользовательские мик- рокомпьютеры, часто специализированные для выполнения определенного вида ра- бот (графических, инженерных, издательских и т. д.). Серверы (server) — многопользовательские мощные микрокомпьютеры в вычислительных сетях, выделенные для обработки запросов от всех рабочих станций сети. Сетевые компьютеры (network computer) — упрощенные микрокомпьютеры, обеспечивающие работу в сети и доступ к сетевым ресурсам, часто специализированные на выполнение определенного вида работ (защита сети от несанкционированного доступа, организация просмотра сетевых ресурсов, электронной почты и т. д.). С точки зрения структуры ЭВМ этого поколения представляют собой много- процессорные и многомашинные комплексы, работающие на общую память и общее поле внешних устройств. Для этого периода характерно широкое применение систем управления базами данных, компьютерных сетей, систем распределенной обработки данных. Второй период четвертого поколения характеризуется улучшением технологии производства БИС, что позволило изготовлять электронные схемы, содержащие миллионы элементов в кристалле, схемы сверхбольшой степени интеграции (СБИС). Перспективные поколения ЭВМ будут характеризоваться оптоэлектроникой с массовым параллелизмом и нейронной структурой — с распределенной сетью большого числа процессоров, моделирующих структуру нейронных биологических систем, произойдет качественный переход от обработки данных к обработке знаний. Принципы фон Неймана Со времени появления в 40-х гг. XX в. первых электронных цифровых вычислительных машин технология их производства была значительно усовершенствована. В последние годы благодаря развитию интегральной технологии существенно улучшились их характеристики. Однако, несмотря на успехи, достигнутые в области технологии, существенных изменений в базовой структуре и принципах работы вычислительных машин не произошло. Так, в основу построения подавляющего большинства современных компьютеров положены общие принципы функционирования универсальных вычислительных устройств, сформулированные американским ученым Джоном фон Нейманом в 1945 году. Согласно фон Нейману, для того чтобы ЭВМ была универсальным и эффективным устройством обработки информации, она должна строиться в соответствии со следующими принципами: 1. Информация кодируется в двоичной форме и разделяется на единицы (элементы) информации, называемые словами. Использование в ЭВМ двоичных кодов продиктовано в первую очередь спецификой электронных схем, применяемых для передачи, хранения и преобразования информации. Как уже отмечалось, в этом случае конструкция ЭВМ предельно упрощается и ЭВМ работает наиболее надежно (устойчиво). Совокупности нолей и единиц (битов информации), используемые для представления отдельных чисел, команд и т. п., рассматриваются как самостоятельные информационные объекты и называют- ся словами. Слово обрабатывается в ЭВМ как одно целое — как машинный элемент информации. 2. Разнотипные слова информации хранятся в одной и той же памяти и различаются по способу использования, но не по способу кодирования. Все слова, представляющие числа, команды и прочие объекты, выглядят в ЭВМ совершенно одинаково и сами по себе неразличимы. Только порядок использования слов в программе вносит различия в них. Благодаря такому «однообразию» слов оказывается возможным использовать одни и те же операции для обработки слов различной природы, например для обработки и чисел, и команд, т. е. команды программы становятся в такой же степени доступными для отработки, как и числа. 3. Слова информации размещаются в ячейках памяти ЭВМ и идентифицируются номерами ячеек, называемыми адресами слов. Структурно основная память состоит из перенумерованных ячеек. Ячейка памяти выделяется для хранения значения величины, в частности константы или команды. Чтобы записать слово в память, необходимо указать адрес ячейки, отведенной для хранения соответствующей величины. Чтобы выбрать слово из памяти (прочитать его), следует опять же указать адрес ячейки памяти, т. е. адрес ячейки, в которой хранится величина или команда, становится машинным идентификатором (именем) величины и команды. Таким образом, единственным средством для обозначения величин и команд в ЭВМ являются адреса, присваиваемые величинам и командам в процессе составления программы вычислений. При этом выборка (чтение) слова из памяти не разрушает информацию, хранимую в ячейке. Это позволяет любое слово, записанное однажды, читать какое угодно число раз, т. е. из памяти выбираются не слова, а копии слов. 4. Алгоритм представляется в форме последовательности управляющих слов, называемых командами, которые определяют наименование операции и слова информации, участвующие в операции. Алгоритм, представленный в терминах машинных команд, называется программой. 5. Выполнение вычислений, предписанных алгоритмом, сводится к последовательному выполнению команд в порядке, однозначно определяемом программой. Первой выполняется команда, заданная пусковым адресом программы. Обычно это адрес первой команды программы. Адрес следующей команды однозначно определяется в процессе выполнения текущей команды и может быть либо адресом следующей по порядку команды, либо адресом любой другой команды. Процесс вычислений продолжается до тех пор, пока не будет выполнена команда, предписывающая прекращение вычислений. Перечисленные принципы функционирования ЭВМ предполагают, что компьютер должен иметь следующие устройства: арифметико-логическое устройство (АЛУ), выполняющее арифметические и логические операции; устройство управления (УУ), которое организует процесс выполнения программы; запоминающее устройство (ЗУ), или память для хранения программ и данных; внешние устройства для ввода (устройства ввода) и вывода (устройства вывода) информации. При рассмотрении компьютерных устройств принято различать их архитектуру и структуру. Под архитектурой ЭВМ понимают ее логическую организацию, состав и назначение ее функциональных средств, принципы кодирования и т. п., т. е. все то, что однозначно определяет процесс обработки информации на данной ЭВМ. ЭВМ, построенные в соответствии с принципами фон Неймана, называют фоннеймановскими, или компьютерами фоннеймановской (классической) архитектуры. Структура ЭВМ – совокупность элементов компьютера и связей между ними. Ввиду большой сложности современных ЭВМ принято представлять их структуру иерархически, т. е. понятие «элемент» жестко не фиксируется. Так, на самом вы- соком уровне сама ЭВМ может считаться элементом. На следующем (программном) уровне иерархии элементами структуры ЭВМ являются память, процессор, устройства вводавывода и т. д. На более низком уровне (микропрограммном) элементами служат узлы и блоки, из которых строятся память, процессор и т. д. Наконец, на самых низких уровнях элементами выступают интегральные логические микросхемы и электронные приборы. Принципы построения компьютеров Основным принципом построения всех современных компьютеров является программное управление. В основе его лежит представление алгоритма решения любой задачи в виде программы вычислений. Все вычисления, предписанные алгоритмом решения задачи, должны быть представлены в виде программы, состоящей из последовательности управляющих слов — команд. Каждая команда содержит указания на конкретную выполняемую операцию, местонахождение (адреса) операндов и ряд служебных признаков. Операнды — переменные, значения которых участвуют в операциях преобразования данных. Для доступа к программам, командам и операндам используются их адреса. В качестве адресов выступают номера ячеек памяти, предназначенных для хранения объектов. Информация кодируется двоичными цифрами «0» и «1». Поэтому различные типы информации, размещенные в памяти, практически не различимы, идентификация их возможна лишь при выполнении программы. Обобщенная структурная схема компьютеров первых поколений представлена на рис. 6.2. В составе схемы имеются устройства ввода информации (УВв), с помощью которых пользователи вводят в компьютер программы решаемых задач и данные к ним. Сначала введенная информация запоминается в оперативном запоминающем устройстве (ОЗУ), а затем переносится во внешнее запоминающее устройство (ВЗУ), предназначенное для длительного хранения информации. Программы и исходные данные УУв ОЗУ АЛУ УВыв ВЗУ УУ Рис. 6.2. Структурная схема компьютеров первого и второго поколений Устройство управления (УУ) предназначается для автоматического выполнения программ путем принудительной координации работы всех устройств ЭВМ. Цепи сигналов управления показаны на рис. 6.2 штриховыми линиями. Вызываемые из ОЗУ команды дешифрируются устройством управления: определяется код операции, который необходимо выполнить, и адреса операндов, принимающих участие в данной операции. Арифметико-логическое устройство (АЛУ) выполняет арифметические и логические операции над данными. Основной частью АЛУ является операционный блок, в состав которого входят сумматоры, счетчики, регистры, логические преобразователи и др. Результаты выполнения отдельных операций сохраняются для последующего использования в одном из регистров АЛУ или записываются в память. Результаты, полученные после выполнения всей программы вычислений, передаются на устройства вывода (УВыв) информации. В качестве УВыв могут использоваться экран дисплея, принтер, графопостроитель и др. В компьютерах третьего поколения произошло усложнение структуры за счет разделения процессов ввода-вывода информации и процесса ее обработки (рис. 3). В структуре имеются устройства: управления обмена информацией (УВВ), каналы ввода-вывода (КВВ). КВВ получили наибольшее распространение применительно к большим ЭВМ. Здесь наметилась тенденция к децентрализации управления и параллельной работе отдельных устройств, что позволило повысить быстродействие компьютеров. ... Процессор УВВ АЛУ УВВ КВВ УУ ОЗУ КВВ ВЗУ ВЗУ ... Рис. 3. Структурная схема компьютера третьего поколения Среди каналов ввода-вывода выделяются мультиплексные каналы, способные обслуживать большое количество медленно работающих устройств ввода-вывода, и селекторные каналы, обслуживающие в монопольных режимах скоростные внешние запоминающие устройства (ВЗУ). В ПЭВМ, относящихся к компьютерам четвертого поколения, произошло дальнейшее изменение структуры (рис. 4). Соединение всех устройств обеспечивается с помощью общей шины, представляющей собой линии передачи данных, адресов, сигналов управления и питания. Единая система аппаратурных соединений значительно упростила структуру, сделав ее еще более децентрализованной. Все передачи данных по шине осуществляются под управлением сервисных программ. ВУ ... Процессор ОП Контроллер ВУ ... Контроллер Общая шина КПД Таймер Рис. 4. Структурная схема ПЭВМ Ядро ПЭВМ образуют процессор и основная память, состоящая из ОЗУ и постоянного запоминающего устройства (ПЗУ). ПЗУ предназначено для постоянного хранения программ управления. Подключение всех внешних устройств (ВУ): дисплея, клавиатуры, внешних ЗУ и др., обеспечивается через соответствующие адаптеры — согласователи скоростей работы сопрягаемых устройств или контроллеры — специальные устройства управления периферийной аппаратурой. Контроллеры в ПЭВМ играют роль каналов ввода-вывода. В качестве особых устройств следует выделить таймер — устройство измерения времени и контроллер прямого доступа к памяти (КПД) — устройство, обеспечивающее доступ к основной памяти, минуя процессор. Все приведенные структуры не выходят за пределы классической структуры фон Неймана и их объединяют следующие общие принципы построения: структура памяти; способы доступа к памяти и внешним устройствам; система и форматы команд; организация интерфейса; возможность изменения конфигурации компьютера. Тема 2.3. Внутренняя организация процессора Функции процессора Процессор (рис. 1) обычно представляет собой отдельную микросхему или же часть микросхемы (в случае микроконтроллера). В прежние годы процессор иногда выполнялся на комплектах из нескольких микросхем, но сейчас от такого подхода уже практически отказались. Микросхема процессора обязательно имеет выводы трех шин: шины адреса, шины данных и шины управления. Иногда некоторые сигналы и шины мультиплексируются, чтобы уменьшить количество выводов микросхемы процессора. Важнейшие характеристики процессора — это количество разрядов его шины данных, количество разрядов его шины адреса и количество управляющих сигналов в шине управления. Разрядность шины данных определяет скорость работы системы. Разрядность шины адреса определяет допустимую сложность системы. Количество линий управления определяет разнообразие режимов обмена и эффективность обмена процессора с другими устройствами системы. Кроме выводов для сигналов трех основных шин процессор всегда имеет вывод (или два вывода) для подключения внешнего тактового сигнала или кварцевого резонатора (CLK), так как процессор всегда представляет собой тактируемое устройство. Чем больше тактовая частота процессора, тем он быстрее работает, то есть тем быстрее выполняет команды. Впрочем, быстродействие процессора определяется не только тактовой частотой, но и особенностями его структуры. Современные процессоры выполняют большинство команд за один такт и имеют средства для параллельного выполнения нескольких команд. Тактовая частота процессора не связана прямо и жестко со скоростью обмена по магистрали, так как скорость обмена по магистрали ограничена задержками распространения сигналов и искажениями сигналов на магистрали. То есть тактовая частота процессора определяет только его внутреннее быстродействие, а не внешнее. Иногда тактовая частота процессора имеет нижний и верхний пределы. При превышении верхнего предела частоты возможно перегревание процессора, а также сбои, причем, что самое неприятное, возникающие не всегда и нерегулярно. Так что с изменением этой частоты надо быть очень осторожным. Рис. 1. Схема включения процессора. Еще один важный сигнал, который имеется в каждом процессоре, — это сигнал начального сброса RESET. При включении питания, при аварийной ситуации или зависании процессора подача этого сигнала приводит к инициализации процессора, заставляет его приступить к выполнению программы начального запуска. Аварийная ситуация может быть вызвана помехами по цепям питания и "земли", сбоями в работе памяти, внешними ионизирующими излучениями и еще множеством причин. В результате процессор может потерять контроль над выполняемой программой и остановиться в каком-то адресе. Для выхода из этого состояния как раз и используется сигнал начального сброса. Этот же вход начального сброса может использоваться для оповещения процессора о том, что напряжение питания стало ниже установленного предела. В таком случае процессор переходит к выполнению программы сохранения важных данных. По сути, этот вход представляет собой особую разновидность радиального прерывания. Иногда у микросхемы процессора имеется еще один-два входа радиальных прерываний для обработки особых ситуаций (например, для прерывания от внешнего таймера). Шина питания современного процессора обычно имеет одно напряжение питания (+5В или +3,3В) и общий провод ("землю"). Первые процессоры нередко требовали нескольких напряжений питания. В некоторых процессорах предусмотрен режим пониженного энергопотребления. Вообще, современные микросхемы процессоров, особенно с высокими тактовыми частотами, потребляют довольно большую мощность. В результате для поддержания нормальной рабочей температуры корпуса на них нередко приходится устанавливать радиаторы, вентиляторы или даже специальные микрохолодильники. Для подключения процессора к магистрали используются буферные микросхемы, обеспечивающие, если необходимо, демультиплексирование сигналов и электрическое буферирование сигналов магистрали. Иногда протоколы обмена по системной магистрали и по шинам процессора не совпадают между собой, тогда буферные микросхемы еще и согласуют эти протоколы друг с другом. Иногда в микропроцессорной системе используется несколько магистралей (системных и локальных), тогда для каждой из магистралей применяется свой буферный узел. Такая структура характерна, например, для персональных компьютеров. После включения питания процессор переходит в первый адрес программы начального пуска и выполняет эту программу. Данная программа предварительно записана в постоянную (энергонезависимую) память. После завершения программы начального пуска процессор начинает выполнять основную программу, находящуюся в постоянной или оперативной памяти, для чего выбирает по очереди все команды. От этой программы процессор могут отвлекать внешние прерывания или запросы на ПДП. Команды из памяти процессор выбирает с помощью циклов чтения по магистрали. При необходимости процессор записывает данные в память или в устройства ввода/вывода с помощью циклов записи или же читает данные из памяти или из устройств ввода/вывода с помощью циклов чтения. Таким образом, основные функции любого процессора следующие: выборка (чтение) выполняемых команд; ввод (чтение) данных из памяти или устройства ввода/вывода; вывод (запись) данных в память или в устройства ввода/вывода; обработка данных (операндов), в том числе арифметические операции над ними; адресация памяти, то есть задание адреса памяти, с которым будет производиться обмен; обработка прерываний и режима прямого доступа. Упрощенно структуру микропроцессора можно представить в следующем виде (рис. 2). Рис. 2. Внутренняя структура микропроцессора. Основные функции показанных узлов следующие. Схема управления выборкой команд выполняет чтение команд из памяти и их дешифрацию. В первых микропроцессорах было невозможно одновременное выполнение предыдущей команды и выборка следующей команды, так как процессор не мог совмещать эти операции. Но уже в 16-разрядных процессорах появляется так называемый конвейер (очередь) команд, позволяющий выбирать несколько следующих команд, пока выполняется предыдущая. Два процесса идут параллельно, что ускоряет работу процессора. Конвейер представляет собой небольшую внутреннюю память процессора, в которую при малейшей возможности (при освобождении внешней шины) записывается несколько команд, следующих за исполняемой. Читаются эти команды процессором в том же порядке, что и записываются в конвейер (это память типа FIFO, First In — First Out, первый вошел — первый вышел). Правда, если выполняемая команда предполагает переход не на следующую ячейку памяти, а на удаленную (с меньшим или большим адресом), конвейер не помогает, и его приходится сбрасывать. Но такие команды встречаются в программах сравнительно редко. Развитием идеи конвейера стало использование внутренней кэш-памяти процессора, которая заполняется командами, пока процессор занят выполнением предыдущих команд. Чем больше объем кэш-памяти, тем меньше вероятность того, что ее содержимое придется сбросить при команде перехода. Понятно, что обрабатывать команды, находящиеся во внутренней памяти, процессор может гораздо быстрее, чем те, которые расположены во внешней памяти. В кэш-памяти могут храниться и данные, которые обрабатываются в данный момент, это также ускоряет работу. Для большего ускорения выборки команд в современных процессорах применяют совмещение выборки и дешифрации, одновременную дешифрацию нескольких команд, несколько параллельных конвейеров команд, предсказание команд переходов и некоторые другие методы. Арифметико-логическое устройство (или АЛУ, ALU ) предназначено для обработки информации в соответствии с полученной процессором командой. Примерами обработки могут служить логические операции (типа логического "И", "ИЛИ", "Исключающего ИЛИ" и т.д.) то есть побитные операции над операндами, а также арифметические операции (типа сложения, вычитания, умножения, деления и т.д.). Над какими кодами производится операция, куда помещается ее результат — определяется выполняемой командой. Если команда сводится всего лишь к пересылке данных без их обработки, то АЛУ не участвует в ее выполнении. Быстродействие АЛУ во многом определяет производительность процессора. Причем важна не только частота тактового сигнала, которым тактируется АЛУ, но и количество тактов, необходимое для выполнения той или иной команды. Для повышения производительности разработчики стремятся довести время выполнения команды до одного такта, а также обеспечить работу АЛУ на возможно более высокой частоте. Один из путей решения этой задачи состоит в уменьшении количества выполняемых АЛУ команд, создание процессоров с уменьшенным набором команд (так называемые RISC-процессоры). Другой путь повышения производительности процессора — использование нескольких параллельно работающих АЛУ. Что касается операций над числами с плавающей точкой и других специальных сложных операций, то в системах на базе первых процессоров их реализовали последовательностью более простых команд, специальными подпрограммами, однако затем были разработаны специальные вычислители — математические сопроцессоры, которые заменяли основной процессор на время выполнения таких команд. В современных микропроцессорах математические сопроцессоры входят в структуру как составная часть. Регистры процессора представляют собой по сути ячейки очень быстрой памяти и служат для временного хранения различных кодов: данных, адресов, служебных кодов. Операции с этими кодами выполняются предельно быстро, поэтому, в общем случае, чем больше внутренних регистров, тем лучше. Кроме того, на быстродействие процессора сильно влияет разрядность регистров. Именно разрядность регистров и АЛУ называется внутренней разрядностью процессора, которая может не совпадать с внешней разрядностью. По отношению к назначению внутренних регистров существует два основных подхода. Первого придерживается, например, компания Intel, которая каждому регистру отводит строго определенную функцию. С одной стороны, это упрощает организацию процессора и уменьшает время выполнения команды, но с другой — снижает гибкость, а иногда и замедляет работу программы. Например, некоторые арифметические операции и обмен с устройствами ввода/вывода проводятся только через один регистр — аккумулятор, в результате чего при выполнении некоторых процедур может потребоваться несколько дополнительных пересылок между регистрами. Второй подход состоит в том, чтобы все (или почти все) регистры сделать равноправными, как , например, в 16-разрядных процессорах Т11 фирмы DEC. При этом достигается высокая гибкость, но необходимо усложнение структуры процессора. Существуют и промежуточные решения, в частности, в процессоре MC68000 фирмы Motorola половина регистров использовалась для данных, и они были взаимозаменяемы, а другая половина — для адресов, и они также взаимозаменяемы. Регистр признаков ( регистр состояния) занимает особое место, хотя он также является внутренним регистром процессора. Содержащаяся в нем информация — это не данные, не адрес, а слово состояния процессора (ССП, PSW — Processor Status Word). Каждый бит этого слова (флаг) содержит информацию о результате предыдущей команды. Например, есть бит нулевого результата, который устанавливается в том случае, когда результат выполнения предыдущей команды — нуль, и очищается в том случае, когда результат выполнения команды отличен от нуля. Эти биты (флаги) используются командами условных переходов, например, командой перехода в случае нулевого результата. В этом же регистре иногда содержатся флаги управления, определяющие режим выполнения некоторых команд. Схема управления прерываниями обрабатывает поступающий на процессор запрос прерывания, определяет адрес начала программы обработки прерывания (адрес вектора прерывания), обеспечивает переход к этой программе после выполнения текущей команды и сохранения в памяти (в стеке ) текущего состояния регистров процессора. По окончании программы обработки прерывания процессор возвращается к прерванной программе с восстановленными из памяти (из стека ) значениями внутренних регистров. Подробнее о стеке будет рассказано в следующем разделе. Схема управления прямым доступом к памяти служит для временного отключения процессора от внешних шин и приостановки работы процессора на время предоставления прямого доступа запросившему его устройству. Логика управления организует взаимодействие всех узлов процессора, перенаправляет данные, синхронизирует работу процессора с внешними сигналами, а также реализует процедуры ввода и вывода информации. Таким образом, в ходе работы процессора схема выборки команд выбирает последовательно команды из памяти, затем эти команды выполняются, причем в случае необходимости обработки данных подключается АЛУ. На входы АЛУ могут подаваться обрабатываемые данные из памяти или из внутренних регистров. Во внутренних регистрах хранятся также коды адресов обрабатываемых данных, расположенных в памяти. Результат обработки в АЛУ изменяет состояние регистра признаков и записывается во внутренний регистр или в память (как источник, так и приемник данных указывается в составе кода команды). При необходимости информация может переписываться из памяти (или из устройства ввода/вывода) во внутренний регистр или из внутреннего регистра в память (или в устройство ввода/вывода). Внутренние регистры любого микропроцессора обязательно выполняют две служебные функции: определяют адрес в памяти, где находится выполняемая в данный момент команда (функция счетчика команд или указателя команд); определяют текущий адрес стека (функция указателя стека). В разных процессорах для каждой из этих функций может отводиться один или два внутренних регистра. Эти два указателя отличаются от других не только своим специфическим, служебным, системным назначением, но и особым способом изменения содержимого. Их содержимое программы могут менять только в случае крайней необходимости, так как любая ошибка при этом грозит нарушением работы компьютера, зависанием и порчей содержимого памяти. Содержимое указателя (счетчика) команд изменяется следующим образом. В начале работы системы (при включении питания) в него заносится раз и навсегда установленное значение. Это первый адрес программы начального запуска. Затем после выборки из памяти каждой следующей команды значение указателя команд автоматически увеличивается (инкрементируется) на единицу (или на два в зависимости от формата команд и типа процессора). То есть следующая команда будет выбираться из следующего по порядку адреса памяти. При выполнении команд перехода, нарушающих последовательный перебор адресов памяти, в указатель команд принудительно записывается новое значение — новый адрес в памяти, начиная с которого адреса команд опять же будут перебираться последовательно. Такая же смена содержимого указателя команд производится при вызове подпрограммы и возврате из нее или при начале обработки прерывания и после его окончания. Тема 2.4. Организация работы памяти компьютера Введение Главная задача компьютерной системы – выполнять программы. Программы вместе с данными, к которым они имеют доступ, в процессе выполнения должны (по крайней мере частично) находиться в оперативной памяти. Операционной системе приходится решать задачу распределения памяти между пользовательскими процессами и компонентами ОС. Эта деятельность называется управлением памятью. Таким образом, память (storage, memory) является важнейшим ресурсом, требующим тщательного управления. В недавнем прошлом память была самым дорогим ресурсом. Часть ОС, которая отвечает за управление памятью, называется менеджером памяти. Физическая организация памяти компьютера Запоминающие устройства компьютера разделяют, как минимум, на два уровня: основную (главную, оперативную, физическую ) и вторичную (внешнюю) память. Основная память представляет собой упорядоченный массив однобайтовых ячеек, каждая из которых имеет свой уникальный адрес (номер). Процессор извлекает команду из основной памяти, декодирует и выполняет ее. Для выполнения команды могут потребоваться обращения еще к нескольким ячейкам основной памяти. Обычно основная память изготавливается с применением полупроводниковых технологий и теряет свое содержимое при отключении питания. Вторичную память (это главным образом диски) также можно рассматривать как одномерное линейное адресное пространство, состоящее из последовательности байтов. В отличие от оперативной памяти, она является энергонезависимой, имеет существенно большую емкость и используется в качестве расширения основной памяти. Эту схему можно дополнить еще несколькими промежуточными уровнями, как показано на рис. 1. Разновидности памяти могут быть объединены в иерархию по убыванию времени доступа, возрастанию цены и увеличению емкости. Рис. 1. Иерархия памяти Многоуровневую схему используют следующим образом. Информация, которая находится в памяти верхнего уровня, обычно хранится также на уровнях с большими номерами. Если процессор не обнаруживает нужную информацию на i-м уровне, он начинает искать ее на следующих уровнях. Когда нужная информация найдена, она переносится в более быстрые уровни. Локальность Оказывается, при таком способе организации по мере снижения скорости доступа к уровню памяти снижается также и частота обращений к нему. Ключевую роль здесь играет свойство реальных программ, в течение ограниченного отрезка времени способных работать с небольшим набором адресов памяти. Это эмпирически наблюдаемое свойство известно как принцип локальности или локализации обращений. Свойство локальности (соседние в пространстве и времени объекты характеризуются похожими свойствами) присуще не только функционированию ОС, но и природе вообще. В случае ОС свойство локальности объяснимо, если учесть, как пишутся программы и как хранятся данные, то есть обычно в течение какого-то отрезка времени ограниченный фрагмент кода работает с ограниченным набором данных. Эту часть кода и данных удается разместить в памяти с быстрым доступом. В результате реальное время доступа к памяти определяется временем доступа к верхним уровням, что и обусловливает эффективность использования иерархической схемы. Надо сказать, что описываемая организация вычислительной системы во многом имитирует деятельность человеческого мозга при переработке информации. Действительно, решая конкретную проблему, человек работает с небольшим объемом информации, храня не относящиеся к делу сведения в своей памяти или во внешней памяти (например, в книгах). Кэш процессора обычно является частью аппаратуры, поэтому менеджер памяти ОС занимается распределением информации главным образом в основной и внешней памяти компьютера. В некоторых схемах потоки между оперативной и внешней памятью регулируются программистом (см. например, далее оверлейные структуры ), однако это связано с затратами времени программиста, так что подобную деятельность стараются возложить на ОС. Адреса в основной памяти, характеризующие реальное расположение данных в физической памяти, называются физическими адресами. Набор физических адресов, с которым работает программа, называют физическим адресным пространством. Логическая память Аппаратная организация памяти в виде линейного набора ячеек не соответствует представлениям программиста о том, как организовано хранение программ и данных. Большинство программ представляет собой набор модулей, созданных независимо друг от друга. Иногда все модули, входящие в состав процесса, располагаются в памяти один за другим, образуя линейное пространство адресов. Однако чаще модули помещаются в разные области памяти и используются по-разному. Схема управления памятью, поддерживающая этот взгляд пользователя на то, как хранятся программы и данные, называется сегментацией. Сегмент – область памяти определенного назначения, внутри которой поддерживается линейная адресация. Сегменты содержат процедуры, массивы, стек или скалярные величины, но обычно не содержат информацию смешанного типа. По-видимому, вначале сегменты памяти появились в связи с необходимостью обобществления процессами фрагментов программного кода (текстовый редактор, тригонометрические библиотеки и т. д.), без чего каждый процесс должен был хранить в своем адресном пространстве дублирующую информацию. Эти отдельные участки памяти, хранящие информацию, которую система отображает в память нескольких процессов, получили название сегментов. Память, таким образом, перестала быть линейной и превратилась в двумерную. Адрес состоит из двух компонентов: номер сегмента, смещение внутри сегмента. Далее оказалось удобным размещать в разных сегментах различные компоненты процесса (код программы, данные, стек и т. д.). Попутно выяснилось, что можно контролировать характер работы с конкретным сегментом, приписав ему атрибуты, например права доступа или типы операций, которые разрешается производить с данными, хранящимися в сегменте. Рис. 2. Расположение сегментов процессов в памяти компьютера Некоторые сегменты, описывающие адресное пространство процесса, показаны на рис. 2. Более подробная информация о типах сегментов имеется в лекции 10. Большинство современных ОС поддерживают сегментную организацию памяти. В некоторых архитектурах (Intel, например) сегментация поддерживается оборудованием. Адреса, к которым обращается процесс, таким образом, отличаются от адресов, реально существующих в оперативной памяти. В каждом конкретном случае используемые программой адреса могут быть представлены различными способами. Например, адреса в исходных текстах обычно символические. Компилятор связывает эти символические адреса с перемещаемыми адресами (такими, как n байт от начала модуля). Подобный адрес, сгенерированный программой, обычно называют логическим (в системах с виртуальной памятью он часто называется виртуальным) адресом. Совокупность всех логических адресов называется логическим (виртуальным) адресным пространством. Связывание адресов Итак логические и физические адресные пространства ни по организации, ни по размеру не соответствуют друг другу. Максимальный размер логического адресного пространства обычно определяется разрядностью процессора (например, 232) и в современных системах значительно превышает размер физического адресного пространства. Следовательно, процессор и ОС должны быть способны отобразить ссылки в коде программы в реальные физические адреса, соответствующие текущему расположению программы в основной памяти. Такое отображение адресов называют трансляцией (привязкой) адреса или связыванием адресов (см. рис. 8.3). Связывание логического адреса, порожденного оператором программы, с физическим должно быть осуществлено до начала выполнения оператора или в момент его выполнения. Таким образом, привязка инструкций и данных к памяти в принципе может быть сделана на следующих шагах [Silberschatz, 2002]. Этап компиляции (Compile time). Когда на стадии компиляции известно точное место размещения процесса в памяти, тогда непосредственно генерируются физические адреса. При изменении стартового адреса программы необходимо перекомпилировать ее код. В качестве примера можно привести .com программы MSDOS, которые связывают ее с физическими адресами на стадии компиляции. Этап загрузки (Load time). Если информация о размещении программы на стадии компиляции отсутствует, компилятор генерирует перемещаемый код. В этом случае окончательное связывание откладывается до момента загрузки. Если стартовый адрес меняется, нужно всего лишь перезагрузить код с учетом измененной величины. Этап выполнения (Execution time). Если процесс может быть перемещен во время выполнения из одной области памяти в другую, связывание откладывается до стадии выполнения. Здесь желательно наличие специализированного оборудования, например регистров перемещения. Их значение прибавляется к каждому адресу, сгенерированному процессом. Большинство современных ОС осуществляет трансляцию адресов на этапе выполнения, используя для этого специальный аппаратный механизм Рис. 3. Формирование логического адреса и связывание логического адреса с физическим Функции системы управления памятью Чтобы обеспечить эффективный контроль использования памяти, ОС должна выполнять следующие функции: отображение адресного пространства процесса на конкретные области физической памяти; распределение памяти между конкурирующими процессами; контроль доступа к адресным пространствам процессов; выгрузка процессов (целиком или частично) во внешнюю память, когда в оперативной памяти недостаточно места; учет свободной и занятой памяти. В следующих разделах лекции рассматривается ряд конкретных схем управления памятью. Каждая схема включает в себя определенную идеологию управления, а также алгоритмы и структуры данных и зависит от архитектурных особенностей используемой системы. Вначале будут рассмотрены простейшие схемы. Доминирующая на сегодня схема виртуальной памяти будет описана в последующих лекциях. Простейшие схемы управления памятью Первые ОС применяли очень простые методы управления памятью. Вначале каждый процесс пользователя должен был полностью поместиться в основной памяти, занимать непрерывную область памяти, а система принимала к обслуживанию дополнительные пользовательские процессы до тех пор, пока все они одновременно помещались в основной памяти. Затем появился "простой свопинг" (система попрежнему размещает каждый процесс в основной памяти целиком, но иногда на основании некоторого критерия целиком сбрасывает образ некоторого процесса из основной памяти во внешнюю и заменяет его в основной памяти образом другого процесса). Такого рода схемы имеют не только историческую ценность. В настоящее время они применяются в учебных и научно-исследовательских модельных ОС, а также в ОС для встроенных (embedded) компьютеров. Схема с фиксированными разделами Самым простым способом управления оперативной памятью является ее предварительное (обычно на этапе генерации или в момент загрузки системы) разбиение на несколько разделов фиксированной величины. Поступающие процессы помещаются в тот или иной раздел. При этом происходит условное разбиение физического адресного пространства. Связывание логических и физических адресов процесса происходит на этапе его загрузки в конкретный раздел, иногда – на этапе компиляции. Каждый раздел может иметь свою очередь процессов, а может существовать и глобальная очередь для всех разделов(см. рис. 8.4). Эта схема была реализована в IBM OS/360 (MFT), DEC RSX-11 и ряде других систем. Подсистема управления памятью оценивает размер поступившего процесса, выбирает подходящий для него раздел, осуществляет загрузку процесса в этот раздел и настройку адресов. Рис.4. Схема с фиксированными разделами: (a) – с общей очередью процессов, (b) – с отдельными очередями процессов Очевидный недостаток этой схемы – число одновременно выполняемых процессов ограничено числом разделов. Другим существенным недостатком является то, что предлагаемая схема сильно страдает от внутренней фрагментации – потери части памяти, выделенной процессу, но не используемой им. Фрагментация возникает потому, что процесс не полностью занимает выделенный ему раздел или потому, что некоторые разделы слишком малы для выполняемых пользовательских программ. Один процесс в памяти Частный случай схемы с фиксированными разделами – работа менеджера памяти однозадачной ОС. В памяти размещается один пользовательский процесс. Остается определить, где располагается пользовательская программа по отношению к ОС – в верхней части памяти, в нижней или в средней. Причем часть ОС может быть в ROM (например, BIOS, драйверы устройств). Главный фактор, влияющий на это решение, – расположение вектора прерываний, который обычно локализован в нижней части памяти, поэтому ОС также размещают в нижней. Примером такой организации может служить ОС MS-DOS. Защита адресного пространства ОС от пользовательской программы может быть организована при помощи одного граничного регистра, содержащего адрес границы ОС. Оверлейная структура Так как размер логического адресного пространства процесса может быть больше, чем размер выделенного ему раздела (или больше, чем размер самого большого раздела), иногда используется техника, называемая оверлей (overlay) или организация структуры с перекрытием. Основная идея – держать в памяти только те инструкции программы, которые нужны в данный момент. Потребность в таком способе загрузки появляется, если логическое адресное пространство системы мало, например 1 Мбайт (MS-DOS) или даже всего 64 Кбайта (PDP-11), а программа относительно велика. На современных 32-разрядных системах, где виртуальное адресное пространство измеряется гигабайтами, проблемы с нехваткой памяти решаются другими способами (см. раздел "Виртуальная память"). Рис. 5. Организация структуры с перекрытием. Можно поочередно загружать в память ветви A-B, A-C-D и A-C-E программы Коды ветвей оверлейной структуры программы находятся на диске как абсолютные образы памяти и считываются драйвером оверлеев при необходимости. Для описания оверлейной структуры обычно используется специальный несложный язык (overlay description language). Совокупность файлов исполняемой программы дополняется файлом (обычно с расширением .odl), описывающим дерево вызовов внутри программы. Для примера, приведенного на рис. 8.5, текст этого файла может выглядеть так: A-(B,C) C-(D,E) Синтаксис подобного файла может распознаваться загрузчиком. Привязка к физической памяти происходит в момент очередной загрузки одной из ветвей программы. Оверлеи могут быть полностью реализованы на пользовательском уровне в системах с простой файловой структурой. ОС при этом лишь делает несколько больше операций ввода-вывода. Типовое решение – порождение линкером специальных команд, которые включают загрузчик каждый раз, когда требуется обращение к одной из перекрывающихся ветвей программы. Тщательное проектирование оверлейной структуры отнимает много времени и требует знания устройства программы, ее кода, данных и языка описания оверлейной структуры. По этой причине применение оверлеев ограничено компьютерами с небольшим логическим адресным пространством. Как мы увидим в дальнейшем, проблема оверлейных сегментов, контролируемых программистом, отпадает благодаря появлению систем виртуальной памяти. Заметим, что возможность организации структур с перекрытиями во многом обусловлена свойством локальности, которое позволяет хранить в памяти только ту информацию, которая необходима в конкретный момент вычислений. Динамическое распределение. Свопинг Имея дело с пакетными системами, можно обходиться фиксированными разделами и не использовать ничего более сложного. В системах с разделением времени возможна ситуация, когда память не в состоянии содержать все пользовательские процессы. Приходится прибегать к свопингу (swapping) – перемещению процессов из главной памяти на диск и обратно целиком. Частичная выгрузка процессов на диск осуществляется в системах со страничной организацией (paging) и будет рассмотрена ниже. Выгруженный процесс может быть возвращен в то же самое адресное пространство или в другое. Это ограничение диктуется методом связывания. Для схемы связывания на этапе выполнения можно загрузить процесс в другое место памяти. Свопинг не имеет непосредственного отношения к управлению памятью, скорее он связан с подсистемой планирования процессов. Очевидно, что свопинг увеличивает время переключения контекста. Время выгрузки может быть сокращено за счет организации специально отведенного пространства на диске (раздел для свопинга). Обмен с диском при этом осуществляется блоками большего размера, то есть быстрее, чем через стандартную файловую систему. Во многих версиях Unix свопинг начинает работать только тогда, когда возникает необходимость в снижении загрузки системы. Схема с переменными разделами В принципе, система свопинга может базироваться на фиксированных разделах. Более эффективной, однако, представляется схема динамического распределения или схема с переменными разделами, которая может использоваться и в тех случаях, когда все процессы целиком помещаются в памяти, то есть в отсутствие свопинга. В этом случае вначале вся память свободна и не разделена заранее на разделы. Вновь поступающей задаче выделяется строго необходимое количество памяти, не более. После выгрузки процесса память временно освобождается. По истечении некоторого времени память представляет собой переменное число разделов разного размера (рис.6). Смежные свободные участки могут быть объединены. Рис. 6. Динамика распределения памяти между процессами (серым цветом показана неиспользуемая память) В какой раздел помещать процесс? Наиболее распространены три стратегии. Стратегия первого подходящего (First fit). Процесс помещается в первый подходящий по размеру раздел. Стратегия наиболее подходящего (Best fit). Процесс помещается в тот раздел, где после его загрузки останется меньше всего свободного места. Стратегия наименее подходящего (Worst fit). При помещении в самый большой раздел в нем остается достаточно места для возможного размещения еще одного процесса. Моделирование показало, что доля полезно используемой памяти в первых двух случаях больше, при этом первый способ несколько быстрее. Попутно заметим, что перечисленные стратегии широко применяются и другими компонентами ОС, например для размещения файлов на диске. Типовой цикл работы менеджера памяти состоит в анализе запроса на выделение свободного участка (раздела), выборе его среди имеющихся в соответствии с одной из стратегий (первого подходящего, наиболее подходящего и наименее подходящего), загрузке процесса в выбранный раздел и последующих изменениях таблиц свободных и занятых областей. Аналогичная корректировка необходима и после завершения процесса. Связывание адресов может осуществляться на этапах загрузки и выполнения. Этот метод более гибок по сравнению с методом фиксированных разделов, однако ему присуща внешняя фрагментация – наличие большого числа участков неиспользуемой памяти, не выделенной ни одному процессу. Выбор стратегии размещения процесса между первым подходящим и наиболее подходящим слабо влияет на величину фрагментации. Любопытно, что метод наиболее подходящего может оказаться наихудшим, так как он оставляет множество мелких незанятых блоков. Статистический анализ показывает, что пропадает в среднем 1/3 памяти! Это известное правило 50% (два соседних свободных участка в отличие от двух соседних процессов могут быть объединены). Одно из решений проблемы внешней фрагментации – организовать сжатие, то есть перемещение всех занятых (свободных) участков в сторону возрастания (убывания) адресов, так, чтобы вся свободная память образовала непрерывную область. Этот метод иногда называют схемой с перемещаемыми разделами. В идеале фрагментация после сжатия должна отсутствовать. Сжатие, однако, является дорогостоящей процедурой, алгоритм выбора оптимальной стратегии сжатия очень труден и, как правило, сжатие осуществляется в комбинации с выгрузкой и загрузкой по другим адресам. Страничная память Описанные выше схемы недостаточно эффективно используют память, поэтому в современных схемах управления памятью не принято размещать процесс в оперативной памяти одним непрерывным блоком. В самом простом и наиболее распространенном случае страничной организации памяти (или paging) как логическое адресное пространство, так и физическое представляются состоящими из наборов блоков или страниц одинакового размера. При этом образуются логические страницы (page), а соответствующие единицы в физической памяти называют физическими страницами или страничными кадрами (page frames). Страницы (и страничные кадры) имеют фиксированную длину, обычно являющуюся степенью числа 2, и не могут перекрываться. Каждый кадр содержит одну страницу данных. При такой организации внешняя фрагментация отсутствует, а потери из-за внутренней фрагментации, поскольку процесс занимает целое число страниц, ограничены частью последней страницы процесса. Логический адрес в страничной системе – упорядоченная пара (p,d), где p – номер страницы в виртуальной памяти, а d – смещение в рамках страницы p, на которой размещается адресуемый элемент. Заметим, что разбиение адресного пространства на страницы осуществляется вычислительной системой незаметно для программиста. Поэтому адрес является двумерным лишь с точки зрения операционной системы, а с точки зрения программиста адресное пространство процесса остается линейным. Описываемая схема позволяет загрузить процесс, даже если нет непрерывной области кадров, достаточной для размещения процесса целиком. Но одного базового регистра для осуществления трансляции адреса в данной схеме недостаточно. Система отображения логических адресов в физические сводится к системе отображения логических страниц в физические и представляет собой таблицу страниц, которая хранится в оперативной памяти. Иногда говорят, что таблица страниц – это кусочнолинейная функция отображения, заданная в табличном виде. Интерпретация логического адреса показана на рис. 8.7. Если выполняемый процесс обращается к логическому адресу v = (p,d), механизм отображения ищет номер страницы p в таблице страниц и определяет, что эта страница находится в страничном кадре p', формируя реальный адрес из p' и d. Рис. 7. Связь логического и физического адресов при страничной организации памяти Таблица страниц (page table) адресуется при помощи специального регистра процессора и позволяет определить номер кадра по логическому адресу. Помимо этой основной задачи, при помощи атрибутов, записанных в строке таблицы страниц, можно организовать контроль доступа к конкретной странице и ее защиту. Отметим еще раз различие точек зрения пользователя и системы на используемую память. С точки зрения пользователя, его память – единое непрерывное пространство, содержащее только одну программу. Реальное отображение скрыто от пользователя и контролируется ОС. Заметим, что процессу пользователя чужая память недоступна. Он не имеет возможности адресовать память за пределами своей таблицы страниц, которая включает только его собственные страницы. Для управления физической памятью ОС поддерживает структуру таблицы кадров. Она имеет одну запись на каждый физический кадр, показывающий его состояние. Отображение адресов должно быть осуществлено корректно даже в сложных случаях и обычно реализуется аппаратно. Для ссылки на таблицу процессов используется специальный регистр. При переключении процессов необходимо найти таблицу страниц нового процесса, указатель на которую входит в контекст процесса. Сегментная и сегментно-страничная организация памяти Существуют две другие схемы организации управления памятью: сегментная и сегментно-страничная. Сегменты, в отличие от страниц, могут иметь переменный размер. Идея сегментации изложена во введении. При сегментной организации виртуальный адрес является двумерным как для программиста, так и для операционной системы, и состоит из двух полей – номера сегмента и смещения внутри сегмента. Подчеркнем, что в отличие от страничной организации, где линейный адрес преобразован в двумерный операционной системой для удобства отображения, здесь двумерность адреса является следствием представления пользователя о процессе не в виде линейного массива байтов, а как набор сегментов переменного размера (данные, код, стек...). Программисты, пишущие на языках низкого уровня, должны иметь представление о сегментной организации, явным образом меняя значения сегментных регистров (это хорошо видно по текстам программ, написанных на Ассемблере). Логическое адресное пространство – набор сегментов. Каждый сегмент имеет имя, размер и другие параметры (уровень привилегий, разрешенные виды обращений, флаги присутствия). В отличие от страничной схемы, где пользователь задает только один адрес, который разбивается на номер страницы и смещение прозрачным для программиста образом, в сегментной схеме пользователь специфицирует каждый адрес двумя величинами: именем сегмента и смещением. Каждый сегмент – линейная последовательность адресов, начинающаяся с 0. Максимальный размер сегмента определяется разрядностью процессора (при 32разрядной адресации это 232 байт или 4 Гбайт). Размер сегмента может меняться динамически (например, сегмент стека). В элементе таблицы сегментов помимо физического адреса начала сегмента обычно содержится и длина сегмента. Если размер смещения в виртуальном адресе выходит за пределы размера сегмента, возникает исключительная ситуация. Логический адрес – упорядоченная пара v=(s,d), номер сегмента и смещение внутри сегмента. В системах, где сегменты поддерживаются аппаратно, эти параметры обычно хранятся в таблице дескрипторов сегментов, а программа обращается к этим дескрипторам по номерам-селекторам. При этом в контекст каждого процесса входит набор сегментных регистров, содержащих селекторы текущих сегментов кода, стека, данных и т. д. и определяющих, какие сегменты будут использоваться при разных видах обращений к памяти. Это позволяет процессору уже на аппаратном уровне определять допустимость обращений к памяти, упрощая реализацию защиты информации от повреждения и несанкционированного доступа. Рис. 8. Преобразование логического адреса при сегментной организации памяти Аппаратная поддержка сегментов распространена мало (главным образом на процессорах Intel). В большинстве ОС сегментация реализуется на уровне, не зависящем от аппаратуры. Хранить в памяти сегменты большого размера целиком так же неудобно, как и хранить процесс непрерывным блоком. Напрашивается идея разбиения сегментов на страницы. При сегментно-страничной организации памяти происходит двухуровневая трансляция виртуального адреса в физический. В этом случае логический адрес состоит из трех полей: номера сегмента логической памяти, номера страницы внутри сегмента и смещения внутри страницы. Соответственно, используются две таблицы отображения – таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента. Рис. 9. Упрощенная схема формирования физического адреса при сегментностраничной организации памяти Сегментно-страничная и сегментная организация памяти позволяет легко организовать совместное использование одних и тех же данных и программного кода разными задачами. Для этого различные логические блоки памяти разных процессов отображают в один и тот же блок физической памяти, где размещается разделяемый фрагмент кода или данных. Заключение В настоящей лекции описаны простейшие способы управления памятью в ОС. Физическая память компьютера имеет иерархическую структуру. Программа представляет собой набор сегментов в логическом адресном пространстве. ОС осуществляет связывание логических и физических адресных пространств. В последующих лекциях будут рассматриваться современные решения, связанные с поддержкой виртуальной памяти. Тема 2.5. Интерфейсы Интерфейсы вычислительных систем Типы и характеристики интерфейсов Интерфейс - это аппаратное и программное обеспечение (элементы соединения и вспомогательные схемы управления, их физические, электрические и логические параметры), предназначенное для сопряжения систем или частей системы (программ или устройств). Под сопряжением подразумеваются следующие функции: выдача и прием информации; управление передачей данных; согласование источника и приемника информации. В связи с понятием интерфейса рассматривают также понятие шина (магистраль) - это среда передачи сигналов, к которой может параллельно подключаться несколько компонентов вычислительной системы и через которую осуществляется обмен данными. Очевидно, для аппаратных составляющих большинства интерфейсов применим термин шина, поэтому зачастую эти два обозначения выступают как синонимы, хотя интерфейс - понятие более широкое. Для интерфейсов, обеспечивающих соединение "точка-точка" (в отличие от шинных интерфейсов), возможны следующие реализации режимов обмена: дуплексный, полудуплексный и симплексный. К дуплексным относят интерфейсы, обеспечивающие возможность одновременной передачи данных между двумя устройствами в обоих направлениях. В случае, когда канал связи между устройствами поддерживает двунаправленный обмен, но в каждый момент времени передача информации может производиться только в одном направлении, режим обмена называется полудуплексным. Важной характеристикой полудуплексного соединения является время реверсирования режима - то время, за которое производится переход от передачи сообщения к приему и наоборот. Если же интерфейс реализует передачу данных только в одном направлении и движение потока данных в противоположном направлении невозможно, такой интерфейс называют симплексным. Важное значение имеют также следующие технические характеристики интерфейсов: вместимость (максимально возможное количество абонентов, одновременно подключаемых к контроллеру интерфейса без расширителей); пропускная способность или скорость передачи (длительность выполнения операций установления и разъединения связи и степень совмещения процессов передачи данных); максимальная длина линии связи; разрядность; топология соединения. Архитектура системных интерфейсов По функциональному назначению можно выделить системные интерфейсы (интерфейсы, связывающие отдельные части компьютера как микропроцессорной системы) и интерфейсы периферийных устройств. Микро-ЭВМ с точки зрения архитектуры можно разделить на 2 основных класса: использующие внутренний интерфейс МП (унифицированный канал); использующие внешний по отношению к МП системный интерфейс. Системный интерфейс выполняется обычно в виде стандартизированных системных шин. Однако в последнее время наметились тенденции внедрения концепций сетевого взаимодействия в архитектуру системных интерфейсов. Различают два класса системных интерфейсов: с общей шиной (сигналы адреса и данных мультиплексируются) и с изолированной шиной (раздельные сигналы данных и адреса). Прародителями современных системных шин являются: Unibus фирмы DEC ( интерфейс с общей шиной ), Multibus фирмы Intel ( интерфейс с изолированной шиной ). Шинная архитектура Unibus была разработана фирмой DEC для мини-ЭВМ серии PDP-11. Общая шина для периферийных устройств, памяти и процессора состоит из 56 двунаправленных линий. Unibus поддерживает пересылку одного 16разрядного слова за 750 нс. Все пересылки инициируются ведущим устройством и подтверждаются принимающим (запоминающим) устройством, что позволяет работать с модулями различного быстродействия. Выбор устройства на роль ведущего является динамической процедурой, поэтому в ответ на запрос периферийного устройства процессор может передать ему управление шиной. Благодаря этой особенности, на основе Unibus возможна разработка мультипроцессорных систем. Unibus позволяет подключать к магистрали большое число устройств, хотя необходимо учитывать снижение надежности по мере увеличения длины магистрали. Данные регистров внешних устройств могут обрабатываться теми же командами, что и данные в памяти. Следует, однако, отметить сложность технической реализации интерфейсных модулей, связанных с пересылкой адресов и данных по одним и тем же линиям. Свое развитие архитектура Unibus получила в системном интерфейсе NuBus. Интерфейс NuBus (табл.1) был разработан MIT1 совместно с Western Digital в 1979 г. Затем, при участии Texas 2 Instruments, архитектура NuBus была стандартизована IEEE (стандарт IEEE 11961987) и применялась фирмой Apple в компьютерах Macintosh. В NuBus также используется мультиплексирование адреса и данных. Предусмотрена автоматическая конфигурация. Возможно использование нескольких задатчиков магистрали с децентрализованным арбитражем. Имеется режим блочной передачи данных. К недостаткам NuBus можно отнести слабые возможности режима ПДП, сложный метод обработки прерываний (предусмотрен всего один сигнал запроса прерывания и программный опрос потенциальных источников прерываний). Альтернативная шинная архитектура Multibus была разработана фирмой Intel. Шина также обеспечивает системную архитектуру с одним или несколькими ведущими узлами и с квитированием установления связи между устройствами, работающими с разной скоростью. Благодаря разделению шины адреса и шины данных, возможны реализации этой архитектуры для процессоров разной разрядности. Существовали 8-разрядный и 16-разрядный варианты архитектуры Multibus для IBM PC. Шина адреса - 20 бит. Multibus подразумевает достаточно простую аппаратную реализацию, однако число устройств, одновременно использующих ресурсы шины, ограничено 16 абонентами. Следует отметить, что скорость обмена на шине Multibus была ниже, чем на шине Unibus. Таблица 1. Системные интерфейсы Шина NuBus ISA EISA MCA VLB PCI Год выпуска 1979 1984 1989 1987 1987 1992 Разрядность данных 32 8/16 32 32/64 32 32/64 Разрядность адреса 32 20/24 32 32 32 32 Тактовая частота, МГц 10 4/8 8 10 <33 (Fцп) 33, 66 Макс. скорость, Мбайт/с 37 8-16 33 20/40 130 132/264, 520 Макс. кол-во устройств 6 15 16 2-3 10 Кол-во сигналов 96 62/98 188 178 112 124/188 Системные интерфейсы для ПК на основе Intel-386 и Intel-486 Первым стандартным системным интерфейсом для ПК на основе ЦП IA32 следует считать ISA (Industry Standard Architecture - Архитектура промышленного стандарта). ISA представляет собой шину, используемую в IBM PC-совместимых ПК для обеспечения питания и взаимодействия плат расширения с системной платой, в которую они вставляются. Полное описание шины, включая ее временные характеристики, было издано в виде стандарта IEEE P996-1987. Первый вариант этой архитектуры для ЦП 8086/8088 с тактовой частотой 4,77 МГц представлял собой 62-контактную шину с 8 линиями данных, 20 линиями адреса, сигналами для прерываний и запросов и подтверждения DMA, а также линиями питания и сигналами синхронизации. У процессора 80286, применявшегося в IBM PC AT, была 16разрядная шина данных, поэтому системная шина была расширена дополнительным 36-контактным соединителем, который обеспечивал еще восемь линий данных, еще четыре линии адреса, дополнительные линии прерываний и каналов DMA. На эту шину был выведен тактовый сигнал с частотой 8 МГц. Таким образом, теоретическая максимальная скорость передачи данных на шине ISA составляет 16 Мбайт/с, хотя чаще утверждается, что она составляет 8 Мбайт/с, поскольку один цикл шины обычно требуется для передачи адреса, а другой - для передачи 16 разрядов данных. На самом деле, типичная скорость передачи данных на этой шине составляет от 1 до 2,5 Мбайт/с. Это значение обусловлено конфликтами на шине с другими устройствами, главным образом, с памятью, а также задержками буферизации из-за асинхронного характера шины (быстродействие процессора и шины различается). Появление 32-битных процессоров Intel-386 и Intel-486 показало, что быстродействие магистрали ISA является сдерживающим фактором на пути повышения производительности компьютеров. В 1989 году группой компаний (Compaq, Hewlett Packard, NEC и др.) было предложено эволюционное развитие архитектуры ISA - шина EISA (Extended ISA ). С одной стороны, EISA имела все преимущества высокопроизводительной 32-битной шины, а с другой - была полностью совместима с ISA "сверху вниз" и не требовала перехода на новую элементную базу. Разработчики магистрали EISA позаботились не только об информационной и электрической, но и о конструктивной совместимости с ISA. Разъем EISA состоит из двух рядов контактов, один из которых (верхний) предназначен для сигналов ISA, а другой (нижний) - для дополнительных сигналов EISA (16 дополнительных разрядов данных, 8 дополнительных разрядов адреса, сигналы управления пакетной передачей данных и сигналы управления арбитражем магистрали). Таким образом, в разъемы EISA можно вставлять также 8или 16-разрядные платы ISA. Предельная скорость передачи (33 МГц) достигается в пакетном режиме, когда адрес предоставляется только в начале пакета и предполагается, что все последующие данные будут поступать в расположенные по порядку ячейки памяти. На магистрали может находиться несколько задатчиков (ЦП, контроллер DMA, контроллер регенерации динамической памяти и др.). Управление предоставлением магистрали централизованно выполняется специальным арбитром по циклическому принципу. Для арбитража используются особые линии магистрали, индивидуальные для каждого разъема. Альтернативная системная архитектура MCA (Micro Channel Architecture Микроканальная архитектура) была предложена IBM в 1987 году в серии ПК PS/2. Основным достоинством MCA по сравнению с ISA было увеличение разрядности шины данных до 32 бит. При мультиплексированном использовании шины адреса (32 бит) допускается расширение шины данных до 64 бит. Как и в EISA, в MCA предусмотрена возможность включения многих задатчиков, но арбитраж при этом является не централизованным, а распределенным, причем приоритеты могут устанавливаться программным путем. MCA не зависит от типа процессора и является полностью асинхронной. Эта магистраль, кроме ПК IBM PS/2, применялась также в рабочих станциях IBM RS/6000 и в высокопроизводительных компьютерах серии Power Parallel SP2 (например, Deep Blue). Для магистрали MCA предусмотрена автоматическая конфигурация системы. При этом пользователь может изменять и назначать приоритеты различных устройств. Для увеличения скорости передачи в режиме DMA используется специальный блочный режим (burst mode). Однако эта шина не нашла широкого распространения, возможно, потому, что компания IBM (по крайней мере, первоначально) взимала слишком большую лицензионную пошлину за ее применение, а также потому, что существовавшие тогда платы адаптеров ПК невозможно было использовать на этой шине, вследствие чего потребителям приходилось приобретать все новые платы, а производителям -заново их разрабатывать. В типичной системе на основе Intel-386/486 (рис.1) использовались раздельные шины для памяти и устройств ввода-вывода, что позволяло максимально задействовать возможности оперативной памяти и обеспечивало максимальную скорость работы с ней. Однако в таком случае устройства, подключенные через описанные системные интерфейсы, не могут достичь скорости обмена, сравнимой с процессором. В основном это требуется для видеоадаптеров и контроллеров накопителей. Для решения проблемы была предложена архитектура на основе локальных шин (рис.2), которые непосредственно связывали процессор с контроллерами периферийных устройств. Рис. 1. Типичная система с низкоскоростной шиной устройств ввода-вывода Рис. 2. Система с архитектурой локальной шины (VLB) Наиболее распространенными локальными шинами считались VLB и PCI. VLB ( VESA3 Local Bus) представляет собой расширение шины процессора без промежуточных буферов, что резко ограничивает ее нагрузочную способность (2-3 устройства). VLB имеет 32-разрядную шину данных и 32-разрядную шину адреса. Арбитр магистрали не предусмотрен. Достоинством VLB является простота и низкая стоимость. Позднее была также разработана спецификация VLB2, ориентированная на системы на основе Intel Pentium, (64разрядная шина данных, тактовая частота до 50 МГц, поддержка Plug&Play), однако широкого применения эта разработка не нашла, т.к. была вытеснена шиной PCI. Интерфейс PCI Доминирующее положение на рынке ПК занимают системы на основе шины PCI (Peripheral Component Interconnect - Взаимодействие периферийных компонентов). Этот интерфейс был предложен фирмой Intel в 1992 году (стандарт PCI 2.0 - в 1993) в качестве альтернативы локальной шине VLB/VLB2. Следует отметить, что разработчики этого интерфейса позиционируют PCI не как локальную, а как промежуточную шину (mezzanine bus), т.к. она не является шиной процессора. Поскольку шина PCI не ориентирована на определенный процессор, ее можно использовать для других процессоров. Шина PCI была адаптирована к таким процессорам, как Alpha, MIPS, PowerPC и SPARC. Именно PCI сменила NuBus на платформе Apple Macintosh. Шины ISA, EISA или MCA могут управляться шиной PCI с помощью моста сопряжения (рис. 3), что позволяет устанавливать в ПК платы устройств ввода-вывода с различными системными интерфейсами. Например, в чипсете Intel Triton использовалась микросхема PIIX4, помимо контроллера IDE предоставляющая мост для шины ISA. Рис. 3. Система на основе PCI Существуют три варианта плат PCI: с уровнями сигналов 3,3 В, с уровнями сигналов 5 В и универсальные. Ключ в разъеме гарантирует, что платы с одним уровнем сигнала и невзаимозаменяемые не будут по ошибке вставлены в разъем с другим уровнем сигнала. Платы с пониженным напряжением питания в основном используются в мобильных компьютерах. Существует 32-разрядная и 64-разрядная реализация шины PCI. В 64-разрядной реализации используется разъем с дополнительной секцией. 32-разрядные и 64разрядные платы можно устанавливать в 64-разрядные и 32-разрядные разъемы и наоборот. Платы и шина определяют тип разъема и работают должным образом. При установке 64-разрядной платы в 32-разрядный разъем остальные выводы не задействуются и просто выступают за пределы разъема. На шине PCI сигналы адреса и данных мультиплексированы, поэтому для передачи каждых 32 или 64 разрядов требуется два шинных цикла: один - для пересылки адреса, а второй - для пересылки данных. Однако возможен также пакетный режим, при котором вслед за одним циклом передачи адреса разрешается осуществить до четырех циклов передачи данных (до 16 байт в PCI-32). После этого устройство должно подать новый запрос на обслуживание и снова получить управление над шиной (и выполнить адресный цикл). Поэтому шина PCI-32 с тактовой частотой 33 МГц имеет пиковую скорость обычной передачи около 66 Мбайт/с (два шинных цикла для передачи 4 байт) и пиковую скорость пакетной передачи около 105 Мбайт/с. PCI поддерживает процедуру прямого доступа к памяти ведущего устройства на шине (bus mastering DMA), хотя некоторые реализации PCI могут и не предоставлять такую возможность для всех разъемов PCI. Процессор может функционировать параллельно с периферийными устройствами, являющимися ведущими на шине. Кроме того, платы PCI поддерживают: автоматическую конфигурацию Plug&Play (не требуют назначения адресов расширений BIOS вручную); совместное использование прерываний (когда один и тот же номер прерывания может использоваться разными устройствами); контроль четности сигналов шины данных и адресной шины ; конфигурационную память от 64 до 256 байт (код производителя, код устройства, код класса (функции) устройства и др.). Персональные компьютеры могут иметь две или больше шин PCI. Каждой шиной управляет свой мост PCI, что позволяет устанавливать в компьютер больше плат PCI (вплоть до 16 - ограничение адресации). Если управление второй шиной PCI осуществляется с первой шины, то это называется каскадной или иерархической схемой. В этом случае первая шина будет также нести нагрузку второй шины. Если управление каждой шиной PCI осуществляется непосредственно с шины процессора, это называется равноправной схемой. Обычно мост PCI выполняет также функции контроллера внешней кэш-памяти, контроллера основной памяти и обеспечивает сопряжение с процессором. В системах на основе Pentium II/III эти функции распределены между двумя мостами: "северным" (North Bridge) и "южным" (South Bridge), что связано с наличием дополнительного высокоскоростного системного интерфейса для подключения видеокарты ( AGP ). В 1995 году был выпущена улучшенная версия интерфейса - PCI 2.1, которая предоставила следующие возможности: поддержка тактовой частоты шины 66 МГц; таймер обработки множественных запросов MTT (Multi-Transaction Timer) позволяет устройствам, осуществляющим прямой доступ к памяти, удерживать шину для "прерывистой" передачи пакетов, при этом не требуется повторно добиваться права управления шиной, что особенно полезно при передаче видеоданных; пассивное разъединение (Passive Release) позволяет устройствам, осуществляющим прямой доступ к памяти по шине PCI, передавать данные в то время, когда ведется передача данных по шине ISA (обычно это приводило к блокированию передачи по шине PCI, поскольку она использовалась для подключения центрального процессора к шине ISA ); задержанные транзакции PCI позволяют передаваемым данным ведущего устройства на шине PCI получать приоритет над ожидающими в очереди данными для передачи с PCI на ISA (которые будут переданы позже); повышение производительности записи благодаря оснащению PCI-чипсета буферами большего объема, поэтому транзакции могут выстраиваться в очередь, когда шина PCI занята, и происходит сбор байтов, слов и двойных слов, которые могут объединяться в единую 8-байтную операцию записи. C 2005 года в ПК на основе Pentium 4 вместо PCI используют новый системный интерфейс - PCI Express. Порт AGP С повсеместным внедрением технологий мультимедиа пропускной способности шины PCI стало не хватать для производительной работы видеокарты. Чтобы не менять сложившийся стандарт на шину PCI, но, в то же время, ускорить вводвывод данных в видеокарту и увеличить производительность обработки трехмерных изображений, в 1996 году фирмой Intel был предложен выделенный интерфейс для подключения видеокарты - AGP (Accelerated Graphics Port - высокоскоростной графический порт). Впервые порт AGP был представлен в системах на основе Pentium II. В таких системах чипсет был разделен на два моста (рис. 14.3): "северный" (North Bridge) и "южный" (South Bridge). Северный мост связывал ЦП, память и видеокарту - три устройства в системе, между которыми курсируют наибольшие потоки данных. Таким образом, на северный мост возлагаются функции контроллера основной памяти, моста AGP и устройства сопряжения с фасадной шиной процессора FSB (Front-Side Bus). Собственно мост PCI, обслуживающий остальные устройства ввода-вывода в системе, в том числе контроллер IDE (PIIX), реализован на основе южного моста. Одной из целей разработчиков AGP было уменьшение стоимости видеокарты, за счет уменьшения количества встроенной видеопамяти. По замыслу Intel, большие объемы видеопамяти для AGP-карт были бы не нужны, поскольку технология предусматривала высокоскоростной доступ к общей памяти. Интерфейс AGP по топологии не является шиной, т.к. обеспечивает только двухточечное соединение, т.е. один порт AGP поддерживает только одну видеокарту. В то же время, порт AGP построен на основе PCI 2.1 с тактовой частотой 66 МГц, 32разрядной шиной данных и питанием 3,3 В. Поскольку порт AGP и основная шина PCI независимы и обслуживаются разными мостами, это позволяет существенно разгрузить последнюю, освобождая пропускную способность, например, для потоков данных с каналов IDE. В то же время, поскольку AGP-порт всегда один, в интерфейсе нет возможностей арбитража, что существенно упрощает его и положительно сказывается на быстродействии. Для повышения пропускной способности AGP предусмотрена возможность передавать данные с помощью специальных сигналов, используемых как стробы, вместо сигнала тактовой частоты 66 МГц (табл. 2). Например, в режиме AGP 2x данные передаются как по переднему, так и по заднему фронту тактового сигнала, что позволяет достичь пропускной способности 533 Мбайт/с. Таблица 2. Режимы работы AGP Режим AGP 1x Спецификация AGP 1.01997 Уровни 3,3 В напряжений Макс. скорость 266 Мбайт/с AGP 2x AGP 1.01997 3,3 В AGP 4x AGP 2.01998 1,5 В AGP 8x AGP 3.02000 0,8 В 533 Мбайт/с 1066 Мбайт/с 2133 Мбайт/с В AGP существует возможность отмены механизма мультиплексирования шины адреса и данных - режим адресации по боковой полосе SBA (Side-Band Addressing). При использовании SBA задействуются 8 дополнительных линий, по которым передается новый адрес, в то время как по 32-битной шине данных передается пакет от предыдущего запроса. Альтернативный способ повышения эффективности использования пропускной способности AGP с помощью конвейеризации. На PCI по выставленному адресу после задержки появляются данные. На AGP сначала выставляется пакет адресов, на которые следует ответ пакетом данных (рис. 4). Рис. 4. Конвейеризация AGP Главная обработка трехмерных изображений выполняется в основной памяти компьютера как центральным процессором, так и процессором видеокарты. AGP обеспечивает два механизма доступа процессора видеокарты к памяти: DMA (Direct Memory Access) - обычный прямой доступ к памяти. В этом режиме основной памятью считается встроенная видеопамять на карте, текстуры копируются туда из системной памяти компьютера перед использованием их процессором видеокарты; DIME (Direct In Memory Execute) - непосредственное выполнение в памяти. В этом режиме основная и видеопамять находятся как бы в общем адресном пространстве. Общее пространство эмулируется с помощью таблицы отображения адресов GARP (Graphic Address Remapping Table) блоками по 4 Кбайт. Таким образом, процессор видеокарты способен непосредственно работать с текстурами в основной памяти без необходимости их копирования в видеопамять. Этот процесс называется AGP-текстурированием. Чтобы извлечь выгоду из применения порта AGP, помимо требуемой аппаратной поддержки (т.е. графического адаптера AGP и системной платы), необходимую поддержку должны обеспечивать операционная система и драйвер видеоадаптера, а в прикладной программе должны быть использованы новые возможности порта AGP (например, трехмерное проецирование текстур). Существуют модификации порта AGP: спецификация AGP Pro для видеокарт с большой потребляемой мощностью (до 110 Вт), включающая дополнительные разъемы питания; 64-битный порт AGP, используемый для профессиональных графических адаптеров; интерфейс AGP Express, представляющий собой эмуляцию порта AGP при помощи сдвоенного слота PCI в форм-факторе AGP. Применяется на некоторых материнских платах на основе PCI Express для поддержки AGP-видеокарт. В настоящее время порт AGP практически исчерпал свои возможности и активно вытесняется системным интерфейсом PCI Express. PCI Express Интерфейс PCI Express (первоначальное название - 3GIO5 ) использует концепцию PCI, однако физическая их реализация кардинально отличается. На физическом уровне PCI Express представляет собой не шину, а некое подобие сетевого взаимодействия на основе последовательного протокола. Высокое быстродействие PCI Express позволяет отказаться от других системных интерфейсов ( AGP, PCI ), что дает возможность также отказаться от деления системного чипсета на северный и южный мосты в пользу единого контроллера PCI Express. Одна из концептуальных особенностей интерфейса PCI Express, позволяющая существенно повысить производительность системы, - использование топологии "звезда". В топологии "шина" (рис. 5а) устройствам приходится разделять пропускную способность PCI между собой. При топологии "звезда" (рис. .5б) каждое устройство монопольно использует канал, связывающий его с концентратором (switch) PCI Express, не деля ни с кем пропускную способность этого канала. Рис. 5. Сравнение топологий PCI и PCI Express Канал (link), связывающий устройство с концентратором PCI Express, представляет собой совокупность дуплексных последовательных (однобитных) линий связи, называемых полосами (lane). Дуплексный характер полос также контрастирует с архитектурой PCI, в которой шина данных - полудуплексная (в один момент времени передача выполняется только в определенном направлении). На электрическом уровне каждая полоса соответствует двум парам проводников с дифференциальным кодированием сигналов. Одна пара используется для приема, другая - для передачи. PCI Express первого поколения декларирует скорость передачи одной полосы 2,5 Гбит/с в каждом направлении. В будущем планируется увеличить скорость до 5 и 10 Гбит/с. Канал может состоять из нескольких полос: одной (x1 link), двух (x2 link), четырех (x4 link), восьми (x8 link), шестнадцати (x16 link) или тридцати двух (x32 link). Все устройства должны поддерживать работу с однополосным каналом. Аналогично, различают слоты: x1, x2, x4, x8, x16, x32. Однако слот может быть "шире", чем подведенный к нему канал, т.е. на слот x16 фактически может быть выведен канал x8 link и т.п. Карта PCI Express должна физически подходить и корректно работать в слоте, который по размерам не меньше разъема на карте, т.е. карта x4 будет работать в слотах x4, x8, x16, даже если реально к ним подведен однополосный канал. Процедура согласования канала PCI Express обеспечивает выбор максимального количества полос, поддерживаемого обеими сторонами. При передаче данных по многополосным каналам используется принцип чередования или "разборки данных" (data stripping): каждый последующий байт передается по другой полосе. В случае канала x2 это означает, что все четные байты передаются по одной полосе, а нечетные - по другой. Как и большинство других высокоскоростных последовательных протоколов, PCI Express использует схему кодирования данных, встраивающую тактирующий сигнал в закодированные данные, т.е. обеспечивающую самосинхронизацию. Применяемый в PCI Express алгоритм 8B / 10B (8 бит в 10 бит) обеспечивает разбиение длинных последовательностей нулей или единиц так, чтобы приемная сторона не потеряла границы битов. С учетом кодирования 8B/10B пропускную способность однополосного канала PCI Express можно оценить, как 2500 Мбит/с / 10 бит/байт = 250 мегабайт/с (238 Мбайт/с). PCI Express обеспечивает передачу управляющих сообщений, в том числе прерываний, по тем же линиям данных. Последовательный протокол не предусматривает блокирование, поэтому легко обеспечивается латентность, сопоставимая с PCI, где имеются выделенные линии для прерываний. Интерфейсы накопителей Первоначально для подключения накопителей к IBM PC использовались интерфейсы низкого уровня, классифицируемые как интерфейсы на уровне устройства: ST506 (Shugart Technology), ESDI (Enhanced Small Device Interface). Для таких интерфейсов характерно, что их сигналы являются функцией генерирующего и использующего их устройства. Это позволяет использовать весьма простую электронику в самом устройстве, а основную нагрузку по обработке данных переложить на контроллер или процессор, что, естественно, негативно отражается на скоростных и прочих характеристиках подобных накопителей. Например, для ST-506/412: Direction In (направление), Step (шаг), Head Select (выбор головки) и т.п. Более того, сигнал с носителя, включающий в себя данные и биты синхронизации, передавался через интерфейс в аналоговом виде, поскольку разделение этой информации, выполняемое специальным блоком - сепаратором, происходило в контроллере. Появление новых методов кодирования информации ( RLL6 вместо MFM7 ) привело к необходимости создания ориентированных на эти методы контроллеров (RLL-контроллер вместо MFM-контроллера), причем не гарантировалась надежная работа MFM-винчестера с RLL-контроллером. В интерфейсе ESDI эта проблема была решена, поскольку сепаратор был перенесен из контроллера в само устройство. Кроме того, в интерфейсе ESDI была выделена последовательная линия Command Data для передачи 16-битных команд, что перевело взаимодействие контроллера и винчестера ESDI на более высокий уровень и позволило повысить скорость передачи данных до 20 Мбит/с. В настоящее время распространены интерфейсы системного уровня, использующие сигналы в логике центрального процессора, что предполагает реализацию функций контроллера накопителя в самом накопителе, а устройство, сопрягающее интерфейс накопителя с системной шиной ПК, выполняет лишь роль адаптера интерфейса (моста). В IBM PC таким интерфейсом является EIDE/ATA. Он представляет собой "приставку" к 16-битной шине ISA, иначе называемой AT Bus, поэтому стандарт именуется AT Attachment (ATA). Другое название интерфейса Enhanced Integrated Drive Electronics (EIDE). Первая спецификация ATA (IDE) определяла возможность подключения двух устройств к одному интерфейсу. Спецификация ATA-2 (EIDE) описывает совместную работу двух интерфейсов, позволяя, таким образом, подключать до четырех устройств. С внедрением стандарта ATA-4 на поддержку пакетных команд (ATAPI - ATA Packet Interface) стало возможным подключение устройств со сменным накопителем (приводы CDROM/DVD-ROM, стримеры, приводы флоппи-дисков большого объема). Последующие спецификации добавляли новые скоростные режимы (табл.3) и решали некоторые проблемы (табл. 4). После появления интерфейса SerialATA принято ссылаться на EIDE/ATA как Parallel ATA. Таблица 3. Режимы работы интерфейса EIDE/ATA Режим Скорость, Мбайт/с Стандарт PIO8 SW DMA9 0 1 2 3 4 0 1 2 3,3 5,2 8,3 11 16 2,1 4,2 8,3 1 1 1 2 2 1 1 1 MW DMA10 Ultra DMA 0 1 2 0 1 2 3 4 5 6 4,2 13 16 16 25 33 44 66 100 133 1 2 2 4 4 4 5 5 6 7 Таблица 4. Сводная таблица стандартов EIDE/ATA № 1 2 3 4 Псевдоним ATA, IDE EIDE, FastATA EIDE ATAPI ANSI11 / NCITS12 X3.221-1994 X3.279-1996 X3.298-1997 NCITS 317-1998 5 6 UltraATA/66 UltraATA/100 NCITS 340-2000 NCITS 347-2001 7 UltraATA/133 NCITS 361-2002 Особенности Накопители размером <528 мегабайт Адресация LBA 24 бита (до 8,4 гигабайт) Адресация LBA 28 бит (до 134 гигабайт), SMART Поддержка пакетных команд (ATAPI) - поддержка CD-ROM 80-контактный кабель Адресация LBA 48 бит, автоматическое управление акустикой Потоковое расширение (streaming), "длинные" сектора В современной вычислительной технике наблюдается тенденция перехода на высокоскоростные последовательные интерфейсы. Так, для накопителей был предложен последовательный интерфейс SerialATA, по своим характеристикам представляющий собой "приставку" к PCI Express. Стандарт SATA/150 обеспечивает пропускную способность до 1,5 Гбит/с (без учета кодирования 8B / 10B). Стандарт SATA/300 обеспечивает пропускную способность до 3 Гбит/с (без учета кодирования 8B/10B). Каждое устройство работает на отдельном кабеле. Стандарт предусматривает горячую замену устройств и функцию очереди команд. SATAустройства используют два разъема: 7-контактный - для подключения шины данных и 15-контактный - для подключения питания. Передача данных происходит в дуплексном режиме по двум парам проводником (одна пара - на прием, другая - на передачу) с использованием дифференциального кодирования сигналов. Кроме перечисленных интерфейсов, для подключения накопителей используются универсальные периферийные интерфейсы, речь о которых пойдет в следующей главе - SCSI, USB, FireWire и т.п. КОНТРОЛЬНЫЕ ВОПРОСЫ: 1. Что такое интерфейс? Назовите основные интерфейсные функции. 2. Перечислите основные технические характеристики интерфейсов ввода/вывода. 3. Системные интерфейсы микроЭВМ и их особенности. 4. Назовите интерфейсы на уровне устройств. 5. Сравните шины расширения ввода/вывода. 6. Перечислите основные особенности интерфейса AGP. 7. Какие шины расширения используются в архитектуре ПК в настоящее время? Интерфейсы периферийных устройств Интерфейсы SCSI Интерфейс SCSI был разработан в конце 1970-х годов и предложен организацией Shugart Associates. Первый стандарт на этот интерфейс был принят в 1986 г. SCSI определяет только логический и физический уровень. Устройства, подключенные к шине SCSI, могут играть две роли: Initiator (ведущий) и Target (ведомый), причем одно и то же устройство может быть как ведущим, так и ведомым. К шине может быть подключено до восьми устройств. Каждое устройство на магистрали имеет свой адрес (SCSI ID) в диапазоне от 0 до 7. Одно из этих устройств хост-адаптер SCSI. Ему обычно назначают SCSI ID = 7. Хост-адаптер предназначен для осуществления обмена с процессором. Хост-адаптер, как правило, имеет разъемы для подключения как встраиваемых, так и внешних SCSI-устройств. Стандарт SCSI определяет два способа передачи сигналов - синфазный и дифференциальный. В первом случае сигналы на линиях имеют ТТЛ-уровни, при этом длина кабеля ограничена 6 м. Версии шины SCSI с дифференциальной передачей сигнала ("токовой петлей") дают возможность увеличить длину шины до 25 м. Чтобы гарантировать качество сигналов на магистрали SCSI, линии шины должны быть с обеих сторон согласованы при помощи набора согласующих резисторов, или терминаторов. Терминаторы должны быть установлены на хостадаптере и на последнем устройстве магистрали. Обычно используют один из трех методов согласования: пассивное согласование при помощи резисторов; FPT (Force Perfect Termination) - улучшенное согласование с исключением перегрузок при помощи ограничительных диодов; активное согласование при помощи регуляторов напряжения. Обмен данными между устройствами на шине SCSI происходит в соответствии с протоколом высокого уровня на основе стандартного списка команд CCS (Common Command Set). Этот универсальный набор команд обеспечивает доступ к данным с помощью адресации логических, а не физических блоков. С внедрением в спецификацию CSS команд, поддерживающих приводы CDROM, коммуникационные устройства, сканеры и др. (стандарт SCSI-2), стала осуществимой работа практически с любыми блочными устройствами. На магистрали SCSI возможны синхронные и асинхронные передачи. В асинхронном режиме передача данных сопровождается сигналом запроса и заканчивается только после получения сигнала подтверждения. При синхронной передаче данных ведущее устройство не дожидается сигналов подтверждения перед выдачей сигнала запроса и приема следующих данных. После выдачи определенной серии импульсов запроса ведущее устройство сравнивает его с числом подтверждений, чтобы удостовериться, что группа данных принята успешно. Т.к. в этом режиме все равно участвуют сигналы квитирования, его еще называют асинхронным с согласованием скорости. В исходном стандарте шина SCSI имеет восемь линий данных. Для повышения производительности в спецификацию SCSI-2 введен так называемый широкий (Wide) вариант шины данных, предусматривающий наличие дополнительных 24 разрядов. Для повышения пропускной способности шины SCSI было предложено увеличить тактовую частоту обмена примерно в два раза, что послужило основой нового стандарта - Fast SCSI-2. Дальнейшее увеличение пропускной способности шины привело к появлению стандарта UltraSCSI (см. табл. 1). Таблица 1. Сравнение различных вариантов интерфейса SCSI-2 Максимальная пропускная способность Стандарт Wide SCSI 8 бит 16 бит 32 бит SCSI 5 Мбайт/с 10 Мбайт/с 20 Мбайт/с Fast SCSI 10 Мбайт/с 20 Мбайт/с 40 Мбайт/с UltraSCSI 20 Мбайт/с 40 Мбайт/с 80 Мбайт/с Максимальная длина кабеля (синфазный) 6м 3м 1,5 м Следует отметить, что существует также спецификация на программный интерфейс драйверов хост-адаптера и SCSI-устройств, разработанная фирмой Adaptec, ASPI (Advanced SCSI Programming Interface). Другая спецификация - SCAM (SCSI Configuration Auto Magically) - позволяет упростить настройку SCSIустройств и скрыть от пользователя некоторые ее детали. Интерфейс RS-232C Стандарт на последовательный интерфейс RS-232C был опубликован в 1969 г. Ассоциацией электронной промышленности (EIA). Первоначально этот интерфейс использовался для подключения ЭВМ и терминалов к системе связи через модемы, а также для непосредственного подключения терминалов к машинам. До недавнего времени последовательный интерфейс использовался для широкого спектра периферийных устройств (плоттеры, принтеры, мыши, модемы и др.), но сейчас активно вытесняется интерфейсом USB. Стандарт RS-232C определяет: механические характеристики интерфейса (разд.1) - разъемы и соединители; электрические характеристики сигналов (разд.2) - логические уровни; функциональные описания интерфейсных схем (разд.4) - протоколы передачи; стандартные интерфейсы для выбранных конфигураций систем связи (разд. 5). В 1975 г. были приняты стандарты RS-422 (электрические характеристики симметричных цепей цифрового интерфейса) и RS-423 (электрические характеристики несимметричных цепей цифрового интерфейса), позволяющие увеличить скорость передачи данных по последовательному интерфейсу. Обычно ПК имеют в своем составе два интерфейса RS-232C, которые обозначаются COM1 и COM2. Возможна установка дополнительного оборудования, которое обеспечивает функционирование в составе PC четырех, восьми и шестнадцати интерфейсов RS-232C. Для подключения устройств используется 9-контактный (DB9) или 25-контактный (DB25) разъем. Интерфейс RS-232C содержит сигналы квитирования, обеспечивая асинхронный режим функционирования (табл. 2). При этом одно из устройств (обычно компьютер) выступает как DTE (Data Terminal Equipment - оконечное устройство), а другое как DCE (Data Communication Equipment устройство передачи данных), например, модем. Соответственно, если для DTE какой-то сигнал является входным, то для DCE этот сигнал будет выходным, и наоборот. Таблица 2. Сигналы интерфейса RS-232C Сигнал FG TxD RxD RTS CTS DSR SG DCD DTR RI Номер контакта Описание DB25 DB9 1 Fore Ground. Защитное заземление 2 3 Transmit Data. Данные, передаваемые DTE 3 2 Receive Data. Данные, принимаемые DTE 4 7 Request To Send. Запрос передачи, выставляется DTE 5 8 Clear To Send. Сигнал сброса для передачи, выставляется DCE при готовности к приему 6 6 Data Set Ready. Готовность данных, выставляется DCE при готовности к передаче 7 5 Signal Ground. Сигнальное заземление, "нулевой" провод 8 1 Data Carrier Detect. Обнаружение несущей данных, выставляется DCE при детектировании принимаемого сигнала 20 4 Data Terminal Ready. Готовность DTE 22 9 Ring Indicator. Индикатор вызова, выставляется DCE при приеме вызова по телефонной сети В то же время, в простейшем случае для обмена могут использоваться лишь три линии: TxD, RxD и SG - без использования сигналов квитирования. Основные принципы обмена информацией по интерфейсу RS-232C заключаются в следующем: 1. Обмен данными обеспечивается по двум цепям, каждая из которых является для одной из сторон передающей, а для другой - приемной. 2. В исходном состоянии по каждой из этих цепей передается двоичная единица, т.е. стоповая посылка. Передача стоповой посылки может выполняться сколь угодно долго. 3. Передаче каждого пакета данных предшествует передача стартовой посылки, т.е. передача двоичного нуля в течение времени, равного времени передачи одного бита данных. 4. После передачи стартовой посылки обеспечивается последовательная передача всех разрядов данных, начиная с младшего разряда. Количество битов может быть 5, 6, 7 или 8. 5. После передачи последнего бита данных возможна передача контрольного разряда, который дополняет сумму по модулю 2 переданных разрядов до четности или нечетности. В некоторых системах передача контрольного бита не выполняется. 6. После передачи контрольного разряда или последнего бита, если формирование контрольного разряда не предусмотрено, обеспечивается передача стоповой посылки. Минимальная длительность посылки может быть равной длительности передачи одного, полутора или двух бит данных. Обмен данными по описанным выше принципам требует предварительного согласования приемника и передатчика по скорости (длительности бита) (300115200 бит/с), количеству используемых разрядов в символе (5, 6, 7 или 8), правилам формирования контрольного разряда (контроль по четности, по нечетности или отсутствие контрольного разряда), длительности передачи стоповой посылки (1 бит, 1,5 бит или 2 бит). Спецификация RS-232C для электрических характеристик сигналов определяет, что высокий уровень напряжения от +3В до +12В (при передаче - до +15В) считается логическим "0", а низкий уровень напряжения от 3В до 12В (при передаче - до 15В) считается логическим "1" (рис. 1). Диапазон сигналов 3В:+3В обеспечивает защиту от помех и стабильность передаваемых данных. Рис. 1. Логические уровни интерфейса RS-232C Интерфейс IEEE 1284 Стандартный интерфейс параллельного порта получил свое первоначальное название по имени американской фирмы Centronics - производителя принтеров. Первые версии этого стандарта были ориентированы исключительно на принтеры, подразумевали передачу данных лишь в одну сторону (от компьютера к принтеру) и имели невысокую скорость передачи (150-300 Кбайт/с). Такие скорости неприемлемы для современных печатающих устройств. Кроме того, для работы с некоторыми устройствами необходима двусторонняя передача данных. Поэтому некоторые фирмы (Xircom, Intel, Hewlett Packard, Microsoft) предложили несколько модификаций скоростных параллельных интерфейсов: EPP (Enhanced Parallel Port) - до 2 Мбайт/с, ECP (Extended Capabilities Port) - до 4 Мбайт/с и др. На основе этих разработок в 1994 году Институтом инженеров по электронике и электротехнике был принят стандарт IEEE 1284-1994, ныне повсеместно используемый в персональных компьютерах в качестве стандартного параллельного интерфейса. Таблица 3. Сигналы интерфейса IEEE 1284 Разъем DB25 Напряжение SPP Nibble Mode EPP ECP 1 O STROBE# WRITE# HostClk 2 O (I) DATA0 AD0 D0 3 O (I) DATA1 AD1 D1 4 O (I) DATA2 AD2 D2 5 O (I) DATA3 AD3 D3 6 O (I) DATA4 AD4 D4 7 O (I) DATA5 AD5 D5 8 O (I) DATA6 AD6 D6 9 O (I) DATA7 AD7 D7 10 I ACK# PtrClk Intr# PeriphClk 11 I BUSY D3/D7 Wait# PeriphAck 12 I PE D2/D6 AckDataReq AckReverse# 13 I SELECT D1/D5 XFlag XFlag 14 O AUTOFD# HostBusy DataStb# HostAck 15 I ERROR# D0/D4 DataAvail# PeriphReq# 16 O INIT# Reset# ReverseReq# 17 O SLCTIN# NibbleMode AddrStb# 1284Active 18-25 GND GND GND GND Стандарт IEEE 1284 определяет работу параллельного интерфейса в трех режимах: Standard Parallel Port ( SPP ), Enhanced Parallel Port ( EPP ) и Extended Capabilities Port ( ECP ). Каждый из этих режимов предусматривает двустороннюю передачу данных между компьютером и периферийным устройством. Режим SPP (Стандартный параллельный порт) используется для совместимости со старыми принтерами, не поддерживающими IEEE 1284. Режиму SPP соответствуют три программно доступных регистра: порт BASE+0 - SPP Data - регистр данных, порт BASE+1 - SPP Status - регистр состояния, порт BASE+2 - SPP Control - регистр управления. Для устройства LPT1 базовым адресом (BASE) в пространстве портов вводавывода обычно является 378h. В этом режиме линии DATA[0:7] используются для прямой передачи данных (от компьютера к периферийному устройству). Сигналы STROBE#, ACK# и BUSY используются для квитирования. Сигналом STROBE# компьютер информирует о готовности данных на линиях DATA[0:7]. Если устройство приняло выставленные компьютером данные, то оно выставляет сигнал ACK#. Во время приема данных, во время инициализации, а также при наличии ошибки устройство выставляет сигнал BUSY. О возникновении ошибочной ситуации сигнализирует линия ERROR#, а также PE (кончилась бумага). О том, что принтер включен и готов к работе, сообщается при помощи сигнала SELECT. Для подтверждения выбора принтера компьютер выставляет сигнал SLCTIN#. При необходимости очистить буфер принтера и перевести его в исходное состояние выставляется INIT#. Сигнал AUTOFD# используется при работе с матричными принтерами в текстовом режиме для продвижения бумаги на одну строку. Для организации обратного канала (передача данных от принтера в компьютер) в режиме SPP возможны два механизма: механизм двунаправленного порта (впервые представленный в IBM PS/2 в 1987 г.) и механизм передачи полубайтами (Nibble Mode). При использовании механизма двунаправленного порта способ квитирования не декларируется. Особенностью обратного канала в Nibble Mode является то, что за один цикл передается только 4 бита данных. Таким образом, скорость в обратном канале в два раза меньше, чем в прямом канале. Преимуществом использования Nibble Mode является возможность программной реализации этого механизма на любом старом параллельном порту, не поддерживающем IEEE 1284. Сигналом активности этого механизма является высокий уровень на линии NibbleMode (при прямой передаче на этой линии выставляется низкий уровень). Для квитирования используются линии HostBusy (сигнал устанавливается компьютером в низкий уровень, когда он готов к приему) и PtrClk (низкий уровень сигнала подтверждает действительность данных D[0:4]/D[5:7]). В режиме EPP (Улучшенный параллельный порт) используется аппаратная реализация сигналов квитирования, благодаря чему возможно увеличение скорости передачи до 2 Мбайт/с. Этот режим поддерживает адресацию устройств, благодаря чему возможно подключение нескольких (до 64) устройств к одному порту. Генерация цикла чтения или записи на шине IEEE 1284 со всеми необходимыми сигналами квитирования происходит при обращении к регистру EPP Address (BASE+3) или EPP Data (BASE+4). При этом адаптер IEEE 1284 устанавливает сигнал Write# в зависимости от направления передачи (низкий уровень - прямая передача, высокий уровень - обратная передача). Для периферийного устройства информацией о том, являются ли биты на линиях AD[0:7] данными или адресом, является сигналы DataStb# (строб данных) или AddrStb# (строб адреса). Периферийное устройство информирует компьютер о своей готовности принять очередной байт при помощи сигнала Wait#. Сигнал Reset#, так же как и в режиме SPP используется для инициализации устройства. Установка периферийным устройством сигнала Intr# вызывает генерацию прерывания. Сигналы AckDataReq и DataAvail# используются по усмотрению разработчика, например, для квитирования в обратном канале. Режим ECP (Порт расширенных возможностей) также использует аппаратное квитирование и адресацию устройств (до 128). Дополнительно ECP поддерживает распознавание ошибок, согласование скорости и режима передачи, буферизацию данных в очереди FIFO (с использованием DMA) и их компрессию по алгоритму RLE (Run Length Encoding), что позволяет достигать скорость до 4 Мбайт/с. Признаком активности режима ECP является высокий уровень сигнала 1284Active. При прямой передаче для квитирования используются сигналы HostClk и PeriphAck, а сигнал HostAck указывает на тип передаваемых данных: высокий уровень - обычные данные, низкий уровень - команда или адрес. Для запроса обратного канала компьютер выставляет сигнал ReverseReq#, который устройство подтверждает сигналом AckReverse#. В обратном канале для квитирования применяются сигналы PeriphClk и HostAck, а сигнал PeriphAck используется устройством для указания типа передаваемых данных. Устройство может запросить обслуживание при помощи сигнала PeriphReq#. В режиме ECP параллельный порт может эмулировать работу любого другого режима IEEE 1284, что определяется в соответствующих битах расширенного регистра управления (ECR) по адресу BASE+400h: Таблица 4. Режимы работы порта ECP Номер Обозначение Описание 0002 SPP Режим стандартного параллельного порта с программным квитированием 0012 Bi-directional mode Поддержка обратного канала для режима SPP, как в IBM PS/2 0102 Fast Centronics Режим стандартного параллельного порта с аппаратным квитированием 0112 ECP Режим ECP с поддержкой FIFO и RLE 1002 EPP Режим EPP 1012 Reserved 1102 Test mode Режим самотестирования FIFO и прерываний 1112 Configuration mode Режим конфигурирования Инфракрасный интерфейс В 1994 году Ассоциацией инфракрасной передачи данных (InfraRed Data Assotiation) была принята первая версия стандарта IrDA. Интерфейс IrDA позволяет соединяться с периферийным оборудованием без кабеля при помощи ИК-излучения с длиной волны 850-900 нм (номинально - 880 нм). Порт IrDA дает возможность устанавливать связь на коротком расстоянии до 1 метра в режиме "точка-точка". Ассоциация намеренно не пыталась создавать локальную сеть на основе ИК-излучения, поскольку сетевые интерфейсы очень сложны и требуют большой мощности, а в цели интерфейса входили низкое ресурсопотребление и экономичность. Порт IrDA основан на архитектуре коммуникационного порта и использует универсальный асинхронный приемопередатчик UART (Universal Asynchronous Receiver Transmitter), позволяющий работать со скоростью передачи данных 2400-115200 бит/с. Данные передаются 10-битными символами: 8 бит данных, один стартовый бит в начале и один стоповый бит в конце посылки. Связь в IrDA полудуплексная, т.к. передаваемый ИК-луч неизбежно засвечивает приемный фотодиод. Воздушный промежуток между устройствами позволяет принять ИК-энергию только от одного источника в данный момент. На физическом уровне стандарт IrDA определяет следующий способ кодирования: логический "0" передается одиночным ИК-импульсом длиной от 1,6 мкс до 3/16 периода передачи битовой ячейки, а логическая "1" передается как отсутствие ИК-импульса. Минимальная мощность потребления гарантируется при фиксированной длине импульса 1,6 мкс (рис. 2). Рис. 15.2. Формат пакета IrDA Описанный способ кодирования (асинхронный) используется на скоростях до 115200 бит/с. В стандарте IrDA 1.1 этот режим определяется как SIR (Standard InfraRed). Кроме того, стандарт IrDA 1.1 допускает реализацию высокоскоростного ИКинтерфейса до 4 Мбит/с - FIR (Fast Infra-Red). В этом случае ИКинтерфейс реализуется на основе синхронных протоколов HDLC/SDLC (Highlevel Data Link Control / Synchronous Data Link Control) с использованием на скоростях выше 1 Мбит/с фазоимпульсной модуляции. В настоящее время существует дополнение к стандарту IrDA - VFIR (Very Fast IR), описывающее обмен данными на скоростях до 16 Мбит/с. Т.к. ИК-интерфейс предусматривает только полудуплексный обмен, стандарт IrDA описывает архитектуру с одним главным (первичным) и множественными подчиненными (вторичными) устройствами. Схема обращения устройств представляет собой обычный протокол обмена данными, где есть фазы запросов (Request) и ответов (Response). Так, первичное устройство отвечает за организацию соединения и за обработку ошибок, посланные им кадры называются управляющими (Command Frames), а пакеты вторичных устройств именуются ответными (Response Frames). Обмен информацией идет только с первичным устройством, которое всегда выступает инициатором соединения, однако его роль может играть любое из устройств, поддерживающих необходимые для этого функции. По желанию может быть включен протокол транспортного уровня, позволяющий осуществлять контроль передачи между приложениями в случае одновременной работы нескольких приложений на одной физической линии. Каждое устройство имеет 32-битный адрес, вырабатываемый случайным образом при установлении соединения. Каждому кадру в пределах соединения ведущее устройство при старте присваивает 7-битный адрес соединения. Для возможных, но нежелательных случаев, когда два устройства имеют одинаковый адрес, предусмотрен такой механизм, когда ведущее устройство дает команду всем подчиненным устройствам изменить их адреса. Кроме протоколов физического уровня, стандарты IrDA определяют стек протоколов программного уровня (табл. 5). Таблица 5. Стек протоколов IrDA IrLMP-IAS IrCOMM TinyTP OBEX IrLMP-MUX IrLAP IrPHY: SIR / FIR Протокол IrLAP устанавливает правила доступа к ИК-среде, процедуры открытия канала, согласование абонентов сети, обмена информацией (разбиение данных на блоки, контроль ошибок) и т.д. Перед тем, как начать передачу, устройство, не принимающее в данный момент времени участия в обмене, должно прослушивать канал не менее 500 мс, чтобы убедиться в отсутствии трафика. С другой стороны, устройство, участвующее в обмене, должна вести передачу не более 500 мс. Максимальный квант передачи может быть равен 100, 200 или 500 мс. Он представляет собой максимальное время, в течение которого устройство передает данные до того, как перейдет к прослушиванию подтверждения приема, и зависит от скорости передачи и емкости буфера в принимающем устройстве. Доступ к среде передачи регулируется посредством специального бита PF (Poll/Final), который устанавливается в теле кадра и выполняет функции, аналогичные маркеру. IrLAP допускает передачи без установления предварительного соединения. Такая передача является широковещательной и не требует получения подтверждения станции получателя. Процедура открытия канала предусматривает обмен идентификационной информацией (ID). Инициатор широковещательного обмена передает ID предопределенное количество раз и прослушивает канал в интервалах между слотами. Станцияполучатель случайным образом выбирает слот и посылает в ответ свой ID. При обнаружении коллизии процедура повторяется и применяется для согласования параметров функционирования станций (скорость обмена, максимальная длина пакета). При установлении соединения обмен данными, объем которых не должен превышать 64 байта, осуществляется со скоростью 9600 бит/с. После того, как соединение установлено, скорость обмена и величина пакета данных могут быть увеличены до максимальных. Кроме пакетов с пользовательскими данными, в обмене участвуют специальные кадры, служащие для управления потоком, коррекции ошибок и передачи маркера. Протокол управления каналом IrLMP (Link Management Protocol) является обязательным, однако его некоторые особенности могут быть опциональны. Протокол IrLMP содержит два компонента: LM-IAS (Link Management Information Access Service) и LMMUX (Link Management MUltipleXer). Каждое устройство IrDA содержит таблицу сервисов и протоколов, доступных в настоящий момент. Эта информация может запрашиваться у других устройств. LMIAS управляет информационной базой так, что станции могут запросить, какие службы предоставляются. Эта информация хранится в виде объектов, с каждым из которых связан набор атрибутов. LM-MUX выполняет мультиплексирование каналов поверх одного соединения, устанавливаемого протоколом IrLAP. С этой целью определяется множество точек доступа канала LSAP (Link Service Access Point) каждая с уникальным идентификатором (селектором). Таким образом, каждое из LSAP-соединений определяет логически различные информационные потоки. LM-MUX функционирует в двух режимах: мультиплексирования и эксклюзивном. Первый режим позволяет разделять одно физическое соединение нескольким задачам. В этом случае управление потоком должно быть обеспечено протоколами верхнего уровня (например, TinyTP) или непосредственно приложением. Второй режим отдает все ресурсы одному единственному приложению. Также IrLMP предусматривает три варианта доступа: с установлением предварительного соединения, без установления предварительного соединения (Сonnectionless) и режим сбора информации о возможностях, сервисах и приложениях удаленного устройства (XID_Discovery). TinyTP (Tiny Transport Protocol) - транспортный протокол, осуществляющий функции управления потоком для любого LSAP-соединения независимо. Каждая точка доступа этого протокола (TTPSAP TinyTP Service Access Point) идентифицируется с единственной точкой доступа IrLMP и использует единый с ней адрес. TinyTP также управляет сегментацией и сборкой кадров. На базе TinyTP чаще всего используются протоколы верхнего уровня IrCOMM и OBEX. Протокол IrCOMM - это протокол эмуляции последовательного или параллельного портов. IrCOMM предоставляет пять типов сервисов: 3-Wire Raw, IrLPT, 3-Wire, 9-Wire и Centronics. Сервисы 3-Wire Raw и IrLPT работают только через одно эксклюзивное соединение (поверх LM-MUX без использования TinyTP) и применяются, когда необходимо передавать исключительно данные. Сервис 3Wire эмулирует 3-проводный интерфейс RS-232C (сигналы SG, TxD, RxD), используя возможности TinyTP. Сервис 9-Wire предназначен для более точной эмуляции интерфейса RS-232C и обрабатывает, кроме трех вышеупомянутых, еще шесть сигналов (RTS, CTS, DSR, DTR, CD, RI), что позволяет использовать его для подключения модемов с ИК-интерфейсом. Сервис Centronics - это не что иное, как виртуальный параллельный интерфейс на базе TinyTP. Протокол OBEX (OBject EXchange) обеспечивает обмен объектами произвольного типа между устройствами (например, объекты vCard, vCalendar, vNotes и т.п.) В настоящее время OBEX используется поверх многих беспроводных интерфейсов (например, BlueTooth). Интерфейс USB Спецификация периферийной шины USB была разработана лидерами компьютерной и телекоммуникационной промышленности (Compaq, DEC, IBM, Intel, Microsoft, NEC и Northern Telecom) для подключения компьютерной периферии вне корпуса ПК с автоматическим автоконфигурированием (Plug&Play). Первая версия стандарта появилась в 1996 г. Агрессивная политика Intel по внедрению этого интерфейса стимулирует постепенное исчезновение таких низкоскоростных интерфейсов, как RS 232C, Access.bus и т.п. Однако для высокоскоростных устройств с более строгими требованиями к производительности (например, доступ к удаленному накопителю или передача оцифрованного видео) конкурентом USB является интерфейс IEEE 1394. Интерфейс USB представляет собой последовательную, полудуплексную, двунаправленную шину со скоростью обмена: USB 1.1 - 1,5 Мбит/с или 12 Мбит/с; USB 2.0 - 480 Мбит/с. Шина позволяет подключить к ПК до 127 физических устройств. Каждое физическое устройство может, в свою очередь, состоять из нескольких логических (например, клавиатура со встроенным манипулятором-трекболом). Кабельная разводка USB начинается с узла (host) (рис. 15.3). Хост обладает интегрированным корневым концентратором (root hub), который предоставляет несколько разъемов USB для подключения внешних устройств. Затем кабели идут к другим устройствам USB, которые также могут быть концентраторами, и функциональным компонентам (например, модем или акустическая система). Концентраторы часто встраиваются в мониторы и клавиатуры (которые являются типичными составными устройствами). Концентраторы могут содержать до семи "исходящих" портов. Рис. 3. Топология подключения устройств к USB Для передачи сигналов шина USB использует четырехпроводной интерфейс. Одна пара проводников ("+5В" и "общий") предназначена для питания периферийных устройств с нагрузкой до 500 мА. Данные передаются по другой паре ("D+" "D"). Для передачи данных используются дифференциальные напряжения до 3 В (с целью снижения влияния шума) и схема кодирования NRZI1 (что избавляет от необходимости выделять дополнительную пару проводников под тактовый сигнал). Интерфейс USB 1.1 декларирует два режима: низкоскоростной подканал (пропускная способность - 1,5 Мбит/с), предназначенный для таких устройств, как мыши и клавиатуры; высокопроизводительный канал, обеспечивающий максимальную пропускную способность 12 Мбит/с, что может использоваться для подключения внешних накопителей или устройств обработки и передачи аудио- и видеоинформации. Все концентраторы должны поддерживать на своих исходящих портах устройства обоих типов, не позволяя высокоскоростному трафику достигать низкоскоростных устройств. Высокопроизводительные устройства подключаются с помощью экранированного кабеля, длина которого не должна превышать 3 м. Если же устройство не формулирует особых требований к полосе пропускания, его можно подключить и неэкранированным кабелем (который может быть более тонким и гибким). Максимальная длина кабеля для низкоскоростных устройств - 5 м. Требования устройства к питанию (диаметр проводников, потребляемая мощность) могут обусловить необходимость использования кабеля меньшей длины. Из-за особенностей распространения сигнала по кабелю число последовательно соединенных концентраторов ограничено шестью (и семью пятиметровыми отрезками кабеля). Хост узнает о подключении или отключении устройства из сообщения от концентратора (эта процедура называется опросом шины - bus enumeration). Затем хост присваивает устройству уникальный адрес USB (1:127). После отключения устройства от шины USB его адрес становится доступным для других устройств. Для индивидуального обращения к конкретным функциональным возможностям составного устройства применяется 4-битное поле конечной точки. В низкоскоростных устройствах за каждой функцией закрепляется не более двух адресов конечных точек: нулевая конечная точка используется для конфигурации и определения состояния USB, а также управления функциональным компонентом; а другая точка - в соответствии с функциональными возможностями компонента. Устройства с максимальной производительностью могут поддерживать до 16 конечных точек, резервируя нулевую точку для задач конфигурации и управления USB. Хост опрашивает все устройства и выдает им разрешения на передачу данных (рассылая для этого пакет-маркер - Token Packet). Таким образом, устройства лишены возможности непосредственного обмена данными - все данные проходят через хост. Это условие сильно мешало внедрению интерфейса USB на рынок портативных устройств. В результате в конце 2001 года было принято дополнение к стандарту USB 2.0 - спецификация USB OTG (On-The-Go), предназначенная для соединения периферийных USB-устройств друг с другом без необходимости подключения к хосту (например, цифровая камера и фотопринтер). Устройство, поддерживающее USB OTG, способно частично выполнять функции хоста и распознавать, когда оно подключено к полноценному хосту (на основе ПК), а когда - к другому периферийному устройству. Спецификация описывает также протокол согласования выбора роли хоста при соединении двух USB OTG-устройств. Данные на шине передаются транзакциями, интервал между которыми составляет 1 мс. Предусмотрено четыре типа транзакций. Управляющие передачи используются для конфигурации вновь подключенных устройств (например, присвоения им адреса USB ) и их компонентов. Устройства с максимальной производительностью могут быть настроены на работу с конфигурационными сообщениями длиной 8, 16, 32 или 64 байта (по умолчанию 8 байт). Устройства с низкой производительностью в состоянии распознавать управляющие сообщения длиной не более 8 байт. Групповая передача (bulk) используется для адресной пересылки данных большого объема (до 1023 байт). В качестве примера можно привести передачу данных на принтер или от сканера. Устройства с низкой производительностью не поддерживают этот режим. Передача данных прерывания, например, введенных с клавиатуры данных или сведений о перемещении мыши. Эти данные должны быть переданы достаточно быстро для того чтобы пользователь не заметил никакой задержки. В соответствии со спецификациями время задержки USB составляет несколько миллисекунд. Изохронные передачи (передачи в реальном масштабе времени). Пропускная способность и задержка доставки оговариваются до начала передачи данных. К изохронным данным алгоритмы коррекции ошибок неприменимы (поскольку время на повторную их ретрансляцию превышает допустимый интервал задержки). За один сеанс в таком режиме может быть передано до 1023 байт. Устройства с низкой производительностью не поддерживают этот режим. Следует также отметить, что разными производителями предлагались спецификации, описывающие интерфейс различных аппаратных реализаций контроллера USB. Фирмой Intel была предложена спецификация UHCI (Universal Host Controller Interface), которая предусматривает чрезвычайно простую аппаратную реализацию контроллера USB. В рамках данной спецификации основные функции контроля и арбитража шины возлагаются на программный драйвер. Альтернативная спецификация была предложена компаниями Compaq, Microsoft и National Semiconductor - OHCI (Open Host Controller Interface). Контроллеры по спецификации OHCI обладают унифицированным абстрактным интерфейсом, предусматривающим аппаратную реализацию большинства управляющих функций, что облегчает их программирование. Интерфейс IEEE 1394 - FireWire Группой компаний при активном участии Apple была разработана технология последовательной высокоскоростной шины, предназначенной для обмена цифровой информацией между компьютером и другими электронными устройствами. В 1995 году эта технология была стандартизована IEEE (стандарт IEEE 1394-1995). Компания Apple продвигает этот стандарт под торговой маркой FireWire, а компания Sony - под торговой маркой i-Link. Интерфейс IEEE 1394 представляет собой дуплексную, последовательную, общую шину для периферийных устройств. Она предназначена для подключения компьютеров к таким бытовым электронным приборам, как записывающая и воспроизводящая видео- и аудиоаппаратура, а также используется в качестве интерфейса дисковых накопителей (таким образом, она соперничает с шиной SCSI ). Первоначальный стандарт (1394a) поддерживает скорости передачи данных 100 Мбит/с, 200 Мбит/с и 400 Мбит/с. Последующие усовершенствования стандарта (1394b) обеспечивают поддержку скорости передачи данных 800 и 1600 Мбит/с (FireWire-800, FireWire-1600). Устройства, которые передают данные на разных скоростях, могут быть одновременно подключены к кабелю (поскольку пары обменивающихся данными устройств используют для этого одну и ту же скорость). Рекомендуемая максимальная длина кабеля между устройствами составляет 4,5 м. К кабелю общей длиной до 72 м может быть одновременно подключено до 63 устройств, называемых узлами (nodes). Для увеличения числа шин вплоть до максимального значения (1023) могут быть использованы мосты. Каждое устройство обладает 64-разрядным адресом: 6 бит - идентификационный номер устройства на шине, 10 бит - идентификационный номер шины, 48 бит - используются для адресации памяти (каждое устройство может адресовать до 256 Тбайт памяти). Шина предполагает наличие корневого узла, выполняющего некоторые функции управления. Корневой узел может быть выбран автоматически во время инициализации шины, либо его атрибут может быть принудительно присвоен конкретному узлу (скорее всего, ПК). Некорневые узлы являются или ветвями (если они поддерживают более чем одно активное соединение), или листьями (если они поддерживают только одно активное соединение). Как правило, устройства имеют по 1-3 порта, причем одно устройство может быть включено в любое другое (с учетом ограничений на то, что между любыми двумя устройствами может быть не более 16 пролетов и они не могут быть соединены петлей). Допускается подключение в "горячем" режиме, поэтому устройства могут подключаться и отключаться в любой момент. При подключении устройств адреса назначаются автоматически, поэтому присваивать их вручную не придется. IEEE 1394 поддерживает два режима передачи данных (каждый из которых использует пакеты переменной длины). Асинхронная передача используется для пересылки данных по конкретному адресу с подтверждением приема и обнаружением ошибок. Трафик, который не требует очень высоких скоростей передачи данных и не чувствителен ко времени доставки, вполне подходит для данного режима (например, для передачи некоторой управляющей информации). Изохронная передача предполагает пересылку данных через равные промежутки времени, причем подтверждения приема не используются. Этот режим предназначен для пересылки оцифрованной видео- и аудиоинформации. Пакеты данных пересылаются порциям, которые имеют размер, кратный 32 битам, и называются квадлетами (guadlets). При этом пакеты начинаются, по меньшей мере, с двух квадлетов заголовка, после чего следует переменное число квадлетов полезной информации. Для заголовка и полезных данных контрольные суммы (CRC) указываются отдельно. Длина заголовков асинхронных пакетов составляет, как минимум, 4 квадлета. У изохронных пакетов может быть заголовок длиной 2 квадлета, поскольку единственным необходимым при этом адресом является номер канала. IEEE 1394 выделяет следующие функции устройств: Хозяин цикла (cycle master) - выполняется корневым узлом, имеет наивысший приоритет доступа к шине, обеспечивает общую синхронизацию остальных устройств на шине, а также изохронных сеансов передачи данных. Диспетчер шины (bus manager) управляет питанием шины и выполняет некоторые функции оптимизации. Диспетчер изохронных ресурсов (isochronous resource manager) распределяет временные интервалы среди узлов, собирающихся стать передатчиками (talkers). Все функции диспетчеризации могут выполняться одним и тем же либо различными устройствами. Хозяин цикла посылает синхронизирующее сообщение о начале цикла через каждые 125 мкс (как правило). Теоретически 80% цикла (100 мкс) резервируется для изохронного трафика, а остальная часть становится доступной для асинхронного трафика. Сначала узлы с изохронными данными для пересылки, а также те узлы, которым был назначен номер канала, пытаются получить доступ к шине на время передачи (сразу же после каждого сообщения о начале цикла), и узел, который ближе всего находится к корневому узлу, первым получит разрешение на передачу данных. Каждый последующий узел с назначенным номером канала и изохронным трафиком для пересылки последовательно получает разрешение на передачу данных. Затем пытаются получить доступ к шине и узлы с асинхронным трафиком. Для подключения к данному интерфейсу применяется 6-контактный соединитель. Используемый при этом кабель имеет круглую форму и содержит: экранированную витую пару А (ТРА), в которой используется симметричное, разностное напряжение (для обеспечения требуемой помехоустойчивости), а данные передаются в обоих направлениях с помощью схемы кодирования NRZ2. Фактически напряжение составляет 172-265 мВ; экранированную витую пару В (ТРВ), пересылающую стробирующий сигнал, который изменяет состояние всякий раз, когда два последовательных разряда данных (на другой паре) одинаковы (т.н. кодирование данных со стробированием - datastrobe encoding), и гарантирует изменение состояния в паре для передачи данных либо стробирующих сигналов по фронту каждого разряда; провода, обеспечивающие питание небольших устройств. При этом по проводу VP подается напряжение 8-40 В, обеспечивающее нагрузку до 1,5 А, а провод VG заземлен. Впрочем, существуют варианты соединения, в котором провода питания отсутствуют; а также общий экран, который изолирован от экранов пар и прикреплен к корпусам соединителей. В IEEE 1394b допускается применять также простые UTP-кабели 5-й категории, но только на скоростях до 100 Мбит/с. Для достижения максимальных скоростей на максимальных расстояниях предусмотрено использование оптоволокна (пластмассового - для длины до 50 метров, и стеклянного - для длины до 100 метров). Вопросы для самоконтроля 1. Назовите режимы передачи интерфейса SCSI и охарактеризуйте каждый режим. 2. Назовите особенности стандартного последовательного интерфейса RS-232C. 3. Как в стандарте RS-232C определены высокий и низкий уровни напряжения? 4. К чему относится понятие Centronics? 5. Перечислите последовательные интерфейсы ввода/вывода. 6. Назовите протоколы, входящие в стек IrDA, и их назначение. 7. Охарактеризуйте топологию интерфейсов USB и FireWire. 8. Сравните технические характеристики интерфейсов USB и FireWire. Тема 2.6. Режимы работы процессора Режимы работы Реальный режим (Real Mode) После инициализации (системного сброса) МП находится в реальном режиме. В реальном режиме МП работает как очень быстрый 8086 с возможностью использования 32-битных расширений. Механизм адресации, размеры памяти и обработка прерываний (с их последовательными ограничениями) МП 8086 полностью совпадают с аналогичными функциями других МП IA-32 в реальном режиме. В отличие от 8086, остальные члены семейства IA-32 в определенных ситуациях генерируют исключения, например, при превышении предела сегмента, который для всех сегментов в реальном режиме равен 0FFFFh. Имеется две фиксированные области в памяти, которые резервируются в режиме реальной адресации: область инициализации системы и область таблицы прерываний. Ячейки от 00000h до 003FFH резервируются для векторов прерываний. Каждое из 256 возможных прерываний имеет зарезервированный 4-байтовый адрес перехода. Ячейки от FFFFFFF0H до FFFFFFFFH резервируются для инициализации системы. Режим системного управления (System Management Mode) В новых поколениях МП Intel появился еще один режим работы - режим системного управления. Впервые он был реализован в МП 80386SL и i486SL. Начиная с расширенных моделей Intel-486, этот режим стал обязательным элементом архитектуры IA-32. С его помощью прозрачно даже для операционной системы на уровне BIOS реализуются функции энергосбережения. Режим системного управления предназначен для выполнения некоторых действий с возможностью их полной изоляции от прикладного программного обеспечения и даже от операционной системы. МП переходит в этот режим только аппаратно: по низкому уровню на контакте SMI# или по команде с шины APIC (Pentium+). Никакой программный способ не предусмотрен для перехода в этот режим. МП возвращается из режима системного управления в тот режим, при работе в котором был получен сигнал SMI#. Возврат происходит по команде RSM. Эта команда работает только в режиме системного управления и в других режимах не распознается, генерируя исключение #6 (недействительный код операции). Когда МП находится в режиме SMM, он выставляет сигнал SMIACT#. Этот сигнал может служить для включения выделенной области физической памяти (System Management RAM), так что память SMRAM можно сделать доступной только для этого режима. При входе в режим SMM МП сохраняет свой контекст в SMRAM (контекст сопроцессора не сохраняется) и передает управление процедуре, называемой обработчиком System Management Interrupt. Состояние МП в этот момент точно определено: регистр EFLAGS обнулен (кроме зарезервированных битов), сегментные регистры содержат селектор 0000, базы сегментов установлены в 00000000, пределы 0FFFFFFFFh. Следует отметить, что в режиме SMM не предусмотрена работа с прерываниями и особыми случаями: прерывания по IRQ и SMI# замаскированы, пошаговые ловушки и точки останова отключены, обработка прерывания по NMI откладывается до выхода из режима SMM. Если необходимо обеспечить работу с прерываниями или особыми случаями, то надо инициализировать IDT и разрешить прерывания, выставив флаг IF в регистре EFLAGS. Прерывания по NMI будут разблокированы автоматически после первой же команды IRET. При возврате из SMM (по инструкции RSM) МП восстанавливает свой контекст из SMRAM. Обработчик может программно внести изменения в образ контекста МП, тогда МП перейдет не в то состояние, в котором произошло SMI. Эти особенности режима системного управления позволяют использовать его для реализации системы управления энергосбережением компьютера или функций безопасности и контроля доступа. Защищенный режим (Protected Mode) Основным режимом работы МП является защищенный режим. Ключевые особенности защищенного режима: виртуальное адресное пространство, защита и многозадачность. МП может быть переведен в защищенный режим установкой бита 0 (Protect Enable) в регистре CR0. Вернуться в режим реального адреса МП может по сигналу RESET или сбросом бита PE (в Intel-286 недоступно). В защищенном режиме программа оперирует с адресами, которые могут относиться к физически отсутствующим ячейкам памяти, поэтому такое адресное пространство называется виртуальным. Размер виртуального адресного пространства программы может превышать емкость физической памяти и достигать 64Тбайт. Преобразование логического адреса в физический происходит в два этапа: сначала блок управления сегментами выполняет трансляцию адреса в соответствии с сегментированной моделью памяти, получая 32-битный линейный адрес, а затем блок страничного преобразования выполняет разбиение на страницы, преобразуя 32битный линейный адрес в 32-битный или 36-битный (P6) физический. МП не предусматривает механизмов запрещения сегментации ; с другой стороны, страничная трансляция есть опциональный механизм и может использоваться либо не использоваться в зависимости от особенностей операционной системы. В рамках сегментированной модели адресации для программы память представляется группой независимых адресных блоков, называемых сегментами. Для адресации байта памяти программа должна использовать логический адрес, состоящий из селектора сегмента и смещения. Селектор сегмента выбирает определенный сегмент, а смещение указывает на конкретный байт в адресном пространстве выбранного сегмента. Селектор сегмента может находиться либо непосредственно в коде команды, либо в одном из сегментных регистров. Смещение также может либо непосредственно находиться в коде команды, либо вычисляться на основе значений регистров общего назначения. С каждым сегментом связана особая структура, хранящая информацию о нем: дескриптор. Дескриптор - это 8-байтная единица описательной информации, распознаваемая устройством управления памятью в защищенном режиме, хранящаяся в дескрипторной таблице. Дескриптор сегмента содержит базовый адрес описываемого сегмента, предел сегмента и права доступа к сегменту. В защищенном режиме сегменты могут начинаться с любого линейного адреса (который называется базовым адресом сегмента) и иметь любой предел вплоть до 4Гбайт. Дескрипторные таблицы - это массивы памяти переменной длины, содержащие 8-байтные элементы: дескрипторы. Дескрипторная таблица может иметь длину от 8 байт до 64 Кбайт и в каждой таблице может быть до 8192 дескрипторов. Существуют две обязательных дескрипторных таблицы - глобальная дескрипторная таблица (Global Descriptor Table - GDT) и дескрипторная таблица прерывания (Interrupt Descriptor Table - IDT), а также множество (вплоть до 8191) необязательных локальных дескрипторных таблиц (Local Descriptor Table - LDT), из которых в каждый момент времени процессору доступна только одна. Расположение дескрипторных таблиц определяется регистрами процессора GDTR, IDTR, LDTR. GDT содержит дескрипторы, доступные всем задачам в системе. GDT может содержать дескрипторы любых типов: и дескрипторы сегментов, и системные дескрипторы (кроме шлюзов прерываний и ловушек). Первый элемент GDT (с нулевым индексом) не используется. Ему соответствует нуль-селектор, обозначающий "пустой" указатель. LDT обеспечивают способ изоляции сегментов программы и данных исполняемой задачи от других задач. LDT связана с конкретной задачей и может содержать только дескрипторы сегментов, шлюзы вызовов и шлюзы задач. Сегмент не может быть доступен задаче, если его дескриптор не существует ни в текущей таблице LDT, ни в таблице GDT. Использование двух дескрипторных таблиц позволяет, с одной стороны, изолировать и защищать сегменты исполняемой задачи, а с другой - позволяет разделять глобальные данные и код между различными задачами. IDT может содержать только шлюзы задач, шлюзы прерываний или шлюзы ловушек. Для вычисления линейного адреса МП выполняет следующие действия (рис. 1): 1. МП использует селектор сегмента для нахождения дескриптора сегмента. Селектор содержит индекс дескриптора в дескрипторной таблице (Index), бит TI, определяющий, к какой дескрипторной таблице производится обращение (LDT или GDT), а также запрашиваемые права доступа к сегменту (RPL). Если селектор хранится в сегментном регистре, то обращение к дескрипторным таблицам происходит только при загрузке селектора в сегментный регистр, т. к. каждый сегментный регистр хранит соответствующий дескриптор в программно-недоступном ("теневом") регистре-кэше. 2. МП анализирует дескриптор сегмента, контролируя права доступа (сегмент доступен с текущего уровня привилегий ) и предел сегмента (смещение не превышает предел); 3. МП добавляет смещение к базовому адресу сегмента и получает линейный адрес. Если страничная трансляция отключена, то сформированный линейный адрес считается физическим и выставляется на шину процессора для выполнения цикла чтения или записи памяти. Рис. 1. Схема преобразования логического адреса в линейный Механизм сегментации обеспечивает превосходную защиту, но он не очень удобен для реализации виртуальной памяти (подкачки). В дескрипторе сегмента есть бит присутствия, по нему процессор определяет, находится ли данный сегмент в физической памяти или на внешнем запоминающем устройстве (на винчестере). В последнем случае генерируется исключение #11, обработчик которого может подгрузить сегмент в память. Неудобство заключается в том, что различные сегменты могут иметь различную длину. Этого можно избежать, если механизм подкачки реализовывать на основе страничного преобразования. Особенностью этого преобразования является то, что процессор в этом случае оперирует с блоками физической памяти равной длины (4 Кбайт) - страницами. Страницы не имеют непосредственного отношения к логической структуре программы. Кроме того, в МП подсемейства P6 страничная трансляция обеспечивает 36-битную физическую адресацию памяти (64 Гбайт). Страничное преобразование действует только в защищенном режиме и включается установкой в 1 бита PG в регистре CR0. В страничном преобразовании участвуют два типа структур: каталоги таблиц (Page Directory) и таблицы страниц (Page Table). Эти структуры состоят из 1024 32битных элементов. Элементы содержат старшие 20 бит физического адреса адресуемых объектов. Элементы таблицы страниц (Page Table Entry - PTE) адресуют страницы, а элементы каталога таблиц (Page Directory Entry - PDE) адресуют таблицы страниц. Старшие 20 бит физического адреса каталога таблиц хранятся в регистре CR3 (Page Directory Base Register - PDBR) (это единственный регистр процессора, который содержит физический адрес памяти). Все структуры выровнены по границе страницы. Рис. 2. Стандартная 2-уровневая схема страничной трансляции В процессе страничной трансляции адресов полученный линейный адрес разбивается на три части. Старшие десять бит (Directory) линейного адреса являются индексом элемента из каталога таблиц. По этому элементу определяется физический адрес таблицы страниц. Биты 21-12 (Table) линейного адреса выбирают элемент из этой таблицы страниц. Выбранный элемент определяет физический адрес страницы. Младшие 12 бит (Offset) линейного адреса определяют смещение от начала страницы. Страницы начинаются на границах 4 Кбайт областей памяти, поэтому младшие 12 бит адреса страницы всегда равны нулю. В каталоге таблиц элементы хранят физические адреса таблиц страниц. В таблице страниц элементы хранят физические адреса самих страниц. В МП Pentium фирма Intel реализовала новую возможность - расширение размера страниц (Page Size Extension - PSE). PSE позволяет использовать страницы размером 4 Мбайт и одноуровневый механизм страничной трансляции. В подсемействе P6 шина адреса была расширена до 36 бит. Соответственно, процессоры Pentium Pro, Pentium II, Pentium III и более поздние способны адресовать до 64 Гбайт физической памяти. Эта возможность называется расширением физического адреса (Physical Address Extension - PAE) и доступна только при использовании страничной трансляции. Использование PSE и PAE следующим образом влияет на страничное преобразование: Таблица 1. Особенности страничного преобразования в PSE и PAE CR0.PG CR4.PAE CR4.PSE PDE.PS 0 1 1 1 1 1 X 0 0 0 1 1 x 0 1 1 x x x x 0 1 0 1 Размер страницы 4 Кб 4 Кб 4 Мб 4 Кб 2 Мб Разрядность физ. адреса 32 бит 32 бит 32 бит 32 бит 32 бит 32 бит Встроенные средства переключения задач обеспечивают многозадачность в защищенном режиме. Задача - это "единица измерения" заданий для процессора, которую процессор может выполнять, приостанавливать и осуществлять над ней диспетчеризацию. В качестве задачи может исполняться прикладная программа, сервис операционной системы, ядро операционной системы, обработчик прерывания или исключения и т.п. В защищенном режиме архитектура IA-32 предоставляет механизм для сохранения состояния задачи и переключения с одной задачи на другую. Все команды процессора выполняются в контексте той или иной задачи. Даже самые простые системы должны определить как минимум одну задачу. Более сложные системы могут использовать средства управления задачами для поддержки многозадачных приложений. Среда задачи состоит из содержимого регистров МП и всего кода с данными в пространстве памяти. МП способен быстро переключаться из одной среды выполнения в другую, имитируя параллельную работу нескольких задач. Для некоторых задач может эмулироваться управление памятью, как у МП 8086. Такое состояние задачи называется режимом виртуального 8086 (Virtual 8086 Mode). О пребывании задачи в данном состоянии сигнализирует бит VM в регистре флагов. При этом задачи виртуального МП 8086 изолированы и защищены, как от друг друга, так и от обычных задач защищенного режима. Задачу составляют два компонента: адресное пространство задачи и сегмент состояния задачи (Task State Segment - TSS). В адресное пространство задачи входят доступные ей сегменты кода, данных и стека. Если используется механизм привилегий, то каждой задаче должны быть предоставлены сегменты стека для всех используемых уровней привилегий. Сегмент состояния задачи хранит состояние регистров (контекст) процессора: состояние сегментных регистров (селекторы сегментов, формирующие адресное пространство задачи); состояние регистров общего назначения; состояние регистра флагов (EFLAGS); указатель очередной команды (EIP); значение регистра CR3 (PDBR); значение регистра LDTR. В многозадачных системах TSS предоставляет механизм для связывания (вложения) задач. Каждая задача идентифицируется селектором соответствующего ей TSS. Этот селектор загружается в регистр задачи (Task Register - TR) при переключении на задачу. В теневую часть регистра загружаются базовый адрес, предел и атрибуты TSS. Операционная система может предусматривать для каждой задачи свое линейное адресное пространство (свой набор страниц для страничного преобразования ), тогда при переключении задачи загружается и регистр CR3 (PDBR), хранящий адрес каталога таблиц для страничного преобразования. В защищенном режиме процессор обеспечивает определенные механизмы защиты на основе сегментации и на основе страничного преобразования. Механизмы защиты позволяют ограничивать доступ к определенным сегментам или страницам при помощи уровней привилегий (4 для сегментов и 2 для страниц). Например, критические код и данные операционной системы могут быть расположены на более привилегированном уровне, чем прикладные программы. Это позволит ограничить и контролировать доступ прикладных программ к функциям и данным операционной системы. Механизм защиты обеспечивает соответствие любой ссылки на ячейки памяти определенным условиям. Все проверки выполняются до начала цикла обращения к памяти. Нарушение любого условия приводит к генерации исключения. Проверки выполняются параллельно с формированием адреса и поэтому не ухудшают производительность процессора. Все ссылки должны пройти следующие проверки: контроль предела; контроль типа; контроль уровня привилегий ; контроль выравнивания; ограничение адресного пространства; ограничение точек входа в процедуры (для шлюзов); ограничение набора команд (привилегированные инструкции). В защищенном режиме нет способа отключить механизм защиты. Даже если назначить всем сегментам и задачам нулевой (самый высший) уровень привилегий, все равно будут выполняться проверки контроля предела и типа. В то же время, механизм защиты на уровне страниц можно подавить, если назначить всем страницам уровень привилегий суперпользователя и обеспечить доступ на чтение и запись. Контроль пределов и типов сегментов обеспечивает целостность сегментов кода и данных. Программа не имеет права обратиться к виртуальной памяти, выходящей за предел того или иного сегмента. Программа не имеет права обратиться к сегменту данных как к коду, и наоборот. Архитектура защиты МП обеспечивает 4 иерархических уровня привилегий, что позволяет ограничить задаче доступ к отдельным сегментам в зависимости от ее текущих привилегий. Привилегии - это свойство (обычно устанавливаемое при проектировании системы), которое определяет, какие компьютерные операции разрешаются в любой момент времени и какие доступы к памяти законны. Привилегии используются для обеспечения безопасности в компьютерной системе. Привилегии реализуются путем присвоения значения от 0 до 3 ключевым объектам, которые опознаются процессором. Значение 0 соответствует наибольшим привилегиям, тогда как значение 3 - наименьшим. Четыре уровня привилегий можно интерпретировать в виде колец защиты (рис. 3). Центр (уровень 0) предназначен для сегментов, содержащих наиболее критичные программы (обычно ядро операционной системы). Внешние кольца предназначены для сегментов с менее критичными программами или данными. Использование всех четырех уровней привилегий не является необходимым. Существующие системы, спроектированные с меньшим количеством уровней, могут просто игнорировать другие допустимые уровни. UNIX и Windows, например, используют только два уровня привилегий: 0 (для ядра системы) и 3 (для всего остального), а OS/2 использует уровни 0 (для ядра системы), 2 (для процедур ввода-вывода) и 3 (для прикладных программ). Рис. 3. Интерпретация уровней привилегий в виде колец защиты Механизм контроля уровня привилегий микропроцессора оперирует следующими значениями: CPL - текущий уровень привилегий (Current Privilege Level): уровень привилегий, на котором в данный момент исполняется задача. Значение CPL хранится в поле RPL селектора сегмента кода, который помещен в регистр CS. Обычно это значение соответствует уровню привилегий дескриптора исполняемого сегмента кода. Уровень привилегий меняется, когда управление передается сегменту кода с другим значением DPL (за исключением подчиняемых сегментов кода). DPL - уровень привилегий дескриптора (Descriptor Privilege Level): наименее привилегированный уровень, на котором задача может получить доступ к сегменту или шлюзу, связанному с этим дескриптором. Уровень DPL определяется битами 46 и 45 дескриптора. RPL запрашиваемый уровень привилегий (Requested Privilege Level) используется для временного понижения своего уровня привилегий при обращении к памяти. RPL заносится в младшие биты селектора. Механизм контроля уровня привилегий обычно сравнивает уровень привилегий дескриптора (DPL) с максимальным из двух чисел CPL и RPL. Наименее привилегированный из текущего уровня привилегий и запрашиваемого считается эффективным уровнем привилегий: EPL = max (CPL, RPL). Контроль привилегий при доступе к данным осуществляется при загрузке селектора в сегментный регистр DS, ES, FS, GS (либо при обращении к памяти, если селектор содержится в коде инструкции). Программа может обратиться к сегменту данных, который находится на том же или более низком уровне привилегий (с учетом RPL), т.е. доступ к данным разрешен, если max(CPL, RPL)<= DPL ; в противном случае генерируется нарушение общей защиты. Контроль привилегий при доступе к стеку осуществляется при загрузке селектора в регистр SS. Программа должна использовать сегмент стека, находящийся на том же уровне привилегий, т.е. CPL = RPL = DPL. Для передачи управления на обычный сегмент кода его уровень привилегий должен совпадать с текущим уровнем привилегий. Значение RPL должно быть не больше CPL, чтобы не вызывать исключения, но вне зависимости от значения RPL уровень привилегий не изменится: CPL = DPL. Текущий уровень привилегий может измениться при передаче управления через селектор шлюза. Шлюзы бывают четырех типов: шлюз вызова, шлюз задачи, шлюз ловушки и шлюз прерывания (последние два типа не используются в командах перехода и вызова). При передаче управления через селектор шлюза задачи или селектор TSS происходит переключение задач. Одна задача может передать управление другой задаче, при этом контролируется, чтобы объект, через который передается управление, был на том же или более низком уровне привилегий, чем CPL (правило контроля как для сегментов данных). Кроме того, текущий уровень привилегий задачи влияет на возможность выполнения тех или иных специфических команд (привилегированных инструкций). Кроме привилегированных, существуют инструкции, результат выполнения которых зависит от поля IOPL в регистре флагов (I/O Privilege Level - уровень привилегий вводавывода): IN, INS, OUT, OUTS, CLI, STI. Механизм защиты процессора позволяет выполнять эти инструкции, только если задача обладает достаточными привилегиями, т.е. CPL <= IOPL. Функции страничной трансляции, впервые появившиеся в Intel386, обеспечивают дополнительные механизмы защиты на уровне страниц. Особенно это удобно при использовании сплошной модели памяти, когда и операционная система, и прикладные программы работают в едином пространстве логических адресов, т.к. защита на уровне страниц может обеспечить разграничение привилегий для страниц операционной системы и прикладных программ. Защита на уровне страниц предоставляет два типа контроля: ограничение адресного пространства (страницы супервизора и страницы пользователя) и ограничение типа доступа (доступ только для чтения и доступ на чтение-запись). Если проверки не проходят, генерируется страничное нарушение (исключение #14). Ограничение адресного пространства на уровне страниц обеспечивается двумя уровнями привилегий: режим супервизора (уровень 0) и режим пользователя (уровень 1). Режим супервизора соответствует привилегиям на уровне сегментов CPL = 0, CPL = 1 и CPL = 2. В режиме супервизора доступны все страницы. Режим пользователя соответствует привилегиям на уровне сегментов CPL = 3. В режиме пользователя доступны только страницы пользователя. В адресное пространство супервизора попадают страницы, для которых соответствующий элемент таблицы страниц или каталога таблиц содержит бит US = 0. В адресное пространство пользователя попадают страницы, для которых и соответствующий элемент таблицы страниц, и соответствующий элемент каталога таблиц содержат бит US = 1. В МП Intel-386 ограничение типа доступа применяется только в адресном пространстве пользователя. Программа в режиме пользователя имеет право изменять только те страницы, для которых и соответствующий элемент таблицы страниц, и соответствующий элемент каталога таблиц содержат бит RW = 1. Если для какойлибо страницы элемент таблицы страниц или элемент каталога таблиц содержит бит RW = 0, то страница доступна только для чтения. В режиме супервизора все страницы доступны и для чтения, и для записи. Когда используются оба вида защиты и на уровне страниц, и на уровне сегментов, процессор сначала выполняет проверки защиты сегментов, и только в случае успеха - проверки защиты страниц. Т.е. если доступ к памяти отвергается защитой на уровне сегментов, то будет сгенерировано нарушение общей защиты, а проверки защиты страниц выполняться не будут и дополнительно страничное нарушение не возникнет. Если проверки защиты сегментов проходят успешно, но нарушаются правила защиты страниц, генерируется страничное нарушение. Доступ к памяти предоставляется, только когда выполнены все правила и для сегментов, и для страниц. В табл. 2 представлены сводные характеристики режимов IA-32. Таблица 2. Сравнение режимов микропроцессоров IA-32 Характеристи ка Формирование линейного адреса Предел сегментов Размер адреса/данных по умолчанию RM PM, VM = 0 PM, VM = 1 SMM без дескрипто рных таблиц через дескриптор ную таблицу без дескриптор ных таблиц без дескриптор ных таблиц 64 Кб определяется дескриптором определяется дескриптором 64 Кб 4 Гб 16 бит 16 бит 16 бит Максимальный объем доступной памяти (виртуальной) Защита Страничная трансляция Многозадачнос ть Обработка прерываний ~1 Мб ~64 Тб ~1 Мб ~4 Гб нет1 нет да да да да нет нет нет да да нет таблица векторов дескрипторная таблица дескрипторная таблица нет2 Вопросы для самоконтроля 1. В каких режимах может работать IA-32? 2. Как формируется физический адрес при сегментной адресации? 3. Как формируется физический адрес при страничной адресации? 4. Что такое многозадачность? Какими средствами она поддерживается? 5. Какие правила на основе привилегий применяются для защиты сегментов кода, стека и данных? Тема 2.7. Основы программирования процессора Язык ASSEMBLER. 1) Основные понятия. Язык ASSEMBLER является языком низкого уровня, т.е. позволяет писать программы прямо для процессора, для любых внешних устройств. Язык является командным. Используется 16-ая система счисления. 2) Средства программирования. Для языка ASSEMBLER существует много средств разработки, т.е. программ помогающих работать с языком. Мы будем использовать простейшее средство разработки. Отладчик ОС DEDUG. Программа DEDUG входит в комплект ОС и позволяет писать простейшие программы на языке ASSEMBLER. 3) Назначение DEDUG: Просмотр содержимого регистров процессора. Изменение содержимого регистров. Просмотр и изменение оперативной памяти. Ввод программы на ASSEMBLERe. Трассировка и запуск программы. 4) Запуск DEDUG: «Пуск» - Пункт меню «Выполнить» - Написать в строке «DEDUG». Замечание: В случаи, если в ОС установлен другой отладчик необходимо нажать кнопу «Обзор» и самостоятельно найти файл «DEDUG.exe». 5) Основные команды программы DEDUG. - «?» - вывод на экран подсказки по работе с программой. - «R» - вывод на экран содержимое всех регистров. R регистр – вывод на экран содержимого указанного регистра, возможно изменение регистра. - A <адрес> - означает начало ввода программы на языке ASSEMBLER. Если адрес не указан, то он будет равен 100. Если указан, программа начнется с выбранного адреса. - U <адрес> - означает вывод на экран программы на языке ASSEMBLER. - D адрес1 адрес2 - вывод на экран содержимого оперативной памяти. - T <адрес> - выполнение трассировки написанной программы. Замечание: Трассировка начинается с команды, адрес которой записан в IP. Трассировка – это выполнение программы по одной команде, с просмотром содержимого регистров, т.е. после выполнения команды на экран выводится содержимое всех регистров. - H число1 число2 - определение суммы и разности 2-х 16-ых чисел. - «Q» - выход из программы. Команды языка ASSEMBLER. - MOV регистр значение – означает: поместить в регистр выбранное значение. - ADD регистр, слагаемое – означает: вычисление суммы. Регистр – результат. Слагаемое – число или регистр. - SUB уменьшаемое, вычитаемое – означает: вычисление разности. Уменьшаемое – регистр, из которого вычитается. Вычитаемое – число или регистр. Пример программы. Написать программу, выполняющую следующее: 1. В регистры AX, BX, CX, DX поместить производные числа. 2. Вычислить AX+BX+CX DX. 3. Результат – AX. MOV AX,10 MOV BX,5 MOV CX,7 MOV DX,15 ADD AX,BX ADD AX,CX SUB AX,DX INT 20 Арифметические операции Операции «умножить» и «разделить» выполняются только для регистра AX. При определении результатов используются два регистра AX, DX. Умножение. Первый сомножитель AX. MUL регистр Умножение выполняется только с регистрами. Результаты записываются: - Правая половина (четыре цифры), регистр AX. - Левая половина, регистр DX. Регистр DX при операции «умножить» изменяется всегда. Например: AX – 1234 BX – 10 MUL BX Деление. То, что нужно разделить находится в регистре AX. DIV регистр При делении используются только регистры. Результат деления: частное – AX, остаток – DX/ Например: AX – 9; BX – 2 DIV BX AX – 4; DX – 1 Замечание: Операция «деление» может привести к зависанию или сбросу программы DEDUG, в случаи деления на ноль. Увеличение и уменьшение регистров. I NC регистр – увеличение регистра на единицу. DEC регистр – уменьшение регистра на единицу. Переходы Переходы бывают условные и безусловные. Назначение – изменить порядок выполнения команд в программе. Безусловный переход. JMP номер строки После выполнения команды JMP выполняется строка, указанная в команде. При использовании команды JMP следует соблюдать осторожность, т.к. можно получить «зацикливание» программы. Условный переход. При выполнении условного перехода, процессор использует результаты предыдущих операций. В языке ASSEMBLER нет универсального условного перехода. JZ строка – переход если результат предыдущий операции равен 0. JNZ строка – переход если результат предыдущий операции не равен 0. Следующая группа переходов требует предварительного сравнения. CMP регистр1, регистр2 - JE – переход, если равно. - JNE – переход, если не равно. - JG – переход, если меньше. - JGE – переход, если больше или равно. - JB – переход, если меньше. - JLE – переход, если меньше или равно. Реализация циклов с помощью переходов Для примера решим задачу: Вычислить 1+2+3+…A. Для решения задачи потребуется: 1. Регистр для суммы – AX. 2. Регистр - слагаемое – BX. 3. Регистр счетчик – определяет количество слагаемых, количество шагов в цикле – CX. 100 MOV AX,0 103 MOV BX,1 106 MOV CX,A 109 ADD AX,BX 10C INC BX 10E DEC CX 110 JNZ 109 112 INT 20 Сохранение и загрузка файлов 1) Общие сведения. Перед запуском длинных программ (программ выполняющих деление, программ обращающихся к памяти), программу следует сохранить. 2) Сохранение программ. 1) Выбор имени файла. N диск:\каталог\имя 2) Определение длины файла. U длина. 3) Запись длины программы в регистр CX. R CX : Длина 4) Запись в регистр BX нуля (0). R BX :0 5) W – запись файла. После команды W на экране должна появиться надпись «Записано … байт» Загрузка сохраненного файла. 1) Выбор имени файла. 2) L <адрес> - загрузка. Если адрес не указан, то он считается 100. Сохраненную программу можно загрузить с любого адреса. Запуск программ без трассировки. Программа, содержащая циклы, прерывания, запускать трассировкой не удобно (очень долго), поэтому используется команда «G». G номер строки – выполняет все строки программ до указанной. Замечание: Программы, которые запускаются с помощью команды G, обязательно должны заканчиваться командой INT 20. Прерывание Прерывание – это приостановка основной программы по одной из следующих причин: 1) Прерывание от технического устройства. 2) Выполнение вспомогательной задачи. 3) Ошибка в работе программы или техническая ошибка. Программные прерывания – вызов функций ОС использующихся для выполнения задач решаемых ОС. Например: ввод-вывод данных, работа с файлами, каталогами, работа с графикой и т.д. Общий вид использования прерывания. 1) Установка значений регистров использующих прерывания. 2) INT номер прерывания Примечание: Одно и тоже прерывание может выполнять различные функции, конкретная функция определяется регистром AH. Программа, использующая прерывание запускается только с помощью команды G. Прерывание INT 21 21 прерывание – операции ввода-вывода, работа с файлами, каталогами. Функция INT 21 AH=01 Ввод одного символа с клавиатуры. При выполнении первой функции, программа ждет нажатия на любую кнопку, затем код нажатой кнопки помещается в регистр AL (введенный код). Пример: Написать программу, запрашивающую код одного символа с клавиатуры. MOV AH,01 – включение ввода символа. INT 21 – ввод символа. INT 20 Вывод символа на экран Для вывода символа на экран используется INT 21. Функция AH=02 код символа помещается в регистр DL. Пример: Вывести на экран символ код, которого равен 31. MOV AH,02 MOV DL,31 INT 21 INT 20 Ввести с клавиатуры один символ. Вывести на экран символ код, которого на единицу больше. MOV AH,01 INT 21 I NC AL MOV DL,AL MOV AH,02 INT 21 INT 20 Вывести на экран A символов. Код первого символа равен 30, коды остальных на единицу больше. 100 MOV CX,A 103 MOV AH,02 106 MOV DL,30 109 INT 21 10B INC DL 10D LOOP 109 110 INT 20 Операции сдвигов Операции сдвигов являются битовыми операциями, т.е. выполняются для каждого бита регистра. Операции сдвигов используются: 1) При выполнении умножения. 2) Деления на два. 3) Для разделения значения регистра на отдельные цифры. 4) Для ввода на экран значения регистра целиком. Общий принцип операции сдвига Примечание: В качестве примера рассматриваем 8-ый регистр. 0 1 1 0 1 1 1 0 Регистр до сдвига. Сдвиг регистра влево. 1 1 0 1 1 1 0 0 Регистр после сдвига. Использование сдвига для умножения и деления. Умножение. 0 0 0 0 0 0 0 1 Сдвиг влево. 0 0 0 0 0 0 1 0 Сдвиг влево. Из приведенной схемы видно сдвиг влево на 1 бит соответствует умножению исходного регистра на 2. Сдвиг влево на 2 бита соответствует умножению на 4 и т.д. Деление. 0 0 0 0 1 0 0 0 Сдвиг вправо. 0 0 0 0 0 1 0 0 Сдвиг вправо. Сдвиг вправо на 1 бит соответствует делению на 2, на 2 бита – делению на 4 и т.д. Команды сдвигов SHL регистр, 1 – сдвиг влево на 1 бит. SHT регистр, 1 – сдвиг вправо на 1 бит. В случае если потребуется сдвиг на большее число бит, то число помещается в регистр CX. Ввод с клавиатуры «длинных» чисел При вводе с клавиатуры какой-либо информации, генерируется последовательность символов. Символ (коды символов) передаются процессору по одному. Поэтому при вводе числа, состоящего более чем из одной цифры, необходимо «накапливать» вводимые цифры. Наиболее просто организовать ввод двоичных чисел. Пример: 1. Запросить код цифры. 2. Вычисть из кода 30 (получение цифры из кода). 3. Прибавить к регистру BL полученную цифру (регистр AL). 4. Сдвинуть регистр BL влево на 1 (освобождая место для следующей цифры). 5. Повторить действия с 1 по 4 пункт, столько раз, сколько цифр запрашивается. Примечание: Данный способ подходит, только для двоичных чисел. 100 MOV CX,8 – количество цифр. 103 MOV BL,0 – очистка регистра BL для хранения числа. 106 MOV AH,01 – включение функции ввода данных. 109 INT 21 – ввод очередной цифры. 10B SUB AL,30 – определение цифры. 10D SHL BL,1 – освобождение места для цифры. 110 ADD BL,AL – присоединение цифры к числу. 113 LOOP 106 115 INT 20 Использование ОЗУ; Косвенная адресация При вычислениях мы можем использовать любую ячейку памяти. Ячейка памяти может содержать 1 байт, т.е. для сохранения 16-ти разрядного регистра будут использоваться 2 ячейки (2 байта). Обращение к ячейкам памяти При обращении к ячейкам используется следующая формула [адрес ячейки (байта)]. Например: для того, чтобы поместить в ячейку с адресом 200 число 1 будем писать следующую команду: MOV [200],1 В качестве памяти может использоваться любой регистр. Например: MOV [AX],2 – число 2 будет помещено по адресу, который равен значению AX. Примечание: т.к. в процессоре есть специальный регистр – указатель на данные, его удобнее всего использовать для работы с ОЗУ, регистр DI. Примеры: №1. Написать программу для ввода 8-ого двоичного числа и сохранение его в ОЗУ по адресу 200. 100 MOV CX,8 103 MOV BL,0 106 MOV AH,01 109 INT 21 10B SUB AL,30 10D SHL BL,AL 110 LOOP 109 112 MOV [200],BL 115 INT 20 №2. Написать программу, сохраняющую в ОЗУ последовательность чисел 1,2,3,…,A. Первое число адрес 200, т.к. адрес сохраняемых чисел меняется, мы будем использовать для его определения регистр DI. 100 MOV CX,A – количество чисел. 103 MOV DI,200 – адрес первого числа. 106 MOV AX,1 – первое число. 109 MOV DI,AX – поместили 1-ое число по адресу в регистр DI. 10C INC AX – определяем следующее число. 10E INC DI – определяем следующий адреса. 110 INC DI 112 LOOP 109 114 INT 20 №3. Написать программу, запрашивающую коды A-символов и, поместить их в ОЗУ, начиная с адреса 200. 100 MOV CX,A 103 MOV DI,200 106 MOV AH,01 109 INT 21 10B MOV [DI],AL 10F INC DI 112 LOOP 109 114 INT 20 Решение задач. Вывести на экран цифру 5. MOV AH,02 MOV DL,35 INT 21 INT 20 Вывести на экран цифры, начиная от 1 до 9. Т.к. вывод на экран повторяется 9 раз, будем использовать цикл. 100 MOV CX,9 103 MOV AH,02 106 MOV DL,31 109 INT 21 10B INC DL 10D LOOP 109 10F INT 20 Вывести на экран все цифры двоичного числа, которое находится в регистре BX (число в BX можно поместить любое). Если в BX находится число 1234, то на экране будет 0001001000110100. Для решения задачи необходимо «разделить» число на отдельные цифры. Можно воспользоваться командой «RCL». 100 MOV CX,10 – количество цифр. 103 MOV CX,1234 – число, выводимое на экран. 106 MOV AH,02 – подключение функции вывода на экран. 109 RCL BX,1 – сдвиг единицы влево, выделение отдельной цифры. 10C ADC DL,30 – сложение выделенной цифры, определение кода цифры. 10F INT 21 – вывод на экран. 111 LOOP 109 113 INT 20 Написать программу, определяющую сумму 1+2+3+…+A и вывод полученной суммы на экран. 100 MOV AX,0 103 MOV BX,1 106 MOV CX,A 109 ADD AX,BX 10C INC BX 10E LOOP 109 110 MOV CX,A 113 MOV BX,AX 116 MOV AH,02 119 RCL BX,1 122 ADC DL,30 125 INT 21 127 LOOP 119 129 INT 20 Управление выводом на экран Прерывание INT 10 Прерывание INT 10 используется для: 1. Цветного вывода на экран. 2. Графического вывода на экран. 3. Определение позиции вывода на экран. Функции INT 10 Номер функции помещается в регистр «AH». AH=00 выбор режима экрана. AL=00 – 40*25 – черно-белый. AL=01 – 40*25 – 16 цветов. AL=02 – 80*25 – черно-белый. AL=03 – 80*25 – 16 цветов. AL=04 – 320*200 – 4цвета. AL=0D – 320*200 – 16 цветов. AL=DE – 640*400 – 16 цветов. AL=10 – 640*400 – 64 цвета. Пример: Установить режим экрана 80*25 – 16 цветов. MOV AH,00— функция выбора режима экрана MOV AL,03— режим экрана (взять из таблицы) {MOV AX,0003} INT 10 — выбор режима экрана INT 20 Выбранный в DEBUG режим экрана, будет автоматически установлен во всех программах MS-DOS. AH=02 установка курсора. DH – строка; DL – столбец; Пример: Установить курсор в 10 строку 5 столбец. MOV AH,02 MOV DH,A MOV DL,5 INT 10 INT 20 AH=09 вывод с атрибутами (цвет символа, цвет фона, мигание, яркость). AL – код символа. CX – количество символов. BL – атрибуты. 7 6 5 4 3 2 1 0 R G B R G B мигание фон яркость символ 1 – включить. 0 – выключить. Пример: Вывести на экран цифру 1 красного цвета, на синем фоне, яркую и не мигающую. MOV AH,09 MOV AL,31 MOV CX,1 MOV BL,1C INT 10 INT 20 AH=0C вывод графических точек. AL – цвет точки. DX – строка (Y). CX – столбец (X). Пример: Вывести на экран точку в центре экран, режим 640*400. MOV AH,00 MOV AL,10 INT 10 {Включение графического режима} MOV AH,0C MOV AL,0F MOV CX,140 MOV DX,12 INT 10 INT 20 Примечание: При вводе цветных символов необходимо выбирать «правильный» режим экрана. Принципы ускорения работы компьютера Ускорение работы процессора. Оптимизация вычисления. Конвейер – устройство, в процессоре состоящее из отдельных ступеней. Каждая ступень служит для выполнения отдельной части команды. Например: Загрузка команды, загрузка исходных данных, расшифровка команды и т.д. Таким образом, на конвейере может находиться несколько команд на различных ступенях. Процессор может содержать несколько конвейеров. Блок предсказаний – анализирует программу и определяет, в какой последовательности команды должны помещаться на конвейер. Основа блока предсказаний – статистика. Многозадачный режим. Разделение задач: Логические (основной процессор). Математические (математический процессор). Параллельное вычисление. АЛУ. Несколько ядер. Ядро – отдельный процессор, размещенный в одной микросхеме. Разделение задач. При работе с ПК, выполняются ряд параллельных задач: Отображение видеоинформации. Воспроизводство звука. Многозадачный режим работы Разделение времени – выделение процессорного времени для различных задач. Параллельные вычисления: - Одновременное выполнение одной и той же операции над массивом данных (применяются при работе с массивами). - Выделение программной нити. Нить – последовательность действий, которые могут выполняться независимо от остальных команд. Многопроцессорные системы. Типы: 1. Разделение задач – каждый процессор выполняет особую задачу. 2. Разделение ресурсов – имеется несколько процессоров с общим ресурсом. Например: 1. Общее дисковое пространство. 2. Общая оперативная память. Общие ресурсы используются для обработки и передачи информации. Кластер однотипных ЭВМ. Используются однотипные ПК, объединенные высокоскоростной сетью. Используются специальные ОС специализированное ПО. В настоящее время наиболее часто используемые версия многопроцессорных систем. На её основе строится супер-ЭВМ. Роль тактовой частоты при определении скорости работы процессора Т.к. при работе процессора, необходима синхронизация работы отдельных устройств, используется тактовый генератор. Тактовый генератор вырабатывает синхронизирующие сигналы. Каждый импульс равен выполнению элементарной команды. Поэтому, чем выше частота, тем быстрее выполняются команды. Различные процессоры используют различное количество тактов для выполнения одной команды, поэтому сравнивать скорость работы процессора по тактовой частоте можно только для однотипных процессоров. Основная единица скорости работы процессора ФЛОП 1 операция в секунду.