
Jak funguje konzole v os
Ahoj, programuji si takovej svuj malej operacni system a zajimalo by mne, jak funguje konzole.
Os je konzolovy, takze do nej soupu prikazy, napriklad "cat soubor.txt". Probehne zpracovani catu a ten ma nejaky vystup.
A ted otazka: vystupni text v konzoli je nejaky buffer(soubor) na disku, do ktereho se uklada vystup a vsechny prikazy a ten je pak zobrazovan na konzoli?
Googlil jsem to a nic jsem nenasel.
Diky vsem za rady ci odkazy.
Vlastní OS jsem si teda nikdy neprogramoval, ale soubor na disku to není zcela určitě.
Tak nejde čistě o vlastní os, ale tak takový virtuální stroj, který se tomu lehce přibližuje.
# A co ten tvuj 'object' (CMD, console, funguje v OS jako object, tak se tak k nemu musis chovat) má delat ? *Navic, to chces provozovat jako v jakém prostredi, pod l.kernel, nebo One.Core ?
#Samotna console je kuprikladu integrovana v BCD (livecd-creator), Windows PE (WinPE, Wim : vytvorenim pres DISM), Live CDs, tak se podivej jak je udelana, jak se zavadi systém, boot etc
No takhle, můj operační systém je takový simulovaný, je to exáč v c++, který poběží na win a je rozdělen do částí:
boot, kernel, user.
Mám nějaká systémová volání, registry, atd.. Teď jsem ve fázi, kdy navrhuji právě tu konzoli, která bude volat shell.
Konzole bude jen přijmat příkazy a vypisovat výstupy, to je vše, tak jako v klasickém os.
Zpracovani probiha v pameti (nebo docasnem souboru, pokud je to nutne) a na konzoli se pouze zobrazuje vysledek. Pokud potrebujes vysledek do souboru, slouzi k tomu prepinac prikazu nebo presmerovani vystupu konzole do souboru
Díky, jde mi spíš o historii příkazů.
Např ve win se zachovává pro jednu spuštěnou instanci cmd a ta to má vše v paměti?
ked si robis svoj OS tak je to vzdy snad o tom ako si to spravis....neviem co vlastne riesis.
mozes to pisat na disk do tempu, mozes to drzat v ram, mozes to tlacit na laserovke...
Akykolvek iny OS to nema nijak odlisne spravene.
Ano, tak jako pres PowerShell, c# az po konsole, atd, kde se $promena uklada do "RAM", jde o uplny zaklad na zacatku programovani, jak funguje 'RAM, CPU', kde kdyz dam kuprikladu deklarujes promené $pes, $kocka, $kun tak pro tyto promené jsou jeji hodnoty ulozeny (pod urcitou ADRESSou) v RAM, predstav si to jako SUPLIKY ve SKRINCE, kde tvou $promena ulozis do nejakého supliku ktery pojmenujes a u vnitr je jeho hodnota o velikosti - [xbit] (dle TYPU promené, int ..).
*V pamet :bufer HDD je trochu neco jiného), nak nerozumim jak se bez toho obejdes aniz by jsi znal 'adresu' ..
TiP Mozna by bylo dobré, kdyby jsi nahledl co je a jak funguje EFI a zkusil : CMDTools LINE TOOL for UEFI
Jen mi prijde jako blbost drzet v pameti 100 000 radku textu, kdyz to uzivatel neni schopen precist. Dik za rady.
Z jakého duvodu by mel drzet 100 000 radku, promena muze mit jen hodnotu treba int A "13", nebo int B "5" at int C "A+B" u string "pondeli", informace které maji par 'BYTs', RAM ma nekolik 'GIGA',, ale mozna mas popletené co je promena a DATA, ze kterych muze byt cteno, treba DataBase, nebo jiné informace ulezné v souboru.
A taky muze mit
String a = "";
for(100000) {
a = "ahoj\n";
}
Asi nemáš ponětí o tom kolik co zabírá bajtů. Když opomenu, že jsi tam zapomněl "+", tak obecně v UTF-8 jeden znak = jeden bajt. Když tam budeš mít 5 x 100.000 znaků po 1 bajtu, tak to nebude ani půl mega bajtu.
V UTF-8 zabírá znak bajt pouze v případě, že se pohybuješ do #127. Znaky z vyšší části pak zabírají 2-3 bajty.
Vobec to nieje blbost. Ma to vyhodu v tom, ze pri rychlom skakani na stranky cez 'Page Down'/'Page Up' sa to nezasekava.
tak tam das tisic riadkov. vyriesene.
elementarna logika. Ked uz si schopny vyrobit si vlastny "os" tak nemas mat s takymito primitivnymi uvahami najmensi problem.
Nemám problém s čím? S tím jak funguje OS? Co to má společného s tím, že jsem schopen vyrobit si vlastní os a znát princip jak funguje jiný??????????????????
preco opat nerozmyslas?
pointa je, ze ked uz vyrabas nieco tak komplexne ako vlastny "os", ci aspon jeho imitaciu, tak nemas mat co problem s takymi malymi blbostami ako je pocet riadkov v historii terminalu alebo jeho prevedenie. spravis si kolko riadkov historie chces a ako chces aby sa to ukladalo. ako som popisal predtym.
Neviem co vobec riesis nejakych 100tis riadkov historie. nepodstatne hluposti.
Konzole to tak nedela. Pamatuje si pouze definovaný počet příkazů a definovaný počet řádků výstupu. Dejme tomu, že prostě budeš mít buffer 1024 řádků, ve kterém můžeš listovat
Pokud ti stačí, když to bude pouze do okamžiku ukončení konzole, pak se to ukládá v paměti.
Pokud to chces ulozit i mezi spustenimi, pak to ukladej do souboru, ale musis se vyrovnat s tim, kdyz si spustis nekolik konzol a do kazde budes zadavat odlisne prikazy. Co pak bude jako historie v dalsi spustene konzoli?