デジタル世界のお散歩

パソコンなどデジタル機器やネットに関連する経験上で得た知識を綴ります

パッチとは?

2024-07-28 19:01:40 | デジタル機器

パッチとは?

デジタルの世界ではあまり耳に(目に)しない言葉ですね

パッチワーク(色柄の違う布を縫い合わせて作る生地)とか、あて布(セーターの肘が抜けた時に布や皮などで覆って縫う)などが一般的なパッチのイメージですよね

 

さて、デジタルの世界で言うパッチとは何の意味でしょう

 

一口で言うと「プログラムの修正」の一つの方法です

既にプログラムをリリースした後にバグの修正や機能変更が必要になった場合にパッチをオンライン・アップデートとして配布します

*DLLを置き換えてしまうケースもあると思いますがサイズが問題です

 

と言うことで、

「パッチとは、実行ファイルの不具合をバイト単位で修復するあて布」

と言えば解り易いでしょうか

 

具体的なパッチのイメージ

実行ファイルの中身は2進数の複雑な並びで構成されていますが、その一部を変更するイメージが下図です

(16進数表記しています)

上の例では実行ファイルの一部を正しいデータに置き換えるためのパッチ(あて布)のイメージですが、

新イメージが長い場合(命令が増えるなど)は「Go To命令」を書き込み、飛び先のパッチエリアに正しい命令や命令群を書き込むケースもあります

 

ざっくりとご説明しましたがおおまかにはご理解頂けたでしょうか
マイクロソフトではWindows Updateとしてタイムリーに送って来ますが、その内容のほとんどがパッチと言えるわけです

 


DLLって何?

2024-07-09 11:12:16 | デジタル機器

拡張子がdllとなっているファイルを見かけた事はありませんか?

DLLとは Dynamic Link Library(ダイナミック・リンク・ライブラリ)

つまり動的リンクライブラリと呼ばれるものです

相対するものにStatic Link スタティックリンク、つまり静的リンクというものがあります。(ライブラリとは言いません)

 

と言われても何ことかさっぱり解りませんね

 

簡単に説明します

★ソフトの設計をしていると、しばしば同じ処理を行う部分が出てきます

例えば : A + B の結果を C に入れる

と言う処理をする部分があちこちにある場合、

いちいちその場でロジックをコーディングするのは無駄になりますね(EXE  

ファイルのサイズや実行時のメモリ容量など増大につながる)

そこでサブルーチンという概念があります

つまり、プログラム本体とは別に作る特定の処理だけを行う実行ファイルです

下図のようにこの処理を必要とする部分から呼び出して、各部共通の処理を行わせる部分プログラム(サブルーチン)となります

AとBとCの情報だけ引数(パラメータ)で教えてあげれば同じ処理を1か所に纏めることができて無駄な諸元を省く事ができます

 

このように本体のプログラムXとサブルーチンYは別々の実行ファイル(EXEファイル、ロードモジュール)として作られます

注:サブルーチンは単独で動作することはできません

 

ここまでは動的リンク静的リンクも考え方は同じです

 

1.実行ファイルが作られる時の違い

静的リンクの場合

プログラムXとサブルーチンYはコーディング後に

CU(コンパイル・ユニット)と言う形式に一旦変換されます(コンパイルするなどと言います)

これをLinker(リンカー)と言う処理ソフトによってリンク(結合する、個々のプログラムを一体化するなど)と言う処理が行われて一つの実行ファイル(ロードモジュール、EXEファイル、DLLファイルなどと言います)が作られます

動的リンクの場合
  プログラムXとサブルーチンY(DLL)は別々に単体モジュールとし     

  てビルドされてOSに登録されます

 

2.実行時の違い

静的リンクの場合はプログラムXがメモリ上に読み込まれ、OSによって実行されますが、この時サブルーチンYはこのプログラムによって使われる事がリンカーからOSに伝えられているので、GoTo命令が実行された時にハードディスク等の記憶媒体からメインメモリに実装され、実行されます

ただし、プログラムXしかこのサブルーチンYを使うことはできないので、Xの動作時に判定される実行ファイルサイズにあらかじめYのサイズが含まれています。

動的リンクの場合、必ずしもサブルーチン(DLL)は一つのプログラムから使われるものとは限りません

そこでOSは現在実行されているタスク(JOB)がどのDLLを使うかを判断して必要な物はメモリーに常駐させ、個別に呼び出されるDLLは必要に応じて実装されます

これが動的と言われるもとになっています

 

3.静的リンクの実行時イメージ

 

 

4.動的リンクの実行時イメージ

 

 

 

5.まとめ

動的リンク方式は、今ではパソコンはもとより、UNIX系のEWSなどもこの方式がほとんどです(例:ORACLEサーバ他)

②大きなプログラムになると数百とか数千ものDLLを有したものもあります

③OSのベンダーはDLLをサードパーティなどに公開して、仕様も有料で提供しています

④個別のソフトウェアが使用するDLLはインストール時に登録されます

 

以上、ごくごく簡単な説明ですが、かえって解り難かったらごめんなさい


ビット と バイト について

2023-07-24 19:19:58 | デジタル機器

通常、「ビット」とか「バイト」と言う言葉はあまり意識しませんよね

でも、違いを知っていても損はしないと思いませんか?

1b と書くと ビット

1B と書くと バイト

と大文字と小文字のBで違いますね

8b(ビット)=1B(バイト)の関係にあることはご存じと思います

ではどう言う時に使い分けるかと言う事ですが、

基本的にはちょうど1バイト単位で表せない場合にビットの単位を使います

例えば通信量転送速度など信号を扱う場合にビットが使われます

例1:30Mbps これは信号が流れる時の大きさの単位でバイトでは表わせない数値です

例2:1パケット = 1024ビット

1パケットは一般的には128バイトと言われていますね

無論、間違えでは無いのですが、128バイトと言ってしまうと、

1バイト文字なら128文字分送られると勘違いしてしまいます

実際に128バイトの中には、IPヘッダーや様々なインターネットプロトコルに

必要な情報が付加され、中には3ビットや13ビットなどの長さの情報も含まれるので、

そこは誤解のないようにお願いしたいです

 

ややこしい話は抜きにして、「ビット」「バイト」の違いを薄っすらとでも覚えて頂ければ幸いです