Kesu's Blog


IT業界(一応)で働くしがないサラリーマンのブログ。
ビジネスとITに関する情報を不定期に発信しています。
(ビジネス本、自作PCやスマホ、OSSや無料な
ソフトウェア、プログラム開発など)

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | -- trackback |  -- comment

△page top

主記憶と仮想記憶、スワップアウトとスワップイン 

そうではないコンピュータも存在していることを承知の上で、一般的なパソコンやサーバなどを前提として記載します。

一般的にコンピュータ上で動作させるプログラムと必要なデータは主記憶(物理メモリ)上に存在しなければならない、という前提があります。
(こういう動作をするコンピュータをノイマン型コンピュータといいます)

逆説的に言えば、プログラム+必要なデータ領域が主記憶を超える容量となるものは実行不可ということになります。

ただ、現実的にはOSが仮想記憶という機能を提供しているが故に、主記憶を超える容量を要求するプログラム+必要なデータのセットを複数実行出来ているかのように見せかけることが可能となっています。
例えば、主記憶が1GBのコンピュータでプログラム+必要なデータ領域として500MBを要するものを3つ動かすことも可能です。
この時、主記憶から溢れる500MB(正確には+OSなどの必要容量相当分)のプログラムやデータは、スワップファイルといわれるファイルに退避され、プログラムの動作に必要な主記憶が確保されます。
逆に、主記憶から溢れスワップファイルに存在するプログラムがが実行されるタイミングでは、スワップファイルからそのプログラムと必要なデータが主記憶に呼び戻され(逆にその分、主記憶に存在しているプログラムやその時点で不要なデータがスワップファイルに退避された上で)実行されます。
この主記憶から仮想記憶へ追い出される動作をスワップアウト、仮想記憶から主記憶に呼び戻される動作をスワップインといいます。

必要なデータと言っているのは、一時点で必要であったがためにメモリ上にデータ領域として存在していても、長期間参照されていないような領域はスワップアウト対象となり、仮想記憶に置かれたまま動作するためです。
次の参照までの間隔が長いデータも同様の扱いとなります。
このような状況にあっても、コンピュータはきちんと動作し、レスポンスを返します。

しかし、頻繁にアクセスされる領域がこの対象となると、そうはいきません。
頻繁にスワップアウト/スワップインが繰り返されることとなり、スワップファイルへのIOが多発、IOネックとなる結果、レスポンスが緩慢になります。
(場合にもよりますが、酷い時には、コンピュータがハングアップしてしまったような状況になることもあります)

基本的に、こうなってしまう前に主記憶を増強したり、プログラムを改修するなどして、主記憶を多く要求しないようにしたりというチューニングを行う必要があります。

尚、その兆候をとらまえるためには、主記憶や仮想記憶の使用量以外に、単位時間あたりのスワップイン/スワップアウト回数、その時々のレスポンス情報、処理数量などの情報を通常時より取得して、増加傾向にないか、ピーク時にどの程度発生しているか、レスポンスの遅延はないか、などなど評価分析を行うことが肝要となります。
(ちなみに、この活動のことをパフォーマンス管理と呼びます)
スポンサーサイト

テーマ: コンピュータ - ジャンル: コンピュータ

△page top

カプセル化/デカプセル化 

ネットワーク通信の仕組みで使われる技術のこと。

上位レイヤのプロトコルを下位レイヤのプロトコルで包み込むことをカプセル化。
その逆に外すことをデカプセル化と言います。

具体的に、Webのアプリケーションから、HTTP通信がネットワークに出ていくまでには、アプリケーションがデータをHTTPに引き渡しHTTPヘッダが付与され、TCPに引き渡され、TCPヘッダが付与され。。。最終的にネットワークカードからネットワークの世界に出ていく時には、電気信号の一つ上のレイヤであるL2でMACヘッダが付与されたデータになります。
この時例えば、TCPでは、HTTPヘッダ+データをデータとして扱います。
このように、TCPヘッダでHTTPヘッダ+データを包み込むことをカプセル化といいます。
最終的にMACヘッダまで付与された時のイメージは以下。

MACヘッダ[IPヘッダ[TCPヘッダ[HTTPヘッダ[データ]]]]

ネットワークカードからネットワークの世界に出た通信は、L2スイッチ(スイッチングHUB)で受けるのが一般的です。
そして、L2スイッチは、L3スイッチ(ルータ)へ引き渡すのがよくあるネットワークですが、L3では、MACはハンドリング出来ませんので、MACヘッダを外して、IPヘッダで通信先を把握します。
このMACヘッダを外すことを、デカプセル化と言います。

ちなみに、L3スイッチからL2スイッチに通信を行う場合、L3スイッチはL2スイッチが通信可能なよう、MACヘッダをつけるわけですが、これをするために、L3スイッチは宛先IPアドレスとMACアドレスの対比表を持っています。
これをARPテーブルと言います。

テーマ: コンピュータ - ジャンル: コンピュータ

△page top

OSI参照モデルとプロトコルやネットワーク機器のマッピング(一例) 

ネットワークは専門ではないので、間違いがあれば指摘ください。
と、一応断っておきます(笑)

OSI参照モデルは、以下の通り、7階層構造になっています。
レイヤレイヤ名プロトコルなどの例対応機器の例
7アプリケーション層HTTPWAF、ロードバランサ
6プレゼンテーション層
5セション層SSLSSLアクセラレータ
4トランスポート層TCP、UDPファイアウォール、ロードバランサ
3ネットワーク層IPL3スイッチ、ファイアウォール
2データリンク層MACL2スイッチ(スイッチングHUB)
1物理層100BASE-TXHUB
※TCP/IPでは、OSI参照モデルの1層と2層を1つのレイヤ、5~7層を1つのレイヤとする4階層で表現されているので、HTTPもSSLも同じレイヤに属するという説明がされたりします。

最近は純粋なHUBではなく、スイッチングHUBであることが一般的になっています。
一昔前はスイッチングHUBと混同しないように、純粋なHUBのことをバカHUBと呼んでいたりしました。
今思えば何て失礼な呼び方なんでしょう。。。

それはさておき、こうやって並べてみると、どの機器がどんな処理をしているのか大体想像がつくかと思います。
例えばファイアウォールは、IPアドレスやTCPやUDPのポート単位でアクセスを許可したり、拒否したりする機器になります。

ちなみにロードバランサには、L4とL7と2系統あります。
L4はファイアウォールと同じように、IPとポートで判断をします。
L7はHTTPヘッダを見てURL毎に振り分け先を特定したり、User-Agentを見てPCからのアクセスか携帯からのアクセスかを判断させて、振り先を変えたりということが出来ます。

テーマ: コンピュータ - ジャンル: コンピュータ

△page top

バイトオーダー(エンディアン) 

マルチバイトなデータフィールドを用いる時、x86系プロセッサは、メモリアドレスの小さい方から値を格納します。
これを、リトルエンディアンと言います。

例えば、整数の1(0x00000001)をメモリに格納すると、

addr+0 0x01
addr+1 0x00
addr+2 0x00
addr+3 0x00

となります。

これに対して、RISC系プロセッサ(例えばSPARC)では、メモリアドレスの大きい方から値を格納します。
これをビッグエンディアンと言います。

先ほどと同じ値をメモリに格納すると、

addr+0 0x00
addr+1 0x00
addr+2 0x00
addr+3 0x01

となります。

最近はJavaよろしく、バイトオーダーなんて気にしたことない人も多いかも知れませんが、C言語などで整数型のメモリフィールドにchar型のポインタでアクセスして操作するようなプログラムを書いていると、CPU仕様の差で移植後、動作が変わる(取得される値が変わる)なんてことが起こったりします。
上の例でaddr+0にアクセスすると、x86系では0x01が返されますが、RISC系では0x00が返されるということになり、それをもって何かを判定していると、x86系ではきちんと判定出来るけれども、RISC系では判定出来なくなり、きちんと機能しなくなるなんてことになります。

テーマ: コンピュータ - ジャンル: コンピュータ

△page top

プライベート網のアドレス割当 

勉強したことや、調べたことを全て頭の中に入れておくのは大変なので、これから少しずつ、備忘録として書き残していこうと思います。

プライベート網(LAN)に割り当ててよいIPアドレス(IPv4)の範囲は、RFC1918にて既定されています。
具体的には、

10.0.0.0~10.255.255.255 (10/8 prefix)
172.16.0.0~172.31.255.255 (172.16/12 prefix)
192.168.0.0~192.168.255.255 (192.168/16 prefix)

となります。

10進数だと/8 prefixと言われてもイマイチわからなかったりしますので、2進数表記してみます。
IPv4のアドレスは8bit×4つのオクテット=32bitで表現されますので、以下のようになります。
(先頭の8bitを第1オクテット、次の8bitを第2オクテット・・・以下略と表現します)

0000 1010 0000 0000 0000 0000 0000 0000~0000 1010 1111 1111 1111 1111 1111 1111
---- ---- 先頭8bit=第1オクテットが固定=/8 prefix

1010 1100 0001 0000 0000 0000 0000 0000~1010 1100 0001 1111 1111 1111 1111 1111
---- ---- ---- 先頭12bit=第2オクテットの上位4bitまで固定=/12 prefix

1100 0000 1010 1000 0000 0000 0000 0000~1100 0000 1010 1000 1111 1111 1111 1111
---- ---- ---- ---- 先頭16bit=第2オクテットまで固定=/16 prefix

というわけで、VDSLルータとか、無線LANルータとかは初期設定で192.168.x.xというIPアドレスが指定されているわけですね。
(個人でそれほど多くのIPアドレスを必要とするとは考えにくいので、一番使えるアドレス幅が少ないものが使われている)

テーマ: コンピュータ - ジャンル: コンピュータ

△page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。