Ниже структурированные ответы по каждому пункту. Я даю краткие определения, ключевые идеи и примеры/формулы там, где это уместно для подготовки к экзаменам.
- Принципы архитектуры фон Неймана: однородность памяти и последовательное выполнение команд
- Что это значит:
- Однородность памяти: одна и та же память используется как для хранения инструкций программы, так и для хранения данных.
- Последовательное выполнение команд: процессор последовательно выполняет инструкции по порядку, управляемый счётчиком команд (Program Counter, PC). В современных системах этот принцип дополняется конвейерами, предсказанием ветвлений и кешами, но базовая идея сохраняется.
- Основной цикл (fetch-decode-execute): CPU считывает следующую инструкцию из памяти, декодирует её, выполняет операцию и возвращается к следующей инструкции.
- Пример взаимодействия CPU и памяти при сложении двух чисел:
Допустим задача: S = A + B, где A хранится в M[200], B в M[201], результат нужно записать в M[202]. Пусть набор инструкций очень простой:
- LOAD R1, [200] ; взять A в регистр R1
- LOAD R2, [201] ; взять B в регистр R2
- ADD R1, R2 ; R1 = R1 + R2
- STORE [202], R1 ; записать результат в память Ход цикла:
- PC = 0: CPU читает инструкцию LOAD из M[0], декодирует её, обращается к памяти M[200] за операндом A, загружает A в R1.
- PC становится 1: читает следующую инструкцию, загружает B из M[201] в R2.
- PC становится 2: выполняется операция сложения R1 + R2 в ALU, результат сохраняется в R1.
- PC становится 3: выполняется команда STORE, кладёт значение R1 в M[202]. Все данные и инструкции проходят по одной шине (шина данных/адреса) и попадают в единое адресное пространство памяти.
- Важные моменты:
- Прямое следование одного после другого создает «узкое место» (в ранних системах — фон Неймана узкое место: скорость памяти ограничивает скорость выполнения).
- Современные процессоры добавляют конвейеры, параллельные исполнители, кэш-память и т. п., но базовый принцип все равно хранение инструкций и данных в общей памяти.
- Эволюция аппаратных средств и её влияние на архитектуру и производительность
- Ключевые стадии:
- Механические/механико-электрические устройства (до середины 20-го века): ручной ввод, ограниченная параллельность, малые скорости.
- Электронные ламповые устройства: рост скорости, первые электронные компьютеры; возникла идея «системной архитектуры» и программируемости.
- Транзисторы и интегральные схемы: миниатюризация, рост числа транзисторов на кристалле, принципиально изменилась архитектура (многоядерность, конвейеры, кэш-память, интерфейсы памяти).
- Микропроцессоры: принципиально новый уровень доступности для массового применения; персональные ПК и серверы.
- Современная параллелизация и специализированные ускорители: GPU/TPU, FPGA, ASIC-ускорители; энтузиасты HPC получают огромную производительность за счет множества параллельных потоков и векторной обработки.
- Современная перспективная область: квантовые вычисления — другой парадигмальный подход, который принципиально отличается от битовой детерминированной схемы и требует новой архитектуры.
- Как это повлияло на архитектуру:
- Переход к многоядерности, многопоточности, SIMD-векторизации (например, AVX), а также к многоуровневым кэшам. на флотилии: от одноблочной архитектуры к гетерогенным системам (CPU + GPU/TPU/FPGA).
- Развитие памяти и пропускной способности: более быстрая память (L1/L2/L3 кэши, памяти с высокой пропускной способностью), организация памяти под задачу и напоминающее «плотность вычислений» (архитектура NUMA).
- Доступность и стандартизация: повышение уровня абстракции через ОС, виртуализация, контейнеризация, что влияет на архитектуру исполнения программ (планирование, изоляция, управление памятью).
- Привязка к задачам: появление специализированных ускорителей для машинного обучения, графики, обработки сигналов — архитектура под конкретные типы задач.
- Пример: для задач моделирования и анализа больших данных важна параллельность и память высокой пропускной способности; для игр — видеокарты и оптимизация под конвейерность; для серверов — многопроцессорные мейнфреймы и кластерная архитектура.
- Классификация ЭВМ по назначению и по размерам и ее влияние на применение
- По назначению:
- Универсальные ЭВМ: способны выполнять широкий набор программ; применяются в большинстве задач: офисная работа, разработка ПО, серверы, научные вычисления.
- Специализированные ЭВМ: предназначены для узких задач (например, цифровые сигнальные процессоры, встроенные микроконтроллеры, система управления реального времени, промышленные контроллеры). Применение: встраиваемые системы, промышленная автоматизация, обработка сигналов, автомобили и т. д.
- По размерам:
- Микрокомпьютеры/персональные компьютеры и ноутбуки: бытовые и рабочие задачи, образование, разработка ПО.
- Мейнфреймы: высокая надёжность, транзакционная обработка, крупные организации (банки, госорганы) для большого числа параллельных заданий и надёжного хранилища.
- Суперкомпьютеры: масштабные вычисления, моделирование климма, физика частиц, химия, биомедицина; требуют больших вычислительных мощностей и сложной архитектуры параллелизма.
- Практическое применение:
- Универсальные ЭВМ применяются повсеместно (рабочие станции, серверы общего назначения).
- Специализированные — там, где критичны производительность по конкретной задаче и время отклика/надежность (модели реального времени, обработка сигналов).
- По размеру — от домашних ПК до дата-центров HPC и суперкомпьютеров для научных симуляций.
- ASCII vs Unicode: различия и почему Unicode стал современным стандартом
- ASCII:
- Кодировка на 7 бит (128 символов) или 8 бит с расширением (256 символов); охватывает латинский алфавит и некоторые управляющие символы.
- Ограничение: способность кодирования только основных латинских символов и базовых знаков; не поддерживает большинство мировых письменностей.
- Unicode:
- Универсальная кодировка всех известных письменностей и множества символов (коды до 10+ площадей кодирования); предусматривает кодовые точки (code points).
- Основные форматы: UTF-8 (переменной длины от 1 до 4 байтов, обратно совместим с ASCII), UTF-16 (2 байта или 4 при суррогатах), UTF-32 (фиксированно 4 байта).
- Причины перехода к Unicode:
- Глобализация и необходимость поддержки множества языков и символов (японские Kanji, кириллица, арабский, эмодзи и т. д.).
- Единая система кодирования, совместимость ASCII через UTF-8, удобство обработки в сетях и файлах.
- Поддержка комбинированных символов, диакритики, символов различных платформ и устройств.
- Что это дает на практике:
- Многоязычные приложения, системы ввода/вывода, веб-страницы и файлы могут храниться и передаваться без потери символов.
- UTF-8 широко поддерживается в современных протоколах и языках программирования.
- Двоичное кодирование графики: растр и вектор, влияние на качество и размер
- Растровая графика:
- Представление изображения как сетки пикселей. Пиксель имеет цветовую информацию, например RGB с bpp (bits per pixel).
- Размер файла: V_raster = W × H × bpp (бит) + заголовок/метаданные; чаще применяется с компрессией (PNG, JPEG, WEBP).
- Факторы качества и объема:
- Разрешение (W×H): чем выше, тем больше пикселей.
- Глубина цвета (bpp): 8 бит на канал RGB даёт 24 бита на пиксель; больше — глубже цвет, больше размер.
- Формат кодирования: сжатие (lossless, например PNG; lossy, например JPEG) влияет на вид и размер.
- Антиалиасинг, цветовые пространства (sRGB и т. д.), потери при сжатии.
- Векторная графика:
- Представление изображения через геометрические примитивы (линии, кривые Безье, многоугольники) и свойства (цвет, заливка, прозрачность).
- Размер файла векторной графики зависит от количества примитивов и сложности их параметров; в формате SVG файл хранит команды описания формул, координат и стилей.
- Факторы качества и объема:
- Число примитивов и их сложность (кривые, градиенты, фильтры).
- Точность координат (параметры точности, количество разрядов).
- Способ кодирования (текстовый SVG против бинарных форматов).
- Преимущество векторной графики: масштабируемость без потери резкости, меньший размер для простых изображений; недостаток — сложные изображения с фотосоставляющими часто кодируются как растровые сверху.
- Пример влияния на размер:
- Растровый рисунок 1920×1080 с 24-битовым цветом: приблизительно 1920×1080×24 бит ≈ 49,8 Mбит ≈ 6,2 Мбайт до сжатия (без учёта заголовков). При JPEG с потерей — меньше.
- Векторное изображение с 100 простыми фигурами и цветами может занимать несколько килобайт — десятки килобайт в SVG; при сложных градиентах и фильтрах размер растет.
- Какие системы счисления применяются в компьютерной технике и почему
- Наиболее широко используемые системы:
- Двоичная (биты и байты): внутренняя репрезентация всех данных и инструкций на уровне процессора и памяти.
- Десятичная: удобна для человека, повседневных расчетов.
- Шестнадцатеричная: удобна для представления байтов и адресов; компактная запись двоичных данных (по 4 бита на один hex-цифр).
- Восьмеричная: исторически применялась в некоторых старых системах (по 3 бита на одну цифру), полезна для отображения групп байтов в старых архитетктурах.
- Преимущества двоичной системы для ЭВМ:
- Прямое соответствие состоянию логических элементов (включено/выключено); простая реализация логических операций.
- Логическое представление чисел в двоичном виде упрощает реализацию арифметических алгоритмов (сложение, вычитание, умножение) на уровне схем.
- Использование двоичной кодировки упрощает аппаратное проектирование и централизует обработку.
- Практические замечания:
- Две системы счисления (двоичная и шестнадцатеричная) чаще всего используются внутри ПК и микроконтроллеров.
- Десятичная и шестнадцатеричная применяются в отладке, отображении адресов памяти, настройках устройств и т. п.
- Перевод чисел между двоичной, восьмеричной, десятичной и шестнадцатеричной системами (пример с числом 255)
- Пример: число 255 в разных базах
- Десятичная: 255_10
- Двоичная: 255 = 11111111_2
- Восьмеричная: делим на 8 попарно: 255 ÷ 8 = 31 ост 7; 31 ÷ 8 = 3 ост 7; 3 ÷ 8 = 0 ост 3 → 377_8
- Шестнадцатеричная: 255 = 15·16 + 15, то есть FF_16
- Кратко алгоритм перевода:
- Десятичная → двоичная: деление на 2 с записями остатков (членами двоичной записи).
- Двоичная → октальная: группировка бит на три (с конца): 111 111 11 → 377_8 (при необходимости добавить ведущий ноль).
- Двоичная → шестнадцатеричная: группировка бит на четыре: 1111 1111 → FF_16.
- Шестнадцатеричное ↔ двоичное: каждый hex-цифра соответствует 4 битам (0–F → 0000–1111).
- Десятичное ↔ шестнадцатеричное: деление на 16 или умножение по разрядам при обратном преобразовании.
- Формулы для вычисления объема информации для разных типов данных
- Текст (в разных кодировках):
- Общая формула: V_text = Σ_i b_i, где b_i — количество бит на i-й символ в заданной кодировке.
- Примеры:
- ASCII: 7 бит на символ (или 8 бит, если учитывается восьмибитовый набор). Для N символов: V ≈ N × 7 (или N × 8) бит.
- Unicode (UTF-8): переменная длина от 1 до 4 байтов на кодовую точку; для строки с N кодовыми точками сумма байтов длины каждой точки; пример: строка из N символов кодируется в N_байт UTF-8, где N_байт зависит от символов.
- Unicode (UTF-16): для BMP символы занимают 2 байта, для дополнительных кодовых точек — 4 байта (с использованием суррогатных пар).
- В любом случае размер в байтах умножают на 8, чтобы получить битовую емкость.
- Графика (растровая):
- V_raster = W × H × bpp, где W и H — ширина и высота в пикселях, bpp — глубина цвета в битах на пиксель.
- Пример: 1920×1080 при 24 бит на пиксель даёт примерно 1920×1080×24 bits ≈ 49.8 Mbits ≈ 6.2 MBytes (до учёта заголовков и сжатия).
- При сжатии: размер послеLossless/Lossy уменьшится в зависимости от алгоритма и содержимого.
- Графика (векторная):
- V_vector зависит от количества примитивов, их точности и параметров. Примерная формула (упрощённая):
- V_vector ≈ N_primitives × (P_coord × k_coord + P_color × k_color + P_shape), где:
- N_primitives — число примитивов,
- P_coord — бит на координату, k_coord — число координат на примитив,
- P_color — бит на цвет/прозрачность, k_color — число параметров цвета,
- P_shape — битовые коды типа примитива и прочие параметры.
- V_vector ≈ N_primitives × (P_coord × k_coord + P_color × k_color + P_shape), где:
- Векторные форматы (SVG) могут быть текстовыми, размер файла определяется количеством символов и длиной команд.
- V_vector зависит от количества примитивов, их точности и параметров. Примерная формула (упрощённая):
- Звук (сэмплы):
- V_audio = duration × Fs × B × C, где:
- duration — длительность в секундах,
- Fs — частота дискретизации (гц),
- B — битность одного сэмпла (бит),
- C — число каналов (1 моно, 2 стерео и т.д.).
- Пример: 10 секунд стерео PCM 16 бит, 44.1 кГц: V_audio = 10 × 44100 × 16 × 2 бит = 14,105,600 бит ≈ 1.68 Мбайт (до учёта заголовков и без сжатия).
- V_audio = duration × Fs × B × C, где:
- Примечания:
- В реальности часто применяют сжатие для графики и аудио(PNG/JPEG, MP3/AAC). Тогда формулы дают ориентировочные исходные значения до сжатия, а итоговый объём зависит от алгоритма и содержания.
- Для текстов и графики удобно приводить пример с конкретной кодировкой или форматом, чтобы точнее вычислять объём.
Если хотите, могу привести короткие практические задачи на каждую формулу (например, посчитать объём для конкретного изображения или аудио-файла с заданными параметрами). Также могу дополнить примеры под конкретный курс или язык программирования, если скажете, какие именно темы важнее для вашего зачёта.