Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Asimetrični Multi Processing (AMP) pomoću VxWorks 6,9

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'.





Published (Last edited): 28-04-2013 , source: http://www.harmonicss.co.uk/index.php/tutorials/tutorial-vxworks/86?task=view