|
|
09 Aprile 2020 |
Postato da: AMG_Novice_Usr |
Programmazione su Amiga mediante processi concorrenti o threads |
|
Buongiorno a tutti,
vorrei avere da voi un parere su una questione di programmazione.
Mi sto dilettando, con velleità del tutto ludico-didattiche, a fare qualche programmino su Linux, per essere precisi su Raspberry PI 3,
quindi la distro è Raspbian (flavour di Debian), e la mia curiosità è la seguente: è possibile su Amiga fare le stesse cose, magari sempre
in C, oppure in Basic
non so. Al di là del linguaggio, mi interessa sapere se/come poter implementare lo stesso funzionamento.
Entriamo un po' più nel dettaglio:
date un'occhiata ai seguenti due links (nel primo ci metto il file C sorgente da compilare con GCC da riga di comando, il secondo
link è soltanto l'eseguibile.exe già compilato, lo metto solo se qualcuno volesse prima provarlo, su un Raspberry):
https://drive.google.com/file/d/12plXZBq4FHia MpMXoWE98020cTWx_P9t/view
https://drive.google.com/file/d/1d6ZRaa30-Z5F mZIsW-ui8SnKvrIs3COL/view
Come potere vedere, faccio delle cose molto semplici, ovvero chiamo una fork, dopo la quale avrò, a run-time, un processo padre
ed un processo figlio 1, e poi una seconda fork, da cui il processo padre ed un processo figlio 2, quindi abbiamo 3 processi, con 3
PID diversi, 3 processi concorrenti (stessa priorità? non so
eventualmente in Linux come si fa ad assegnare la priorità ad un
processo?).
Ciascuno di questi 3 processi incrementa un contatore "accessi", stampa a video il valore corrente del suo contatore, esegue la
stessa stampa su un file.txt.
I 3 processi devono essere sincronizzati tramite un semaforo, il quale viene creato grazie alla memoria condivisa (libreria shm.h):
un byte di shared memory viene creato e messo a disposizione di tutti e 3 i processi, quindi questi si sincronizzano fra di loro
leggendo da/scrivendo su questo semaforo fatto in casa.
La sincronizzazione è importante per consentire un accesso alternato/ordinato sia allo standard-output (il video della shell) sia
al file.txt.
Processo Padre: contatore = 1
Processo figlio1: contatore = 1
Processo figlio2: contatore = 1
Processo Padre: contatore = 2
Processo figlio1: contatore = 2
Processo figlio2: contatore = 2
Processo Padre: contatore = 3
Processo figlio1: contatore = 3
Processo figlio2: contatore = 3
ecc...
fino a 10
Non ci devono essere intrecciamenti, battimenti, casini diciamo
il sincronismo deve dare questo risultato, sia a video che sul file.txt.
In effetti tutto funziona perfettamente (provate
potete GCC-compilare il sorgente su qualunque piattaforma che abbia Linux).
La mia domanda quindi è:
vorrei fare la stessa cosa su Amiga. Come fare?
Amiga è un sistema multi-tasking, quindi mi aspetto di poter anche qui far fare una fork ad AmigaOS e gestire in modo sincronizzato
dei processi, esattamente come fatto con Linux.
Vorrei inoltre che mi suggeriate degli ambienti in cui sviluppare, possibilmente in C, queste cose.
Avevo sentito parlare di Lattice C, ovvero un compilatore (4 floppy disk) per C su Amiga.
è disponibile qualcosa del genere, magari che si possa installare su HDD di un Amiga 1200?
Ci sono alternative?
Grazie
|
|
|
|