Manpages

名 前

pthread_attr_setguardsize, pthread_attr_getguardsize − ス レ ッ ド 属 性 オ ブ ジ ェ ク ト の guard size 属 性 の 設 定 /取 得 を 行 う

書 式

#include <pthread.h>

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
int pthread_attr_getguardsize(const pthread_attr_t *
attr, size_t *guardsize);

−pthread で コ ン パ イ ル し て リ ン ク す る 。

説 明

pthread_attr_setguardsize() 関 数 は 、 attr が 参 照 す る ス レ ッ ド 属 性 オ ブ ジ ェ ク ト の guard size 属 性 を guardsize で 指 定 さ れ た 値 に 設 定 す る 。

guardsize が 0 よ り 大 き い 場 合 、 attr を 使 っ て 新 し く 作 成 さ れ た 各 ス レ ッ ド に 対 し て 、 シ ス テ ム は ス レ ッ ド の ス タ ッ ク の 末 尾 に 少 な く と も guardsize バ イ ト の 追 加 領 域 を 割 り 当 て る 。 こ の 追 加 領 域 は ス タ ッ ク に 対 す る ガ ー ド 領 域 と し て 機 能 す る (た だ し 「 バ グ 」 の 節 も 参 照 )。

guardsize が 0 の 場 合 、 attr を 使 っ て 新 し く 作 成 さ れ た ス レ ッ ド は ガ ー ド 領 域 を 持 た な い 。 デ フ ォ ル ト の guard size は シ ス テ ム の ペ ー ジ サ イ ズ と 同 じ で あ る 。

(pthread_attr_setstack(3) や pthread_attr_setstackaddr(3)を 使 っ て ) attr で ス タ ッ ク ア ド レ ス 属 性 が 設 定 さ れ て い る 場 合 に は 、 呼 び 出 し 側 が そ の ス レ ッ ド の ス タ ッ ク を 割 り 当 て て い る こ と を 意 味 す る の で 、 guard size 属 性 は 無 視 さ れ る (す な わ ち 、 シ ス テ ム に よ る ガ ー ド 領 域 の 作 成 は 行 わ れ な い )。 こ の 場 合 、 ス タ ッ ク オ ー バ ー フ ロ ー が 起 こ ら な い よ う に 対 処 す る の は ア プ リ ケ ー シ ョ ン 側 の 責 任 と な る (お そ ら く mprotect(2) を 使 っ て 、 割 り 当 て ら れ た ス タ ッ ク の 最 後 に 手 動 で ガ ー ド 領 域 を 定 義 す る こ と に な る だ ろ う )。

pthread_attr_getguardsize() は 、 ス レ ッ ド 属 性 オ ブ ジ ェ ク ト attr の guard size 属 性 を guardsize が 指 す バ ッ フ ァ ー に 入 れ て 返 す 。

返 り 値

成 功 す る と 、 こ れ ら の 関 数 は 0 を 返 す 。 エ ラ ー の 場 合 、 0 以 外 の エ ラ ー 番 号 を 返 す 。

エ ラ ー

POSIX.1−2001 で は 、 エ ラ ー EINVAL
attr
guardsize が 無 効 な 場 合 に 対 し て 規 定 さ れ て い る 。 Linux で は 、 こ れ ら の 関 数 は 常 に 成 功 す る (た だ し 、 移 植 性 や 将 来 も 動 作 す る こ と を 保 証 し た い ア プ リ ケ ー シ ョ ン で は 正 の エ ラ ー の 返 り 値 を 処 理 す る よ う に す べ き で あ る )。

バ ー ジ ョ ン

こ れ ら の 関 数 は glibc バ ー ジ ョ ン 2.1 以 降 で 提 供 さ れ て い る 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 pthread_attr_setguardsize() と pthread_attr_getguardsize() は ス レ ッ ド セ ー フ で あ る 。

準 拠

POSIX.1−2001.

注 意

ガ ー ド 領 域 は 、 読 み 出 し /書 き 込 み ア ク セ ス が 行 わ れ な い よ う に 保 護 が か け ら れ た 仮 想 メ モ リ ー ペ ー ジ で 構 成 で 構 成 さ れ る 。 ス レ ッ ド が ス タ ッ ク を ガ ー ド 領 域 ま で オ ー バ ー フ ロ ー さ せ た 場 合 、 ほ と ん ど の ハ ー ド ウ ェ ア ア ー キ テ ク チ ャ ー で は 、 ス レ ッ ド に SIGSEGV シ グ ナ ル が 送 ら れ 、 オ ー バ ー フ ロ ー が 発 生 し た こ と が 通 知 さ れ る 。 ガ ー ド 領 域 は ペ ー ジ 境 界 か ら 開 始 さ れ 、 ガ ー ド 領 域 の 大 き さ は ス レ ッ ド 作 成 時 に 内 部 的 に シ ス テ ム の ペ ー ジ サ イ ズ に 切 り 上 げ ら れ る (そ の 場 合 も pthread_attr_getguardsize() で は pthread_attr_setguardsize() で 設 定 さ れ た guard size が 返 さ れ る )。 多 く の ス レ ッ ド を 作 成 す る ア プ リ ケ ー シ ョ ン で 、 か つ 、 ス タ ッ ク オ ー バ ー フ ロ ー が 決 し て 発 生 し な い こ と が 分 か っ て い る 場 合 に は 、 guard size を 0 に 設 定 す る こ と で 、 メ モ リ ー を 節 約 で き る こ と も あ る 。 ス レ ッ ド が ス タ ッ ク に 大 き な デ ー タ 構 造 を 割 り 当 て る 場 合 に は 、 ス タ ッ ク オ ー バ ー フ ロ ー を 検 出 す る た め に は 、 デ フ ォ ル ト サ イ ズ よ り も 大 き な guard size を 選 ぶ 必 要 が あ る か も し れ な い 。

バ グ

glibc 2.8 の 時 点 で は 、 NPTL ス レ ッ ド 実 装 で は ガ ー ド 領 域 は ス タ ッ ク サ イ ズ で 割 り 当 て ら れ る 領 域 の 中 に 含 ま れ て い る 。 一 方 、 POSIX.1 で は 、 ス タ ッ ク の 末 尾 に 追 加 の 領 域 を 割 り 当 て る こ と が 求 め ら れ て い る 。 (こ の た め 、 ガ ー ド 領 域 が 大 き す ぎ て 、 実 際 の ス タ ッ ク 用 の 場 所 が な く な っ て し ま う 場 合 、 pthread_create(3)EINVAL エ ラ ー が 発 生 す る こ と に な る 。 ) 廃 止 予 定 の LinuxThreads 実 装 で は 、 POSIX.1 で 求 め ら れ て い る 通 り の 動 作 で 、 ガ ー ド 領 域 が ス タ ッ ク の 末 尾 に 追 加 の 領 域 が 割 り 当 て ら れ る 。

pthread_getattr_np(3) を 参 照 。

関 連 項 目

mmap(2), mprotect(2), pthread_attr_init(3), pthread_attr_setstack(3), pthread_attr_setstacksize(3), pthread_create(3), pthreads(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。