/media/sda-magnetic/david/Dok-15-2023-11-27/informatik/betriebssysteme/minix.txt


Es gibt quasi die Ordner

1.) kernel
2.) mm
3.) fs

Daneben gibt es

1.) h
2.) kernel
3.) mm
4.) fs

Es gibt immer die

1.) const.h
2.) main.c bis auf in h/

1.) h/const.h
2.) kernel/const.h
3.) mm/const.h
4.) fs/const.h

h/type.h

struct mem_map {
        vir_clicks mem_vir;
        phys_clicks mem_phys;
        vir_clicks mem_len;
};

kernel/const.h

#define ES_REG      7
#define DS_REG      8
#define CS_REG      9
#define SS_REG      10

kernel/proc.h

EXTERN struct proc {
    int p_reg [NR_REGS];
    ...
    struct mem_map p_map [NR_SEGS];
    ...
} proc[NR_TASKS+NR_PROCS]

Genauer:

EXTERN struct proc {
    int p_reg [NR_REGS];
    ...
    int p_id;
    ...
    struct mem_map p_map [NR_SEGS];
    ...
} proc[NR_TASKS+NR_PROCS]

Zwei Assembker-Dateien im Kernel:

kernel/mpx88.s
kernel/klib88.s

Der Speicherverwalter:

mm/main.c
mm/forkexit.c
mm/exec.c
mm/break.c
mm/signal.c
mm/alloc.c

sind mal die wichtigsten

Die Funktionen in alloc.c

alloc_mem
free_mem
del_slot
merge
max_hole

sind die wichtigsten

Die verwendeten Datenstrukturen:

PRIVATE struct hole {
    phys_clicks h_base;
    phys_clicks h_len;
    struct hole *h_next;
} hole [NR_HOLES];

Die globalen Variablen

PRIVATE struct hole *hole_head;
PRIVATE struct hole *free_slots;

Typische in den Funktionen verwendete Variabeln

register struct hole *hp;
register struct hole *prev_ptr;
register struct hole *new_ptr;

phys_clicks old_base;


Jetzt die Definitionen, im mm:

#define NR_HOLES    128
#define NIL_HOLE    (struct hole *)0

Allgemeinm in der h/const.h:

#define NR_TASKS        8
#define NR_PROCS        16
#define NR_SEGS         3
#define T               0 // Text
#define D               1 // Daten
#define S               2 // Stack

Jetzt gibt es die drei Strukturen, Datentypen, Variablen, ...

struct proc
struct mem_map
int p_reg [NR_REGS] // Für die Register

In mm ist struct mproc neu definiert

EXTERN struct mproc {
    struct mem_map mp_seg [NR_SEGS];
    ...
    int mp_pid;
    ...
    uid mp_realuid;
    uid mp_effuid;
    uid mp_realgid;
    uid mp_effuid;
} mproc [N_PROCS];

Weitere Typen:

h/type.h

typedef unsigned vir_bytes;
typedef unsigned vir_clicks;
typedef long phys_bytes;
typedef unsigned phys_clicks;
typedef int signed_clicks;

Ich habe die Definitionen, NR

NR_REGS
NR_SEGS
N_PROCS
NR_HOLES