Форум программистов, компьютерный форум, киберфорум
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2

Почему начальные адреса в ОП, на которые загружается программа, одинаковы на всех компьютерах?

08.04.2018, 16:48. Показов 3344. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Т.е. есть некая программа. Есть адрес в ОП, например 0xE123F456. Скомпилированный исполняемый файл программы на конкретном компьютере начинает загружаться, начиная с этого адреса. На другом компьютере начальный адрес будет тем же самым.
Но, допустим, программ на компьютере очень много. Теоретически, их может быть больше, чем число адресов в ОП. Получается, на всех программ начальных адресов не хватит? А как тогда будут загружаться ДВЕ программы, имеющие один и тот же начальный адрес? Т.е. вторая загрузится лишь после того, как будет выгружена первая программа и будет освобожден начальный адрес загрузки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2018, 16:48
Ответы с готовыми решениями:

Почему макрос работает не на всех компьютерах??
Здравствуйте, товарищи программисты!Требуется Ваша помощь, ибо надежды в своих силах уже нет( Проблема в том, что написал я калькулятор в...

Вывести начальные индексы всех непрерывных последовательностей чисел со значениями, которые не увеличиваются
Разработать программу, которая в одномерном массиве действительных чисел (размер задайте произвольно) проводит заданные операции: Вывести...

Программа работает не на всех компьютерах
Всем привет. Есть такая проблема- написал программу. Суть программы- ждет подключение флешки и далее получает ее с\н.. Все работает, но...

27
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
22.04.2018, 18:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Htext Посмотреть сообщение
На рисунке 3.36 описывается структура дескриптора сегмента кода
Любимая Вами книга, поле DPL, если там стоит 11, то это третье кольцо пользователя, остальное для ОСи
1
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
04.05.2018, 21:44  [ТС]
R71MT,
где-то там я видел фразу при возникновении ошибки "процессор бросает исключение". А можно подробнее - что представляет собой исключение? Бросает - это как: возвращает некое значение в какой-либо свой регистр?

"Обращение к IDT возможно только на аппаратном уровне при возникновении исключений или аппаратных инт'ов". Т.е. если прерывание является программным или обусловлено ошибкой - значит, номер его обработчика будет содержаться не в IDT, а в какой-то другой таблице прерываний?

Про сегмент TSS я так и не понял. В смысле, это - регистр процессора такой? Или сегмент ОП (наряду с сегментами кода, данных, стека)?

Еще вопрос по поводу битов:
A = Accessed - к странице был доступ;
P = Present - страница присутствует в памяти (может быть на диске);
G = Global - глобальная страница;
D = Dirty - грязная\изменённая страница.

Там есть еще биты R, W. Вроде бы, R - это аналог А; W - аналог D?
Еще есть бит 4М. Это признак того, что страница имеет объем 4 мегабайта?

Добавлено через 13 минут
Потом, вот на этом рисунке https://www.cyberforum.ru/atta... 1509598193 есть два спорных. на мой взгляд, момента:
1) Красными стрелками обозначена общая страница. Но, насколько мне известно, общим может быть лишь сегмент (при сегментном распределении памяти), тогда как страницы (при страничном распределении) общими не бывают? Или, все же, бывают, если они используются разными потоками, к примеру?
2) Вы пишете о необходимости запуска дефрагментатора памяти. Но, вроде как, при страничном распределении памяти фрагментация не имеет значения, т.к. система использует первую попавшуюся свободную страницу физической ОП. Хотя, при сегментном распределении, вроде бы, в самом деле, присутствует проблема фрагментации.
Т.е. рисунок имеет отношение, все-таки, только к сегментному распределению?
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6217 / 2451 / 403
Регистрация: 29.07.2014
Сообщений: 3,183
Записей в блоге: 4
05.05.2018, 14:45
Лучший ответ Сообщение было отмечено Htext как решение

Решение

Цитата Сообщение от Htext Посмотреть сообщение
А можно подробнее - что представляет собой исключение?
Бросает - это как: возвращает некое значение в какой-либо свой регистр?
Ядро процессора вылавливает исключения ещё в конвейере. Какие исключения возможны и при каких условиях они срабатывают, инженеры прописывают в MicroCodeROM процессора (там-же хранятся и сами mOps'ы). Детали внутренней реализации обработки исключений специфичны для каждой м/архитектуры, поэтому сказать что-то конкретное затрудняюсь. Да и нужно-ли это? Достаточно понять, что исключения ловятся внутренними блоками ЦП и передаются на шину APIC, который уже сам разруливает ситуацию.

Поскольку исключения перехватываются на этапе декодирования инструкций, они останавливают конвейер. Инструкции, которые уже там находятся помечаются как недействительные, и по мере продвижения, их результаты отбрасываются. Программный счётчик устанавливается на вектор обработчика исключений, а во-внутренние регистры ЦП заносится место и причина исключения.

Теперь, эти данные помещаются в ядерный стек, и через дескриптор в IDT, ОС отдаёт управление в 'SEH - System Exception Handler'. Цепочка SEH-обработчиков анализируя стек проверяет исключение на свой-чужой, и если оно не имеет мандата от системы, то последний из обработчиков тупо валит систему в BSOD.

Т.е. если прерывание является программным или обусловлено ошибкой - значит, номер его обработчика будет содержаться не в IDT, а в какой-то другой таблице прерываний?
Все/256 обработчиков прописываются дескрипторами в IDT, там-же лежат и исключения. При переходе в РМ, таблица IVT реального режима уже неактуальна, и её копия может быть восстребована только в режиме V86. Новая IDT выстраивается таким образом, что первые/32 вектора отдаются под исключения. Детали можешь посмотреть здесь: http://www.club155.ru/x86exceptions-types

Но это касается только устаревшего варианта обработки прерываний. Архитектура систем в корень изменилась ещё в нулевых годах. Параллельная шина PCI уже отживает свой век, и ей на смену пришла последовательная PCIE. Теперь вместо корневого хаба ставят Root-Complex, к которому подключают свитчи Switch. Устройства PCIe подключаются к свитчам через линки х1/х16, образуя сетку типа звезда - т.е. общей шины устройств уже нет, и им не нужен APIC - они обмениваются сообщениями.

Когда устройство PCIe хочет привлечь к себе внимание, оно не генерит прерывание на линию APIC, а осуществляет запись д'ворда в фиксированную область системной памяти по адресу 0xFEE00000 - каждый INT = 4 байта. ЦП расценивает любое обращение в эту облась как запрос на прерывание, и передаёт управление его драйверу - обработкой запроса занимается уже сам дров. Каждое из устройств может генерить не одно, а от 32 до 2048 различных прерываний, в красках расписывая его характер. Такой принцип получил название 'MSI - Message Signaled Int'. Почитай об этом в гугле..

Про сегмент TSS я так и не понял. В смысле, это - регистр процессора такой?
Или сегмент ОП (наряду с сегментами кода, данных, стека)?
TSS - Task State Segment, в переводе на русиш означает "Сегмент состояния задачи". У каждой задачи/программы этот сегмент свой. Когда ты не закрываю одну, переключаешься на другую программу, то чтобы возвратиться опять в предыдущую, нужно сохранить её контекст - значения всех регистров и прочее. Для этого и придумали этот сегмент TSS. Адрес TSS текущей задачи хранится в регистре процессора 'TR - Task Register'.
------------------------------------------------

Сейчас архитектура уже не та, что раньше - она мутировала, ..причём настолько, что рассматривать старые системы нет никакой мазы. Это в вузах до сих-пор надругаются над трупами i80286, а в современном мире дела обстоят уже совсем иначе. Архитектура стала многопроцессорной и помимо внешнего I/O APIC, каждый из процессоров имеет свой локальный APIC и если в системе процессор один, локальный можно отключить программно через ногу APICEN:



Классическая схема APIC запоминает линию(IRQ) и подаёт процессору сигнал-запроса прерывания INTR. В ответ, большой-Бос подтверждает его сигналом INTA и снимает с APIC номер IRQ. Дальше вектор из IDT и всё по-плану..

В мультипроцессорной-же системе есть некоторые нюансы.. Для передачи запросов введена спец/шина APIC-Bus, по которой запросы поступают на системный IO-APIC. Каждый из проциков имеет свой контроллёр и две входные линии LINT(0-1). На них поступают запросы инт'ов, обслуживаемые только данным ЦП. При работе в однопроцессорной системе LocalAPIC отключается, и выводы LINT(0-1) используются для подачи запросов немаскируемого(NMI) и маскируемого(INTR) прерываний.

Немаловажную роль играет здесь и SMI-прерывания 'Sys Management Int'. Чипсет генерит на этой линии запрос в следующих случаях: hard/soft-RESET; исключение #MC (машинный контроль); ловушка при переключении задач; FLUSH#=0 (очистка кэш-памяти), STOPCLK#=0 (сон), SMI#=0 (вход в системный режим), INIT=1 (инициализация ЦП) и прочии..

INTR (Request) - входной сигнал маскируемого прерывания. Если он не замаскирован программно, прерывает работу ЦП и заставляет его подтвердить запрос сигналом INTA, для считывания номера прерывания из APIC.

NMI - заставляет ЦП выполнить конкретную процедуру, без считывания вектора из APIC. Немаскируемые прерывания сигнализируют о ситуациях, требующих немедленного внимания ЦП, например отключение питание, сбой в работе памяти и т.п.
2
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6217 / 2451 / 403
Регистрация: 29.07.2014
Сообщений: 3,183
Записей в блоге: 4
05.05.2018, 14:45
--- дубль ---
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6217 / 2451 / 403
Регистрация: 29.07.2014
Сообщений: 3,183
Записей в блоге: 4
05.05.2018, 15:27
Цитата Сообщение от Htext Посмотреть сообщение
тогда как страницы общими не бывают?
Страницы бывают общими, для них предусмотрен флаг(G) - Global Page. В основном это системные страницы, открытые только на чтение. Юзер может их юзать для вызова системных API-функций, чтобы не копировать в свою тушку страницы, которые и так находятся в памяти:



Цитата Сообщение от Htext Посмотреть сообщение
Но, вроде как, при страничном распределении памяти фрагментация не имеет значения
По-сути да, критического в этом ничего нет - ведь это не древний/жёсткий диск, чтобы шуршать головками в поисках сектора. Пример был приведён чисто для наглядного отображения происходящего.
2
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
23.05.2018, 20:57  [ТС]
Цитата Сообщение от R71MT Посмотреть сообщение
TSS - Task State Segment, в переводе на русиш означает "Сегмент состояния задачи".
Входит ли этот сегмент в состав сегмента: кода, стека или данных?
Или TSS - это особый, четвертый вид сегментов?

Добавлено через 1 час 22 минуты
Судя по ссылке, "Каждая задача может поддерживать до четырех стеков..." - похоже, TSS входит в состав сегмента стека.

Добавлено через 2 часа 5 минут
Вот, кстати, в подтверждение (сказанного ранее, по поводу 64 разрядов): https://ru.wikipedia.org/wiki/... 1%80%D0%B0
"В 64-разрядном режиме сегментные регистры CS, DS, ES и SS в формировании линейного (непрерывного) адреса не участвуют, поскольку сегментация в этом режиме не поддерживаются. "
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6217 / 2451 / 403
Регистрация: 29.07.2014
Сообщений: 3,183
Записей в блоге: 4
23.05.2018, 22:00
Цитата Сообщение от Htext Посмотреть сообщение
Или TSS - это особый, четвертый вид сегментов?
Всего может быть не 4, а 16 типов сегментов, а конкретный тип определяется битом(12) во-втором слове дескритора. К этому биту(12) привязаны биты(11-8), итого 5-бит:
Code
1
2
3
слово(2): 00000000.00000000
             |+--+----------> Бит(11-8) - тип сегмента
             +--------------> Бит(12) - тип дескриптора (системный/обычный)
Если бит(12) равен 0, то сегмент является системным и может быть одним из 16-ти возможных (биты 11-8). Селекторы таких дескрипторов грузятся не в сегментные регистры (CS/DS/SS), а в системные типа: IDTR, G/LTDR, TR, CR3. С деталями можешь ознакомиться на Wiki: Дескриптор сегмента

Цитата Сообщение от Htext Посмотреть сообщение
похоже, TSS входит в состав сегмента стека.
..он не имеет отношения к сегменту стека - это самостоятельный сегмент, хотя как и все прописан в GDT. Сегмент стека - это тот-же сегмент данных, только со-взведённым битом(9) направления роста адресов, причём только для юзерских сегментов, когда бит(12) равен 1. Для сегмента стека наоборот, бит(12) должен быть сброшен в нуль, т.е. сегмент системный.

Цитата Сообщение от Htext Посмотреть сообщение
"Каждая задача может поддерживать до четырех стеков..."
У каждой задачи может быть только один стек, т.к. регистр(SP) у процессора один. Когда обеспечивающий мультизадачность системный визор переключается на другую задачу, он скидывает в сегмент TSS только 2-стека (указатель, вместе с содержимым) - это стек системы под управлением которой работает твоя задача, и стек прерванной задачи. Остальные два (как-правило) зарезервированы про-запас.
1
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
26.05.2018, 22:35  [ТС]
Цитата Сообщение от R71MT Посмотреть сообщение
Для сегмента стека наоборот, бит(12) должен
Видимо, здесь опечатка. Должен быть сегмент TSS?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2018, 22:35

Помогите! Почему у меня не идёт программа на других компьютерах?

Программа, которая использует связь с БД, работает не на всех компьютерах.
Добрый день! У меня, вот, такая незадачка вышла. Написал на VB6 программу, работающую с аксесовской БД. И все бы ничего, но вот работает...

Почему моя программа может не работать на компьютерах других пользователей?
Здравствуйте. Подскажите пожалуйста почему может не работать моя программа на компьютерах? Думал дело во фрэимворке, создал чистое...

Как сделать чтобы готовая программа с базой данных работала на всех компьютерах?
Как сделать чтобы готовая программа с базой данных работала на всех компьютерах? На другом компьютере запускаю exe файл и вылетает такая...

Узнать адреса всех запросов, которые слушает Spring
Всем доброго дня. Есть Java Spring на котором разработан REST сервис с кучей методом, все это добро разбросанно по всему пакету... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru