Yabu.log

色々勉強するブログです。

OS

第13回osdev-jpもくもく会に参加してLTしました

非常に有意義な1日でした。 LT 解消された疑問 CRレジスタのPEフラグが立った状態でセグメントレジスタ(CS)が0を指している状態はどういう意味か? Haribote OSをCやnasmの情報付きでデバッグすることはできるか? もくもく会の感想 もくもく Web版のmipsお…

486のセグメントデスクリプタが直感的に読めないようになっている理由

OS

486のセグメントデスクリプタは... 63 55 47 39 31 23 15 7 0 +--------+----+----+--------+--------+--------+--------+--------+--------+ |base_hi |ar |l_hi| ar |base_mid| base_low | limit_low | +--------+----+----+--------+--------+--------+--…

objdumpによる逆アセンブルとgdbの命令形式表示の比較

02_day/helloos5で比較しています。 このOS(というかプログラム)はブートセクタの中でhello worldを画面に出力するだけのものになります。 元のソース(アセンブリ) ; hello-os ; TAB=4 ORG 0x7c00 ; このプログラムがどこに読み込まれるのか ; 以下は標準…

「Linuxの仕組み」を読んだ

推測するな計測せよ!な一冊。 [試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識作者: 武内覚出版社/メーカー: 技術評論社発売日: 2018/02/23メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を見る 技術評論社のepubを…

QEMUにGDBを繋げてhariboteOSをデバッグする方法

QEMUにGDBを繋げてhariboteOSを調査したいと思います。 とりあえず初期設定っぽいことはできました。 主に観測したい事 ブレイクポイントを適当に設定して以下のものを観測したい IPLの動作でフロッピーの内容がメモリにロードされる様子 リアルモード・プロ…

C言語復習その3構造体、共用体について

構造体と共用体について学びました。 構造体のサイズについて コンパイラが勝手にサイズを偶数長になるように変更する ワードアライメント 構造体の正確なサイズはわからない。 sizeof演算子で大きさを求めるべき。 実際の現場でもsizeof演算子で大きさを求…

30日OS自作本を読み終えた

OS

まぁほとんど著者のコードをなぞっているだけで、 施した改造も少なく、「OSを自作した」なんて口が裂けても言えませんが、 シンプルなコードが動いていく動作を本書や類書の解説とともに追いかけることで 自身の技術力、知見がかなり高まったように思えます…

ファイルシステムについて

OS

Linuxの仕組みを読んでいますが、ファイルシステムについては初めて学ぶので、 精読してブログにまとめてみました。 [試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識作者: 武内覚出版社/メーカー: 技術評論社発売日: 2018/02/23メデ…

「はじめて読む486」を読んだ

tcfmのruiさんが勧めているのを見て買いましたが、 #tcfm 7みたいにメモリとかカーネルモードとかよくわからないという人には「はじめて読む486」が結構おすすめかも。相当古い本だけどここらへんはほとんど変わっていないし、読みやすくて今でも入門にとて…

30日OS自作本29,30日目

OS

30日OS自作本29,30日目 この2章はOSの改造はバグ対応や一部のサイズ縮小のための些細な回収のみで 基本的に今まで作ってきたOS上にアプリケーションをつけて乗せようという章。 OSのコアな技術などは特に触れていないが、 28日目までのスクリーンショットは…

ページングについて

OS

ページングについて ページングとは ページングとは固定長にメモリを分割して管理する方法 以下をページと呼ばれる単位に対して行う メモリの割り当て アドレス変換 セグメントとの違い セグメントは可変長 ページングは固定長 アドレス参照方法 32bitのアド…

qemu monitorを使ってメモリ上にロードされている実行中のアプリケーションの機械語をダンプ

OS

qemu monitorを使う記事の続きです。 前回記事はこちらになります。 yuyubu.hatenablog.com 本記事ではwalkアプリケーションを起動した状態でqemu monitorを使ってメモリ上にマッピングされたwalkの実行ファイルを探し当てるところまでをやります。 コンソー…

30日OS自作本28日目2日本語対応

OS

OS自作本28日日本語対応の内容です。 JIS企画でも全角文字コード点、区、面 sjis,unicode,eucなどと比べると・・・ 感想 JIS企画でも全角文字コード点、区、面 1つの点が、全角1文字に対応 1つの区には、94の点がある 1つの面には、94の区がある 面 - 区 - …

qemu monitorを使って自作OSをデバッグする

qemuの起動オプションに-monitor stdioを付け加えるとqemuを起動したコンソールでqemu monitorが使えるようです。 30日OS自作本の場合 ※自分の環境はmacなのでWindows, Linuxの方は違いなどあれば適当に読み替えて実行して見てください。 HariboteOS/z_tools…

30日OS自作本28日目1ファイルAPI編

OS

28日目の内容です。 - ファイルAPIの作成 - hariboteOSを日本語対応させます。 OS自体の開発はここでおしまい。なのです。 記事が長くなるので前半後半で分けます。本記事ではとりあえずpart1としてファイルAPIについて書きます。 ファイルAPI コード解説 フ…

30日OS自作本27日目

OS

27日目の記事になります。というよりほとんどLDTの解説になります。 www.youtube.com LDT OSのセグメントにアプリケーションからアクセスすることはできない。(21,22日目のセキュリティ対応) ただしアプリは別のアプリのセグメントにアクセスできてしまう。(…

30日OS自作本24日以降のXボタンの影がおかしい

OS

OS自作本24日目以降、Xボタンの色がおかしいことに気がつきました。 ボタンの影の部分が濃い灰色ではなく濃い青色になっている 参考:23日目終了時点でのXボタン 24日目(harib21e)に追加したウインドウの非アクティブ・アクティブを切り替えるchange_wtitle8…

30日OS自作本26日目

OS

26日目の内容になります。 GUI描画の最適化とコンソールの昨日の強化、コマンドを3つ作ります。 www.youtube.com GUI描画の最適化 harib23a(透明色の判定) 透明色を判定しているif分が非効率なのでこれを改善します for(/*シート分*/){ for(/*y幅分*/){ for(…

30日OS自作本25日目

OS

25日目の内容になります。 この章でコンソールを増やします。 Beep 色数増加 16 → 232 コンソールを増やす(2個にする) diffツール 再起動現象再現せず(harib22i) 感想 Beep 12日目にBeepを試そうとしていましたが、なんと本章に動くプログラムが書かれていま…

30日OS自作本24日目

OS

24日目の内容になります。 ウインドウ操作 タイマー ウインドウのドラッグ移動 Xボタンの有効化 アクティブなウインドウの切り替え この辺は動画で見た方が面白いと思います。 www.youtube.com ホストOS側からQEMUにF11キーが送れない F11キーがQEMU側で反応…

30日OS自作本23日目

OS

23日目の内容です。 アプリケーションのメモリ管理の導入とGUI周りのAPIの強化をやります。 アプリケーションもメモリ管理(malloc)をする 気になったことがあります。winhelo2.hrbが7.6KBもあることです。 (略)なんでかなーと思ってwinhelo2.hrbをバイナリエ…

30日OS自作本22日目3ウインドウAPI

OS

22日目3記事目です。 ウインドウAPIを作ります。APIから値を戻すのにややトリッキーなことをやっているので、そこを整理して見ました。 私のこの記事はやや分かりにくいですが、ここは各自紙やエクセルにレジスタやスタックの内容を書き起こしながら頭の中で…

30日OS自作本22日目2hrbファイルの構造

OS

.hrbファイルの構造とcmd_app()の改善 アプリケーションから利用できる文字表示APIを作ったところ、C言語から作ったアプリケーションでは データ(文字列)の取得がうまくいかないようです。本章では.hrbファイルの解説と件のデータ取得の改善が解説されていま…

30日OS自作本22日目1セキュリティ編

OS

22日目の内容になります。 長すぎるので3つに分けます。 3日目以降でやや難易度が高くなっている章だと思われます。 今回はセキュリティ編です。 バグ発見のための拡張 スタック例外の実装 スタック例外(配列に対して大きすぎるインデックス等)は0x0cでハン…

30日OS自作本21日目

OS

21日目の内容です。セグメントやメモリの復習が多めです。 hariboteOSのメモリマップ セグメントについておさらい。 セグメントのアクセス属性を設定する DPL type:セグメントのread,write,executeなど 設定したアクセス属性により上がる例外をハンドルする…

30日OS自作本20日目

OS

20日目は1文字を表示するAPIを作りました。これでOSに配備したアプリケーションからOSの機能を呼び出すことができます。 API 引数を扱う専用の処理を呼び出す 引数専用の処理でスタックに引数をつむ 23bitレジスタ,16bitレジスタ,8bitレジスタ復習(EAX,AL等)…

30日OS自作本18日目

OS

細かいコンソールの修正といくつかのコマンド(mem,cls,dir)を作る内容でした。 動画 www.youtube.com 文字列を比較する string.hで定義されているstrcmpを使用します。 arr[0] == "t" && arr[0] == "s" && arr[2] == "t" これが strcmp(arr,"tst")==0 こんな…

30日OS自作本17日目

OS

17日目の内容です。 www.youtube.com ソースの動作具合 13章目以降初めて全てのソースが動作しました。16日目は全滅だったので非常に嬉しいです。ただしGUIは若干もたついており遅延があるような気がします。タイミングがシビアなアクションゲームなどはでき…

30日OS自作本16日目

OS

16日目の内容です。 タスク管理の機構を強化するような内容です。 タスク管理 15日目でハードコードされた部分を無くします。タスクも構造体の配列で管理するようにします。 #define MAX_TASKS 1000 /* 最大タスク数 */ //前回から引き続き登場task state se…

30日OS自作本15日目

OS

15日目はマルチタスク(タスクスイッチ)をやりました。 マルチタスクp290~310 タスクスイッチ 保存するレジスタ等の内容 JMP命令とEIPレジスタ JUMP命令のnearモードとfarモード 実行イメージ 動画 感想 マルチタスクp290~310 CPUは複数のタスクを同時に実行…