Архитектура современных ЭВМ.

Структура курса

  • 7 лекций
  • 7 лабораторных работ (ассемблер).
  • Зачет: сданы все лабы.

Компьютерная система

  • Программное обеспечение + аппаратная часть
  • Программы + компьютер
  • [Приложения + операционная система] + компьютер
  • Язык программирования + операционная система + архитектура компьютера

Сборка приложений (на примере C программы)

Ядро ОС

  • ОС компьютера, такая как macOS, Windows или Linux — это коллекция программного обеспечения, выполняющая всю основную работу.
  • "Основная работа" — это общее понятие, и, в зависимости от ОС, может включать такие вещи, как приложения, шрифты, иконки, которые поставляются с компьютером по умолчанию.
  • Каждая ОС имеет ядро.
  • Когда вы включаете компьютер, указатель инструкции запускает какую-то программу.
  • Этой программой является ядро.
  • Ядро имеет почти полный доступ к памяти, периферийным устройствам и другим ресурсам и отвечает за запуск ПО, установленного на компьютере (пользовательских программ).
  • Linux — это всего лишь ядро, которому для полноценной работы требуется множество пользовательских программ, таких как оболочки (shells) и серверы отображения (display servers). Ядро macOS называется XNU, а современное ядро Windows — NT Kernel.

Абстракции операционной системы

  • Абстракция 1: процессы
    • приложения: приложение
    • операционная система: процесс
    • аппаратная часть: компьютер
  • Абстракция 2: виртуальная память
    • приложения: адресное пространство.
    • операционная система: виртуальная память
    • аппаратная часть: физические планки памяти

Абстракции операционной системы

  • Абстракция 3: файловая система
    • приложения: файлы, директории
    • операционная система: файловая система
    • аппаратная часть: диск
  • Абстракция 4: связь
    • приложения: сокеты
    • операционная система: TCP/IP протокол
    • аппаратная часть: сетевой интерфейс

Что такое компьютер?

Классическая модель вычислений фон Нейман.

Классическая модель вычислений фон Нейман.

  • Память компьютера состоит из ячеек, каждой из которых присвоен номер — адрес. Любая из ячеек доступна компьютеру в любой момент времени, и он может обратиться к её содержимому по адресу.
  • Память компьютера используется как для хранения данных, так и для хранения программы. Команды и числа кодируются в двоичной системе счисления. Над командами можно производить те же операции, что и над числами. На этом принципе основана трансляция — перевод текста программы с языка высокого уровня на язык конкретной ЭВМ.

Классическая модель вычислений фон Нейман.

  • Компьютером управляет программа, которая состоит из команд, хранящихся в последовательных ячейках памяти. Каждая команда выполняет операцию из набора операций, доступных компьютеру.
  • Компьютер выполняет команды последовательно — от первой к последней, согласно порядку следования в программе. Этот порядок может быть изменён с помощью специальных команд в зависимости от результатов вычислений.

Что такое компьютер?

  • Один CPU: один вычислительный узел
  • Шина данных: данные из области памяти должны передаваться в вычислительный узел и обратно.
  • Монолитная память: хранит данные и инструкции
  • Инструкции из заданного набора.

Классический компьютер сегодня

ЦП

  • ЦП — это место, в котором происходят все вычисления.
  • Первым массовым ЦП был Intel 4004, спроектированный в конце 60-х итальянским физиком и инженером Федерико Фарджином.
  • Это была 4-битная архитектура, а не 64-битная, которая используется сегодня.
  • 4-битная архитектура была гораздо менее сложной, чем современные процессоры, но многое осталось почти неизменным.
  • "Инструкции", выполняемые ЦП — всего лишь двоичные (binary) данные: байт или два для представления запускаемой инструкции (код операции — opcode), за которыми следуют данные, необходимые для выполнения инструкции.
  • То, что мы называем машинным кодом (machine code) — всего лишь серия этих бинарных инструкций в виде строки.
  • Assemble — это полезный синтаксис, облегчающий чтение и запись сырых (raw) битов людьми.
  • Он всегда компилируется в двоичные данные, понятные ЦП.

ЦП

Оперативная память

  • Оперативная память или оперативное запоминающее устройство (Random Access Memory, RAM) — это основное хранилище компьютера
  • большое многоцелевое пространство, где хранятся все данные, используемые программами, запущенными на компьютере.
  • Это включает код самих программ, а также код ядра (kernel) операционной системы.
  • ЦП всегда читает машинный код прямо из ОП.
  • Код, не загруженный в ОП, не может быть выполнен.

ОП

  • ЦП хранит указатель инструкции (instruction pointer), который указывает на место в ОП, где находится следующая инструкция.
  • После выполнения всех инструкций, ЦП возвращает указатель в начало, и процесс повторяется.
  • Это называется циклом выборки-исполнения (fetch-execute cycle).

ОП

  • После выполнения инструкции указатель передвигается за нее в ОП и таким образом указывает на следующую инструкцию.
  • Указатель инструкции двигается вперед, и машинный код выполняется в порядке его хранения в памяти.
  • Некоторые инструкции могут заставить указатель переместиться (перепрыгнуть — jump) в другое место (выполнить другую инструкцию вместо текущей или выполнить одну из инструкций в зависимости от определенного условия).
  • Это делает возможным повторное и условное выполнение кода.

Регистры

  • Указатель инструкции хранится в регистре (registry).
  • Регистры — это маленькие хранилища, которые являются очень производительными для чтения и записи ЦП.
  • Каждая архитектура ЦП имеет фиксированный набор регистров, используемых для всего: от хранения временных значений в процессе вычислений до настройки процессора.
  • Некоторые регистры доступны из машинного кода напрямую, например, ebx
  • Другие регистры предназначены только для внутреннего использования ЦП, но часто могут обновляться или читаться с помощью специальных инструкций.
  • Одним из примеров такого регистра является указатель инструкции, который не может читаться напрямую, но может обновляться, например, для выполнения другой инструкции вместо текущей.

Организация памяти

Режимы

  • Режим (mode) (иногда именуемый уровнем привилегий (privilege level) или кольцом (ring)), в котором находится процессор, управляет тем, что разрешено делать.
  • В современных архитектурах имеется, как минимум, два варианта: режим ядра/администратора (kernel/supervisor mode) и режим пользователя (user mode).
  • Несмотря на то, что архитектура может поддерживать более двух режимов, как правило, используются только режимы ядра и пользователя.
  • В режиме ядра разрешено все: ЦП может выполнять любую поддерживаемую инструкцию и обращаться к любой памяти.
  • В режиме пользователя разрешен только определенный набор инструкций, ввод/вывод (input/output, I/O) и доступ к памяти ограничены, многие настройки ЦП заблокированы.
  • Как правило, ядро и драйверы запускаются в режиме ядра, а приложения — в режиме пользователя.
  • Процессоры запускаются в режиме ядра.
  • Перед выполнением программы ядро инициализирует переключение в пользовательский режим.

Чтение hello с клавиатуры

Загрузка программы в память

Отображение hello

Многопроцессорность

Инженерная работа

  • Спецификация: описание того, что должна делать?
  • Синтез: поиск решения, нахождение наилучшего решения.
  • Реализация: описание как должно быть это построено?
  • Анализ: проверка того, что получилось с тем что должно было получиться.