「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
「Linuxってドライブレター無いの?」的な質問をしたら、
「重症」と言われてしまったので、本ページを作成するに至りました。
詳細 †
ファイル・システム †
種類 †
ディレクトリ構造 †
- Windows
- Cドラ、Dドラ、...といったドライブ・レターを頂点にしたツリー構造
- 階層化には、バックスラッシュ(\)、又は円記号(¥)を使う。
- Linux
- ドライブレターは無く、ルートディレクトリ(/)を頂点にしたツリー構造
- 階層化には、フォーワードスラッシュ(/)を使う。
- 各種ディレクトリ
- /
Windowsの「SystemDrive?」に近いルートディレクトリ
- /var、/tmp
Windowsの「SystemRoot?」に近いLinuxの動作に必要なディレクトリ
- /usr、/bin、/lib
Windowsの「ProgramFiles?」に近いソフトウェアを格納するディレクトリ
- /media
USBやSDカードなどの記憶媒体がマウントされるディレクトリ
- /home/userXXX
Windowsの「USERPROFILE」に相当
断片化 †
- Windows:起きる。
- Linux:断片化が起こりづらい。
シェル、シェルスクリプト †
CMDではなくてBash †
- WindowsではPowerShell?というものもある。
*.batではなくて*.sh †
- シェルスクリプト、バッチ
- Windows:Windowsバッチファイル
- Linux:UNIXシェルスクリプト
実行ファイル †
PEではなくてELF †
実行ファイルのファイルフォーマット
- Windows:Portable Executable (PE)
- Linux:Executable and Linkable Format (ELF)
EXEでなくて拡張子無し †
- Linuxは全てファイルで拡張子無し。
- "*.*"は、拡張子ではなくファイル名の一部
- なので基本的にはルールベース
- シェルスクリプトは、お約束として"*.sh"
- ただ、別に、"*.exe"としてもイイ。
- コンパイラの既定値から、以下のような説もある。
- Windows:*.exe
- Linux:*.out
DLLではなくてSO †
- Windows:****.dll
- Linux:lib****.so.****
メモリ管理 †
仮想メモリ †
- スワップファイルシステム
- Windows:ページファイル(pagefile.sys)
- Linux:ページファイル、スワップファイルシステム
物理メモリ †
- ページテーブルの容量削減の技術
- Windows:large page
- Linux:huge page
- ファイルのキャッシュ
- Windows:ファイル・システム・キャッシュ
- Linux:ページ・キャッシュ
- ストレージのキャッシュ(ファイル・システムを介さない)
- Windows:バッファ・キャッシュ
- Linux:バッファ・キャッシュ
Linuxカーネル2.4からページ・キャッシュに統合された。
API †
Win32 APIではなくてPOSIX †
- Windows:Win32 API
- Linux:POSIX
- 開発用のライブラリというより、カーネルに対するC言語用のインターフェイスなので低機能(というか低レベル)
- Linuxカーネルと、Win32サブシステムを含めたWindows全体を比較するのが間違っているという説。
fork、exec †
- forkはコピーオンライトで親プロセスとメモリを共有する。
- シェルが(開発を奨励している)フィルタをパイプで連結する。
- シェルはシェルは自分自身をforkし2つの子プロセスを生成
- 子プロセスがexec(3)ファミリのシステムコールを使って、
実行コマンドのプログラムをオーバーレイする。
- Windows
- fork、exec単独に相当するシステムコールがない。
- 代わりにspawn()(英語版)ファミリ関数が fork-exec に相当する働きをする。
メモリ管理 †
- malloc
- Windows:HeapAlloc?
- Linux:mmap
- メモリ マップト ファイル、デマンド ページング、コピーオンライト
- Windows:CreateFileMapping?
- Linux:mmap
トレードオフ †
良い点 †
展開が用意 †
- Windows:
- SIDがあるのでSysprepが必要
- 基本GUIでレジストリ設定先などの裏の仕様が不明
- Linux:
- SIDが無いのでSysprepが不要。
- CUI+ファイル・コピーでイケる。
悪い点 †
ドライバ系が弱い †
モノリシックカーネルであり、ドライバ系が弱いらしい。
様々なデバイスを接続し得るクライアントOSとしては、この辺が問題になるのかもしれない。
参考 †