OS
非常に有意義な1日でした。 LT 解消された疑問 CRレジスタのPEフラグが立った状態でセグメントレジスタ(CS)が0を指している状態はどういう意味か? Haribote OSをCやnasmの情報付きでデバッグすることはできるか? もくもく会の感想 もくもく Web版のmipsお…
486のセグメントデスクリプタは... 63 55 47 39 31 23 15 7 0 +--------+----+----+--------+--------+--------+--------+--------+--------+ |base_hi |ar |l_hi| ar |base_mid| base_low | limit_low | +--------+----+----+--------+--------+--------+--…
02_day/helloos5で比較しています。 このOS(というかプログラム)はブートセクタの中でhello worldを画面に出力するだけのものになります。 元のソース(アセンブリ) ; hello-os ; TAB=4 ORG 0x7c00 ; このプログラムがどこに読み込まれるのか ; 以下は標準…
推測するな計測せよ!な一冊。 [試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識作者: 武内覚出版社/メーカー: 技術評論社発売日: 2018/02/23メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を見る 技術評論社のepubを…
QEMUにGDBを繋げてhariboteOSを調査したいと思います。 とりあえず初期設定っぽいことはできました。 主に観測したい事 ブレイクポイントを適当に設定して以下のものを観測したい IPLの動作でフロッピーの内容がメモリにロードされる様子 リアルモード・プロ…
構造体と共用体について学びました。 構造体のサイズについて コンパイラが勝手にサイズを偶数長になるように変更する ワードアライメント 構造体の正確なサイズはわからない。 sizeof演算子で大きさを求めるべき。 実際の現場でもsizeof演算子で大きさを求…
まぁほとんど著者のコードをなぞっているだけで、 施した改造も少なく、「OSを自作した」なんて口が裂けても言えませんが、 シンプルなコードが動いていく動作を本書や類書の解説とともに追いかけることで 自身の技術力、知見がかなり高まったように思えます…
Linuxの仕組みを読んでいますが、ファイルシステムについては初めて学ぶので、 精読してブログにまとめてみました。 [試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識作者: 武内覚出版社/メーカー: 技術評論社発売日: 2018/02/23メデ…
tcfmのruiさんが勧めているのを見て買いましたが、 #tcfm 7みたいにメモリとかカーネルモードとかよくわからないという人には「はじめて読む486」が結構おすすめかも。相当古い本だけどここらへんはほとんど変わっていないし、読みやすくて今でも入門にとて…
30日OS自作本29,30日目 この2章はOSの改造はバグ対応や一部のサイズ縮小のための些細な回収のみで 基本的に今まで作ってきたOS上にアプリケーションをつけて乗せようという章。 OSのコアな技術などは特に触れていないが、 28日目までのスクリーンショットは…
ページングについて ページングとは ページングとは固定長にメモリを分割して管理する方法 以下をページと呼ばれる単位に対して行う メモリの割り当て アドレス変換 セグメントとの違い セグメントは可変長 ページングは固定長 アドレス参照方法 32bitのアド…
qemu monitorを使う記事の続きです。 前回記事はこちらになります。 yuyubu.hatenablog.com 本記事ではwalkアプリケーションを起動した状態でqemu monitorを使ってメモリ上にマッピングされたwalkの実行ファイルを探し当てるところまでをやります。 コンソー…
OS自作本28日日本語対応の内容です。 JIS企画でも全角文字コード点、区、面 sjis,unicode,eucなどと比べると・・・ 感想 JIS企画でも全角文字コード点、区、面 1つの点が、全角1文字に対応 1つの区には、94の点がある 1つの面には、94の区がある 面 - 区 - …
qemuの起動オプションに-monitor stdioを付け加えるとqemuを起動したコンソールでqemu monitorが使えるようです。 30日OS自作本の場合 ※自分の環境はmacなのでWindows, Linuxの方は違いなどあれば適当に読み替えて実行して見てください。 HariboteOS/z_tools…
28日目の内容です。 - ファイルAPIの作成 - hariboteOSを日本語対応させます。 OS自体の開発はここでおしまい。なのです。 記事が長くなるので前半後半で分けます。本記事ではとりあえずpart1としてファイルAPIについて書きます。 ファイルAPI コード解説 フ…
27日目の記事になります。というよりほとんどLDTの解説になります。 www.youtube.com LDT OSのセグメントにアプリケーションからアクセスすることはできない。(21,22日目のセキュリティ対応) ただしアプリは別のアプリのセグメントにアクセスできてしまう。(…
OS自作本24日目以降、Xボタンの色がおかしいことに気がつきました。 ボタンの影の部分が濃い灰色ではなく濃い青色になっている 参考:23日目終了時点でのXボタン 24日目(harib21e)に追加したウインドウの非アクティブ・アクティブを切り替えるchange_wtitle8…
26日目の内容になります。 GUI描画の最適化とコンソールの昨日の強化、コマンドを3つ作ります。 www.youtube.com GUI描画の最適化 harib23a(透明色の判定) 透明色を判定しているif分が非効率なのでこれを改善します for(/*シート分*/){ for(/*y幅分*/){ for(…
25日目の内容になります。 この章でコンソールを増やします。 Beep 色数増加 16 → 232 コンソールを増やす(2個にする) diffツール 再起動現象再現せず(harib22i) 感想 Beep 12日目にBeepを試そうとしていましたが、なんと本章に動くプログラムが書かれていま…
24日目の内容になります。 ウインドウ操作 タイマー ウインドウのドラッグ移動 Xボタンの有効化 アクティブなウインドウの切り替え この辺は動画で見た方が面白いと思います。 www.youtube.com ホストOS側からQEMUにF11キーが送れない F11キーがQEMU側で反応…
23日目の内容です。 アプリケーションのメモリ管理の導入とGUI周りのAPIの強化をやります。 アプリケーションもメモリ管理(malloc)をする 気になったことがあります。winhelo2.hrbが7.6KBもあることです。 (略)なんでかなーと思ってwinhelo2.hrbをバイナリエ…
22日目3記事目です。 ウインドウAPIを作ります。APIから値を戻すのにややトリッキーなことをやっているので、そこを整理して見ました。 私のこの記事はやや分かりにくいですが、ここは各自紙やエクセルにレジスタやスタックの内容を書き起こしながら頭の中で…
.hrbファイルの構造とcmd_app()の改善 アプリケーションから利用できる文字表示APIを作ったところ、C言語から作ったアプリケーションでは データ(文字列)の取得がうまくいかないようです。本章では.hrbファイルの解説と件のデータ取得の改善が解説されていま…
22日目の内容になります。 長すぎるので3つに分けます。 3日目以降でやや難易度が高くなっている章だと思われます。 今回はセキュリティ編です。 バグ発見のための拡張 スタック例外の実装 スタック例外(配列に対して大きすぎるインデックス等)は0x0cでハン…
21日目の内容です。セグメントやメモリの復習が多めです。 hariboteOSのメモリマップ セグメントについておさらい。 セグメントのアクセス属性を設定する DPL type:セグメントのread,write,executeなど 設定したアクセス属性により上がる例外をハンドルする…
20日目は1文字を表示するAPIを作りました。これでOSに配備したアプリケーションからOSの機能を呼び出すことができます。 API 引数を扱う専用の処理を呼び出す 引数専用の処理でスタックに引数をつむ 23bitレジスタ,16bitレジスタ,8bitレジスタ復習(EAX,AL等)…
細かいコンソールの修正といくつかのコマンド(mem,cls,dir)を作る内容でした。 動画 www.youtube.com 文字列を比較する string.hで定義されているstrcmpを使用します。 arr[0] == "t" && arr[0] == "s" && arr[2] == "t" これが strcmp(arr,"tst")==0 こんな…
17日目の内容です。 www.youtube.com ソースの動作具合 13章目以降初めて全てのソースが動作しました。16日目は全滅だったので非常に嬉しいです。ただしGUIは若干もたついており遅延があるような気がします。タイミングがシビアなアクションゲームなどはでき…
16日目の内容です。 タスク管理の機構を強化するような内容です。 タスク管理 15日目でハードコードされた部分を無くします。タスクも構造体の配列で管理するようにします。 #define MAX_TASKS 1000 /* 最大タスク数 */ //前回から引き続き登場task state se…
15日目はマルチタスク(タスクスイッチ)をやりました。 マルチタスクp290~310 タスクスイッチ 保存するレジスタ等の内容 JMP命令とEIPレジスタ JUMP命令のnearモードとfarモード 実行イメージ 動画 感想 マルチタスクp290~310 CPUは複数のタスクを同時に実行…