Per favore correggimi se ho torto. Qui è la mia comprensione di segnali:Come fa un processo a sapere che ha ricevuto un segnale
Per quanto ne so, la generazione del segnale e la consegna del segnale sono 2 diversi cose. Per generare un segnale, il sistema operativo imposta semplicemente un bit in un bitarray gestito nel Controllo processo Block (PCB) del processo. Ogni bit corrisponde a un particolare segnale, e quando un bit è impostato, significa che il segnale corrispondente al bit è in sospeso.
consegna: Prima di trasferire il controllo indietro a un processo in modalità utente, il kernel controlla sempre i pendenti segnali per questo processo. Questo controllo deve avvenire nello spazio Kernel perché alcuni segnali non possono mai essere ignorati da un processo - vale a dire SIGSTOP e SIGKILL.
Questo significa che i segnali possono essere inviati a un processo solo quando il kernel sta pianificando quel processo, allocandolo CPU? Un processo può ricevere un segnale quando è effettivamente in esecuzione sulla CPU? Se è così, come è possibile, cioè come il processo arriva a sapere che un segnale è in sospeso per esso (poiché è in esecuzione in modalità Utente e non può accedere al PCB)
Dire che c'è una macchina multiprocessore e quindi c'è reale parallelismo cioè più processi vengono eseguiti contemporaneamente. Il processo P1 è in esecuzione su cpu 1 e il processo P2 sta eseguendo su cpu2 e ora il processo P2 (con privilegi sufficienti) invia un segnale per elaborare P1. Questo segnale verrà consegnato a P1 in questo momento o verrà consegnato dopo che P1 ha ceduto la CPU per qualche motivo ed è nuovamente riprogrammato in un secondo momento dal Kernel e quindi questo segnale viene consegnato per elaborare P1.
Si prega di non dire questa domanda dipende dall'implementazione. Se si trova che la risposta corretta è definita dall'implementazione, cerco risposte in Linux, FreeBSD o qualsiasi piattaforma * nix di cui si abbia conoscenza.
Grazie mille per il vostro aiuto e la pazienza :)
saluti
Lali
Ciò significa che il segnale viene consegnato solo quando è pianificato quel processo? Cosa succede se il processo è impegnativo per la CPU e attualmente è in esecuzione su cpu1 di una macchina con 2 cpus e la pianificazione non è di tipo preventivo, quindi il processo non riceverà alcun segnale anche se il processo in esecuzione su cpu2 invia un segnale (come processo su cpu1 non cede mai la cpu1)? È ? – ghayalcoder
@Graham: Perché il # 2 non dovrebbe mai essere eseguito su una macchina core 2+? – SiegeX
Scusa @SiegeX, sei corretto, quindi ho cancellato il mio commento. Mi sono confuso quando ho cercato di analizzare la frase di @Iali. –