VM_MAP_STACK(9) | FreeBSD Kernel Developer's Manual | VM_MAP_STACK(9) |
名称
vm_map_stack, vm_map_growstack — プロセススタックを管理する書式
#include < sys/param.h>#include < vm/vm.h>
#include < vm/vm_map.h>
int
vm_map_stack( vm_map_t map, vm_offset_t addrbos, vm_size_t max_ssize, vm_prot_t prot, vm_prot_t max, int cow);
int
vm_map_growstack( struct proc *p, vm_offset_t addr);
解説
vm_map_stack() 関数は、新しいプロセスイメージのためのプロセススタックをマップします。スタックは、 max_ssize の最大サイズがある map のマップしている addrbos です。また、 cow で渡された copy-on-write フラグは、新しいマッピングに適用されます。保護ビットは、 prot と max によって供給されます。それは、通常 execve(2) によって呼び出されます。
vm_map_growstack() 関数は、古い sbrk(2) 呼び出しと同じように、必要なアドレス addr のためにプロセス p のためのスタックを増大するのに対して責任があります。
実装に関する注
vm_map_stack() 関数は、マッピングを作成するために vm_map_insert(9) を呼び出します。vm_map_stack() と vm_map_growstack() 関数は、呼び出しの存続期間に p でプロセスロックを獲得します。
戻り値
vm_map_stack() 関数は、マッピングの割り付けに成功したなら、 KERN_SUCCESS を返します。そうでなければ、スタックのマッピングでプロセスの VMEM リソース制限を超えるなら、または指定されたスタックの下部アドレスがマップの範囲外となるか、または結果のアドレスで既にマッピングがあるなら、または max_ssize が現在のマッピングで適合することができないなら、 KERN_NO_SPACE が返されます。
この関数のための他の有り得る返り値は、 vm_map_insert(9) に文書化されています。
vm_map_growstack() 関数は、 addr が既にマップされていたか、またはスタックの増大に成功したなら、 KERN_SUCCESS を返します。
また、 addr がスタック範囲の外であるなら、 KERN_SUCCESS を返します。以前にファイル vm_machdep.c にあった推奨されない grow() 関数との互換性を保持するために、これは行われます。
作者
このマニュアルページは、 <bms@spc.org>によって書かれました。January 11, 2013 | FreeBSD |