Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Libor 02. 03. 2013, 15:19:09

Název: Správa paměti
Přispěvatel: Libor 02. 03. 2013, 15:19:09
Zdravím,
nevíte někdo jak zjistím hodnoty relokačních (bázových) registrů pro jednotlivé stavy a úlohy v nich, pokud by došlo ke zhuštění?
Název: Re:Správa paměti
Přispěvatel: Jakub Váňa 02. 03. 2013, 15:34:41
Přiznám se, že otázce nerozumim. ...
Název: Re:Správa paměti
Přispěvatel: Libor 02. 03. 2013, 15:52:10
Snad obrázky pomůžou pochopit, oč se mi jedná. Mám prostě paměť po statických sekcích a jde mi o to jak zjistím, hodnoty relokačních registrů pro jednotlivé úlohy (http://i.imgur.com/rdu3w8n.png) a (http://i.imgur.com/KEZPtFG.png)
Název: Re:Správa paměti
Přispěvatel: Jakub Váňa 02. 03. 2013, 15:58:22
Aha ... o jaké architektuře se bavíme. Protože toto rozhodně není nějaký moderní OS - chybí stránkování.

Předpokládám, že chceš zjisti hodnoty registrů i pro úlohy, které aktuálně nejsou běžící. To musí být někde zadokumentováno v OS. Ten si musí držet informace o spuštěných aplikacích a jejich registrech.
Název: Re:Správa paměti
Přispěvatel: txt 02. 03. 2013, 17:38:04
Takže otázka zní: kam ukládá scheduler mnou použitého OS datovou strukturu PCB?
Název: Re:Správa paměti
Přispěvatel: Libor 02. 03. 2013, 17:48:12
Nemyslím si že se jedná o PCB. O jakou architekturu jde netuším, ale myslím, že jsem to pochopil špatně a šel jsem na to poněkud složitě. Jak to může být někde zadokumentováno, když jsou ty úlohy pokaždé jiné nebo příjdou v jiném pořadí tzn. že jde o dynamický registr, který je pokaždý jiný. Snad jsem správně pochopil princip, ale nevím jakou hodnotou to mám zapsat a taky pokud mám třeba stav 2, tak úloha 4, 5 v té době neexistují a úloha 2 skončila, takže pokud mám tabulku kde mám vypsat ty hodnoty k jednolivým úlohám, tak mám napsat u těch úloh že neexistují?
(http://i.imgur.com/l8drZDH.png)
Název: Re:Správa paměti
Přispěvatel: Jakub Váňa 02. 03. 2013, 18:07:37
Co to znamená, že proces neexistuje ? To také určitě příslušný OS definuje.

Začal bych prostudováním dokumentace daného OS a Architektury. Ty otázky, tak jak jsou položené nelze zodpovědět.

Buď je potřeba více informací a nebo lépe vysvětlit o co ti jde. Ale spíš teda více informací.

Zadokumentováno to může být velice snadno - např.:

Na adrese 0x0100 se nachází tabulka spuštěných procesů.
Deskriptor procesu
0x00 2 PID
0x04 4 Base register
0x08 8 Limit register
........


Samozřejmě realita se bude od příkladu lišit.



Ty asi nejsi programátor, že ? Nebo jsi zatím začátečník ? Napiš nám spíš, co je tvým úkolem. Takhle tu budem dumat ještě za měsíc :D
Název: Re:Správa paměti
Přispěvatel: lons 02. 03. 2013, 18:12:43
no tak jedna sa o multiprogramovanie z usekmi variabilnej dlzky. preklad adries je pripocitanim relokacneho registra.

no tak v prvom rade urob co od teba ziadaju, t.j. tu relokaciu teda to skompaktnenie. Proste popresuvaj ty ulohy zaseba

No a potom vyrataj tie relokacne registre pre tie ulohy t.j. poscituj tie dlzky
Název: Re:Správa paměti
Přispěvatel: Libor 02. 03. 2013, 18:27:04
Já bych sám sebe definoval jako svátečního programátora. Takže do jisté míry jsem začátečník. Studuju SŠ kde právě probíráme správu paměti.
lons asi pochopil o co mi jde, to že ty úlohy mám dát za sebe mi je jasný, akorát nevím jaký mám vypsat hodnoty k U1=?;U2=? atd. když v tý době/stavu ta určitá úloha prostě neprobíhala ani nečekala.
Název: Re:Správa paměti
Přispěvatel: Ivan 03. 03. 2013, 12:53:03
Podivej se na soubor /proc/<pid>/smaps ten popisuje cely adresni prostor kazdeho procesu.
Název: Re:Správa paměti
Přispěvatel: Jakub Váňa 03. 03. 2013, 21:09:23
Ivan: tady se těžko mluví o nějakém UNIXu - podívej se ještě jednou na zadání ;-)
Název: Re:Správa paměti
Přispěvatel: PanKapitanRUM 03. 03. 2013, 21:59:26
Některé posty by bylo lepší od začátku smazat.  ::)
Teď jsem nad tím přemýšlel pár minut a myslím, že jednak sám autor neví, na co se ptá a jednak nepoužil mozek.
Pokud by věděl, na co se ptá, nejspíš by už dávno napsal operační systém a platformu o které mluví.
Zdá se mi, že je na VŠ v prvním ročníku a má předmět operační systémy, tam mu vysvětlovali nějaký obecný paměťový model.
A on by se na to teď rád podíval, jak to vypadá ve skutečnosti.
Taky jsem byl na VŠ a něco podobného jsem tam určitě viděl.

Tedy v zásadě ASI, protože nás autor nechává hádat, se jedná o zjednodušený model chráněného režimu a toho, co se stane, když doje k výpadku stránky. ::)

Opravte mě....
Název: Re:Správa paměti
Přispěvatel: PanKapitanRUM 03. 03. 2013, 22:04:01
Doplnění: To schéma možná ani není od žádného existujícího procesoru/architektury, protože se jedná o "školní model", na kterém se vysvětlují základy fungování operačního systému. Nedostatek informací pak není způsobený tím, že by je autor nechtěl poskytnout, ale protože prostě nemá páru o tom, že existují různé architektury natož různé adresovací režimy nebo na x86 stránky.

Pak by odpověď zněla:
Přijmi to, jak tě to škola učí, tohle je zjednodušený model.
S realitou to má společného asi tolik, kolik má obrázek výbuchu atomové bomby společného s její detailní konstrukcí  ::)

App, tohle jsou pro tebe nepodstatné věci, ty se nauč jako básničku a raději se šprtej matematiku.
Název: Re:Správa paměti
Přispěvatel: Jakub Váňa 03. 03. 2013, 22:06:15
Opravim: tady se evidentně nejedná o stránkování, ale o segmentaci - nějakou hodně primitivní. Podle mě je architekturou 8086ka - podle velikosti paměti 1MB. Je to ale jen tip. OS - těžko říct - v DOSu většina aplikací nebyla připravena na to, že je někdo začne za běhu přesouvat.
Název: Re:Správa paměti
Přispěvatel: Jakub Galgonek 03. 03. 2013, 22:40:44
Pak by odpověď zněla:
Přijmi to, jak tě to škola učí, tohle je zjednodušený model.
S realitou to má společného asi tolik, kolik má obrázek výbuchu atomové bomby společného s její detailní konstrukcí  ::)

Také může jít o model nějakého hodně starého hardwaru. Neměl něco podobného CDC Cyber 6000?
Název: Re:Správa paměti
Přispěvatel: Rax 03. 03. 2013, 23:27:50
nevíte někdo jak zjistím hodnoty relokačních (bázových) registrů pro jednotlivé stavy a úlohy v nich, pokud by došlo ke zhuštění?

Najít autora otázky a přiložit mu revolver ke spánku, protože celý tento model je patrně jeho osobní výmysl a správná odpověď se nachází jenom v jeho hlavě. Je silně nepravděpodobné že by tohle někdo realizoval.

Aby ses něco přiučil, tak na 32-bit x86 se to dělá takhle:
Každý proces má teoreticky 4 GB virtuální paměti, bez ohledu na fyzickou velikost RAM. Virtuální paměť je rozdělena na 4 KB stránky, každá stránka má vlastní fyzickou adresu v RAM. Procesor při přístupu sám překládá virtuální adresu na fyzickou v RAM. Stránka se zabírá na žádost aplikace přes služby OS a přístup k prázdné stránce způsobí chybu.

Opravim: tady se evidentně nejedná o stránkování, ale o segmentaci - nějakou hodně primitivní. Podle mě je architekturou 8086ka - podle velikosti paměti 1MB. Je to ale jen tip.

8086 neumělo ani segmentaci ani stránkování, celé to bylo o převlečeném výpočtu s*16+o.
Název: Re:Správa paměti
Přispěvatel: PanKapitanRUM 03. 03. 2013, 23:49:09
Tak tohle je řekl bych RAXova silná stránka, ale hádat se stejně budu.
Adresování na x86 v reálném režimu bylo opravdu ve formátu segment:offset.
Nicméně 8086 paměť segmentovanou samozřejmě měl ::)
http://en.wikipedia.org/wiki/Intel_8086#Segmentation

Ostatně jak jinak adresovat paměť o velikosti cca 640KB?
Registr AX je 16-ti bitový.
16 bitů reprezentuje (teoreticky) nejvyšší hodnotu FFFFh resp. 65535 dec.
Tedy dostatečně velkou hodnotu pro pohyb v 64 kilech paměti.
MOV F000h,AH; Ulož na adresu F000 hodnotu registru AH (horní části AX (AH jako Hight, AL jako Low))
Adresování segment:offset tedy bylo pro EXE soubory přímo nezbytné.
MOV DS:AX,BH; Ulož na adresu určenou výpočtem DS:AX hodnotu BH...

Už si to fáááákt nepamatuju ::)
Teď už ani já nevěřím, že jsem v roce ~1994 progamoval docela dobře v ASM  ::)
Název: Re:Správa paměti
Přispěvatel: Rax 03. 03. 2013, 23:58:40
Zdravím,
nevíte někdo jak zjistím hodnoty relokačních (bázových) registrů pro jednotlivé stavy a úlohy v nich, pokud by došlo ke zhuštění?

Našel jsem Cyrilkův PPT ( >:( :o :'( ) a hodnoty zjistíš podle velikostí procesů.
Tedy 1. proces má bázi 0 nebo prostě tam kde začíná volné místo
2. proces má bázi 1. procesu + velikost 1. procesu
3. proces má bázi 2. procesu + velikost 2. procesu
4. proces má bázi 3. procesu + velikost 3. procesu
...
Název: Re:Správa paměti
Přispěvatel: Rax 04. 03. 2013, 00:18:17
Adresování na x86 v reálném režimu bylo opravdu ve formátu segment:offset.

Skutečně se to tak jmenovalo, jenže v 8086 byly začátky "segmentů" určeny napevno výpočtem segment*16 a trapně se tak překrývaly z velké části mezi sebou. Bylo to tak uděláno pro levnou portaci starých programů které uměly jenom 64 KB.

Teprve ve virtuálním režimu 80286 poprvé fungovala skutečná segmentace tak jak ji chápeme dnes a mohl sis tak určit odkud segment skutečně bude začínat a hlavně že se nebude překrývat s nějakým jiným.

Teď už ani já nevěřím, že jsem v roce ~1994 progamoval docela dobře v ASM  ::)

To já ti klidně věřím, v těch časech to umělo hodně lidí.