funguje to jako dva oddeleny procesory ... kazdej si taha svoje data/instrukce z pameti a uklada si je do svy cache a pak je sam zpracovava (aniz by o tom druhym procesoru vedel - teda az na vyjimky - pristup k pameti se nejak sefuje v pametovym radici).

priznam se ze programovani v realnym modu je mi uplne cizi takze nevim jestli by to fungovalo. pravdepodobne by to nebyl zas tak velkej problem ale protoze to k nicemu poradne neni tak se tim asi nikdo nezabejval.

co kde pobezi vpodstate urcuje scheduler. ten se vola pri kazdym preruseni, pri kazdym systemovym volani a pripadne kdyz proces proted (nebo uplne) 'skoncil' - proste nema co delat nebo se vola periodicky casovacem.
scheduler se pak kouka do tabulky procesu a podle nejakyho algoritmu vybere co na tom ci onom procesoru dal pobezi. proto jsou veci jako hodne preruseni nebo spatne nastavenej casovac (da se nastavovat v parametrech jadra linuxu a *bsd - jinde nevim) jednim z nejvetsich zpomalovacu systemu. proste cpu musi prestat delat co dela a zacit resit preruseni. zaroven je to i nejvetsi brzda SMP systemu - stravi se hodne casu presouvanim procesu z pameti na procesor a naopak.

pak jeste existuje komunikace mezi procesorama ... o ktery toho moc nevim ... snad jen ze si za nejakejch okolnosti musej posilat interrupty a updatovat si cache.