概要
本記事では「30日でできる!OS自作入門」を進めていくうちに気になった箇所、試していて躓いた箇所等をまとめる記事になります。
ちなみにわからないところはがんがんChat-GPT様に質問する気なので、間違っている点があればマサカリを投げていただけますととても喜びます。
書籍の詳細は省略いたしますので、気になられた方はぜひ書籍を購入してご自身でトライしてみてください!
今回は、Chapter1の前座としてバイナリについてです。
少しだけ今後利用するバイナリエディタについても触れています。
学び
バイナリについて
バイナリについての知識をひとまずつけようかなと思います。
なんとなくここまで書籍を読む限り(+遠い過去の薄い記憶的にも)バイナリって何者だ
ってところはある程度知っておいたほうが良いんじゃないかなと感じています。
ちなみにですが、数ページ読み進めた限りでは「バイナリって某(なにがし)がいるんだなあ」という感覚で進めてもよさそうではありました。
そもそもバイナリってなんだ
個人的には「データを0,1(2進数)で表している状態のことをバイナリと呼ぶ」という程度の認識でした。
では、IT用語辞典で引いた概要を理解してみましょう。
バイナリ(binary)とは、2値(の)、2進数(の)、2元(の)、などの意味を持つ英単語。IT関連ではテキスト(文字)以外のデータ形式全般を総称してバイナリと呼ぶことが多い。
バイナリ(バイナリデータ / バイナリ形式)とは - IT用語辞典 e-Words https://e-words.jp/w/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA.html
この概要だけを読んでみると、どうやら2値というところよりも「文字以外のデータ形式全般」という箇所が強調されているようです。ちなみに文字以外のデータ形式とは画像ファイルだったり実行ファイルだったりがこれにあたるそうです。
再度同ページを引用します。以下の理解でバイナリというものが何者なのかがすっきりと説明できるなと感じました。
コンピュータはすべての情報を2進数の「0」と「1」が並んだビット列として表現する。このうち、何らかの文字コード規格に基づいて文字を表すデータを「テキストデータ」(テキスト形式)、そうでないものを「バイナリデータ」(バイナリ形式)と分類する。
また、引用以降の解説に目を通すだけでも理解は現時点であれば十分なのではないかといったレベルまで進みます。
気になる方は是非ご一読ください。
※この説明だと文字はバイナリとは違うやつという認識になってしまいそうですが、根本的にはすべてのデータが2進数で表されているためすごく大きなくくりで言えば文字データだってバイナリです。「バイナリの中でざっくり文字データとバイナリデータは区別されることが多いんだな」という認識がよさそうです。
じゃあテキストデータとバイナリって何が違うんだ
色々と調べてみたところ「テキストエディタで開けるのかが違いだ」や「文章として認識できるのかが違いだ」といったいろいろな説明がありますが、個人的には「テキストとしてファイルに保管されているのかが違いだ」という説明が一番しっくりときました。(特に文章として認識できるのかという説明だと「pdfとかはどうやねん」といった難しい話になりそうだったのでこちらの認識に。)
機械言語と何が違うんだ
バイナリがなにがしかというこれまでの調査をすると、機械語との違いについては別に難しくはないですね。
ただただバイナリの一種として機械語があるんだ。という認識でいいんじゃないかという気持ちになってきました。
(「推論だけで話してはならない」 と社会人になって何度も学んできたので、Web記事をいろいろと読んでみるという方法にはなってしまいますが、裏は取ろうと思います。)
まず、機械語が何なんだというところからです。いろいろなサイトをめぐったうえでの理解として「コンピュータ(プロセッサ)が直接理解できるような命令群を備えたものが機械語である」という認識がよさそうだな。という結論に至りました。
機械語とアセンブリ言語について
ここまでの理解が完了して、「コンピュータに命令できるのが機械語っていうけど、アセンブリ言語も直接命令できるんじゃないっけ」という疑問が生じました。
ここでこの記事のこれまでの学びが生きてきます。
- まずバイナリな機械語とテキストなアセンブリは別物だと理解できる
- それにコンピュータが理解するならバイナリファイルであるほうが自然であるように感じる
- 「アセンブリ言語は低級言語といって命令は書けるけどバイナリに変換しているんだ」という文章がすっと入ってくる
今までの知識が生きてくるのはやっぱり楽しいですね。
バイナリエディタについて
今回は以前職場の方に教えていただいた、VSCodeでファイルをバイナリ状態で編集できる拡張機能「Hex Editor」を使って作業することにしました。
選んだ理由
選んだ理由は以下です。
- 別のツールを入れる手間を惜しんだ
- 普段使いなれているテキストエディタのほうが操作面で優位性があるだろうと考えた
まず、別のツールを入れる手間についてです。そこまで#1でも触れましたが、以前この書籍を軽く触った経験がありますが、その際に「使いやすい!!」や「便利だな」と思ったような記憶がなかったです。(シンプルにわたくしの当時の技術力が足りてなかっただけなような気もしますが)
ですので、普段から使い慣れているVSCode側で済ませることで、画面への慣れにかかる負荷やツール間を移動する手間を少しでもなくそうと思い、この結論に至りました。
もちろんこれまで学んだ内容から、Hex Editorだけでは何か不十分な箇所が出てくる可能性も考えられます(昨日の一環として作業できるだけなので)。その際はこの記事を編集して、読んでくださった方々が同じ轍を踏まないようにできればと考えています。
苦戦したところ
実際に書籍の作業を行えていないので、今回もこの項目は特になしです。
まとめ
今回はChaptor1以降でのつっかえをなくせるように「バイナリについて」に焦点を当てて調査した結果をまとめました。
結果的には「結局のところバイナリというのは広義なもので、テキストとしてデータが保存されないもの全般がバイナリファイルなんだ」という理解を得られました。
調べたことでバイナリについてだけではなく、機械語との関係等の周辺知識を手に入れることができて非常にすっきりしています。
明日以降は実作業に手を出せるのではないかと思います。すでに少しワクワクしています。
この記事が少しでもいいなと感じていただけたら、ぜひいいね等よろしくお願いいたします。
ピックアップ単語
※書籍の中で「聞かれてもしっかり説明できないな」という単語を個人的にまとめたものです。性格的に「とりあえずわからないでいいから進めるか」というタイプなので、気が向いたタイミングでいずれ個別で記事にするかもしれません。この記事ではメモ+何がわからないといった備忘録程度のことのみ書きます。
- 今回は省略します