edit:
(Onderstaande post is niet helemaal van toepassing, zie ook het commentaar van Onno hieronder.)
Uit het artikel:
Deze feature houdt in dat verschillende processors tegelijk bezig kunnen zijn met aparte processen.
Dit is juist
niet wat SMP inhoudt; dit is hoe systemen als OpenBSD, NetBSD en FreeBSD werkten voordat SMP geïmplementeerd werd (en ook NT4 en Linux voor versie 2, trouwens).
Onder moderne besturingssystemen wordt onderscheid gemaakt tussen processen en threads. Als je een executable start wordt er in principe één proces gestart; dit proces bestaat uit een enkele thread (een reeks instructies die achtereenvolgens uitgevoerd wordt). Binnen een proces kunnen meerdere threads gestart worden; dan worden dus min of meer parallel twee procedures uitgevoerd, die wel van gezamelijk geheugen gebruik maken. Dit is bijvoorbeeld het geval als een webbrowser meerdere plaatjes tegelijk wil downloaden; meerdere langlopende threads, die elk niet al te CPU-intensief zijn.
In een systeem met een enkele processor worden verschillende threads niet echt parallel uitgevoerd. De processor voert dan gewoon steeds een paar instructies uit de ene thread uit, en schakelt dan over naar een andere thread. Als er snel genoeg gewisseld wordt, lijken de threads gelijktijdig te executeren. Als een systeem meerdere processoren bevat, onstaan er echter grote problemen doordat twee processoren hetzelfde geheugen moeten benaderen. Nu kan het opeens voorkomen dat twee instructies tegelijkertijd hetzelfde geheugen willen wijzigen. Om problemen hiermee te voorkomen, wordt in traditionele besturingssystemen maximaal één processor aan een proces toegekend. (Vervolgens moeten in de kernel nog wel een aantal voorzorgsmaatregelen worden genomen, maar dat terzijde.)
Dit systeem wordt assymmetric multi-processing genoemd, omdat de processorkracht niet gelijkmatig verdeeld wordt over alle threads. Het werkt heel aardig, omdat beide processoren in principe nuttig werk doen, maar als er één CPU-intensief proces actief is (zoals een grafische applicatie of een game) dan kan deze maar de capaciteit van één processor benutten. Dat is dus niet ideaal. Symmetric multi-processing (SMP) beoogt juist het tegenovergestelde: het gelijkelijk verdelen van processorcapaciteit over alle threads. Dat is dus ook precies wat nu in OpenBSD geïmplementeerd is: verschillende processoren die tegelijk bezig kunnen zijn met
hetzelfde proces (en dus niet wat er in het artikel vermeldt staat).
(Interessant detail is dat onder Linux op kernel-nivo bijna geen onderscheid gemaakt wordt tussen processen en threads. Vandaar dat het relatief makkelijk was om SMP onder Linux te implementeren, en Linux had dus relatief vroeg ondersteuning voor SMP.)
Het verschil tussen symmetric en asymmetric MP is niet zozeer het verschil tussen threads en processen, maar het verschil tussen gelijkwaardige en gespecialiseerde processors. In een asymmetrisch systeem verricht elke CPU een bepaalde reeks taken, en de volgende weer andere.
Met alleen processen kun je ook best een SMP systeem hebben, zolang elk proces maar op elke willekeurige processor gegooid kan worden. Het werkt natuurlijk niet altijd zo goed als wanneer je ook threads gebruikt, maar dat is een heel ander punt.
Het hele verschil tussen processen en threads is iets wat binnen je OS en applicaties een rol kan spelen (mbt rechten en adresruimte), maar voor de definitie van SMP zijn die termen irrelevant.
Threads worden trouwens ook wel eens lightweight
processen genoemd, en worden soms ook gewoon met behulp van processen geimplementeerd. (zie LinuxThreads..)
(pas in (relatief) recente Unixen zie je echte kernel support voor (p)threads)
Dus vallen over het gebruik van 'processen' door de auteur is niet echt terecht. Ook al omdat het een gewoon Nederlands woord is dat niet speciaal die beveiligings- en adresruimtekenmerken die het binnen OS'en vaak heeft met zich meedraagt.
OpenBSD doet nu trouwens echt pas voor het eerst MP (op x86), het bestond hiervoor helemaal niet. Ook niet op proces-niveau.
Je hebt gelijk; ik ging uit van eigenschappen voor een praktische toepassing van SMP, die technisch gezien niet noodzakelijk zijn. Gelijkwaardige processoren toekennen aan verschillende processen is ook SMP.
Na het lezen van de het artikel waaraan AVL refereert, is me duidelijk geworden dat ze bij OpenBSD nog veel minder ver zijn dan ik dacht. De collega's van FreeBSD zijn juist al twee jaar bezig om het systeem zoals OpenBSD dat nu net heeft ('giant' of 'big' locking), te veranderen in een beter presterende implementatie (fine grained locking). Het was nooit het doel van OpenBSD om vooraan te lopen met ontwikkelingen, maar op deze manier lopen ze naar mijn mening wel erg ver achter.