Konference: Počítač SHARP MZ-800 a emulátory

Od: Fuzzy
Datum: 22.9.2003 11:34
Předmět: MZIX-proveditelnost-pamet

MZIX-proveditelnost-pamet:

V diskusi o tom, zda bude MZ-800 stacit rychlostne, se dle meho nazoru
 ukazalo,
ze to neni zrejme a bude zalezet, jak bude MZIX hospodarit s pameti.

Z toho duvodu bych chtel otevrit dalsi thread, co se tyka proveditelnosti:

PAMET
======

UZI i UZIX pouzivaji filozofii prideleni urciteho pametoveho prostoru jednomu
procesu (UZI a UZIX 1.0 32 kB, UZIX 2.0 48 kB), a tam at si proces
(s urcitymi omezenimi a s podporou knihovnich funkci) dela, co chce. Zmena
kontextu se deje tak, ze tento pametovy prostor se 'uklidi' nekam pryc a
naopak
odnekud se natahne jiny proces. Zachovame-li tuto filozofii, tak dle HW
konfigurace
Sharpa mame nekolik moznosti pametoveho modelu:

1. Zachovat vse co se tyka pameti tak, jak je v UZI/UZIX 1.0.
-------------------------------------------------------------------------------
To znamena 0100-7fff prostor pro proces, 8000-ffff prostor pro MZIX.
Kam ale odkladat nebezici procesy? Pri nejrychlejsi variante RD
by dle predbeznych vypoctu zmena kontextu mohla trvat cca 0.4 s.
Pro experimantalni ucely by to stacilo, otazkou zustava prakticka pouzitelnost
 (tim nechci
rict, ze by to bylo na 100% prakticky nepouzitelne - ale prinejmensim
nepohodlne).

2. Vyuzit nektere dalsi pametove zdroje MZ-800
-------------------------------------------------------------
Jestlize se spokojime s monochromatickym textovym rezimem 80x25, mame k
dispozici
rozsirenou VRAM (16 kB). Tu muzeme vyuzit, zvladneme-li nejak rozume jeji
strankovani
v ramci MZIX. Budeme-li pocitat temito kupeckymi pocty (i kdyz v praxi to
samozrejme tak
byt nemusi, problemy se strankovanim mohou byt pro nas neprekonatelne), tak na
beh
procesu muzeme mit dokonce 48 kB - jako UZIX 2.0. Muze se vsak ukazat, ze pro
beh jadra
MZIX 32kB stacit nebude, a pak bysme tuto VRAM mohli pouzit pro ucely jadra.
Dalsi zdroje mame v ROM Sharpa. Dle me muzeme pouzit az 14 kB z ROM (bez 2 kB
znakoveho
generatoru). Velky problem u teto varianty je ztrata kompatibility s vetsinou
aplikaci pro Sharp. Dalsi problem
by bylo zkoordinovat relativne slozite strankovani ruznych casti ROM.
Aplikujeme-li opet kupecke
pocty na pamet, tak mame 62 kB pro proces (samozrejme ciste teoreticky).
To vyuziti ROM myslim docela vazne, ale je jako "option" pri prekladu jadra.
Samozrejme by byla
jak jina option moznost behu MZIX s puvodni ROM Sharpa. Vyuziti tohoto vidim
napr. v
experimentech s emulatorem. Prepinani kontextu: zde by byla stejna situace jako 
v (1.) s tim,
ze prepnuti kontextu by se prodlouzilo adekvatne velikosti pameti pro proces.


3. Pouziti pridavne strankovatelne RAM
---------------------------------------------------
Uplne jina situace by byla pri pritomnosti strankovatelne RAM 0000-7fff. To
bysme
pak byli prakticky ve stejne HW konfiguraci jako MSX2 se svym memory mapperem
a zmena kontextu by pak nevyzadovala prakticky zadne kopirovani dat.
Navic by zde byla moznost jeste pro tohle strankovani nejak optimalizovat jadro 
(napr.
ze by se mohla strankovat cast jadra - a pak by zbylo vic pameti pro procesy,
jadro by mohlo
obsahnout vice mista->vice funkcnosti v jadre). Pripadne by byla mozna kombinace
s bodem (2.).
Dobra by byla moznost strankovat jak spodnich 32 kB adresovaho prostoru, tak i
hornich 32 kB,
pripadne dalsi varianty - napr. spodnich 32 kB + dalsich 16 kB nekde jinde...
ale to si asi uz moc
vymyslim.

4. Prepracovani process/memory managementu z UZI/UZIX
-----------------------------------------------------------------------------
Dalsi moznost je, ze predelame process a memory management z UZI/UZIX. Mam na
mysli
_zmenit_ tu skutecnost, ze je pro proces pridely pevny kus (32kB) pameti, a s
tim
at si proces dela, co chce.
Asi by to slo udelat nejak tak, ze se procesu prideli takove mnozstvi pameti,
kolik
staticky zabere a dale pak napr. nejaka rezerva (4kB?) pro zasobnik/dynamickou
alokaci
pameti. Zde by byla nutna uprava knihovniho 'malloc' tak, aby se dle toho
choval.
Pri vetsim pozadavku na dynamickou pamet v dobe behu procesu by se musela
pridelena pamet
'nejak' zvetsit.
V tomto pripade by mohlo byt vice procesu v pametovem prostoru a odswapovaly by 
se jen nektere-
na ktere uz pamet nezbyva.
Tohle reseni by implikovalo pozadavek za relokovatelny kod procesu, coz by ale
nemusel byt
neprekonatelny problem - viz linker ze 'z88dk', ktery je schopny takovy kod
produkovat.
Tohle reseni by bylo kombinovatelne s resenimi (1.), (2.) i (3); i kdyz
kombinace s (3) by asi moc
prinosem nebyla.

=================================================

Nemyslim si, ze by sme se museli rozhodnout _jen_ pro nejakou z vyse uvedenych
moznosti.
Jde o to tyhle myslenky nejak zkombinovat a navrhnout skupiny reseni - a tyto
varianty by
se mohli volit napr. parametry pri prekladu jadra.

Jestli vas napadaji jeste nejake dalsi moznosti memory managementu, tak se tesim
na vase prispevky.

Kazdopadne si myslim, ze jista uroven proveditelnosti tu _je_ i co se tyka
pameti (i kdyz treba jen
na experimentalni bazi) a tudiz je tu i proveditelnost na urovni rychlosti
MZ-800. Co vy na to?

No, snad jste to po me prelouskali az sem. Howgh.

Fuzzy
 
[2003/1 (22)] [2003/2 (25)] [2003/3 (14)] [2003/4 (20)] [2003/5 (73)] [2003/6 (108)] [2003/7 (88)] [2003/8 (81)] [2003/9 (146)] [2003/10 (60)] [2003/11 (12)] [2003/12 (5)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]