Asimetrični Multi Processing (AMP) omogućava višeprocesorskom sistemu da pokreće više Operativnih Sistema (OS) koji zavise jedni od drugih. Drugim rečima, svaki CPU ima svoj vlastiti privatni prostor memorije, koji sadrži OS i aplikacije koje su za rad na tom CPU. Osim toga, može postojati neki zajednički memorijski prostor koji se koristi za višeprocesorsku komunikaciju. To je u suprotnosti sa Symmetric Multiprocessing (SMP),kod kog jedan OS radi na više Centralnih Procesorskih Jedinica koje koriste javno zajednički memorijski prostor.
Ovaj udžbenik je proizvod nedavnog rads na Freescale P4080 Processor. Ako niste upoznati s ovim čipom, to je zver sa 8 jezgara , u PowerPC porodici. (Udžbenik ima preko 3500 stranica!)
Slika ispod pokazuje tipičan AMP sistem. Nakon što se CPU0 podigao, wrload uslužni program se koristi za učitavanje određene VxWorks slike iz sistema datoteke u prostor memorije za ciljani CPU. CPU 0 ima veći deo raspoloživog prostora memorije, dok ostali CPU imaju manju regiju za igru.

VxWorks AMP sustav prikazuje privatno i zajedničko dodeljivanje memorije
Postoje i dve različite podvrste AMP, nadgledane (hipervizor) i nenadgledane. Ovaj članak će se baviti isključivo nenadgledanim. Hipervizor je nešto potpuno drugačije
Zašto koristiti AMP?
AMP pozajmljuje sebe aplikacijama koje se mogu podeliti u logičke module (kao što su obrada upravljačkog segmenta i segmenta podataka u ruteru), ili možda kada je povećan nivo bezbednosti potreban na nekim procesorima (uređaji su dodeljeni procesorima, tako da IO veze i sigurne aplikacije mogu biti razdvojene pomoću MMU). Osim toga, potpuno drugačiji OS-i mogu biti učitani na CPU-e tako da ćete možda želeti mešavinu Linuxa i različitih izrada VxWorks-a.
AMP takođe pomaže pri nadogradnji starih sistema objedinjavanjem više ploča na jednoj ploči. Dizajn sistema može ostati isti, a priključivanje postaje mnogo lakše, uzimajući stari program koji je radio na staroj ploči,i priključivanjem za rad na jednom od CPU u višeprocesorskom sistemu. Korišćenjem AMP, nema potrebe za spajanjem svih kodova aplikacije u jedan prostor za kod. Postojeće Ethernet veze mogu čak biti sačuvane bez promena pomoću MIPC Mrežnih Uređaja (MND).
Izgradnja AMP u VxWorks
Imate dve mogućnosti za izgradnju VxWorks slika za AMP, naime pomoću WinDriver Workbench (GUI), ili korišćenjem komandne linije. Problem sa korišćenjem Workbench je taj što za 8 procesora morate da konfigurišete osam VxWorks slika pojedinačno, a to postaje vrlo zahtevno. Umesto toga, stvorite make datoteku poput ove, u / radnom prostoru:
###############################################################################
#
# makefile for amc718 AMP builds
#
# Ed Liversidge, Harmonic Software Systems Ltd
#
# http://www.harmonicss.co.uk
#
# This makefile demonstrates how to build an AMP system for the
# Vadatech AMC718 board. This board uses an 8 core Freescale P4080 Chip
#
# From a vxWorks development shell, type make amp. VxWorks images will be copied
# into FTP_DIR
#
# for Windows hosts, fix slashes
WIND_HOME := $(subst \,/,$(WIND_HOME))
WIND_BASE := $(subst \,/,$(WIND_BASE))
WIND_USR := $(subst \,/,$(WIND_USR))
TOOL = gnu
# all vxWorks images will get copied here for pickup
FTP_DIR = C:/temp/incoming
AMP0_DIR = amc718_gnu_amp0
AMP0_PROJ = $(AMP0_DIR)/$(AMP0_DIR).wpj
AMP1_DIR = amc718_gnu_amp1
AMP1_PROJ = $(AMP1_DIR)/$(AMP1_DIR).wpj
AMP2_DIR = amc718_gnu_amp2
AMP2_PROJ = $(AMP2_DIR)/$(AMP2_DIR).wpj
AMP3_DIR = amc718_gnu_amp3
AMP3_PROJ = $(AMP3_DIR)/$(AMP3_DIR).wpj
AMP4_DIR = amc718_gnu_amp4
AMP4_PROJ = $(AMP4_DIR)/$(AMP4_DIR).wpj
AMP5_DIR = amc718_gnu_amp5
AMP5_PROJ = $(AMP5_DIR)/$(AMP5_DIR).wpj
AMP6_DIR = amc718_gnu_amp6
AMP6_PROJ = $(AMP6_DIR)/$(AMP6_DIR).wpj
AMP7_DIR = amc718_gnu_amp7
AMP7_PROJ = $(AMP7_DIR)/$(AMP7_DIR).wpj
amp: amp0 amp1 amp2 amp3 amp4 amp5 amp6 amp7
amp0:
vxprj create -force $(BSP) $(TOOL) $(AMP0_PROJ)
vxprj bundle add $(AMP0_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP0_PROJ) BUNDLE_AMP_PRI
vxprj component add $(BSP_PROJ) INCLUDE_PCI_BUS
vxprj build $(AMP0_PROJ)
cp $(AMP0_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.0
amp1:
vxprj create -force $(BSP) $(TOOL) $(AMP1_PROJ)
vxprj bundle add $(AMP1_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP1_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP1_PROJ) INCLUDE_AMP_CPU_01
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP1_PROJ) INCLUDE_WDB_SYS
vxprj build $(AMP1_PROJ)
cp $(AMP1_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.1
amp2:
vxprj create -force $(BSP) $(TOOL) $(AMP2_PROJ)
vxprj bundle add $(AMP2_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP2_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP2_PROJ) INCLUDE_AMP_CPU_02
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP2_PROJ) INCLUDE_WDB_SYS
# remove networking. No devices
vxprj component remove $(AMP2_PROJ) INCLUDE_NETWORK
vxprj build $(AMP2_PROJ)
cp $(AMP2_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.2
amp3:
vxprj create -force $(BSP) $(TOOL) $(AMP3_PROJ)
vxprj bundle add $(AMP3_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP3_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP3_PROJ) INCLUDE_AMP_CPU_03
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP3_PROJ) INCLUDE_WDB_SYS
# remove networking. No devices
vxprj component remove $(AMP3_PROJ) INCLUDE_NETWORK
vxprj build $(AMP3_PROJ)
cp $(AMP3_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.3
amp4:
vxprj create -force $(BSP) $(TOOL) $(AMP4_PROJ)
vxprj bundle add $(AMP4_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP4_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP4_PROJ) INCLUDE_AMP_CPU_04
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP4_PROJ) INCLUDE_WDB_SYS
# remove networking. No devices.
vxprj component remove $(AMP4_PROJ) INCLUDE_NETWORK
vxprj build $(AMP4_PROJ)
cp $(AMP4_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.4
amp5:
vxprj create -force $(BSP) $(TOOL) $(AMP5_PROJ)
vxprj bundle add $(AMP5_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP5_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP5_PROJ) INCLUDE_AMP_CPU_05
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP5_PROJ) INCLUDE_WDB_SYS
# remove networking. No devices.
vxprj component remove $(AMP5_PROJ) INCLUDE_NETWORK
vxprj build $(AMP5_PROJ)
cp $(AMP5_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.5
amp6:
vxprj create -force $(BSP) $(TOOL) $(AMP6_PROJ)
vxprj bundle add $(AMP6_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP6_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP6_PROJ) INCLUDE_AMP_CPU_06
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP6_PROJ) INCLUDE_WDB_SYS
# remove networking. No devices.
vxprj component remove $(AMP6_PROJ) INCLUDE_NETWORK
vxprj build $(AMP6_PROJ)
cp $(AMP6_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.6
amp7:
vxprj create -force $(BSP) $(TOOL) $(AMP7_PROJ)
vxprj bundle add $(AMP7_PROJ) BUNDLE_STANDALONE_SHELL
vxprj bundle add $(AMP7_PROJ) BUNDLE_AMP_SEC
vxprj component add $(AMP7_PROJ) INCLUDE_AMP_CPU_07
# need to remove INCLUDE_WDB_SYS, incompatible with AMP
vxprj component remove $(AMP7_PROJ) INCLUDE_WDB_SYS
# remove networking. No devices.
vxprj component remove $(AMP7_PROJ) INCLUDE_NETWORK
vxprj build $(AMP7_PROJ)
cp $(AMP7_DIR)/default/vxWorks $(FTP_DIR)/vxWorks.7
|
Korišćenje wrload
wrload uslužni program se izvršava na komandnom okruženju VxWorks na prvom CPU (cpu0).Učitaće vxWorks sliku sa montiranim sistemom datoteke, učitaće kod i podatke na ciljanu CPU, a zatim nulu .bss segment.Otkrio sam da to može biti osetljivo na uzastopna učitavanja,tako da nameravam da stavim taskDelays između poziva. Takođe, vxWorks očekuje nekakvu vrstu linije za podizanje sistema, i ne reaguje dobro kada jedna nedostaje. Pogledajte primer u nastavku:
wrload ("-file host:/vxWorks.1 -cpu 1 -tsym \"*sysBootLine=dtsec(1,1) host:/vxWorks.1 h=192.168.1.100 e=192.168.1.51\" ");taskDelay (60);wrload ("-file host:/vxWorks.2 -cpu 2 -tsym \"*sysBootLine=dtsec(2,2) \" ");taskDelay (60);
Korišćenje 'tip' za dobijanje Komandnog okruženja na CPU
tip je nova funkcija koja se vezuje na druge CPU preko MSD (MIPC Serial Device), omogućavajući komandnom okruženju da bude uspostavljeno tamo gde ne postoji dostupna fizička redna veza. MSD veze se automatski stvaraju od strane BSS:
-> devsdrv name 0 /null 1 /tyCo/0 1 /tyCo/1 1 /ttyMsd0 1 /ttyMsd1 1 /ttyMsd2 1 /ttyMsd3 1 /ttyMsd4 1 /ttyMsd5 1 /ttyMsd6
Za spajanje na CPU1 i CPU2 (prva MSD veza, msd0, povezat će se na cpu1):
tip ("dev=/ttyMsd0", "dev=/ttyMsd1")~?[Available commands]~.: Drop connection and exit~l: List available sessions~s: Switch session~?: Print command summary
Zaključak
Nadam se da vam je ovo prikazalo svojstvo korišćenja AMP pod VxWorks 6,9. Naravno na raspolaganju smo da vam pomognemo sa vašim Multiprocessor BSPs, MIPC / MSD podešavanjem i konfiguracijom, ili da se rvemo sa zveri kao što je Freescale P4080. Samo nas kontaktirajte na sales@harmonicss.co.uk
ili kliknite na dugme navodnika 'quick'.