next up previous contents index return to home!
Next: Note generali su Unix Up: Introduzione Previous: Concetti Fondamentali   Indice   Indice analitico

Supporto di Sistema

Come noto, il sistema operativo è il programma che si occupa di gestire le risorse hardware della macchina, ivi comprese anche la CPU e la memoria (fisica e virtuale). Quindi, il sistema operativo deve fornire anche un supporto (più o meno esteso) alla concorrenza: per poter creare processi o thread, per sincronizzarli e per farli comunicare, il programma deve richiedere tali funzioni al sistema operativo, tramite specifiche chiamate di sistema, o system call (brevemente, syscall).

Spesso, l'insieme delle syscall esportate dal sistema operativo, detto anche interfaccia, o più propriamente Application Programming Interface (API), risulta essere troppo di basso livello per essere utilizzabile in maniera semplice dall'utente. Per questo motivo, vengono talvolta fornite delle librerie che implementano funzionalità di più alto livello basandosi sulle chiamate di sistema. Tipicamente, una libreria mette a disposizione delle chiamate di libreria (library call, o più brevemente libcall) che esportano un'interfaccia più potente e semplice da usare rispetto a quella fornita dalle chiamate di sistema. Bisogna però tenere presente che una chiamata di libreria eseguirà del codice di libreria in modo utente, e poi eventualmente chiamerà una o più syscall che eseguiranno in modo kernel.

Un tipico esempio per chiarire quanto appena detto è costituito dalla libreria standard del linguaggio C (libc): fra le altre cose, essa implementa gli stream di I/O, fornendo un modo semplice e potente per accedere ai file. Un file può essere aperto tramite la libcall fopen() e può essere acceduto in scrittura tramite la libcall fprintf(), che permette di scrivere numeri e stringhe effettuando automaticamente la conversione di formato. Tali funzioni si basano su alcune chiamate di sistema, che in sistemi Unix sono open() e write(), le quali permettono un accesso al file senza bufferizzazione dello stream e senza conversione di formato. Un utente può indifferentemente scegliere di accedere ad un file tramite le chiamate di sistema o le chiamate della libc, ma deve sempre sapere cosa sta facendo (e cosa la propria scelta implica), in quanto i due tipi di accesso non possono essere arbitrariamente mescolati (per esempio, non si può - chiaramente - effettuare una fprintf() su un file aperto con open()).


next up previous contents index
Next: Note generali su Unix Up: Introduzione Previous: Concetti Fondamentali   Indice   Indice analitico
Giuseppe Lipari 2002-10-27