Галерея диаграмм связей «Как работает программа»
Эта книга знакомит специалистов по информатике с составом компьютеров, процессором, двоичными операциями, памятью, операционными системами, запуском программ, сборкой, аппаратным управлением, машинным обучением и т. д., позволяя читателям получить более глубокое понимание того, как программы проходят через различные процессы. процессы из исходных файлов. «Запуск на вашем компьютере» — научно-популярная книга, которую обязательно нужно прочитать компьютерным энтузиастам и практикам.
Отредактировано в 2024-01-18 19:32:06Как работает программа?
1.Процессор программы: CPU
Он состоит из четырех частей: регистра, контроллера, арифметического блока и часов. Используйте текущие сигналы для подключения.
Регистр: временное хранение данных и инструкций.
Контроллер: Контролируйте чтение данных и инструкций в регистре.
Часы: время программы
Оператор: оперирует данными, считанными из регистра.
ЦП представляет собой набор различных функциональных регистров.
Регистры могут обрабатывать только машинный язык
Машинный язык компилируется из языка программирования высокого уровня.
Регистр 1: счетчик программ
Определите выполнение программы, выполняя адресные инструкции.
Регистр 2: Регистр флагов
Сохранение результатов операции (положительный, отрицательный, ноль, переполнение, четность)
вызов функции
Это достигается установкой значения программного счетчика на адрес хранения функции.
Используйте стек, чтобы получить адрес вызова и адрес возврата.
Хранение массива
Используйте базовый регистр для хранения содержимого массива и индексный регистр для хранения индекса массива.
2. Данные представлены в двоичном формате.
Почему используется двоичное представление: внутри компьютера диоды используются для обозначения двух ситуаций: пройдено или не пройдено.
Наименьшей единицей двоичного числа является бит, который представляет количество битов в двоичном числе.
Основная единица двоичного кода — байт, байт — 8 бит.
Двоичные вычисления
Метод преобразования между двоичными и десятичными числами: сложите результаты степеней двоичных битов, чтобы получить десятичное число.
Операция над десятичными числами в компьютере по-прежнему преобразуется в двоичные числа для вычислений: например, сдвиг двоичного числа влево на одну позицию эквивалентен умножению числа на 2.
Вычитание внутри компьютера осуществляется с помощью сложения, здесь мы используем «дополнение».
Старший двоичный бит — это знаковый бит, 1 представляет отрицательное число, 0 представляет положительное число.
При представлении отрицательных чисел вам нужно использовать «дополнение» для вычисления.
Чтобы найти отрицательное число, сначала используйте 8-значное двоичное число для представления положительного числа, затем инвертируйте все цифры и затем прибавьте 1 к результату.
При вычислении сложения, если старший бит превышает диапазон вычислений, он переполняется, и значение переполнения автоматически отбрасывается компьютером.
Беззнаковые типы — это двоичные числа, которые все являются положительными числами. Тип со знаком забирает старший бит для представления знака, оставляя только n-1 бит, поэтому на положительные и отрицательные значения приходится половина.
Разница между логическим сдвигом вправо и арифметическим сдвигом вправо
Логический сдвиг вправо: это эквивалентно перемещению изображения вправо, непосредственно заполняя освободившуюся позицию слева 0.
Арифметический сдвиг вправо: двоичные цифры целиком перемещаются вправо, а свободные позиции заполняются 0 или 1.
Если значение представляет собой отрицательное значение, представленное дополнением к единице, то путем сдвига вправо и добавления 1 к старшему освободившемуся биту можно правильно реализовать числовые операции, такие как 1/2, 1/4, 1/8 и т. д. Если это положительное число, просто добавьте 0 к старшему биту.
Двоичные числа преобразуются в шестнадцатеричные, а длину можно уменьшить до 1/4 от исходной, что является более кратким и понятным.
Все, что имеет 0x в начале, представляет собой шестнадцатеричное значение.
3. Числа с плавающей запятой
При использовании двоичного кода для представления десятичной дроби невозможно добиться точного представления, и можно создать делитель только с определенным диапазоном точности.
Представление чисел с плавающей запятой является стандартом IEEE.
Число одинарной точности с плавающей запятой (32 бита)
Знаковая часть 1, показатель степени 8, мантисса часть 23
Число двойной точности с плавающей запятой (64 бита)
Знаковая часть 1, показатель степени 11, мантисса часть 52
Метод выражения: регулярное выражение
ЭКССЕСС-система
Система EXCESS ведет себя таким образом, что отрицательные числа не нужно представлять знаком, устанавливая среднее значение диапазона, представленного экспонентной частью, равным 0.
4. Память
Данные можно считать из памяти, а информация о выключении питания исчезнет.
Имеется 8 контактов сигнала данных, поэтому он может представлять 8 бит и 1 байт.
Имеется 10 адресных сигнальных контактов, которые могут представлять 1024 сигнала, что составляет 1 КБ.
Разные типы данных, даже одно и то же значение, занимают разные объемы памяти (поэтому, чтобы не тратить впустую 8 бит каждого слоя при определении типов переменных в программе, нужно настроить расположение типов так, чтобы они были максимально компактными). .используя память)
указатель
Указатель также является переменной. Он представляет собой не значение данных, а адрес памяти, в которой хранятся данные. Используя указатель, вы можете читать и записывать данные по любому указанному адресу.
множество
Хранится в памяти по последовательным адресам. Используйте индекс, чтобы указать адрес каждого данных.
стопки и очереди
Стеки и очереди не используют индексы для доступа к данным, но могут разделить область памяти в виде массива на определенное количество элементов для реализации внутреннего доступа.
Стек: первым пришел, последним ушел
Очередь: первым пришел — первым вышел (с использованием кольцевого буфера, к которому можно обращаться повторно в памяти фиксированного размера)
связанный список
Может быть удобнее добавлять, удалять, изменять и проверять
Бинарное дерево
Легко искать
Способы экономии памяти
Делитесь файлами DLL, чтобы уменьшить дублирование хранения функций.
Уменьшите размер файла программы, вызвав _stdcall.
5. Диск
Программы, хранящиеся на диске, должны быть загружены в память, прежде чем их можно будет запустить. ЦП, который отвечает за анализ и выполнение содержимого программы, должен указать адрес памяти через внутренний программный счетчик, прежде чем он сможет считать программу.
Кэширование диска ускоряет доступ к диску
Виртуальная память: на самом деле это дисковое пространство, но это пространство разделено на несколько страниц, и содержимое страниц постоянно считывается в память, когда требуется запуск.
Компьютеры обычно делят диски на сектора и хранят их в кластерах. Независимо от размера файла, он должен занимать исключительно кластер.
6. Сжатие данных
Файлы хранятся в байтах
Алгоритм сжатия RLE
Существуют ограничения. Если доля повторяющегося содержимого в файле невелика, это приведет к расширению файла.
Алгоритм Хаффмана
Ключом к алгоритму Хаффмана является то, что «данные, которые появляются несколько раз, могут быть представлены количеством байтов менее 8 бит, а данные, которые редко используются, могут быть представлены количеством байтов, превышающих 8 бит».
Используйте дерево Хаффмана для упорядочения кодов каждого символа, с высокой частотой в коротком бите и низкой частотой в длинном бите, и каждый код используется как листовой узел двоичного дерева.
Обратимое сжатие и необратимое сжатие.
7. Среда работы программы
Операционная среда: операционная система и компьютерное оборудование.
Исходный код->Нативный код->Выполнить
Windows преодолевает различия в аппаратном обеспечении, кроме ЦП, позволяя различным моделям быть совместимыми с одной и той же программой.
Разные процессоры используют разные машинные языки. Поэтому, когда одна и та же программа переносится на другие процессоры, требуется компилятор собственного кода для конкретного процессора, чтобы перекомпилировать ее в соответствующий собственный код.
Используйте виртуальные машины для получения других сред операционной системы.
Virtual PC для MAC может сделать аппаратное обеспечение Macintosh таким же, как AT-совместимый компьютер, так что на это оборудование можно будет установить Windows.
виртуальная машина Java
Виртуальная машина Java работает, преобразуя один за другим байт-код Java в собственный код.
БИОС
BIOS хранится в ПЗУ и представляет собой программу, предварительно встроенную в хост-компьютер.
Помимо основных программ управления, таких как клавиатура, диск и видеокарта, в BIOS также имеется функция запуска «загрузочной программы».
8. Из исходного файла в исполняемый файл.
Для запуска исходный код необходимо скомпилировать в собственный код.
Суть нативного кода — это последовательность шестнадцатеричных значений.
Компилятор отвечает за перевод исходного кода в машинный код.
Файл .c становится файлом .obj после компиляции компилятором. В это время программа по-прежнему не может работать.
Соединитель объединяет несколько целевых файлов для создания EXE-файла. Этот процесс называется связыванием. Только после ввода команды связывания можно создать файл .exe.
Файлы библиотеки упаковываются из нескольких целевых файлов. Указав файл библиотеки при связывании, компоновщик может извлечь из него необходимые объектные файлы и связать их с другими объектными файлами для создания EXE-файла.
Windows API — это интерфейс программного приложения.
Суть API — это функция. Целевой файл API — это файл библиотеки динамической компоновки (DLL) (он фактически не хранит целевой файл, а лишь предоставляет ссылку на целевой файл, который используется для автоматического получения). целевой файл во время работы программы)
Файл библиотеки, который содержит сам целевой файл и может быть напрямую связан с EXE-файлом, называется библиотекой статической компоновки.
Переменные и функции необходимы для запуска исполняемого файла.
В EXE-файле адреса памяти, выделенные переменным и функциям, являются виртуальными. При запуске программы эти адреса виртуальной памяти преобразуются в фактические адреса памяти. Компоновщик запишет различные места, требующие преобразования адресов памяти, в начале EXE-файла. Эта информация называется информацией о перемещении.
Состав областей в памяти: пространство переменных, пространство функций, пространство кучи, пространство стека.
Стек используется для хранения локальных переменных в функциях и параметрах, которые необходимо передать.
Пространство стека автоматически генерируется или освобождается компилятором и не требует ручного управления.
Куча используется для хранения произвольных данных
Пространство кучи требует ручного выделения и освобождения (malloc и бесплатно) (создание и удаление).
9. Операционная система
Природа
Это программа мониторинга с функцией загрузки и запуска программ.
портативность
Языки программирования высокого уровня используют общий язык при редактировании исходного кода, но после компиляции собственного кода в разных операционных системах программа вызывает системные функции внутри системы. Это переносимость.
Аппаратная абстракция
Операционные системы и языки программирования высокого уровня абстрагируют оборудование, поэтому программистам больше не придется беспокоиться о системных вызовах и оборудовании.
Особенности операционной системы Windows
Доступен в 32-битной и 64-битной версиях.
Предоставляйте системные вызовы через набор функций API.
Использование графического интерфейса
Возможность распечатки результатов в формате WYSIWYG.
Обеспечьте возможности многозадачности
Обеспечение функций сети и базы данных
Автоматическая установка драйвера устройства через Plug and Play
10. Язык ассемблера и собственный код
язык ассемблера
Язык ассемблера использует мнемонику, которая представляет собой инструкции для собственного кода.
Исходный код, написанный на языке ассемблера, необходимо преобразовать в собственный машинный код, прежде чем его можно будет запустить.
Программа, преобразующая язык ассемблера в собственный код, называется ассемблером, а процесс преобразования называется ассемблером.
Вы также можете преобразовать родной язык в язык ассемблера. Этот процесс преобразования называется дизассемблированием.
Компилятор языка C также может конвертировать исходный код языка C в исходный код языка ассемблера.
На языке ассемблера существует два типа инструкций.
1. Общие инструкции, которые будут конвертированы в машинный код
2. Псевдоинструкции специально для ассемблера
Псевдоинструкции отвечают за сообщение ассемблеру структуры программы и метода сборки, поэтому их еще называют инструкциями ассемблера.
На языке ассемблера комментарии, начинающиеся со знака #,
грамматика
код операции
Указывает действие команды
операнд
Указывает объект операции инструкции
При запуске программы в регистре открывается пространство стека. Вызываемые функциональные переменные будут использовать этот стек. После завершения программы пространство стека будет очищено.
Вызов функций
Возьмите параметры из стека и выполните операцию, сохраните возвращаемое значение в регистре eax, возьмите целевой адрес возврата из стека и позвольте процессу вернуться
переменная
глобальные переменные
Объявленный вне функции, все функции в программе могут получить к нему доступ.
локальные переменные
Объявленный внутри функции, доступ к нему возможен только внутри той функции, в которой он объявлен.
цикл
условная ветвь
11. Доступ к оборудованию
Программы получают доступ к оборудованию через операционную систему
Инструкции ввода и вывода
Контроллер ввода-вывода = порт
Временно хранить входные и выходные данные
Для различения используйте номер порта, то есть адрес ввода-вывода.
Если номер порта указан в командах in и out, вы можете получить доступ к контроллеру ввода-вывода и выполнить операции ввода и вывода.
Обработка прерываний
Приостановите текущую запущенную программу и запустите другие программы.
Контроллер ввода-вывода выдает запрос на прерывание, и ЦП выполняет обработку прерывания. Контроллер прерываний используется между ними, чтобы передать его ЦП для обработки по очереди.
прямой доступ к памяти
Метод передачи данных между внешними устройствами и памятью напрямую, без передачи ЦП. Обычно используется в таких устройствах, как сети и диски.
ПИО
Способ передачи данных между внешними устройствами и памятью через ЦП называется PIO.
Отображение символов и изображений
Сохраните данные в видеопамяти и отобразите их на мониторе.
Видеокарта имеет независимую видеопамять и графический процессор обработки изображений.
12. Машинное обучение
концепция
Программисты пишут программы только для обучения. Содержание этой программы состоит в том, чтобы позволить компьютеру прочитать большой объем данных, затем изучить характеристики этих данных и создать модель распознавания.
контролируемое обучение
Обучение под учителем заключается в предоставлении компьютеру большого количества данных с правильными ответами.
шаг
(1) Разделите данные обучения и данные ответов на данные обучения и данные испытаний.
(2) Используйте алгоритмы обучения для изучения обучающих данных и создания моделей.
(3) Используйте тестовые данные для оценки производительности модели.
Алгоритмы машинного обучения
Машины опорных векторов
инструмент
язык Python
Библиотеки, содержащие различные функции, связанные с машинным обучением, предоставляются на Python.
Режим сценария использует интерпретатор Python для интерпретации и выполнения предварительно написанного исходного кода (режим сценария).
Непосредственно запустите интерпретатор Python, построчно введите программу через клавиатуру и интерпретируйте выполнение интерактивного режима (интерактивный режим) (этот режим использует машинное обучение)
Перекрестная проверка
Перекрестная проверка — это метод машинного обучения, который постоянно меняет обучающие и тестовые данные.
Вы можете проверить, не является ли уровень распознавания модели обучения смещенным из-за типа обучающих данных.