Sto leggendo i sistemi operativi moderni di Tanenbaum e non riesco davvero a cogliere il seguente concetto: come fa un programma a fare una chiamata di sistema? Voglio dire, ho le nozioni di base (correggimi se sbaglio): il SO è solo un altro programma in esecuzione sulla macchina (la differenza è che può essere eseguito in modalità kernel avendo accesso completo all'hardware della macchina) e quando il programma di un utente desidera avere una sorta di funzionalità avanzata fornita dal sistema operativo, prova a farlo passare attraverso una chiamata di sistema al sistema operativo stesso, scrivendo il tipo e i parametri della chiamata sul proprio stack e effettuando una chiamata trap. Ora, ho capito, ma la domanda è, come fa un programma a sapere che, diciamo, la chiamata "read" su Unix è identificata dalla chiamata "ReadFile" sull'API Win32? Ad esempio, in un programma scritto in C, questa informazione è nota al compilatore? E diciamo che in futuro un nuovo OS introdurrà la chiamata di sistema "foo", che fa esattamente la stessa cosa della "lettura" di Unix ... Beh, come lo saprebbe un programma dell'utente?