Qual è la relazione tra un programma e i processi nel sistema operativo?

1

Un programma, mi riferisco a qualsiasi programma scritto in qualsiasi linguaggio di programmazione. Potrebbe essere un programma Java che ha un solo metodo per eseguire la moltiplicazione e un metodo principale esegue tale metodo di moltiplicazione. Oppure potrebbe essere un programma in Python fa la stessa cosa. Oppure potrebbe essere un programma applicativo come un client di posta elettronica, un browser Web o un'applicazione di chat o un client di gioco online.

Non sono sicuro che la domanda principale abbia senso, ma sto cercando di capire:

È corretto dire che ognuno di sopra è un programma o ci sono alcune differenze essenziali?

Quando avvio un programma, sto avviando un processo nel sistema operativo?

Un programma può avere più processi?

    
posta s-hunter 25.07.2016 - 23:14
fonte

4 risposte

6

Sebbene non ci sia un'unica fonte di verità su questi termini, penso che possiamo essere d'accordo sulla differenza fondamentale tra un programma e un processo:

  • un programma è un insieme di istruzioni destinato a raggiungere un obiettivo. È un artefatto .

    • Le istruzioni possono essere espresse in un linguaggio di alto livello leggibile dall'uomo o in un'equivalente istruzione di basso livello (compilata) in un file eseguibile.
    • La domanda riguarda i confini: ogni file di istruzioni è un programma separato? o tutti i file sono considerati come un programma? Penserei ingenuamente che il programma abbia l'idea di essere autonomo: è costituito da tutti i file di istruzioni necessari per consentire un'esecuzione indipendente.
  • un processo del sistema operativo è l'esecuzione di un programma : quindi non è solo un insieme di istruzioni, ma anche un flusso di esecuzione delle istruzioni del programma, insieme ad un contesto di esecuzione (stack, valori di variabili, risorse, ecc ...):

    • un programma può essere scritto con le istruzioni per l'utilizzo di più thread. È ancora un programma eseguito da un processo.
    • un programma può caricare ed eseguire un altro programma all'interno dello stesso processo. Quindi un processo può eseguire diversi programmi, ma in un dato momento in momenti è attivo solo uno.
    • tuttavia possono essere necessari diversi processi per lavorare insieme (wheteher se tutti questi processi eseguono / fork lo stesso programma o meno). Diversi processi / programmi che lavorano insieme sono un sistema.
    • caso speciale per le lingue interpretate: il processo OS eseguirà l'interprete (o la macchina astratta), che eseguirà a sua volta il programma.

Alcuni riferimenti

C++ ISO standard:

§3.5: A program consists of one or more translation units linked together.

§2.1 The text of the program is kept in units called source files (...). A source file together with all the headers and source files included (...) is called a translation unit

§1.9 Program execution [nothing is said about processes, the implementation is free to organize execution as bes suits the purpose]

Java 8 language specifications:

Chapter 1.1:

Chapter 12 describes activities that occur during execution of a program. A program is normally stored as binary files representing compiled classes and interfaces. These binary files can be loaded into a Java Virtual Machine, linked toother classes and interfaces, and initialized.

POSIX specifications:

3.300 Program: A prepared sequence of instructions to the system to accomplish a defined task. The term "program" in IEEE Std 1003.1-2001 encompasses applications written in the Shell Command Language, complex utility input languages (...), and high-level languages.

3.289 Process: An address space with one or more threads executing within that address space, and the required system resources for those threads.

    
risposta data 26.07.2016 - 00:32
fonte
2

Per una definizione semplice, un programma è in realtà solo un pezzo di dati che in genere vive sul disco come un file. Questi dati, ovviamente, contengono sia le codifiche delle istruzioni della cpu che i dati (come le stringhe letterali, ecc.)

Mentre un processo è un programma caricato in memoria e di solito è stato avviato. Caricare un programma in un processo di solito significa allocare uno spazio di indirizzamento e, in caso contrario, creare un contesto per il processo, caricare il codice (istruzioni codificate) e altri dati nello spazio di indirizzamento e dare al programma il tempo di CPU a partire dal main.

is it correct to say each one of above is a program or there are some essential difference among them?

In sostanza, sì.

When I start a program, am I starting a process in the operating system?

Sì.

Can a program have multiple processes?

Dipende dalle definizioni applicate, ma i programmi in questi giorni possono avere più thread ma non necessariamente processi. Tuttavia, non è insolito che qualcuno faccia riferimento a un gruppo di programmi come un singolo programma. Si potrebbe dire che tale programma è stato diviso in diversi processi (anche se ciò significa che il programma è stato diviso in più programmi (file).

    
risposta data 25.07.2016 - 23:20
fonte
1

What is the relationship between a program and processes in the Operating System?

Dipende dal programma.

Posso scrivere un programma di basso livello che non ha bisogno di un sistema operativo. In effetti è quello che è un sistema operativo. Se l'hardware supporta tutto ciò di cui ho bisogno non mi mancherà nemmeno l'os.

Se tuttavia, ho bisogno di caricare un file e non ho sistemi operativi per dare una mano, sono in cerca di un po 'di lavoro. Il sistema operativo normalmente astrae le cose che normalmente preferirei non pensare. Che tipo di controller ha l'unità? Quali comandi vengono utilizzati per indirizzare i dati? Questo non è facile senza un sistema operativo che impone un'interfaccia comune per i driver da implementare in modo da poter comunicare con tutti i controller del disco rigido allo stesso modo.

Per quanto riguarda la matematica, beh ora stavamo parlando con l'ALU, forse. Forse la CPU fa questo in modo nativo su questo hardware. Altre cose che devi sapere perché il sistema operativo non si sta prendendo cura di esso per te.

Se il programma si aspetta che un sistema operativo sia disponibile, la relazione è che il sistema operativo astrae i dettagli dell'hardware e determina quando il programma può essere eseguito (sistema operativo multithread o meno). Il sistema operativo può anche fermare a programma.

Se il programma non si aspetta un sistema operativo potrebbe essere un sistema operativo stesso. O potrebbe essere solo un programma dedicato per quell'hardware.

Se parliamo di Java, beh, c'è questa macchina virtuale che cerca di rendere tutti gli hardware e il sistema operativo uguali al programma in modo che possa funzionare su qualsiasi hardware e qualsiasi sistema operativo. Ciò astrae i dettagli in modo che il programma non debba preoccuparsi di cosa sta eseguendo.

La relazione essenziale è che i programmi hanno bisogno che le cose al di fuori di se stesse funzionino correttamente. Il sistema operativo potrebbe essere una di quelle cose.

    
risposta data 25.07.2016 - 23:32
fonte
0

È necessario un intero libro per rispondere alla tua domanda . Leggi Sistemi operativi: tre pezzi facili .

Vedi anche Sistema operativo , Processo , Spazio indirizzo virtuale , Executable , Pianificazione wikipages.

In poche parole, un programma sorgente è spesso compilato in un eseguibile (che contiene codice macchina che i processori possono eseguire e altre informazioni, vedi ad esempio ELF ). Un processo è un'istanza in esecuzione di un eseguibile. Ha il proprio spazio di indirizzamento virtuale (forse condiviso tra i vari thread di quel processo). Puoi avere diversi processi che eseguono lo stesso programma (ad esempio la mia shell Linux zsh è in esecuzione su più terminali, e quando compilo un grosso programma usando make -j per ottenere una build parallela ho diversi processi che eseguono il compilatore interno cc1plus programma avviato da g++ ). Un processo richiede le operazioni fornite dal sistema operativo kernel (ad esempio leggendo alcuni file) attraverso chiamate di sistema .

I più comuni sistemi operativi (Linux, Unix, MacOSX, Android, Windows) hanno processi come spiegato sopra. Ma alcuni sistemi operativi bizzarri hanno approcci e progetti diversi, ad es. unikernels come MirageOS , o funzionamento persistente sistemi come Grasshopper . A volte questi strani sistemi operativi (ad es. Singularity ) vogliono i linguaggi di programmazione barocchi (perché sono sistemi basati sulla lingua ) e / o hardware specifico (vedi Crash- SAFE progetto).

    
risposta data 16.12.2016 - 09:19
fonte

Leggi altre domande sui tag