Jedná se o 32-bitový víceuživatelský multitaskingový operační systém. Vycházeli jsme z toho, že nebudeme používat standardní služby BIOSu a vše si uděláme sami, což jsme dodrželi a s hardwarem počítače komunikujeme pouze pomocí portů.
Historie: Vývoj započal 14.9.2000.
Číslo přerušení | Značka | Název | Typ | Error Code |
00h | #DE | Dělení nulou | fault | ne |
01h | #DB | Debug | trap | ne |
02h | Nemaskovatelné přerušení | interrupt | ne | |
03h | #BP | Breakpoint | trap | ne |
04h | #OF | Overflow | trap | ne |
05h | #BR | Přetečení instrukce BOUND | fault | ne |
06h | #UD | Neznámý opcode | fault | ne |
07h | #NM | Matematický koprocesor nepřipraven | fault | ne |
08h | #DF | Double Fault | abort | ano |
09h | Přetečení koprocesoru | fault | na | |
0Ah | #TS | Chybný TSS segment | fault | ano |
0Bh | #NP | Segment nepřítomen (descriptorová virtualizace) | fault | ano |
0Ch | #SS | Chyba při přístupu k zásobníku | fault | ano |
0Dh | #GP | Obecná chyba ochrany | fault | ano |
0Eh | #PF | Stránka nepřítomna (stránková virtualizace) | fault | ano |
0Fh | Reservováno Intelem | |||
10h | #MF | Chyba koprocesoru | fault | ne |
11h | #AC | Chyba zarovnávání dat | fault | ano |
12h | #MC | Chyba při autotestu procesoru | abort | ne |
13h | #XF | Chyba při práci s SIMD instrukcemi | interrupt | ne |
Celkové shrnutí: V Nothing OS v1.5 je zahrnut Memory Managment, který plně využívá možností Protected Módu, Task Managment, práce s Drivery a Knihovnami, které mohou být jak virtuální(Interní) tak externí(uložené v souboru na disku), Virtual File system(podporující namountování dalších zařízení či disků, neomezené množství FS), podpora našeho mateřského FS EXT2, máme vlastní spustitelný formát EBF(Executable Binary File), interpret příkazového řádku Nosh, program na vypsání všech běžících procesů Ps a též je hotový program, který vytvoří soubor, který zastupuje jakékoliv zařízení, Mknod . Nothing OS, je vyjímečný tím, že bezpečnost systému je zabezpečena více hardwarově než softwarově, ale dohromady to dává solidní bezpečnost:)
Základní charakteristika: Operační systém Nothing využívá všech možností Protected módu, včetně virtualizace paměti. Každý proces má přístup ke 4 GB virtuální paměti, přičemž ta je rozdělena na sdílenou a privátní. Spodní 3 GB paměti jsou sdílené, každý proces k ní má přístup. Zde se nachází kód kernelu, externích knihoven, driverů a souborů mapovaných do paměti. V posledním 1 GB paměti má každý proces soukromé datové struktury, k nimž má přístup pouze on (a kernel).
Virtualizace paměti: Protože proces má přístup ke 4 GB paměti, musí kernel obsahovat rutiny pro virtualizaci pamětí. Přistoupí-li proces do prostoru paměti za hranicí fyzické paměti vyvolá se vyjímka procesoru, která zajistí swapnutí (uložení) obsahu fyzické části paměti na HD a uvolněnou paměť přemapuje na místo ve virtuální paměti, kam proces přistoupil. Při dalším přístupu k paměti uložené na disku se opět pokusíme část fyzické paměti uvolnit a na její místo načteme z disku původní data. Při dostatečné velikosti Swap Partition může takto proces bez problémů zpracovávat větší objem dat, než je velikost fyzické paměti. Přestože maximální velikost paměti, ke které má jeden každý proces přístup je 4GB, pomocí virtualizace privátních oblastí virtuální paměti umožňuje systém přístup k (3+n)GB virtuální paměti, kde "n" je počet právě spuštěných procesů.
Vynucené stránkování: Princip virtualizace paměti využívá dále kernel při mapování souboru do paměti (vynucené stránkování). Principielně se jedná o to, že se část virtuální paměti prohlásí za Memory Mapped Area, jakýkoliv přístup k této paměti pak vyvolá vyjímku procesoru, která zajistí načtení části souboru do paměti. Chceme-li potom přečíst libovolnou část souboru stačí nám číst z paměti, kernel sám zajistí aby v paměti byl skutečný obraz souboru. Mapování souborů do sdílené paměti navíc systém Nohting umožňuje přístup k souboru všem procesům, které chtějí s daným souborem pracovat, předchází tak potencionálnímu plýtvání pamětí, kdy by se v různých částech paměti vícekrát objevily stejné fragmenty souborů.
Alokace a dealokace paměti: Paměť se alokuje pouhým vyčleněním části paměti. Při prvním přístupu k tomuto bloku paměti se opět vyvolá vyjímka procesoru, která zajistí přidělení části fyzické paměti tomuto bloku. Alokuje-li si proces například virtuální paměť o velikosti 10 MB a zapíše pouze do 1 Byte této paměti, přidělí se mu pouze 4 kB místo 10 MB. Dealokace paměti probíhá poněkud zvláštním způsobem. Paměť, která se má dealokovat, se pouze označí jako nepoužitá, nadále však zůstává ve fyzické části paměti (je používána jako cache paměť). Jakmile velikost volné fyzické paměti systému překročí hranici 80-ti % celkové velikosti, spustí se Swap Deamon, část kódu kernelu, která se postará o uvolnění nepoužívaných, dříve již dealokovaných částí paměti. Není-li ani po jejich uvolnění v systému dostatečné množství fyzické paměti, Swap Daemon se pokusí část nejméně používané paměti uložit na Swap Partition.
Ochrana sdílené paměti: Protože sdílená pamět se nachází v adresovacích prostorech všech procesů, musí existovat mechanismus pro její ochranu. Systém Nothing v tomto ohledu spoléhá na ochranu na úrovni hardwaru. Ve sdílené paměti se veškerá pamět alokuje s právem přístupu 0, tzn. pouze kernel a moduly jádra k nim mají přímí přístup. Jakýkoliv pokus o přístup ze strany procesu vyvolá vyjímku procesoru 0Dh - General Protection Fault, která se postará o "zajištění procesu". Procesy, chtějí-li přistupovat ke sdílené paměti, musí zavolat rutiny kernelu, které uváží práva procesu k přístupu k dané části paměti. Je-li proces uznán způsobilým k přístupu k paměti, kernel vytvoří v privátním adresovacím prostoru procesu kopii paměťového bloku ze sdílené paměti, s právy přístupu 3. K tomuto "aliasu sdílené paměti" pak může proces přistupovat bez obav z potrestání.
Obecný popis: Systém Nothing je plně multitaskingový, umožňuje "současný" běh až 512 procesů. Protože systém běží na jednoprocesorovém počítači, není možné, aby dva procesy běžely skutečně v jeden okamžik. Procesy se sekvenčně spouštějí v krátkých intervalech (200Hz), tím vzniká dojem současného běhu více úloh. Při každém přepnutí úloh Protected Mode automaticky uloží stav registru procesoru do TSS (Task State Segment) struktury, která jediná musí být pro každý proces jedinečná. Systém Nothing rozšířil standardní rozložení TSS segmentu, přidal datové struktury pro uložení stavu registrů matematického koprocesoru, dále pak do TSS segmentu ukládá různé informace o daném procesu (jméno procesu, VFS inody standardních vstupů/výstupů,...) Všechny položky rozšiřující struktury TSS neukládá procesor automaticky, při přepínání tásků se o jejich uložení musí starat OS. Pro přesnou strukturu TSS segmentu viz "source\inc\data\tskdata.inc"
Stavy procesů : Systém Nothing se snaží optimalizovat přístup procesů ke zdrojům, v tomto případě využívání času procesoru. Z tohoto důvodu existují v systému několik stavů procesů.
Plánovač úloh: Každý proces v systému má prioritu spuštění, číslo v intervalu od <1..32> Tuto hodnotu používá systém při plánování spouštění procesů. Je to vlastně přímá hodnota časového kvanta, zvaná "jiggies". Sečtou se priority všech procesů ve stavu run a immortable, čímž získáme velikost jednoho cyklu přepínání procesů. Každý proces bude během tohoto cyklu spuštěn tolikrát, jakou hodnotu má priorita. Vytvoří se pole o velikosti součtu všech priorit (= rozložení spouštění tasků), a do něho se umístí PID (Process Identification) všech běžících procesů. Systém se snaží rozmístit PID do pole rovnoměrně. Systém Nothing vytvoří jednorázově rozložení spouštění tasků při spouštění procesu a při ukončování procesu ve stavu zoombie. Přepne-li se task do stavu stopped nebo sleep, zůstává proces nadále v rozložení procesů, jenom se na ně nepřepíná kontrola. Při probuzení procesů tak nemusíme znovu předělávat rozložení spouštění procesů.
Rodiny procesů: Žádný proces nemůže být spuštěn samostatně, bez příslušnosti k určité rodině procesů. Rodiny procesů začínají vždy u programu init Proces může být spuštěn buďto jako synovský proces, nebo jako bratr. Při jakémkoliv modu spuštění se do informaci o rodičovském (bratrovském) procesu uloží odkaz na nově vzniklý proces, a obráceně do informací o novém procesu se uloží odkaz na task, který ho spustil. Tím vzniká hierarchie procesů, potřebná pro kontrolování práv akcí jednotlivých procesů. Proces nemá například právo zabít proces z jiné rodiny tasků, má však právo zabít člena z vlastní hierarchistické struktury. Program init implicitně spouští dvanáct synovských procesů (nosh) na dvanácti konzolách, čímž vzniká dvanáct rodin tasků.
Spouštění procesů: Funkce exec v Nothing OS je nestandardní. Nesnaží se spustit program, snaží se najít softwarový driver, který dokáže zpracovat formát daného spustitelného programu a vytvořit pomocí rutin "taskmana" proces. Tímto způsobem se systém Nothing vypořádal s problémem budoucího rozšiřování spustitelných formátů programů. Stačí vytvořit nový driver a přidat ho do konfiguračního souboru driverů. V tento okamžik je již systém Nothing schopen spouštět nový formát souboru. Drivery pro spouštění programů musí splňovat jistá kritéria
Task Managment obsahuje spoustu rutin pro práci s procesy, které jsou dostupné přes virtuální knihovnu "taskman".
Je to imaginární nástavba, rozhraní mezi uživateli(tasky) a hardwarovými zařízeními počítače, ať už datovými jako např. disky tak komunikačními jako je síťová karta. Všeobecně je možno přistupovat na zařízení jehož kapacita je menší nebo rovna 4Gb, ale díky VFS je možné namontovat(virtuálně připojit do kořenového adresáře) dalších 512 zařízení, čímž nám stoupne celková možná adresovatelná kapacita na 1TB. VFS umožňuje přistupovat k zařízením skrze soubory, čímž se ohromně programátorům usnadňuje práce a zvyšuje se přehlednost. Práce se zařízeními je jen otázkou vytvoření příslušného driveru pro práci s ním. VFS má za úkol plnit funkci inteligentního rozhraní mezi programy a hardwarem počítače, či-li slouží jen pro práci s ním. Dále zajišťuje práci s FileSystemy, které jsou na namountovaných zařízeních, kontroluje práva pro přístup k souborům a zařízením jednotlivým programům.
Při spouštění Nothing OS, VFS namountuje root partition, ve které se nachází veškeré systémové soubory nutné pro bezproblémový běh systému. Pokud Root partition nebude nalezena, vyvolá se Kernel Panic(hláška oznamující typ problému) a systém se zastaví.
největší výhoda VFS extendovaných systémů je, že se téměř neomezeně zvětšuje velikost paměti, ke které máme přístup. Dokonce je možné realizovat to, že když si uděláte driver, který bude to co má na vstupu posílat do sítě, je již jedno pomocí jakého protokolu, namapujete zařízení, které tento driver bude používat, na nějaký adresář, pak pokud do něj budete zapisovat, budete posílat zapisovaná data do sítě. Tímto již VFS získává na síle a moci, v podstatě můžete použít zápis a čtení ze souboru k jakékoliv komunikaci, ať už je to komunikace mezi procesy nebo mezi počítači v síti. Jak jsem již asi říkal, je to v dnešní době to nejlepší rozhraní mezi procesy a hardwarem, co je mi známo.
EXT2 je inodovy File System. Díky inteligentní alokaci volných datových bloků se řadí mezi nejrychlejší FS, protože fragmentace se snižuje jen na nutné minimum. Opravdu jde vidět když hledáte soubor v dosovské FATce a v naší EXT2. Ext2 je navržena tak, aby data byly co nejblíže všem informačním strukturám, to má za následek, že se sníží nutnost seekování disku, což vede ke zrychlení práce a taky v případě poškození kusu disku, je zajištěno, že se nepoškodí všechny data na něm uložené. Celý disk je rozdělený na alokační jednotky "bloky", které můžou mít velikost 1024,2048 nebo 4096 byte. Ty se druží do tzv. Group, a to z důvodu optimalizace práce s diskem, sníží se počet seekování na disku, je to jako, když si v DOSu rozdělíte disk na více partitionu. Dalším optimalizačním stupněm je, že se EXT2 snaží ukládat data souboru do stejné groupy, ve které jsou uloženy informace o inodě, která je vlastní.
Struktura Groupy vypadá takto:
struct ext2_group_desc {
__u32 | bg_block_bitmap; | /* Blocks bitmap block */ |
__u32 | bg_inode_bitmap; | /* Inodes bitmap block */ |
__u32 | bg_inode_table; | /* Inodes table block */ |
__u16 | bg_free_blocks_count; | /* Free blocks count */ |
__u16 | bg_free_inodes_count; | /* Free inodes count */ |
__u16 | bg_used_dirs_count; | /* Directories count */ |
__u16 | bg_pad; | |
__u32 | bg_reserved[3]; |
Nejdůležitější částí EXT2 je tzv. SuperBlock, je to část informačních struktur, ve které se uchovávají informace o celém disku, a bez které se nic nehne, takže když se vám poškodí nebo nedej bože ztratí, můžete začít formátovat...
Struktura superbloku:
struct ext2_super_block {
__u32 | s_inodes_count; | /* Inodes count */ |
__u32 | s_blocks_count; | /* Blocks count */ |
__u32 | s_r_blocks_count; | /* Reserved blocks count */ |
__u32 | s_free_blocks_count; | /* Free blocks count */ |
__u32 | s_free_inodes_count; | /* Free inodes count */ |
__u32 | s_first_data_block; | /* First Data Block */ |
__u32 | s_log_block_size; | /* Block size */ |
__s32 | s_log_frag_size; | /* Fragment size */ |
__u32 | s_blocks_per_group; | /* # Blocks per group */ |
__u32 | s_frags_per_group; | /* # Fragments per group */ |
__u32 | s_inodes_per_group; | /* # Inodes per group */ |
__u32 | s_mtime; | /* Mount time */ |
__u32 | s_wtime; | /* Write time */ |
__u16 | s_mnt_count; | /* Mount count */ |
__s16 | s_max_mnt_count; | /* Maximal mount count */ |
__u16 | s_magic; | /* Magic signature */ |
__u16 | s_state; | /* File system state */ |
__u16 | s_errors; | /* Behaviour when detecting errors */ |
__u16 | s_pad; | |
__u32 | s_lastcheck; | /* time of last check */ |
__u32 | s_checkinterval; | /* max. time between checks */ |
__u32 | s_creator_os; | /* OS */ |
__u32 | s_rev_level; | /* Revision level */ |
__u16 | s_def_resuid; | /* Default uid for reserved blocks */ |
__u16 | s_def_resgid; | /* Default gid for reserved blocks */ |
__u32 | s_reserved[235]; | /* Padding to the end of the block */ |
Jak již bylo řečeno výše, soubory jsou zde nazývány inodami. Jejich velkou výhodou je, že jedna inoda může ukazovat na druhou, čímž docílíme sdílení diskových zdrojů a tudíž úspory diskových kapacit. Takovéto ukazování inod jedné na druhou se nazývá Link(symlink). Existují dva druhy linků, jeden se nazývá Soft a druhý Hard. Soft linky, je to celá cesta ukazující na soubor, který linkujeme, tato cesta je uložena v datových blocích inody, tam kde normální soubory mají uloženy svoje data, a protože lidi od Linuxu jsou šetřílci, jde cesta ukazující na soubor uložit i přímo do inody, pokud ovšem je její délka menší než 65 znaků. Hard linky jsou něco podobného, s tím rozdílem, že se jen vytvoří nová položka v adresáři, kam chceme umístit link s tím, že tato položka ukazuje přímo na linkovanou inodu, čili se dá říct, že tento způsob linkování je ekonomičtější pokud jde o místo na disku i co se rychlosti zpracování týče.
Struktura Inody:
struct ext2_inode {
__u16 | i_mode; | /* File mode */ | |
__u16 | i_uid; | /* Owner Uid */ | |
__u32 | i_size; | /* Size in bytes */ | |
__u32 | i_atime; | /* Access time */ | |
__u32 | i_ctime; | /* Creation time */ | |
__u32 | i_mtime; | /* Modification time */ | |
__u32 | i_dtime; | /* Deletion Time */ | |
__u16 | i_gid; | /* Group Id */ | |
__u16 | i_links_count; | /* Links count */ | |
__u32 | i_blocks; | /* Blocks count */ | |
__u32 | i_flags; | /* File flags */ | |
union | { | ||
struct | { __u32 | l_i_reserved1; | |
} linux1; | |||
struct | { __u32 | h_i_translator; | |
} hurd1; | |||
struct | { __u32 | m_i_reserved1; | |
} masix1; | |||
} osd1; | /* OS dependent 1 */ | ||
__u32 | i_block[EXT2_N_BLOCKS]; | /* Pointers to blocks */ | |
__u32 | i_version; | /* File version (for NFS) */ | |
__u32 | i_file_acl; | /* File ACL */ | |
__u32 | i_dir_acl; | /* Directory ACL */ | |
__u32 | i_faddr; | /* Fragment address */ | |
union | { | ||
struct | { __u8 | l_i_frag; | /* Fragment number */ |
__u8 | l_i_fsize; | /* Fragment size */ | |
__u16 | i_pad1; | ||
__u32 | l_i_reserved2[2]; | ||
} linux2; | |||
struct | { __u8 | h_i_frag; | /* Fragment number */ |
__u8 | h_i_fsize; | /* Fragment size */ | |
__u16 | h_i_mode_high; | ||
__u16 | h_i_uid_high; | ||
__u16 | h_i_gid_high; | ||
__u32 | h_i_author; | ||
} hurd2; | |||
struct | { __u8 | m_i_frag; | /* Fragment number */ |
__u8 | m_i_fsize; | /* Fragment size */ | |
__u16 | m_pad1; | ||
__u32 | m_i_reserved2[2]; | ||
} masix2; | |||
} osd2; | /* OS dependent 2 */ |
Pokud se chcete dozvědět více o EXT2 FS, odkazuji vás na zdrojové texty Linuxu ftp.kernel.org, či dokumentaci, která je přiložena k té naší.
Knihovny jsou jedním ze dvou možných modulů jádra. Dělíme je na externí a interní(virtuální). Knihovny obsahují často používané rutiny, umístěním těchto procedur do knihoven se zmenšuje velikost programů, které by jinak byly nuceny je implementovat do vlastního kódu. Virtuální knihovny jsou také jediný možný způsob jak volat funkce kernelu. Narozdíl od jiných Operačních Systémů nepoužívá Nothing přerušení k volání systémových služeb, ale právě knihovní funkce virtuálních knihoven. Jedinou vyjímkou je přerušení 0B1h, které při libovolném vstupu vždy navrátí Call Gate na knihovnu knihoven. Task pak může pomocí takto získaného Call Gate zjistit Call Gate na všechny knihovny v systému.
Knihovny (zejména virtuální knihovny jádra) obsahují rutiny pro práci s choulostivými oblastmi systému. Proto nejsou všechny funkce knihoven přístupné každému - některé jsou umožněny pouze superuživateli (Booh). Jsou to například služby pro alokaci paměti do sdílené oblasti virtuálního prostoru procesů, pro zákaz přepínání tasků,... Chce-li nějaký program používat tyto funkce, musí být buďto spuštěn superuživatelem, nebo musí mít nastavený sticky bit ve file systemu, čímž proces automaticky získá práva vlastníka souboru. Speciální je virtuální knihovna system, která poskytuje své služby pouze modulům jádra.
Knihovny jsou namapovány do sdílené paměti při startu systému, a jsou v ní po celou dobu běhu systému. Stejně jako drivery a samotný kernel, běží na privilegované úrovni 0, mají tak přístup ke všem zdrojům systému. Právě pro jejich privilegovanost jsou moduly jádra jedním z nebezpečných míst systému. To, které knihovny se mají po spuštění namapovat do paměti (a zpřístupnit se tak procesům) je definováno v souboru "/etc/libs.conf", kde je na každém řádku celá cesta k souboru knihovny. Zabezpečení systému před možností zneužití modulů spočívá v tom, že soubor "/etc/libs.con" a soubory knihoven by měli mít nastaveny práva přístupu pouze pro superuživatele.
Systém Nothing obsahuje 5 standardních virtuálních knihoven :
Zařízení jsou druhým typem modulů jádra. Narozdíl od knihoven mají přesně stanovené funkce, a jejich vstupní parametry :
Drivery dělíme na hardwarové a softwarové. Softwarové drivery jsou používány při snaze standardizovat vstupy/výstupy rutin, které však zpracovávají vstupy odlišně. Názorným příkladem softwarového driveru je driver Exec. Zde jsou přesně definované
vstupní a výstupní hodnoty, které driver musí podporovat, aby mohl spouštět programy.
Hardwarové drivery se dělí na blokové a znakové zařízení. Rozdíl znakových driverů oproti blokovým je ten, že znakové drivery přenášejí data po znacích, blokové pak po 512bytech. Znakové zařízení je například klávesnice, konzola, příkladem blokového
zařízení je pevný disk.
Každý driver má své typové číslo, o velikosti dvojslova. V systému nemůžou existovat dvě zařízení se stejným typovým číslem. Toto typové číslo je jedním z hlavních parametrů procedury, která volá funkce driveru. Ta podle typového čísla určí, který driver má zavolat, zjistí zda zařízení podporuje volanou funkci a pokud ano, zavolá kód driveru. Procedura pro volání funkcí driveru není obecně dostupná, procesy je proto nedokáží zavolat sami. Pokud chtějí zavolat nějakou z jejich funkcí, musí k tomu použít knihovnu. Tímto způsoben se zajišťuje synchronní přístup k zařízením, a k zabezpečení přímého používání teoreticky nebezpečných funkcí, které drivery bez kontroly práv provádějí (např. formátování disku). Nejčastěji používanou knihovnou pro přístup k zařízení je VFS, která "obalí" dané zařízení do VFS inody, a program pak k zařízení přistupuje jako k souboru. Například zápis na 4 konzolu(virtuální obrazovka) se v Nothing OS řeší tak, že se otevře soubor "/dev/tty3", a zapisuje se do něho pomocí standartních funkcí VFS-ka. Při zápisu do souboru VFS zjistí, že se nejedná o normální soubor, ale o zařízení, a proto nezapíše data do souboru, ale zavolá daný driver, který zajistí, aby se znaky vytiskly na obrazovku.
Systém Nothing obsahuje tyto drivery :
Typové číslo | Název | Typ | Popis |
00000010h | IDE driver | blokové zařízení, interní | zařízení k přístupu na IDE kompatibilní disky |
xxxx4010h | Consoles driver | znakové zařízení, interní | zařízení pro výpis na obrazovku |
xxxx4020h | Keyboard driver | znakové zařízení, interní | zařízení pro čtení z klávesnice |
00008000h | EBF exec driver | softwarové zařízení, interní | zařízení pro spouštění EBF souborů |
00008100h | Char encode driver | softwarové zařízení, externí | zařízení pro převod Scan kódu do ASCII |
00008101h | EXT2 filesystem driver | softwarové zařízení, interní | zařízení pro přístup k EXT2 filesystému |
Procesy používají drivery při každém čtení/zápisu do VFS inod. Mohla by však nastat situace, kdy by více procesů otevřelo jeden soubor se zařízením a navzájem si přepisovali data. Kernel proto otevře soubor se zařízením jenom jednou, a jeho VFS inodu uložil ho do standardního vstupu/výstupu daného procesu. Další požadavek o otevření zařízení již neakceptuje. Při vytváření procesů se hodnoty standardních vstupů a výstupů kopírují do nového procesu. Procesy pak používají na čtení/zápis standardních VFS inod uložených ve svém TSS. Tak je zajištěn přístup k zařízením jen určitými procesy. Například k zařízení "/dev/tty0" budou mít přístup jen ty tasky, které jsou součástí rodiny tasku, který byl jako první spuštěn na konzole nula. Používání VFS inod uložených v TSS segmentu procesu je proto vynucováno. Pokud je zajištěno to, že task čte vstupní data z přesně dané VFS inody, může systém zajistit například přesměrování výstupu jednoho programu do vstupu programu druhého, přesměrování vstupu programu ze souboru, místo z klávesnice,...
Drivery se stejně jako knihovny načítají při inicializaci systému do sdílené paměti. To, které drivery se mají nahrát definuje konfigurační soubor "/etc/drivers.conf".Tento soubor stejně jako soubory driverů samotné by měli mít nastavené práva zápisu jen pro superuživatele.
Výpis všech programů, které jsme vytvořili, pro první beta verzi NothingOS:
Struktura spustitelného formátu EBF (Executable Binary File):
Hlavička:
EBF_Header_Struc | Struc | ||
EBF_Signature | DB | 'EBF',0 | ; signatura |
EBF_Header_Size | DD | ? | ; velikost hlavičky |
EBF_Name | DB | 32 dup (?) | ; vnitřní jméno souboru |
EBF_Data_Size | DD | ? | ; velikost data segmentu ve 4k (zarovnání nahoru) |
EBF_Code_Header_Size | DD | ? | ; velikost hlavičky a code segmentu ve 4k (zarovnání nahoru) |
EBF_Code_Entry_Point | DD | ? | ; vstupní bod programu |
EBF_Flags | DD | ? | ; flagy |
EBF_Stack_Size | DD | ? | ; velikost zasobníku |
EBF_LibsNum | DD | ? | ; počet knihoven |
Array[0..EBF_LibsNum-1] of EBF_SubHeader | ? | ; hlavičky knihoven, je jich EBF_LibsNum | |
EBF_Header_Struc | Ends |
Podhlavička popisu knihovny:
EBF_SubHeader | Struc | ||
EBF_LS_LibName | DB | 16 dup (?) | ; jméno knihovny |
EBF_LS_Lib_MinVer | DW | ? | ; minimální verze knihovny |
EBF_LS_Lib_CallGate | DD | ? | ; Offset do data segmentu, kam se uloží Call Gate |
EBF_SubHeader | Ends |
Programy, které pomáhají NothingOS ve spuštění a ovládnutí počítače:
Intel architecture software denveloper's manual: Vol.1 Basic architecture
Intel architecture software denveloper's manual: Vol.2 Instruction set reference
Intel architecture software denveloper's manual: Vol.3 System programming
Intel 386 Programmer's reference manual
Intel processor identification and the CPUID instruction
Protected Mode programming for the intel386tm
Intel architecture optimization manual
Overview of the Protected Mode Operation of the Intel architecture
Programming with the Intel architecture in flat memory model
How to optimize for the Pentium family of microprocessors
Multiprocessor specification
What every computer scientist should know about floating-point arithmetic
Matematický koprocesor Intel 8087 (CZ)
Intel 387tm DX Math Coprocessor
Basic Execution Environment
Working in the Protected Mode Environment
Caching and TLBs; Caching and Demand Paged Virtual Memory
Memory Management: Address Translation, Caching
Kernel based memory simulation
Multitasking & Multithreading (CZ)
FAT 32 overview
The extended-2 file system
Design and Implementation of the Second Extended Filesystem
Specs of the second extended filesystem
Filesystems (CZ)
EXT2 file system (CZ)
ATA interface reference manual
Fast ATA-2 and FastATA sourcebook
ATA packet interface for CD-ROM's
AT attachment interface extension
CHMOS single-chip floppy disk controller
Disc Drive SCSI-2/SCSI-3 Interface
Keyboard Scan Code Specification
Keyboard controller
Keyboard and PS/2 mouse controller
Programmable interrupt controller PIC (8259A/8259A-2)
8259A Interrupt controller on the PC
Using interrupts
Programmable Interval Timer (8254)
Direct memory Access (DMA)
Plug and Play ISA specifications
RTL8019 Realtek Full-duplex ethernet controller with plug and play function
Parallel I/O ports
Serial Interfaces
Techniques for increasing PCI performance
Programming the PC Speaker
Intel ® 815 Chipset: Graphics Controller
The Linux Kernel
Extra BONUS: How To Get To CPL 0 under Windows 95
Čerpací stanice LÁZ | - za umožnění rozvíjení našich myšlenek revolučními směry a za hydrataci naších těl |
Nošovice | - za sqělý hydrát zlatavé barvy |
Stock Plzeň - Božkov | - za Citrus |
Sodovkárny R. Sýkora | - za Kofolu |
Philip Morris a Kryštofu Kolumbovi | - za tabák |
Hardmuth Koh-I-Noor | - za tužky, které se velkou měrou podílely na vývoji |
Borland International | - za kombajn Intel assembleru |
Intelu | - neděkujeme za to, že si hráli na bohy a dělali neúplnou dokumentaci svých výtvorů |
Programům Sysman a Athelp | - za knowledge |
Firmám HP a EPSON | - za tiskárny, které chrlily kilogramy papírů s dokumentacemi |
Výrobcům hardwaru | - za antidokumentaci jejich produktů |
Celosvětové síti Internet | - za nevyčerpatelný zdroj informací |
Vrchním z čerpací stanice LÁZ | - za refresh našich myslí |
Mimozemšťanům | - za to, že ještě nezaútočili a čekali až dokončíme svou práci |
Sami sobě | - za sqělou práci, kooperaci, kompromisy, povětšinou bez bolesti, a samozřejmě za naši genialitu:) |
Michalu Brázdovi | - za to že je a bude |
Tomovi Kmecovi | - za psycho podporu a společně strávené refreshovací cykly |
Ivošovi Tvardíkovi | - za chatu a hydro podporu |
Pavlovi Malíkovi | :*-)))) |
Biolkovi | - za konzultace |
Linus Torvalds | - za ideu vytvoření vlastního OS |
Vývojářům Linuxu | - za varování před možnými chybami, které mohou vzniknout během vývoje OS |
MR. OS/X | - za že nám dokázal, že komerce vyžírá mozek |
Hudba | Louis Armstrong, Daniel Landa, Jane Powell, Metalica, Korn, Underworld, Chemical Brothers, Moby, Mozart, Jaromír Nohavica, Lux Radio Theater, Tři sestry, Beasty Boys, Les Miserables, Soundtrack Samotáři, Matrix, Forrest Gump, R.E.M, Fools Garden, Queen, The Beatles |
Tlačítku RESET | - za to že je |
Školním židlím | - za jejich "pohodlnost" :) |
Naší škole | - za to, že nám poskytla vše co jsme potřebovali:) |
Microsoft | - za to, že nám svým dílem umožnili být lepší |
Omlouváme se za všechny pravopisné chyby které nám unikly, strohost a absenci jakýchkoliv obrázků, ale jsme programátoři