Domanda da principiante sul Context switch

di il
17 risposte

Domanda da principiante sul Context switch

Ciao a tutti , avrei una domanda da porre ai più esperti o forse più di una . Per quanto ne so , un processo "Programma" in esecuzione che in un istante T ha il pieno controllo della CPU è segmentato in memoria in questo modo .

memory_seg.png
memory_seg.png

Ora ipotizzando che dopo un breve tempo dall'istante T , quindi T+n , "ovviamente a secondo della politica" il processo venga interrotto dallo schedulatore , e che in questo momento sempre lo schedulatore con un'apposita routine , effettua il cambio di contesto .

Le mie domande sono:

1) dove salva tutte le informazioni come i registri le variabili ecc del processo corrente ? cioè dove risiede il PCB ?
2) il nuovo processo , viene posto subito dopo lo spazio in memoria del processo precedente ? oppure no ?

Scusatemi se sono stato impreciso o forse incorretto.

17 Risposte

  • Re: Domanda da principiante sul Context switch

    BCPL ha scritto:


    Ciao a tutti , avrei una domanda da porre ai più esperti o forse più di una . Per quanto ne so , un processo "Programma" in esecuzione che in un istante...
    Quella è una architettura tipica Intel con segmenti a 32 bit, non sono tutte fatte così.
    Comunque...
    1) dove salva tutte le informazioni come i registri le variabili ecc del processo corrente ? cioè dove risiede il PCB ?
    Dove vuole, tipicamente in memoria RAM del Kernel
    2) il nuovo processo , viene posto subito dopo lo spazio in memoria del processo precedente ? oppure no ?
    Cosa significa "spazio di memoria" per te?
    Se parliamo di un sistema "normale" allora gli indirizzi sono virtuali e la memoria per lo più paginata.
  • Re: Domanda da principiante sul Context switch

    Per spazio in memoria intendo l'indizio fisico iniziale e finale del processo.
  • Re: Domanda da principiante sul Context switch

    BCPL ha scritto:


    Per spazio in memoria intendo l'indizio fisico iniziale e finale del processo.
    Quindi parliamo di un sistema operativo privo di memoria virtuale?
    Tipo Windows 3.0 per capirci? (già 3.11 si può discutere)
  • Re: Domanda da principiante sul Context switch

    Ho visto che la paginazione apporta molte migliorie , eliminando il problema della frammentazione . Ma non ho capito ( in un sistema con memoria virtuale e paginazione nel momento della commutazione di contesto) cosa viene caricato in memoria ? tutto il programma ? oppure solo un'istruzione per volta ?
  • Re: Domanda da principiante sul Context switch

    Ciao,

    il cambio di contesto é una operazione abbastanza delicata e composta da varie fasi.

    In generale quando avviene il cambio di contesto il S.O. salva tutto il contesto nel descrittore del processo un apposito registro nato proprio per questi scopi.
  • Re: Domanda da principiante sul Context switch

    BCPL ha scritto:
    Ciao a tutti , avrei una domanda da porre ai più esperti o forse più di una . Per quanto ne so , un processo "Programma" in esecuzione che in un istante...

    Quella è una architettura tipica Intel con segmenti a 32 bit, non sono tutte fatte così.
    Comunque...
    Tra l'altro, pure su x86 i segmenti possono essere riordinati in modo diverso a seconda del sistema operativo.
    il nuovo processo , viene posto subito dopo lo spazio in memoria del processo precedente ? oppure no ?
    Supponendo di non usare memoria virtuale:
    - Nella versione più semplice (allocazione contigua) il loader si occupa di trovare un "buco" in ram grande abbastanza da contenere tutto il programma (seguendo una strategia a scelta tra first-fit, best-fit o eventualmente worst-fit);
    - Complicando leggermente le cose, è possibile allocare frammenti del programma (che non sono necessariamente i segmenti in stile x86) separatamente, e registrare in una tabella dei segmenti l'associazione tra la parte alta dell'indirizzo logico e le "coordinate" del segmento in memoria (ad esempio parte alta dell'indirizzo iniziale e lunghezza);
    - Dalla versione precedente deriva la memoria paginata, dove i frammenti allocati hanno dimensioni multiple della dimensione di una pagina e al posto della tabella dei segmenti hai una tabella delle pagine che associa la parte alta dell'indirizzo logico alla parte alta degli indirizzi fisici di una pagina (in questo caso non serve conoscere la lunghezza); dal momento che la tabella delle pagine può essere molto grande (molto più di quella dei segmenti) di solito si usa un Translation Lookaside Buffer, che è sostanzialmente una piccola cache ottimizzata per effettuare questa conversione; inoltre, per ridurre le dimensioni della tabella delle pagine, solitamente la si organizza su due o più livelli, ottenendo nel caso più generale un unclustered prefix B-tree, oppure si usano altri metodi, come una tabella di hash;

    Se invece si suppone di usare memoria virtuale, nella tabella delle pagine è presente un bit di validità che indica se quella pagina è presente in ram o deve essere prelevata dal disco. Il loader in questo caso può usare varie strategie per caricare il programma, che vanno dal caricare una singola pagina contenente il codice di startup a caricare tutto il programma finché c'è spazio. Inoltre, il numero minimo di pagine che devono stare in ram per poter garantire l'esecuzione del programma dipendono dall'architettura (in alcuni casi servono almeno 17 pagine (a meno che il programma non sia più breve)).
    Una volta avviata l'esecuzione, lo swapper si occupa di gestire lo spostamento delle pagine tra ram e disco, e anche qui possono essere usate una marea di strategie diverse, per cercare di ottenere il miglior compromesso tra hit-ratio e numero di processi eseguibili contemporaneamente.
  • Re: Domanda da principiante sul Context switch

    BCPL ha scritto:


    Ho visto che la paginazione apporta molte migliorie , eliminando il problema della frammentazione . Ma non ho capito ( in un sistema con memoria virtuale e paginazione nel momento della commutazione di contesto) cosa viene caricato in memoria ? tutto il programma ? oppure solo un'istruzione per volta ?
    Caspita... davvero principiante...
    Per descrivere le politiche bisogna innanzitutto stabilire l'hardware e la modalità di funzionamento.
    Se ci si riferisce, ad esempio, al classico mondo x86 a 32 bit e Windows, tanto per capirci, oppure un "generico" SO e così via.

    La paginazione, per inciso, non c'entra nulla (o pochissimo) col problema della frammentazione, bensì con la memoria virtuale, ossia estendere la memoria che i processi "vedono" oltre la dimensione di quella fisica (=>swapping su disco).

    Anche questo, in realtà, è un argomento sempre più vecchio, che progressivamente andrà a sparire (come gli overlay, i segmenti e così via), perchè i moderni processori a 64 bit, ed il costo così modesto delle RAM sommato alla c.d. legge di Moore (ed i limiti dei dispositivi mobili che non hanno supporti di massa, o meglio non si possono usare in questo modo), farà sì che tra 5 o 10 anni saranno concetti obsoleti in (quasi) tutte le situazioni.


    Comunque per tornare al tema: così a "naso" devi leggere un bel po' ancora; se hai domande precise falle pure
  • Re: Domanda da principiante sul Context switch

    +m+ ha scritto:




    La paginazione, per inciso, non c'entra nulla (o pochissimo) col problema della frammentazione
    No.

    La paginazione risolve a priori la frammentazione. La frammentazione viene a verificarsi quando si usa una gestione della memoria in maniera segmentata con la quale, i segmenti devono essere allocati in maniera contigua. Se in maniera contigua non ho uno spazio sufficiente (esempio 1024 byte) non posso allocare il segmento anche se complessivamente avrei a disposizione i 1024 byte. Questo é appunto il problema della segmentazione, risolvibile con una operazione di compattamento che risulta peró parecchio onerosa.

    La paginazione risolve il problema della frammentazione in quanto le pagine non devono essere allocate in maniera contigua.

    Motivo per cui gli attuali sistemi operativi sono praticamente tutti gestiti con una tecnica di paginazione, nello specifico di paginazione a domanda
  • Re: Domanda da principiante sul Context switch

    @BCPL (sarebbe interessante sapere quanti hanno capito che cosa vuol dire )
    Il modo migliore per imparare qualcosa di nuovo, sopprattutto quando le domande sono decentemente tecniche come questa, NON E' fare domande su un forum di ragazzini, dove le risposte vanno dal vagamente corretto alla totale castronata, ma leggere un BUON libro di testo sull'argomento.

    Ad esempio:

    https://www.amazon.co.uk/Modern-Operating-Systems-Andrew-Tanenbaum/dp/1292061421
  • Re: Domanda da principiante sul Context switch

    migliorabile ha scritto:


    un forum di ragazzini, dove le risposte vanno dal vagamente corretto alla totale castronata
    Tu compreso?
  • Re: Domanda da principiante sul Context switch

    migliorabile ha scritto:


    @BCPL (sarebbe interessante sapere quanti hanno capito che cosa vuol dire )
    Il modo migliore per imparare qualcosa di nuovo, sopprattutto quando le domande sono decentemente tecniche come questa, NON E' fare domande su un forum di ragazzini, dove le risposte vanno dal vagamente corretto alla totale castronata, ma leggere un BUON libro di testo sull'argomento.

    Ad esempio:

    https://www.amazon.co.uk/Modern-Operating-Systems-Andrew-Tanenbaum/dp/1292061421
    In effetti non ho avuto dubbi sull'acquisto di un libro come quello da te consigliato , sto solo aspettando che mi arrivi per leggerlo .
    Volevo solo cercare di comprendere alcuni aspetti tecnici , che in rete sono trascurati per non appesantire l'argomento .
  • Re: Domanda da principiante sul Context switch

    Bomberdini ha scritto:


    +m+ ha scritto:




    La paginazione, per inciso, non c'entra nulla (o pochissimo) col problema della frammentazione
    No.

    La paginazione risolve a priori la frammentazione. La frammentazione viene a verificarsi quando si usa una gestione della memoria in maniera segmentata con la quale, i segmenti...
    Mah.
    Banalmente non è affatto scontato che esistano i segmenti.
    Quindi faccio il cuttone del resto in quanto banalmente dipendente dall'architettura, esattamente come ho scritto.
    E, da notare, un SO l'ho scritto
  • Re: Domanda da principiante sul Context switch

    migliorabile ha scritto:


    @BCPL (sarebbe interessante sapere quanti hanno capito che cosa vuol dire )
    Il modo migliore per imparare qualcosa di nuovo, sopprattutto quando le domande sono decentemente tecniche come questa, NON E' fare domande su un forum di ragazzini, dove le risposte vanno dal vagamente corretto alla totale castronata, ma leggere un BUON libro di testo sull'argomento.

    Ad esempio:

    https://www.amazon.co.uk/Modern-Operating-Systems-Andrew-Tanenbaum/dp/1292061421
    E' un classico, ma è anche vecchio ed ormai per lo più obsoleto.

    Ma facciamo un passo indietro: qual'è lo scopo del thread?
    In generale conoscere l'architettura di un SO in generale (ne esistono 100 tipi diversi), di un SO in particolare (Winzozz?), di un SO su un'architettura qualsiasi (ne esistono 1000), di un SO particolare (Winzozz) su un'architettura particolare (es. x86)?

    Diciamo che partire "lancia in resta" supponendo che quello che si applica per un'evoluzione della mitica memoria segmentata 8086, evoluta a 32 e poi addirittura a 64 bit, è "il mondo intero" è un pochino riduttivo.

    Ad esempio nella famiglia Motorola 68K (* in realtà qui ci andrebbero precisazioni che risparmi dalla versione -60 in poi) i segmenti non ci sono, punto e basta, e la paginazione è stata introdotta successivamente (nei modelli più evoluti).

    Ecco pertanto che si può parlare in termini generali, o particolari, ma senza ingenerare confusione nei "ragazzini" (cit)
  • Re: Domanda da principiante sul Context switch

    +m+ ha scritto:


    Mah.
    Banalmente non è affatto scontato che esistano i segmenti.
    Quindi faccio il cuttone del resto in quanto banalmente dipendente dall'architettura, esattamente come ho scritto.
    E, da notare, un SO l'ho scritto
    Ok è evidente che non sai di cosa stai parlando già leggere che la paginazione non è collegata alla frammentazione meriterebbe il Ban e oscuramento del post
Devi accedere o registrarti per scrivere nel forum
17 risposte