0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 24
|
|
1 | |
Переход на несколько байт12.01.2017, 11:47. Показов 1228. Ответов 5
Метки нет (Все метки)
Допустим нужно в программе сделать переход на 100 байт вперёд. НО, программа на жестком диске может быть разбита как угодно. Как она находит нужное продолжение кода? Подскажите раздел где можно об этом почитать, извините, если написал не в тот раздел.
Добавлено через 2 часа 25 минут Программа фрагментирована на жестком диске, как windows находит адреса продолжения программы?
0
|
12.01.2017, 11:47 | |
Ответы с готовыми решениями:
5
Переход по адресу из массива байт Прочитать несколько байт с сокета Arduino UNO. Прочитать несколько байт Несколько лишних байт при выводе |
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
12.01.2017, 11:48 | 2 |
Программы не исполняются с жёсткого диска, а перед запуском ОС загружает программу в ОЗУ, собирая в правильном порядке. Если же вы пишете начальный загрузчик, то должны самостоятельно позаботиться о подобии "драйвера" файловой системы.
1
|
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 24
|
|
12.01.2017, 20:19 [ТС] | 3 |
Windows собирает программу со всго жесткого диска? А если программа не помещается целиком в оперативку? Или тогда подключается жесткий в качестве ОЗУ и программа ТОЛЬКО ЦЕЛИКОМ помещенная в ОЗУ запускается?
0
|
634 / 389 / 75
Регистрация: 21.09.2008
Сообщений: 1,328
|
|
13.01.2017, 12:16 | 4 |
Во времена DOS обходились созданием оверлейных (overlay) exe. В эпоху protected mode при нехватке физического ОЗУ обходятся swap-файлом на HDD/SSD.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
13.01.2017, 12:52 | 5 | |||||
Сообщение было отмечено sergeiparshin как решение
Решение
Программы в формате EXE (DOS MZ или Win PE/NE) имеют заголовок, в котором хранится информация о размере программы, о кол-ве требуемой памяти и т.д. Если она "не помещается в оперативку", то при её запуске система выводит сообщение об ошибке. Есть EXE-файлы, которые помимо программного кода хранят данные (например, самораспаковывающиеся архивы - SFX). Система загружает код программы в оперативку (при этом данные за кодом не загружаются, в заголовке же написано сколько она занимает) и запускает. Далее программа считывает данные из файла (себя самой). По сути, это то же самое, как если бы этот архив был в отдельном файле, просто в том же файле удобнее (не потеряется). Под DOS, как уже сказано, были оверлеи - это когда часть кода хранится в отдельном файле и подгружается при необходимости.
По поводу перехода на 100 байт вперёд и пр. проблем нет. Во-первых, прога загружается всегда по одному и тому же линейному адресу, указанному в заголовке (Windows) либо по одному и тому же смещению (DOS, меняется лишь сегмент, но для настройки в том же EXE-шнике есть специальная таблица, использую которую происходит настройка... собственно, в прогах под Windows есть тоже свои таблицы). Ну и во-вторых, если загрузить код, содержащий инструкции перехода/вызова (jmp, call и т.п.), то там используется не прямая, а относительная адресация (как правило, хотя можно сделать и переход по адресу, содержащемуся в регистре или памяти). Т.е. в примере ниже вне зависимости от адреса метки from переход всегда будет осуществляться к метке to, т.к. инструкция jmp хранит в себе информацию о переходе на 1 байт вперёд (относительно следующей инструкции):
1
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
13.01.2017, 16:11 | 6 |
Сообщение было отмечено sergeiparshin как решение
Решение
Читайте:
1)Работа процессора, внимание нужно обратить на взаимодействие с кешем. 2)Операционные системы, внимание нужно обращать на жизненный цикл процеса. Если в общих словах, то: Существует несколько кешей- назовем их быстрый(10Мб) и медленный(100Мб). Сам процессор работает с быстрым кешем. Если нужных данных(данные или код) нет в бысторм кеше, они подгружаются с медленного, если их нет в медленном, то с оперативной памяти, если их нет в ОЗУ, то с файла подкачки. Как-то так. размеры памяти указаны условно
1
|
13.01.2017, 16:11 | |
13.01.2017, 16:11 | |
Помогаю со студенческими работами здесь
6
Как сдвинуть указатель на несколько байт? Как прочитать несколько байт из файла с n-го бита Как прочитать несколько байтов в файле с n-го байта по m-й байт ? База данных: переход на несколько форм Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |