「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
「Linuxってドライブレター無いの?」的な質問をしたら、
「重症」と言われてしまったので、本ページを作成するに至りました。
設計思想の違い。 †
Windows †
こちら(Windows OSの設計思想)が参考になる。
Linux †
こちら(Linux OSの設計思想)が参考になる。
詳細 †
ファイル・システム †
種類 †
ディレクトリ構造 †
- Windows
- Cドラ、Dドラ、...といったドライブ・レターを頂点にしたツリー構造
- 階層化には、バックスラッシュ(\)、又は円記号(¥)を使う。
- ドライブレターは無く、ルートディレクトリ(/)を頂点にしたツリー構造
先ずディスクをパーティションに区切り、それぞれの上にファイルシステムを用意し、
それをマウントすることで、一本の巨大なディレクトリツリーができあがる。
- 各種ディレクトリ
- /
Windowsの「SystemDrive?」に近いルートディレクトリ
- /var、/tmp
Windowsの「SystemRoot?」に近いLinuxの動作に必要なディレクトリ
- /usr、/bin、/lib
Windowsの「ProgramFiles?」に近いソフトウェアを格納するディレクトリ
- /media
USBやSDカードなどの記憶媒体がマウントされるディレクトリ
- /home/userXXX
Windowsの「USERPROFILE」に相当
断片化 †
- Windows:起きる。
- Linux:断片化が起こりづらい。
フォルダ移動、ファイル操作コマンド †
パス区切りは、「\」(逆スラッシュ)ではなく「/」(スラッシュ)
lsコマンド †
Windowsの「dir」は、Linuxで「ls」コマンド
cdコマンド †
作業ディレクトリを移動(Windowsと同じ)
mkdir関連コマンド †
- mkdirコマンド
ディレクトリを作成するコマンド(Windowsと同じ)
- rmdirコマンド
ディレクトリを削除するコマンド(Windowsと同じ)
※ Linuxにはrdと言うエイリアスがある。
- cpコマンド
Windowsの「copy」は、Linuxで「cp」コマンド
- rmコマンド
Windowsの「del」は、Linuxで「rm」コマンド
- mvコマンド
Windowsの「move」は、Linuxで「mv」コマンド
シェル、シェルスクリプト †
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