Open5

システムプログラミング的な話の雑メモ

mohiramohira

README

システムプログラミングとかコンピュータ的な用語をまとめたり、現状の認識を書いたりするところ。

mohiramohira

「プロセス」

『詳解 システム・パフォーマンス』の定義

プロセス( process ): OS の抽象概念で、プログラムを実行するための環境。
『詳解 システム・パフォーマンス』p.86

この説明、いまなら分かる。

プロセスは、ある意味では初期のコンピュータを仮想化したものになっている。初期のコンピュータは1個のプログラムしか実行できず、それらのプログラムはそれぞれ自分のレジスタとスタックを持っていた。
『詳解 システム・パフォーマンス』 p.93

こういう話がありがたい。現代のコンピュータは発展しているからね。

「初期のコンピュータ」を仮想化しているから、ファイルディスクリプタの対応表とか、仮想メモリ(=記憶領域=>レジスタの役割?)とか持っているのも納得感ある。まあ、仮想化の話も同時に出てくるかやらややこしいってのもあるな。

あと、プロセスがなくてもコンピュータが成立することに気づくまで時間がかかった気がする。

『ふつうのLinuxプログラミング』の定義

「プロセス」とは、簡単に言えば、動作中のプログラムのことです。
それに対して、「プログラムは、ファイルのような形態で存在しているデータのことも含む言葉です。
『ふつうのLinuxプログラミング』 p.45

ほうほう。

『コンピュータの構成と設計 第5版 』

ページ・テーブルはプログラム・カウンタやレジスタと共に仮想マシンの状態(ステート)を表す.
別の仮想マシンにプロセッサを引き渡す場合,このステートを退避しなければならない.
後でこのステートを復元すれば,前の仮想マシンの実行を再開することができる.
このステートはしばしば**プロセス(process)**とも呼ばれる.

デイビッド・A・パターソン. コンピュータの構成と設計 第5版 上・下電子合本版 (Japanese Edition) (Kindle の位置No.9771-9774). Kindle 版.

仮想マシンの状態を表すものがプロセスという考え?
たしかに、状態を復元できるのであれば、中断しても問題ない雰囲気。

プロセスは1つ以上のスレッドを含み,アドレス空間とオペレーティング・システム・ステートを保持する.
そのため,プロセス・スイッチの際には通常はオペレーティング・システムを呼び出す.
それと対照的に,スレッド・スイッチの際にはオペレーティング・システムを呼び出さない.

mohiramohira

プログラム

  • 実行ファイルとの違いは? ほぼ同義というイメージ。(そして、「プログラム」の意味が広すぎる)
  • 「実行ファイルを実行する」ってフレーズは正しい?

実行ファイルの認識

  • 物理的なこと
    • 物理的には単なるデータ(バイナリ)
    • もうちょっというと、2つに区分できそう
      • データ(というか、オペランドっていう感じのニュアンス)
      • CPU命令の集合(列?)
        • CPU命令自体もデータだけどね
  • 居場所
    • 普段はストレージに居る
    • 実行ファイルを「実行する」ときに、メモリにロードされる
  • うーん、やっぱり「実行ファイル」と「プログラム」は同義な気がするな? (というか、違いを見いだせていない)

「プログラム」は静的、「プロセス」は動的という雰囲気がある

「プロセス」とは、簡単に言えば、動作中のプログラムのことです。
それに対して、「プログラムは、ファイルのような形態で存在しているデータのことも含む言葉です。
『ふつうのLinuxプログラミング』 p.45

mohiramohira

インターリーブ(interleave)

英単語的な話

interleave【ìnter・léave】

1〈本に〉間(あい)紙(など)をとじ込む.
2〈…に〉〔…を〕(さし)はさむ 〔with〕.

IT分野におけるインターリーブ

インターリーブ(interleaving)とは - IT用語辞典 e-Words

インターリーブとは、データ入出力や通信において連続的に信号やデータを扱う際、時間や空間などの何らかの物理的な広がりに対してわざと不連続にデータを配置する手法。転送速度の向上や誤り訂正などのために行われる。

高速化の手段としてのメモリインターリーブ

メモリインターリーブ(memory interleaving)とは - IT用語辞典 e-Words

メモリインターリーブとは、コンピュータのメインメモリ(RAM)へのアクセスを高速化する手法の一つで、複数のメモリ装置(メモリバンク/メモリモジュール)をまたぐようにメモリアドレスを割り当て、読み書き動作を同時並行に行う方式。

あるデータを、わざと不連続に配置するってこと。その単位をメモリバンクとかって言っている感じ。

並行処理の文脈におけるインターリーブ

07-synchronization1.ppt

インターリーブ: 並行動作するプロセス/スレッドの命令列が入り交じりながら実行されること

人間のスキル習得の文脈におけるインターリーブ

  • Dick Schmidtが提唱している "Interleaving" と "Block practice"
  • 雰囲気としては、いろんな科目を挟み込みながら学習していく感じ
mohiramohira

バッファリング(Buffering)

大きいデータで、BufferedとUnbefferdの比較をする