Dove si trova il confine tra un linguaggio di programmazione e il sistema operativo stesso

0

Quando un programma è compilato, il codice finisce come istruzioni che possono essere eseguite dal processore. Quando per esempio viene compilato un programma C che scrive i dati in un file, quale codice è nel file eseguibile, è solo il codice che chiama la scrittura del sistema operativo? Ho visto la domanda comparabile che si riferisce all'uso di framework nel sistema operativo, considero l'utilizzo di framework un livello troppo alto, voglio sapere più specifico al livello inferiore.

    
posta iArnold 01.05.2017 - 19:37
fonte

5 risposte

1

Sì, è solo un codice che dice "fai una scrittura".

Di solito c'è il codice per scrivere file, comunicare con la rete, lo schermo ecc. all'interno del sistema operativo, quindi sarebbe una perdita di tempo riprogrammare quei servizi nello spazio utente (e il kernel probabilmente non ti permetterebbe nemmeno di ). L'interfaccia tra lo spazio di utilizzo e il sistema operativo è in genere un'API strettamente definita costituita da chiamate di sistema che eseguono routine predefinite nel kernel.

    
risposta data 01.05.2017 - 19:44
fonte
1

Meno riguarda la programmazione del linguaggio e del sistema operativo. Si tratta più delle funzioni dello spazio utente e delle funzioni a livello di sistema operativo.

I programmi utente hanno funzioni di spazio utente.
Le funzioni dello spazio utente chiamano le funzioni a livello di sistema operativo per eseguire attività specifiche del sistema operativo.

Un programma C che vuole scrivere su un file finirà per chiamare una o più funzioni a livello di sistema operativo per fare il vero lavoro.

Un programma Python che vuole scrivere su un file molto probabilmente finirà per chiamare le stesse funzioni a livello di sistema operativo per fare il vero lavoro.

    
risposta data 01.05.2017 - 19:53
fonte
0

Un sistema operativo presenta essenzialmente un'API ai programmi, su come fare le cose molto nello stesso modo in cui la maggior parte dei programmi ha una libreria runtime standard in modo da non dover codificare tutto da soli. Questo in genere include cose come convertire una stringa di cifre in un numero intero e così via.

Nel mondo Unix il termine "chiamata di sistema" è usato per invocare un metodo in questa API. Esistono molti, in genere nella lettura e nella scrittura di file, nella lettura dell'input dell'utente, nella stampa di stringhe per l'utente, nella lettura dell'orologio del computer e nell'accesso sicuro e corretto all'hardware in modo da avere l'illusione che il programma sia avviato, fare cose, e alla fine, senza dover sapere che anche altri programmi vengono eseguiti, la CPU esegue a turno eseguendoli, possono anche scrivere file mentre fa il programma, ecc.

Il linguaggio di programmazione "più vicino" a Unix sarebbe C. Se vuoi lavorare con la programmazione a basso livello, è un buon linguaggio per farlo.

    
risposta data 01.05.2017 - 20:56
fonte
0

Sui processori moderni, le istruzioni della CPU che eseguono o avviano input / output sono privilegiate; inoltre, gli indirizzi di memoria fisica su cui i dispositivi sono mappati sono protetti (in questo caso dal sistema operativo). Inoltre, sono anche privilegiate le capacità di gestione degli interrupt (utilizzate dai dispositivi per segnalare al processore che i dati e / o il dispositivo sono pronti per ulteriori I / O).

Le istruzioni privilegiate, gli indirizzi di memoria e i gestori di interrupt non possono essere eseguiti nel processo in modalità utente che esegue l'applicazione. Pertanto, l'applicazione può solo richiedere l'operazione di I / O dal sistema operativo, di solito tramite una chiamata di sistema, o qualche forma di richiesta sicura nel sistema operativo per accedere alle risorse privilegiate.

Generalmente ci saranno librerie su entrambi i lati della chiamata di sistema. Nell'applicazione in modalità utente, ci saranno alcune librerie di lingua e runtime che eseguono la formattazione e la serializzazione di contenuti che in definitiva invocano le routine del sistema operativo tramite un privilegiato & meccanismo di chiamata protetto (sistema). Il sistema operativo avrà una serie di routine che rispondono alle richieste dell'applicazione e in definitiva accedono al dispositivo.

Tipicamente per un programma C per eseguire una scrittura, che è compiuto nel codice sorgente chiamando una routine di libreria, così il compilatore compila quella chiamata di funzione di alto livello (la scrittura) in una chiamata di funzione di codice macchina, praticamente proprio come la traduzione / compilazione di qualsiasi altra chiamata di funzione.

La chiamata alla funzione si collega a una routine di libreria che alla fine effettua una chiamata di sistema o una richiesta privilegiata nel sistema operativo. Queste stesse librerie sono talvolta scritte in linguaggio assembly (parte in) in modo che possano usare il meccanismo di chiamata di sistema, che di solito è alcune istruzioni speciali del processore che i compilatori normalmente non generano. (Alcuni sistemi dispongono di compilatori C con estensioni che consentono loro di effettuare chiamate di sistema senza bisogno di linguaggio di assemblaggio.)

    
risposta data 01.05.2017 - 21:04
fonte
0

Dipende molto da quale sistema operativo e da quale lingua stai parlando. Altre risposte hanno esplorato ciò che questo significa per sistemi di consumo comuni (ad esempio sistemi operativi Windows o Unix), ma ci sono alcune alternative interessanti là fuori. Alcuni sistemi operativi, ad esempio, sono scritti in modo tale che possono solo eseguire programmi scritti in una lingua specifica . In questo caso, la lingua è effettivamente parte del sistema operativo e non esiste un confine tra i due. Il più recente sistema di questo tipo era Microsoft's Singularity OS che utilizzava una versione modificata di C # come lingua integrata. I vecchi sistemi basati su UCSD p-Code (un'implementazione della macchina virtuale del linguaggio Pascal) hanno anche sfocato i confini in modo simile.

    
risposta data 02.05.2017 - 02:04
fonte

Leggi altre domande sui tag