Pianificazione Pthread (Sistema e processo)

5

Ho letto i concetti del sistema operativo dell'ottava edizione scritta da abraham silberschatz. Tuttavia, non capisco la programmazione di Pthread.

  • Libreria di thread pianifica thread a livello utente su LWP (processo leggero).

    This is Process-Contention Scope(PCS) because contention occurs between threads belonging to the same process.

  • OS pianifica i thread del kernel sulla CPU.

    This is System-Contention Scope(SCS) because contention occurs between all threads belonging to the system.

Ho pensato che PCS corrisponda a thread a livello utente e SCS corrisponda a thread a livello kernel.

Ma il codice seguente sta impostando la modalità thread come modalità utente.

pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

Non capisco perché sia la modalità utente, non la modalità kernel. Per favore Qualcuno a conoscenza di questo fammi sapere, grazie per la lettura.

    
posta Danny_Kim 28.10.2015 - 20:20
fonte

1 risposta

3

Penso che tu stia confondendo spazio inter-processo (utente), thread di processi e spazio di sistema. Quindi iniziamo con alcune definizioni.

I thread appartengono a un processo. Un processo può essere eseguito all'interno dello spazio utente e dello spazio di sistema. A quale spazio un processo appartiene è una funzione di come viene invocato.

Lo spazio del sistema tende ad essere il livello più basso ed è dove vengono eseguiti i processi protetti o del kernel. In genere, sono di proprietà del sistema stesso.

Lo spazio dell'utente tende ad essere di livello superiore e ha processi meno privilegiati.

I thread di spazio tra processi (utente) possono essere pensati come thread appartenenti a processi separati.

I thread intraprocess possono essere pensati come thread appartenenti a un singolo processo. E quel processo potrebbe essere in esecuzione nello spazio utente o di sistema.

Quindi quando chiami:

pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

Ciò che stai realmente facendo è spostare il thread dall'essere parte del resto del processo di chiamata e spostarlo nello spazio utente. Effettivamente rende il thread un nuovo processo ed equivale a fork , ma non sono positivo su quell'aspetto quindi non citarlo su di esso.

Penso che la tua confusione derivi dalla porzione _SYSTEM di quella definizione. Tuttavia, un sistema operativo non vorrebbe necessariamente che un processo fosse in grado di passare dallo spazio utente allo spazio di sistema in quanto ciò potrebbe portare a un'escalation di privilegi indesiderati per quel processo. Il kernel giustamente non si fida dei processi dello spazio utente come sono stati storicamente dimostrati essere spazzatura (dal punto di vista del kernel).

Detto in un altro modo, quella chiamata pthread_attr_setscope non ti consente di passare da PCS a SCS.

La pagina man è semi-utile per comprendere questo.

PTHREAD_SCOPE_SYSTEM
The thread competes for resources with all other threads in all processes on the system that are in the same scheduling allocation domain (a group of one or more processors). PTHREAD_SCOPE_SYSTEM threads are scheduled relative to one another according to their scheduling policy and priority.

enfasi aggiunta

Si noti la clausola finale nella parte I enfatizzata: " che si trovano nello stesso dominio di allocazione di schedulazione ". E nota anche che non fa menzione di essere in grado di passare a un dominio di allocazione di schedulazione diverso.

    
risposta data 29.10.2015 - 16:24
fonte

Leggi altre domande sui tag