Minix - Ich habe was vor

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1482
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Re: Minix - Ich habe was vor

Beitrag von davidvajda.de »

Zum lernen


Es gibt quasi die Ordner
  1. Code: Alles auswählen

     kernel
Daneben gibt es
  1. Code: Alles auswählen

     kernel
Es gibt immer die
  1. Code: Alles auswählen

     const.h
  2. Code: Alles auswählen

     main.c
    bis auf in h/
  1. Code: Alles auswählen

     h/const.h
  2. Code: Alles auswählen

     kernel/const.h
  3. Code: Alles auswählen

     mm/const.h
  4. Code: Alles auswählen

     fs/const.h

Code: Alles auswählen

h/type.h

Code: Alles auswählen

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

Code: Alles auswählen

kernel/const.h

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

Code: Alles auswählen

kernel/proc.h

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

Code: Alles auswählen

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:

Code: Alles auswählen

kernel/mpx88.s
kernel/klib88.s
Der Speicherverwalter:

Code: Alles auswählen

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

Code: Alles auswählen

alloc_mem
free_mem
del_slot
merge
max_hole
sind die wichtigsten

Die verwendeten Datenstrukturen:

Code: Alles auswählen

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

Code: Alles auswählen

PRIVATE struct hole *hole_head;
PRIVATE struct hole *free_slots;
Typische in den Funktionen verwendete Variabeln

Code: Alles auswählen

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

phys_clicks old_base;
Jetzt die Definitionen, im mm:

Code: Alles auswählen

#define NR_HOLES    128
#define NIL_HOLE    (struct hole *)0
Allgemeinm in der h/const.h:

Code: Alles auswählen

#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, ...

Code: Alles auswählen

struct proc
struct mem_map
int p_reg [NR_REGS] // Für die Register
In mm ist struct mproc neu definiert

Code: Alles auswählen

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:

Code: Alles auswählen

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

Code: Alles auswählen

NR_REGS
NR_SEGS
N_PROCS
NR_HOLES
Antworten