2021年2月25日木曜日

カーネル本より #2

3章、スレッドと軽量プロセス で混乱気味。 

3.2 基本的な概念要素 で 

本節では、3つの重要なタイプであるカーネル・スレッド、軽量プロセス、ユーザ・スレッドについて述べる

とある。ここの軽量プロセス( lightweight process, LWP ) が、?

カーネル支援ユーザ・スレッドのことである

と書かれていて、読んでる最中はいまいちピンと来ず、 「支援」と書かれているからかな・・と思い

すべてのプロセスは、1つあるいはそれ以上のLWPを持つ。その各LWPは別個のカーネル・スレッドで支援されている(図 3.4)

その図には 1つの P(プロセス) が複数のL(LWP) と対応していて、L と K(カーネル・スレッド) が 1:1 で対応している。

各LWPはカーネル・スレッドに関連している一方で、カーネル・スレッドにはシステム・タスクに貢献してLWPを持たないものもある。

 ・・・その後に

メモ:  LWP という術語は、SVR4/MP と Solaris 2.x の術語から借りてきたものである。 SunOS バージョン 4.x では、LWP は次の項のユーザ・レベル・スレッドを指しているので、混乱がある。しかし、本書では、LWP をカーネル支援ユーザ・スレッドとして一貫して用いる。あるシステムでは、仮想プロセッサとして用いているが、本質的には LWP と同じである。

はい・・?

カーネルがLWPを生成、同期、管理する機構を提供する一方で、LWPの賢明な使用はプログラマに任される。多くのアプリケーションはユーザ・レベル・スレッド機能の方がよりよいサービスを受けられる。

と。スレッドのご利用は計画的にと。「次の項」の 3.2.3 ユーザ・スレッドには以下

Mach の Cスレッドや POSIX の pスレッドなどのライブラリ・パッケージを介して実現する。

うーん・・?グリーンスレッドとは違う?ややわけがわから無くなってきたのでなんとなく wikipedia を頼ると・・・ https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%A8%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

書かれている、「カーネルスレッドとLWPを総称してネイティブスレッドと呼ぶこともある。」だと自分としてはしっくりくる感。

その後の 3.5 節ではスケジューラ・アクティベーションが出てくる。前の NetBSD 。https://ja.wikipedia.org/wiki/Scheduler_activations

「Scheduler activations は 1999年に Anderson、Bershad、Lazowska、Levy により提唱された」と書かれているけど 1991年ではないかな。Received June 1991; revised August1991; accepted September 1991とある。

https://en.wikipedia.org/wiki/Light-weight_process

原書が出た当時に触ってたら「これなー」となるんだろうな。2000年代前半にいた職場では Solaris 入れたラップトップを持ってる人いたけど、LWP がどうの、というのは一度も聞いたことがなかったなぁ。

https://docs.oracle.com/cd/E19253-01/819-0390/mtintro-75924/index.html

Solaris のマルチスレッドライブラリと標準

 

その後2003年には Linux で ネイティブなパジックススレッドライブラリが出てくる。

Red Hat Linux 9 のプレスリリース残ってるのね

https://www.redhat.com/en/about/press-releases/press-redhatlinux9

0 件のコメント:

コメントを投稿