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