
Низкоуровневое Программирование Экзамен Теория
.pdfТоварищи, пользуемся формулами! Верхняя панель – Вставка – Формула.
Для удобства советую пользоваться LaTeX сокращениями через обратный slash “ \ “, полный список доступных сокращений: Google Docs Equation Editor Shortcuts
Также есть удобное LaTeX расширение, во много раз упрощающее пользование формулами: Auto-LaTeX Equations - Google Workspace Marketplace
***вместо \bar советую использовать \overline
***вместо “ * ” используйте \cdot
***весь текст 12 кегль, формулы – 14 кегль!
Windows
Селекторы хранения в регистрах:
● CS (Code Segment) - хранит селектор сегмента кода, который указывает на начало сегмента кода в памяти;
● ES (Extra Segment) - хранит селектор дополнительного сегмента, который может использоваться для доступа к дополнительным данным;
● DS (Data Segment) - хранит селектор сегмента данных, который указывает на начало сегмента данных в памяти;
● SS (Stack Segment) - хранит селектор сегмента стека, который указывает на начало сегмента стека в памяти;
● FS и GS - эти регистры были добавлены в расширенной архитектуре для поддержки дополнительных сегментов данных.
Каждый из этих селекторов хранит 16-битное значение, которое указывает
на начало соответствующего сегмента в памяти. При обращении к памяти процессор использует эти селекторы для определения базового адреса
соответствующего сегмента.
Защищенный режим - программы изолированные друг от друга. Был добавлен в Intel 80286. Режим позволял операционным системам и приложениям
создавать и управлять виртуальной памятью.
Впредыдущих версиях Intel 80186 и intel 8086 был только реальный режим
-однозадачный, доступен 1 мб памяти.
Адрес состоит из сегмента и смещений.
Драйверы работают с наивысшим уровнем привилегий (всего их 4): ● Ring 0 - драйверы Windows
● Ring 1 ● Ring 2
● Ring 3 - приложения Windows
Драйвера работают в одном адресном пространстве с ядром, а приложения - в отдельных адресных пространствах.
Также драйвера Windows должны иметь цифровую подпись. Любой драйвер должен содержать обработчики.
В режиме ядра Windows вся оперативная память существует в 2 видах: ● Подкачиваемая (её много)
● Не подкачиваемая (её мало)
Классические строки в драйвера не используются, используются специальные структуры - UNICODE_STRING, ANSI_STRING.
У каждого драйвера есть свой раздел в реестре, который содержит путь к файлу и т.д.
Соглашение о вызове - набор правил, по которым вызывается функция. Способы передачи аргументов:
● Только через стек ● Только через регистры
● Смешанный способ Правило о том, кто приводит стек к исходному вызову - обычно означает,
что ответственность за очистку стека вызовов лежит на функции, которая его
вызвала. Это означает, что при завершении работы функции и возврате из нее, стек должен быть корректно восстановлен до состояния, которое было до вызова этой функции.
Порядок передачи элементов в функцию - слева - направо и справа - налево.
Значения возвращаются:
● Целочисленные значения через eax ● Дробные значения через ST0
В стек нельзя класть 86 битные значения. Если аргумент меньше 32 бит и
он в стеке, то он занимает 32 бита. edx(старшие 32 bit):eax(младшие 32 bit)
UNIX ОС
ELF (executable and Linkable Format) - исполняемый а файл, который состоит либо из сегментов, либо из секций. Формат исполняемых двоичных файлов в линуксе.
Сегменты для хранения готовых данных или служебной информации.
● Сегмент текста (text segment) — содержит исполняемый код программы, который обычно располагается в начале адресного пространства.
● Сегмент данных (data segment) — содержит глобальные и статические переменные программы, которые инициализируются при запуске программы.
● Сегмент стека (stack segment) — содержит локальные переменные и параметры функций, а также адреса возврата из функций.
● Сегмент кучи (heap segment) — содержит динамически выделенную память для программы, которая запрашивается с помощью функций, таких как malloc, calloc, realloc и free.
Секции содержат копии данных, как подлежат связыванию. Концепция “все есть файл”
open-read-write-close-> ioctl
ioctl – функция, изменяющая многие базовые параметры устройства. С
помощью этой функции можно управлять многими оперативными характеристиками устройств (например терминалов).
daemon – процесс unix системы, который работает в фоне, подобно службам в винде.
zombie (ЗОНБЕ) – уже не существующий процесс, который находится в
списке процессов лишь для того, чтобы узнать код его завершения. У каждого пользователя есть id
id суперпользователя (root) равен 0
Процесс init (сокращение от initialization) – процесс, который является родителем для всех остальных процессов. Запускается при запуске системы. Имеет id=1 (PID=1). Его невозможно завершить.
Сигнал – асинхронное уведомление процесса о каком либо событии. Когда сигнал послан процессу, ОС прерывает работу этого процесса.
Каждый процесс получает дескрипторы: ● 0 stdin – стандартный поток ввода
● 1 stdout – стандартный поток вывода
● 2 stderr – стандартный поток выходных данных ошибок
Примитивы синхронизации
Mutex – глобальный примитив синхронизации, медленный. Может
использоваться несколькими процессами. pthread_mutex_init - Инициализирует мьютекс.
pthread_mutex_lock - захват мьютекса для входа в критическую секцию. Критическая секция – локальный примитив синхронизации, существует в
пределах одного процесса, быстрый.
Семафор – примитив синхронизации, в основе которого лежит счетчик, который можно увеличивать или уменьшать на 1. Операция уменьшения нулевого значения счетчика является блокирующей.
sem_init - инициализирует семафор.
sem_wait - ожидает сигнализации семафора, блокируя поток.
Спинлок – применяется, если блокировка недолгая или если непозволительно переходить в заблокированное состояние, быстрый.
pthread_spinlock_t - объявление и инициализация спинлока. pthread_spin_lock - блокирует спинлок.
DLL( Dynamic Link Library) – файл формата PE, который содержит
машинный код функций, доступных другим программам.