Linuxカーネルコミッタの夢を見る

10年以内にLinuxカーネルにコミットしたい(2020/10/1).無理だって?まあ見てなさい.

低レイヤー学習記【18日目】

取り組んだ内容

OS自作入門,pp.290-311
Flask ~web development, one drop at a time~, Tutorial.1-3

取り組んだ内容の詳細

OS自作入門

  • 2つ分のTSS(task state segment)を作成し,セグメンテーション導入の時に作ったGDTに登録
  • アセンブリでタスクスイッチ関数(JMP)を書いて,一定時間ごとに別タスクへJMPさせることでマルチタスクを実現
  • タスクスイッチの間隔を非常に短く(0.02秒)設定して動作確認,スイッチ時の割り込み停止を感じないほど
  • タスクスイッチのプログラムを独立したファイルにして動作するように変更(これが本物のタスクスイッチらしい)

Flask ~web development, one drop at a time~

  • FlaskのアプリケーションはFlaskクラスのインスタンス
  • Flaskインスタンスをグローバルに作るよりも,application factoryとして関数内に定義することが種々のコンフリクト回避の観点からも一般的
  • インスタンス作成や最小限の設定を書いたscriptをパッケージとして保存し,flaskコマンドを使って実行できた
  • データベースの作成,初期化,アプリケーションとの接続を行った

所感

OS自作はマルチタスクに突入しました.タスクのスイッチが意外にもメモリ内容の対比,読み出しの連続を高速で行うというパワーで押し切ってる感.CPU性能が重要な理由が垣間見えました.また,今回のタスクスイッチにおいても過去に作っておいたGDTを活用したりなど,基本的な仕組みは色々な場面で応用が効くんだなと実感した.記憶が正しければGDTってセグメンテーションのために備えていたはずだけど,どうやら最近のOSではセグメンテーションは基本的に使わないらしい(ページングが主流?).このあたりのOSの今昔での差分はhikaliumさんが分かりやすくまとめたスライドがあったはずなのでまた読んでおく.書籍の続きをみるとマルチタスクが引き続くようです.頑張ります.

Flaskは低レイヤーではありませんが勉強の記録として書いてます.これまでDjangoやReactなどのウェブフレームワークは触ったことはあるのですがなかなか理解できずに放置することが多かったところ,Twitterにて初心者はFlaskなどの必要最小限の機能を備えたフレームワークから始めるのが吉とのつぶやきを目にしたため取り組みました.まだチュートリアルを進めている段階ですが割と理解できている気がする(コンパクトさゆえなのかは分からない).あと,このチュートリアルはもともと英語で書かれており有志による翻訳版もネットにはあるのですが,リーディングや単語の勉強も兼ねて頑張って原文を読み進めています.最近は英語で論文を書く機会も多いですし,自分のこれからのキャリアも考えてみると技術英語には最低限慣れておかないとな,と.

余談

前回からかなり(4日??)更新の間隔が開いてしまいました.バイトの連勤や体調不良が続いた…,というのは言い訳ですね,反省します.ただ,ブログを更新しないと少し罪悪感を感じるようになってきていて,これは割といい変化なのではないかと感じている.アウトプットとまでは言わなくとも日々の成果を記録する習慣がついてきている.とりあえず当初の目標だった30日分のブログ投稿までは頑張ります.30日って思ったよりも長いですね.