Архитектура современных ЭВМ.
Структура курса
- 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
Многопроцессорность
Инженерная работа
- Спецификация: описание того, что должна делать?
- Синтез: поиск решения, нахождение наилучшего решения.
- Реализация: описание как должно быть это построено?
- Анализ: проверка того, что получилось с тем что должно было получиться.