pokud to budeš takhle hodnotit, můžeš říct, že binární kód je primitivní, vždyť to je jen kombinace jedniček a nul.
ASM nemá moc abstrakcí a je komplikovaný na vytváření, úpravu/opravu nebo čtení. Když děláš něco v ASM, máš vedle sešit a tam si všechny podklady, adresy, struktury, závislosti sepisuješ, jinak se v tom ztratíš. Vyšší jazyky jsou často samodokumentační.
jak by byl svět jednoduchý ;-)
http://www.funpic.hu/_files/pictures/original/90/40/4090.jpg
Tak se podívejte na něco, kde se skutečné kódovalo binárně:
https://www.fi.muni.cz/usr/jkucera/pv109/vystavka/xprocha1_04-01.html
Když i feritové paměti zapomněly, třeba po ošklivém výpadku napájení, tak se musel pěkně binárně nacvakat zavaděč zavaděče (IBL, initial binary loader):
vypnout ochranu paměti
binárně adresu do program counteru, enter
instrukci, enter (tlačítko STORE, zároveň inkrementovalo PC), těch instrukcí bylo asi 5
zapnout ochranu paměti
nastavit PC, založit děrnou pásku s diskovým zavaděčem a spustit
zastavit, nastavit PC a spustit
No a všechny údaje se zadávaly 16 tlačítky na čelním panelu, jedno slovo bit po bitu.
Sestava na tom obrázku je opravdu hodně stará, s psacím strojem jsem to sice zažil, ale už tam byl i CRT terminál. Psací stroj Consul měl totiž vadu, dal se uštvat, tak že hrozilo zaseknutí kláves - další oříšek pro programátora, když chtěl něco vypsat co nejrychleji, ale programově se to nedalo zjistit.
No tuhle jsem zrovna na půdě narazil na manuál k ASM pro 8051. 1250 stránek... Tak ti nevím.
V reálu se těch "pět instrukcí" rozšíří ještě o další, přibudou podmínky, flagy,... U CISCu se mění i délka instrukcí jak v Bytech, tak v taktech. Někde je jako bonus booleovský procesor, jinde násobička nebo FPU, další podpoduje třeba SIMD.U dalšího jsou tři sady instrukcí, pro 8b, 16b a 32b. Některý registry jsou vyhrazený (např. stack pointer, return register), některý registry mají specifickou instrukci pro čtení a zápis, takže mov/ld tam nefunguje. Někde je zamykání, takže se musí provést přesná sekvence instrukcí. Interrupt je kapitola sama pro sebe... A někde je tak skvělá pipeline, že si musíš hlídat pořadí instrukcí. A třeba u MIPSu musíš při volání funkce napřed alokovat stack frame a pak do něj teprve zálohovat registry...
A to všechno se brouk od brouka liší.
Složitost není v těch instrukcích. A je jich víc, aritmetické, logické, bitové, přesuny, skoky, návraty, řízení přerušení atd. Ta složitost vychází z operandů. CISC mají šílený bordel v tom, co se s čím dá použít. RISC tam sice nemají bordel, ale zase to dohání tím, že umí někdy i desítky typů operandů.
Řečeno na příkladu instrukce "LD N,M" v Z80. Je jen jedna. Ale jaképak umí způsoby zadání operandů?
Pro N (kam):
1. [např. A] Název registru, do kterého se vloží hodnota
2. [např. (BC)] Název registru, že kterého se vezme adresa, na kterou se vloží hodnota
3. [např. (NN)] Konstanta, která je odkazem na adresu, kam se vloží hodnota
4. [např. (IX+N)] Konstanta a název registru - z registru se načte hodnota, přičte se konstanta a výsledkem je adresa, kam se vloží hodnota
Pro M (co):
1. [např. (A)] Název registru, ze kterého se bere hodnota
2. [např. (BC)] Název registru, že kterého se vezme adresa, ze které se bere hodnota
3. [např. (NN)] Konstanta, která je odkazem na adresu, ze které se bere hodnota
4. [např. (IX+N)] Konstanta a název registru - z registru se načte hodnota, přičte se konstanta a výsledkem je adresa, odkud se bere hodnota
5. [např. N] Konstanta, která je sama hodnotou
A teď se ještě můžeme dohadovat, zda PUSH a POP jsou samostatná kategorie, nebo je to jen jiný název pro LD pracující s registrem SP. A co třebas takové EX a EXX? Říkal někdo LDI a LDE? Počítá se sem i LDIR a LDDR, nebo to už jsou instrukce skoku? Co třebas IN, OUT, OUTI a podobné legrace? Vlastně je to podobné LD, jen procesor navíc nastaví na jednom vývodu příznak, že nechce RAM, ale PORT.
Teď si to drobně zkomplikujme tím, že LD může být 8 bit nebo 16 bitů a podle typu parametrů se pak liší i délka instrukce (kolik zabírá bytů). A nakonec ještě fakt, že je to CISC - takže nejsou dostupné zdaleka všechny kombinace. Z celkových 675 kombinací je to jen 181.
Ono to sice vypadá hezky, že je to prostě jedna instrukce. Ale naučit se jí byla práce na pár dnů a nové věci se člověk dozvídal i po roce. A to je to prosím Z80, velmi starý osmibit. U 16bitů je těch možných operandů ještě víc - součty dvou explicitně zadaných registrů, součet konstanty nebo registru a dalšího implicitního registru (zdravíme relativní adresování v rámci segmentu) atd.
@Karel
To co popisujete není IMO CISC vs RISC, ale ortogonalita: https://cs.wikipedia.org/wiki/Ortogon%C3%A1ln%C3%AD_instruk%C4%8Dn%C3%AD_sada
On je ještě rozdíl mezi "naivním assemblerem" (a = d[i]; i++) a "efektivním assemblerem" (a = d[i++]). Ten efektivní se ohromně špatně portuje na jiné procesory, protože efektivity dosahuje použitím instrukcí, které dělají více věcí najednou.
Takže místo čtyř instrukcí pro zkopírování bytu z adresy v jednom registru na adresu v jiném registru, zvýšení hodnoty prvního registru, zvýšení hodnoty druhého registru a snížení hodnoty třetího registru se použije jedna, která provede všechno (viz Z80 a LDI). No a co s tím pak ve chvíli, kdy to portujete na procesor, kde LDI není? Obvykle to jde rozepsat na jednotlivé pod-instrukce, ale občas se vám stane, že se výsledek chová jinak k příznakům. Kupříkladu že vám instrukce X na první architektuře nastavuje příznak O podle výsledku a na příznak Z nesahá, zatímco na druhé architektuře to vždy nastaví O i Z. A jako na potvoru autor původního programu tohohle využil.
Chapu cile projektu a souhlasim a tleskam! Ale..
Proc novy LinuxBoot, at se pripoji k Libre/Core-boot (tam, kde neni ta urvana zenska).
Proc google a dalsi velci zakaznici HW neprinuti vyrobce zdokumentovat k cemu je ktery pin pri bootu? Pak muzeme nahradit cely FW otevrenou variantou.
Vtip je v tom, že LinuxBoot NEnahrazuje coreboot. Coreboot může zastat funkci právě toho UEFI PEI/hardwarové inicializace, která musí jinak být nechaná ta proprietární. Pak AFAIK klidně může načíst Linux z payloadu a jedem do LinuxBootu.
Ad. google a spol: a mají tyto firmy nějaké perspektivní alternativní možnosti, ke kterým by odešly? Pokud ne, tak se vyjednávací pozice poněkud rozpadá.
tam mali vcera macOS(18,19%) a Linux(4,32%) spolu 22,51% trhu a Windows "len" 76,45
http://gs.statcounter.com/os-market-share/desktop/germany/#daily-20170101-20180131
a aj u francuzov
macOS 20,11%
Linux - 1,87
spolu 21,98%
Windows 76,62%
http://gs.statcounter.com/os-market-share/desktop/france/#daily-20170101-20180131
Tam uz nie je nutnost podpory Windows, aby to malo zaujimave cisla...
Ten MacOX z toho muzete vyjmout, ten beha na jinem HW nez Linux a Widle, takze to neni moc zajimave a bez toho ta statistika je dost zdrcujici. Apple mozna pujde svou vlastni cestou, mozna si priohne tohle pro sve potreby, ale to nebude mit moc vliv na ostatni HW. Kvuli par % Linuxu dodnes spousta vyrobcu ani prstem nehne.
ano ale dlhodoby "sesup" Windows je zrejmy a niekam v dlhodobom horizonte povedie...
ako vo FRA
http://gs.statcounter.com/os-market-share/desktop/france/#daily-20090101-20180130
tak v GER
http://gs.statcounter.com/os-market-share/desktop/germany%20/#daily-20090101-20180130
Vieme presne, čo sa stalo.
V Ille de France-Paríž a okolie, rozdávali druhý rok USB s OSS aplikáciami vo vetzii GO všetkým 13 a 14 ročným a tesne pred tým peakom im dali live USB Ubuntu. A masové testovanie u starých rodičov s kamarátov je ten peak. Vtedy bol linuxový Steam v inom stave ako dnes. Dnes by ostalu na Ubuntu.
Jo, jak rikam, do sta let je z MS firma na vyrobu obleceni nebo neco takoveho. Pokud nas ve valcovani Redmondu nezbrzdi par drobnosti, jako momentalni rozesranost vyvoje kdeceho, kdy jsou vsude bugy, ktere nikdo neopravuje a misto toho se kazdy vrha do vyvoje novych ficur, ze vsechno akorat bobtna a jako pridanou hodnotu to obvykle prinasi starou belu.
Obcas si pripadam jak v jedne sci-fi povidce, kdy lidstvo geneticky modifikovalo deti, aby mely tvurci fantazii (tvurfanta) a vysledkem bylo, ze vsichni tvorili, nikdo nic nedokoncil, vse bylo rozesrane a vse se rozpadalo pod rukama, ze si clovek nebyl ani jist zivotem, kdyz jel po pohyblivem chodniku.
"do sta let je z MS firma na vyrobu obleceni "
Myslis jako ze si rano navliknu trencle (C) by M$ .. a nez stihnu dojit na hajzlik tak se rozpadnou? A kdyz si je teda nejak zflikuju, tak po prvnim vyprani zmodraj(pripadne zcernaj)?
Jo a v ramci vylepseni ti pridaj prostor vzadu - to kdyby ses z toho nahodou posral, a vpredu uberou - to aby ty trencle byly dzendrove korektni.
Jak to tedy bude s updaty firmware?
Když mám kus firmware uzavřený a kus otevřený, půjde aktualizovat jenom ta jedna část? Přinejmenším na prodejce desktop základních desek se s updaty moc spoléhat nedá a kdyby to nešlo, tak mi celá snaha přijde trochu zbytečná.
proč mizerný jazyk? Každý jazyk je na něco mizerný a na něco jiného vhodný. Vypadá to od tebe jako anonymní hejt na něco co neznáš.
Go kompilátor tam je jen kvůli tomu, aby nemuseli mít binární bloby, ale mohl tam být Go kód čitelný a kontrolovatelný, teprve při spuštění se zkompiluje, což trvá desítky až stovky ms. Samotný kompilátor má myslím 5MB, není to tak velké, být to tam nemusí, pokud si někdo zkompiluje go scripty dopředu, nemusí to tam dávat, pouze bude mít jeden binární blob, což zpětně neověříš co v tom je.
> pouze bude mít jeden binární blob, což zpětně neověříš co v tom je.
Tomu binární blob nebrání, pokud jsou zdrojáky někde (klidně úplně jinde) dostupné a pokud je build deterministický.
Nadruhou stranu ani zdrojáky nezaručují, že kód nebude nijak (třeba i záměrně) obfuskován.
Přijde mi to tak embedded záležitosti divné dávat zdrojáky.
Nepřu se s tebou, takhle to odůvodňují autoři. Mít tam go script je jen možnost, chtějí s tím nahradit bash/sh scripty a být to tam nemusí. Více např. v prezentaci https://www.coreboot.org/images/6/66/Denver_2017_coreboot_u-root.pdf
Ve zprávičce jsou nepřenosti, linuxBoot se očividně bude zakládat na corebootu a asi i u-rootu a tahle věc s go pochází z u-rootu a ten se u UEFI dá používat přes NERF.
Bash mám rád protože pohledem vidím co dělá a dokážu to změnit, to je pro mě důležitá věc pro konfiguaci a kontrolu systému, pokud i tak bude řešena customizace firmware, proč ne? Já jsem za to rád, dokážu pak najít problém rychleji, když mám zdrojáky viditelné.
Kolik embedded používá sh scripty? To také není žádná vyjímka a sh interpret obsahuje kde co právě kvůli tomu, tady to nahradili Go a go scriptem, zatím jsem s tím moc nepracoval. Vidíš v tom nějaké konkrétní problémy? Zajímají mě názory, je to nové :).
Problém v tom přímo nevidím, spíš jsem to intuitivně nečekal. U firmware očekávám něco relativně lowlevel - ne nutně z hlediska samotného jazyka (ať je to klidně v Javě), ale spíš z hlediska výstupu (=ať je to napsáno v čemkoli, v ROM bude uložen výsledný strojový kód, stroj se nebude zdržovat kompilací).
Jako pokud půjde o sekvenci pěti jednoduchých příkazů, tak to rozhodně není problém, ale to zase mohl stačit i Bash.
> Hardware je stále složitější a uživatelé mají také stále vyšší požadavky na jeho start. Firmware musí aktivovat spoustu různorodých zařízení a musí být schopen komunikovat s celou řadou různých zařízení od externích disků přes síťová rozhraní s různými komunikačními protokoly.
Ne, hlavní problém je v tom, že výrobci cpou do firmwaru čím dál více marketingových nesmyslů, které tam nemají co dělat.
> Existují například moduly pro načítání obrázků ve formátu JPEG (kvůli zobrazení loga výrobce), kompletní síťový stack, HTTP server a další.
držím palce nech teda Linuxboot fičí ako má. Ja pevne verím, že ide o malý krok k tomu, aby sme sa raz dočkali možno aj open source CPU - keď to dokázali Rusi so svojim Elbrus alebo Číňania s Longsoon - tak aj západ by sa mohol na niečo zmôcť. Škoda, len že verejnosti unikol Sun Microsystems - ktorý už raz ponúkol open source cpu - no neujalo sa.
Možno okolnosti veľké firmy k tomu donútia - len nech to neskončí iba linuxbootom nech to ide ďalej až k open source CPU.
Nejsem pisatel, ale já tam vidím větu, že když si Rusové i Číňané dokázali vyrobit vlastní procesor, tak to asi není tak složité, abychom si nějaký OpenSource nedokázali vytvořit sami.
Sice s tou větou nesouhlasím (podle mne to složité je), ale nějak v ní nevidím tvrzení, že by Elbrus měl být OpenSource.
Ve skutecnosti vyrobit CPU je pomerne primitivni - kazdej trochu zrucnej kutil to zvladne i doma (cpu nemusi vypadat jako chip vyrobenej na 10nm). Jenze jedna vec je funkcni CPU a druha vec je vykony CPU.
BTW: CPU si muzes postavit i virtualni ... trebas v Minecraftu.
[j]
kazdej trochu zrucnej kutil to zvladne i doma (cpu nemusi vypadat jako chip vyrobenej na 10nm)
Hmmm... takovy CPU bych rad nekdy videl na vlastni oci. Navrh 5let, vytvoreni prvniho prototypu 1-2 roky, velikost jako cela zakladovka :) Zas na druhou stranu, mohl by ledacos vydrzet, a urcite by se osvedcil jako spolehlivy konzument prebyvajici energie v siti. Jako predrazeny luxusni samotop super.
Kludne si vlastny procesor vyrob, pripadne aj cely pocitac na jednom cipe - trochu potrenuj nejake FPGA napr. Altera Stratix 10 - a vobec to neni drahe ... a je to na technologii 14nm - len to treba vediet. Mozes zacat aj s cipmi za par euro - do tych sa sprace napr. kompletne cely praveky Sinclair ZX Spectrum ... zdrojaky najdes na internete.
No, ve své době jsem si vytvořil svůj CPU (tehdy tedy dvanáctibit, funkčně vlastně osmibit, ale bylo to dělo) z jednobitových řezů Tesla řady MH3000, tedy Intel 3000. Moje mikroinstrukce, můj řadič, moje co jsem chtěl. Tišťáky dokupy cca půlmetr čtvereční, nic moc. Nevím, co na tom vidíte strašidelného. Integráč si doma asi neupečete, ale svůj procesor z dílů zvládne kdokoli, kdo chce.
[Vanamond]
Ja nepochobuji o tom ze to mozne je. Mozne je totiz vsechno, mas-li dost informaci a zdroju. Ja si vsak kladu otazku, k cemu to je a jak moc nakladny a efektivni bude bude takovy podomacku zbastleny procesor z konvencnich dilu (na cas, energie, finance, odpodni produkty, vcetne energetickych ztrat, atd...). Dale je otazkou velikost, ktera ve veku miniaturizace jiste neni nepodstatnym parametrem. Nechci kazit nici zapal pro vec (sam byvali bastlir), ale nejsem si proste jist, jestli podobne snahy maji nejakou cenu pro rekneme... sirsi vyuziti... A to ani nemluvim o konkurence schopnosti prumyslovych kousku.
Pokud to delate sam sobe pro radost (nebo aby jste si dokazal, ze to je mozne a zvladnete to), klidne si postavte processor o velikosti saloveho pocitace, ktery vas svlece i z trenek, bude napajen vlastnim Temelinem a odpadnim teplem vytapy celou obec. Jako proc ne?
Otázka nebyla, jaký to má smysl, ale jak je to náročné. A padlo tu, že to je tak náročné, že to pomalu není v lidských silách. Což není pravda.
Další věc, s níž bojuji například u svých spolupracovníků, je to, že si pod danými pojmy vždy představí to, co konkrétně znají, tj. v nějaké velmi komplikované variantě. Řekne se procesor, vybavěj si nějaký 16jádrový Intel s MMU, předvídáním skoků atd. Řekne se kompilátor, napadne je C++ v poslední normě se všemi myslitelnými optimalizacemi. Výsledkem je, že mají ze spousty problémů strach dříve, než se zamyslí nad tím, jak by se to dalo řešit.
Stále více mi situace v IT připadá tak trochu zvláštní, když v dobách IQ-151 když potřebovali překladač Pascalu, tak prostě sedli a napsali v Assembleru 8080 překladač Pascalu, co se vešel do pár desítek kilobajtů, ve dvou lidech, zatímco dnes, když potřebujete parsovat nějaký jednoduchý jazyk dejme tomu v Javě, tak všem hned naskakuje husí kůže, jak by to bylo strašně složité.
Spousta věcí vůbec nemusí být tak složitá, jak je obvykle známe. A ta jejich složitost vůbec nemusí být ku prospěchu věci, prostě jen bobtnaly a bobtnaly, protože mohly. Podobně jako se vyvinuli dinosauři, aby pak následně vyhynuli jako slepá větev evoluce.
Udělat si nějaký jednoduchý procesor z obvodů řady 74xx, to není nic neřešitelného, o řadě 3000 ani nemluvě. Dokonce není nic neřešitelného si v Assembleru napsat vlastní program na návrh a simulaci integrovaných obvodů a v něm si ten procesor vytvořit a nechat vyrobit, jak dokazuje výše zmiňovaný Chuck Moore. Jaký to může mít smysl - to nelze říci obecně, bez znalostí konkrétního problému. Ale jistě existuje spousta problémů, u kterých by takové řešení smysl mělo, ale raději se mu vyhlo a zvolilo se nějaké méně optimální, protože nikoho nenapadlo, že by to třeba nemuselo být tak neschůdné, jak by se na první pohled mohlo zdát.
[kiwi]
Dobre. I kdyz narocnost a smysl daneho projektu jdou podle me ruku v ruce, lepe receno jsou na sobe primo zavysle. Jsem porad presvedcen, ze smysl to bude mit vicemene spis pro laboratorni/zajmove ucely, nez do praxe - ale mohu se mylit, to nepopiram.
Tak jako tak, budem-li se drzet predeslych prispevatelu, pak jsem ziskal dojem (a v tom duchu jsem ireagoval), ze se bavi o modernich procesorech. A ty sam pises o "jednoduchem" procesoru. Jak uz nekdo vyse psal, je asi dost podstane jak si takovy procesor definujem.
Procesor ma definici porad stejnou. Vubec nezalezi na tom "jak si ho definujes". Procesor si muzes kupit klidne v podobe swaba se 3ma nohama a je to stejne tak CPU jako kdyz to tech noh ma tisicovku. Ve vysledku oba delaji i umeji presne totez, jen s ruznym vykonem.
Je to totiz uplne stejny jako logicky obvody - muzes si jich poridit celou plejadu variant, ale ve vysledku ti na uplne vsechno staci dvouvstupovej NAND.
Zasadni problem je pak v tom, ze 80% tech soudobych lepicu a matlalu netusi co je to NAND. Natoz aby tusili, co dela CPU.
[j]
Procesor ma definici porad stejnou.
Ano, ale...
Vubec nezalezi na tom "jak si ho definujes".
...ale to uz pravda neni. Z hlediska pouziti a vyroby je mezi procesory 8080, 386, Pentium II, Core 2, ... az treba k memu sesti jadrovemu Buldozeru pomerne dost podstatnych rozdilu. Chtel bych videt (a to myslim uprime) jak by jsi delal po domacku z konvencnich soucastek obdobu treba jen takoveho Pentia D. O Buldozeru, nebo treba Rizenu se nebudeme bavit vubec.
Apropo jsem tak trochu ze stare skoly, tak si dost dobre nedovedu predstavit jak bych se patlal doma s tistaky pro 16/32 nedej boze 64bit obvody. kreslit tistak se sbernici pro 8bit byl opruz. Ale pravda, dneska jsou uz dostupne i jine technologie nez lak na nechty a mix kyseliny dusicne a chlorovodikove. Nebo te sracky co prodavali na leptani spoju a byla v podstate k nicemu (Za to skvele rozleptavala stabilitu mych nervu ). :)
PS. NAND = negovany soucin :) Jednoduse receno dve log.1 na vstupu zanemnaji log. 0 na vystupu. Ve vsech ostatnich pripadech log. 1 na vystupu hradla. Je to spravne? No jsem si trochu zamachroval, ale priznam se, ze uz je to strasne dlouho co jsem neco delal. Vlastne bastlit jsem postupne prestaval v dobe, kdy jsem se vic a vic sblyzoval s pocitaci :-D
probíhá kontrola pamětí, kterých může být několik desítek, disků, kterých může být 10, 20, čeká se na ipxe, vykecává se s každým HW.
Lze to pokonfigurovat, běžně HPE servery startujeme kolem 1 - 2 min, fsck na disky se dělá až po bootu, ten trvá u několika desítek disků i desítky minut.
Problém je, že tvoje vista běžný na mini počítači a ještě k tomu ten počítač má aktivní fast boot, kdy neprozkoumává nový HW, server má spousty portů, na všech musí ověřit co tam je a popovídat si s tím, trvá to dlouho.