Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ brk(2) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

execve(2)

getrlimit(2)

malloc(3)

end(3)

BRK(2)  —  NEWS-OS Programmer’s Manual

名称

brk, sbrk − データセグメントのサイズを変更する

形式

int brk(addr)
char ∗addr;

char ∗sbrk(incr)
int incr;

解説

brk は、プログラムによって使用されていないデータセグメントの下限であると、 システムが考えているところ (ブレークと呼ばれる) を addr (システムのページサイズの倍数に切り上げた値) に変更します。 addr より大きくて スタックポインタより下の領域はアドレススペース内にはないので、 アクセスされるとメモリバイオレーションになります。

sbrk では、 プログラムのデータスペースに incr バイトが追加され、新しい領域の開始点を指し示すポインタが返されます。

プログラムが execve で実行を開始すると、ブレークは、そのプログラムとデータ格納領域によって 定義される上限のアドレスにセットされます。 したがって、普通、データ領域の成長するプログラムだけが sbrk を使用する必要があります。

getrlimit(2) システムコールは、 データ セグメントの最大許容サイズを 知るために使用することができます。 getrlimit へのコールから返される rlim_max 値を越えてブレークを セットすることは不可能です。例えば、 “etext + rlp→rlim_max” ( etext の定義については、 end(3) を 参照してください)

リターン値

brk がセットできると、 値 0 が返されます。 プログラムがシステムの制限より多くのメモリを 要求した場合には、 −1 が返されます。 sbrk は、 ブレークがセットできない場合には −1 を 返します。

エラー

以下に示されている項目のうちの 1 つが真である場合には、 sbrk は失敗して追加メモリは割り当てられません。

[ENOMEM] setrlimit(2) によってセットされている制限値を オーバーした。

[ENOMEM] (システムで定義されている) データセグメントの最大サイズを オーバーした。

[ENOMEM] スワップ領域内に拡張を サポートするための十分なスペースがない。

関連事項

execve(2), getrlimit(2), malloc(3), end(3)

バグ

ブレークのセットは、 スワップスペースの一時的な不足のために失敗することもあります。 これは、 getrlimit を 使用しない限り、 データセグメントの最大サイズを 超えたことによる失敗と見分けることはできません。

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026