Grazie
Aggiunta System Calls in MINIX
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Aggiunta System Calls in MINIX
Ciao a tutti. Qualcuno sa elencarmi i passaggi completi da eseguire all'interno del kernel di MINIX 3.1.2 per poterci aggiungere delle system call funzionanti?
Grazie
Grazie
Codice: Seleziona tutto
realizzare una system call addizionale per minix
Il prototipo è
int getpids(pid_t *current_pid, pid_t *parent_pid);
Scrivere un programma di test, che verifica che la syscall funzioni. Inizialmente non compila. Il programma apre un albero di processi di 4 livelli e verifica il funzionamento di getpids() confrontando i risultati con getpid(2) e getppid(2). Per esempio:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <getpids.h>
#include <assert.h>
#include <stdio.h>
#define N 4
void assert_getpids_works(void) {
pid_t expected_me = getpid();
pid_t expected_parent = getppid();
pid_t actual_me, actual_parent;
int result = getpids(&actual_me, &actual_parent);
assert(0 == result);
assert(actual_me == expected_me);
assert(actual_parent == expected_parent);
}
main(void) {
int i;
assert_getpids_works();
for (i=0; i<N; i++) {
if (0 == fork()) {
assert_getpids_works();
return 0;
} else {
int status;
wait(&status);
}
}
printf("OK\n");
return 0;
}
Aggiungere src/include/getpids.h con il prototipo di getpids(). Installare gli header
cd src/tools
make includes
Ricompilare il prog di test. Il programma compila, ma fallisce il link.
Modificare lo header di sistema src/include/minix/callnr.h.
Aggiungere il sorgente lato userspace in lib/other/_getpids.c, usando come modello lib/posix/_getpid.c . Inizialmente deve restituire dei numeri fasulli, tipo 999. Per esempio:
#include <lib.h>
#include <getpids.h>
PUBLIC pid_t getpids(pid_t *current, pid_t *parent)
{
*current = *parent = 999;
return 0;
}
Aggiungere il nostro file a Makefile.in. Eseguire
make Makefile
make
Installare tutte le librerie
cd src/lib
make all install
Verificare che il prog di test ora compila, ma le assert falliscono
Modificare /usr/src/servers/pm/{proto.h,table.c,Makefile}
Aggiungere un file sorgente a /usr/src/servers/pm; modificare il Makefile
cd src/tools; make install
occorre modificare anche servers/fs/table.c per tener conto della nostra nuova syscall
Verificare che il programma di test ora funzioni correttamente

