XINU
Data Structures | Macros | Variables
memory.h File Reference

メモリマネージャが使用する定数と構造体の宣言 More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  memblk
 メモリブロックを管理するための構造体。 More...
 

Macros

#define freestk(p, len)
 getstk()で割り当てたスタックメモリを解放する。 More...
 
#define PAGE_SIZE   4096
 ページサイズ(メモリ領域を管理する一定のサイズ。Byte単位) More...
 
#define roundmb(x)   (char *)((7 + (uint32)(x)) & (~7))
 メモリブロックサイズ(8の倍数)にアドレスを変換するために、8の倍数で丸める。 More...
 
#define truncmb(x)   (char *)(((uint32)(x)) & (~7))
 メモリブロックサイズ(8の倍数)にアドレスを変換するために、下位3bitを切り捨てる。 More...
 

Variables

int bss
 BSSセグメントの開始アドレス(リンカが追加する) More...
 
int data
 データセグメントの開始アドレス(リンカが追加する) More...
 
int ebss
 BSSセグメントの終了アドレス(リンカが追加する) More...
 
int edata
 データセグメントの終了アドレス(リンカが追加する) More...
 
int end
 プログラムの終了アドレス(リンカが追加する) More...
 
int etext
 テキストセグメントの終了アドレス(リンカが追加する) More...
 
void * maxheap
 最上位かつ正常なヒープアドレス More...
 
struct memblk memlist
 フリーメモリリストの先頭 More...
 
void * minheap
 ヒープの開始地点 More...
 
int text
 テキストセグメントの開始アドレス(リンカが追加する) More...
 

Detailed Description

メモリマネージャが使用する定数と構造体の宣言

Definition in file memory.h.

Macro Definition Documentation

◆ freestk

#define freestk (   p,
  len 
)
Value:
freemem((char *)((uint32)(p) - ((uint32)roundmb(len)) + (uint32)sizeof(uint32)), \
(uint32)roundmb(len))
syscall freemem(char *, uint32)
メモリブロックを解放し、ブロックを空きリストに戻す。
Definition: freemem.c:33
#define roundmb(x)
メモリブロックサイズ(8の倍数)にアドレスを変換するために、8の倍数で丸める。
Definition: memory.h:25
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15

getstk()で割り当てたスタックメモリを解放する。

Parameters
[in]p解放するメモリブロックの基点
[in]len解放するメモリブロックのサイズ(Byte)
Returns
メモリ解放に成功した場合はOK、それ以外の場合はSYSERRを返す。
Note
返り値の詳細は、 freemem()を参照する事。
スタックは下方向に成長するため、freemem()に渡すポインタアドレスの基点を上位側から下位側に変換して渡している。

Definition at line 46 of file memory.h.

Referenced by kill().

◆ PAGE_SIZE

#define PAGE_SIZE   4096

ページサイズ(メモリ領域を管理する一定のサイズ。Byte単位)

Definition at line 7 of file memory.h.

◆ roundmb

#define roundmb (   x)    (char *)((7 + (uint32)(x)) & (~7))

メモリブロックサイズ(8の倍数)にアドレスを変換するために、8の倍数で丸める。

~7 = 0xF8 = 0b11111000である。
0 -> 7 -> 0 1 -> 8 -> 8 2 -> 9 -> 8 : (省略) 7 -> 14 -> 8 8 -> 15 -> 8 9 -> 16 -> 16

Parameters
[in]xアドレス
Returns
アドレス末尾が0の場合は下位3Bitを切り捨てたアドレス値(8の倍数)、
それ以外の場合は次の8の倍数に切り上げたアドレス値を返す。
Note
フリーメモリリスト上の各ブロックは、memblk構造体(8Byte)の倍数として扱う。

Definition at line 25 of file memory.h.

Referenced by freemem(), getmem(), and getstk().

◆ truncmb

#define truncmb (   x)    (char *)(((uint32)(x)) & (~7))

メモリブロックサイズ(8の倍数)にアドレスを変換するために、下位3bitを切り捨てる。

Parameters
[in]xアドレス
Returns
下位3Bitを切り捨てたアドレス値(8の倍数)を返す。
Note
フリーメモリリスト上の各ブロックは、memblk構造体(8Byte)の倍数として扱う。
切り捨てはスタートアップ時にだけ使用される。

Definition at line 35 of file memory.h.

Variable Documentation

◆ bss

int bss

BSSセグメントの開始アドレス(リンカが追加する)

◆ data

int data

データセグメントの開始アドレス(リンカが追加する)

Referenced by nulluser().

◆ ebss

int ebss

BSSセグメントの終了アドレス(リンカが追加する)

Referenced by nulluser().

◆ edata

int edata

データセグメントの終了アドレス(リンカが追加する)

◆ end

int end

プログラムの終了アドレス(リンカが追加する)

Referenced by meminit().

◆ etext

int etext

テキストセグメントの終了アドレス(リンカが追加する)

Referenced by nulluser().

◆ maxheap

void* maxheap

最上位かつ正常なヒープアドレス

最上位かつ正常なヒープアドレス

Definition at line 10 of file meminit.c.

Referenced by freemem(), meminit(), and xsh_memdump().

◆ memlist

struct memblk memlist

フリーメモリリストの先頭

フリーメモリリストの先頭

Definition at line 27 of file initialize.c.

Referenced by freemem(), getmem(), getstk(), meminit(), nulluser(), printFreeList(), and printMemUse().

◆ minheap

void* minheap

ヒープの開始地点

ヒープの開始地点

Definition at line 8 of file meminit.c.

Referenced by freemem(), and meminit().

◆ text

int text

テキストセグメントの開始アドレス(リンカが追加する)

Referenced by nulluser().