インサイド Windows 第七版、Windows Sysinternals 徹底解説 📚 、その他エッセイ

会社 で Windows Surface Go を支給してもらったので Windows 筋トレをしている

私の Windows レベル

腰を据えて Windows を触るのは WIndows XP を扱って以来で 10数年ぶり (2011年位に会社から 1-2ヶ月間だけ貸与してもらったことはあるけど).

f:id:hiboma:20190214235203p:plain

Surface Go を手に入れるまではコントロールパネルを開く方法も分からないくらいに退化していた

鈍器で筋トレだ 📘

ということで『インサイド Windows 第七版』と『Windows Sysinternals 徹底解説』を買った

インサイドWindows 第7版 上 システムアーキテクチャ、プロセス、スレッド、メモリ管理、他 (マイクロソフト公式解説書)

インサイドWindows 第7版 上 システムアーキテクチャ、プロセス、スレッド、メモリ管理、他 (マイクロソフト公式解説書)

Windows Sysinternals徹底解説 改訂新版 (マイクロソフト公式解説書)

Windows Sysinternals徹底解説 改訂新版 (マイクロソフト公式解説書)

低レイヤーの話が高密度で書き記されているが、Linux カーネルの問題に取り組んできた際に身につけた知識や経験も手伝って「Windows っておもろい OS 」なんだなと、たくさんの発見をしながら読みすすめられている.

Linux と同じように捉えていいモデルや概念や設計があれば、全く異種や未知のものもあり、Windows のことをほんと表層的にしか理解できてなかったのだと痛感している.

共通点を知る 🔍

VMMap でプロセスのメモリレイアウトを見るとこんなんになる

f:id:hiboma:20190215011716p:plain

VMMap を使うと Linux の pmap と 似た出力 を得られる.

似た と書いたが、プロセスのメモリレイアウトは CPU (x86アーキテクチャ) を反映している / 密結合するポイントのせいか、WindowsLinux とで大きくは変わらないようだ. フィールド名の差異はあれど pmap の出力を理解してれば VMMap も難なく理解できる (その逆も然りだろう).

違いを知る 🔎

Process Explorer でプロセス一覧をみる

f:id:hiboma:20190215012754p:plain

プロセスモデルは抽象化のアプローチが Linux とは全然違うもんなんだな〜 と素朴な感想を持っている. ハードから離れたレイヤでの抽象化は OS の個性が輝くところなのだろう

📕📘

このように Windows の本を読みながら Linux と比較しながら進めている.

known-unknown と技術書の話

ここからは全く別の話題

技術の勉強に励む際に 入門書を手にしてボトムアップで固めて攻めていくのは一つの勉強手段だ. 別の手段として、いろいろレベル感をすっ飛ばした書籍にチャレンジしてトップダウンで進める方法あるだろう. unknown-unknown の森に飛び込み known-unknown の中で迷子になりながら鍛えていく方法.

pyama.fun

その中でknown unknownという概念が紹介されている。それは、システムチューニングの局面においてknown-known,known-unknown,unknown-unknownという分類で説明されている。

さらに引用

known-knownは知っていることを知っていること、例えばtopコマンドでプロセスごとのCPUの使用率を見れることを知っているし、見たことがある。 known-unknownは知らないことを知っていること。topコマンドを知っているけど、使ったことはない(観測してない) unknown-unknownは知らないことを知らないこと。これはtopコマンドを知らないこと。

もう一個引用

これを少しでもknown-unknownにするためにはひたすら本を読むとか、識者に教えてもらうとか、インターネットで調べるとかそういう手段になると思うのだけど (...)

私の話: Linux カーネル本の話

自分の過去を振り返るならば、『詳細 Linux カーネル』を手にしたのは 10年も前のことだが、書籍を買った当初はどこを読んでもまったくもって何も理解ができずに圧倒されてしまった.

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

known-unknown の山 (鈍器) がそこに (物理的に) 存在することは確実に理解はした. ( なんで買ったんだこの本??? )

樹海で迷子になる

そもそも C言語を全く書けないのにカーネル本を手にしたのがすっ飛ばし過ぎてるようにも思い、ゆっくりと時間をかけて、C言語の入門書を読んだり、『詳解 UNIX プログラミング』にチャレンジしたり、途中で全く興味を失ったり、何かの機会に興味が再発したり、また飽きたり ... と紆余曲折を経ながらも少しずつ known-unknownknown-known に変えることができた.

現在では 会社のお仕事の場面でも知識 + 経験 + スキルとして生かせるレベルまで書籍の内容を吸収したと思う ( 未だコードは全然かけないけど 🙃 )

過去のお話の注意点

このように過去の話をふりかえるとバイアスが強烈にかかり、美化して話がちだ.

失敗している例もあって、技術的に理解が及ばないまま背伸びして買った書籍で内容を全然モノにしないまま挫折したのもたくさんある. 私はグラフィカルなレイヤを扱うのはどうも苦手で、そういったレイヤの技術書はどれもこれも途中で放り投げてしまった ( 懐かしの ActionScript3 や Processing や iOSアプリや ... )

何の技術がどうやって自分の強み・興味・自信のコアとして定着するかは、短い時間の中では推し量れないもんだね