JPH0519177B2 - - Google Patents

Info

Publication number
JPH0519177B2
JPH0519177B2 JP61081952A JP8195286A JPH0519177B2 JP H0519177 B2 JPH0519177 B2 JP H0519177B2 JP 61081952 A JP61081952 A JP 61081952A JP 8195286 A JP8195286 A JP 8195286A JP H0519177 B2 JPH0519177 B2 JP H0519177B2
Authority
JP
Japan
Prior art keywords
segment
entry
page
memory
page table
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 - Lifetime
Application number
JP61081952A
Other languages
English (en)
Other versions
JPS61271550A (ja
Inventor
Daburyu Jinita Za Saado Edowaado
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.)
Tektronix Inc
Original Assignee
Tektronix Inc
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 Tektronix Inc filed Critical Tektronix Inc
Publication of JPS61271550A publication Critical patent/JPS61271550A/ja
Publication of JPH0519177B2 publication Critical patent/JPH0519177B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、一般にデイスク・オペレーテイン
グ・システムに関し、特に、処理(プロセス)中
のアドレス空間(スペース)をコンピユータ・シ
ステム等の実際のコア及びデイスク記憶(メモ
リ)空間に割当てる仮想メモリ方法に関するもの
である。
〔発明の概要〕
本発明は、デイスク・オペレーテイング・シス
テムにおいて、1以上の処理の仮想(仮の)記憶
空間位置をコンピユータ・システム等の実際のデ
イスク又はコア・メモリの記憶空間位置に変換す
るもので、実及び仮想記憶(メモリ)空間を同じ
サイズの複数ページに分割し、実記憶ページを可
変サイズのセグメントの群に分ける。そして、各
実記憶セグメントにそれぞれセグメント・ペー
ジ・テーブルを設け、そのなかの各エントリ(登
録項目)に1つのページの性質及び位置を表示さ
せる。また、各処理に対しそれぞれ処理マツプ・
リストを設け、そのなかの各エントリによつて仮
想記憶ページの1続きの(隣接)部分を1つセグ
メント・ページ・テーブルに割当てる(マツピン
グする)。或る処理のプログラムを実行する前に、
上記オペレーテイング・システムは、対応する処
理マツプ・リスト及びこのリストによつて割当て
られたセグメント・ページ・テーブルを用いて、
処理の仮想記憶ページを実記憶ページに直接割当
てる処理ページ・テーブルを作成する。こうし
て、上記オペレーテイング・システムは、対応す
る処理が仮想記憶位置をアクセスしよう(呼出そ
う)とする度に、上記の処理ページ・テーブルを
用いて仮想記憶アドレスを実記憶アドレスに変換
する。
〔従来の技術及び問題点〕
マルチ・プログラミング・コンピユータ・オペ
レーテイング・システムにおいて、多くの独立し
た処理は、時分割割当て法によつてコンピユー
タ・システムの中央処理ハードウエアを使用す
る。ユーザには、或る処理に対応したプログラム
が連続的に実行されているように見えるが、通
常、その処理はプログラムの部分的実行には充分
な短期間だけシステム処理ハードウエアを連続的
に使用し、あとは他の処理がプロセツサを使用し
ている。すなわち、幾つかの処理が行なわれる場
合、プログラムが完全に実行されるまでには、各
処理は多数回にわたつて中央プロセツサに制御さ
れたり、制御から離れたりしている。ユニツクス
(UNIX)の如きデイスク・オペレーテイング・
システムにおいて、各処理は、各自の「仮想」メ
モリ・アドレス空間にデータを書込んだり、そこ
からデータを読出したりするが、このオペレーテ
イング・システムは、実際には、各処理のデータ
を上記の仮想アドレスとは無関係のコア・メモリ
又はデイスクのアドレスに記憶する。或る処理が
読出し又は書込みのため仮想アドレスをアクセス
しようとすると、オペレーテイング・システムが
仮想アドレスを実際のコア・メモリ・アドレスに
変換する。データがデイスク上ならば、処理がこ
のデータをアクセスする前に、オペレーテイン
グ・システムはデイスク上のデータをコアに読込
まなければならない。隣接した仮想アドレスのブ
ロツクが隣接した実アドレスのブロツクに対応す
るように、仮想アドレスをブロツク毎に実メモリ
(記憶)位置にマツピングする(対応して割当て
る)。データもコア・メモリ及びデイスク・フア
イル間でブロツク毎に移動又は交換(スワツプ)
される。処理の仮想アドレス・スペース(本明細
書ではアドレス・スペースをアドレス空間と呼ぶ
こともある)は、1組の隣接した仮想アドレスの
ブロツクより成る。実メモリの関連ブロツクの或
るものはコア内に存在し、他のブロツクがまだデ
イスクに存在することはありうるが、いずれの場
所においても、ブロツクを隣接させたり特定の順
序で記憶する必要はない。
或る処理の仮想メモリ空間は、隣接したコア領
域にマツピングする必要はなく、任意の時点で2
次的なデイスク記憶装置にマツピングしてもよい
ので、実メモリは効果的な方法で幾つかの処理の
間において割当てることができるし、1つ以上の
稼働中の処理の仮想アドレス・スペースを組合せ
たものがシステムのコア・アドレス・スペースを
越えてもよい。従来は、一般に、ページング法、
セグメンテーシヨン法及びこれらページング及セ
グメンテーシヨンを組合せた方法により、ブロツ
ク・マツピングを行なつていた。純粋なページン
グ・システムにおいては、仮想メモリのページを
実メモリの対応するサイズのページにマツピング
しうるように、実記憶ブロツク及び仮想記憶ブロ
ツクは、一定サイズの隣接したアドレス位置のペ
ージ群で構成される。一定サイズのページを使用
すると、オペレーテイング・システムは利用可能
なメモリのブロツク及びデイスクのアドレスのリ
ストを簡単に作成でき、メモリ内へ又はメモリ外
へスワツプされる各ブロツクのサイズとこれを受
け入れることができるブロツクのサイズとを比較
する必要がないので、オペレーテイング・システ
ムの経費が最少になる。或る処理の仮想アドレ
ス・スペースは、ページ・リストにより実メモ
リ・スペースにマツピングされる。しかし、純粋
なページング方法には幾分無駄があり、すべての
ページがデータで埋まらないため、コア・メモリ
又はデイスクの記憶スペースの各ブロツクを全部
利用できない。ページを小さくすればこの問題を
改善できるが、ページが小さすぎると長いペー
ジ・リストを使用しなければならず、コア・メモ
リの負荷が増加する。
セグメンテーシヨン・システムにおいては、各
ブロツクはサイズが可変の連続したアドレス・ス
ペースの「セグメント」であり、セグメントは、
処理に対応したデータの特定の部分を記憶するの
に充分なように設定される。各セグメントの第1
アドレスの実メモリ位置を示すポインタのリスト
から成るセグメント・マツプ・テーブルにより、
処理の仮想アドレス空間を実メモリ空間にマツピ
ングする。この方法は、純粋なページング方法よ
りもメモリの各ブロツクを良好に利用できるが、
コア及びデイスク記憶装置間でセグメントを移動
するときセグメントのサイズを合わせるために、
オペレーテイング・システムの経費がより大きく
なる。
セグメンテーシヨン及びページングを組合せた
システムにおいては、実メモリを等しいサイズの
ページに分割し、仮想メモリをサイズが可変のセ
グメントに分割する。各セグメントは、実メモ
リ・ページ全体の数にマツピングできる仮想アド
レス・スペースをカバーする。オペレーテイン
グ・システムは、まず処理マツプ・リストを用い
てセグメント・ページ・テーブルを見付け、次に
ページ・リストを用いてセグメント内のページの
実メモリ位置を見付けることにより、仮想アドレ
スに対応する実アドレス位置を見付ける。2つの
独立した処理が例えば同じプログラム・テキスト
を実行している場合に、これらの処理マツプ・リ
ストが同じページ・テーブルを示したとき、これ
ら2つの独立した処理は同じセグメントを共有で
きることになる。この方法は、オペレーテイン
グ・システムが2つのテーブルを参照して仮想ア
ドレスを変換する必要があるという点で、純粋な
ページング法及び純粋なセグメンテーシヨン法よ
りも劣つている。しかし、セグメンテーシヨン及
びページングを組合せたこの方法は、存在するセ
グメント・ページ・テーブルを示す処理マツプ・
リスト・エントリ(登録項目)を作成することに
より、1つの処理が他の処理が使用するデータの
大部分を簡単にコピーできるという点で、他の方
法より優れている。複数の処理がメモリ・ページ
を共有するのは、データがどの処理によつても変
更できない「読出し専用」のものである場合に限
られる。一般には、これは、プログラムのデータ
又はスタツク部分でなくテキスト部分でもよい。
従来では、独立した各処理は全セグメントを共有
できるのみであつた。すなわち、或る処理をセグ
メントの選択したページのみにマツピングするこ
とはできなかつた。
上述のユニツクスの如きシステムにおいては、
「フオーク」という動作により新たな処理が開始
される。フオーク動作において、1つの処理は
「親」処理及び「子」処理と呼ぶ2つの独立した
同時処理に分割される。親及び子は、主メモリを
共有しないが開放デイスク・フアイルを共有す
る。フオーク時には、子のために、すべての書込
み可能なデータ・セグメントをコピーしなければ
ならない。
セグメンテーシヨン及びページングの両方を使
用するも、仮想アドレスを実記憶位置に変換する
のに単一のテーブル参照のみでよい仮想メモリ・
システムがあれば、便利である。かかるシステム
は、複数の処理が読出し専用データ・セグメント
及び書込み可能なデータ・セグメントの両方を共
有することができるので、好都合である。これ
は、子又は親が実際にデータ・セグメントをアク
セスしようとする時まで、子のための書込み可能
なデータ・セグメントをコピーする必要がない。
コア空間の必要性、したがつて、コア空間を自由
にするデイスク・オペレーシヨンの必要性が減少
する。処理仮想スペースが他の処理用のセグメン
トの一部のみにマツピングできるならば、コア及
びデイスクの記憶スペースを更に節約できる。
したがつて、本発明の目的の1つは、複数の処
理が同じコア及びデイスク記憶装置の選択した部
分を共有できるデイスク・オペレーテイング・シ
ステムの新規且つ改良した仮想メモリ方法の提供
にある。
本発明の他の目的は、単一のテーブル参照動作
により仮想アドレスから実アドレスへの変換がで
きる新規且つ改良した仮想メモリ方法の提供にあ
る。
本発明の更に他の目的は、独立した処理が読出
し専用セグメントと共に書込み可能セグメントを
共有できる新規且つ改良した仮想メモリ方法の提
供にある。
本発明の他の目的は、最少のコピーによりフオ
ーク動作を実現する仮想メモリ方法の提供にあ
る。
〔問題点を解決するための手段及び作用〕
本発明によれば、マルチ・プログラムミング・
デイスク・オペレーテイング・システムが各処理
の仮想メモリ空間を所定数の隣接仮想アドレスを
含む仮想隣接ページの複数の組に分割する。同時
に、システムがアクセスするコア及びデイスク記
憶スペースも、仮想ページと同じ所定数の実メモ
リ位置を有するページに分割する。これら実メモ
リ・ページは、1組のセグメント・ページ・テー
ブルで特徴が表示される実メモリ・セグメント群
に分割される。各ページ・テーブルのエントリ
は、実メモリ・ページの位置をマツピングし、各
処理に対応する独立マツプ・リストは、仮想メモ
リ・ページのマツプをセグメント・ページ・テー
ブルのすべて又は任意の隣接した部分にマツピン
グする。こうすると、2個以上の処理を同じセグ
メント・ページ・テーブルの選択した部分にマツ
ピングできるので、各処理は、各セグメント・ペ
ージ・テーブルによりマツピングされたコア・ス
ペース又はデイスク・フアイルの部分を共有でき
る。
また、本発明によれば、対応した処理マツプ・
リスト及びセグメント・ページ・テーブルに記憶
されたデータを用いて、各処理用に独立した処理
ページ・テーブルを作成する。処理ページ・テー
ブルは、処理仮想アドレス・スペースのページを
実コア又はデイスク記憶ページに直接マツピング
する。各処理に対応した処理マツプ・リストは、
個々のセグメント・ページ・テーブルと共に、必
要に応じてコア・メモリ内へ又は外にスワツプさ
れる。しかし、必要ならば処理ページ・テーブル
をコア内に作成し、不要なときには破棄してデイ
スク記憶装置にスワツプしない。よつて、本発明
は、セグメンテーシヨン及びページングの組合せ
システムを用いて仮想スペースから実スペースへ
のマツピングを設定すると共に、純粋のページン
グ・システムを用いて実際の仮想アドレスから実
アドレスへのスワツプを行ない、処理が同じセグ
メントを共有できるようにする一方、単一のテー
ブルを参照して仮想アドレスから実アドレスへの
変換を行なうことができる。
更に本発明によれば、フオーク動作において、
オペレーテイング・システムは、子の仮想スペー
スの読出し専用部分を親の存在するページ・テー
ブルにマツピングして、子処理用の新たな処理マ
ツプ・リストを作成する。またオペレーテイン
グ・システムは、親のセグメント・ページ・テー
ブルを指示する任意の書込み可能なセグメントに
対する子処理用の重複した「専用」セグメント・
ページ・テーブルを作成する。専用マツピングを
行なつたことを示すため、親ページ・テーブルに
関連したフラグを設定する。親又は子処理が実在
のページ書込みを行なおうとするとき、新たなコ
ピーを子のためのコアに移し、子セグメント・ペ
ージ・テーブル・エントリをそのページに転送す
る。こうして、いかなるデイスク・アクセス動作
もすることなくフオーク動作が生じ、共有ページ
を変更するまで、その後のデイスク・アクセスを
必要としない。なお、従来では、ページをコピー
し、子処理用に新たなメモリを割当てていた。
〔実施例〕
以下、添付図を参照して本発明の好適な実施例
を説明する。第1図は、本発明の仮想メモリ方法
により、多処理デイスク・オペレーテイング・シ
ステムにおいて実行する幾つかの処理をメモリ・
マツピングするのに使用する仮想テーブル、リス
ト及びフアイルの例を示す。本仮想メモリ方式に
おいては、コンピユータ・システムでの各処理が
専用の仮想アドレス・スペースをアクセスできる
ようになつている。これらの好適な実施例は、バ
ークレー標準ビー・エス・デイ4.2ユニツクス
(Berkley Standard B.S.D. 4.2 Unix)デイス
ク・オペレーテイング・システムの改良であり、
テクトロニツクス6000型コンピユータ上で実行さ
れる。しかし、広範な見地からみると、本発明
は、ユニツクス・オペレーテイング・システム又
はバツクス(Vax)モデル・コンピユータと組合
せての使用に限定されるものではない。
現在のユニツクス・システムは、各処理用のペ
ージ・リストをもち、これらページ・リストの各
エントリは、対応する処理の隣接した仮想アドレ
ス空間のブロツクのコア・メモリ内の実アドレス
空間の同様なサイズのブロツク又はデイスク空間
の同様なサイズのブロツクにマツピングできる。
2つの処理を同一の実メモリ空間にマツピングで
きるが、これは同一の読出し専用テキストを共有
するためそうするにすぎない。本発明では、従来
のユニツクス・オペレーテイング・システムと同
様に、仮想及び実アドレス・スペースを隣接した
アドレス・スペースの等しいサイズのページにペ
ージングする。各処理用の処理ページ・テーブル
を用いて、仮想アドレス・スペースをコア及びデ
イスクのスペースにマツピングする。2つのこの
ような処理ページ・テーブル10を第1図に示
す。しかし、本発明においては、コア及びデイス
ク記憶ページをサイズが可変の複数の記憶セグメ
ントにグループ分けする。そして、セグメント・
ページ・テーブル12を設け、これに各ページの
実コア又はデイスク記憶位置のトラツクをもたせ
る。第1図においては、テーブルA、B及びCと
名付けた3つのセグメント・ページ・テーブルを
示したが、実際には非常に多くのセグメント・テ
ーブルを設ける。セグメントAページ・テーブル
は6つのページ・テーブル・エントリを有し、セ
グメントBページ・テーブルは5つのページ・テ
ーブル・エントリを有し、セグメントCページ・
テーブルは2つのページ・テーブル・エントリを
有する。
セグメント・ページ・テーブル・エントリに
は、5種類ある。セグメントAページ・テーブル
のエントリ1の如き「PG−FTEXT」エントリ
は、デイスク16のフアイル領域14におけるペ
ージの記憶位置Aを示す。セグメントAページ・
テーブル12のエントリ2の如き「PG−
FCORE」ページ・テーブル・エントリは、コ
ア・メモリ18の非物理的(すなわち、非メモ
リ・マツプドI/O)領域17におけるページの
第1アドレスBを示す。セグメントAページ・テ
ーブル12のエントリ3の如き「PG−FSWAP」
エントリは、デイスク16のスワツプ領域20に
おけるページの記憶位置Cを示す。スワツプ領域
20を用いて、コア・メモリ18より転送された
データのページを一時的に保持する。セグメント
Aページ・テーブルのエントリ4及び5の如き
「PG−FZERO」エントリは、(ハイフンで示した
如く)どこも示さず、ページがコア又はデイスク
に存在せず、必要ならばコア内に作成して0で埋
めてもよいことを表わす。セグメントBページ・
テーブルのエントリ3の如き「PG−FSEG」エ
ントリは、他のページ・テーブル・エントリを示
す。このPG−FSEG型のエントリはあとで詳細
に述べる。
本発明の好適な実施例を含んだ大部分のユニツ
クス・オペレーテイング・システムは、2つ以上
の隣接したページの「クラスタ」(群)の形でコ
ア・メモリ又はデイスクとの間でページを移動さ
せる。よつて、第1図においては、簡単のため、
セグメント内の隣接したページ及び処理ページ・
テーブルをランダムに異なつた形式のものとして
示したが、実際には、これらのテーブルは同じ形
式の2つ以上の隣接ページ・テーブル・エントリ
のクラスタから成る。
コア・メモリ内に、各セグメント・ページ・テ
ーブルに対応したセグメント・フアイル26を設
ける。ページ・テーブルが現在コア内ならば、セ
グメント・フアイルは、デイスク16のフアイル
領域14上における対応セグメント・ページ・テ
ーブル12の位置及びセグメント・ページ・テー
ブルの最初の(開始)コア・メモリ・アドレスの
位置を含む、セグメントに関する有効なデータを
記憶する。例えば、第1図のセグメントAフアイ
ルは、セグメントAページ・テーブルの第1アド
レスPを指示し、セグメントB及びCフアイル
は、セグメントB及びCページ・テーブルの第1
アドレスQ及びRを指示する。
各処理に対し、それぞれ処理マツプ・リスト2
2を設ける。第1図の実施例は、2つの処理(処
理1及び2)をこのシステムが処理中である場合
を示す。処理マツプ・リスト22上の各エントリ
は、この処理の1組の隣接した仮想アドレス空間
ページを、セグメント・ページ・テーブル12上
の1つ以上の隣接したエントリにマツピングする
ものである。処理マツプ・リスト22の各エント
リは、セグメント・フアイル26の開始アドレス
すなわちセグメント・ページ・テーブル12のデ
イスク又はコア位置を示す。また、マツプ・リス
ト22のマツピング・エントリは、このエントリ
によりマツピングされた第1仮想空間ページの
数、第1セグメント・ページ・テーブル・エント
リの数、及びマツピング内に含まれるセグメン
ト・ページ・テーブル・エントリの総数を含んで
いる。例えば、処理1用のマツプ・リスト22の
マツピング・エントリ1は、処理1仮想スペース
のセグメントをセグメントAページ・テーブル1
2のエントリのすべてのページ・テーブル・エン
トリにマツピングする。マツピング・エントリ
(L、1、1、6)は、セグメントAページ・テ
ーブル12の第1アドレスPを示すセグメントA
フアイル26の第1アドレスLを示す。マツピン
グ・エントリに含まれたデータにより、マツプ・
リスト・エントリのLに続く第1の数字1で指示
される仮想スペース・ページ1において、マツピ
ングが開始される。マツプ・リスト・エントリ内
のLに続く第2の数字1により示される如く、マ
ツピング内に含まれた最初のセグメントAペー
ジ・テーブル・エントリは、エントリ1である。
また、マツプ・リスト・エントリにおいて数字6
で示される如く、ページ・テーブル・エントリの
総数6もマツピング内に含まれている。このよう
にして、処理1マツプ・リストにおける第1エン
トリは、処理1の仮想メモリの6つの隣接したペ
ージをマツピングする。
処理1マツプ・リスト22のマツピング・エン
トリ2は、セグメントBフアイル26の第1アド
レスを示し、第1の変位を示す「2」と含まれる
エントリの総数を示す他の「2」とを記憶するこ
とにより、処理1の仮想スペースの他のセグメン
トである仮想スペース・ページ7及び8を、セグ
メントBページ・テーブル・リスト12のエント
リ2及び3にマツピングする。セグメントBペー
ジ・リスト(テーブル)がコア内の場合、セグメ
ントBフアイル26は、セグメントBページ・リ
ストの第1アドレスQを示す。そうでない場合
は、このセグメントBフアイル26は、デイスク
上のページ・リストの記憶位置Qを示す。よつ
て、従来のセグメンテーシヨン及びページングの
組合せシステムと違つて、マツプ・リスト22の
エントリは、仮想セグメントをページ・テーブル
全体でなくセグメント・ページ・テーブル12の
部分のみにマツピングできるので、2つ以上の処
理が同じ実メモリ・スペースを共有する機会が増
加する。
2つの処理マツプ・リスト22のエントリは、
同じセグメント・ページ・テーブル12にマツピ
ングできる。例えば、処理2マツプ・リスト22
のマツピング・エントリ1が処理2仮想空間のセ
グメントをセグメントBページ・テーブル・リス
ト12のすべてにマツピングする一方、処理1マ
ツプ・リスト22のエリント2がその仮想空間の
部分をセグメントBページ・テーブル・リスト1
2のエントリ2及び3にマツピングする。よつ
て、処理1及び2の両仮想空間は、セグメントB
ページ・リストのエントリ2及び3が表わすコア
又はデイスク記憶のページを共有する。
例えば、プログラムがメモリ・マツプドI/O
ポートのアクセスを捜す場合のように、コンピユ
ータ・システムの物理的メモリを直接アクセスす
る必要のあるプログラムを処理が実行中の場合、
対応する仮想及びコア・メモリ・ページのアドレ
スは同じでなければならない。この場合、マツ
プ・リスト・エントリは、セグメント・ページ・
テーブル12を示さず、このエントリにダツシユ
記号で表わす如くどこも指示しない。コア内のそ
のページの記憶位置は決して変更しないので、物
理的メモリのページのトラツクを維持するのに、
セグメント・ページ・テーブルは必要ない。処理
1マツプ・リストのマツピング・エントリ3及び
処理2マツプ・リストのエントリ3は、物理的メ
モリ・マツピングの例である。
各処理マツプ・リスト22の開始アドレスは、
オペレーテイング・システムによりコア内に維持
された処理テーブル24内に記憶する。第1図の
例において、このシステムには2つの稼動中の処
理があるので、処理テーブル24には2つのエン
トリがある。処理テーブルのエントリ1は、処理
1マツプ・リスト22における第1マツピングの
コア又はデイスクの記憶位置Xを示す一方、処理
テーブルのエントリ2は、処理2マツプ・リスト
の第1エントリの記憶位置Yを示す。処理マツ
プ・リスト22、処理テーブル24及びセグメン
ト・フアイル26が常にコア記憶装置に維持され
ている間、必要によりコア・メモリ18及びデイ
スク16間でセグメント・リスト12を前後に交
換できる。
処理の準備ができてプログラムの一部を実行す
るとき、オペレーテイング・システムは処理テー
ブル24を用いて、関連した処理マツプ・リスト
22を見付ける。次に、常にコア内にはないマツ
プ・リストを参照して、この処理マツプ・リスト
はコアの任意のセグメト・ページ・テーブル12
と交換を行なう。次に、マツプ・リスト22、セ
グメント・フアイル26及び適当なセグメント・
テーブル12内に含まれるデータから、処理用の
ページ・リスト10を構成する。処理1マツプ・
リスト上の第1エントリはセグメントAページ・
テーブル内のすべてのエントリをマツピングし、
セグメントAページ・テーブル内の第1エントリ
はページAを示すので、処理1用のページ・リス
ト10内の第1ページ・テーブル・エントリはデ
イスク16のフアイル領域14内のページAを示
す。処理1ページ・テーブル10の連続したペー
ジ・テーブル・エントリは、同様な方法で順次構
成する。処理の仮想スペース内にページが現われ
るように、処理ページ・テーブル10内のエント
リが同じ順序で現われる。処理マツプ・リスト2
2のエントリがセグメント・ページ・テーブル1
2を示さないならば、マツピングを物理的メモリ
のページに対して行ない、このページ用の仮想及
び実アドレスが同じことを示す対応処理ページ・
テーブル10において「PG−PHYS」エントリ
を行なう。例えば、処理1マツプ・リストのエン
トリ3により、処理1ページ・リストのエントリ
9は、コア・メモリ18の物理的領域24のペー
ジJを示す。
また、仮想空間ページがマツピングされなけれ
ば、処理ページ・テーブル10において「PG−
FNONE」のエントリを行なう。例えば、処理1
マツプ・リストのエントリ3は、仮想空間の1つ
のページであるページ9をマツピングする。積義
のマツプ・リストエントリ4は、仮想空間ページ
11で開始する。よつて、仮想空間ページ10はマツ
ピングされず、処理テーブル10のエントリ10は
PG−FNONEである。
処理が仮想空間内のメモリ位置をアクセスしよ
うとすると、仮想アドレスの高位ビツトはページ
数を示す一方、下位ビツトはこのページにおける
アクセスされたアドレスの最低アドレスからの変
位を示す。システムは、処理ページ・リスト10
を用いて、ページ数をこのページの実記憶位置に
スワツプする。このページがコア内にある場合、
処理ページ・テーブル10のエントリ(PG−
FCORE)は、このページの開始実アドレスの高
位ビツトを含んでいる。実及び仮想メモリ・ペー
ジは、同じ数の隣接アドレス位置を含んでいるの
で、オペレーテイング・システムは、実アドレス
高位ビツト及び仮想アドレス低位ビツトに集中し
て、仮想アドレスに対応する実アドレスを発生で
きる。
処理がデイスク16の交換領域20又はフアイ
ル領域14内に記憶されたページの仮想アドレス
をアクセスしようとすると、処理1ページ・テー
ブル10のエントリ3及び7の如き処理ページ・
リストの対応するPG−FSWAP又はPG−
FTEXTページ・テーブルのエントリが、このペ
ージのデイスク上の位置を含む。次にオペレーテ
イング・システムは、このページをコア内に転送
し、適当な処理及びセグメント・ページ・テーブ
ル12のエントリをPG−FCOREに変更し、仮想
アドレスを実コア・メモリ・アドレスに変換す
る。処理が、PG−FZEROであるページ内の仮想
アドレスをアクセスしようとすると、オペレーテ
イング・システムは、コア・メモリ内の未使用の
ページを見付け、すべてのアドレスに記憶された
データをゼロにセツトし、対応する処理及びセグ
メント・ページ・テーブル・エントリをPG−
FCOREに変更する。仮想アドレス及び物理的メ
モリ用の物理的アドレズは同じでなければならな
いので、処理がメモリ・マツプドI/Oポートの
如き物理的アドレスの仮想アドレスをアクセスす
ると、この処理ページ・テーブル・エントリは同
じアドレスを含む。
ユニツクスにおいて、「フオーク」手順が新た
な処理を開始するが、実在する処理を、「親」及
び「子」処理と呼ばれる2つの独立した同時処理
に分割する。従来においては、親及び子処理は、
主要な記憶装置を共有しなかつたが、開放デイス
ク・フアイルは共有した。しかし、フオークと同
じときに子処理用にすべての書込み可能なデー
タ・セグメントをコピーして、1つの処理が利用
するデータ・セグメントを他の処理が変更しない
ようにしなければならなかつた。デイスクからコ
アにフアイルを読取つて、コア空間を拘束するの
に、このコピー動作はデイスク動作を必要とす
る。
しかし、本発明によれば、親及び子処理は初め
すべてのデータ・セグメントを共有し、1つの処
理が共有の書込み可能なセグメントを変更しよう
とするまで、セグメントをコピーしない。初め、
オペレーテイング・システムにとつて、子処理用
に新たな処理マツプ・リスト22を作成し、任意
の書込み可能なセグメント用に新たなセグメン
ト・ページ・テーブル12のみを作成することが
必要である。親又は子処理がページの変更をシー
クするまで、システムは任意の共有ページをコピ
ーしない。このページが親又は子処理により変更
できない「読出し専用」データを表わすと、子処
理用にコピーが常に行なわれず、読出し専用セグ
メントを共有するすべてのマツピングの「共有リ
スト」内に親及び子マツピングが含まれる。この
ページが書込み可能な場合、同じ書込み可能なセ
グメントを共有するすべてのマツピングの「専有
リスト」上に親及び子マツピングを配置する。親
又は子処理が、セグメントのアクセスを必要とす
るとき、子処理用に専有セグメント内のページの
新たなコピーを行なう。
処理マツプ・リスト22の各マツピング・エン
トリは、次のような多くの変数及びフラグを含
む。
m−procp:このマツピングを利用した処理の処
理リスト24のエントリ用のポインタ。
m−pstart:マツピングされた領域が開始するプ
ロセス・ページ・テーブル10のエントリ数。
m−sstart:マツピングされた領域が開始するセ
グメント・ページ・テーブル12のエントリ
数。
m−len:マツピングされた領域におけるセグメ
ント・ページ・テーブル12のエントリ数。
m−prot:マツピングされた領域に処理が読出し
又は書込みを行なえるか、何がそれをマツピン
グするかを示す変数。
m−flags:このマツピングされた領域用に処理
ページ・リスト10が存在したときのフラグ・
ビツト・セツト。
m−next:このマツプ・リストの次のエントリ
に対するポインタ(c)(これは、エントリを任意
の順序で記憶できるようにマツプ・リスト22
をリンクされたリストにする。)。
m−segp:セグメント・フアイル26の第1ア
ドレスに対するポインタ(これが物理的メモリ
のマツピングの場合、零)。
m−nextshared:共有されたマツピングのリン
クされたリストにおける次の処理マツプ・リス
ト・エントリに対するポインタ。
m−nextprivate:専有マツピングのリンクされ
たリストにおける次の処理マツプ・リストのエ
ントリに対するポインタ。
各セグメント・フアイルも次のような多くの変
数及びフラツグを含んでいる。
seg−iptr:セグメントがデイスク・フアイル2
0をマツピングした場合、セグメント・ペー
ジ・リストが表わすフアイルに対応するデイス
ク・アイノード(inode)に対するポインタ。
seg−addr:セグメント・ページ・テーブル12
が開始する交換領域デイスク・ページ。
seg−shared:「共有」リストにおける第1マツ
ピングに対するポインタ(マツプ・リスト・エ
ントリのm−nextsharedポインタと共にこの
ポインタは、セグメントを共有するすべてのマ
ツピングのリンクされた「共有」リストを作成
する)。
seg−private:「専有」リストにおける第1マツ
ピングに対するポインタ(マツプ・リスト・エ
ントリのm−nextprivatedポリンタと共にこの
ポインタは、セグメントのすべての専有マツピ
ングのリンクされた「専有リスト」を作成す
る。)。
seg−flags:フラグ・ビツト(下記参照) seg−bp:セグメント・ページ・テーブル12の
第1アドレスコがア内にあるならば、このアド
レスに対するポインタ。
seg−segp:専有マツピングにより親セグメント
を作成したならば、親セグメント・フアイル2
6に対するポインタ。
seg−sstart:専有マツピングが開始した親セグ
メント内のページ数。
seg−flags変数の各ビツトは、以下のフラグか
ら成る。
SEG−LOCKED:セグメントの唯一の利用が処
理に認められた場合、真(ロジツク1)。
SEG−WANTED:他の処理がロツクされたセ
グメントの利用を要求したとき、真。
SEG−DIRTY:セグメント・ページ・テーブル
12が変更されたとき、真。
セグメント・ページ・テーブル12の各エント
リは、次のような変数及びフラグを含む。
pg−v:ページがコア内で有効(すなわち、専
有でないPF−FCORE型式のページ)のとき真
であるフラグ。
pg−prot:オペレーテイング・システム、ユー
ザ処理又はこれら両者がページを読出したり書
込んだりしているかを示す変数。
pg−r:処理又はオペレーテイング・システム
がページを読出したとき真であるフラグ。
pg−m:処理又はオペレーテイング・システム
がページを変更したとき真であるフラグ。
pg−privated:ページを変更する前に他の処理が
ページのコピーを要するとき真であるフラグ。
pg−fileno:ページ型式(PG−FZERO、PG−
FTXTX、PG−FSWAP、PG−FCOPE、PG
−FSEG又はPG−SPHYS)を示す変数。
pg−blockno:コア又はデイスク内のページの位
置を示す変数。
第2A図において、フオーク動作の前に、親処
理マツプ・リスト22のエントリ5は、セグメン
トAフアイル26を介して親処理の仮想空間部分
を、セグメント・ページ・テーブルAのセグメン
トAページ・テーブル12のエントリ2〜5にマ
ツピングする。この例において、セグメントAペ
ージ・テーブル12のエントリはすべてPG−
FCORE型式であるが、他の型式にもできる。処
理マツプ・リスト22のエントリ6は、セグメン
トBフアイルを介して、処理仮想空間の他の部分
をセグメントBページ・テーブル12のページ・
テーブル・エントリ1〜3にマツピングする。簡
単化するため、親処理の他のマツプ・リスト22
のエントリは図示しない。
フオーク動作中の関連した各処理マツプ・リス
ト22のエントリに含まれる変数を第2A図に示
す。親処理マツプのエントリ5のm−segp変数
は、セグメントAフアイル26の開始アドレスで
あるアドレスAを示す。m−sstart変数は2への
セツトである一方、m−len変数は3のへセツト
であり、マツピングがセグメントAページ・テー
ブル12のエントリ2〜4を含むことを示す。m
−nextprivate及びm−nextshared変数を0にセ
ツトして、セグメントA用の共有又は専有リスト
において他のマツプ・リスト・エントリはリンク
されないことを示す。マツプ・リスト・エントリ
6において、m−segp変数は、セグメントBフ
アイル26の開始アドレスであるアドレスBを示
す。m−sstart変数を1にセツトする一方、m−
len変数を3にセツトして、このマツピングがセ
グメントBページ・テーブル12のエントリ1〜
3を含むことを示す。m−nextprivate及びm−
nextshard変数を0にセツトして、他のマツプ・
リスト・エントリが共有又は専有リストにリンク
されないことを示す。
セグメントAフアイルにおいて、seg−bp変数
は、セグメントAマツプ・リストの第1アドレス
Cを示す。seg−lockedフラグは偽(ロジツク
0)であり、任意の処理がセグメントをアクセス
できることを示し、seg−privateフラグも偽あ
り、専有マツピングをする処理がないことを示
す。seg−shared変数は親処理マツプ・リスト・
エントリ5の開始アドレスWであり、エントリ5
がセグメントA用の共有リストの第1マツピング
であることを示す。
セグメントBフアイルにおいて、seg−bp変数
はセグメントBページ・テーブル12の開始アド
レスDを示す一方、seg−shared変数は親処理マ
ツプ・リスト22のエントリ6の開始アドレスX
を示す。
第2A図の親処理上のフオーク動作の結果を第
2B図に示す。親処理マツプ・リストのエントリ
5が書込み可能なセグメントを示していると仮定
すると、子処理用に専有セグメントCテーブル1
2と共に関連したセグメントCフアイル26を作
成する。セグメントCフアイル26のseg−segp
ポインタをセツトしてオリジナル・セグメントA
フアイル26のアドレスAを示し、セグメントC
フアイル26のseg−sstart変数を2にセツトし
て、専有ページ・テーブルの第1ページがペー
ジ・テーブルAにおける第2エントリに対応する
ことを示す。セグメントCフアイルのseg−bp変
数をセツトして、専有セグメントCページ・テー
ブルの第1アドレスHを示す。セグメントCペー
ジ・テーブル12の各エントリは、他のセグメン
トを参照してページを見付けるPG−FSEG型式
にする。新たなセグメントCフアイルの第1アド
レスGを示すm−segp変数を有するアドレスY
から開始する子処理マツプ・リスト22のエント
リを作成する。セグメントAフアイルのseg−
privated変数を変更して、対応する子マツプ・リ
スト・エントリのアドレスYを示すので、専有セ
グメントAを有するすべての処理をオペレーテイ
ング・システムに決定させるリンク専有リストを
作成する。
フオーク動作の開始では、セグメントAフアイ
ルのseg−lockedフラグを真にセツトして、フオ
ーク動作が完了するまで、任意の他の処理がこの
セグメントをアクセスするのを防ぐ。フオーク動
作が完了すると、seg−lockedフラグを偽にリセ
ツトして、他の処理がこのセグメントをアクセス
できるようにする。seg−privated変数をセツト
して、セグメントをプライベート化する処理マツ
プ・リストのエントリ5である子処理のアドレス
Yを示すので、このセグメントが親処理により変
更される前に、子処理用のこのセグメントをコピ
ーしなければならないことをオペレーテイング・
システムが知る。よつて、子処理マツプ・リスト
のエントリ5は、セグメントAの専用リストにお
ける第1マツピングである。親処理マツプ・リス
ト22のエントリ6を処理仮想空間の書込み不能
領域と仮定すると、子処理はセグメントBを専有
化するよりもむしろ共有する。子処理の同じ仮想
空間領域をセグメントBにマツピングする子処理
マツプ・リスト22用に新たなマツプ・リスト・
エントリ6を作成する。セグメントBフアイル2
6のseg−sharedを変更し子処理のエントリ6の
アドレスZを指示して、このエントリがこのセグ
メント用の共有リストにおける1番目であること
を示す。子処理マツプ・リスト・エントリ6にお
いて、m−nextshard変数をセツトして、親処理
マツプ・リスト・エントリ6を指示し、親マツ
プ・リスト・エントリは共有リストにおける次の
マツピングであることを示す。m−segp変数及
び子マツプ・リスト・エントリ6はセグメントB
フアイルのアドレスBを示す一方、m−sstart及
びm−len変数はセグメント・ページ・テーブル
における最初の3ページがマツピングされたこと
を示す。専用マツピングがないので、m−
nextprivate変数は零である。
第3図は、フオーク動作中に呼び出された
「procdup( )」の手続きの流れ図であり、新た
なマツプ・リスト22及び子処理用に必要な任意
の新たな専有セグメント・ページ・テーブル12
を作成する。第3図において、procdup( )手
続きは、ステツプ(100)で開始する。ステツプ
(102)において、「mapdup( )」手続きは、親
処理の第1マツプ・リスト・エントリに対応する
子処理用の新たなマツプ・リスト・エントリを作
成し、セグメントが書込み可能ならば新たな専有
セグメント・ページ・テーブル12を作成する。
次に、現在のマツプ・リスト・エントリが最後で
なければ、ステツプ(104)はプログラムの流れ
をステツプ(106)に進める。ステツプ(106)に
おいて、次の親マツプ・リスト・エントリを見付
け、プログラムの流れはステツプ(102)に戻り、
親処理の第2マツプ・リスト・エントリに対応す
る子処理用に第2マツプ・リスト・エントリを作
成する。すべての親処理マツプ・リスト・エント
リが重複すると、ステツプ(104)はプログラム
の流れをステツプ(108)に進め、procdup( )
手続きを終了して、呼出し手続きに戻る。
第4図は、mapdup( )手続きの流れ図であ
る。この手続きはステツプ(110)で開始して、
ステツプ(112)に進み、(セグメント・フアイル
のpg−prot変数で示す如く)現在の親マツプ・
リスト・エントリが読出し専用セグメントを示す
ならば、プログラムの流れはステツプ(114)に
進む。ステツプ(114)において、「newmap
( )」手続きを呼出し、対応する親マツプ・リス
ト・エントリと同じセグメントを指示する子セグ
メントに新たなマツプ・リスト・エントリを付加
する。次にステツプ(116)において、親処理の
ページ・テーブル・エントリ(PTES)をコピー
して、子処理用の処理ページ・テーブル・エント
リを作成する。次にステツプ(118)において、
マツピングに「適用済」と印を付け(m−flags
ビツトを真にセツト)、子マツプ・リスト・エン
トリ用のページ・テーブル・エントリは作成した
ことを示す。次に処理は、ステツプ(120)にお
ける呼出し処理に戻る。親マツプ・リスト・エン
トリが書込み可能なセグメントを示すと、ステツ
プ(112)はプログラムの流れをステツプ(122)
に進め、「privatemap( )」手続きを呼出して子
処理用の新たな専有セグメント・テーブル12を
作成する。このテーブルの各エントリは、親セグ
メント・テーブル12の対応ページ・テーブル・
エントリに適用するP−FSEG型式である。ま
た、privatemap( )は、子処理用の処理ペー
ジ・テーブル10のエントリを作成し、m−
flagsをセツトして、マツピングが適用されたこ
とを示す。次に、mapdup( )手続きはステツ
プ(124)において戻る。
第5図は、privatemap( )手続きの流れ図で
ある。この手続きは、ステツプ(122)で開始し、
ステツプ(124)に進んで、セグメントを拘束す
る(セグメント・フアイルのseg−locked指示を
真にセツトする)ので、フオーク動作が完了する
まで、他の処理はこのセグメントをアクセスでき
ない。次にステツプ(126)において、
「newsegment( )」手続きが新たな専有セグメ
ント・ページ・テーブル12を作成する。そし
て、ステツプ(128)において、専用セグメン
ト・フアイルのseg−segpポインタをセツトし
て、オリジナル・セグメント・フアイル26の第
1アドレスを示す。次に、ステツプ(130)にお
いてnewmap( )手続きを開始し、子処理マツ
プ・リスト22内にエントリを作成して、新たな
専有セグメント・フアイル26を示す。この手続
の流れはステツプ(132)に進み、専有セグメン
ト・ページ・テーブル12のエントリをすべて
PG−FSEGにセツトし、オリジナル・セグメン
ト・ページ・テーブルの対応ページ・テーブル・
エントリを検査して、このエントリに関連したペ
ージの実記憶位置が見付かつたことを示す。次に
ステツプ(134)において、オリジナル・セグメ
ント・ページ・テーブル12の各専有エントリに
おけるpg−vフラグを偽にセツトして、コア内
に記憶されたページが「無効」であり、利用する
前にコピーしなければならないことを示す。更に
ステツプ(134)において、各オリジナル・ペー
ジ・テーブル・エントリのpg−privatedビツトを
セツトして、専用セグメント用のコピーが行なわ
れるまでエントリを破棄できないことを示す。最
後にステツプ(136)において、オリジナル・セ
グメント・フアイルのseg−lockedフラグを偽に
セツトして、他の処理がセグメントをアクセスで
きるようにする。この手続きは、ステツプ(138)
において戻る。
newmap( )手続きの流れ図を第6図に示す。
ステツプ(140)において開始し、手続きはステ
ツプ(142)に進んで未使用のマツピング・エン
トリを見付けた後、ステツプ(144)に進んでマ
ツプ・リスト・エントリ変数をセツト・アツプす
る。物理的メモリのマツピングでなければ、ステ
ツプ(146)によりプログラムの流れはステツプ
(148)に進む。ステツプ(148)において、新た
なマツピング・エントリを示すリストの最終マツ
ピングのm−nextsharedポインタを調整して、
セグメント共有リストにマツピングを行なう。次
にステツプ(150)において、新たなエントリを
示すリストにおいて、最後エントリのm−next
ポインタを調整して、新たなマツピング・エント
リを処理マツピング・リスト22に付加する。そ
の後、ステツプ(152)において手続きは呼出し
に戻る。マツピングが物理的メモリの一部なら
ば、ステツプ(146)はプログラムの流れをステ
ツプ(156)に進め、新たなエントリのm−segp
ポインタを零にセツトする(すなわち、どこにも
ないことを示す)。手続きの流れはステツプ
(150)に進み、マツプ・エントリを処理マツプ・
リストに付加した後、ステツプ(152)に進み、
newmap( )を終了して呼出しに戻る。
第7図は、newsegment( )手続きの流れ図
の詳細を示す。ステツプ(158)で開始し、ステ
ツプ(160)に進んで、この手続きは要求された
ページ・テーブル・エントリの数を決定する。次
にステツプ(162)において、セグメント・テー
ブル用の必要な交換デイスク空間を求める。最後
にステツプ(166)において、新たなセグメント
のアドレスに対するseg−segpポインタを呼出し
に戻す。
第2C図は、ユニツクス・オペレーテイング・
システムにおける処理の仮想空間が通常いかに配
置されているかを示す。プログラムのテキスト記
憶領域30は仮想空間の最下位アドレスAからデ
ータ記憶領域32の開始アドレスBまでを占め
る。このデータ記憶領域32は、アドレスCまで
広がる。プログラムのスタツク領域34は仮想空
間の最大アドレスEで開始し、必要に応じてデー
タ空間32の方向に伸びる。この場合、スタツク
はアドレスDに伸びる。スタツク及びデータ領域
間の領域36を、これらスタツク及びデータ領域
が更に伸びるために確保する。
フオーク動作の後、同じ情報で満たされた同じ
サイズの仮想アドレス空間を夫々が有するという
意味で、親及び子処理は同じ処理である。最初の
「exec」は、処理の現在のテキスト及びデータ・
セグメントをフアイルにおいて特定された新たな
テキスト及びデータ・セグメントに置き換えて、
この処理が新たなプログラム・フアイルを実行で
きるようにする。これはプログラムを変更し、処
理自体ではないが、処理が実行される。
exec動作中、「getxfile( )」処理を読出して
手続きの仮想空間から古いプログラム・フアイル
を移動し、これを新たなプログラム・フアイルと
置換える。getxfile( )手続きの流れ図を第8
図に示す。ステツプ(167)においてこの手続き
は開始し、ステツプ(168)に進んで「vrelvm
( )」を呼出して、exec動作を受ける処理用の
処理マツプ・リスト及びページ・テーブル・エン
トリを削除するので、この処理の仮想メモリをク
リアする。次にステツプ(169)において、
「vgetvm( )」手続きは、この手続きの仮想メモ
リのサイズを調整して、新たなプログラム・フア
イルの要求に適合させる。その後ステツプ(170)
において、mapzeroi( )」手続きが処理のスタ
ツク領域用の新たなセグメント・ページ・テーブ
ル12を作成して、そこへ各エントリをPG−
FZERO型式でセツトするので、この処理が後で
スタツクに書込みをしようとするとき、新たな零
で満たされたページをコア内に作成する。また、
mapzeroi( )処理は、プログラムのスタツク部
分を新たなセグメントにマツピングする新たな処
理マツプ・リスト22のエントリを作成すると共
に、スタツク・セグメント用に新たな処理ペー
ジ・テーブル10のエントリも作成する。
mapzeroi( )がステツク領域をセツト・アツプ
すると、プログラム・テキストが「フイル・オ
ン・デマンド(fill−on−demand)」の場合、ス
テツプ(171)はプログラムの流れをステツプ
(172)に進める。なお、「フイル・オン・デマン
ド」は、テキストがデイスク・フアイル内にあ
り、必要になるまでコアとスワツプされないこと
を示す。
ステツプ(172)において、mapzeroi( )は
データ・セグメント用に新たな零で満されたセグ
メント・ページ・テーブル12、新たな処理マツ
プ・リスト22のエントリ、及び新たな処理ペー
ジ・テーブル10のエントリを再び作成する。そ
の後、ステツプ(173)において、新たなプログ
ラムのデータ部分をフアイルからコア・メモリ内
に読取り、コア内のデータ・ページを示す必要に
応じて新たなデータ・セグメント・ページ・テー
ブル12のエントリを調整する。ステツプ(174)
において、getxfile( )処理は次にfileseg( )
処理を呼出す。このfileseg( )処理は、テキス
ト・フアイルに対応する実在のセグメントを見つ
けるか、かかるセグメントが存在しない場合、テ
キスト・フアイルを示す新たなPG−FTEXTセ
グメントを作成する。その後ステツプ(176)に
おいて、newmap( )処理は、この処理用の新
たな処理マツプ・リストのエントリを作成し、テ
キスト仮想空間を空間をテキスト・セグメントに
マツピングする。次にステツプ(178)において
applymap( )手続きを呼出し、テキスト・セ
グメント用の処理ページ・テーブル・エントリを
作成する。最後にステツプ(180)において、
getxfile( )手続きは呼出しに戻る。
ステツプ(171)において、呼出したプログラ
ム・フアイルがフイル・オン・デマンド・テキス
トを含んでいないと、プログラムの流れはステツ
プ(182)に進み、mapzeroi( )手続きは、デ
ータ領域用に新たな零で満たされたセグメント・
テーブル、新たな処理マツプ・リスト・エントリ
及び新たな処理ページ・テーブル・エントリを作
成する。次にステツプ(184)において、新たな
プログラムのデータ部分をフアイルからコア・メ
モリ内に読取り、コア内のデータ・ページを示す
必要に応じて、新たなデータ・セグメント・ペー
ジ・テーブル・エントリを調整する。プログラ
ム・フアイル内にテキストがなければ、ステツプ
(186)は手続きの流れをステツプ(188)に進め、
getxfile( )手続きを復帰させる。テキストが
プログラム・フアイル内にある場合、ステツプ
(186)はプログラムの流れをステツプ(190)に
進め、mapzeroi( )を再び呼出して、フアイル
からテキスト・データを受けるセグメントを作成
して、マツピングする。ステツプ(192)におい
て、フアイルからコアにテキスト・データを読取
り、ステツプ(194)において、プログラムを呼
出しに復帰させる。
処理の仮想空間から存在するプログラムをクリ
アするためにgetxfile( )手続きが呼出した
vrelvm( )手続きの流れ図を第9図に示す。ス
テツプ(196)において開始し、処理の流れはス
テツプ(198)に進み、第1処理マツプ・リス
ト・エントリを検査して、物理的マツピングかを
判断する。ノーならば、プログラム動作はステツ
プ(200)に進んで、「killptes( )」手続きが、
マツプ・リスト・エントリに対応するページ・テ
ーブル・エントリを削除する。次にステツプ
(202)は、最終処理マツプ・リスト・エントリが
まだ検査されていなければ、プログラムの流れを
ステツプ(204)に進める。ステツプ(204)にお
いて、次のマツプ・リスト・エントリを見付けた
後、プログラムの流れはステツプ(198)に戻る。
マツプ・リスト・エントリが物理的マツピングの
場合、ステツプ(198)はプログラムの流れをス
テツプ(206)に進め、「releasemap( )」手続
きを呼出して、マツプ・リスト・エントリを削除
する。すなわち、セグメントが共有化されたり又
はプライベート化されていれば、セグメント共有
リスト又はセグメント専有リストから、マツプ・
リスト・エントリを除去する。セグメントが共有
化も専有化もされていなければ、releasemap
( )がそのセグメントを除去する。次に、プロ
グラムの流れはステツプ(202)に進む。現在の
マツプ・リスト・エントリが処理用の最終マツ
プ・リスト・エントリならば、ステツプ(202)
はプログラムの流れをステツプ(208)に進め、
この手続きを呼出しに戻す。
マツプ・リストからマツピング・エントリを除
去するために呼出したreleasemap( )手続きの
流れ図を第10に示す。このreleasemap( )手続
きはステツプ(210)において開始し、ステツプ
(212)に進む。ここで、処理マツプ・リスト・エ
ントリが、専有セグメントをマツピングすれば、
ステツプ(214)に進む。ステツプ(214)におい
て、専有リストの前のマツピングのm−
nextprivatedポインタを変更して、マツプ・リス
ト・エントリを専有リストから除去する。マツピ
ングが専有リストに対してでなければステツプ
(212)から、そうでなければステツプ(214)か
らプログラムの流れはステツプ(216)に進み、
マツプ・リスト・エントリが共有リスト上なら
ば、プログラムの流れはステツプ(218)に更に
進む。ステツプ(218)において、共有リスト上
の以前のマツピングのm−nextsharedポインタ
を変更して、マツプ・リスト・エントリを共有リ
ストから除去する。セグメントが共有されなけれ
ばステツプ(216)から、そうでなければステツ
プ(218)から、プログラムはステツプ(220)に
移動し、「maybefreeseg( )」手続きを呼出し
て、もはやマツピングがそれを示さなければ、セ
グメントの再利用を可能にする。ステツプ(222)
において、releasemap( )手続きは呼出しに戻
る。
killptes( )手続きを呼出し、関連した処理が
コアからスワツプされたり、完全に除去される
と、処理マツプ・リスト・エントリに関連した仮
想メモリ領域の陰の実メモリを解放する。この手
続きの流れ図を第11図に示す。メモリ内のペー
ジがもはや必要なければ、手続きの「キル(消
す)」引数を真にセツトし、メモリ内のページが
デイスクのスワツプ領域に単に交換されるならば
キル引数を偽にセツトする。このkillptes( )手
続きの流れは、ステツプ(224)で開始し、プロ
セス・マツプ・リスト・エントリが物理的マツピ
ングであれば、ステツプ(228)に更に進む。キ
ル変数が真、即ち処理用にページはもはや必要で
ないことを示すならば、ステツプ(228)はプロ
グラムの流れをステツプ(230)に進める。ステ
ツプ(230)はreleasemap( )手続きを呼出し、
処理用のマツプ・リスト・エントリを削除する。
キル引数が偽の場合はステツプ(228)から、そ
うでなければステツプ(230)から、プログラム
の流れはステツプ(232)に進む。ここで、有効
ビツトにおいて、セグメントに関連したページ・
テーブル・エントリ(PTES)のpg−vを偽にセ
ツトするので、物理的コア内のページが無効にさ
れ、処理がこれらページ・テーブル・エントリに
よりこれらページを再びアクセスしない。次に、
ステツプ(234)において、killptes( )手続き
は、呼出しに戻る。
マツプ・リスト・エントリが物理的マツピング
でない場合、第1図のステツプ(226)はプログ
ラムの流れをステツプ(236)に進める。ここで、
マツピングされたセグメント・フアイルのSEG
−LOCKEDフラグを真にセツトし、killptes( )
手続きが終了するまで、他の処理がセグメントを
アクセスするのを禁止する。キル引数が真なら
ば、ステツプ(238)はプログラムの流れをステ
ツプ(240)に進め、削除すべき処理ページ・テ
ーブル・エントリのすべてを検査し、専有化され
ているかを判断する。多くのページ・テーブル・
エントリが専有化されていれば、必要とする専用
のためにこれらをコピーする。ステツプ(240)
から、又はキル引数が偽ならばステツプ(238)
から、処理の流れはステツプ(242)に進み、削
除されるページ・テーブル・エントリと同じペー
ジを示す他のページ・テーブル・エントリがコア
内になければ、手続きの流れはステツプ(244)
に進む。ステツプ(244)において、コア・ペー
ジはもはや必要でないので自由になる。キル引数
が真の場合、ステツプ(246)によりプログラム
の流れはステツプ(248)に進む。ステツプ
(248)において、デイスクの交換領域からページ
も削除する。ステツプ(248)から、又はキル引
数が偽の場合はステツプ(246)から手続きの流
れはステツプ(250)に進み、消されたページ・
テーブル・エントリに関連したメモリ・マツピン
グを適用されないとして示す。次にステツプ
(252)において、セグメントを解除する。次に、
キル引数が真ならば、ステツプ(254)は処理の
流れをステツプ(256)に進める。このステツプ
(256)において、releasemap( )手続きを呼出
し、処理マツプ・リストからマツピングを削除す
る。ステツプ(256)から、又はキル引数が偽の
場合はステツプ(254)からプログラムの流れは
ステツプ(258)に進み、この手続きは呼出しに
戻る。
新たな零で満たされたセグメントを作成するの
に呼出したmapzeroi( )手続きの流れ図を第1
2図に示す。ステツプ(260)より開始し、プロ
グラムの流れはステツプ(262)に進んで、
newsegment( )手続きを呼出して、新たなセ
グメント・ページ・テーブル用のデイスク空間を
得る。次にステツプ(264)において、newmap
( )手続きは、新たなマツピング・エントリを
新たなセグメント用の処理マツプ・リストに加え
る。次にステツプ(266)において、新たなPG−
FZEROセグメント及び処理ページ・テーブル・
エントリを作成し、ステツプ(268)においてマ
ツピングを適用するように示す。ステツプ(270)
において、処理は呼出しに戻る。
fileseg( )手続きの流れ図を第13図に示
す。処理がデイスク上の新たなフイル・オン・デ
マンド・テキストをその仮想空間に導こうとする
と、この手続きが呼出される。このfileseg( )
手続きはステツプ(212)で開始し、ステツプ
(274)において、同じデイスク・フアイルを示す
他のセグメント・ページ・テーブルを捜す。他の
セグメントが見付からない場合、ステツプ(276)
は処理の流れをステツプ(278)に進め、ここで
newsegment( )手続きが新たなセグメント・
ページ・テーブルを作成する。処理の流れは更に
ステツプ(280)に進み、「vinifod( )」手続き
は、新たなセグメント・ページ・テーブルのペー
ジ・テーブル・エントリがデイスク・フアイルを
示すようにする。次にステツプ(282)において、
新たなセグメントに対するポインタが呼出しに戻
る。他のセグメント・ページ・テーブルがデイス
ク・フアイルを示す場合、ステツプ(276)はプ
ログラムの流れを直接ステツプ(282)に進み、
実在のセグメントにポインタを呼出しに戻す。
マツプ・リスト・エントリに対応する処理ペー
ジ・テーブル10のエントリをセツト・アツプす
るために呼出されたapplymap( )手続きの流
れ図を第14図に示す。ステツプ(284)で開始
したプログラムの流れはステツプ(286)に進み、
マツピングが物理的メモリである場合、ステツプ
(288)に進む。このステツプ(288)において、
物理的マツピング用のページ・テーブル・エント
リを処理ページ・テーブルに付加する。次のステ
ツプ(290)において、手続きは呼出しに戻る。
また、マツピングが物理的メモリでない場合、ス
テツプ(286)はプログラムの流れをステツプ
(292)に進め、マツピングが参照したセグメント
を拘束する。コア内に現存する他のセグメントに
おいて、ページ・テーブル・エントリが利用可能
でない場合、ステツプ(294)はプログラムの流
れをステツプ(296)に進め、所望のページ・テ
ーブル・エントリを含むセグメント・ページ・テ
ーブルをデイスクからコア内に読取る。更にステ
ツプ(298)に進み、セグメント・ページ・テー
ブル内のページ・テーブル・エントリを処理ペー
ジ・テーブル内にコピーする。次にステツプ
(300)において、セグメントを解除し、ステツプ
(302)において処理は呼出しに戻る。コア内に存
在する他のセグメント・ページ・テーブルが所望
のページ・テーブル・エントリを有すると、ステ
ツプ(294)はプログラムの流れをステツプ
(304)に進め、これらページ・テーブル・エント
リを処理ページ・テーブル内にコピーするので、
デイスク・アクセスを避ける。ステツプ(304)
から処理はステツプ(300)に移動して、このセ
グメントを解除する。更にステツプ(302)に進
み、呼出しに戻る。
マツピングのページ・テーブル・エントリが消
されたとき、専有化されたページ・テーブル・エ
ントリのコピーを行なうために呼出される
giveawayprivated( )手続きの流れ図を第15
図に示す。ステツプ(306)から開始した処理の
流れはステツプ(308)に進み、マツピングの第
1ページ・テーブル・エントリが専有化されてい
るかを検査する。専有化されていれば、ステツプ
(310)において、他の処理がコピーを要求してい
るかを知るためこのエントリを検査する。要求し
ている場合、ステツプ(310)はプログラムの流
れをステツプ(312)に進め、セグメントを解除
する。更にステツプ(314)に進み、要求してい
る処理用にページ・テーブル・エントリのコピー
を行なう。次にステツプ(316)において、セグ
メントを拘束する。ちようど今検査したページ・
テーブル・エントリがマツピングの最終エントリ
ならば、ステツプ(318)が処理の流れをステツ
プ(320)に進める。このステツプ(320)におい
て、次のページ・テーブル・エントリを捜し、新
たなページ・テーブル・エントリを検査するため
に処理の流れはステツプ(308)に戻る。他の処
理がページ・テーブル・エントリのコピーを要求
しない場合、ステツプ(310)はプログラムの流
れを直接ステツプ(318)に進め、このエントリ
のコピーを行なわない。マツピングの最終ペー
ジ・テーブル・エントリを検査し、必要ならコピ
ーした場合、ステツプ(318)は処理の流れをス
テツプ(322)に進め、処理を呼出しに戻す。
物理的メモリをマツピングする新たなマツプ・
リスト・エントリを付加すべきときに呼出される
mapphysical( )手続きの流れ図を第16図に
示す。ステツプ(324)から開始した
mapphysical( )手続きはまずステツプ)326)
においてnewmap( )手続きを呼出し、セグメ
ントが参照されないので、零にセツトされたm−
segpポインタを有する新たなマツプ・リスト・
エントリを付加する。次のステツプ(328)にお
いて、applymap( )手続きは、マツピングに
関連した処理ページ・テーブル・エントリを作成
する。そして、ステツプ(330)において、この
手続きは、呼出しに戻る。
ページがPG−FTEXT又はPG−SWAP型式の
ように、処理がコア・メモリに現存しないページ
をアクセスしようとしたときに、「bringitin
( )」手続きが呼出され、デイスクからコア・メ
モリ内へページを読取る。この手続きはユニツク
スにおいては新規ではないが、本発明において
は、従来の手続きの最後にステツプを付加してペ
ージがPG−FSEG型式の状態を処理している。
ここで、ページ・テーブル・エントリが他のセグ
メントにおけるページ・テーブル・エントリを参
照している。このbringitin( )手続きの付加し
た部分の流れ図を第17図に示す。bringitin
( )手続きの新たな部分はステツプ(332)で開
始し、ページ・テーブル・エントリがPG−
FSEG型式ならばプログラムの流れをステツプ
(334)に進める。ステツプ(334)において、専
有リストのオリジナル・ページ・テーブル・エン
トリを見付け、次のステツプ(336)において、
ページがコア内になければ、デイスクからコアに
ページを導く。次にステツプ(338)において、
ページ・テーブル・エントリを変更して、コア内
のページを示す。ステツプ(340)において、こ
の手続きは呼出しに戻る。ページがPG−FSEG
型式でなければ、ページはPG−FZERO、PG−
CORE、PG−TEXT又はPG−SWAP型式であ
り、bringitin( )手続きの従来の部分が見付
け、ページ内に導く。この場合、ステツプ(332)
はプログラムの流れをステツプ(340)に直接進
め、手続きに戻す。
ページがコア内に導かれたとき、ページをプラ
イベータ(privateer)にコピーするために呼出
された「GiveToPrivaters( )」手続きの流れ図
を第18図に示す。ステツプ(342)で開始した
この手続きはステツプ(344)に進み、第1専有
マツピングを捜す。次にステツプ(346)に進み、
専有マツピングがコピーを要求していると、手続
きをステツプ(348)に進める。このステツプ348
において、コピー用にコア空間を確保し、ステツ
プ(350)において、確保したコア空間にコピー
を行なう。現在の専有マツピングが専有リストの
最後でない場合、ステツプ(352)は処理の流れ
をステツプ(354)に進め、次の専有マツピング
を捜してステツプ(346)に戻る。プライベータ
がコピーを要求していない場合、ステツプ(346)
はプログラムの流れを直接ステツプ(352)に進
める。ちようど今検査した専有マツピングが専有
リスト内の最終の場合、ステツプ(352)は処理
の流れをステツプ(356)に進める。ここで、こ
の手続きは終了し、呼出しに戻る。
処理をコア内にスワツプするとき、「swapin
( )」手続きを呼出し、処理ページ・テーブルを
作成する。この手続きの流れ図を第19図に示
す。ステツプ(358)で開始し、ステツプ(360)
において、applymap( )手続きを呼出して、
処理マツプ・リストの第1マツピング用に処理ペ
ージ・テーブル・エントリを作成する。次に、こ
のマツピングがマツプ・リストの最終マツピング
でなければ、ステツプ(362)はプログラムの流
れをステツプ(364)に進める。このステツプ
(364)において、次のマツピングを見付け、プロ
グラムの流れをステツプ(360)に戻して次のマ
ツピング用にapplymap( )手続きを呼出す。
ページ・テーブル・エントリがすべてのマツプ・
リスト・エントリ用にセツト・アツプされると、
ステツプ(362)はプログラムの流れをステツプ
(366)に戻すので、この手続きは呼出しに戻る。
処理がコアからスワツプ・アウトされるべきと
き、「swapout( )」手続きが呼出されて関連し
たページ・テーブル・エントリを消す。第20図
は、このswapout( )手続きの流れ図である。
この手続きはステツプ(368)で開始し、マツピ
ングが物理的でないとステツプ(370)はプログ
ラムの流れをステツプ(372)に進める。このス
テツプ(372)において、killptes( )手続きは、
第1マツプ・リスト・エントリに関連した処理ペ
ージ・テーブル・エントリを削除する。次に、こ
のマツプ・リスト・エントリがマツプ・リスト内
の最後でない場合、ステツプ(374)はプログラ
ムの流れをステツプ(378)に進める。このステ
ツプ(378)において、次のマツプ・リスト・エ
ントリを捜し、プログラムの流れはステツプ
(370)に戻る。マツプ・リスト・エントリが物理
的マツピングの場合、ステツプ(370)はプログ
ラムの流れをステツプ(374)に進め、ページ・
テーブル・エントリを消さない。マツプ・リス
ト・エントリが最終ならば、ステツプ(374)は
プログラムの流れをステツプ(380)に進め、こ
の手続きを呼出しに戻す。
処物理の仮想アドレス空間をデイスク・フアイ
ルにマツピングするのに呼出す「m−fmap( )」
手続きの流れ図を第21図に示す。ステツプ
(382)で開始したこの手続きはステツプ(384)
に進み、サイズ等のフアイル・パラメータを検査
する。次にステツプ(386)において、この手続
きは、処理の仮想アドレス空間がフアイルを受け
るのに充分かを判断し、必要に応じて更に仮想ス
ペースを処理に追加する。次のステツプ(388)
において 「mapfile( )」手続きが新たなマツピングを
行ない供給する。この手続きはステツプ(390)
において終了し、呼出しに戻る。
第22図に流れ図を示すmapfile( )手続き
は、ステツプ(392)において開始する。ステツ
プ(394)において、newmap( )手続きを呼出
し新たなマツプ・リスト・エントリを作成し、ス
テツプ(396)において、applymap( )手続き
を呼出し関連した処理ページ・テーブル・エント
リを作成する。ステツプ(398)において、この
処理は呼出しに戻る。
「m−mmap( )」手続きは、ページを処理の
仮想スペースに追加するときに呼出す。これら
は、零で満たされたページ、物理的メモリ、同じ
仮想スペースの他の部分のコピー、又は他の処理
の仮想スペースの部分のコピーである。第23図
はm−mmap( )手続きの流れ図を示す。この
手続きは、ステツプ(400)で開始し、呼出し手
続きに渡された或るパラメータが不正確ならば、
ステツプ(402)は処理の流れをステツプ(404)
に進めて終了する。処理がクラスタのサイズ部分
外における新たなマテリアル(内容)を取込もう
とするとき、すでに満たされた領域に新たなマテ
リアルを配置しようとするとき、又は処理の可能
な仮想スペースの限界外にマテリアルを配置しよ
うとするとき、これらパラメータは不正確であ
る。パラメータが満足ならば、ステツプ(402)
はプログラムの流れをステツプ(406)に進め、
必要ならば仮想スペースを処理に追加する。次
に、追加すべきセグメントがPG−FZERO型式の
ページから構成されていると、ステツプ(408)
はプログラムの流れをステツプ(410)に進める。
ステツプ(410)はmapzeroi( )手続きを呼出
し、零で満ちたセグメントを作成し、このセグメ
ントをマツピングするマツプ・リスト・エントリ
を作成し、処理ページ・テーブル・エントリを作
成する。次にステツプ(412)において、ペー
ジ・テーブル・エントリをページ・テーブル・エ
ントリ・キヤツシユからフラツシユし、ステツプ
(414)において処理は呼出しに戻る。
ページ・テーブル・エントリ・キヤツシユは高
速アクセス・メモリであり、コア内に記憶され、
しばしばアクセスされるページ・テーブル・エン
トリを記憶するのに使用する。仮想・実アドレス
変換用にページ・テーブル・エントリをアクセス
すると、オペレーテイング・システムは、通常コ
ア・メモリ内のページ・テーブル・エントリをア
クセスしようとする前に、これらエントリがキヤ
ツシユ内にあるかどうかを検査する。ページ・テ
ーブル・エントリがどこかで破壊されたり変更さ
れたとき、オペレーテイング・システムが破棄さ
れたページ・テーブル・エントリをアクセスする
のを避けるために、キヤツシユをフラツシユする
か、空(カラ)にする。
付加すべきマツピングがPG−FZEROページを
含んでいない場合、ステツプ(408)はプログラ
ムの流れをステツプ(416)に進める。次に、マ
ツピングが物理的メモリの場合、プログラムの流
れをステツプ(418)に進める。このステツプ
(418)において、mapphysical( )手続きが、
マツプ・リスト・エントリ及び処理ページ・テー
ブル・エントリを作成する。次のステツプ(420)
において、ページ・テーブル・エントリをペー
ジ・テーブル・エントリ・キヤツシユからフラツ
シユし、ステツプ(422)において、この手続き
は呼出しに戻る。マツピングが物理的メモリでな
い場合、ステツプ(416)は処理の流れをステツ
プ(424)に進める。ここで、データが処理に対
し読取り保護されていると、処理の流れはステツ
プ(426)に進む。このステツプ(426)におい
て、手続きは終了し、新たなマツピングを行なう
ことなく呼出しに戻る。データが読取り保護され
ていないと、プログラムの流れがステツプ(424)
からステツプ(428)に進んで、新たなマテリア
ルをアクセスする処理の権利を検査できる。この
処理にマテリアルをアクセスする権利がなけれ
ば、プログラムの流れはステツプ(430)に進み、
呼出しに戻る。この処理がマテリアルをアクセス
する権利を有する場合、ステツプ(428)は処理
制御をステツプ(432)に進める。ここで、新た
なページが書込み可能で専有化すべきならば、処
理をステツプ(434)に進める。このステツプ
(434)において、privatemap( )手続きは専有
マツピングを行ない、ステツプ(436)において
この手続きは呼出しに戻る。マテリアルを専有化
すべきでないならば、ステツプ(432)は処理の
流れをステツプ(438)に進め、newmap( )手
続きがこのマテリアル用に新たなセグメント・テ
ーブル及びマツプ・リスト・エントリを作成す
る。次のステツプ(440)において、applymap
( )手続きはこのマツピング用に処理ページ・
テーブル・エントリを作成する。次に、ステツプ
(442)においてこの手続きは呼出しに戻る。
仮想スペースの或る領域のマテリアルを同じ処
理の仮想スペースの他の領域に移動するために呼
出す「m−remap( )」手続きの流れ図を第24
図に示す。ステツプ(444)で開始したこの手続
きの流れはステツプ(446)に進み、ここで、呼
出し手続きから渡された再配置のパラメータを検
査し、この要求された再配置が有効かどうかを判
断する。これらパラメータが無効の場合、ステツ
プ(447)に進みこの手続きを戻す。これらパラ
メータが有効な場合、ステツプ(448)において、
移動に必要ならば更に仮想スペースを処理に追加
する。次のステツプ(450)において、
「extractrange( )」手続きは、再配置すべきマ
ツプ・リスト・エントリのリストを作成し、マツ
プ・リスト・エントリの境界により再配置すべき
領域における仮想スペース境界を整列するのに必
要ならば、マツプ・リスト・エントリを分割す
る。次のステツプ(452)において、再配置され
たマツピングの仮想スペース開始アドレスを調整
し、ステツプ(454)において、
「insertmappings( )」手続きがこのマツピング
を処理マツピング・リストに戻す。ステツプ
(456)において、オリジナル・ページ・テーブ
ル・エントリを新たなページ・テーブル記憶位置
にコピーし、ステツプ(458)において古いペー
ジ・テーブル・エントリを零にする。ステツプ
(460)でページ・テーブル・エントリ・キヤツシ
ユをフラツシユし、ステツプ(462)において処
理を呼出しに戻す。
処理がプログラムの一部を除去しようとすると
きに呼出す「m−munmap( )」手続きの流れ図
を第25図に示す。ステツプ(464)で開始した
この手続きはステツプ(466)に進み、ここで、
移動すべき部分を特定するパラメータの有効性を
検査する。これらが無効移動を特定していれば、
ステツプ(466)は処理の流れをステツプ(467)
に進めるので、この処理は呼出しに戻る。これら
パラメータが有効ならば、処理(466)はプログ
ラムの流れをステツプ(468)に進める。ここで、
「munmap( )」手続きを呼出して、ステツプ
(470)に進み、m−munmap( )手続きは呼出
しに戻る。
流れ図を第26図に示すmunmap( )手続き
はステツプ(472)で開始する。そしてステツプ
(474)において、extractrange( )手続きを呼
出し、除去すべき領域をカバーするマツプ・リス
ト・エントリのリストを作成し、マツプ・リス
ト・エントリの境界により移動すべき領域の境界
を整列するのに必要ならば、第1又は最終マツ
プ・エントリを分割する。次にステツプ(476)
において、「insertrange( )」手続きは、引出し
たマツプ・リスト・エントリをマツプ・リストに
戻す。ステツプ(478)において、killptes( )
手続きは、取消すべき仮想メモリ空間の裏の実メ
モリを解放し、ステツプ(480)において、ペー
ジ・テーブル・エントリ・キヤツシユをフラツシ
ユする。次にステツプ(482)において、この手
続きは呼出しに戻る。
従来のユニツクス・システムにおいて、プログ
ラムのデータ領域用に更に仮想空間が要求される
と、「obreak( )」手続きを使用した。仮想メモ
リのデータ領域及びスタツク領域間のカラ仮想空
間の適当な部分により空間を得るが、この付加さ
れる空間は実在するデータ領域まで連続しなけれ
ばならない。本発明においては、本発明のマツピ
ング・フレームワーク内で動作するように
obreak( )手続きを変更する。
本発明のobreak( )手続きの流れ図を第27
図に示す。ステツプ(484)で開始したこの手続
きはステツプ(486)に進み、利用可能なコア及
びスワツプ空間を検査する。新たなデータ領域用
に利用可能なコア又はスワツプ空間が充分でない
ならば、ステツプ(487)においてこの手続きは
呼出しに戻る。充分なスペースがある場合、ステ
ツプ(488)においてデータ領域の最終マツピン
グを見付ける。処理の流れはステツプ(490)に
進み、新たなデータに適応できるように最終マツ
ピングが付加(拡張)できるならば、処理の流れ
はステツプ(492)に進む。このステツプ(492)
において、expand( )手続きを呼出して最終デ
ータ・マツピングがマツピングした仮想スペース
の領域を拡張し、ページ・テーブル・エントリを
セグメント及び処理ページ・テーブルに付加す
る。次のステツプ(494)において、新たなペー
ジ・テーブル・エントリをPG−FZERO型式にセ
ツトする。ステツプ(496)において、ページ・
テーブル・エントリをページ・テーブル・エント
リ・キヤツシユからフラツシユし、ステツプ
(498)においてこの処理を呼出しに戻す。最終デ
ータ領域マツピングができなければ、ステツプ
(490)はプログラムの流れをステツプ(500)に
進めるので、mapzeroi( )処理を呼出して、付
加したデータ領域用に新たな零で満ちたマツピン
グを行なう。次にステツプ(502)において、ペ
ージ・テーブル・エントリ・キヤツシユをフラツ
シユし、ステツプ(498)においてこの処理は呼
出しに戻る。
第28図に流れ図を示した「getpagingcluster
( )」手続きは、デイスクのスワツプ領域内の第
1自由クラスタを見付けるのに使用する。ステツ
プ(504)で開始したこの手続きはステツプ
(506)に進み、どのクラスタが自由であるかを示
すために、スワツプ領域内のクラスタのビツト・
マツプを走査する。自由クラスタが見付かると、
ステツプ(508)はプログラムの流れをステツプ
(510)に進め、このクラスタがもはや自由でない
ことを示すようにスワツプ領域ビツト・マツプを
マークする。次にステツプ(512)において、こ
の手続きは、クラスタの第1ブロツク番号を呼出
しに戻す。クラスタが利用可能でなければ、ステ
ツプ(508)はプログラムの流れをステツプ
(514)に進め、この手続きは0を呼出しに戻す。
スワツプ領域クラスタをもはや使用しないと
き、流れ図を第29図に示す
「freepagingcluster( )」手続きを使用する。ス
テツプ(516)で開始したこの処理はステツプ
(518)に進み、自由になつたクラスタに関連した
ビツト・マツプ内のビツトを変化させる。このク
ラスタ番号は、呼出しによりこの手続きに渡され
ている。ステツプ(520)において、この手続き
は呼出しに戻る。
〔発明の効果〕
上述の如く、本発明の仮想メモリ方法によれ
ば、複数のセグメント・ページ・メモリ・テーブ
ルの各々を、複数のセグメントの独立した1つに
それぞれ対応させると共に、実アドレス・ページ
のメモリ内のアドレスを参照するデータからそれ
ぞれ構成している。また、処理マツプ・リスト
を、セグメント・ページ・テーブルの総べてのメ
モリ内のアドレスを参照するデータから構成して
いる。よつて、2つ以上の処理が、セグメント全
体ばかりでなく、同一セグメントの選択した部分
のみを共有することもできる。また、処理ペー
ジ・テーブルは、処理マツプ・リストが参照する
メモリ内のアドレスを有する処理マツプ・テーブ
ル及びセグメント・ページ・テーブル内のデータ
を含むので、単一のテーブルを参照することによ
り、仮想アドレスから実アドレスへの変換ができ
る。
【図面の簡単な説明】
第1図は2つの処理をメモリ・マツピングする
のに本発明の仮想メモリ方法を用いたテーブル及
びフアイルの例を示す図、第2A図はフオーク動
作の前の単一の親処理に関連したテーブル及びフ
アイルの例を示す図、第2B図は第2A図の親処
理とフオーク動作に続く子処理とをメモリ・マツ
ピングするのに用いるテーブル及びフアイルの例
を示す図、第2C図は代表的なユニツクス・プロ
グラム・フアイルの仮想空間配列を示す図、第3
〜第29図は本発明をユニツクス・オペレーテイ
ング・システムに適用した場合の手続きを示す流
れ図である。

Claims (1)

  1. 【特許請求の範囲】 1 実アドレス空間内の実アドレスにデータを蓄
    積するメモリと、仮想アドレス空間内の仮想アド
    レスを参照して上記メモリに蓄積されたデータを
    処理アクセスする処理手段とを具えたコンピユー
    タを使用する際に、仮想アドレスを仮想アドレ
    ス・ページにグループ化し、特定の実アドレス
    を、上記処理手段が参照する特定の仮想アドレス
    に対応づける方法であつて、 上記メモリの複数のセグメントの各々を複数の
    実アドレス・ページから構成し、上記実アドレ
    ス・ページの各々を上記実アドレス空間内の複数
    の実アドレスから構成し、上記仮想アドレス・ペ
    ージの各々を上記実アドレス・ページの独立した
    1つに対応させ、上記実アドレス・ページの上記
    メモリ内のアドレスを参照するデータからそれぞ
    れ構成した複数のセグメント・ページ・テーブル
    の各々を上記複数のセグメントの独立した1つに
    それぞれ対応させ、上記セグメント・ページ・テ
    ーブルを上記メモリに蓄積し、 上記セグメント・ページ・テーブルの総べての
    上記メモリ内のアドレスを参照するデータから処
    理マツプ・リストを構成し、該処理マツプ・リス
    トを上記メモリ内に蓄積し、 上記仮想アドレス・ページに対応する上記実ア
    ドレス・ページの各々の上記メモリ内のアドレス
    を参照するデータから構成される処理ページ・テ
    ーブルを上記処理の実行直前に上記メモリ内に作
    成且つ蓄積し、 上記処理ページ・テーブルは上記処理マツプ・
    リストが参照する上記メモリ内のアドレスを有す
    る上記処理マツプ・テーブル及び上記セグメン
    ト・ページ・テーブル内のデータを含むことを特
    徴とする仮想メモリ方法。
JP61081952A 1985-04-09 1986-04-09 仮想メモリ方法 Granted JPS61271550A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US06/721,530 US4758951A (en) 1985-04-09 1985-04-09 Method for translating virtual addresses into real addresses
US721530 1985-04-09

Publications (2)

Publication Number Publication Date
JPS61271550A JPS61271550A (ja) 1986-12-01
JPH0519177B2 true JPH0519177B2 (ja) 1993-03-16

Family

ID=24898342

Family Applications (1)

Application Number Title Priority Date Filing Date
JP61081952A Granted JPS61271550A (ja) 1985-04-09 1986-04-09 仮想メモリ方法

Country Status (4)

Country Link
US (1) US4758951A (ja)
EP (1) EP0200911A3 (ja)
JP (1) JPS61271550A (ja)
CA (1) CA1255010A (ja)

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61190638A (ja) * 1985-02-20 1986-08-25 Hitachi Ltd 仮想計算機のフアイル制御方式
US4972338A (en) * 1985-06-13 1990-11-20 Intel Corporation Memory management for microprocessor system
US4812981A (en) * 1985-10-24 1989-03-14 Prime Computer, Inc. Memory management system improving the efficiency of fork operations
JPS63231550A (ja) * 1987-03-19 1988-09-27 Hitachi Ltd 多重仮想空間制御方式
EP0323013B1 (en) * 1987-11-30 1995-08-30 International Business Machines Corporation Method of operating a multiprocessor system employing a shared virtual memory
US4943913A (en) * 1988-02-10 1990-07-24 International Business Machines Corporation Operating system accessing control blocks by using home address space segment table to control instruction and operand fetch and store operations
US5008811A (en) * 1988-02-10 1991-04-16 International Business Machines Corp. Control mechanism for zero-origin data spaces
JPH02202652A (ja) * 1989-02-01 1990-08-10 Hitachi Ltd 多重仮想記憶管理方式
JP2513024B2 (ja) * 1989-03-16 1996-07-03 日本電気株式会社 拡張記憶アドレス制御方式
US5125086A (en) * 1989-06-29 1992-06-23 Digital Equipment Corporation Virtual memory paging apparatus with variable size in-page clusters
JP2858795B2 (ja) * 1989-07-14 1999-02-17 株式会社日立製作所 実記憶割り当て方法
WO1991014986A1 (en) * 1990-03-23 1991-10-03 Eastman Kodak Company Virtual memory management and allocation arrangement for digital data processing system
US5159678A (en) * 1990-06-11 1992-10-27 Supercomputer Systems Limited Partnership Method for efficient non-virtual main memory management
US5193184A (en) * 1990-06-18 1993-03-09 Storage Technology Corporation Deleted data file space release system for a dynamically mapped virtual data storage subsystem
CA2045789A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Granularity hint for translation buffer in high performance processor
US5349652A (en) * 1990-08-31 1994-09-20 Advanced Micro Devices, Inc. Single chip integrated address manager with address translating unit
CA2067650C (en) * 1991-07-24 1996-10-22 Eric Jonathan Bauer Method and apparatus for operating a computer-based file system
US5423013A (en) * 1991-09-04 1995-06-06 International Business Machines Corporation System for addressing a very large memory with real or virtual addresses using address mode registers
US5313647A (en) * 1991-09-20 1994-05-17 Kendall Square Research Corporation Digital data processor with improved checkpointing and forking
US5822784A (en) * 1993-03-19 1998-10-13 Intel Corporation Mechanism supporting execute in place read only memory applications located on removable computer cards
US5463750A (en) * 1993-11-02 1995-10-31 Intergraph Corporation Method and apparatus for translating virtual addresses in a data processing system having multiple instruction pipelines and separate TLB's
US5619656A (en) * 1994-05-05 1997-04-08 Openservice, Inc. System for uninterruptively displaying only relevant and non-redundant alert message of the highest severity for specific condition associated with group of computers being managed
US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
JP3564732B2 (ja) * 1994-06-30 2004-09-15 ソニー株式会社 ディスク制御方法および装置
US5555510A (en) * 1994-08-02 1996-09-10 Intel Corporation Automatic computer card insertion and removal algorithm
US5940869A (en) * 1995-06-07 1999-08-17 International Business Machines Corporation System and method for providing shared memory using shared virtual segment identification in a computer system
US5895499A (en) 1995-07-03 1999-04-20 Sun Microsystems, Inc. Cross-domain data transfer using deferred page remapping
US5924125A (en) * 1995-08-01 1999-07-13 Arya; Siamak Method and apparatus for parallel access to consecutive TLB entries
US5835961A (en) * 1996-05-03 1998-11-10 Digital Equipment Corporation System for non-current page table structure access
US6804766B1 (en) 1997-11-12 2004-10-12 Hewlett-Packard Development Company, L.P. Method for managing pages of a designated memory object according to selected memory management policies
US6085296A (en) * 1997-11-12 2000-07-04 Digital Equipment Corporation Sharing memory pages and page tables among computer processes
US7089382B2 (en) * 2000-10-13 2006-08-08 Xpriori, Llc Method of operating a hierarchical data document system having a duplicate tree structure
US6950916B2 (en) * 2001-01-31 2005-09-27 Rto Software, Inc. Dynamically setting the optimal base addresses of process components
US7058775B2 (en) * 2001-01-31 2006-06-06 Rto Sortware, Inc Systems and methods for avoiding base address collisions using alternate components
US7461228B2 (en) * 2003-11-21 2008-12-02 Rto Software, Inc. Systems and methods for avoiding base address collisions
US7831642B1 (en) * 2004-09-30 2010-11-09 Symantec Operating Corporation Page cache management for a shared file
WO2006127613A2 (en) * 2005-05-24 2006-11-30 Marathon Technologies Corporation Symmetric multiprocessor fault tolerant computer system
US20080163185A1 (en) * 2006-12-29 2008-07-03 Rto Software, Inc. Delay-load optimizer
WO2008132761A2 (en) * 2007-04-26 2008-11-06 Hewlett-Packard Development Company L.P. Method and system for managing heap across process replication
US8812907B1 (en) 2010-07-19 2014-08-19 Marathon Technologies Corporation Fault tolerant computing systems using checkpoints
US9201678B2 (en) 2010-11-29 2015-12-01 International Business Machines Corporation Placing a virtual machine on a target hypervisor
US9053053B2 (en) * 2010-11-29 2015-06-09 International Business Machines Corporation Efficiently determining identical pieces of memory used by virtual machines
US8793429B1 (en) * 2011-06-03 2014-07-29 Western Digital Technologies, Inc. Solid-state drive with reduced power up time
US9251002B2 (en) 2013-01-15 2016-02-02 Stratus Technologies Bermuda Ltd. System and method for writing checkpointing data
ES2652262T3 (es) 2013-12-30 2018-02-01 Stratus Technologies Bermuda Ltd. Método de retardar puntos de comprobación inspeccionando paquetes de red
WO2015102875A1 (en) 2013-12-30 2015-07-09 Stratus Technologies Bermuda Ltd. Checkpointing systems and methods of using data forwarding
EP3090344B1 (en) 2013-12-30 2018-07-18 Stratus Technologies Bermuda Ltd. Dynamic checkpointing systems and methods
KR102761223B1 (ko) * 2018-12-17 2025-02-03 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
US10877666B1 (en) * 2019-06-10 2020-12-29 Acronis International Gmbh Methods and systems for de-duplicating blocks of data
CN113220469B (zh) * 2021-03-23 2024-04-16 黑芝麻智能科技(上海)有限公司 进程间通信方法、装置和计算机设备和计算机可读介质
US12007888B2 (en) * 2022-08-19 2024-06-11 Micron Technology, Inc. Techniques to group media blocks

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2230258A5 (ja) * 1973-05-16 1974-12-13 Honeywell Bull Soc Ind
FR2253418A5 (ja) * 1973-11-30 1975-06-27 Honeywell Bull Soc Ind
DE2641722C3 (de) * 1976-09-16 1981-10-08 Siemens AG, 1000 Berlin und 8000 München Hierarchisch geordnetes Speichersystem für eine datenverarbeitende Anlage mit virtueller Adressierung
JPS5534337A (en) * 1978-08-31 1980-03-10 Fujitsu Ltd Multi assumption space control system
US4320456A (en) * 1980-01-18 1982-03-16 International Business Machines Corporation Control apparatus for virtual address translation unit
JPS583178A (ja) * 1981-06-30 1983-01-08 Fujitsu Ltd 記憶状態分割制御方式

Also Published As

Publication number Publication date
EP0200911A3 (en) 1990-03-07
JPS61271550A (ja) 1986-12-01
CA1255010A (en) 1989-05-30
US4758951A (en) 1988-07-19
EP0200911A2 (en) 1986-11-12

Similar Documents

Publication Publication Date Title
JPH0519177B2 (ja)
US5687343A (en) Product for global updating modified data object represented in concatenated multiple virtual space by segment mapping
US5123101A (en) Multiple address space mapping technique for shared memory wherein a processor operates a fault handling routine upon a translator miss
US5230045A (en) Multiple address space system including address translator for receiving virtual addresses from bus and providing real addresses on the bus
US5361340A (en) Apparatus for maintaining consistency in a multiprocessor computer system using virtual caching
Bensoussan et al. The Multics virtual memory: Concepts and design
EP1096385B1 (en) A method and apparatus for forming an entry address
US5829053A (en) Block storage memory management system and method utilizing independent partition managers and device drivers
US5313611A (en) Method and apparatus for maintaining a lookup table for storing function values
US5073851A (en) Apparatus and method for improved caching in a computer system
US6286092B1 (en) Paged based memory address translation table update method and apparatus
US5088026A (en) Method for managing a data cache using virtual external storage addresses as arguments
US20040221125A1 (en) Method, system and computer program product for implementing copy-on-write of a file
Bensoussan et al. The Multics virtual memory
GB2422929A (en) Memory Management System
JPH03142644A (ja) キャッシュメモリ制御方法とこのキャッシュメモリ制御方法を用いたプロセッサおよび情報処理装置
US7493464B2 (en) Sparse matrix
JP3439167B2 (ja) コンピュータ・システムにおいてディレクトリ構造を含むメイン・メモリの内容にアドレスするための方法および装置
US11334499B2 (en) Method for locating metadata
JPH0555901B2 (ja)
EP3291103A1 (en) System and method for creating a snapshot of a subset of a database
EP1396790A2 (en) Remote translation mechanism of a virtual address from a source a node in a multi-node system
KR930003439B1 (ko) 가상 메모리 관리를 위한 메모리 구조 및 시스템
KR100354274B1 (ko) 주전산기의페이지디렉토리공유방법
US11314656B2 (en) Restartable, lock-free concurrent shared memory state with pointers