/*************************************************************************
* *
* 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