まず,根本の話です。
Windowsの実行環境というのは,「Windowsの本体と言うべきカーネル部分」と「サブシステム」という組み合わせからなっています。
Windowsサブシステム(正確に書くならWin64サブシステムやWin32サブシステム)やWindows Subsystem for LINUXは後者です。
前者の中にデバイスドライバやNT Kernel,NT Executiveが含まれます。
オフトピック
NT ExecutiveがNT Kernelとして扱われるのかはよくわからない。
資料見る限り,厳密には違うけれども(NT KernelはNT ExecutiveとHALの間,とか書かれている),
厳密さが不要であればNT Kenrelの一部にExecutiveがあるとしていることもあるっぽい
ややこしいことにWindows GDIなどはカーネルモードで動いていますが,Windows GDIはそもそもWindowsサブシステムの機能です (なのでUser32.dllに含まれる)。
普段「Windows」と呼んでいるものは,「Windowsカーネル」に「Windowsサブシステム」が載ったもののことになります。
「Windows Subsystem for LINUX」はサブシステムであり,「Windowsサブシステム」と併存する位置関係にあります。
ただし,WSLは特殊なサブシステムで,
- 既存や過去のサブシステム (WindowsやOS/2, POSIX) は原則としてユーザーモードで完結していたが,WSLはカーネルモードにも実装が入る
- コンソールとなるbash.exeはWindowsサブシステム上で動作し,WSLとは各種プロセス間通信で入出力している
というものになります。
ref)
Windows Subsystem for Linux Overview - Windows Subsystem for Linux @ MSDN blog
晩秋. さんが書きました: ↑5年前
Q1:「Windows Subsystem of LINUX」のようなLINUXからWindowsのファイルを操作できる場合、
物理的に同じファイルに対して、LINUXのファイル管理システムとWindowsのファイル管理システムの間
コミュニケーションや合同作業を行うのでしょうか。
物理的に同じファイルに対して処理を行います。
晩秋. さんが書きました: ↑5年前
Q2:ある特定のファイルに関して下記のような情報がいつ生成され、或いは何によって決められるのでしょうか。
読み取りアクセス権かつ読み取り共有
読み書きアクセス権かつ共有無し
書き込みアクセス権かつ共有無し
根本的にはプログラムが要求することで決まります。
その情報をNT Executiveの
IoCreateFileに渡すことで (具体的にはDesiredAccessとShareAccess),最終的にシステム上で決定します。
実際にはここから本来のI/Oがあるでしょうけれども,そこは私には追うための知識が無いので省略します。
晩秋. さんが書きました: ↑5年前
Q3:「Windows Subsystem of LINUX」の場合、上記情報を二つのOSが同時に持たなければならないでしょうか。
NT ExecutiveのIO Managerが全てのサブシステムのI/Oを取り仕切ります。
このため,開いているファイルのアクセス権や共有情報はWindowsサブシステムもWSLもひっくるめて一元的に管理されています。
オフトピック
IoCreateFile自体もIO ManagerのAPIの模様