home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / GianuzziV / SysOp / esame97 / note_eserc_1.txt < prev    next >
Text File  |  1997-12-02  |  4KB  |  98 lines

  1.  
  2. PRIMA ESERCITAZIONE LABORATORIO III (1997/98)
  3.  
  4. Suggerimenti per l'inserimento di una nuova funzione di MINIX.
  5.  
  6. Per inserire una nuova funzione occorre lavorare su due livelli:
  7.  
  8. 1. Compilazione di un programma contenente la nuova funzione
  9.    (ad esempio "new()").
  10.    Il compilatore cerca i riferimenti a funzioni non definite
  11.    dall'utente (ad esempio printf) in librerie di sistema.
  12.    Per sapere quali sono queste librerie si puo' compilare un 
  13.    programmino di prova con l'opzione "verbose".
  14.       
  15. 2. Implementazione della funzione nel sistema MINIX.
  16.    
  17. Per il primo punto, sappiamo che MINIX espande, attraverso
  18. funzioni di libreria, una chiamata di sistema (ad esempio
  19. getpid()) nella sequenza:
  20.   * prepara il messaggio usando i parametri di chiamata ed
  21.     altre informazioni necessarie
  22.   * chiama la funzione interna di MINIX
  23.     sendrec(server, codice_funzione, puntatore_messaggio).
  24.     Nel caso getpid avremo sendrec(MM, GETPID, &m).
  25.     GETPID e' un numero intero che servira' al server MM per
  26.     individuare la funzione richiesta.
  27.   * riconverte i valori di ritorno del messaggio in parametri
  28.     di ritorno della funzione.
  29.  
  30. Per ogni funzione di minix per utenti ci sara' quindi una
  31. funzione di conversione che implementa quanto detto sopra.
  32. Per aggiungere una funzione occorrera' anche definire il
  33. corrispondente codice_funzione, che deve essere un numero
  34. non gia' utilizzato.
  35.  
  36. Per il secondo punto, occorrera' inserire in MM o FS, a seconda
  37. del tipo di funzione, il codice che effettua quanto richiesto.
  38. Per rendere operativa questa seconda fase, poiche' si effettua
  39. una modifica al sistema operativo, occorre generare un nuovo
  40. "image" e quindi un nuovo floppy di bootstrap.
  41.  
  42. Un buon modo di procedere e' prendere una funzione gia' esistente
  43. e semplice, ad esempio getpid(), e vedere come e' trattata.
  44. Dopo aver visto com'e implementata getpid, inserite una nuova
  45. funzione che fa esattamente la stessa cosa.
  46.  
  47. I sorgenti delle librerie per il compilatore MINIX si trovano come
  48. sottodirectory nella directory /usr/src/lib.
  49. In tale directory si trova anche il Makefile che serve per generare
  50. le librerie stesse (una libreria e' una collezione di funzioni
  51. precopilate, unite fra loro dal programma di archiviazione "aal").
  52. Il nome di una libreria e' "lib*.a".
  53. Sono definiti tre target: all, install e clean.
  54. Leggete attentamente sia all che install (sevono entrambi).
  55. Consiglio: togliete il comando rm *.o se non volete ricompilare 
  56. tutte le funzioni ogni volta che fate una modifica e ricordatevi
  57. di impostare la data quando bootstrappate.
  58. I file di include si trovano in /usr/include.
  59. I sorgenti del kernel e dei server di MINIX si trovano in 
  60. /usr/src/kernel, /usr/src/mm, /usr/src/fs.
  61.  
  62. Attenzione: MINIX mette a disposizione anche la shell "tcsh" piu'
  63. evoluta di "sh" e piu' comoda. Il suo funzionamento non e' pero'
  64. sempre corretto, ad esempio non richiama la shell "sh" per
  65. interpretare gli script che iniziano con #!/bin/sh.
  66.  
  67.  
  68.  
  69. COME "COSTRUIRE" UN FLOPPY BOOSTRAP DI MINIX
  70.  
  71. Il sistema operativo minix e' un unico eseguibile (chiamato image) costruito
  72. unendo insieme diversi eseguibili, fra i quali:
  73. /usr/src/kernel/kernel     
  74. /usr/src/fs/fs
  75. /usr/src/fs/mm
  76. ........
  77.  
  78. Il file /usr/src/tools/Makefile contiene uno script per make che "dirige"
  79. la costruzione di image.
  80.  
  81. Il target "programs" richiama make con
  82. /usr/src/kernel/Makefile
  83. /usr/src/fs/Makefile
  84. /usr/src/mm/Makefile
  85. .......
  86. che costruiscono rispettivamente gli eseguibili kernel, fs e mm.
  87. Infine esegue il target "image", che unisce gli eseguibili nell'unico
  88. file image.
  89.  
  90. Il file /usr/src/tools/mkboot contiene uno script per la shell sh che partendo
  91. da image consente di costruire un floppy di bootstrap, dando come parametri
  92. "fdboot /dev/fd0" (ovviamente occorre inserire un floppy formattato solo
  93. hardware in A).
  94.  
  95. Ricordo che nel comando make con il flag -n ottenete la sequenza di comandi
  96. che make attiverebbe, senza l'esecuzione degli stessi.
  97.  
  98.