OS自作入門15日目&16日目

Pocket

マルチタスクの話だった。
プリエンプティブとノンプリエンプティブの差って、案外小さいんだなと思った。実際、タスクの優先度をつけたりするのは、プリエンプティブでなければできないけれど。
処理する時間で優先度をつけるのは一般的なんですかね。
それに、カーネル内部の関数も1つのタスクとして独立して動かせるってのが新しかった。普通、アプリケーションやサーバを独立したタスクとして動かすことは、想像できるけれど。Linuxで、カーネルのログをとったりするデーモンも、こういう実装になっているんだろうか。起動の最初のほうで、いろいろ立ち上がっていることは気づいていたけれど。調べたことはないけど。
別にカーネルであろうとアプリケーションであろうと、つまり、特権レベルが違っていなくても、ある関数をタイマ割り込みで切り替えているんだから、同じなのか。
逆に、スレッドなどもTSSを1つ使ってGDTに登録してしまうという実装もありなんですね。コストがかかるけれど。
ただ、LinuxもWindowsも、プロセスの管理はx86の機能を利用せずに自前でやっていると聞いたことがある。x86_64になると、互換性のために残っているという感じだと思います。この辺、どうなっているのでしょう。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください