Posted on: Written by: K-Sato
⚠️ This article was posted over 2 years ago. The information might be outdated. ⚠️

Table of Contents

ソフトウェアと OSS

ソフトウェアの分類

  • 基本ソフトウェア:ハードウェアやデータなどの各種の資源管理と、その効率的な使用を実現。(広義の OS(Operating System))
  • 応用ソフトウェア:ある特定の目的の為に作成されたソフトウェア。(Word, Excel 等)
  • ミドルウェア:基本ソフトウェアと応用ソフトウェアの中間で動作する。統一的なインタフェースや、便利なコンピュータ利用機能を応用ソフトウェアから利用できるようにする為のソフトウェア。(DBMS 等)

基本ソフトウェア

基本ソフトウェアはさらに制御プログラム,言語プロセッサ,サービスプログラムにわかれる。

  • 制御プログラム:ハードウェアの資源状態を監視して、コンピュータシステムの効率的利用を実現する為のソフトウェア(狭義の OS)(ジョブ管理、タスク管理、記憶管理等を行う。)
  • 言語プロセッサ:プログラム言語を機械語に変換する為のソフトウェア。
  • サービスプログラム:OS や応用ソフトウェアの機能を向上させる為の補助的なソフトウェア。

OS の目的

  • (1)ハードウェア資源の有効活用
    上記記載の通り、ハードウェア資源やソフトウェア資源の有効活用は OS の重要な役割である。
  • (2)処理能力の向上
    具体的には以下の指標の向上を目指す。
名称概要
スループット(Throughput)単位時間あたりに処理される仕事の量。
ターンアラウンドタイム(Trunaround Time)一連の仕事をコンピュータに依頼してから完全な処理結果を受け取るまでに掛かる時間。
レスポンスタイム(Response Time)コンピュータシステムに対して問い合わせ、または要求の終わりを指示してから、利用者の端末に最初の処理結果で始めるまでの時間。
  • (3)信頼性の向上
    RASIS(信頼性(Reliability)可用性(Availability)保守性(Serviceability)保全性(Integrity)安全性(Security))と呼ばれる指標を用いてシステムを安全かつ安定的に運用する。
  • (4)開発効率の向上
    API(Application Program Interface)はアプリケーションから OS が用意する各機能を利用する為の仕組み。
  • (5)操作性の向上
    GUI(Graphical User Interface)は視覚的にコンピュータを操作するインタフェースの事。これによって初心者等でもコンピュータの操作が容易になる。反対にキャラクタベースのインタフェースをCUI(Character User Interface)と呼ぶ。

OSS(Open Source Software)

  • OSS:ソースコードを公開しているソフトウェア。無保証を原則としていて、誰でも自由にソースコードを改変し再頒布する事でソフトウェアを発展させていく考えがある。

(再頒布先の個人やグループを限定してはならない特定の利用分野に限定してはならない等の一定の条件がある。再頒布の際には有料でも良い。)

OSS のライセンス

  • BSDライセンス:「改変後の再頒布の際に元のソフトの著作権表示部分やライセンス条文は残す事」、「無保証である事」の 2 つの制約がある。
  • GPL(General Public License):コピーレフトという制約がある。
  • コピーレフト:著作権を保持したままプログラムの複製・改変・頒布を制限せず、そのプログラムから派生した二次著作物にはオリジナルと同じ頒布条件を適応するとういう考え方。

ジョブ管理とタスク管理

  • ジョブ:利用者がコンピュータに指示する仕事の単位。
  • タスク:コンピュータから見た仕事の単位。(プロセスと呼ばれる事もある。) 下記のように利用者から与えたジョブをコンピュータが分解してタスク単位で処理する。

image

  • スプーリング:入出力データを一旦磁気ディスク等に蓄え、CPU や出力装置の空き時間に処理することで CPU を有効活用する事。(CPU と入出力装置では処理速度に大きな差がある為。)

タスクの状態遷移

タスク管理においてタスクは生成されてから、以下の 3 つの状態を移り変わりながら実行され、消滅する。

image

タスクの状態概要
実行可能状態(Ready)CPU の使用権が与えられるのを待っている状態。(この状態のタスクは一般に複数個存在し、待ち行列を形成している。)
実行状態(Run)CPU の使用権が与えられ、実行している状態。CPU が 1 つしかない場合はこの状態のタスクは 1 つだけ。
待ち状態(Wait)他のタスクが入出力装置を使用しているので、終了しているのを待っている状態。

ディスパッチャ

  • ディスパチャ:タスク管理の機能の中で実行可能状態のタスクの中から次に実行すべきタスクに使用権を与えて、実行状態にする事。
    ディスパッチャには以下の様な種類が存在する。
方式概要
優先度方式優先度の高いタスクから CPU の使用権を与える方式。(プライオリティ方式)
ラウンドロビン方式一定の時間が経過すると順に CPU の使用権を与えていく方式。

マルチプログラミング

  • マルチプログラミング(マルチタスク):あるプログラムの実行中に入出力などの為に待ちが生じた場合に、CPU を他のプログラムの実行に割り当てる事で有効活用する方式(見かけ上複数のタスクを並行に実行する。)

マルチタスクの方式には以下の様な種類が存在する。

方式概要
プリエンティブOS がタスクに CPU の使用権を与える方式。
ノンプリエンティブタスクが自発的に使用後の CPU を解放する方式。
  • 割り込み処理:実行中のプログラムを中断し、必要とする別の処理に切り替える事。
    割り込みは原因により実行中のプログラムが原因で起こる内部割り込みと実行中のプログラムに関係なく起こる外部割り込みに分けられる。

内部割り込み

  • プログラム読み込み:記憶保護例外・不正な命令の実行などが発生した場合に起こる割り込み。
  • SVC(Supervisor Call)割り込み:システムコール命令の実行をした際に起こる割り込み。(アプリケーションが OS に入出力を要求した際などに発生する。)

外部割り込み

  • 機械チェック割り込み:ハードウェアの故障などにより発生する割り込み。
  • 入出力割り込み:入出力動作が終了した際に起こる割り込み。
  • タイマ割り込み:プログラムの実行時間が設定時間を超過した時に起こる割り込み。
  • コンソール割り込み:オペレータが介入した際に起こる割り込み。

記憶管理

プログラムを主記憶に読み込んでおき、CPU が順次読み出し、実行する方式。
実行が終了すると主記憶上のプログラムを消す(主記憶の解放)事を プログラム記憶方式(プログラム内蔵方式)と呼ぶ。

実記憶管理

  • 実記憶管理:主記憶のどの場所に、どのようにプログラムを割り当てるかの方法。

実記憶管理の方式

  • 区画方式:主記憶をあらかじめ固定した区画に分割し、各プログラムはある大きさの区画にロードされる方式。(区画の余った領域は使用不可能。)
  • 可変区画方式:各プログラムが必要とする大きさの区画を割り当て、ロードされる方式。(区画は可変になり、余った領域も使用可能。)
  • オーバレイ方式:あらかじめプログラムをセグメントとして分割しておき、実行時に必要な部分のみロードする方式。

仮装記憶管理

  • 仮想記憶管理:主記憶(高速で小容量)と仮想記憶(低速で大容量な磁気ディスクを使用)を組み合わせ、見かけ上大容量のアドレス空間を提供するシステム。

仮装記憶管理の方式

  • ページング方式:主記憶とプログラムを固定長であるページに分割し、効率よく記憶管理する方式。仮想記憶(補助記憶)からページ単位でロード(ページイン)、退避(ページアウト)を行う事で、大きなプログラムでも必要部分ごとに処理できる。(容量の小さい主記憶を効率的に使用可能。)

image

上記のページインページアウトを総じてページングと呼びます。
ページング方式で、ページの置き換えの発生頻度が高くなり、システムの処理能力が急激に低下する事をスラッシングと呼ぶ。

フラグメンテーションとガーベッジコレクション

  • フラグメンテーション:OS が主記憶領域の獲得と解放を繰り返す事によって、細切の未使用領域が多数できてしまう現象の事。
  • ガーベッジコレクション(メモリコンパクション):細切の未使用領域を連続した 1 つの領域にまとめ、再び利用可能にする処理の事。
  • メモリリーク:動作中に確保した記憶が解放されない事。主記憶中の利用可能な部分が減少してしまう。ガーベッジコレクションを行うか、再起動をする必要がある。

ファイル管理

ファイル管理も OS の仕事。プログラムやデータをファイル単位で格納し、さらにそれぞれのファイルを階層構造のディレクトリを用いて管理している。

  • ルートディレクトリ:階層構造の最上位いあるディレクトリの事。
  • サブディレクトリ:ディレクトリの下位に作成されたディレクトリの事。
  • カレントディレクトリ:現在操作対象としているディレクトリの事。

パス指定

  • パス(path):目的とするディレクトリやファイルまでの道筋の事。
  • 絶対パス:ルートディレクトリを基点としたパスの指定方法。
  • 相対パス:カレントディレクトリを基点としたパスの指定方法。

プログラムの性質

  • 再配置可能(リロケータブル):主記憶上のどこのアドレスに配置しても実行可能なプログラムの性質。
  • 再入可能(リエントラント):同時に複数のタスク(プロセス)が共有して実行しても正しい結果が得られる性質。
  • 再使用可能(リユーザブル):1度実行した後に再ロードせずに使用可能な性質。
  • 再帰的(リカーシブ):実行中に自分自身を呼び出すことができる性質。

関数

  • 関数:一連の処理をまとめて扱えるようにしたもの。
  • 再帰関数:再帰関数とは、関数の中からその関数自身を呼び出すような処理を行う関数。(終了の条件と値+処理を繰り返す際の条件と計算式の2つを必ず定義する。)

プログラミング言語

  • 機械語:1 と 0 で構成されるコンピュータが理解できる唯一の言語。
  • アセンブラ言語:機械語を 1 対 1 で置き換えた言語。
  • 高水準言語:人間が理解しやすいように自然言語に近い形で記述した言語(C, Ruby, Java…)

言語プロセッサ

  • 言語プロセッサ:高水準言語を機械語に翻訳するためのプログラムの総称
  • 原始プログラム:、人間がプログラミング言語を用いて記述したコンピュータプログラムの元となる一連の文字の羅列.(ソースコード(Source code)、ソースプログラム)
言語プロセッサ名称概要
アセンブラアセンブラ言語で書かれたプログラムを機械語に翻訳するプログラム。
インタプリタ高水準言語で書かれたプログラムを、1命令ずつ解釈して実行するプログラム。
コンパイラ高水準言語で書かれたプログラムを、一括して機械語に翻訳するプログラム。
ジェネレータ指定されたパラメタから、処理の目的に応じたプログラムを自動生成するプログラム。

ソフトウェアの作成手順

# 高水準言語でソースコードを作成した後、コンパイル方式によって実行するまでの手順。

[ソースコード]
↓ コンパイル(コンパイラが行う。)
[目的プログラム]
↓ リンク(リンカが行う。)
[ロードモジュール]
↓ ロード
[実行]
  • コンパイル:ソースコードから目的プログラムを作成する作業。
# コンパイル手順
[字句解析][構文解析][意味解析][最適化][コード生成]

(1)字句解析:単語単位で考える。
(2)構文解析:文法的な構文を考える。
(3)意味解析:意味を考える。
(4)最適化:さらにいい訳がないか考える。
(5)コード生成:完成。
  • リンク(連携編集):目的プログラムを組み合わせて1つのロードモジュールを作成する作業。(リンカ)が担当する。
    ロードモジュールとはメインメモリにロードできる実行ファイル形式のモジュールのこと。
    モジュールとはハードウェアやソフトウェアを構成する個々の部品のこと。

  • 動的リンキング:プログラム実行中に必要となった時点でリンクする。

  • 静的リンキング:プログラム実行前の連携編集時にあらかじめリンクしておく。

  • ロード:実行に先立ってロードモジュールを主記憶上に持ってくる作業。(ローダが担当する。)

マルチメディアと標準化

  • マークアップ言語:文章論理構造、意味構造を簡単なマークで記述。
  • SGML(Standard Generalized Markup Language):HTML や XML の元となったマークアップ言語。
  • HTML(Hyper Text Markup Language):Web ページを記述するための言語。
  • XML(eXtensible Markup Language):双方向リンク可能なハイパテキスト記述言語。(ユーザ独自のタグが使用可能。)

ファイルの圧縮・解凍

  • 圧縮:記録されている情報を失わずに、ファイルのデータサイズを小さくすること。
  • 解凍(伸長):圧縮されたファイルを元に戻す事。
  • 可逆圧縮:圧縮したファイルを完全に元に戻す事。
  • 非可逆圧縮:圧縮したファイルが完全には元に戻らずに劣化してしまう事。

標準化団体

  • ISO(国際標準化機構):工業及び技術に関する国際規格の策定と国家間の調整を行う。
  • IEEE(米国電気電子学会):電気・電子に関する非営利団体。
  • JISC(日本工業標準調査会):経済産業省に設置されている審議会で、工業標準化法に基づいて工業標準化に関する調査・審査を行う。
  • ISO9000シリーズ:ISO が制定した品質マネジメントに関しての国際規格。
  • ISO14000シリーズ:ISO が制定した環境マネジメントシステムに関しての国際規格。

About the author

I am a web-developer based somewhere on earth. I primarily code in TypeScript, Go and Ruby at work. React, RoR and Gin are my go-to Frameworks.