プログラミング言語、人がつくったものである以上完璧はないのだろうなぁ
と、思っていて
コンピューターに関しても
0と1で信号を送っているのだとしても、所詮人間がつくったものだしなぁ
と、思っていたの。
それでも実際にアセンブリ言語で仕組みをつくる工程について学んだり
パケットを眺めながら、こうしてバイナリコードが流れていくのだなぁと眺めたりして
本当の本当に0と1なのだなと感じたの。
コンピューターの構造については
大学時代に学んだはずなのだけれども
実際に見ることで、キーボードに触れながら割り込みについて考えるなど
0と1で描画されて、機能する根本的な仕組みに限れば
とても正しくて美しいのだなぁと感じた。
そこにマイクロカーネル派だとかモノリシックカーネル派だとかの
「何が誰にとって便利か」
みたいな、そもそも正解があるのかないのかみたいなレイヤーで揉めそうな問いが入り込んでくると少し萎える。
そして明後日は
量子コンピューターでのOSS開発ツールであるblueqatの
開発元が主催する発表イベントがあり
量子コンピューター軽く予習しておこうと思って調べたの。
量子コンピューターについては、IT系のメディアで情報を拾う程度で
原理についてガッツリ調べたのは初めてでした。
基礎部分であれば、行列だとか複素数など高校数学レベルの知識でいけるかな?と感じたけれども
量子力学あたりから雲行き怪しくなり
数学や物理学、復習が必要かもしれない。
しかし別に、必ず理解すべきという内容でも無いので
ゆるゆるやれたら良いかなぁ。
そして何より
0と1に感動した翌日には
「0と1そして0にも1にもなる存在」
みたいな原理で動くコンピューターのせいで
感動が吹き飛んでしまったの。
もう少し感動タイム欲しかったです。
量子力学面白いけれどもキモいなぁ
って、エモい気持ちになりました。
約2ヶ月前に書いた、今年度中にやりたいことの振り返りをしたいと思います。
LT慣れする ハッカソン参戦 チューターやってみる 技術的な何かで30pほど書く&製本 AWSの資格挑戦してみる OS自作 ラズパイで何か作る LT慣れ については、機会があればなるべく発表するようにしているので引き続き訓練していきたいです。
チューター はAWSハンズオンやDjangoGirlsでコーチを経験させてもらったので、今後もDjangoGirlsのスタッフとしてコーチを続けます。
OSの自作 は簡易OSを作って動かし、それをblogにまとめたので今後はどんどん機能追加していきたいです。
ハッカソン参戦 については、自分のレベルに見合ったものを探しつつ情報収集と仲間集めします。
技術的な何かで30pほど書く&製本 について、そもそも書きたい内容がぼんやりしているのでいくつか候補案を考えます。
AWSの認定資格 は書籍の購入をしたので、演習問題をざっくり流し読みします。
ラズパイ はもくもく会に申し込んだので、いったんLinuxとして扱えるようセットアップをするのと、ミニ四駆の自動制御経験者を見つけたので相談してみます。
ちょっと色々と手を出しすぎ感あるので
来年からは少しずつ絞って行けたらなぁと思います。
AWSのサービスやAnsible、TerraformなどのInfrastructure as Code系ツールをもっと触って使いこなしたいです。
かねがねOSの自作をしてみたいなと思っていたので
まずは簡易的なOSの実装にチャレンジしてみました。
OSを自作したいと感じたきっかけというか、経緯を簡単に書きたいと思います。
以前参加したOSCにて、サイボウズさんがブース出展をされていて
そのブースには何冊か本が並べてあったのですが
たまたま手にとった本が川合秀実さんのOS自作入門でした。
「うちの社員が書いた本です。初見でそれを手に取るのですねぇ」
と、話しかけて頂いて
OSについて知りたいというよりは
(表紙デザインの猫が可愛らしいな)
と思って手にとったので
その感想をそのまま正直に伝えつつ、本の中身をしばらく見ているうちに
コンピューターの内部について知るためにも
いつかOSを書いてみたいなぁ
と、ふんわり考えるようになりました。
今回の内容は、書籍を参考にOS自作を始める前段階として
取っ掛かりになるような、もっとハードルの低いものから徐々に機能を追加していきたいなぁという気持ちがあり
ちょうど手頃なチュートリアルを見つけたので、試してみたものを簡単な解説とともに作業ログ的にまとめました。
主に参考にした記事です
OSを書く:初歩から一歩ずつ | POSTD
実行環境を整える まず、実行環境ですが
Macbookにnasmとmakeとqemu をインストールします。
※DockerやVMなどを用いてローカル環境を汚さずに行うことも可能です。
ただ今回の内容程度であれば、特に問題ないと判断しました。
今後、自作OSを続けたい場合はgit管理などで仮想マシンへの移動をスムーズにすると良いかもしれません。
$ brew install nasm $ brew install make $ brew install qemu nasm: アセンブラです。機械が理解できる命令プログラム(アセンブリコード)を機械が理解できる命令(バイナリコード)に置き換えてコンピューターが実行できるようにします。
make: コンパイルを自動化するツールです。
qemu: キューエミューと読みます。自作したOSは、このエミュレーターを介して実行されます。いわゆる仮想マシンです。
コンピューターの起動 コンピューターが起動してからの処理について
わかりやすい概要を見つけたので記載します。
0から作るOS開発
電源ボタンをONするとまずBIOS(BasicInputOutputSystem)が動き出します。BIOSはその名の通り基本的な(Basic)入力(Input)と出力(Output)を制御するハードウェアとソフトウェアのシステム(System)です。(このあたりは別に読み飛ばしても問題ありません)。BIOSが動き出すとPOST(PowerOnSelfTest)と呼ばれている処理を行います。POST処理では接続されたデバイスのチェック・初期設定、メモリーのチェックを行って正常にシステムが起動できるかどうかをチェックします。起動できると判断すると次にブートローダーまたはOSをメモリーにロードします。ブートローダーまたはプログラムがロードされた後にそのプログラムが様々な処理を簡単に行えるように、BIOSは入出力デバイスの操作をプログラムから利用できるインターフェースを用意しています。
0から作るOS開発 vol.0
MBR(マスターブートレコード)の容量には上限があり、それを解決するためにブートローダーが用いられます。今回作成するOSはとてもシンプルなため、ブートローダを使用してさらにコードをロードすることはありません。
アセンブリコードを書いてみる 実際にアセンブリコードを書いてみます。
$ vi boot.asm ; boot.asm hang: jmp hang times 510-($-$$) db 0 ; This is a comment db 0x55 db 0xAA hang: コード内の名前つきマーカーです。
暗号化されていないWi-Fi通信下では
httpでのフォーム入力は外から見ることができてしまう
というのは知識として知ってはいたのですが
それらが『どういった仕組みで見ることが可能なのか』というのを
説明するのは難しいなぁと感じたので
実際に試してみることにしました。
流れとしては、見る側と見られる側のデバイス機器を用意して
PCから他デバイスの入力情報を盗聴してみます。
まずは、下記の条件を満たす環境を用意します。
PC 2台 (1台はスマホでも可) PCにWireSharkをインストール httpでフォーム入力ができるサイト 暗号化を解除したWi-Fi 注意事項: スタバなどの公衆Wi-Fi (無線LAN) 下で、WireSharkなどを用いたパケット解析ツールでの盗聴行為は違法になります。必ず自宅などの自前のWi-Fi環境下で行ってください。
PCにWireSharkをインストール https://www.wireshark.org/download.html
こちらでインストールします。
install ChmodBPF to fix this をクリックして
ChmodBPFをインストールします。 Wi-Fi: en0 をダブルクリックします。 httpでフォーム入力ができるサイト これは少し難易度が高いというか面倒な作業かもしれないです。
かなり古いWebページの、サイト内検索フォームなどがtestしやすいかなぁと思いました。
探すのが面倒だったため、自鯖にあるWordPressの設定を変更してhttp通信の環境を用意しました。
Apacheの設定で、80番Portへリクエストが来た場合に443番Portへリダイレクトする仕組みになっていたため
httpd.confの内容を下記のように書き換えます。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
を、コメントアウトです。
<VirtualHost wp.suwa3.me:80> DocumentRoot /var/www/html/ ServerName wp.suwa3.me # RewriteEngine On # RewriteCond %{HTTPS} off # RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </VirtualHost> <Virtualhost wp.suwa3.me:443> DocumentRoot /var/www/html/ ServerName wp.
昨夜は
「疲れている気がする!」
と、危機感を察知して
きき湯に浸かって
エレキバンを貼って
ホットマスクしながら眠りました。
それでも今朝は少しだるかったので
最強の布陣を組まなかったら体調不良で休んでいたかもしれないな
と思いました。
なので今夜も早めに寝ます😃おやすみ〜