nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Apr 2024 20:22



Reply to topic  [ 10 posts ] 
Сегментная организация памяти 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
В связи с окончанием минимального варианта модели EDUC-8 с 256 байт памяти,
возник у меня вопрос принципиальный и вот какой.

Я уже заложил в модель возможность расширения памяти до 4...32 КБайт, но вот
где-то на просторах Интернета уже довольно давно читал я дискуссию о том,
что сегментная организация памяти "а ля" i8086, где сегменты могут перекрываться,
имеет преимущество перед механизмом переключения страниц, где каждая из них независима.

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

Так в чем же преимущество сегментной организации памяти "а ля" i8086?

_________________
iLavr


19 Jun 2014 16:51
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Мои мысли:
В случае сегментной организации:
а) экономится расширенная память, за счет того, что сегменты могут перекрываться и сам сегмент может быть меньше адресного пространства процессора (256 байт).
б) реализация проще/дешевле - регистр и сумматор.
Можно организовть разные сегменты для команд и данных. Если типов сегментов много (i8086:CS,SS,DS,ES) сложность/стоимость резко возрастает.

Для страничной организации для каждой страници нужен свой регистр
или RAM для всех страниц и ест-но страницы фиксированного размера.
Конечно при необходимости какие-то страницы можно склеить.

Из страничной организации довольно просто организовать виртуальную память (VAX,i386).
Для сегментной это будет намного сложнее (i286, OS/2 ранние версии).

... примерно так ...


19 Jun 2014 18:47
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
б) реализация проще/дешевле - регистр и сумматор.
Можно организовть разные сегменты для команд и данных.

Прости, но просто страничная адресация без перекрытия сегментов и того дешевле!
Сумматор - не нужен, а нужен только просто регистр страниц.

И сегменты для команд и данных также можно организовать безо всякого сумматора!
Они только не будут перекрываться.

Меня, собственно, потому и озадачил этот вопрос - в чем преимущество перекрытия
сегментов перед вариантом, где сегменты не перекрываются?

И мне пока это как-то неочевидно совсем...

_________________
iLavr


20 Jun 2014 05:14
Profile
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
Переменную длину как "+" засчитаете ? :roll:


20 Jun 2014 07:29
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Lavr wrote:
Меня, собственно, потому и озадачил этот вопрос - в чем преимущество перекрытия
сегментов перед вариантом, где сегменты не перекрываются?
Более оптимальное использование памяти, особенно для кода.
Условно говоря, есть две подпрограммы скомпилированные под офсет 0x0. Одна на 1Кб, вторая на 17Кб.
При организации страницами как на спектруме по 16Кб, первая займёт все 16Кб, вторая вообще не влезет и должна быть разбита на пару частей, что в итоге приведёт к использованию 48Кб или 3х страниц. В варианте для x86 будет использовано 18Кб + "хвосты" на выравнивание по сегменту. Вот такая вот арифметика с сумматором.


20 Jun 2014 10:20
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
petrenko wrote:
Переменную длину как "+" засчитаете ? :roll:

Я, в принципе, советуюсь по конкретному вопросу и не занимаюсь зачетами "+" и "-" ...

Возможно, я не очень четко донёс свои сомнения - но они вот в чем:

Не привлекая высшие материи, как виртуальная память, перезагрузка и перемещение сегментов,
меня сейчас конкретно интересует вот что.

Скажем, в системе на 580ВМ80 на порту 0FFH у меня стоит переключатель памяти
страницами по 64К.
Если на странице 0 в ячейках 0FFFEH, 0FFFFH я исполняю код
Code:
0FFFE: MVI A,01H
0FFFF: OUT 0FFH

то я начну работу в странице 1 с адреса 0000Н.

Аналогично, в системе на 8086 в ячейке 0FFFFH текущего сегмента, я заношу в CS значение,
чтобы попасть в сегмент, отстоящий от текущего на 64К.
Я также начну работу с адреса 0000Н следующего сегмента.

С этой точки зрения механизм с пересечением сегментов не дает мне, как мне кажется, никакого
преимущества
.
В обоих случаях, чтобы пересечь границу сегмента (страницы) мне надо "щелкнуть" регистром
страниц либо регистром сегмента кода.

Так вот с этой точки зрения очевидного преимущества перекрытия сегментов перед вариантом,
где сегменты не перекрываются я не вижу.
Вот я и спрашиваю - может я что-то понимаю не так? Может что-то упускаю из виду?

_________________
iLavr


20 Jun 2014 10:33
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Именно в этом преимуществ нет.


20 Jun 2014 19:07
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
jdigreze wrote:
Именно в этом преимуществ нет.

Да и мне пока кажется, что нет... просто в памяти как-то осталось, что какая-то есть там
"изюминка", я ещё когда читал про это - отметил сам себе, что не обращал на это внимание...
Но сейчас - прямо из головы выскочило.

Но практически мне сейчас этот вопрос интересен вот с какой точки зрения:
B 8086, чтобы пересечь границу сегмента в 64К нужен либо дальний межсегментный JMP,
либо "щелкнуть" CS, как я объяснил выше.

В PIC - чтобы пересечь границу сегмента делают запись в биты сегмента, которые потом
учитываются во время JMP и CALL.

В многостраничной системе на 580ВМ80, чтобы перейти на другую страницу, надо обратиться
к регистру страниц.

В PDP-8 (EDUC-8 ) чтобы перейти на другую страницу, надо обратиться к диспетчеру
страниц и переход будет во время JMP и CALL.

Я вот, размышляя над схемой EDUC-8, вижу аппаратную возможность сделать переход через
границу сегмента чисто автоматически. Скажем вот так:
Code:
FC 604; C4 - RES 0
FD 601; C1 - SKF
FE 602; C2 - INP 0; просто выполняется
FF 621; D1 - SDF; какая-то программа
;---------------------- граница сегмента
100 622; D2 - OUT 0;--- пересекается автоматически
101 624; D4 - SEND;--- FF-->1_00; 1 -автоматически переносится в сегментный регистр
102 500; A0 - JMP 00

И я призадумался - удобен ли такой механизм пересечения границы сегмента?
И почему он мне такой нигде не встречался ранее?

_________________
iLavr


21 Jun 2014 05:25
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Возможно, если размер сегмента равен размеру адресного пространства процессора. Т.е. в случае EDUC-8, думается, вполне рабочий вариант.

А вообще, как программисту, мне, наверно, наиболее удобен вариант:
Lavr wrote:
В PIC - чтобы пересечь границу сегмента делают запись в биты сегмента, которые потом
учитываются во время JMP и CALL.
плюс учёт перехода на другой сегмент по переполнению счётчика команд.


21 Jun 2014 19:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
jdigreze wrote:
А вообще, как программисту, мне, наверно, наиболее удобен вариант:
Lavr wrote:
В PIC - чтобы пересечь границу сегмента делают запись в биты сегмента, которые потом
учитываются во время JMP и CALL.
плюс учёт перехода на другой сегмент по переполнению счётчика команд.

А оно именно так и будет! Просто механизм для JMP и CALL там и без меня придумали.
Но размер сегмента небольшой - 256 байт, вот я и подумал, если программа исполняется
линейно, почему бы не пересекать границу сегмента автоматически вперед?

И тут вот и призадумался о наложении сегментов - но в моём случае, как я вижу, оно мне
дополнительных преимуществ не даст.

_________________
iLavr


22 Jun 2014 06:55
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 10 posts ] 

Who is online

Users browsing this forum: No registered users and 26 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.