質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

1回答

738閲覧

リエントラント関数 と 割り込みシステムコール の理解

akiyama3284pga

総合スコア186

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

1クリップ

投稿2022/12/13 01:46

編集2023/01/27 11:47

割り込み可能なシステムコールと、リエントラント関数周りの理解について自信がないため質問いたします。
以下が現時点での大まかな理解となります。


・割り込み可能なシステムコールとは、OS(カーネル)が予め決めている、システムコールの実際の処理プロセスの実行途中で、それに対して割り込むことができるもののこと。

・例えば端末をreadしている最中、該当プロセスに対してシグナル等で割り込みが発生した際、該当シグナルへのシグナルハンドラがある場合にはそれを実行させるために、元のユーザプロセスのシグナルハンドラの位置に処理を戻す。

・上の際に割り込まれたシステムコール処理はシグナルハンドラの実行が終わると同時に、
エラーを返す。(処理は再起動しない代わりにerrnoにEINTRという足がかりを残す。)
つまり再起動させたい場合には以下のようなコードが必要

again: if (( read(fds, buff)) < 0) { // 割り込まれたら、マイナスを返すので、内に入る。 if (errno == EINTR) goto again; }

・リエントラント関数は、シグナルが発せられる直前に実行されていたシステムコールと同じ(若しくは処理性質を持つ)システムコールをシグナルハンドラ内で偶然にも使用してしまった場合に、メモリを破壊したりという副作用を1ミリも生まないことが保証されている関数群のこと。

例えばmallocのようなメモリ等の共有資源を司る関数がリエントラント関数ではない理屈。
シグナル前にmalloc()が実行中、その正にタイミングでシグナルが不運に発行されると、
mallocはまだ処理が中断しているだけでエラーによるロールバック処理すらできていない(本当に止まっている)ため、ハンドラ内で更に実行されるmalloc()と衝突してメモリが高い確立で破壊されてしまう。


よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2022/12/13 02:16

質問はなんでしょうか?
dameo

2022/12/13 03:45

読んでるだけで何か情報を出せるわけでもないのですが、割り込み可能なシステムコールと言ってるのは、所謂ハードウェア割り込み全てとシグナルを合わせて「割り込み」と言ってるのでしょうか?シグナルに限定してないように見えるのがよく分かりません。
akiyama3284pga

2022/12/13 03:58

お世話になります。 ここでの割り込みはシグナルを起因とするものであり、 割り込まれるシステムコールは、ブロックを伴うような、自身の処理中に"シグナル(ソフトウェア割り込み)"により中途中断をすることが許可されているシステムコールを想定しております。 このあたり、紛らわしくて申し訳ございません。
dameo

2022/12/13 04:14

細かいところですみません。質問意図が添削なのかなぁと思って気になったところを書いた次第です。 「ブログでやれ」と思う方もいそうですが、個人的には読まれないブログに嘘八百並ぶよりは、少しは添削可能なところに書いた方がいいような気もします(とはいえ、日本語だとあまり正確にならなそうですけど…)。
akiyama3284pga

2022/12/13 04:39

ありがとうございます。 そうですね。確かに自分の概念等に対する質問は個々の質問に分割していると細切れになって前後関係とかの話も一々にurlで示す必要等出てくるため、あまりこういうサイトには向かないのかもしれません。 利用的な媒体を見つけらるよう動いてみたいと思います。
dameo

2022/12/13 04:56

個人的には楽しく読んでるので、続けてもらって大丈夫ですよ。指摘までするかは気分次第ですけど。なんか質問意図が希薄な感じでそういう修正依頼が多かったので、その意図を予想で説明してみただけです。
akiyama3284pga

2022/12/13 06:13

ありがとうございます。 質問は難しいです。 自分は行間に潜む問題点疑問点を上手くびしっと数行で伝えられないので、 また自分も回答の行間からそれらしい答えを感じ取りたいため、というより一言の言葉からまるっと理解することができないため、それを誘引するような形でどうしても聞きたくなります。 何にしても汎用性のある抽象度の高い知識を得ようとするには向いていない、と感じます。 しかし、他に手段が無い以上、活用させて頂きます。
Zuishin

2022/12/13 07:31

他に手段があればそちらに行ってくれるのかな?
guest

回答1

0

ベストアンサー

posixのreentrant functionはmultithread safetyの話で、signal handler内で呼び出す云々はasync-signal-safe functionで別の概念です。
(async-signal-safeならふつうreentrantになるでしょうが、逆はそうではない)
posix定義(strtok_rの_r)のreentrantでなく、一般用語としてのリエントラントなら、async-signal-safeのことになり、その理解でOKとも思います。

投稿2022/12/13 02:28

編集2022/12/13 04:52
matukeso

総合スコア1590

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/12/13 03:44

お世話になります。 おっしゃります通り、スレッドセーフとリエントラントを混同して理解しておりました。。 シグナルセーフである条件としてはreentrantであればいいという考え方をしてもよろしいでしょうか?(シグナルセーフであるにはリエントラントに加えて他のことも考慮する必要がある?) また、リエントラントであるからスレッドセーフとも言えないというように学びました。 https://en.wikipedia.org/wiki/Reentrancy_(computing) このあたりをもう少し詰めたいと思います。
tmp

2022/12/13 09:17

すいません、私も中途半場に理解しており、混乱しております。 「リエントラントであるからスレッドセーフとも言えない」 例ってリンク先のwikipediaに書いてますか? どういう状態のものがあるのか知りたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問