どうもこんにちは!
サバ缶(@tech_begin)です。
基本情報や応用情報技術者試験で頻出する「プログラムの特性」に関する問題。
今回はその特性の1つである「リエントラント」について解説していきます。
もし分かりづらい箇所や、間違っている箇所があればお気軽にTwitterへご連絡ください!
プログラム特性とは
それではまず、少しおさらいをしておきましょう。
すでに何があるのか知っている方は、飛ばして大丈夫です!
プログラムの構造上 生じる性質を分類したのが「プログラムの特性」です。
その「プログラムの特性」は4つに分類されます。
- リロケータブル(再配置可能)
- リユーザブル(再使用可能)
- リエントラント(再入可能)
- リカーシブ(再帰的)
このうちの1つ『リエントラント(再入可能)』について学んでいきます。
リエントラント(再入可能)とは
リエントラントとは、プログラム実行中、(同時に)同じ処理が呼び出されても問題なく完了する性質のことを言います。
また、「リエントラント」という性質を持ったプログラムを『再入可能プログラム』と呼びます。
リエントラントの言葉の意味を理解する
リエントラント……
言葉だけだとイメージしにくいですよね。
英語で『Reentrant』と書きます。
「エントランス」や「エントラント」と言い換えると、イメージしやすいかもしれません。
entrant(エントラント)
は参加者、entry(エントリー)
は入場、参加、加入といった意味があります。
そしてentrance(エントランス)
には入口、入場口という意味があります。
英単語を分解してみましょう。
- 「Re」 再び
- 「entrant」 参加者、加入者
これで「リエントラント=再入可能」という意味が結びついたのではないでしょうか。
リエントラント(再入可能)である必要性
プログラムは、柔軟性のある汎用的なものであることが求められます。
なぜなら、システムは長い期間にわたって保守(改善されていくこと)していく必要があるので、多くのメンバーが携わります。
そのため、どんな人が見ても改修しやすいように柔軟性のある設計や分かりやすいコードを書くことが望まれています。
リーダブルコードなどの書籍を読むと理解が深まりますよ!
少し話が逸れましたが、、、
リエントラントは、各プロセス(命令)ごとに変数部分を割り当てることで、複数のプロセスから同時に呼び出されても実行することが可能です。
つまり、処理(コード)部分はプロセスごとに共有しつつ、データ領域は各プロセスが確保していると言うことです。
カンタンな足し算のメソッドで見ていきましょう。
プログラム特性の「リエントラント」の特性を持つプログラムであるCは、
処理部分を共通のメモリに確保し、変数部分はプロセスごとにメモリを確保するようになっています。
メモリ?と思ったら、プログラムの処理の流れについてご確認ください。
リエントラントを使う目的
先述の通り、リエントラントは『プログラム実行中、(同時に)同じ処理が呼び出されても問題なく完了する性質のこと』でしたね。
さて『マルチタスク』という複数のプログラムを同時に並行して実行するシステムがあります。
例えば、手元のスマートフォン。
音楽を聴きながらSNSアプリを楽しむということもマルチタスクです。
こういった普段何気なく使っている端末の機能は、
リエントラントの性質がなければ実現することは(たぶん)不可能です。
リエントラントという性質は、現代の私たちの生活基盤になっているとも言えますね。
リエントラントであるために、3つの原則(Wikipedia)を定めている事例もあります。
気になる方はぜひご覧ください。
プログラムの特性は、全部で4つあります。
このほかにも解説しているので、ぜひご覧ください。