EXEファイルの内部構造

Windowsの実行ファイルEXEファイルは、通常Visual C++, Visual Basic, Delphiなどのコンパイラが自動生成する
L ほとんどがデータサイズ、ファイル、メモリを指し示すオフセット値で構成されている

MS DOSはマイクロソフトが開発したパソコン用OS
sublimeで開くとバイナリコードでどのように書かれているかわかりません。
 L x86に対応する機械語。アセンブラではない。

MZシグネチャはEXEファイルを裏付けるデータ

EXEファイルが動くマシン
– Intel 386以降(Windows)
– MIPS(r)
– Alpha AXP(tm)
– Motorola 68000
– Power PC
– 日立SH3, SH4

リソース箇所にデータを格納する

PEヘッダ(Portable Executable)
EXEファイルの先頭部分の情報

EXEファイルのロード方法
MicrosoftのOSが、MZシグネチャ、マシンタイプ、ネイティブコードなどの情報をもとにEXEファイルをメモリ上にロードして実行する
1. シグネチャ、マシンタイプを確認
2. EXEイメージをメモリ上にコピー
3. PEヘッダ記載データを元にEXEイメージの初期化
4. PEヘッダで指定されたスタートポイントからプログラム実行
なるほど、ディスクに保存したexeファイルをメモリ上に読み込んで、1行ずつ処理していくのね。

EXEファイルイメージは実行前にプロセスメモリの任意の場所にロードされる。メモリの先頭位置をイメージベースという。
RVA(Relative Virtual Address)とはイメージベースからの相対オフセット値
ファイルポインタで読み込み対象となるデータ位置を指定し、RVAでプロセスメモリ上のデータを指し示す

イメージベース + RVA = データアドレス

EXEファイル先頭
IMAGE_DOS_HEADER …MS-DOSで認識可能なデータフォーマット
MS-DOS用スタブ …ネイティブコードを保存できるスペース
NULL空間 … PEヘッダの先頭位置は8バイト境界
PEヘッダ

なるほど、*.exeと*.pkgではソースコードは一緒だけど単純に拡張子だけ異なるって訳ではないのね。当たり前か。
EXEファイルがMS-DOS用のヘッダやデータフォーマットということは、一つのソフトでもOSが変われば当然、ファイルの中身が違うってことですな。

OSごとのインストールファイル

zipファイルなどのアーカイブファイルを展開した場合、アプリケーション管理ができない、インストール・アンインストールの設定が自動的にできない、などの制限があるため、インストーラがインストールする

Windows
1.exe形式のインストーラ
2.msi形式のインストーラ
 L リソース情報だけを持っており、インストールはWindows Installerで行う
 L Visual Studioを利用すれば、msiを利用したexe形式としてインストーラを作成できる

OS X
1.appファイル
2.dmg(ディスクイメージファイル)
3.pkg(パッケージファイル)
 L 動作に必要なパッケージも同時にインストール
 L パッケージ管理システム Homebrew

Ubuntu
1. apt
L debファイルからインストール

CentOS
1. rpm

OSごとにインストールファイルやその仕組みが異なることは分かった。
で、これ全部C言語で書いて、buildする必要あるの??

スパコン

スパコンは多数のノード(cpuとメモリ)をネットワークで繋げたもの
典型的なノードは数万ノード(京は8万)
※88128CPU(705024コア) 70万コアってことは1コア9スレッド?
パイプライン方式で処理を高速化
チューニングは作用反作用無視、条件分岐削除、相互作用粒子ソード、除算削除
OSはlinuxが多い
開発言語はFortran, C/C++

中国の「神威太湖之光」。1秒間に9.3京回の計算
中国はCPUも内製

現在の主な用途は、軍事、量子力学、天気予報、気象研究、計算化学、物理シミュレーションなどか。

GPU

ビデオカード、グラフィックカード、グラフィックボードと呼び方は多数
ビデオチップをGPUと呼ぶ。ビデオメモリもある

macだと、グラフィックスに、Intel Iris Plus Graphics 640 1536 MB と記載がある
これはCPU一体型のGPUなので、独立型より性能は劣る

GPU
グラフィック演算処理、並列演算処理(スーパースカラ)が得意
CPUが3〜5の並列処理のところ、GPUは512も
コア数もCPUよりGPUの方が多い、 eg.5120
消費電力が高い
500Mhz~650Mhzあれば綺麗な画像で楽しめる

VRAM(ビデオメモリ)
 映像データを一時的に保存
 RAMと同様、容量、速度が重要。128〜258MB, 1Ghz~1.8Ghzあれば十分
メモリバス幅は128〜256bit

ビデオカードスロットとバスには 1) AGP(転送速度が2.128GB/S)と 2) PCIエクスプレスX16(主流、4GB/S) の2タイプがある

ビデオカードには、DVI-I端子(デジタル・アナログ)、B-sub15ピンのVGA端子(アナログ)、DVI-D(デジタル)などの端子がある
TV出力端子(S端子)はテレビに表示

グラフィックボードのチップメーカーはNVIDIA、AMDなど
NVIDIAはよく聞きますね。あれ、AMDって、CPUだけでなく、GPUもやってるの?

MSI GeForce GTX 1660Ti Gaming X
MSI GeForce GTX 1060 GAMING X 6G
Nvidia GeForce RTX 2080 8GB GDDR6 – Founders Edition
 L VRAMの容量が大きいほど描画が綺麗になりやすい
 L GeForceはゲームを目的とすると、動作保証が取れているということ

Memory

Memoryとは?
 SSD・HDDから取り出したデータを処理する
e.g. 8 GB 2133 MHz LPDDR
 ん?CPUにもL1, L2, L3(SRAM)があるんだから、必要か?
DRAMもSRAMも電荷が必要
 
メモリチップ
 メモリー規格、容量、性能が詰まっている
 CL、動作クロック(周波数)の性能はメモリーチップによって決まる

接続端子
 m/bと接続。デスクトップは240pin、ノートは200pinが主流

SPD(Serial Presence Detect)
メモリーチップの種類、容量、動作周波数などの情報を記憶
BIOSのようなもの

スタブ抵抗
 データを高速でやり取りする際に発生する信号のノイズを制御

メモリチップ
 メモリセルにトランジスタとキャパシタが入っており、0の時に電荷がなく、1の時に電荷がある。
 記憶をコンデンサの電荷として蓄える。一定時間後、自然放電される

読み方
DDR2 Samsung 2GB 2Rx8 PC2-6400U-666-12-E3 2GB
DDR3L 1600 (PC3L-12800) 8GB CL11 1.35V Non-ECC SO-DIMM 204pin KVR16LS11/8
DDR4 Micron 64GB MTA36ASF2G72PZ-2G1A2IK(PC4-2133P ECC)

DDR(Double Data Rate)~はメモリチップ、クロック信号の立ち上がりと立ち下がりを両方利用
DDR X はDDRの世代 第四世代はDDR4 実働周波数にそれぞれ読み込む量をかけた数
PCはメモリモジュール
DDR2のメモリチップ、PC2のメモリモジュールで、6400は転送速度(1秒6400MB転送可) この数字が大きければ転送速度が早いという意味
2GBはメモリ容量、当然大きい方が良い
 CLはデータ読み書き開始までの待ち時間
 ECCはエラーの自動訂正機能

ぱっと見、DDRが高い方が、動作クロック、メモリモジュール、容量、転送速度などの性能も良さそうですね。

デュアルチャンネル、トリプルチャンネルはメモリをマルチで使用すること

メモリメーカー
I-O DATA, Buffalo, samsung, umax, cfd, a-dataなど

ubuntuでのメモリ確認方法
vagrant@trusty:~/other$ free -m
total used free shared buffers cached
Mem: 489 414 75 0 52 262
-/+ buffers/cache: 99 389
Swap: 0 0 0

HDDとSSDの違いは?

EBSは、SSD、HDDどちらもありますが、さて、タコができているかもしれませんが違いは。

HDD
HDDはHard Disk Driveの略で、電磁的に書き込み・読み込みする
プラッタと呼ばれる磁性体に塗られた円盤が入っており、ヘッドで書き込み、読み込みする
プラッタの回転数が多いほど、短時間で大量データ処理が可能
回転数はrpmという単位で表示される、1分間のプラッタ回転数(1分間に約7200~15000回転)
磁気ヘッド先端の電磁石がディスク表面のブロックの磁気方向を変えてデータを書き込む。書き込まれたデータは磁気リーダで読みこむ。読み込みはレコードの仕組みに似ている
電波ノイズを軽減する数値計算用アルゴリズムを改良している
保存できるデータ量が大きく、容量単価が安価だが、衝撃に弱く消費電力が大きい
機械駆動式のため、徐々に壊れる
トラックまでヘッドを移動させる「シーク時間」とセクターが来るまで待つ「回転待ち」時間を要する
SEAGATE, Toshiba, Western Digital
レーザーを使ってディスク表面にピンポイントで熱を与えてデータを書き込むheat assisted magnetic recording、HAMRが開発中。Bit Pattern Mediaが実用化すれば20TビットのHDDなども

SSD
Solid State Driveで半導体素子メモリを使ったドライブ
メモリーチップ内蔵。メモリチップはデータを記憶するICチップ
SSDの構造は、コントローラとNAND型フラッシュメモリ
衝撃に強く、発熱、消費電力が少ない、読み書きの速度が早く作動音がない。
HDDより小さく、軽い。ただし容量が少なく、容量単価の価格が高い
フラッシュメモリのセルも徐々に劣化する。1千~1万回で劣化
CFD、Samsung, Silicon-Power, Transcend
真性半導体、P型半導体、N型半導体に変化し、シリコンウエハーの表面に電子回路パターンを多層形成する
電子回路パターンはNAND型:否定論理積、NOR型:否定論理和
セル内部のフローティングゲートで電子を貯めているため、電源を切っても記憶できる
セルは、絶縁膜、フローティングゲート、トンネル酸化膜、シリコン基盤
SSDコントローラがNAND FLASHを制御
ウェアレベリング処理で、セルの負担を軽減 エラー補正機能やブロックの消去回数なども管理している
SSDは数百メガバイト/秒の転送速度で、HDDの50〜150MB/Sを大きく上回る NANDフラッシュメモリを平行動作

デュアルストレージ
SSDとHDDを両方搭載
SSDにはOSを入れ、HDDにはソフトやデータ保存を行う
e.g. M.2 SSD 256GB Serial ATAIII M.2規格+1TB Serial ATAII 5400rpm

ヨドバシカメラなどをいくと、windowsのノートはデュアルストレージがかなり売られていた。SSD256GB + HDD1T or 2TBが多い。
OSXはSSDだけども、デュアルになってくのだろうか。。

EC2のCPUはインテル? AMD?

EC2ってiシリーズ使ってるの?
AMDのEPYCを使っているらしい。x86-64マイクロプロセッサ
EPYCのシリーズをみるとL1, L2, L3をみると、L3が拡大化してるな。
—-
Amazon Elastic Compute Cloud (Amazon EC2) は、安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービスです。開発者がウェブスケールのクラウドコンピューティングを簡単に利用できるように設計されています。 AWS は、AMD とのパートナーシップを通じて、最も広くかつ深いインスタンスポートフォリオを強化する追加的な EC2 インスタンスを提供し、ワークロード要件に対するコストとパフォーマンス両方の最適化を実現します。
—-
AMD EPYC プロセッサ
Amazon EC2 インスタンスには現在、全コアターボのクロック速度が 2.5 GHz の AMD EPYC 7000 シリーズプロセッサが搭載されています。AMD ベースのインスタンスは、お客様に新たな選択肢を提供します。コンピューティングリソースが十分に活用されていない多くのワークロードに、よりぴったりなものが見つかる可能性があります。コンピューティングリソースと使用率の間のバランスを最適化することにより、これらのインスタンスでは類似のインスタンスと比べコストを 10% 節約できます。
——
https://aws.amazon.com/jp/ec2/amd/

あれ、GCPもAzureもEPYC? これまじ?
Intelじゃなくて、CPU=AMDなんだ。。

CPUの構造

パッケージ:基盤
ダイ:集積回路、シリコンウェーハ(高純度シリコンから切り出された薄い板、ケイ素(Si))

ダイはバスインターフェイス、キャッシュメモリー、制御装置、演算装置からなる。
バスインターフェイス: 内部バス(CPU内部の回路)、外部バス(CPUとメモリ)
 L アドレスバス、データバス、コントロールバスがある
キャッシュメモリ: バスメモリーから受け取ったデータを一時的に保存
 L 一次キャッシュ、二次キャッシュ、三次キャッシュ
  キャッシュメモリーがあれば、RAMにアクセスしなくて良いため、高速になる。
制御装置: フェッチユニット、デコーダー、レジスタ
 L フェッチユニットは読み込み
 L デコーダーはdecode
演算装置:整数演算ユニット、浮動小数点数演算ユニット、レジスタ
 L 演算ユニットが複数ある場合、マルチコアとなる
 L スレッドはOS(カーネル)が認識するコア数

ピンはCPUとマザーボードとの接続。LGA1151の1151はピンの数
最近のcpuでは発熱量に応じて、自動で電圧を上げて処理速度を高める設計
gpuがcpu内にあるものもある

あら、CPUの中に更にメモリがあるんですね。
Intel Core i7-4785T 2.2GHz Quad-Core SR1QU CPU Processor
Intel Core i5-4570T 2.9GHz SR1CA 5GT/s LGA 1150
Intel Core i7-6900K 20M Broadwell-E 8-Core 3.2 GHz LGA 2011-v3 140W
Threadripper 1950X YD195XA8AEWOF(AMD) 16コア、スレッド32

これはピンが4587個あるってこと?いや、違うな、型番か?LGAの後がピンの数ですね。
こうやってみると、i7-6900Kの8core 3.2GHzの性能が一番良さそうですね。

2.2GHzはクロック周波数。CPUはクロック信号に合わせて処理されるので、クロック周波数が大きい方が、高速になる。

ターミナルから確認できる
mac:ubuntu mac$ system_profiler SPHardwareDataType
Hardware:

Hardware Overview:

Model Name: MacBook Pro
Model Identifier: MacBookPro14,1
Processor Name: Intel Core i5
Processor Speed: 2.3 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache (per Core): 256 KB
L3 Cache: 4 MB
Memory: 8 GB
Boot ROM Version: MBP141.0169.B00
SMC Version (system): 2.43f6
Serial Number (system): **********
Hardware UUID: A7D32EAF-45A2-5CDD-AD44-**********

Number of Processorsが、1CPUで、total number of cores:2なので2コアという意味
AWSのvCPUはスレッドの方。

コア数とスレッド数の確認。logicalcpuの4がカーネルから認識されるコア数ということになる
mac:ubuntu mac$ sysctl -n hw.logicalcpu_max
4
mac:ubuntu mac$ sysctl -n hw.physicalcpu_max
2

カーネルは認識しているコア数(演算ユニット)に割り振って処理をする
CPUメーカーはインテル(シェア80%)、AMD(ゲーム用、キャッシュメモリが多い)

intelのcpu core architectの採用情報を見てみましょう
MS or PhD in CS, EECS, ECE, or related computing discipline
Minimum 10 years of experience with the following skillsets:
o High performance CPU microarchitecture and research
o Substantial experience with CPU simulators, tracing technologies, and performance analysis.
o Quick and efficient software development and debug skills
—-
In this position, you will be involving in the training, design and development of next generation SOC/CPU for wide range of Intel products. Your responsibilities will include some of the following but not limited to:
– Assist design unit owner in Register Transfer Level RTL model functional validation. Use CAD tool extensively to simulate logic behavior and circuit performance and direction of physical design for next generation, deep sub-micron embedded circuit solutions. Verify the circuit behavior against the original simulation model and first silicon.
– Define VLSI Structural Design methodology and developing design flows. Implement structural physical designs, such as synthesis, floor planning, power-grid and clock tree designs, timing budgeting and closure, place and route, RC-extraction and integration. Verify structural physical designs, such as functional equivalency, timing/performance, noise, layout design rules, reliability and power.
– Develop Analog IP on next generation deep submicron process for the Intel’s SOC, perform tasks related to Very-large-scale integration VLSI complementary metal-oxide-semiconductor CMOS IC design, Solid state physics and physical layout. Such tasks may include: Circuit design of high speed clocking related circuits [phase-locked loop PLL, delay-locked loop DLL, bandgap] or high voltage input/output IO [double data rate DDR/LPDDR, General-purpose input/output GPIO, OPIO].
– Responsible for Integration of Third party IPs — Synthesis, functional and/or timing convergence, and pre and post-si debug of IPs developed by various external vendors as well as within the company. Handling of signals crossing power planes and clock domains, industry standard protocols including hardware and software details dealing with Memory LPDDR, storage eMMC, SATA, UFS, peripherals PCIe, USB, and MIPI interfaces in SOC devices. System integration dealing with Si/ Platform/ FW/ MW/ drivers/ OS/ Apps on Android Windows-based tablets and phones.

Intel側はダイの設計をどうするか考えているわけだ。
すると、OSのカーネル側としても、クライアント側のcore数、スレッド数、GHzだけでなく、cpu内のキャッシュメモリ・GPUの設計なども意識して書いていくわけね。

CPU

今更って感じではあるが、やはり、知っておかないといけいないようだ。

CPUの主な役割
– 単純な計算(算術計算、論理演算)、単純な判断、データのコピー、機器の制御

CPUの流れ
システムバス、メモリバス、外部バスなどで接続されている

RAMは作業用のメインメモリ、電源を消すと消える
パーソナルPCは4〜16GB、業務用だと32GB程度
SPは1〜6GB程度
mac bookのメモリとはRAMを表している。surface proでも、4GB、8GB、16GBとある
メモリ容量が多い方が高速になる。足りない分はHDD, SDDなどで補う。メモリは記憶用のICチップが付いている。DDR4が主流。LPDDRはスマホ向けメモリ。メモリスロットに取り付ける。データ転送は一般的には一度に64ビット幅の送信が可能。

EC2の場合だとメモリがRAM 0.5~32, 3904もある
AWSだと、CPUやramはそれぞれのリージョンのデータセンターにあるって理解で良いのかな?
リージョン→東京:4 ap-northeast-1a/b/c/d
Transit Center→Equinix TY2、アット東京中央データセンター
エッジロケーション:東京8
噂では、千葉市印西、江東区枝川、横浜市磯子区あたりにDCがあるとされていますね。
クラウドって言ってるけど、AWS、Azure、GCPも実態は分散オンプレミスって感じか。。

メモリバスはメモリモジュールと他の部品をつなぐモジュール
“バスクロック”で表されていて、メモリが駆動するクロック周波数で変化するデータ転送速度

ん?ってことは、CPUとメモリの接続はマザーボードがやってる?
カーネルは、マザーボードに対してどういうデータの流れで処理してるのかしら??