OSを作ってみよう (534レス)
上下前次1-新
181: 03/03/14 13:06 AAS
age
182(1): ( ´ -`) 03/03/14 21:24 AAS
御無沙汰しておりました。
これからは開発ペースがちょっと落ちるかもしれません。
外部リンク[gz]:www.geocities.co.jp
カーネル内部の排斥処理にmutexを使うようにしてみた。
それに伴ってUNIX風のtask_sleep()、task_wakeup()は廃止。
aspace_copy系の関数をnewos(OpenBeOSのカーネル)か
らのパクリで書き直した。gccの拡張機能を使うとはいえ
こんなに簡素に全部Cで書けるとは感動。
その他細かい修正。
今後の予定。
省7
183: ( ´ -`) 03/03/14 21:26 AAS
一応それ以降のおおざっぱな予定も書いときます。
ホストでFAT?ファイルシステムを開発。
FDDもしくはIDEのドライバを書く。
ファイルシステムをNoNameに乗せる。
システムコールの細かいPOSIX準拠。
ユーザアプリ用のライブラリを整備。
GNUツールの移植などユーザ環境を整備。
NoName自身をNoName上でコンパイル出来る様になったらVersion.1.0としてリリース。
2〜3ヶ月でここまでやりたい。
184(1): FreeDOS教徒 [osage] 03/03/14 22:17 AAS
本当にできそうだな。ガンバ!
185(2): LightCone ◆sSJBc30S5w 03/03/14 23:40 AAS
ところで、「カーネル・スレッド」と言う言い方には、歴史的な背景がある
だけで、Windowsでは、単に「スレッド」と呼ばれるものと等価なんですよね?
一応、ネットでちょっと調べた結果を書いておきますので、間違っている箇所が
あれば指摘してください。
-----------
(1)「カーネル・スレッド」と言う言葉は時と場合によって異なる意味で
用いられるらしく、ある種の混乱が生じる場合がある。
(2) 歴史的に UNIXでは、いわゆる「スレッド」がなかったので、アプリ
ケーションが勝手に「スレッド」相当の機能をユーザーモードで実現した。
この実現方法は良く分からないのですが、
省13
186(2): LightCone ◆sSJBc30S5w 03/03/14 23:58 AAS
ちなみに、Windowsでも、UNIXでも、基本的に
メモリ空間とファイルディスクリプタの分離単位を「プロセス」と
呼んでいると思います。
そして、Windows/Linuxでは、
実行コンテキスト(現在の実行番地、スタックポインタ、全レジスタの値)、
スタック
を持つ単位をスレッドと呼んでいると思います。
(本家の)UNIXでは、上記の「スレッド」のことを「カーネル・スレッド」と
呼ぶらしい(?)。
また、Mach OSやNWSOSでは、上記「プロセス」のことを「タスク」と呼び
省4
187: 03/03/15 01:51 AAS
>>186
>結果として、マルチ・タスクとマルチ・プロセスは私の解釈では今のところ
>同義だと思っています。
組み込みだと、ひとまとまりの仕事という意味でタスクを使ってる感じかなぁ。
でも最近はLinux系から流れてくる人も多くて、やや現場は混乱してるのかも。
昔でいうモニタプログラム(sharpのクリーンコンピュータで言うところの電源入れたら立ち上がる、
対話型のブートローダ。GRUBのできそこない見たいなやつ)
が発展してマルチタスクモニタとか、リアルタイムモニタとか呼ばれてたみたい。
大手だと、UNIX互換のモニタを持っていたりしたなぁ。
それでもタスクと呼んでいた。
省6
188(2): 03/03/15 01:59 AAS
>>185
> 3. longjmp(), setjmp()機構と似た手法でコンテキスト・スイッチを
> 実現する。
WindowsではNT系だと、これはファイバとして搭載されてるなぁ。
コンテキストスイッチをユーザが全て制御できる手段として用意され散る模様。
オーバーヘッドがスレッドよりも小さいのでライトウェイトスレッドとか呼ばれるみたい。
コンテキストスイッチングのオーバーヘッドは、
プロセス>スレッド>ファイバ
となる。ファイバは1つのスレッドに属して、スレッドコンテキストを共有し、しかも
(そのスレッド内では)プリエンプションされないので、ファイバ間の排他処理の
省4
189(1): 03/03/15 03:49 AAS
>>188
ファイバってのは、NTにおけるユーザスレッドと考えていいのですかね?
190(1): 03/03/15 04:27 AAS
>>189
ユーザスレッドの定義がわからんので困ったな。Lタンの言う
> (2) 歴史的に UNIXでは、いわゆる「スレッド」がなかったので、アプリ
と実装は近いと思う。プリエンプションの無いRTOSのタスクと近いかと。
あと、Windowsではデバドラなんかでkernel-mode thread objectが使えたりする。
ディスパッチャがuser-mode thread objectとは別ルールでスケジューリングする。
DDKからの受け売りだけどな。だから勘違いもあるかもしれん。
これをカーネルスレッドと書くと、混乱に拍車をかけそうだな。
191: LightCone ◆sSJBc30S5w 03/03/15 10:46 AAS
>>190
>あと、Windowsではデバドラなんかでkernel-mode thread objectが使えたりする。
>ディスパッチャがuser-mode thread objectとは別ルールでスケジューリングする。
これと似た記述をUNIX系のドライバの書き方のページで見ました。
恐らくこれは、#185で書いた「カーネル・スレッド」の定義と全く違っていて、
混乱の元になるところですね(良く分からないですが)。
192(1): ( ´ -`) 03/03/15 12:17 AAS
>>184
ありがとうございます。
>>185
この辺はまだ理解が足りないのでいい加減な事を書いてしまうか
もしれませんが、一応カーネルスレッドというのには二つの意味
があると思います。
まずはLightConeさんが書かれたような二種類の実装の対比です。
ただ、歴史的にはそんな感じかもしれませんが、現代的には状況
が少し違います。ユーザスレッドにも良い点はあり、スレッドを
ユーザモードのライブラリで実装するか、カーネルで実装するか、
省10
193: ( ´ -`) 03/03/15 12:21 AAS
>>186
ワタシは元々TRON系なので、「タスク=スレッド」と言う意味で使用
しています。ただ、混乱を招くので以降はスレッドで統一しようと思
います。
>>188
ファイバはユーザに見えるのかな。面白そう。
NTは結構先進的だから一度ちゃんと研究しとかなねば。
194: 超先生@OS板 ◆leaf/RYZgY 03/03/15 12:56 AAS
<後ろ頭>y-~~ 最近は2-level threadなんてのも登場してるけど。
# K:U=n:m (多くのOSはn=1)
userland-threadはcontext switchingが軽い反面、
system callやmulti processingの並列性はnに限られてしまう。
195: 03/03/15 14:08 AAS
出現の順番は
プロセス→軽量プロセス(LWP)→スレッド
と、思っていたのですが、探してみたけど何処にも書いてなかった。
ちなみに、SolarisのLWPはスレッドとは別物です。
少し調べてみましたが、
カーネルモード・ユーザモードのどちらで動こうともカーネルによりスケジュールされるものを Kernel-level thread
カーネルによりスケジューリングされないものが、User-level thread
この場合、Kernel threadというとカーネルモードで動くスレッドのことをさすっぽいです。
つまり、スレッド化されたカーネルで使われる用語みたいです。
また、Kernel-level thread、User-Level threadを単にカーネルスレッド、ユーザスレッドということもあるみたいで、
省2
196: hosoboso ◆g2j80BX5do 03/03/16 01:01 AAS
FYI: 「最前線UNIXのカーネル(ピアソン)」 より
第3章 スレッドと軽量プロセス
「軽量プロセス (lightweight process, LWP) はカーネル支援ユーザ・スレッド
のことである。カーネル・スレッド機能に基づく高位概念機構である。したがっ
て、システムはLWPを装備する前にカーネル・スレッドを装備していなくては
ならない」
「メモ:LWPという術語は、SVR4/MPとSolaris 2.xの術語から借りてきたもの
である。SunOSバージョン4.xでは、LWPは次の項のユーザ・スレッドを指し
ているので、混乱がある。」
197(2): 03/03/16 16:51 AAS
ド素人質問でスマソ
カーネルモードスレッドって結局
スケジューリングをカーネルに委ねることでマルチプロセッサ(である場合)の
恩恵を受け易くするようなもののこと?
198: 03/03/16 22:11 AAS
>>197
そんな感じ
199: LightCone ◆sSJBc30S5w 03/03/17 00:21 AAS
>>197
と言う意味の他に、もう一つか二つ別の意味があると言うのが、今までの
話の流れです。
200(2): 03/03/17 06:50 AAS
>>192
>もう一つの意味では、カーネルスレッドというのはカーネル内での
>雑用をさせるためのスレッドのことで、ユーザモード部分を持たず
>カーネルモードだけで動作します
これは正しいの?おれはこんなの初めて聞いたけど。
スワッパーが実行コンテキストとしてのカーネルスレッドを
持っているからといって、スワッパーがカーネルスレッドな
わけじゃないよな。
それにプロセスに実行コンテキストが一対一対応してる古典的
UNIXにおいてもスワッパーのようなユーザーモードのない
省2
上下前次1-新書関写板覧索設栞歴
あと 334 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.215s*