supconst.h


/*************************************************************************
*                                                                        *
*   Header: supconst.h                                                   *
*                                                                        *
*   realizzato dal Gruppo 17 di Lab2 Anno Accademico 1995/96             *
*                                                                        *
*   Lorenzo     Claudio       Valerio    Riccardo    Emiliano            *
*   Coronati    Lanconelli    Paolini    Solmi       Trentini            *
*                                                                        *
**************************************************************************/

#ifndef _SUPCONST_H
#define _SUPCONST_H

#include "../h/const.h"
#include "../h/nucconst.h"

#ifdef  THR_DENY
typedef int thr_t;
#else
#include "../h/thrqueue.h"
#endif

#ifdef  SUP_DEBUG
#undef  HIDDEN
#define HIDDEN
#endif

/* servizi forniti da S.S.T. */
enum sst_service {
    TERMREAD=1, /* legge da terminale */
    TERMWRITE,  /* scrive su terminale */
    DELAY,      /* ritarda */
    TERMINATE,  /* termina il t-process */
    GETTID,     /* ottiene l'indirizzo del thread principale del t-process */
    DISKGET,    /* legge dal disco */
    DISKPUT     /* scrive sul disco */
};

/* chiamate di sistema */
enum sup_syscall {
    V_MSGSEND=3,    /* spedisce messaggio (sincrona) */
    V_MSGRECV,  /* riceve messaggio */
    V_MSGREPLY, /* conferma ricezione messaggio */
    V_MSGRR     /* riceve e conferma ricezione messaggio */
};

#define VMSGSEND()  SYS3()
#define VMSGRECV()  SYS4()
#define VMSGREPLY() SYS5()
#define VMSGRR()    SYS6()

/* macro per accedere ai registri dei device */
#define DEVBASE(num)    ( ((devreg_t *)BEGINDEVREG) + (num) )
#define TERMINAL(num)   ( ((devreg_t *)BEGINDEVREG) + TERM0 + (num) )
#define PRINTER(num)    ( ((devreg_t *)BEGINDEVREG) + PRINT0 + (num) )
#define DISK(num)       ( ((devreg_t *)BEGINDEVREG) + DISK0 + (num) )
#define DRUM(num)       ( ((devreg_t *)BEGINDEVREG) + DRUM0 + (num) )

#define MAXTPROC    5

#define MAXTIMEQ    MAXTPROC
#define MAXDISKQ    MAXTPROC

/* VBUFNO definisce il numero di buffers per ogni T-process utilizzati dalle
 * funzioni di gestione dei Vmessaggi. Configurare con il numero max di 
 * messaggi CONTEMPORANEI che si pensano siano diretti al di fuori del
 * T-process. Cio` equivale al numero di thread del T-process che sono abilitati
 * a fare delle VSend a thread di altri T-process. Allo stato attuale e` solo
 * il main thread (o user thread). */
#define VBUFNO      1
#define VQUEUENO    5

#define MAXMSGLEN   128             /* lunghezza massima di un messaggio */

#define NOSEGS      4               /* numero di segmenti */
#define NOPAGES     32              /* numero di pagine per segmento */

#define SUP0SEG     0               /* support level segment 0 */
#define SUP1SEG     1               /* support level segment 1 */
#define PRIVSEG     2               /* user private segment */
#define SHARSEG     3               /* user shared segment */

/* flag dei permessi di accesso al segmento */
#define NONE        0
#define READ        1
#define WRITE       2
#define EXEC        4

/* inizio dello spazio di indirizzamento dello user thread del t-process */
#define BEGPRIVSEG      (NOPAGES * PAGESIZE * PRIVSEG)
#define BEGSHARSEG      (NOPAGES * PAGESIZE * SHARSEG)
#define BEGUSERADDR     BEGPRIVSEG
#define BOOTSIZE        40

/* numero massimo di pagine fisiche a disposizione dei T-process */
#ifdef  TEST_PAGING
#define MAXFRAMES       10
#else
#define MAXFRAMES       80
#endif

/* definendo MINFREEPAGES a MAXFRAMES si disabilita la funzione "page stealer"
 * in caso contrario si assicura un numero minimo di pagine libere in modo
 * da contenere il numero di accessi al tamburo.
 */
#define MINFREEPAGES    MAXFRAMES
/* #define  MINFREEPAGES    1 */

/* dimensione degli stacks */
#define USRSTKSIZE      (PAGESIZE)      /* dimensione INIZIALE dello stack */
#define SSTSTKSIZE      (PAGESIZE)
#define SCTSTKSIZE      (PAGESIZE/2)
#define PRGSTKSIZE      (PAGESIZE/2)
#define MMTSTKSIZE      (PAGESIZE/2)
#define TERMSTKSIZE     (SSTSTKSIZE+SCTSTKSIZE+PRGSTKSIZE+MMTSTKSIZE)

#define TIMERSTKSIZE    (PAGESIZE/2)
#define PAGERSTKSIZE    (PAGESIZE/2)

#ifdef  DISK_ON
#define DISKSTKSIZE     (PAGESIZE/2)

#define SECTORSIZE      PAGESIZE
#endif

#endif


[INDICE CODICE]