Добавил:
north memphis Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Низкоуровневое Программирование Экзамен Теория

.pdf
Скачиваний:
1
Добавлен:
29.01.2025
Размер:
184.62 Кб
Скачать

Товарищи, пользуемся формулами! Верхняя панель – Вставка – Формула.​

Для удобства советую пользоваться 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, который содержит

машинный код функций, доступных другим программам.