JP5859472B2 - プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法 - Google Patents

プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法 Download PDF

Info

Publication number
JP5859472B2
JP5859472B2 JP2013064808A JP2013064808A JP5859472B2 JP 5859472 B2 JP5859472 B2 JP 5859472B2 JP 2013064808 A JP2013064808 A JP 2013064808A JP 2013064808 A JP2013064808 A JP 2013064808A JP 5859472 B2 JP5859472 B2 JP 5859472B2
Authority
JP
Japan
Prior art keywords
dispatch
stack
dispatcher
context
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2013064808A
Other languages
English (en)
Other versions
JP2014191468A (ja
Inventor
周平 松本
周平 松本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2013064808A priority Critical patent/JP5859472B2/ja
Priority to US14/170,861 priority patent/US9619277B2/en
Publication of JP2014191468A publication Critical patent/JP2014191468A/ja
Application granted granted Critical
Publication of JP5859472B2 publication Critical patent/JP5859472B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Retry When Errors Occur (AREA)

Description

本発明は、プロセスのディスパッチ処理に関する。
計算機において、オペレーティングシステムのスケジューラは、プロセッサ資源を複数のプロセスの間で、時分割共有する役割を担う。オペレーティングシステムのスケジューラが有し、プロセスのスケジューリングで使用する基本的なデータ構造に、実行キューがある。実行キューは、プロセッサ上で実行可能なプロセスを格納する、待ち行列である。
スケジューラのスケジューリング処理のうち、特に、プロセッサ上で実行するプロセスを切り替える処理を、プロセスのディスパッチ処理と呼ぶ。プロセスのディスパッチ処理を担うオペレーティングシステムの構成要素を、特にディスパッチャと呼ぶ。
プロセッサ上で実行するプロセスを切り替えるときは、ディスパッチャが呼び出される。ディスパッチャが呼び出されると、ディスパッチ処理が実行される。ディスパッチャは、現在のプロセスを実行キューに挿入して、実行キューの中から最も優先度の高いプロセスを取り出して、取り出したプロセスをプロセッサ上で実行させる。
実行キューには、2つの形態がある。1つは、プロセッサごとに個別に実行キューを持たせる、ローカル実行キューである。もう1つは、複数のプロセッサで1つの実行キューを共有する、共有実行キューである。計算機の全てのプロセッサで共有される共有実行キューは、特に、グローバル実行キューと呼ばれる。
一般に、オペレーティングシステムは、主にローカル実行キューを用いる。ローカル実行キューを用いると、プロセスのスケジューリングが、複数プロセッサ間で、独立に動作する。そのため、複数プロセッサ間の競合がなく、プロセッサ数に関する高いスケーラビリティが得られる。また、プロセスが1つのプロセッサにとどまるので、各プロセッサが個別にキャッシュを持っていたときは、キャッシュの効率性の効果も大きい。
しかし、近年は、1つのソケットに複数のプロセッサコアが搭載されるマルチコアプロセッサが、標準になってきている。マルチコアプロセッサでは、一般に大容量キャッシュがソケット単位になり、ソケット内の複数プロセッサが大容量キャッシュを共有する構造が、とられている。そのため、キャッシュの効率性に関しては、1つのプロセスは1つのソケットにとどまれば十分である。
また、計算機では、プロセッサ間の負荷分散やプロセス間の資源配分の比率制御が、重要である。ローカル実行キューを用いる場合は、プロセスのスケジューリングは、プロセッサ間で独立に行われ、プロセッサ間で負荷を共有しない。従って、スケジューラは、自分でプロセッサ間の負荷の偏りや仮想計算機間の資源配分の不均衡を検出して、プロセスをプロセッサ間で明示的に移動させて動的に調整する必要がある。
しかし、この調整は複雑で難しく、処理コストも大きい。プロセッサ数の増加に伴い、複雑さやコストは増してきている。
これらの課題に対しては、共有実行キューをプロセッサのソケット単位に設け、ソケット内のプロセッサで共有すれば、キャッシュの効率性はローカル実行キューとほぼ同等を達成することができる。また、ソケット内のプロセッサで負荷を共有しているので、ソケットを1つの大きなプロセッサとみなすことができ、ソケット内では、プロセッサ間で明示的にプロセスを移動させることなく、プロセッサ間の負荷分散やプロセス間の資源配分の比率制御を自然に行うことができる。
共有実行キューを用いると、キャッシュの効率性に関しては、ローカル実行キューとほぼ同等で、負荷分散や比率制御が単純になる効果が期待できる。
しかし、非特許文献1に記載の通り、広く知られた従来のディスパッチ処理方法では、デッドロックに陥る可能性があり、その解決策も不十分のため、期待通りの効果が得られない。
共有実行キューを用いたときに、プロセスディスパッチ処理において共有実行キューへのアクセスの競合のオーバヘッドを削減する方法が、特許文献1に記載されている。特許文献1では、複数のプロセッサで共有する共有実行キューとプロセッサごとのローカル実行キューとが設けられ、プロセスディスパッチ処理では、できる限りローカル実行キューにアクセスすることが行われ、それにより、共有実行キューへのアクセスが減らされる。
しかしながら、この特許文献1には、共有実行キューを用いた場合のプロセスディスパッチ処理を直接的に改善する方法は提案されていない。
US6728959
U.Vahalia,UNIX Internals − The New Frontiers,Prentice Hall,1995 5.4節、Traditional UNIXScheduling、117ページ〜121ページ
ディスパッチャは、それ自身のスタックを持たない。しかし、プログラムを実行するためにはスタックが不可欠である。それゆえ、ディスパッチャは、自身を呼び出した現在実行中のプロセスと次に実行するプロセスとスタックを共有して実行する。そして、ディスパッチャが実行しているときは、スタックを途切れさせないようにするために、現在実行中のプロセスのコンテキスト退避と、次に実行するプロセスのコンテキスト復元が、コンテキスト切り替えと呼ぶ一連の処理として実行される。
また、コンテキスト切り替えを実行するためには、次に実行するプロセスを決める必要がある。このため、現在走行中のプロセスの実行キューへの挿入と次に実行するプロセスの実行キューからの取り出しが、現在実行中のプロセスから次に実行するプロセスへのコンテキスト切り替えの前に行われる必要がある。
実行キューを共有実行キューとし、その共有実行キューを複数プロセッサで共有すると、ディスパッチ処理でデッドロックが発生する可能性がある。デッドロックとは、2つ以上のプロセッサが自分以外のプロセッサの処理の終了を待ち、結果としてそれら2つ以上のプロセッサのどのプロセッサも先に進めなくなる状態を言う。
具体的には、ディスパッチャは、あるプロセッサ上で、それ自身を呼び出した現在のプロセスのコンテキストを保存する前に、そのプロセスを共有実行キューに挿入する。このため、別のプロセッサ上で実行中のディスパッチャは、そのプロセスのコンテキスト保存が完了する前に、そのプロセスを次に実行するプロセスに選択することができる。故に、ディスパッチャが、あるプロセスを次に実行するプロセスに選択したときに、選択したプロセスのコンテキスト保存が完了していない場合がある。この場合、ディスパッチャは、選択したプロセスのコンテキスト保存が完了するまで、待たされる。ディスパッチャは、現在のプロセスのコンテキスト保存と次のプロセスのコンテキスト復元を、コンテキスト切り替えと呼ぶまとまった一つの処理として実行する。このため、ディスパッチャは、次に実行するプロセスのコンテキスト保存が完了するまで、次に実行するプロセスのコンテキスト復元と、現在実行中のプロセスのコンテキスト保存が待たされる。このプロセスのコンテキスト保存の待ちが複数プロセッサ間で循環すると、デッドロックが発生してしまう。
実行キューを共有する複数のプロセッサの各々に、ディスパッチャ用スタックが割り当てられる。各プロセッサは、プロセスディスパッチ処理において、切替え元プロセス(実行中のプロセス)のコンテキストを切替え元プロセスのスタックに保存し、自プロセッサのディスパッチャ用スタックにディスパッチャ用コンテキストを保存し、切替え元プロセスを実行キューに挿入し、切替え先プロセスを実行キューから取り出し、且つ、切替え先プロセスのスタックから切替え先プロセスのコンテキストを復元する。
各プロセッサが、保持しているスタックの解放前にどのプロセッサにも保持されていない別のスタックを獲得してから保持しているスタックを解放するようになっていても、切替え先プロセスの選択前に、それまで実行していた切替え元プロセスのコンテキストの切替えについて、切替え元プロセスのスタック内への保存が完了していることが保証される。このため、プロセッサが切替え元のプロセスのスタックを解放してから切替え先のプロセスのスタックを獲得することができるようになっており、故に、実行キューを共有する複数のプロセッサでのディスパッチ処理においてデッドロックが発生しない。
実施形態に係る計算機の概要を示す構成図。 実施形態に係るスケジューリングとディスパッチの説明図。 プロセスのコンテキストの保存と復元の処理の流れを示す概念図。 実施形態の比較例に係るディスパッチ処理の実行フロー。 実施形態の比較例に係るディスパッチ処理の流れの示す概念図の第1部分。 実施形態の比較例に係るディスパッチ処理の流れの示す概念図の第2部分。 実施形態の比較例に係るディスパッチ処理の流れの示す概念図の第3部分。 実施形態の比較例に係るディスパッチ処理の流れの示す概念図の残り部分。 実施形態の比較例に係るディスパッチ処理においてデッドロックが発生する可能性があることを示す概念図。 実施形態に係るディスパッチ処理の実行フロー。 実施形態に係るディスパッチ処理の流れの示す概念図の第1部分。 実施形態に係るディスパッチ処理の流れの示す概念図の第2部分。 実施形態に係るディスパッチ処理の流れの示す概念図の第3部分。 実施形態に係るディスパッチ処理の流れの示す概念図の残り部分。 実施形態に係るディスパッチ処理においてデッドロックが発生しないことを示す概念図。
本発明の一実施形態を、図面を用いて詳細に説明する。
なお、以下の実施形態では、実行キュー(共有実行キュー)を共有するプロセッサの数は2であるが、実行キューを共有するプロセッサの数は2より多くてよい。
また、以下の説明では、同種の要素を区別して説明する場合には、親符号と子符号の組合せとしての参照符号を使用し(例えばプロセッサ0(010a)、同種の要素を区別しないで説明する場合には、親符号のみ(例えばプロセッサ010)を使用する。
また、以下の説明では、プログラム、プロセス或いは関数等を主語に処理を説明する場合があるが、プログラム、プロセス或いは関数等は実際にはプロセッサによって行われるので、その処理の主語をプロセッサとすることができる。
図1は、本発明の一実施形態に係る計算機の概要を示す構成図である。
計算機1000のハードウェア資源001は、実行キューを共有する2つのプロセッサ0(010a)とプロセッサ1(010b)を含む。また、ハードウェア資源001は、メモリ020、ディスク030、及び様々な他のデバイス040を含む。プロセッサ0(010a)及びプロセッサ1(010b)が、メモリ020、ディスク030及びデバイス040に通信可能に接続される。
プロセッサ010は、プログラムを実行するためのハードウェア資源を有する。具体的には、例えば、プロセッサ0(010a)は、ハードウェア資源として、プログラムカウンタ(PC)011a、汎用レジスタ(GR)012a、及びスタックポインタ(SP)013aを有する。プロセッサ1(010b)も同様のハードウェア資源011b、012b及び013bを有する。プログラムカウンタ011は、次に実行する命令が格納されているメモリ上のアドレスを示すレジスタである。汎用レジスタ012は、特定の機能に限定せずに多目的に使用されるレジスタであり、例えばデータ、命令やデータを格納したメモリのアドレス、及び演算結果を一時的に記憶するために使用される。スタックポインタ013は、スタック内で最も後に参照された位置を示すレジスタ(情報)であり、スタックにデータを保存したり、スタックからデータを取り出したりするために使用される。ここで、スタックは、後入れ先出しのメモリ上のデータ構造であり、関数呼び出しでの引数渡し、関数の呼び出し元アドレスの保存、及び、関数を実行するための変数の一時保存等に使用される。プロセッサ010は、その他のハードウェア資源(例えば複数レベルのキャッシュ等)を有してよい。
メモリ020は、プログラム及びデータを記憶する揮発性メモリであるが、他種のメモリでもよい。
ディスク030は、プログラム及びデータを記憶する不揮発性のディスク型記憶デバイス(例えばハードディスクドライブ)であるが、他種の記憶デバイスでもよい。
デバイス040は、計算機1000の外部の通信ネットワークを通して外部の計算機と通信するための通信インタフェースデバイス、外部のディスクと接続するため拡張カード、指定した時刻にプロセッサ0(010a)とプロセッサ1(010b)に割り込みを発生させるタイマなどを含むが、本実施形態ではその詳細は問わないので、まとめて単にデバイス040と言う。
メモリ020にオペレーティングシステム(OS)100が記憶され、プロセッサ010によってOS100が実行されることで、プロセス200が実行される。具体的には、OS100は、ハードウェア資源001を管理し、プロセス0(200a)からプロセス6(200f)に共通のサービスを提供する。OS100は、ハードウェア資源001とプロセス0(200a)からプロセス6(200f)の間の仲介の役割を果たす。OS100は、カーネル110、ブートローダ160、及びデバイスドライバ170を有する。
カーネル110は、OS100の中核となる部分であり、プロセス200や周辺機器の監視、プロセッサ010やメモリ020などのハードウェア資源001の管理、割り込み処理、プロセス間通信等、オペレーティングシステムとしての基本機能を提供する。
ブートローダ160は、計算機の起動直後に動作し、OS100をディスク030からメモリ020に読み込んで起動する機能を提供する。
デバイスドライバ170は、拡張カードや周辺機器等の入出力デバイスを制御する機能を提供する。
カーネル110は、スケジューラ120、ディスパッチャ130、仮想記憶140、及びファイルシステム150を有する。
スケジューラ120は、プロセッサ010を複数のプロセス200で時分割共有するためにプロセス200の実行順序を決める役割を担い、定期的に呼び出されて複数プロセス200の中で次にどのプロセス200をプロセッサ010に割り当てるかを決定する。この機能を特に「スケジューリング」と呼ぶ。
ディスパッチャ130は、プロセッサ010を複数のプロセス200で時分割共有するためにプロセッサ010上で実行するプロセス200を切り替える。この機能を特に「ディスパッチ」と呼ぶ。スケジューラとディスパッチャをまとめて「スケジューラ」と呼ぶことがある。具体的には、スケジューラ120がディスパッチャ130としての機能を含んでいてもよい。
仮想記憶140は、プロセス200の要求に応じてメモリ020の一部を割り当てたり、そのメモリ020が割り当てたプロセス200にとって不要になったときに再利用のために解放したりするメモリ管理と、不連続なメモリ領域をプロセス020に連続であるように見せかける仮想アドレス管理とを用いて、メモリ020の容量よりも大きなメモリ容量を仮想的に利用可能にする機能を提供する。
ファイルシステム150は、主にディスク030等に記録された様々なデータをファイルとして管理する機能を提供する。プロセス020は、ファイルシステム150を介して、統一した方式で様々なデータにアクセスすることができる。
プロセス200(200a〜200f)は、アプリケーション等のプログラムのための実行環境であり、カーネル110によって提供される。
図2は、本実施形態に係るケジューリングとディスパッチの説明図である。
プロセス3(200c)は、プロセス構造体210cとスタック220cを、メモリ020上に持つ。プロセス構造体210cは、カーネル110にとって必要なプロセスの情報を保持するデータ構造であり、プロセス識別情報211c、プロセス管理情報212c、及びスタックポインタ値213cで構成される。スタック220cは、関数の呼び出し元アドレスの保存、関数のローカル変数の保持、及びプロセス切り替え時に汎用レジスタの内容を保存したりするために使われる。プロセス1(200a)、プロセス2(200b)、プロセス4(200d)、プロセス5(200e)、及びプロセス6(200f)も同様である。
プロセス0(200a)とプロセス2(200b)が、それぞれプロセッサ0(010a)とプロセッサ1(010b)上で実行中のときは、プロセス3(200c)、プロセス4(200d)、プロセス5(200e)、及びプロセス6(200f)は、待ち状態になる。スケジューラ120は、これらの実行待ち状態のプロセスを実行キュー121で管理する。実行キュー121が、プロセッサ0(010a)とプロセッサ1(010b)で共有される。つまり、実行キュー121は、ローカル実行キューと共有実行キューの2つの形態のうち、共有実行キューである。実行キュー121は、例えば、メモリ020を使用して管理される。
実行キュー121は、待ち行列であり、実行キューの中のプロセス200をどのような順に並べるかは、スケジューラ120が制御する。実行キュー121におけるプロセス200の並べ方の方式として後入れ先出しや優先度順など様々なものがあるが、本実施形態ではその詳細を問わない。
本実施形態では、プロセッサ0(010a)とプロセッサ1(010b)それぞれに、ディスパッチャ130用のスタック131aとディスパッチャ用スタック131bが割り当てられる。このようなスタック131を用いてディスパッチ処理を変更し、共有実行キュー121を用いるときのデッドロックの問題を、複数プロセッサ010間のロック競合を引き起こすことなく解決し、共有実行キュー121の効果を期待通りに得られるようにすることができる。
まず、スタック131aとスタック131bの必要性を示す。プロセス200がプロセッサ010上で実行しているときの、そのプロセッサ010のレジスタの内容(そのレジスタに記録されている情報)のことを、本実施形態において「コンテキスト」と呼ぶ。本実施形態では、プロセス200のコンテキストは、汎用レジスタとスタックポインタを含む。複数のプロセス200でプロセッサ010を時分割共有するためには、あるプロセス200がプロセッサ010上で実行を一時停止するときに、そのプロセス200のコンテキストを保存し、そのプロセス200が実行を再開するときにそのプロセス200のコンテキストを復元する必要がある。プロセス200のコンテキストの保存と復元には、そのプロセス200のプロセス構造体とスタックを用いて行う。
図3は、プロセスのコンテキストの保存と復元の処理の流れを示す概念図である。以下、プロセッサ0(010a)上で実行中であったプロセス1(200a)が、プロセッサ0(010a)上での実行を一時停止し、プロセッサ1上(010b)で実行を再開する場合を例に取り上げ、プロセスのコンテキストの保存と復元を説明する。
S301:コンテキスト保存を開始する前の状態である。
S302:プロセス1(200a)のコンテキストの保存では、まず、プロセッサ0(010a)が、プロセッサ0(010a)の汎用レジスタ012の内容を、プロセス1(200a)のスタック220aに保存する。
S303:次に、プロセッサ0(010a)は、プロセッサ0(010a)のスタックポインタ013aの内容を、プロセス1(200a)のプロセス構造体210aに保存する。
S304:プロセス1(200a)のコンテキストの復元では、まず、プロセッサ1(010b)が、スタックポインタ013aの内容を、プロセス1(200a)のプロセス構造体210aからプロセッサ1(010b)のスタックポインタに復元する。
S305:次に、プロセッサ1(010b)が、汎用レジスタの内容を、プロセス1(200b)のスタック220bからプロセッサ1(010b)の汎用レジスタ012bに復元する。
前述の通り、プロセッサ上で実行するプロセスを切り替える処理を「ディスパッチ処理」と呼ぶ。ディスパッチ処理は、プロセスがディスパッチ処理を呼び出すことで、ディスパッチャ130によって実行される。ディスパッチャ130は、次に実行するプロセスを選択する必要があるが、これは、ディスパッチャ130が、スケジューラ120がプロセスの並び順を制御する共有実行キュー121から先頭のプロセスを取り出すことによって、行う。ディスパッチャ130は、この次に実行するプロセスの候補に現在実行中のプロセスも含めるために、まず現在実行中のプロセスを共有実行キュー121に挿入してから次に実行するプロセスを共有実行キュー121から取り出す。
ディスパッチャ130は、それ自身のスタックを持たない。しかし、プログラムを実行するためには、スタックが不可欠である。それゆえ、ディスパッチャ130は、自身を呼び出した現在実行中のプロセスと、次に実行するプロセスとスタックを、共有して実行する。そして、ディスパッチャ130が実行しているときは、スタックを途切れさせないようにするために、現在実行中のプロセスのコンテキスト退避と、次に実行するプロセスのコンテキスト復元を、コンテキスト切り替えと呼ぶ一連の処理として実行する。
コンテキスト切り替えを実行するためには、次に実行するプロセスを決める必要がある。そこで、現在実行中のプロセス200の実行キュー121への挿入と、次に実行するプロセス200の共有実行キュー121からの取り出しを、現在実行中のプロセス200から次に実行するプロセス200へのコンテキスト切り替えの前に行うと、前述のようにデッドロックが発生する可能性がある。
以下、その考察(実施形態の比較例)を、図4〜図9を参照して説明する。
図4は、比較例に係るディスパッチ処理の実行フローを表す。図5〜図8は、比較例に係るディスパッチ処理の流れを示す。
図5のS501:プロセッサ010a上で現在実行中のプロセス200aがディスパッチ関数を呼び出す前の状態を表す。
図5のS502:プロセス200aがディスパッチ関数301を呼び出すと(図4の300)、ディスパッチ関数301の呼び出し元アドレスが、そのプロセス200aのスタックに保存される。ディスパッチ関数301は、呼び出されると、まず現在のプロセス200aを実行キュー121に挿入する(図4の302)。この挿入位置は、スケジューラ120によって決定される。ディスパッチ関数301は、続けて、次に実行するプロセスを実行キュー121から取り出す。そして、ディスパッチ関数301は、コンテキスト切り替え関数305を呼び出す(図4の304)。
図6のS503:コンテキスト切り替え関数305が呼び出されると、コンテキスト切り替え関数305の呼び出し元アドレスが、現在のプロセス200aのスタック220aに保存される。
図6のS504:コンテキスト切り替え関数305は、上述の通りコンテキスト保存を行う。
続けて、次に実行するプロセスのコンテキスト復元が行われる。
図7のS505:すなわち、プロセス200aが、次に実行するプロセスとなり、コンテキスト切り替え関数305が、そのプロセス200aのコンテキスト復元を開始する。コンテキスト復元(図4の307)では、コンテキスト切り替え関数305が、プロセス200aのプロセス構造体210aに保存したスタックポインタの内容213aをプロセッサ010aのスタックポインタ013aに復元することで、プロセッサ010aの使用するスタックを次のプロセス200aのスタック220aに切り替える。
図7のS506:続けて、上述の通り、コンテキスト切り替え関数305が、プロセス200aのコンテキストをプロセッサ010aに復元する。
図8のS507:プロセッサ010aは、コンテキスト切り替え関数305を終了して(図4の308)、次のプロセス200aのスタック220aに保存されたコンテキスト切り替え関数305の呼び出し元に戻る。
図8のS508:更に、プロセッサ010aは、次のプロセス200aのスタック220aに保存されたディスパッチ関数301の呼び出し元に戻り(図4の309)、次のプロセスの実行を再開する。
このような比較例によれば、ディスパッチ処理においてデッドロックが発生する可能性がある。
すなわち、図9の上側に示すように、プロセッサ0(010a)上で実行中のプロセス1(200a)がディスパッチャ130を呼び出すと、ディスパッチャ130はプロセス1(200a)を共有実行キュー121に挿入する。一方、プロセッサ1(010b)上で実行中のプロセス2(200b)がディスパッチャ130を呼び出すと、ディスパッチャ130はプロセス2(200b)を共有実行キュー130に挿入する。
スケジューラ120が、共有実行キュー121にプロセス1(200a)とプロセス2(200b)が挿入されると、プロセス2(200b)を先頭にプロセス1(200a)をその次に並べたとする。
プロセッサ0(010a)上でディスパッチャ130が共有実行キュー121の先頭のプロセスを取り出すと、プロセス2(200b)が取り出される。次にプロセッサ1(010a)上でディスパッチャ130が共有実行キュー121の先頭のプロセスを取り出すと、プロセス1(200a)が取り出される。プロセッサ0(010a)上では、プロセス1(200a)からプロセス2(200b)にコンテキストを切り替えるために、プロセス2(200b)のコンテキスト保存の完了を待つ。プロセッサ1(010b)上では、プロセス2(200b)からプロセス1(200a)にコンテキストを切り替えるためにプロセス1(200a)のコンテキスト保存の完了を待つ。
プロセス1(200a)のコンテキスト保存は、プロセス1(200a)からプロセス2(200b)へのコンテキスト切り替えの中で行い、プロセス2(200b)のコンテキスト保存は、プロセス2(200b)からプロセス1(200a)へのコンテキスト切り替えの中で行う。そのため、プロセッサ0(010a)はプロセス2(200b)のコンテキスト保存の完了を待って、プロセス1(200a)のコンテキスト保存を開始できず、プロセッサ1(010b)はプロセス1(200a)のコンテキスト保存完了を待ってプロセス2(200b)のコンテキスト保存を開始できず、デッドロックが発生する。
デッドロックが発生する理由を更に詳細に説明する。比較例では、ディスパッチャ130は、プロセッサ0(010a)上で、それ自身を呼び出した現在のプロセス1(200a)のコンテキストを保存する前に、プロセス1(200a)を共有実行キュー121に挿入する。このため、プロセッサ1(010b)上で実行中のディスパッチャ139は、プロセス1(200a)のコンテキスト保存が完了する前に、プロセス1(200a)を次に実行するプロセスに選択することができる。故に、ディスパッチャ130があるプロセスを次に実行するプロセスに選択したときに、選択したプロセスのコンテキスト保存が完了していない場合がある。この場合、ディスパッチャ130は、選択したプロセスのコンテキスト保存が完了するまで待たされる。更に、ディスパッチャ130は、現在のプロセスのコンテキスト保存と次のプロセスのコンテキスト復元を、コンテキスト切り替えと呼ぶまとまった一つの処理として実行する。そのため、次に実行するプロセスのコンテキスト保存が完了するまで、次に実行するプロセスのコンテキスト復元と現在実行中のプロセスのコンテキスト保存が待たされる。このプロセスのコンテキスト保存の待ちが複数プロセッサ間で循環すると、デッドロックが発生してしまう。
プロセスのコンテキストを複数プロセッサで共有する資源と考え、プロセスのコンテキスト復元をプロセッサによるプロセスのコンテキスト獲得とみなし、プロセスのコンテキスト保存をプロセッサによるプロセスのコンテキスト解放とみなすと、デッドロックを次のように説明することができる。すなわち、図9の下側に示すように、プロセッサ0(010a)がプロセス1(200a)のコンテキストを保持したままプロセス2(200b)のコンテキストを獲得しようとし、プロセッサ1(010b)がプロセス2(200b)のコンテキストを保持したままプロセス1(200a)のコンテキストを獲得しようとして、デッドロックが発生する。
このようなデッドロックを回避するための方法として、ディスパッチ処理全体をロックで保護する方法が考えられるが、その方法では、プロセスのコンテキストの保存と復元の競合によるオーバヘッドが大きく、不十分である。
そこで、本実施形態では、共有実行キュー121を共有するプロセッサ010ごとにディスパッチャ用のスタック131が設けられ、各プロセッサ010は、自分に割り当てられたディスパッチャ用のスタック131を使用してプロセスのコンテキストの保存と復元を行うことで、プロセッサ間の競合によるオーバヘッドを発生させずにデッドロックを回避することができる。そして、ディスパッチャ130はディスパッチ処理のみを実行するので、ディスパッチャ用スタックに必要な容量は小さくて済む(例えば、OS100やプロセス200a〜200fが使うメモリ容量に比べればメモリ020への影響はかなり小さいと考えられる)。
以下、詳述する。
プロセッサ0(010a)のディスパッチャ用スタック131aとプロセッサ1(010b)のディスパッチャ用スタック131bを用いると、現在のプロセスから次のプロセスへのコンテキスト切り替えを、現在のプロセスのコンテキスト保存と次のプロセスのコンテキスト復元の2つの処理に分けることができる。これは、現在のプロセスのコンテキストを保存してから、次のプロセスのコンテキストを復元するまでの間は、ディスパッチャ130が現在のプロセッサのディスパッチャ用スタックを用いて処理を実行できるからである。
また、ディスパッチャ130は、ディスパッチ処理を毎回完了するまで実行し、途中で中断して別のプロセスを実行することもないので、ディスパッチャ用スタックへのディスパッチャ130のコンテキストの保存も不要である。ディスパッチャ130は自身のスタックを毎回スタックの所定位置(典型的には先頭)から使い始める。
図10は、実施形態に係るディスパッチ処理の実行フローを表す。図11〜図14は、実施形態に係るディスパッチ処理の流れを示す。
本実施形態では、ディスパッチャ130のディスパッチ処理が、ディスパッチ入口関数401、ディスパッチ関数405、及びディスパッチ出口関数409の3つの関数により実現される。
図11のS1101:プロセッサ010a上で現在実行中のプロセス200aがディスパッチ入力関数401を呼び出す前の状態を表す。
図11のS1102:プロセッサ010a上で現在実行中のプロセス200aが、ディスパッチ入口関数401を呼び出すと(図10の400)、ディスパッチ入口関数401の呼び出し元アドレスが現在のプロセス200aのスタック220aに保存される。ディスパッチ入口関数401は、現在のプロセス200aのコンテキストを保存する(図10の402)。
図12のS1103:コンテキスト保存では、まず、ディスパッチ入口関数401が、現在のプロセッサ010aの汎用レジスタ012aの内容を、現在のプロセス200aのスタック220aに保存する。そして、ディスパッチ入口関数401は、現在のプロセッサ010aのスタックポインタ013aの内容を、現在のプロセス200aのプロセス構造体210aのSP保存値213aに保存する。
図12のS1104:続けて、ディスパッチ入口関数401は、現在のプロセッサ010aのディスパチャ用スタック131aの先頭を、現在のプロセッサ010aのスタックポインタ013aに設定し、スタックを、現在のプロセッサ010aのディスパッチャ用スタック131aに切り替える。更に、ディスパッチ入口関数401は、汎用レジスタ012aもディスパッチ関数405を呼び出すための適切な内容に変更して、ディスパッチ関数とディスパッチ出口関数のアドレスやこれらを呼び出す際の引数等のディスパッチャ用コンテキストをディスパッチャ用スタック131aに保存する(図10の403)。そして、ディスパッチ入口関数401は、ディスパッチャ用コンテキストを用いて、ディスパッチ関数405を呼び出す(図10の404)。
図13のS1105:ディスパッチ関数405の呼び出し元アドレスのディスパッチャ用スタックへの保存は、ディスパッチ関数405が自身の呼び出し元関数に戻ることがないので不要である。ディスパッチ関数405は、呼び出されると、現在のプロセス200aを共有実行キュー121に挿入する(図10の406)。このプロセスの挿入位置はスケジューラ120によって決定される。ディスパッチ関数405は、次に実行するプロセスを共有実行キュー121の先頭から取り出す(図10の407)。ディスパッチ関数405は、ディスパッチ出口関数409を呼び出して(図10の408)、次に実行するプロセスのコンテキストを復元する。ディスパッチ出口関数409を呼び出しは、ディスパッチャ用スタック131aに保存したディスパッチャ用コンテキストを用いて行われる。
以降は、上述の現在のプロセス200aが、共有実行キュー121の先頭から取り出されて次に実行するプロセスとなり、ディスパッチ出口関数409が呼び出される。
図13のS1106:ディスパッチ出口関数409の、呼び出し元アドレスのディスパッチャ用スタックへの保存も、ディスパッチ出口関数が自身の呼び出し元に戻ることがないので不要である。
図14のS1107:ディスパッチ出口関数409は、呼び出されると、次に実行するプロセス200aのコンテキストを復元する(図10の410)。コンテキスト復元では、まず、ディスパッチ出口関数409は、プロセス構造体210aに保存したスタックポインタの内容213aを現在のプロセッサ010aのスタックポインタ013aに復元する。続けて、ディスパッチ出口関数409は、次のプロセス200aのスタック220aに保存した汎用レジスタの内容を、現在のプロセッサ010aの汎用レジスタ012aに復元する。そして、ディスパッチ出口関数409は、次に実行するプロセスのスタックに保存されたディスパッチ入口関数の呼び出し元に戻る(図10の411)。
図14のS1108:次に実行するプロセスは、ディスパッチ入口関数の呼び出し元に戻ると、実行を再開する。
図15を参照して、本実施形態ではデッドロックが発生しないことを説明する。
図15の上側に示すように、プロセッサ0(010a)上でプロセス1(200a)が実行中で、プロセッサ1(010b)上でプロセス2(200b)が実行中であるとする。
プロセッサ0(010a)上で実行中のプロセス1(200a)がディスパッチャ130を呼び出すと、ディスパッチャ130は、プロセス1(200a)のコンテキストを保存してからプロセス1(200a)を共有実行キュー121に挿入する。
プロセッサ1(010a)上でプロセス2(200b)がディスパッチャ130を呼び出すと、ディスパッチャ130は、プロセス2(200b)のコンテキストを保存してからプロセス2(200b)を共有実行キュー121に挿入する。
スケジューラ120が、プロセス2(200b)を共有実行キュー121の先頭に挿入し、プロセス1(200a)をその次に挿入したとする。
プロセッサ0(010a)上でディスパッチャ130が、プロセス2(200b)を共有実行キュー121の先頭から取り出すと、直ちにプロセス2(200b)のコンテキストを復元してプロセス2(200b)の実行を再開する。
次に、プロセッサ1(010a)上でディスパッチャ130が、プロセス1(010a)を共有実行キュー121の先頭から取り出すと、直ちにプロセス1(010a)のコンテキストを復元してプロセス1(010a)の実行を再開する。
以上の通り、本実施形態によればデッドロックが発生しない。
デッドロックが発生しない理由を更に詳細に説明する。
プロセッサ0(010a)上で、ディスパッチャ130は、自身を呼び出したプロセス1(010a)のコンテキストを保存してから、プロセス1(200a)を共有実行キュー121に挿入する。したがって、プロセッサ1(010b)上で実行中のディスパッチャ130が、プロセス1(010a)を共有実行キュー121から取り出して次に実行するプロセスに選択したときは、プロセス1(200a)のコンテキスト保存が完了していることが、保証される。
それゆえ、ディスパッチャ130が、プロセス1(200a)のコンテキスト復元を開始するときに、そのプロセス1(200a)のコンテキスト保存の完了を待つことはない。ディスパッチ処理の中のプロセスのコンテキスト保存と復元において、プロセス1(200a)のコンテキスト保存の完了を待つことがないので、複数プロセッサによる待ち状態の循環が発生することもない。よってデッドロックが発生しない。
前述と同様に、プロセスのコンテキストとディスパッチャのコンテキストを、複数プロセッサで共有する資源と考え、コンテキスト復元をプロセッサによるコンテキストの獲得とみなし、プロセスまたはディスパッチャのプロセッサ上での実行をプロセッサによるコンテキストの保持とみなし、コンテキスト保存をプロセッサによるコンテキスト解放とみなすと、デッドロックが発生しない理由を次のように説明することができる。
すなわち、図9の下側に示すように、本実施形態では、プロセッサ0(010a)は、自身のディスパッチャ用コンテキストを保持した状態で、解放されているプロセス2(200b)のコンテキストを獲得しようとし、プロセッサ1(010b)は、自身のディスパッチャ用コンテキストを保持した状態で、解放されているプロセス1(200a)のコンテキストを獲得しようとする。このように、待ちの循環がないので、デッドロックは発生しない。
本実施形態によれば、プロセッサごとのディスパッチャ用スタックが設定され、ディスパッチャ用スタックを用いることによって、現在実行中のプロセスから次に実行するプロセスへのコンテキスト切り替えを、現在実行中のプロセスのコンテキスト保存処理と、次に実行するプロセスのコンテキスト復元処理に分けることができる。そして、現在実行中のプロセスのコンテキストを保存し、そのプロセスを共有実行キューに挿入し、次に実行するプロセスを共有実行キューから取り出し、そのプロセスのコンテキストを復元する手順でディスパッチ処理を行うことができる。本実施形態では、プロセスのコンテキスト保存と復元の複数プロセッサ間の競合によるオーバヘッドを引き起こさずにデッドロックを回避することができる。
以上、一実施形態を説明したが、本発明は、その実施形態に限定されない。例えば、上記実施形態を、ハイパバイザのような仮想化機構が実行される計算機に適用することができる。この場合、上記OS100の機能がハイパバイザのような仮想化機構に適用され、プロセスが、仮想計算機が有する仮想プロセッサ(1以上のプロセッサ010に基づく仮想的なプロセッサ)に適用されてよい。
010:プロセッサ、 011:プログラムカウンタ、 012:汎用レジスタ、 013:スタックポインタ、 020:メモリ、 100:オペレーティングシステム、 120:スケジューラ、 121:(共有)実行キュー、 130:ディスパッチャ、 131:ディスパッチャ用スタック、 200:プロセス

Claims (8)

  1. プロセスの待ち行列である実行キューを共有する複数のプロセッサと、
    プロセスのスタックが設定されるメモリと
    を有し、
    前記メモリに、前記複数のプロセッサにそれぞれ対応した複数のディスパッチャ用スタックが設定され、
    前記複数のプロセッサの各々は、実行中のプロセスを切り替える処理であって、ディスパッチ入口処理、ディスパッチ本体処理及びディスパッチ出口処理で構成された処理であるプロセスディスパッチ処理を実行し
    前記ディスパッチ入口処理は、
    (A)前記実行中のプロセスである切替え元プロセスのコンテキストを前記切替え元プロセスの保持しているスタックに保存する処理と
    (B)自プロセッサのディスパッチャ用スタックを獲得し、前記切替え元プロセスのスタックを解放し、前記獲得したディスパッチャ用スタックにディスパッチャ用コンテキストを保存する処理と
    を含み、
    前記ディスパッチ本体処理は、
    (C)前記切替え元プロセスを前記実行キューに挿入する処理と
    (D)切替え先プロセスを前記実行キューから取り出す処理と
    を含み、
    前記ディスパッチ出口処理は、
    (E)前記切替え先プロセスのスタックを獲得し、保持している前記ディスパッチャ用スタックを解放し、前記切替え先プロセスの前記獲得したスタックから前記切替え先プロセスのコンテキストを復元する処理
    を含む、
    計算機。
  2. 前記ディスパッチ入口処理
    前記(A)の処理の前に、前記ディスパッチ入口処理の呼び出し元アドレス、前記切替え元のスタックに保存する処理と、
    前記(B)の処理の後に、前記ディスパッチ本体処理呼び出す処理と
    を含み、
    前記ディスパッチ本体処理は、
    前記(D)の処理の後に、前記ディスパッチ出口処理呼び出す処理
    を含み、
    前記ディスパッチ出口処理
    前記(E)の処理の後に前記切替え先プロセスの前記獲得したスタックに保存されているディスパッチ入口処理呼び出し元アドレスが示す呼び出し元へ復帰する処理
    を含む、
    請求項記載の計算機。
  3. 前記ディスパッチャ用コンテキストは、前記ディスパッチ本体処理及び前記ディスパッチ出口処理呼び出しのための情報である呼び出し用情報を含
    前記呼び出し用情報は、前記ディスパッチ本体処理及び前記ディスパッチ出口処理のそれぞれのアドレスと、前記ディスパッチ本体処理及び前記ディスパッチ出口処理のそれぞれを呼び出す際の引数とを含む、
    請求項1又は2記載の計算機。
  4. 前記複数のプロセッサの各々は、スタック内で最も後に参照された位置を示す情報であるスタックポインタを有しており、前記(A)の処理から前記(B)の処理に遷移する場合には、前記自プロセッサのスタックポインタを、前記ディスパッチャ用スタックの所定位置を指す情報に更新する、
    請求項1乃至3のうちのいずれか1項に記載の計算機。
  5. プロセスの待ち行列であり複数のプロセッサにより共有される実行キューを使用してプロセッサの実行中のプロセスをそのプロセッサである対象プロセッサにより切り替えるプロセスディスパッチ処理の方法であって
    前記対象プロセッサは、ディスパッチ入口処理、ディスパッチ本体処理及びディスパッチ出口処理で構成されたプロセスディスパッチ処理のうち、
    (A)前記実行中のプロセスである切替え元プロセスのコンテキストを、前記対象プロセッサが保持しているスタックに保存する処理と
    (B)前記対象プロセッサのディスパッチャ用スタックを獲得し、前記切替え元プロセスのスタックを前記対象プロセッサから解放し、前記獲得したディスパッチャ用スタックに前記対象プロセッサについてのディスパッチャ用コンテキストを保存する処理と
    を含んだ前記ディスパッチ入口処理を実行し、
    前記対象プロセッサは、前記プロセスディスパッチ処理のうち、
    (C)前記切替え元プロセスを前記実行キューに挿入する処理と
    (D)切替え先プロセスを前記実行キューから取り出す処理と
    を含んだ前記ディスパッチ本体処理を実行し、
    前記対象プロセッサは、前記プロセスディスパッチ処理のうち、
    (E)前記切替え先プロセスのスタックを前記対象プロセッサについて獲得し、保持している前記ディスパッチャ用スタックを前記対象プロセッサから解放し、前記切替え先プロセスの前記獲得したスタックから前記切替え先プロセスのコンテキストを前記対象プロセッサに復元する処理
    を含んだ前記ディスパッチ出口処理を実行する、
    プロセスディスパッチ処理方法。
  6. 前記ディスパッチ入口処理
    前記(A)の処理の前に、前記ディスパッチ入口処理の呼び出し元アドレス、前記切替え元のスタックに保存する処理と、
    前記(B)の処理の後に、前記ディスパッチ本体処理呼び出す処理と
    を含み、
    前記ディスパッチ本体処理は、
    前記(D)の処理の後に、前記ディスパッチ出口処理呼び出す処理
    を含み、
    前記ディスパッチ出口処理は、
    前記(E)の処理の後に前記切替え先プロセスの前記獲得したスタックに保存されているディスパッチ入口処理呼び出し元アドレスが示す呼び出し元へ復帰する処理
    を含む、
    請求項記載のプロセスディスパッチ処理方法。
  7. 前記ディスパッチャ用コンテキストは、前記ディスパッチ本体処理及び前記ディスパッチ出口処理呼び出しのための情報である呼び出し用情報を含
    前記呼び出し用情報は、前記ディスパッチ本体処理及び前記ディスパッチ出口処理のそれぞれのアドレスと、前記ディスパッチ本体処理及び前記ディスパッチ出口処理のそれぞれを呼び出す際の引数とを含む、
    請求項5又は6記載のプロセスディスパッチ処理方法。
  8. 前記(A)の処理から前記(B)の処理に遷移する場合には、前記対象プロセッサは、前記対象プロセッサのスタック内で最も後に参照された位置を示す情報であるスタックポインタを、前記ディスパッチャ用スタックの所定位置を指す情報に更新する、
    請求項5乃至7のうちのいずれか1項に記載のプロセスディスパッチ処理方法。
JP2013064808A 2013-03-26 2013-03-26 プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法 Expired - Fee Related JP5859472B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013064808A JP5859472B2 (ja) 2013-03-26 2013-03-26 プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法
US14/170,861 US9619277B2 (en) 2013-03-26 2014-02-03 Computer with plurality of processors sharing process queue, and process dispatch processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013064808A JP5859472B2 (ja) 2013-03-26 2013-03-26 プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法

Publications (2)

Publication Number Publication Date
JP2014191468A JP2014191468A (ja) 2014-10-06
JP5859472B2 true JP5859472B2 (ja) 2016-02-10

Family

ID=51622181

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013064808A Expired - Fee Related JP5859472B2 (ja) 2013-03-26 2013-03-26 プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法

Country Status (2)

Country Link
US (1) US9619277B2 (ja)
JP (1) JP5859472B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10140157B2 (en) * 2014-05-29 2018-11-27 Apple Inc. Multiple process scheduling of threads using process queues
US11343290B2 (en) 2020-02-27 2022-05-24 V Group Inc. Methods and systems for facilitating context-to-call communications between communication points in multiple communication modes

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4318182A (en) * 1974-04-19 1982-03-02 Honeywell Information Systems Inc. Deadlock detection and prevention mechanism for a computer system
US4394727A (en) * 1981-05-04 1983-07-19 International Business Machines Corporation Multi-processor task dispatching apparatus
JPH0540742A (ja) * 1991-08-07 1993-02-19 Hitachi Ltd 並列処理方法
US5485626A (en) * 1992-11-03 1996-01-16 International Business Machines Corporation Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing
US5884077A (en) * 1994-08-31 1999-03-16 Canon Kabushiki Kaisha Information processing system and method in which computer with high load borrows processor of computer with low load to execute process
US5481719A (en) * 1994-09-09 1996-01-02 International Business Machines Corporation Exception handling method and apparatus for a microkernel data processing system
US6728959B1 (en) 1995-08-08 2004-04-27 Novell, Inc. Method and apparatus for strong affinity multiprocessor scheduling
US5826081A (en) * 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US6289369B1 (en) * 1998-08-25 2001-09-11 International Business Machines Corporation Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system
JP3557947B2 (ja) * 1999-05-24 2004-08-25 日本電気株式会社 複数のプロセッサで同時にスレッドの実行を開始させる方法及びその装置並びにコンピュータ可読記録媒体
US6418540B1 (en) * 1999-08-27 2002-07-09 Lucent Technologies Inc. State transfer with throw-away thread
US7373646B1 (en) * 2003-04-04 2008-05-13 Nortel Network Limited Method and apparatus for sharing stack space between multiple processes in a network device
US20040244003A1 (en) * 2003-05-30 2004-12-02 Vidiator Enterprises Inc. Apparatus and method for task scheduling for media processing
US7203822B2 (en) * 2004-07-31 2007-04-10 Hewlett-Packard Development Company, L.P. Unprivileged context management
WO2006069484A1 (en) * 2004-12-30 2006-07-06 Intel Corporation Methods and apparatuses to maintain multiple execution contexts
US7945911B1 (en) * 2005-06-03 2011-05-17 Oracle America, Inc. Barrier synchronization method and apparatus for work-stealing threads
US20070101326A1 (en) * 2005-10-27 2007-05-03 Hewlett-Packard Development Company, L.P. Dynamic change of thread contention scope assignment
US20070136403A1 (en) * 2005-12-12 2007-06-14 Atsushi Kasuya System and method for thread creation and memory management in an object-oriented programming environment
US8010966B2 (en) * 2006-09-27 2011-08-30 Cisco Technology, Inc. Multi-threaded processing using path locks
JP2008102847A (ja) * 2006-10-20 2008-05-01 Nec Corp マルチスレッドプログラム処理方法及び装置
JP2013190893A (ja) * 2012-03-13 2013-09-26 Rohm Co Ltd マルチタスク処理装置

Also Published As

Publication number Publication date
US20140298352A1 (en) 2014-10-02
JP2014191468A (ja) 2014-10-06
US9619277B2 (en) 2017-04-11

Similar Documents

Publication Publication Date Title
EP3425502B1 (en) Task scheduling method and device
US9798595B2 (en) Transparent user mode scheduling on traditional threading systems
CN106371894B (zh) 一种配置方法、装置和数据处理服务器
JP4882005B2 (ja) 仮想環境における最適化した割り込み送信
US8539499B1 (en) Symmetric multiprocessing with virtual CPU and VSMP technology
WO2014090008A1 (zh) 一种任务处理的方法和虚拟机
US10459773B2 (en) PLD management method and PLD management system
CN101310257A (zh) 多处理器系统和用于使计算机执行多处理器系统的控制方法的程序
JP2561801B2 (ja) プロセス・スケジューリングの管理方法およびシステム
JP2013506179A (ja) 命令スレッドを組み合わせた実行の管理システムおよび管理方法
US8321874B2 (en) Intelligent context migration for user mode scheduling
US20120284720A1 (en) Hardware assisted scheduling in computer system
KR20070090649A (ko) 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법
JP2008522277A (ja) 優先度の付けられたタスク間の効率的な切り換え
JP2006099332A (ja) 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
JP5030647B2 (ja) 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム
EP1693743A2 (en) System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock
JP4026667B2 (ja) マルチos構成方法
JP7196439B2 (ja) 仮想化環境におけるデバイスへのアクセス方法
JP5859472B2 (ja) プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法
JP5678347B2 (ja) Itシステムの構成方法、そのコンピュータプログラムおよびitシステム
JP2001236237A (ja) マルチos構成方法
JP2021060707A (ja) 同期制御システムおよび同期制御方法
US20240272927A1 (en) Method for resource allocation for applications and/or application containers in a distributed system of heterogeneous compute nodes
JP2011198063A (ja) データ入出力制御方法,データ入出力制御プログラムおよびデータ入出力制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150424

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151014

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151020

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151201

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151215

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151216

R150 Certificate of patent or registration of utility model

Ref document number: 5859472

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees