基本情報技術者 FUNDAMENTAL IT ENGINEER
ソフトウェアとハードウェア
講義 4 本・確認問題 35 問 | 本試験では「科目A テクノロジ」(41問)の一部 | 最終更新 2026-09-24
この章で学ぶこと- OSが「今どのタスクにCPUを渡すか」をどうやって決めているかが分かるようになります。
- 主記憶が足りなくてもプログラムが動く仕組みと、ページフォールト回数の数え方が分かるようになります。
- OSと業務アプリの間にある層と、ファイルの置き場所の指定方法・守り方が分かるようになります。
- ソースコードが動く形になるまでの流れ、OSSライセンスの違い、論理回路の読み方が分かるようになります。
1. OSとタスク管理
OSが「今どのタスクにCPUを渡すか」をどうやって決めているかが分かるようになります。
オペレーティングシステム(OS)は、CPU・主記憶・入出力装置といった資源を管理し、応用ソフトウェアから使いやすい形で見せる基本ソフトウェアです。資源管理や割込み処理を受け持つ中核部分をカーネルと呼び、利用者のコマンドを解釈する部分(シェル)とは役割が分かれています。
CPUは1つのコアにつき一度に1つの命令の流れしか実行できません。そこでOSは、実行の単位であるタスク(プロセス)を細かく切り替えて、あたかも同時に動いているように見せます。プロセスは主記憶空間や開いているファイルなどの資源をひとまとまりで持ちますが、その中をさらに分けた実行の流れがスレッドです。同じプロセス内のスレッドは主記憶空間を共有するので、切替えがプロセスの切替えより軽くて済みます。
タスクは「実行可能」「実行」「待ち」の3つの状態を行き来します。実行可能はCPUの順番待ち、実行はCPUを使っている最中、待ちは入出力の完了などを待っていてCPUを渡されても進めない状態です。実行可能から実行への遷移をディスパッチと呼び、これを行うOSの部品をディスパッチャといいます。逆に、実行中のタスクからCPUを取り上げて他へ回すことをプリエンプション(横取り)といいます。
誰にCPUを渡すかの決め方がスケジューリングです。到着順(FCFS)、処理時間の短い順(SJF)、優先度順、一定時間ごとに順番を回すラウンドロビンなどがあり、ラウンドロビンで区切る一定時間をタイムクォンタム(タイムスライス)といいます。処理時間の短いものを先に流すSJFは平均ターンアラウンドタイムが短くなりますが、長いタスクがいつまでも実行されない(飢餓)おそれがあります。
複数のタスクが同じ資源を同時にいじると壊れてしまうので、一度に1つしか入れない区間(クリティカルセクション)を作って守ります。これが排他制御で、代表的な仕組みがセマフォです。ただし排他制御をすると、お互いが相手の持つ資源の解放を待ち続けて永久に止まるデッドロックが起こり得ます。デッドロックは、相互排除・占有して待つ・横取り不可・循環待ちの4つがすべて揃ったときに発生するので、どれか1つを崩せば防げます。
処理の途中で急ぎの用件が入ったときに、いま実行中の処理を中断して別の処理へ移るのが割込みです。0除算やページフォールトのようにプログラム自身の実行が原因で起きるものを内部割込み(プログラム割込み)、入出力の完了通知・タイマ・電源異常のように外側の要因で起きるものを外部割込みといいます。
タスクの3状態と遷移、および主なスケジューリング方式| 区分 | 名前 | 内容 |
|---|
| 状態 | 実行可能状態 | 実行の準備は整っていて、CPUの割当てを待っている状態 |
| 状態 | 実行状態 | CPUを割り当てられ、命令を実行している状態。CPU1個につき1タスク |
| 状態 | 待ち状態 | 入出力の完了などを待っていて、CPUを渡されても進めない状態 |
| 遷移 | 実行可能→実行 | ディスパッチ。スケジューラが選んだタスクにCPUを割り当てる |
| 遷移 | 実行→実行可能 | プリエンプション。タイムクォンタムの使い切りや、より優先度の高いタスクの割込みでCPUを取り上げられる |
| 遷移 | 実行→待ち | 入出力を要求するなどして、自らCPUを手放す |
| 遷移 | 待ち→実行可能 | 入出力完了の割込みなどで待つ理由がなくなる。ここで直接「実行」には移らない |
| 方式 | 到着順(FCFS) | 到着した順に実行する。ノンプリエンプティブ。長いタスクが先だと後続が待たされる |
| 方式 | 処理時間順(SJF) | 処理時間の見積りが短いものから実行する。平均ターンアラウンドタイムは最短になるが、長いタスクが後回しにされ続けることがある |
| 方式 | 優先度順 | 優先度の高いタスクから実行する。プリエンプティブにすると、実行中でも高優先度の到着で横取りされる |
| 方式 | ラウンドロビン | タイムクォンタムごとにCPUを取り上げ、待ち行列の最後尾へ回す。応答時間が平均化され、対話処理に向く |
用語
- カーネル
- OSの中核部分。CPUや主記憶の割当て、タスクの切替え、割込みの処理、入出力の制御など、ハードウェアに近い基本機能を受け持つ。利用者が直接触るのではなく、シェルや応用ソフトウェアを通して使われる。
- プロセス
- 実行中のプログラムをOSが管理する単位。専用の主記憶空間や開いているファイルなどの資源をひとまとまりで持ち、他のプロセスからは独立している。生成や切替えの負担はスレッドより重い。
- スレッド
- プロセスの中にある実行の流れ。同じプロセス内のスレッドは主記憶空間を共有するので、データの受渡しが簡単で切替えも軽い。反面、共有データを同時に書き換えないよう排他制御が必要になる。
- ディスパッチャ
- 実行可能状態のタスクの中から次に動かすものを選び、CPUを割り当てて実行状態にするOSの部品。どのタスクを選ぶかの方針がスケジューリングで、その方針に従って実際に切り替えるのがディスパッチャの仕事。
- プリエンプション
- 実行中のタスクからOSが強制的にCPUを取り上げ、他のタスクへ渡すこと。タイムクォンタムの使い切りや、より優先度の高いタスクの到着がきっかけになる。これを行わない方式をノンプリエンプティブという。
- タイムクォンタム
- ラウンドロビン方式で1つのタスクが続けてCPUを使える時間の上限。タイムスライスともいう。短くすると応答は良くなるが切替えの回数が増えてオーバヘッドが大きくなる。
- セマフォ
- 共有資源の空き数を表す変数を使った排他制御の仕組み。資源を取るときP操作で1減らし、空きがなければタスクを待たせる。返すときV操作で1増やし、待っているタスクを起こす。空き数が1のものを特に二値セマフォという。
- デッドロック
- 複数のタスクが互いに相手の持つ資源の解放を待ち、どれも先へ進めなくなる状態。相互排除・占有して待つ・横取り不可・循環待ちの4条件が同時に成立すると起こるので、資源の取得順序を統一するなどして条件を崩して防ぐ。
- 内部割込み
- 実行中のプログラム自身が原因で起きる割込み。0による除算、桁あふれ、無効な命令の実行、ページフォールト、スーパバイザコール(SVC)などがある。プログラム割込みとも呼ばれる。
- 外部割込み
- 実行中のプログラム以外の要因で起きる割込み。入出力の完了通知、タイマによる時間切れ、機械故障や電源異常の検知、コンソールからの介入などがある。
- ターンアラウンドタイム
- タスクを投入してから、その結果がすべて出終わるまでの時間。待ち時間と処理時間を合わせたもの。応答が返り始めるまでの時間を表すレスポンスタイムとは区別する。
例題
例題:タスクA(処理時間8ミリ秒)とタスクB(処理時間2ミリ秒)が同時に到着した。到着順にA→Bで実行した場合と、処理時間順にB→Aで実行した場合の平均ターンアラウンドタイムを比べよ。
答えと考え方 A→Bの順では、Aが8ミリ秒、Bが8+2=10ミリ秒で終わるので平均は(8+10)÷2=9ミリ秒。B→Aの順ではBが2ミリ秒、Aが2+8=10ミリ秒なので平均は(2+10)÷2=6ミリ秒。全体の終了時刻(10ミリ秒)は同じでも、短いものを先に流すと平均ターンアラウンドタイムは短くなる。
例題:タスクXが資源1を確保したまま資源2を要求し、タスクYが資源2を確保したまま資源1を要求している。この状態を防ぐ簡単な方法は何か。
答えと考え方 デッドロックの4条件のうち「循環待ち」を崩せばよい。資源に番号を付け、必ず番号の小さい順に確保すると決めておけば、XもYも資源1→資源2の順に取ることになり、輪ができない。ほかに、必要な資源を最初に一括で確保して「占有して待つ」を崩す方法もある。
出典・根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(オペレーティングシステム)
2. 記憶管理と仮想記憶
主記憶が足りなくてもプログラムが動く仕組みと、ページフォールト回数の数え方が分かるようになります。
主記憶は有限なので、OSは限られた領域を複数のプログラムで分け合わせます。あらかじめ決まった大きさに区切っておく固定区画方式は管理が簡単ですが、区画より小さいプログラムを置くと余りが無駄になります(内部断片化)。必要な大きさだけ切り出す可変区画方式は無駄が少ない代わりに、割当てと解放を繰り返すうちに小さな空きがあちこちに散らばります。これがフラグメンテーション(断片化)で、置き場所を前に詰め直して空きを1か所にまとめる操作をコンパクションといいます。
実記憶が足りないときの古典的な対策が、スワッピングとオーバレイです。スワッピングは実行中のプログラムを丸ごと補助記憶へ退避(スワップアウト)し、必要になったら戻す(スワップイン)方式。オーバレイはプログラムを同時には使わない単位に分けておき、必要な単位だけを同じ領域に読み込んで上書きする方式で、分割の仕方をプログラム側が決めます。
仮想記憶は、プログラムが使うアドレス(仮想アドレス・論理アドレス)と、実際の主記憶のアドレス(実アドレス・物理アドレス)を切り離す考え方です。仮想空間を一定の大きさのページに区切り、必要になったページだけを主記憶のページ枠に載せます。実行時にはページテーブルを引いて仮想アドレスを実アドレスに変換します(動的アドレス変換)。この変換を高速に行う専用のキャッシュがTLBです。
参照したページが主記憶にないときに起きる割込みがページフォールトです。ページフォールトが起きるとOSは補助記憶から該当ページを読み込みます。空きページ枠がなければ、どれかを追い出さなければなりません。この選び方がページ置換えアルゴリズムで、FIFO(最も古く読み込んだもの)、LRU(最後に参照されてから最も長いもの)、LFU(参照回数が最も少ないもの)などがあります。最初から全部を読み込まず、参照されたときに初めて読み込む方式をデマンドページングといいます。
ページ置換えは実際に手を動かして数えるのがいちばん確実です。ページ枠の中身を左から順にメモしながら、参照列を1つずつ処理していきます。主記憶にあれば何もせず(LRUなら参照順だけ更新)、なければフォールト1回と数えて読み込みます。なお、FIFOではページ枠を増やしたのにページフォールトが増えてしまうことがあり、これをベイラディの異常(Beladyの異常)といいます。LRUではこの逆転は起こりません。
多重度を上げすぎると、どのタスクも必要なページを主記憶に置けず、ページの入替えばかりが起きてCPUがほとんど仕事をしなくなります。この現象がスラッシングです。対策は多重度を下げる、主記憶を増設する、局所性の高いプログラムに直す、などです。
主なページ置換えアルゴリズムの比較| 方式 | 追い出すページ | 長所 | 短所 |
|---|
| FIFO | 最も古く読み込んだページ | 読み込んだ順番だけ覚えればよく、実装が簡単 | よく使うページも古ければ追い出す。ベイラディの異常が起こることがある |
| LRU | 最後に参照されてから最も長く使われていないページ | 参照の局所性に合い、実際の効率がよい | 参照のたびに順序を更新する必要があり、実装のコストが高い |
| LFU | 参照された回数が最も少ないページ | よく使うページが主記憶に残りやすい | 昔だけよく使われたページが居座り続けることがある |
| OPT(最適) | この先最も長く参照されないページ | 理論上ページフォールトが最小になる | 将来の参照を知る必要があり実現できない。他方式を評価する基準として使う |
用語
- フラグメンテーション
- 主記憶やディスクの割当てと解放を繰り返すうちに、使える空き領域が小さく分断されて散らばる現象。合計では十分な空きがあっても、連続した大きな領域が取れないためプログラムを置けなくなる。
- コンパクション
- 散らばった空き領域を1か所にまとめるため、主記憶上のプログラムを前へ詰め直す操作。空きが連続するので大きなプログラムを置けるようになるが、詰め直している間はオーバヘッドが発生する。
- スワッピング
- 実行中のプログラムを丸ごと補助記憶へ退避し(スワップアウト)、必要になったら主記憶へ戻す(スワップイン)方式。優先度の低いタスクを一時的に追い出して、主記憶の空きを作るために使われる。
- オーバレイ
- 主記憶に入りきらない大きなプログラムを、同時には使わない単位に分けておき、必要になった単位だけを同じ領域へ上書きして読み込む方式。分割の仕方はプログラムの作成者が指定する。
- ページング
- 仮想記憶を固定長のページに区切り、ページ単位で主記憶と補助記憶をやり取りする方式。可変長の単位で区切るセグメンテーションと違い、外部断片化が起きにくい。
- ページフォールト
- 参照した仮想ページが主記憶のページ枠に載っていないときに発生する割込み。OSは補助記憶から該当ページを読み込み、必要なら他のページを追い出す。内部割込みに分類される。
- FIFO方式
- ページ置換えで、主記憶に読み込んでから最も時間がたったページを追い出す方式。読み込んだ順番だけ覚えておけばよく実装が簡単だが、よく使うページでも古ければ追い出してしまう。
- LRU方式
- ページ置換えで、最後に参照されてから最も長く使われていないページを追い出す方式。直前によく使ったものは今後も使うという参照の局所性に合うため効率がよいが、参照のたびに順序を更新する必要がある。
- LFU方式
- ページ置換えで、参照された回数が最も少ないページを追い出す方式。よく使うページが主記憶に残りやすい一方、昔たくさん参照されたが今は使われないページが居座り続けることがある。
- デマンドページング
- プログラムの開始時にすべてを読み込まず、実際に参照されてページフォールトが起きたときに初めてそのページを読み込む方式。使わないページを読み込まずに済むので、主記憶を有効に使える。
- スラッシング
- 多重プログラミングの度合いを上げすぎた結果、ページの入替えばかりが起きてCPUの利用率とスループットが急激に低下する現象。多重度を下げる、主記憶を増設するなどで解消する。
- ベイラディの異常
- FIFO方式のページ置換えで、ページ枠の数を増やしたにもかかわらずページフォールトの回数が増えてしまう現象。LRU方式など、枠を増やせば必ず内容が包含される方式では起こらない。
例題
例題:ページ枠が3つ(最初は空)で、参照列が 1, 2, 3, 1, 4 のとき、FIFO方式のページフォールト回数はいくつか。
答えと考え方 枠の中身を追う。1→フォールト(枠:1)、2→フォールト(1,2)、3→フォールト(1,2,3)、1→主記憶にあるのでヒット、4→フォールトで最も古い1を追い出す(2,3,4)。よってページフォールトは4回。LRUでも同じ手順だが、追い出す相手は「最後に使われてから最も古いもの」なので、4を読むときに追い出されるのは2になる。
例題:主記憶の空きの合計は500Mバイトあるのに、300Mバイトのプログラムを置けなかった。原因と対処は何か。
答えと考え方 可変区画方式で割当てと解放を繰り返した結果、空きが小さく分断されるフラグメンテーションが起きている。連続した300Mバイトが取れないため置けない。対処はコンパクションで空きを1か所にまとめること。仮想記憶(ページング)にすれば、そもそも連続した実領域を必要としなくなる。
出典・根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(記憶管理)
3. ミドルウェアとファイルシステム
OSと業務アプリの間にある層と、ファイルの置き場所の指定方法・守り方が分かるようになります。
OSと応用ソフトウェアの間に入り、多くのアプリが共通して必要とする機能をまとめて提供するソフトウェアがミドルウェアです。データベース管理システム(DBMS)、トランザクションモニタ、Webアプリケーションサーバ、通信管理、運用管理ツールなどが代表例です。ミドルウェアを使うと、アプリはOSの細かい違いを意識せずに済み、開発量も減ります。
ソフトウェアの機能を外から呼び出すための取決めがAPI(Application Programming Interface)です。呼び出す関数の名前、渡す引数、返る値、データの形式などを定めたもので、中身の作り方を知らなくても機能を利用できます。Web上でHTTPを使って呼び出せるものはWeb APIと呼ばれます。
利用者が入力したコマンドを解釈してOSに実行を依頼するプログラムがシェルです。シェルはカーネルの外側にあり、コマンドを並べたファイル(シェルスクリプト)で定型作業を自動化できます。カーネルが資源管理の中核であるのに対し、シェルは人とOSの間の通訳だと考えると区別しやすくなります。
ファイルの中のレコードをどう並べ、どうたどるかの決め方がファイル編成です。前から順に並べる順編成、索引を別に持つ索引編成、キーの値から格納位置を計算する直接編成、複数のメンバとその場所を示すディレクトリを持つ区分編成があります。順次アクセスしかできないのが順編成、計算した位置へ一発で行けるのが直接編成、その両方ができるのが索引編成です。
ファイルは階層構造のディレクトリに置かれます。最上位がルートディレクトリで、今いる場所がカレントディレクトリです。ルートから順に書き下ろす指定が絶対パス、カレントディレクトリを起点にした指定が相対パスで、相対パスではカレントを「.」、親ディレクトリを「..」で表します。「..」を1つ書くと1階層上がる、と1つずつ丁寧にたどるのが確実です。
障害に備えてデータの複製を取るのがバックアップです。全部を毎回取るフルバックアップのほか、直前のフルバックアップ以降の変更分を取る差分バックアップ、前回のバックアップ(種類を問わない)以降の変更分だけを取る増分バックアップがあります。復元にはフルバックアップ1本+差分1本(差分方式)、またはフルバックアップ1本+その後の増分すべて(増分方式)が必要です。増分は取得が速い代わりに復元が手間になります。
更新の前後の記録を時系列に残しておくファイルがジャーナル(ログ)です。障害が起きたとき、更新後の記録を使って復元後のデータに再度反映するロールフォワードや、更新前の記録を使って処理前の状態へ戻すロールバックに使います。
主なファイル編成の比較| 編成 | レコードの並べ方 | 目的のレコードへの到達 | 主な用途 |
|---|
| 順編成 | 入力順またはキー順に前から並べる | 先頭から順に読む(順次アクセスのみ) | 一括処理、ログ、磁気テープへの保存 |
| 索引編成 | 順に並べたデータ部と、別に持つ索引部 | 索引を引いてから読むので、直接アクセスも順次アクセスもできる | キーで1件取り出しつつ、一覧も出したい業務ファイル |
| 直接編成 | キーの値から計算した位置に置く | 計算した位置へ直接アクセスする | キーが分かっていて高速に1件取り出したい場合 |
| 区分編成 | 複数のメンバ(小さな順編成)とディレクトリ | ディレクトリでメンバを探し、メンバ内は順次に読む | プログラムライブラリ |
用語
- ミドルウェア
- OSと応用ソフトウェアの中間に位置し、多くのアプリが共通して使う機能を提供するソフトウェア。DBMS、トランザクションモニタ、Webアプリケーションサーバ、運用管理ツールなどが該当し、アプリの開発量を減らせる。
- API
- あるソフトウェアの機能を外部のプログラムから呼び出すための取決め。関数名・引数・戻り値・データ形式などを定める。中身の実装を知らなくても機能を使えるので、部品としての再利用がしやすくなる。
- シェル
- 利用者が入力したコマンドを解釈し、対応するプログラムの実行をOS(カーネル)に依頼するプログラム。コマンドを並べたシェルスクリプトを書けば、定型作業をまとめて自動実行できる。
- 順編成ファイル
- レコードを入力順やキー順に前から並べたファイル。先頭から順に読む順次アクセスしかできないが、構造が単純で一括処理に向く。磁気テープのような順次アクセス専用の媒体でも使える。
- 索引編成ファイル
- レコードを順に並べたデータ部と、キーから位置を探すための索引部を組み合わせたファイル。索引を引いて目的の位置へ飛ぶ直接アクセスと、前から読む順次アクセスの両方ができる。
- 直接編成ファイル
- キーの値をハッシュ関数などで格納位置に対応づけ、計算した位置へ直接アクセスできるようにしたファイル。1件を高速に取り出せるが、異なるキーが同じ位置になる衝突(シノニム)への対処が必要。
- 絶対パス
- ルートディレクトリを起点に、たどるディレクトリを順に並べてファイルの位置を表す書き方。カレントディレクトリがどこであっても同じファイルを指す。先頭が区切り文字「/」で始まる。
- 相対パス
- カレントディレクトリを起点にファイルの位置を表す書き方。カレントを「.」、1つ上の親ディレクトリを「..」で表す。カレントが変わると同じ表記でも指す先が変わる。
- 差分バックアップ
- 直前のフルバックアップ以降に変更されたデータだけを保存する方式。復元にはフルバックアップと最新の差分バックアップの2本があればよいが、日がたつほど1回の取得量が増える。
- 増分バックアップ
- 前回のバックアップ(フルでも増分でもよい)以降に変更されたデータだけを保存する方式。1回の取得量と時間は最も少ないが、復元にはフルバックアップとその後のすべての増分が必要になる。
- ジャーナル
- データの更新前と更新後の内容を時系列に記録したファイル。ログファイルともいう。更新後情報を使って障害直前まで進めるロールフォワードや、更新前情報を使って処理開始前に戻すロールバックに用いる。
例題
例題:カレントディレクトリが /usr/local/bin のとき、相対パス ../lib/data.txt はどのファイルを指すか。
答えと考え方 「..」で1階層上がって /usr/local。続く lib/data.txt をたどるので /usr/local/lib/data.txt を指す。「..」の個数だけ上がってから、残りを下りていくと考えると間違えにくい。もし ../../lib/data.txt なら2階層上がって /usr となり、/usr/lib/data.txt を指す。
例題:日曜にフルバックアップ、月〜土は差分バックアップを取得している。木曜の朝に障害が起きた。水曜終業時点に戻すには何本必要か。
答えと考え方 差分バックアップは「直前のフルバックアップ以降の変更分」なので、水曜の差分だけで月・火・水の変更がすべて含まれる。したがって日曜のフル1本+水曜の差分1本の計2本。これが増分バックアップなら、フル1本+月・火・水の増分3本の計4本が必要になる。
出典・根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ミドルウェア・ファイルシステム)
4. 開発ツールとOSSとハードウェア
ソースコードが動く形になるまでの流れ、OSSライセンスの違い、論理回路の読み方が分かるようになります。
人が書いた原始プログラム(ソースコード)は、そのままではCPUが実行できません。全体をまとめて機械語へ翻訳するのがコンパイラ、1行ずつ解釈しながら実行するのがインタプリタです。コンパイラが出す目的プログラム(オブジェクトファイル)は、まだ他のモジュールやライブラリと結びついていないので、それらを結合して実行可能プログラムにするリンカ(連係編集プログラム)が必要です。実行可能プログラムを主記憶へ読み込んで実行できる状態にするのがローダです。コンパイル・リンクなど一連の作業をまとめて自動実行することをビルドといいます。
自分が動かしているコンピュータとは別のアーキテクチャ向けの目的プログラムを生成するコンパイラをクロスコンパイラといい、これを使った開発をクロス開発と呼びます。組込み機器はメモリも処理能力も限られていて開発環境をその上で動かせないため、PC上で開発してから機器へ書き込むクロス開発が一般的です。
開発を支える道具としては、実行を止めながら変数を確かめるデバッガ、実行せずにコードの誤りや規約違反を調べる静的解析ツール、実際に動かして通った経路の割合(網羅率)を測る動的テストツール、テストデータを自動生成するツールなどがあります。
ソースコードが公開され、利用・改変・再配布が認められたソフトウェアがOSS(オープンソースソフトウェア)です。OSI(Open Source Initiative)の定義では、再配布の自由、ソースコードの入手、派生物の許可、利用する人や分野で差別しないことなどが求められます。無償であることは条件ではなく、有償で販売してもかまいません。
OSSのライセンスは、改変・再配布したときに何を求めるかで性格が分かれます。同じライセンスでの公開を求める性質をコピーレフトといいます。GPLは組み込んだプログラム全体に同じライセンスでの公開を求める強いコピーレフト、LGPLはライブラリの改変部分だけを対象にする弱いコピーレフト、MPLはファイル単位のコピーレフトです。これに対しMIT LicenseやApache License 2.0はコピーレフトを持たず、著作権表示などを残せば、改変部分を公開せずに再配布できます。Apache License 2.0には特許の許諾に関する条項がある点が特徴です。
ハードウェアの最小部品が論理ゲートです。AND(両方1なら1)、OR(どちらか1なら1)、NOT(反転)を基本に、その否定であるNAND・NOR、入力が異なるときだけ1になるXOR(排他的論理和)があります。NANDやNORは、両方の入力に同じ信号を入れるとNOTとして働くため、これだけですべての論理回路を作れます(機能的完全性)。入力の組合せと出力の対応をすべて書き出した表が真理値表で、これを図に並べ替えて式を簡単にする手法がカルノー図です。
1桁の2進数の足し算をする回路が半加算器で、和Sは入力の排他的論理和、桁上げCは論理積で表せます。下位からの桁上げも受け取れるようにしたものが全加算器で、半加算器2個とOR1個で作れます。一方、入力の組合せだけで出力が決まる組合せ回路に対し、過去の状態も出力に影響する回路が順序回路で、その基本素子が1ビットを保持するフリップフロップです。
組込みシステムは、機器の中に組み込まれて特定の機能を果たすコンピュータシステムです。決められた時間内に必ず処理を終えることが求められる場面では、タスクの優先度制御と応答時間の保証を重視したリアルタイムOS(RTOS)が使われます。電池で動く機器も多いため、動作周波数や電圧を必要に応じて下げる、使わない回路への電力供給を止めるなど、消費電力を抑える工夫も重要になります。
基本論理ゲートの真理値表(入力A,Bが00/01/10/11のときの出力)と、主なOSSライセンスのコピーレフトの強さ| 区分 | 名前 | 性格 | 詳しく |
|---|
| 論理ゲート | AND | 論理積 | 出力は 0 / 0 / 0 / 1。両方の入力が1のときだけ1 |
| 論理ゲート | OR | 論理和 | 出力は 0 / 1 / 1 / 1。どちらか一方でも1なら1 |
| 論理ゲート | NOT | 否定 | 入力1本。0→1、1→0 と反転する |
| 論理ゲート | NAND | 論理積の否定 | 出力は 1 / 1 / 1 / 0。両入力に同じ信号を入れるとNOTになる |
| 論理ゲート | NOR | 論理和の否定 | 出力は 1 / 0 / 0 / 0。両入力に同じ信号を入れるとNOTになる |
| 論理ゲート | XOR(排他的論理和) | 不一致で1 | 出力は 0 / 1 / 1 / 0。半加算器の和の出力に使う |
| 論理ゲート | XNOR(一致回路) | 一致で1 | 出力は 1 / 0 / 0 / 1。XORの否定 |
| OSSライセンス | MIT License | コピーレフトなし | 著作権表示とライセンス文を残せば、改変部分を公開せずに再配布できる |
| OSSライセンス | Apache License 2.0 | コピーレフトなし | 改変部分の公開は不要。特許の許諾に関する条項をもつ点が特徴 |
| OSSライセンス | LGPL | 弱いコピーレフト | ライブラリを改変した部分は公開が必要。リンクして使う側のプログラムまでは同じ条件を求めない |
| OSSライセンス | MPL 2.0 | ファイル単位のコピーレフト | 改変したファイルだけを同じライセンスで公開すればよい |
| OSSライセンス | GPL | 強いコピーレフト | 組み込んだプログラム全体を同じライセンスでソースコード公開する義務がある |
用語
- コンパイラ
- 原始プログラム全体を解析し、機械語などの目的プログラムに翻訳するソフトウェア。実行前に翻訳を済ませるので実行速度は速いが、修正のたびに翻訳とリンクをやり直す必要がある。
- インタプリタ
- 原始プログラムを1行(1文)ずつ解釈しながら実行するソフトウェア。翻訳を待たずにすぐ試せて誤りの箇所も分かりやすいが、実行のたびに解釈するためコンパイラ方式より実行は遅くなりやすい。
- リンカ
- コンパイラが出力した複数の目的プログラムやライブラリを結合し、1つの実行可能プログラムを作るソフトウェア。連係編集プログラムともいう。実行時に結合する方式を動的リンクという。
- ローダ
- 実行可能プログラムを補助記憶から主記憶へ読み込み、必要なアドレスの調整を行って実行できる状態にするソフトウェア。翻訳や結合は行わない点でコンパイラやリンカと区別する。
- クロスコンパイラ
- コンパイラが動作しているコンピュータとは異なるアーキテクチャ向けの目的プログラムを生成するコンパイラ。資源の限られた組込み機器向けの開発(クロス開発)で使われる。
- OSS
- オープンソースソフトウェア。ソースコードが入手でき、利用・改変・再配布が認められたソフトウェア。OSIの定義では利用する人や分野を差別しないことなどが条件で、無償であることは条件に含まれない。
- コピーレフト
- OSSを改変・再配布するとき、派生物にも同じライセンスを適用してソースコードを公開するよう求める考え方。GPLは強いコピーレフト、LGPLやMPLは範囲を限った弱いコピーレフト、MITやApacheはコピーレフトを持たない。
- 真理値表
- 論理回路の入力のすべての組合せに対して出力がどうなるかを一覧にした表。入力がn本なら行数は2のn乗になる。回路の同一性を確かめたいときは、真理値表が完全に一致するかを調べればよい。
- カルノー図
- 真理値表を、隣り合うマスの入力が1ビットだけ違うように並べ替えた図。出力が1のマスを2のべき乗個のまとまりでくくることで、論理式を機械的に簡単化できる。
- 半加算器
- 1桁の2進数2個を加算する回路。和Sは2入力の排他的論理和、桁上げCは論理積で表される。下位からの桁上げを受け取れないので、多桁の加算には全加算器が必要になる。
- 全加算器
- 1桁の2進数2個と下位からの桁上げの計3入力を加算し、和と上位への桁上げを出力する回路。半加算器2個とOR回路1個で構成でき、桁数だけ並べると多桁の加算器になる。
- フリップフロップ
- 1ビットの情報を保持できる順序回路の基本素子。過去の入力(現在の状態)と今の入力で次の出力が決まる。レジスタやSRAMなどの記憶素子に使われ、RS型・D型・JK型・T型などがある。
- リアルタイムOS
- 決められた時間内に処理を終えることを重視したOS。タスクの優先度に応じた確実な切替えと、割込みへの短い応答時間を提供する。組込みシステムや制御システムで使われる。
例題
例題:NANDゲートだけでNOT回路とAND回路を作るには、それぞれ何個必要か。
答えと考え方 NOTは、NANDの2つの入力に同じ信号Aを与えればよい。A・Aの否定はAの否定なので1個で作れる。ANDは、まずNANDでA・Bの否定を作り(1個)、その出力をNOTとして働くNANDに通して反転する(1個)ので合計2個。同じ考え方でORはNOT2個+NAND1個の計3個になる。
例題:2進数の 1 と 1 を半加算器で足すと、出力はどうなるか。
答えと考え方 和Sは排他的論理和なので1と1で0、桁上げCは論理積なので1と1で1。つまりS=0、C=1で、2進数の10(10進数の2)を表す。半加算器は下位からの桁上げを受け取れないので、2桁目以降には全加算器を使う。
出典・根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(開発ツール・オープンソースソフトウェア)/IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア
確認問題(35問)
四肢択一。「正解と解説」を開くと、正解の理由と他の選択肢が違う理由を確認できます。
問1|OSの中核
オペレーティングシステムの中核として、CPUや主記憶などの資源をタスクに割り当て、タスクの切替えや割込みの処理を受け持つ部分を何と呼ぶか。
- カーネル
- シェル
- デバイスドライバ
- ミドルウェア
正解と解説
正解:A. カーネル資源管理・タスク管理・割込み処理といったOSの中核機能を担う部分がカーネルである。シェルは利用者のコマンドを解釈してOSに伝える外側の部分、デバイスドライバは特定の周辺装置を制御する個別のソフトウェア、ミドルウェアはOSと応用ソフトウェアの間で共通機能を提供するソフトウェアなので、いずれも中核とはいえない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(オペレーティングシステム)
問2|プロセス
プロセスとスレッドの関係の説明として、最も適切なものはどれか。
- スレッドは複数のプロセスをまとめた上位の単位であり、スレッドごとに独立した主記憶空間をもつ。
- プロセスは実行の最小単位なので、1つのプロセスを複数の処理の流れに分けることはできない。
- 1つのプロセスの中に複数のスレッドを作ることができ、同じプロセス内のスレッドは主記憶空間を共有する。
- スレッドはプロセスより多くの資源を個別にもつため、切替えにかかる時間はプロセスの切替えより長い。
正解と解説
正解:C. 1つのプロセスの中に複数のスレッドを作ることができ、同じプロセス内のスレッドは主記憶空間を共有する。スレッドはプロセスの中にある実行の流れであり、同じプロセスのスレッドどうしは主記憶空間を共有するので切替えが軽い。よって、スレッドが上位だとする選択肢と、プロセスを分けられないとする選択肢は誤り。資源を個別にもつのはプロセス側なので、スレッドの切替えのほうが長いという記述も誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(タスク管理)
問3|状態遷移
タスクが実行状態から実行可能状態へ遷移するのは、どのようなときか。
- 入出力の完了を待つために、自らCPUを手放したとき
- 割り当てられた時間を使い切るなどして、他のタスクにCPUを取り上げられたとき
- 要求していた入出力が完了し、完了を知らせる割込みが発生したとき
- スケジューラに選ばれ、CPUを割り当てられたとき
正解と解説
正解:B. 割り当てられた時間を使い切るなどして、他のタスクにCPUを取り上げられたとき実行状態から実行可能状態への遷移はプリエンプション(横取り)であり、タイムクォンタムの使い切りや高優先度タスクの到着がきっかけになる。入出力待ちで自らCPUを手放すのは実行状態から待ち状態への遷移、入出力完了の割込みは待ち状態から実行可能状態への遷移、CPUを割り当てられるのは実行可能状態から実行状態への遷移(ディスパッチ)である。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(タスク管理)
問4|RR方式
ラウンドロビン方式によるタスクスケジューリングの説明として、適切なものはどれか。
- 処理時間の見積りが最も短いタスクから順に実行し、実行を始めたタスクは終わるまでCPUを手放さない。
- 到着した順にタスクを実行し、実行中のタスクは終了するまでCPUを手放さない。
- 一定時間ごとにCPUを取り上げて実行可能待ち行列の最後尾に回し、次のタスクへ切り替える。
- あらかじめ与えた優先度の高いタスクから実行し、同じ優先度のタスクは到着順に実行する。
正解と解説
正解:C. 一定時間ごとにCPUを取り上げて実行可能待ち行列の最後尾に回し、次のタスクへ切り替える。ラウンドロビン方式は、タイムクォンタムと呼ぶ一定時間ごとにCPUを取り上げて待ち行列の最後尾へ回すプリエンプティブな方式で、応答時間が平均化されるため対話処理に向く。処理時間の短い順はSJF(処理時間順)、到着した順はFCFS(到着順)、優先度に従うのは優先度順方式の説明である。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(タスクのスケジューリング)
問5|平均TAT
3つのタスクA, B, Cが同時に到着した。処理時間はAが9ミリ秒、Bが3ミリ秒、Cが6ミリ秒である。処理時間の短い順(SJF)に実行したとき、平均ターンアラウンドタイムは何ミリ秒か。ここで、CPUは1つだけであり、タスクの切替えに要する時間は無視できるものとする。
- 6
- 9
- 10
- 13
正解と解説
正解:C. 10B(3)→C(6)→A(9)の順に実行するので、終了時刻はBが3、Cが3+6=9、Aが9+9=18ミリ秒。全員同時到着なので終了時刻がそのままターンアラウンドタイムで、平均は(3+9+18)÷3=10ミリ秒となる。13ミリ秒はA→B→Cの到着順に実行した場合(9,12,18の平均)、9ミリ秒は最後の終了時刻の半分、6ミリ秒は処理時間の平均であり、いずれも誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(タスクのスケジューリング)
問6|RR計算
時刻0に3つのタスクが同時に到着し、実行可能待ち行列にA, B, Cの順に並んだ。処理時間はAが5ミリ秒、Bが3ミリ秒、Cが4ミリ秒である。タイムクォンタムを2ミリ秒とするラウンドロビン方式で実行したとき、最後に終了するタスクとその終了時刻の組合せはどれか。ここで、CPUは1つだけ、切替え時間は無視でき、CPUを取り上げられたタスクは待ち行列の最後尾に入るものとする。
- タスクA、11ミリ秒
- タスクA、12ミリ秒
- タスクC、11ミリ秒
- タスクC、12ミリ秒
正解と解説
正解:B. タスクA、12ミリ秒実行順はA(0-2)、B(2-4)、C(4-6)、A(6-8)、B(8-9で終了)、C(9-11で終了)、A(11-12で終了)となる。したがって終了時刻はBが9、Cが11、Aが12ミリ秒で、最後に終わるのはタスクAの12ミリ秒である。11ミリ秒はタスクCが終わる時刻であり、最後ではない。処理時間の合計5+3+4=12ミリ秒が最後の終了時刻になる点も確認の助けになる。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(タスクのスケジューリング)
問7|セマフォ
複数のタスクが共有資源を同時に使わないようにする排他制御で用いられるセマフォの説明として、適切なものはどれか。
- 資源の空き数を表す変数を用意し、P操作で獲得、V操作で解放を行い、空きがなければタスクを待たせる。
- 資源を使う順番を設計時に固定してしまい、実行時には獲得できるかどうかの検査を一切行わない。
- デッドロックが起きたことを検知して、関係するタスクを強制終了し資源を解放する仕組みである。
- 主記憶上のページを一定時間ごとに入れ替えて、参照の局所性を高める仕組みである。
正解と解説
正解:A. 資源の空き数を表す変数を用意し、P操作で獲得、V操作で解放を行い、空きがなければタスクを待たせる。セマフォは資源の空き数を表す変数と、獲得のP操作・解放のV操作からなる排他制御の仕組みで、空きがなければ要求したタスクを待ち状態にする。順番を固定して検査しないのは排他制御そのものになっておらず、デッドロックの検知と回復はセマフォとは別の機能、ページの入替えは記憶管理の話であり、いずれも誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(排他制御)
問8|デッドロック
デッドロックが発生するために必要な条件として、適切でないものはどれか。
- 1つの資源を同時に1つのタスクしか使用できない(相互排除)。
- 資源を保持したまま、別の資源が解放されるのを待っている。
- 資源を保持しているタスクから、他のタスクが強制的に横取りできない。
- 待ち合っているタスクが、いずれも同じ優先度をもっている。
正解と解説
正解:D. 待ち合っているタスクが、いずれも同じ優先度をもっている。デッドロックの発生には、相互排除、占有して待つ、横取り不可、循環待ちの4条件がすべて成立する必要がある。優先度が同じかどうかは無関係で、優先度が異なるタスクどうしでも資源の待ちが輪になればデッドロックは起こる。逆に、4条件のどれか1つを崩せば防止でき、資源の獲得順序を統一して循環待ちをなくす方法がよく使われる。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(排他制御・デッドロック)
問9|内部割込み
内部割込み(プログラム割込み)に分類されるものはどれか。
- 入出力装置が処理の完了を知らせたとき
- タイマが設定した時間の経過を知らせたとき
- 電源の異常が検知されたとき
- 0による除算が行われたとき
正解と解説
正解:D. 0による除算が行われたとき内部割込みは、実行中のプログラム自身の実行が原因で発生する割込みで、0による除算、桁あふれ、無効命令、ページフォールト、スーパバイザコールなどが該当する。入出力の完了通知、タイマによる時間経過、電源異常の検知は、実行中のプログラム以外の要因で起こるため、いずれも外部割込みに分類される。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(割込み)
問10|断片化
可変区画方式の実記憶管理で、プログラムの割当てと解放を繰り返すうちに主記憶の空き領域が小さく分断され、合計では十分な空きがあるのに大きなプログラムを置けなくなる現象と、その解消方法の組合せはどれか。
- フラグメンテーション ― コンパクション
- フラグメンテーション ― スラッシング
- ページフォールト ― コンパクション
- スラッシング ― スワッピング
正解と解説
正解:A. フラグメンテーション ― コンパクション空き領域が小さく分断される現象がフラグメンテーションであり、プログラムを前へ詰め直して空きを1か所にまとめるコンパクションで解消できる。スラッシングはページの入替えが多発してスループットが落ちる別の現象で解消方法ではない。ページフォールトは参照したページが主記憶にないときに起きる割込みであり、断片化とは異なる。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(実記憶管理)
問11|オーバレイ
オーバレイ方式の説明として、適切なものはどれか。
- 実行中のプログラムを丸ごと補助記憶へ退避し、必要になったら主記憶へ戻す。
- 主記憶に入りきらない大きなプログラムを、同時には使わない単位に分けておき、必要になった単位だけを同じ領域へ上書きして読み込む。
- 主記憶をあらかじめ決まった大きさの区画に区切っておき、プログラムをどれかの区画に割り当てる。
- 仮想記憶をページに区切り、参照されたページだけを実行時に主記憶へ読み込む。
正解と解説
正解:B. 主記憶に入りきらない大きなプログラムを、同時には使わない単位に分けておき、必要になった単位だけを同じ領域へ上書きして読み込む。オーバレイ方式は、プログラムを同時には使わない単位(セグメント)に分割しておき、必要な単位だけを同じ主記憶領域へ上書きして実行する方式である。プログラムを丸ごと退避・復元するのはスワッピング、決まった大きさに区切るのは固定区画方式、参照されたページだけを読み込むのはデマンドページングであり、いずれも別の方式である。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(実記憶管理)
問12|アドレス変換
仮想記憶方式におけるアドレス変換の説明として、適切なものはどれか。
- コンパイラが翻訳のときに、プログラム中の変数名をすべて主記憶の実アドレスに置き換える。
- リンカが複数の目的プログラムを結合するときに、仮想アドレスを取り除いて実アドレスだけにする。
- OSが実行を始める前に、プログラム中の仮想アドレスをすべて実アドレスへ書き換えてしまう。
- プログラムの実行時に、ページテーブルを使って仮想アドレスを実アドレスへ変換する。
正解と解説
正解:D. プログラムの実行時に、ページテーブルを使って仮想アドレスを実アドレスへ変換する。仮想記憶では、実行時にページテーブルを参照して仮想アドレスを実アドレスへ変換する(動的アドレス変換)。この変換を高速化する専用のキャッシュがTLBである。翻訳時や結合時にアドレスを確定してしまうと、ページが主記憶のどこに載るかを実行中に変えられなくなるため、コンパイラ・リンカが実アドレスを決めるとする選択肢や、実行前にすべて書き換えるとする選択肢は誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(仮想記憶管理)
問13|FIFO3枠
主記憶のページ枠が3つあり、最初はすべて空である。ページ番号の参照が 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 の順に行われるとき、FIFO方式でページを置き換えると、ページフォールトは何回発生するか。ここで、最初にページを読み込むときもページフォールトに数えるものとする。
- 7
- 8
- 9
- 10
正解と解説
正解:C. 9枠の中身を古い順に追うと、1・2・3の読込みで3回、4で最も古い1を追い出して4回目、1で2を、2で3を、5で4を追い出して7回目。続く1と2は枠にあるのでヒット、3で1を、4で2を追い出して9回となり、最後の5はヒットである。10回は同じ参照列をLRU方式で処理したときの回数なので、追い出す相手を取り違えると出てしまう。7回や8回は途中のヒットとフォールトを数え違えたときの値である。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(仮想記憶管理・ページ置換えアルゴリズム)
問14|枠を増やす
ページ番号の参照が 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 の順に行われる環境で、FIFO方式によるページ置換えを行う。ページ枠が4つ(最初はすべて空)の場合、ページフォールトは何回発生するか。ここで、最初にページを読み込むときもページフォールトに数えるものとする。
- 8
- 9
- 10
- 11
正解と解説
正解:C. 10枠4つでFIFOを実行すると、1,2,3,4の読込みで4回、続く1と2はヒット、5で1を追い出し、1で2を、2で3を、3で4を、4で5を、5で1を追い出して合計10回になる。同じ参照列を枠3つで実行すると9回なので、枠を増やしたのにページフォールトが増えている。これがFIFOに特有のベイラディの異常であり、LRUではこの逆転は起こらない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(仮想記憶管理・ページ置換えアルゴリズム)
問15|LRU方式
主記憶のページ枠が3つあり、最初はすべて空である。ページ番号の参照が 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2 の順に行われるとき、LRU方式でページを置き換えると、ページフォールトは何回発生するか。ここで、最初にページを読み込むときもページフォールトに数えるものとする。
- 8
- 9
- 10
- 11
正解と解説
正解:B. 9LRUは最後に参照されてから最も長く使われていないページを追い出す。7・0・1の読込みで3回、2で7を追い出し、0はヒット、3で1を追い出し、0はヒット、4で2を、2で3を、3で0を、0で4を追い出して9回。最後の3と2はヒットである。同じ参照列をFIFOで処理すると10回になるため、10を選ぶと方式の取り違えになる。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(仮想記憶管理・ページ置換えアルゴリズム)
問16|FIFOとLRU
ページ枠が3つ(最初はすべて空)の環境で、ページ番号の参照が 1, 2, 3, 1, 4, 1, 5, 3, 4, 1, 2, 4 の順に行われた。FIFO方式とLRU方式それぞれのページフォールト回数の組合せはどれか。ここで、最初にページを読み込むときもページフォールトに数えるものとする。
- FIFO 9回、LRU 9回
- FIFO 9回、LRU 10回
- FIFO 10回、LRU 10回
- FIFO 10回、LRU 9回
正解と解説
正解:D. FIFO 10回、LRU 9回FIFOは1・2・3で3回、1はヒット、4で1を、1で2を、5で3を、3で4を、4で1を、1で5を、2で3を追い出して10回(最後の4はヒット)。LRUは1・2・3で3回、1はヒット、4で2を、1はヒット、5で3を、3で4を、4で1を、1で5を、2で3を追い出して9回になる。参照の局所性がある列ではLRUのほうが少なくなりやすいが、常にLRUが少ないとは限らない点にも注意する。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(仮想記憶管理・ページ置換えアルゴリズム)
問17|多重度と性能
多重プログラミングの度合いを上げすぎたために、ページの入替えばかりが起きてCPUの利用率が下がり、システム全体のスループットが急激に低下する現象はどれか。
- フラグメンテーション
- デッドロック
- ガーベジコレクション
- スラッシング
正解と解説
正解:D. スラッシング各タスクが必要とするページを主記憶に置ききれなくなり、ページイン・ページアウトが多発して処理が進まなくなる現象がスラッシングである。フラグメンテーションは空き領域が分断される現象、デッドロックは互いに資源の解放を待って止まる状態、ガーベジコレクションは使われなくなった領域を回収する処理であり、いずれもページの入替えの多発とは異なる。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(仮想記憶管理)
問18|ミドルウェア
ミドルウェアの説明として、適切なものはどれか。
- ハードウェアを直接制御し、プロセッサや主記憶などの資源の割当てと割込み処理を受け持つOSの中核部分である。
- OSと応用ソフトウェアの間に位置し、データベース管理やトランザクション管理など、多くの応用ソフトウェアが共通して使う機能を提供する。
- 利用者が入力したコマンドを解釈して、OSへその実行を依頼する、対話操作の窓口となるプログラムである。
- 原始プログラムを構文解析して、計算機が直接実行できる機械語などの目的プログラムに翻訳するプログラムである。
正解と解説
正解:B. OSと応用ソフトウェアの間に位置し、データベース管理やトランザクション管理など、多くの応用ソフトウェアが共通して使う機能を提供する。ミドルウェアはOSと応用ソフトウェアの中間に位置し、DBMSやトランザクションモニタ、Webアプリケーションサーバのように多くのアプリが共通して使う機能を提供する。資源割当てと割込み処理を担うのはカーネル、コマンドを解釈するのはシェル、原始プログラムを翻訳するのはコンパイラであり、いずれもミドルウェアではない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ミドルウェア)
問19|シェル
OSにおけるシェルの役割の説明として、適切なものはどれか。
- 利用者が入力したコマンドを解釈し、カーネルに実行を依頼する
- CPUの実行権をどのタスクに与えるかを決める
- 主記憶と補助記憶の間でページを入れ替える
- ファイルの物理的な格納位置を管理し、空き領域を割り当てる
正解と解説
正解:A. 利用者が入力したコマンドを解釈し、カーネルに実行を依頼するシェルは利用者とカーネルの間に立ち、入力されたコマンドを解釈してカーネルに実行を依頼する部分である。実行権の割当てはタスクスケジューラ、ページの入替えは仮想記憶管理、格納位置と空き領域の管理はファイル管理の仕事で、いずれもカーネル側の機能であってシェルの役割ではない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(オペレーティングシステム)
問20|API
ソフトウェアの機能を外部のプログラムから呼び出すための取決めであるAPIの説明として、適切なものはどれか。
- 呼び出す側が、呼び出される側の内部の実装コードをすべて読んで理解していることが前提になる。
- OSの機能を呼び出すためだけの仕組みであり、ライブラリやWebサービスの機能の呼出しには使えない。
- 原始プログラムを機械語に翻訳するときの、最適化の方式を定めたものである。
- 関数名・引数・戻り値・データ形式などを定めた取決めであり、内部の作りを知らなくても機能を利用できる。
正解と解説
正解:D. 関数名・引数・戻り値・データ形式などを定めた取決めであり、内部の作りを知らなくても機能を利用できる。APIは、ソフトウェアの機能を外から呼び出すための約束事で、関数名・引数・戻り値・データ形式などを定める。内部の実装が隠されるので、呼び出す側は中身を読まずに部品として使え、実装が変わってもAPIが同じなら影響を受けない。OSの機能だけでなくライブラリやWeb API(HTTPで呼び出す)にも使われ、翻訳時の最適化方式とは無関係である。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ミドルウェア・API)
問21|ファイル編成
レコードのキーの値から一定の計算によって格納位置を求め、先頭から順に探すことなく目的のレコードへ直接アクセスできるファイル編成はどれか。
- 順編成ファイル
- 索引編成ファイル
- 区分編成ファイル
- 直接編成ファイル
正解と解説
正解:D. 直接編成ファイルキーの値をハッシュ関数などで格納位置に対応づけるのが直接編成ファイルで、計算した位置へ直接アクセスできる。順編成は先頭から順に読む順次アクセスだけ、索引編成は索引を引いてから読むので計算ではなく索引の探索を伴う。区分編成はメンバとディレクトリからなり、プログラムライブラリなどに使われる編成である。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ファイルシステム・ファイル編成)
問22|相対パス
次のディレクトリ構成において、カレントディレクトリが /home/user1/work であるとき、ファイル report.txt を相対パスで正しく指定したものはどれか。ここで、ディレクトリの区切りは「/」、カレントディレクトリは「.」、親ディレクトリは「..」で表すものとする。
ディレクトリ構成(「/」はルートディレクトリ)
/+-- home| +-- user1| | +-- docs| | | +-- report.txt| | | +-- memo.txt| | +-- work| | +-- data.csv| +-- user2| +-- docs| +-- plan.txt+-- var +-- log +-- sys.log
- ./docs/report.txt
- ../docs/report.txt
- ../../docs/report.txt
- /docs/report.txt
正解と解説
正解:B. ../docs/report.txtカレントの /home/user1/work から「..」で1階層上がると /home/user1 になり、そこから docs/report.txt をたどれば目的のファイルに届く。「./docs/report.txt」はカレント直下のdocsを指すが work の下にdocsはない。「../../docs/report.txt」は2階層上がって /home/docs/report.txt、「/docs/report.txt」はルート直下を指しており、いずれも存在しない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ファイルシステム・ディレクトリ)
問23|相対パス2
次のディレクトリ構成において、カレントディレクトリが /home/user2/docs であるとき、ファイル data.csv を相対パスで正しく指定したものはどれか。ここで、ディレクトリの区切りは「/」、カレントディレクトリは「.」、親ディレクトリは「..」で表すものとする。
ディレクトリ構成(「/」はルートディレクトリ)
/+-- home| +-- user1| | +-- docs| | | +-- report.txt| | | +-- memo.txt| | +-- work| | +-- data.csv| +-- user2| +-- docs| +-- plan.txt+-- var +-- log +-- sys.log
- ../../user1/work/data.csv
- ../user1/work/data.csv
- ../../../user1/work/data.csv
- ../../user1/data.csv
正解と解説
正解:A. ../../user1/work/data.csvカレントの /home/user2/docs から「..」を2つ書くと /home まで上がり、そこから user1/work/data.csv とたどればよい。「..」が1つだと /home/user2 が起点になり /home/user2/user1/… を指してしまう。「..」が3つだとルートまで上がって /user1/… となる。最後の選択肢は /home/user1/data.csv を指し、work を通っていないので誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ファイルシステム・ディレクトリ)
問24|パスの解釈
次のディレクトリ構成において、カレントディレクトリが /var/log であるとき、相対パス ../../home/user1/docs/memo.txt が指すファイルを絶対パスで表したものはどれか。ここで、ディレクトリの区切りは「/」、カレントディレクトリは「.」、親ディレクトリは「..」で表すものとする。
ディレクトリ構成(「/」はルートディレクトリ)
/+-- home| +-- user1| | +-- docs| | | +-- report.txt| | | +-- memo.txt| | +-- work| | +-- data.csv| +-- user2| +-- docs| +-- plan.txt+-- var +-- log +-- sys.log
- /home/user1/docs/memo.txt
- /var/home/user1/docs/memo.txt
- /home/user1/memo.txt
- /var/log/home/user1/docs/memo.txt
正解と解説
正解:A. /home/user1/docs/memo.txtカレントの /var/log から「..」で /var、もう1つの「..」でルート「/」まで上がる。そこから home/user1/docs/memo.txt をたどるので /home/user1/docs/memo.txt となる。「..」を1つしか数えないと /var/home/…、「..」を無視して単純に連結すると /var/log/home/… になり、docs を飛ばすと /home/user1/memo.txt になってしまう。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ファイルシステム・ディレクトリ)
問25|増分復元
毎週日曜日の夜にフルバックアップを取得し、月曜日から土曜日までは毎日、前日のバックアップ以降に変更されたファイルだけを保存する増分バックアップを取得している。金曜日の朝に磁気ディスクが故障したとき、木曜日の夜の状態に復元するために必要なバックアップは何本か。
- 1本
- 2本
- 5本
- 7本
正解と解説
正解:C. 5本増分バックアップは前回のバックアップ以降の変更分しか含まないため、日曜のフルバックアップを復元したあと、月・火・水・木の増分を古い順に順次適用する必要がある。よって1+4=5本となる。2本で済むのは差分バックアップ(フル+最新の差分)の場合であり、1本はフルバックアップだけを毎日取っている場合、7本は1週間分すべてを数えた誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(ファイルシステム・バックアップ)
問26|リンカ
複数の目的プログラム(オブジェクトファイル)やライブラリを結合して、1つの実行可能プログラムを作るソフトウェアはどれか。
- コンパイラ
- リンカ
- ローダ
- インタプリタ
正解と解説
正解:B. リンカ目的プログラムやライブラリを結合して実行可能プログラムを作るのがリンカ(連係編集プログラム)である。コンパイラは原始プログラムを目的プログラムへ翻訳する段階、ローダは出来上がった実行可能プログラムを主記憶へ読み込んで実行できる状態にする段階を担当する。インタプリタは原始プログラムを1行ずつ解釈して実行するので、そもそも結合の工程を持たない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(開発ツール・言語処理ツール)
問27|クロス開発
組込みシステムの開発でクロスコンパイラを使ったクロス開発が行われる主な理由はどれか。
- 対象の組込み機器はメモリや処理能力が限られていて開発環境を機器上で動かせないので、PCなど別のコンピュータで対象機器向けの目的プログラムを生成する必要があるから。
- 組込み機器では高水準言語が一切使えず、対象となる機器の機械語やアセンブリ言語だけでプログラムを記述しなければならないから。
- 組込み機器で動作するOSは必ずオープンソースであり、ソースコードの公開が義務付けられているから。
- クロスコンパイラを使うと、目的プログラムを作らなくても、実行時に原始プログラムを1行ずつ解釈しながら動かせるようになるから。
正解と解説
正解:A. 対象の組込み機器はメモリや処理能力が限られていて開発環境を機器上で動かせないので、PCなど別のコンピュータで対象機器向けの目的プログラムを生成する必要があるから。クロスコンパイラは、動作しているコンピュータとは別のアーキテクチャ向けの目的プログラムを生成するコンパイラであり、資源の乏しい組込み機器の開発で使われる。組込み機器でもC言語などの高水準言語は広く使われ、OSがオープンソースである必要もない。1行ずつ解釈して実行するのはインタプリタの働きで、クロスコンパイラとは関係がない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(開発ツール)/IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(組込みシステム)
問28|OSSの定義
OSI(Open Source Initiative)が示すオープンソースの定義に照らして、オープンソースソフトウェアの条件として適切なものはどれか。
- ソースコードが入手でき、利用する人や分野を限定せずに再配布や改変が認められている。
- 必ず無償で配布しなければならず、有償で販売してはならない。
- 個人の利用に限って認められ、企業での商用利用は禁止される。
- 改変したソースコードは、必ず元の作者に送付して承認を得なければならない。
正解と解説
正解:A. ソースコードが入手でき、利用する人や分野を限定せずに再配布や改変が認められている。オープンソースの定義は、再配布の自由、ソースコードの入手、派生物の作成と配布の許可、個人やグループ・利用分野で差別しないことなどを求めている。無償であることは条件ではなく、有償で販売してもよい。商用利用の禁止や、改変の事前承認を求めることは「差別しない」「派生物を認める」という条件に反するため、いずれもオープンソースとは認められない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(オープンソースソフトウェア)
問29|コピーレフト
GPLに代表されるコピーレフト型のOSSライセンスの特徴として、適切なものはどれか。
- 著作権表示と免責条項さえ残せば、改変したソースコードを公開しないまま再配布してよい。
- 特許の許諾条項を含む点が特徴で、派生物に同じライセンスを求めず、改変した部分のソースコード公開も求めない。
- そのソフトウェアを組み込んだり改変したりしたプログラムを配布するときは、同じライセンスでソースコードを公開しなければならない。
- 商用利用と有償での再配布を禁止し、非営利の目的に限って利用と再配布を認める。
正解と解説
正解:C. そのソフトウェアを組み込んだり改変したりしたプログラムを配布するときは、同じライセンスでソースコードを公開しなければならない。コピーレフトとは、派生物にも同じライセンスを引き継がせ、ソースコードの公開を求める考え方で、GPLはその代表である。著作権表示だけでよいのはMIT License、特許条項を持ち改変部分の公開を求めないのはApache License 2.0の特徴である。GPLは商用利用を禁じてはおらず、非営利限定とする選択肢はオープンソースの定義にも反する。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類5:ソフトウェア(オープンソースソフトウェア・OSSのライセンス)
問30|真理値表
2つの入力A, Bに対する出力Xが、次の真理値表のようになる回路はどれか。
入力A, Bと出力Xの真理値表
A B | X ------+--- 0 0 | 1 0 1 | 0 1 0 | 0 1 1 | 1
- OR回路(論理和)
- 一致回路(排他的論理和の否定)
- NAND回路(論理積の否定)
- 排他的論理和(XOR)回路
正解と解説
正解:B. 一致回路(排他的論理和の否定)AとBが等しいとき1、異なるとき0になっているので、これは一致回路(XNOR、排他的論理和の否定)である。OR回路の出力は0,1,1,1、NAND回路は1,1,1,0、排他的論理和は0,1,1,0であり、いずれも表と一致しない。特に排他的論理和は出力がちょうど反転した形になるので、否定であることを見落とさないようにする。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(論理回路)
問31|NANDでOR
2入力のNANDゲートだけを使ってOR回路を構成するとき、必要なNANDゲートの最小個数はどれか。ここで、1つの入力信号を分岐させて同じゲートの2つの入力に与えてもよいものとする。
- 1個
- 2個
- 3個
- 4個
正解と解説
正解:C. 3個NANDの2入力に同じ信号Aを与えると出力はAの否定になるので、NAND1個でNOTが作れる。ド・モルガンの法則よりA+B=(Aの否定・Bの否定)の否定なので、Aの否定用に1個、Bの否定用に1個、その2つを入力とするNANDが1個で、合計3個必要である。1個ではNOTしか作れず、2個ではAND回路(NANDの出力を反転)にしかならない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(論理回路)
問32|半加算器
半加算器において、2つの入力A, Bに対する桁上げ出力C(キャリー)を表す論理式はどれか。
- AとBの論理積
- AとBの論理和
- AとBの排他的論理和
- AとBの論理積の否定
正解と解説
正解:A. AとBの論理積半加算器は1桁の2進数2個を足す回路で、A=B=1のときだけ桁上げが起きる。これは論理積そのものである。和の出力Sのほうは、入力が異なるときだけ1になる排他的論理和で表される。論理和ではA=1,B=0のときにも1になってしまい、論理積の否定(NAND)は出力が逆になるため、いずれも桁上げにはならない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(論理回路・加算器)
問33|全加算器
全加算器に、入力A=1、入力B=0、下位からの桁上げ入力Cin=1 を与えたとき、和の出力Sと上位への桁上げ出力Cout の組合せはどれか。
- S=0、Cout=0
- S=0、Cout=1
- S=1、Cout=0
- S=1、Cout=1
正解と解説
正解:B. S=0、Cout=1全加算器は3つの入力の合計を2桁の2進数で出力する。1+0+1=2は2進数で10なので、下位のS=0、上位のCout=1となる。S=1になるのは1が奇数個のとき(入力の排他的論理和)なので、1が2個の今回はS=0である。またCoutは1が2個以上のときに1になるため、Cout=0とする選択肢は誤りである。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(論理回路・加算器)
問34|論理式簡単化
論理式 (Aの否定・B)+(A・B)+(A・Bの否定) を簡単化したものはどれか。ここで「・」は論理積、「+」は論理和を表す。
- A・B
- AとBの排他的論理和
- Aの否定 + Bの否定
- A + B
正解と解説
正解:D. A + B入力(A,B)が(0,0)のときだけ3つの項がすべて0になり、(0,1)(1,0)(1,1)ではいずれかの項が1になるので、出力は0,1,1,1すなわちA+Bである。カルノー図でも、A=1の行とB=1の列がすべて1になるので2つのまとまりでくくれてA+Bとなる。A・Bは(1,1)だけ、排他的論理和は(1,1)で0、Aの否定+Bの否定は(0,0)で1になるため、いずれも一致しない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(論理回路・論理式の簡単化)
問35|FF
フリップフロップの説明として、適切なものはどれか。
- 入力の組合せだけで出力が決まる組合せ回路であり、主に加算のために使われる。
- アナログ信号をディジタル信号に変換するための回路である。
- 1ビットの情報を保持できる順序回路の基本素子であり、レジスタなどの記憶素子に使われる。
- 電源を切っても内容が消えない不揮発性の記憶素子であり、フラッシュメモリの記憶単位である。
正解と解説
正解:C. 1ビットの情報を保持できる順序回路の基本素子であり、レジスタなどの記憶素子に使われる。フリップフロップは1ビットを保持する順序回路の基本素子で、現在の状態と入力によって次の状態が決まる。レジスタやSRAMなどに使われる。入力の組合せだけで出力が決まるのは加算器などの組合せ回路、アナログとディジタルの変換はA/D変換器の役割である。フリップフロップは電源を切ると内容が失われる揮発性であり、フラッシュメモリの記憶単位でもない。
根拠:IPA 基本情報技術者試験 シラバス Ver.9.2 大分類2:コンピュータシステム 中分類6:ハードウェア(論理回路・順序回路)
演習:この章の問題を解く
ランダム出題の演習ツールです(JavaScript が有効な場合に動きます)。上の「確認問題」はそのままでもすべて読めます。
※ 解説は学習用の情報提供です。最新の出題範囲・制度は必ずIPAの公式発表をご確認ください。
※ 出題はIPA公開のシラバスVer.9.2(2026年1月8日適用)に沿った仮の宿 学習室のオリジナル問題です。擬似言語の記述形式もIPA公開の仕様に合わせています。試験制度・実施要項はIPAの公式発表をご確認ください(2027年度春ごろに新試験制度へ移行予定)。