Skip to content

Latest commit

 

History

History
270 lines (214 loc) · 19.5 KB

README_cz.md

File metadata and controls

270 lines (214 loc) · 19.5 KB

PROSBA O POMOC!

Prosím informujte mě (ticketem nebo pomocí pull) jestli víte o nějakých dobrých odkazech na :

  • Programování Hardwaru firmwaru
  • Qemu/KVM hypervisor
  • Síťový zásobník jádra

Univerzita nízkoúrovňového programování

Co to je?

Jsem inspirován google-interview-university. Rád bych se podělil o zkušenosti a ukázal cestu, jak se stát nízkoúrovňovým programátorem, protože jsem zjistil, že tyto dovednosti nejsou tak běžné jako byly kdysi. Navíc se mě mnoho studentů a začátečníků ptá, jak by se mohli stát nízkoúrovňovým programátorem a inženýrem Linuxového jádra.

Tato stránka nemůže obsahovat všechny odkazy/knihy/kurzy. Například tato stránka představuje Arduino, ale nejsou zde detailní informace o Arduinu a vestavěných systémech. Dál už musíte sami. Máte heslo "Arduino" se kterým můžete začít. Takže vaším dalším krokem bude pravděpodobně progooglování Arduina, a nakoupení sady a udělání něčeho samostatně a ne sbírání odkazů a knih co jsou zadarmo. Prosím mějte napaměti, že tato stránka je pouze plánek pro začátečníky.

Co to je nízkoúrovňové?

Za nízkoúrovňové programování považuji takové programování, které má velmi blízko ke stroji, používání nízkoúrovňových jazyků jako C a assembly. Toto je v kontrastu s vysokoúrovňovým programováním, typickým pro aplikace uživatelského prostoru, používajícím vysokoúrovňové jazyky (např. Python, Java).

Ano, programování systémů má velmi blízko ke konceptu nízkoúrovňového programování. Tato stránka zahrnuje navrhování hardwaru a nasazování firmwaru, které systémové programování neobsahuje.

Takže tato stránka zahrnuje témata spadající mezi hardwarové komponenty a Linuxové jádro. To je velký rozsah různých rovin. Dokument o jedné straně nemůže nikdy pokrýt detaily každé z nich, a tak se tento dokument zaměřuje na to stát se odrazovým můstkem pro nízkoúrovňové programování.

Teorie

Základní teorie pro nízkoúrovňové programování jsou dvě:

  • Stavba (architektura) počítače
  • Operační systémy

Myslím, že nejlepší cestou jak se naučit teorii je zúčastnit se kurzu. Čtení knih není špatné, ale zabere příliš mnoho času a úsilí. Můžete najít spoustu dobrých kurzů na online univerzitách, například na Coursea.org a edx.org. Teorie je teorie. Nemyslím, že musíte obdržet nejlepší známku, jde o to udělat si obrázek. Stále se budete zlepšovat zkušenostmi.

Nechte mě představit vám pár knih, které jsem přečetl. Běžně se používají jako skripta na univerzitách. Pokud nebude kurz s těmito knihami na vaší univerzitě, stojí za to přečíst si je.

  • Počítačová architektura
    • Computer Architecture, Fifth Edition: A Quantitative Approach
    • Computer Systems: A Programmer's Perspective
    • Computer Organization and Design, Fourth Edition: The Hardware/Software Interface
  • Operační systémy
    • The Magic Garden Explained: The Internals of UNIX System V Release 4 an Open Systems Design
    • The Design of the UNIX Operating System
    • Operating Systems: Internals and Design Principles by William Stallings
  • Doporučené kurzy

Existuje nepřeberné množství dobrých knih. Nechci tím říci, že by jste měli přečíst hodně knih. Hlavně přečtěte jednu důkaldně. Kdykoli se naučíte teorii, simultánně implementujte její kód. Implementování jedné věci je lepší než znát jedno sto teorií.

Jazyky

Assembly

Vyberte si jeden mezi x86 a ARM. Nemusíte znát oba. Nezáleží na tom znát assembly jazyk. Hlavní věcí je porozumění vnitřním procesů CPU a počítače. Takže nemusíte cvičit assemly posledních CPU. Vyberte si 8086 nebo Cortex-M.

  • 8086 assembly programming with emu8086
    • základní koncepty CPU a počítačové architektury
    • základní koncepty programovacího jazyka C
  • 64bit assembly programming(na překladu ještě pracuji)
    • základní koncepty moderní CPU a počítačové architektury
    • základní koncepty převodu ze strojového kódu a opravování kódu v jazyce C
    • potřebuji pomoci s překladem
  • ARM Architecture Reference Manual, 2nd Edition
    • Kompletní reference o ARM programování
  • Organizace počítače a design
    • MIPS edice
    • ARM edice
    • RISC-V edice
    • Akademické knihy, které vysvětlují jak jednotlivé komponenty počítače pracují od základů.
    • Detailně vysvětlují rozdílné koncepty, které tvoří stavbu počítače.
    • nejsou určeny čtenářům, kteří se chtějí stát zdatnými v určitém assembly jazyku.
    • MIPS a ARM edice pokrývají ta samá témata, ale rozpitvávají rozdílné architektury.
    • Obě edice obsahují příklady ve světě x86.

Jazyk C

Tady neexistuje zkratka. Jen přečtěte jednu celou knihu a vyřešte všechny příklady.

Chcete-li být expertem na programování v C, navštivte https://leetcode.com/. Hodně štěstí!

Aplikace

Hardware && Firmware

Jestli chcete být inženýrem vázaných systémů, nejlépe bude začít jednoduchou soupravou hardwaru, než začít s nejnovějším ARM chipsetem.

  • Arduino Start Kit
    • K dispozici je mnoho sérií Arduina, ale "Arduino Start Kit" má nejjednodušší procesor(Atmega328P) a knihu návodů.
    • Atmega328P má osmi bitové jádro, což je dobré místo, kde začít s navrhováním digitálních obvodů a vývojem firmwaru.
    • Nepotřebujete vědět jak kreslit schémata a plánky a sestavit čip.
    • Musíte ale vědět, jak číst schémata a porozumět zapojení čipů.
    • Vývojáři firmwaru by měli být schopni číst schémata a zjistit, jak poslat data do cílového zařízení.
    • Postupujte podle knihy návodů!
  • 8086 manuál
    • Pokud jste nováčkem co se týká x86 architektury, 8086 je také velmi dobrý návod co do stavby procesoru a 80x86 assembly
  • 80386 manuál

V tomto bodě by jste měli být dost dobří na to začít s nejnovějšími ARM nebo x86 procesory.

Například Raspberry Pi deska má Cortex-A53 procesor, který podporuje 64-bitové sady instrukcí. To vám dovoluje si vyzkoušet moderní procesorovou architekturu s rPi. Ano, můžete si ti koupit... ale... co s tím budete dělat? Pokud nemáte žádný cílový projekt, můžete klidně desku hodit do šuplíku a zapomenout na ni jako na další věcičky, co jste nakoupili předtím.

Takže vám doporučuji jeden projekt.

Vytvořil jsem jádro na hraní které podporuje 64-bitově délkový mód, stránkující a ve velmi jednoduchém kontextu přepínající. Udělání jádra na hraní je dobrá cesta k porozumění moderní počítačové architektuře a kontroly nad hardwarem.

V podstatě poslední procesor a poslední hardwarové prostředky už máte. Svůj laptop! Svůj desktop! Máte všechno, co potřebujete k tomu začít! Nemusíte nic kupovat. Qemu emulátor může napodobit poslední ARM procesory a procesory Intel. Takže všechno, co potřebujete, už máte v rukou. Je mnoho jader na hraní a dokumentací z kterých můžete těžit. Stačí si nainstalovat qemu emulátor a vyrobit drobné jádro, které bootuje, začne stránkovat a tiskne zprávy.

Další jádra na hraní:

Linuxové jádro a ovladač zařízení

Nepotřebujete vytvořit kompletní operační systém. Připojete se ke komunitě a podílejte se na vývoji.

Důsledně nastudujte

Dokumentace

Projděte, když něco potřebujete

Jiné aplikace

Ano, nemusí vás zajímat Linux nebo firmware. Pokud tomu tak je, můžete nalézt jiná uplatnění:

  • Programování systému Windows & ovladače zařízení
  • Zabezpečení
  • Reverzní inženýrství

Nemám žádné znalosti o těchto uplatněních. Prosím pošlete mi nějaké informace pro začátečníky.

Nízkoúrovňové programování nejsou jenom jádra a ovladače. Je ještě jedno důležité uplatnění nízkoúrovňového programování a to je softwarově ovládané úložiště nebo poskytovaný systém souborů. Jejich detailní popis již spadá mimo rámec tohoto dokumentu, ale existuje jeden vynikající kurz, kde si můžete jednoduchý poskytovaný systém souborů vyzkoušet.

Budoucnost nízkoúrovňového programování

Neznám budoucnost, ale sleduji RUST.

Kdybych měl týden volna, učil bych se RUST. A to proto, že RUST je nejnovější jazyk se kterým mohu vyvíjet Linuxové ovladače zařízení.

IoT (internet věcí) je nový trend, takže by stálo za to podívat se, jaký operační systém se pro IoT používá. ARM, Samsung a některé další společnosti mají svůj vlastní real-time operační systém, ale bohužel mnoho z nich má uzavřený zdrojový kód. Ale Linux Foundation má také řešení: Zephyr

Typické serevery cloudů mají mnoho vrstev; například, hostitelský operační systém, kvm ovladač, qemu proces, hostující operační systém a servisní aplikace. K nenáročné virtualizaci byl vyvinut kontejner. V blízké budoucnosti by měl nový koncept OS, takzvaný OS knihoven nebo Unikernel, nahradit typické zásobníky softwaru pro virtualizaci.

Velká data a používání cloudů vyžaduje stále větší a větší úložiště. Disky přímo přiložené k serverům nemohou uspokojit požadovanou kapacitu, stabilitu a výkon. Proto byl učiněn výzkum k vytvoření obrovských úložných systémů s mnoha úložnými zařízeními propojených vysokorychlostní sítí. Původně to bylo zaměřené na sestavení jednoho velkého úložného souboru. Ale v současné době se provozuje větší počet souborů pro mnoho virtuálních přístrojů.

Překlad

Prosím pošlete mi pull request, pokud chcete přeložit tuto stránku. Uvedu jej zde.

Kdo jsem?

Jsem inspirován google-interview-university. Rád bych se podělil o zkušenosti a ukázal návod jak se stát nízkoúrovňovým programátorem, protože jsem zjistil, že tyto dovednosti nejsou tak běžné jako kdysi byly. Navíc se mě mnoho studentů a začátečníků ptá, jak by se mohli stát nízkoúrovňovým programátorem a inženýrem Linuxového jádra.

Pro vaši informaci, mám přes deset let zkušeností coby nízkoúrovňový programátor:

  • 80x86 Assembly programování
  • Hardwarová zařízení s čipem Atmel a firmware
  • Systémové programování v jazyku C pro Unix
  • Ovladače zařízení v Linuxu
  • Linuxové jádro: stránková alokace
  • Linuxové jádro: blokovací ovladač zařízení a md modul