コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「アドレス空間」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
表記揺れを修正。
1行目: 1行目:
{{出典の明記|date=2021-04}}
[[情報処理]]において、'''アドレス空間''' (アドレスくうかん、'''Address Space''') とは、[[メモリアドレス]]が意味を成すコンテキストを定義したもの。あるいは、一連のメモリアドレスによってアクセス可能なメモリ空間を意味する。

[[情報処理]]において、'''アドレス空間''' (アドレスくうかん、{{lang-en-short|address space}}) とは、[[メモリアドレス]]が意味を成すコンテキストを定義したもの。あるいは、一連のメモリアドレスによってアクセス可能なメモリ空間を意味する。


メモリアドレスはコンピュータの[[主記憶装置|メモリ]]内の物理的位置を識別するものであり、[[住所]]とある意味で類似している。アドレスはデータが格納されている位置を指すが、それはちょうど人間の住所がその人の居住地を指すのと同じである。人間の住所とのアナロジーで言えば、「アドレス空間」とは、町や市や国といったある範囲の地域に対応すると考えることができる。2つのアドレスが数値的に同じでも、それぞれ異なるアドレス空間内のアドレスであれば、異なる位置を指していると言える。これは2つの市に「××町○丁目△-□」という住所が存在したとき、それらが別の場所を指すのと同じことである。
メモリアドレスはコンピュータの[[主記憶装置|メモリ]]内の物理的位置を識別するものであり、[[住所]]とある意味で類似している。アドレスはデータが格納されている位置を指すが、それはちょうど人間の住所がその人の居住地を指すのと同じである。人間の住所とのアナロジーで言えば、「アドレス空間」とは、町や市や国といったある範囲の地域に対応すると考えることができる。2つのアドレスが数値的に同じでも、それぞれ異なるアドレス空間内のアドレスであれば、異なる位置を指していると言える。これは2つの市に「××町○丁目△-□」という住所が存在したとき、それらが別の場所を指すのと同じことである。
11行目: 13行目:
*○○○市××町(○丁目△-□ がアドレスに相当)
*○○○市××町(○丁目△-□ がアドレスに相当)


[[仮想記憶]]方式の[[オペレーティングシステム]]は仮想メモリを'''カーネル空間'''と'''ユーザ空間'''に分離する。カーネル空間は[[カーネル]]や[[デバイスドライバ]]走行のために厳密に確保される。<!--カーネル空間のメモリはディスクに[[ページング方式|スワップアウト]]されることはない。:WindowsNT系はカーネル空間も仮想アドレスなのでページアウトされる。ユーザ空間ではユーザープログラムが動作し、そのメモリは必要に応じてスワップアウトされる。:VxWorksの様に仮想アドレス空間を採用していてもユーザー空間をページアウトしない実装がある-->カーネル空間とユーザー空間の区別は[[オペレーティングシステム]]や[[CPU]][[アーキテクチャ]]によって異なる。ユーザー空間を持たない実装もある([[MS-DOS]],[[NetWare|NetWare3]])。一般的な実装例として、ひとつの連続した仮想アドレス空間の特定のアドレスを境にして、ユーザー空間とカーネル空間を分離している場合が多い(Windows系OS,UNIX系OS)。
[[仮想記憶]]方式の[[オペレーティングシステム]]は仮想メモリを'''カーネル空間'''と'''ユーザ空間'''に分離する。カーネル空間は[[カーネル]]や[[デバイスドライバ]]走行のために厳密に確保される。<!--カーネル空間のメモリはディスクに[[ページング方式|スワップアウト]]されることはない。:WindowsNT系はカーネル空間も仮想アドレスなのでページアウトされる。ユーザ空間ではユーザープログラムが動作し、そのメモリは必要に応じてスワップアウトされる。:VxWorksの様に仮想アドレス空間を採用していてもユーザー空間をページアウトしない実装がある-->カーネル空間とユーザー空間の区別は[[オペレーティングシステム]]や[[CPU]][[アーキテクチャ]]によって異なる。ユーザー空間を持たない実装もある ([[MS-DOS]][[NetWare|NetWare3]])。一般的な実装例として、ひとつの連続した仮想アドレス空間の特定のアドレスを境にして、ユーザー空間とカーネル空間を分離している場合が多い ([[Windows]]系OS、[[UNIX]]系OS)。


== カーネル空間 ==
== カーネル空間 ==
'''カーネル空間'''または「カーネル仮想アドレス空間」は[[オペレーティングシステム]]の[[カーネル]]が存在する仮想メモリ領域である。[[Linux]]においては、全カーネルスレッドが存在しているアドレス空間である。[[仮想記憶]]方式によって、仮想アドレスのある範囲を占めている場合と、多重仮想記憶のひとつの仮想空間をカーネル空間として使用する場合がある。前者の場合、ユーザープロセスがその範囲のアドレスにアクセスしようとすると[[例外処理|例外]]が発生する。逆にカーネルからはユーザープロセスの占めているユーザ空間もアクセス可能だが、あくまでも仮想なので物理メモリがマップされていないことがあり、注意を必要とする。
'''カーネル空間'''または「カーネル仮想アドレス空間」は[[オペレーティングシステム]]の[[カーネル]]が存在する仮想メモリ領域である。[[Linux]]においては、全カーネルスレッドが存在しているアドレス空間である。[[仮想記憶]]方式によって、仮想アドレスのある範囲を占めている場合と、多重仮想記憶のひとつの仮想空間をカーネル空間として使用する場合がある。前者の場合、ユーザープロセスがその範囲のアドレスにアクセスしようとすると[[例外処理|例外]]が発生する。逆にカーネルからはユーザープロセスの占めているユーザ空間もアクセス可能だが、あくまでも仮想なので物理メモリがマップされていないことがあり、注意を必要とする。


== ユーザ空間 ==
== ユーザ空間 ==
'''ユーザ空間'''または「ユーザー仮想アドレス空間」はユーザー[[プロセス]]の動作するアドレス空間である。[[コンピュータ]]システム上で動作する各[[プロセス]]は、それに対応する[[データ]]と[[オブジェクトファイル|コード]]を持ち、実行中にはそれらがユーザ空間上にロードされる。ユーザ空間は[[プロセス]]毎に割り当てられ、それぞれのアドレス範囲は同じである。従って、[[仮想記憶]]方式のオペレーティングシステムでは、ユーザープログラムのコードやデータは同じアドレスから開始されるようになっていることが多い。
'''ユーザ空間'''または「ユーザー仮想アドレス空間」はユーザー[[プロセス]]の動作するアドレス空間である。[[コンピュータ]]システム上で動作する各[[プロセス]]は、それに対応する[[データ]]と[[オブジェクトファイル|コード]]を持ち、実行中にはそれらがユーザ空間上にロードされる。ユーザ空間は[[プロセス]]毎に割り当てられ、それぞれのアドレス範囲は同じである。従って、[[仮想記憶]]方式のオペレーティングシステムでは、ユーザープログラムのコードやデータは同じアドレスから開始されるようになっていることが多い。


==アドレス変換==
==アドレス変換==

2021年4月7日 (水) 20:20時点における版

情報処理において、アドレス空間 (アドレスくうかん、: address space) とは、メモリアドレスが意味を成すコンテキストを定義したもの。あるいは、一連のメモリアドレスによってアクセス可能なメモリ空間を意味する。

メモリアドレスはコンピュータのメモリ内の物理的位置を識別するものであり、住所とある意味で類似している。アドレスはデータが格納されている位置を指すが、それはちょうど人間の住所がその人の居住地を指すのと同じである。人間の住所とのアナロジーで言えば、「アドレス空間」とは、町や市や国といったある範囲の地域に対応すると考えることができる。2つのアドレスが数値的に同じでも、それぞれ異なるアドレス空間内のアドレスであれば、異なる位置を指していると言える。これは2つの市に「××町○丁目△-□」という住所が存在したとき、それらが別の場所を指すのと同じことである。

アドレス空間の例:

仮想記憶方式のオペレーティングシステムは仮想メモリをカーネル空間ユーザー空間に分離する。カーネル空間はカーネルデバイスドライバ走行のために厳密に確保される。カーネル空間とユーザー空間の区別はオペレーティングシステムCPUアーキテクチャによって異なる。ユーザー空間を持たない実装もある (MS-DOSNetWare3)。一般的な実装例として、ひとつの連続した仮想アドレス空間の特定のアドレスを境にして、ユーザー空間とカーネル空間を分離している場合が多い (Windows系OS、UNIX系OS)。

カーネル空間

カーネル空間または「カーネル仮想アドレス空間」はオペレーティングシステムカーネルが存在する仮想メモリ領域である。Linuxにおいては、全カーネルスレッドが存在しているアドレス空間である。仮想記憶方式によって、仮想アドレスのある範囲を占めている場合と、多重仮想記憶のひとつの仮想空間をカーネル空間として使用する場合がある。前者の場合、ユーザープロセスがその範囲のアドレスにアクセスしようとすると例外が発生する。逆にカーネルからはユーザープロセスの占めているユーザー空間もアクセス可能だが、あくまでも仮想なので物理メモリがマップされていないことがあり、注意を必要とする。

ユーザー空間

ユーザー空間または「ユーザー仮想アドレス空間」はユーザープロセスの動作するアドレス空間である。コンピュータシステム上で動作する各プロセスは、それに対応するデータコードを持ち、実行中にはそれらがユーザー空間上にロードされる。ユーザー空間はプロセス毎に割り当てられ、それぞれのアドレス範囲は同じである。従って、仮想記憶方式のオペレーティングシステムでは、ユーザープログラムのコードやデータは同じアドレスから開始されるようになっていることが多い。

アドレス変換

仮想記憶方式において、仮想アドレス空間と物理アドレス空間とを対応させるためのアドレス変換が必要となる。仮想アドレス空間がそのままの配置で物理アドレス空間に存在するなら、単に何らかのオフセットの加減算で変換が済むが、実際にはページング方式セグメント方式が使用されているため、変換はやや複雑となる。多重仮想記憶方式では、複数の仮想アドレス空間内のアドレスが物理的には同じ位置を示していることもある。

関連項目