Fork, schedulazione e priorità.... su quale processo?
-
SoldatoSemplice
- Prode Principiante
- Messaggi: 63
- Iscrizione: martedì 11 dicembre 2007, 12:03
Fork, schedulazione e priorità.... su quale processo?
Ciao a tutti, ho da poco comprato un manuale che tratta la programmazione esclusivamente in Linux dove spiega i prototipi di tre funzioni che mi interessano particolarmente:
La fork() per clonare un processo e la relativa execve per assegnarli un nuovo esecutivo, la schedulazione e la routine per modificare priorità e cortesia di un processo, il bello è che sul manuale è spiegato per bene il prototipo con le librerie da includere in un codice C, solo che non ho capito/non spiega bene come si fa ad assegnare la fork ad un determinato processo, in pratica se io ho nella mia process table tipo 4 o 5 processi con relativi PID come faccio ad usare una fork per clonare ad esempio il terzo o il quarto? In pratica come faccio ad assegnare la fork o la SetPriority ad un processo che scelgo io?
Grazie dell'aiuto
Ciao
Leo
La fork() per clonare un processo e la relativa execve per assegnarli un nuovo esecutivo, la schedulazione e la routine per modificare priorità e cortesia di un processo, il bello è che sul manuale è spiegato per bene il prototipo con le librerie da includere in un codice C, solo che non ho capito/non spiega bene come si fa ad assegnare la fork ad un determinato processo, in pratica se io ho nella mia process table tipo 4 o 5 processi con relativi PID come faccio ad usare una fork per clonare ad esempio il terzo o il quarto? In pratica come faccio ad assegnare la fork o la SetPriority ad un processo che scelgo io?
Grazie dell'aiuto
Ciao
Leo
- mous16
- Imperturbabile Insigne

- Messaggi: 3940
- Iscrizione: mercoledì 25 ottobre 2006, 15:51
- Sesso: Maschile
Re: Fork, schedulazione e priorità.... su quale processo?
non so se si può fare su dei processi preesistenti: l'unico utilizzo che conosco di fork è se uno scrive un codice come il seguente:
Così facendo cloni il processo padre, e hai due processi con due copie della variabile a. se nel figlio (o nel padre) esegui una exec, perdi tutti i dati clonati dal padre e li sostituisci con quelli del nuovo processo che lanci
Codice: Seleziona tutto
int main(argv, argc[])
{
int a;
pid_t pid=0;
pid=fork()
if(pid)
{
/*codice del figlio con eventuale exec*/
}
else
{
/*codice del padre*/
}
return 0;
}Re: Fork, schedulazione e priorità.... su quale processo?
Anche a me risulta che ogni processo possa fare solo una fork di se stesso.
-
SoldatoSemplice
- Prode Principiante
- Messaggi: 63
- Iscrizione: martedì 11 dicembre 2007, 12:03
Re: Fork, schedulazione e priorità.... su quale processo?
Si è giusto, ma metti caso che io faccio un programma che ha tre diversi processi: magari uno fà una stampa sullo standard output, un altro legge dalla seriale e un'altro scrive su un file con fprintf, e io voglio tipo modificare la posizione di uno dei tre nello schedulatore o modificare la priorita ad esempio di quello che legge dalla seriale in una priorità più alta, come faccio a distinguere una volta che mi trovo dentro il mio eseguibile dove fare la fork o la SetPriority per aumentare la priorità del lettore della seriale?
Spero di essermi spiegato, in pratica come discrimino i processi?
Ah aspetta mi pareva di averlo letto; secondo voi potrebbe essere una cosa del genere: Uso GetPid e GetPPID per ottenere PID e PID del padre del processo che legge la seriale e poi agganciandomi al suo PID gli aumento la priorità o lo forko, potrebbe essere?
Al momento non ho esempi, ma anche qualora fosse così sorge un altro dubbio, come riesco a scoprire il PID del processo che legge la seriale? In pratica io Con GetPid ottengo il PID di uno dei processo ma come discrimino se è il processo che legge?
Quando apro la porta seriale con
percaso il nome del processo che genero coincide con il descrittore del file, cioè fd?
Spero di essermi spiegato, in pratica come discrimino i processi?
Ah aspetta mi pareva di averlo letto; secondo voi potrebbe essere una cosa del genere: Uso GetPid e GetPPID per ottenere PID e PID del padre del processo che legge la seriale e poi agganciandomi al suo PID gli aumento la priorità o lo forko, potrebbe essere?
Al momento non ho esempi, ma anche qualora fosse così sorge un altro dubbio, come riesco a scoprire il PID del processo che legge la seriale? In pratica io Con GetPid ottengo il PID di uno dei processo ma come discrimino se è il processo che legge?
Quando apro la porta seriale con
Codice: Seleziona tutto
fd = open("/dev/ttyS0"......percaso il nome del processo che genero coincide con il descrittore del file, cioè fd?
- mous16
- Imperturbabile Insigne

- Messaggi: 3940
- Iscrizione: mercoledì 25 ottobre 2006, 15:51
- Sesso: Maschile
Re: Fork, schedulazione e priorità.... su quale processo?
allora non so come aumentare la priorità di un processo, però tieni conto che:
1) i processi su linux si identificano per PID (Proces IDentifier). per ottenere il pid di un processo ci sono vari modi, di cui l'unico che so usare è il fork stesso. ecco il prototipo della fork:Notare che ritorna un valore di tipo pid_t 8che poi non è altro che una define su un int). Dopo la fork, ci sono due processi: nel padre la fork ritorna il PID del figlio appena creato, mentre nel figlio ritorna 0. Ovviamente esistono anche altri modi per ottenere il PID di un processo.
2) per aprire le porte seriali le istruzioni sono un pochino più complesse, ma l'idea è quella.
Se ti interessa contattami in privato, che ti mando il sorgente di un programmino che avevo scritto che tratta proprio di seriali e fork!
1) i processi su linux si identificano per PID (Proces IDentifier). per ottenere il pid di un processo ci sono vari modi, di cui l'unico che so usare è il fork stesso. ecco il prototipo della fork:
Codice: Seleziona tutto
pid_t fork(void);2) per aprire le porte seriali le istruzioni sono un pochino più complesse, ma l'idea è quella.
Se ti interessa contattami in privato, che ti mando il sorgente di un programmino che avevo scritto che tratta proprio di seriali e fork!
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti