Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Postato originariamente da TheDarkJuster:
Aggiungerei che: nei moderni computer l' hardware non è direttamente utilizzabile dalla tua applicazione: infatti l' unica applicaione che può stampare a video, leggere file su disco, scrivere ecc.... è il kernel del tuo sistema operativo. Per questa ragione esistono le syscalls: generando una syscall fai una richiesta al kernel per fargli fare qualcosa che altrimenti non puoi fare perchè il kernel te lo impedirebbe |
Estremamente giusto, il mio discorso risulta semplificativo, diciamo che se vogliamo prendere come esempio un computer che si comporta con il minimo indispensabile (come descritto nel mio post precedente) ora come ora prenderemmo un microcontrollore(se vuoi effettivamente capire il funzionamento dei calcolatori dedicati a questa categoria). Il kenel risulta necessario per motivi di sicurezza e prestazionali. |
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
già però se prendi in considerazione una cpu senza kernel non capisci il senso delle syscalls e del perchè dell'esistenza di X
|
|
ZioCrocifisso (Member)
Pro
Messaggi: 135
Iscritto: 06/03/2013
|
In che senso librerie esterne? E le chiamate di sistema?
Scusate l'ignoranza, ma lo chiedo perché nel libro che mi sono studiato non c'è nessun accenno su questo.
Magari conoscete qualche libro che in c++ spiega tutte le funzioni disponibili con qualche OS?
Anche avendo scaricato queste librerie, come faccio a studiarmele per poterle utilizzare? |
Le chiamate di sistema sono l'interfaccia che i sistemi operativi forniscono per comunicare con l'hardware, gestire i processi, ecc. I normali programmi infatti non possono comunicare con l'hardware in modo diretto come fa il kernel, ma hanno bisogno di comunicare con quest'ultimo. È possibile fare una chiamata di sistema in modo diretto solo in assembly, tuttavia gli OS forniscono delle funzioni il cui unico scopo è eseguire le syscall. Ciò può essere fatto includendo le syscalls (o meglio, i wrapper) nella libc (come su Linux) oppure in un'altra libreria (Windows). Le librerie in genere sono raccolte di codice compilato ma non linkato che può essere linkato staticamente o dinamicamente a un altro programma. Per esempio SDL fornisce varie funzioni per manipolare le finestre, la grafica, l'audio, l'input, ecc. in modo indipendente. Il codice della libreria è in parte differente per ogni piattaforma, tuttavia l'interfaccia che fornisce è sempre la stessa. Per esempio, se scrivi un programma che usa la funzione SDL_OpenWindow, potrai compilarlo in qualunque piattaforma supportata da SDL. SDL fornirà il codice di quella funzione, che sarà differente nei vari OS, ma ciò non influirà sul tuo programma perché tu stai chiamando quella funzione indipendentemente dal suo codice. Esistono tantissime librerie, che possono essere create da chiunque, per questo non le trovi sul tuo libro del C++. Un libro che insegna il C++ tratta del linguaggio in sè e al massimo della libreria standard, ma per le altre librerie devi documentarti altrove. Per esempio, per SDL: http://wiki.libsdl.org/FrontPage
@TheDarkJuster: Quelle tre funzioni non sono chiamate di sistema.
EDIT: Non avevo visto gli altri post. Ultima modifica effettuata da ZioCrocifisso il 22/08/2014 alle 14:05 |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Postato originariamente da TheDarkJuster:
già però se prendi in considerazione una cpu senza kernel non capisci il senso delle syscalls e del perchè dell'esistenza di X |
Ti riferisci alla mia affermazione <<se vuoi effettivamente capire il funzionamento dei calcolatori dedicati a questa categoria>>? Se è cosi io lo consiglio solo perché in quel caso vai a capire come tutte le parti di un computer basilare comunicano e capisci la logica che ci sta dietro il suo funzionamento, indubbiamente il passo successivo è lo studio degli elementi aggiuntivi che hanno fatto evolvere i computer. |
|
MirkoDistefano (Normal User)
Pro
Messaggi: 119
Iscritto: 10/02/2013
|
E nei linguaggi di programmazione simulati la filosofia è diversa?
|
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Postato originariamente da MirkoDistefano:
E nei linguaggi di programmazione simulati la filosofia è diversa? |
Forse intendi dire interpretati, come il Java o dotNet, le librerie sono fondamentali
If ok Then GOTO Avanza else GOTO Inizia
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
@Zio: exit è una syscall, il registro eax va a 1, e anche le altre due mi pare di ricordare che sono syscalls.
@Roby no, ho solo voluto precisare
In riferimento ai linguaggi interpretati ce ne sono di varie categorie: alcuni si basano su una CPU/macchina emulata (java ad esempio si basa su una macchina a stack) altri invece utilizzano un JIT (just in time) che trasforma uno pseudo-codice in istruzioni da far eseguire al calcolatore
|
|
ZioCrocifisso (Member)
Pro
Messaggi: 135
Iscritto: 06/03/2013
|
Nessuna lo è, nemmeno exit. O almeno, non la funzione "exit" che trovi su stdlib.h, che come suggerisce il nome fa parte dello standard ed è presente ovunque, a differenza dei wrapper per le syscalls di Linux. Secondo te quando chiami quella funzione su Windows chiama la syscall exit di Linux? E secondo te esistono syscalls come "atexit", visto che exit è influenzato da tale funzione? La syscall exit esiste ma non c'è un wrapper diretto su glibc e anche se ci fosse non potrebbe chiamarsi "exit" visto che come ho detto esiste già quella di stdlib che non c'entra nulla. Nemmeno "_exit" è un vero e proprio wrapper perché compie altre operazioni. E riguardo a "printf" e "scanf", sarebbe semplicemente assurdo che il kernel Linux fornisse funzioni del genere. Per la lista delle syscalls su Linux, "man 2 syscalls".
|
|