Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Linguaggio C++
Forum - C/C++ - Linguaggio C++ - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 13:51
Venerdì, 22/08/2014
Testo quotato

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.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:54
Venerdì, 22/08/2014
già però se prendi in considerazione una cpu senza kernel non capisci il senso delle syscalls e del perchè dell'esistenza di X

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 14:00
Venerdì, 22/08/2014
Testo quotato

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
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:12
Venerdì, 22/08/2014
Testo quotato

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.

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 14:17
Venerdì, 22/08/2014
E nei linguaggi di programmazione simulati la filosofia è diversa?

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 18:42
Venerdì, 22/08/2014
Testo quotato

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

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:33
Venerdì, 22/08/2014
@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

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 19:50
Venerdì, 22/08/2014
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".

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo