Programátoři z pekel zde za šat a stravu programují čipová pseuda. Nyní s favicon!

G5|5G

V roce 1999 jsem čtrnáct dní brigádničil v textilce a osm hodin denně čistil velké žoky od barevných žmolků, abych si za to později koupil svůj první pořádný harddisk (4.3GB). Ve svém dnešním počítači mám více operační paměti. Pět giga!

PowerMac_G5dual-2011_02_05.jpg

Před půl rokem jsem upgradoval z 2.5GB na 4GB. Ani jednu tuto kapacitu jsem nikdy při bežné činnosti nezaplnil (i 1.5GB v mé staré G4 jen zřídka přetékalo do swapu), přesto když jsem měl za levný peníz možnost sehnat dva gigové DDR moduly a vyměnit je za dva půlgigové, neváhal jsem déle než jednotky sekund.

Memory sloty v G5

I když se všude jako o 64-bitovém Mac systému mluví až v souvislosti se Snow Leopardem, podporu 64-bitových procesorů a prolomení hranice 4GB na jeden task přinesl už Mac OS X 10.4 – Tiger. Prvním čtyřiašedesátibitovým Macem totiž byl už v roce 2003 PowerMac G5 a právě on měl možnost osadit až 8 GB RAM, což byl v porovnání s předchozími generacemi PowerMaců plný čtyřnásobek.
Apple ovšem podporu 64-bitového prostředí omezil pouze na konzolové programy, přesněji řečeno na programy opírající se o BSD subsystém. Idea byla taková, že pokud program s GUI potřebuje více než 4GB RAM, spustí si na pozadí výkonné jádro, které udělá co potřebuje a zase vrátí činnost zpět do hlavního programu. Tahle koncepce se mi celkem líbí, škoda jen že to u ní nezůstalo. Z označení „64bit“ se stal postupem času buzzword, jímž se ohánějí zejména profesionálové, které zdržuje každá milisekunda. Apple proto přepsal i Cocoa API a dnes je tedy v OS X 10.6 už vše čtyřiašedesátibitové. Je přitom dobré si uvědomit, že pro roztažení adresačních možností, není třeba roztahovat celý procesor, důkazem budiž osmibitové procesory, které adresovaly 16-bitově (i8080, Z80), nebo šesnáctibitové procesory, které adresovaly 24-bitově (i80286).

Když už ale mám ty možnosti, rozhodl jsem se je alespoň vyzkoušet. K tomuto účelu posloužil stupidně jednoduchý program, který jsem nazval memory_eater:

#include<stdio.h>
#include<stdlib.h>
   char *buf1;
   FILE *f_in;

int main() {
   buf1=malloc(4.3*1024*1024*1024);
   f_in = fopen("/dev/zero", "r");
   fread(buf1, 512, 4.2*1024*1024*1024 / 512, f_in);
   fclose(f_in);
   getchar();
   free(buf1);
   return 0;
}

Přeložil jsem jej pomocí gcc -arch ppc64 test.c -o memory_eater a spustil. Výsledek vypadá takto:

64bit task

Tím jsem si ověřil, že vše funguje, jak má a tím to končí, pro nový gigabajt paměti stále nemám využití, stejně jako pro pár těch starých.