アカウント名:
パスワード:
linuxやOSを勉強しているとある段階で必ずファイルシステムが出てくる、ぼんやりとは分かっているけど分からないところがあるまずファイルを物理的に読み書きするとき最終的にストレージのコントローラーが用意してる共通APIがあってそれで制御しているのかOSのAPIでコントローラに命令してるのか良く分からない次にlinuxで扱うファイルシステムがOSのカーネルに取り込まれていなくて外部ソフトを通して読み書きする場合そのファイルシステムをlinuxがどう見てるのか分からない(ユーザーが関知するする部分ではないがOSに興味があるので調べている)この二点ヒントだけでも教えて欲しい
OS本体→デバイスドライバ→ハードディスク等という階層になるので、基本的には「OSのAPIでコントローラに命令」という形にはならないような気がする。(ただしOS側もデバイスドライバすっとばしてハードディスクにアクセスすることが無かったわけではない。Windows3.xの頃の仮想記憶とか。最近のやつはよく知らない)
まだMS-DOSの時代に、9801シリーズでフォーマットしたハードディスクをFMRシリーズで読み書きするためのデバイスドライバを書いたことがある。その時はデバイスドライバ→ハードディスクの部分はFMRのROM-BIOS(の中のDISK-BIOS)を使ったような記憶がある。ただこの部分は実はハードディスクのコントローラを直接叩いても良いはず。今ならATAPIのような共通規格もあるし。
OS本体→デバイスドライバの部分はOSごとに「取り決め」があるんじゃないかな。つまり「デバイスドライバはこういう関数をOSにたいして公開しないといけない」みたいなやつ。
家のX68000でうっかり小文字でファイル名付けてしまって、そのまま会社のPC-98に持っていって認識できず、普段使いのFILMTNではどうにもならなくて、FDでファイル名の変更(変更でそのまま確定)で大文字にして事なきを得たなんてことがありました。
FDとFILMTNで使用しているAPIのレベル(層)が違ったんでしょうね。
DOS CALLのほうが便利機能は揃ってるけど、DOSの制限にも引っかかり、ハード寄りのBIOSにはその制限はないが手間がかかるみたいな。
大文字・小文字の区別を付けたかったのでHFSXにしたら、OneDrive(旧SkyDrive)やAngryBirdsとかHFSXだと動かないソフトがあったのでHFS+に戻しました。
VFAT環境なのにFDのディスクエントリソートを実行してしまい大惨事になったことがある。仕事用PCでな!
当時、某ゲーム会社に勤めていましたがPC向けは基本機能だけを持ったDOS互換OSで動かしていたり、物理プロテクトのフロッピーディスクを読み取る専用ドライバがあったりとかそんな時代。
標準でDriveSpaceが導入されたPC-9821でFD使って大惨事ということもあったぜヒャッハー
ファイル名に使用可能な規則が違うって困るよなhttps://web-beta.archive.org/web/20110512194408/http://support.microso... [archive.org]
今でも、エクスプローラーでは普通に認識できているフォルダやファイルでも、使ってる文字によっては、圧縮フォルダにできなかったりファイル履歴が転けたりとか問題抱えてるからなぁ。いつになったら解決するんだか…
サードのユーティリティで圧縮すれば圧縮フォルダとして認識はできるけど、標準機能で出来ないんじゃなぁ…
ファイル履歴はもうそろそろ1年ぐらい転けっぱなし。犯人探しも面倒なので放置。こっちはファイル名じゃなくてパス長かもしれないけど。
エラー吐いて転けるバックアップ機能とか意味なさすぎ。せめてスキップして継続するとか、エラー箇所のログ吐くとかしろよ。なんで無言で転けるんだか。
あと、パスの長さ制限が嫌すぎる。公式は260文字らしいけど実質240文字ぐらいしか使えず、ファイルを置いている場所によってファイル名に使える長さが動的に変わる仕様とか嫌すぎ。
32000文字まで使えるAPIも用意されてるらしいけど、使われてないんじゃ意味なさすぎ。
ブロックデバイスと仮想ファイルシステム
linuxのローカルFS的にはIO要求出すだけあとはIOスケジューラなりの仕事で、最終的にはデバドラ
後半の話はfuse?あれはカーネル(fuse)からイベント飛ばしてるだけ
>まずファイルを物理的に読み書きするとき最終的にストレージのコントローラーが用意してる共通APIがあってそれで制御しているのかOSのAPIでコントローラに命令してるのか良く分からないストレージのコントローラーがATA規格のコマンドやAHCI規格のコマンドに対応していて、OSはこれらのコマンドをコントローラに送ることでストレージを制御する。Linux系のOSではこれらのストレージをブロックデバイスとして抽象化していて、ストレージのxバイト目にyというデータを書き込むというようなOSの関数を呼び出すと、上記の処理をやってくれる。ファイルシステムがOSの中にあろうと外にあろうと、ファイルシステムのプログラムがストレージのブロックデバイスに対して、ディレクトリやファイルのデータ構造を作って処理していることに変わりないと思う。
自レスです、おかげで結構理解が進みました、あとストレージドライバの内部動作イメージとなぜBIOSにIDEモードとAHCIモードがあるのかが理解出来ました今後はATAコマンドとFUSEについて調べて実際にHDDからの読み書きを実験してみたいと思います~(FPGAからストレージを読み書きするときの勉強にもなるし一石二鳥)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
ファイルシステムがいまいち分からん (スコア:0)
linuxやOSを勉強しているとある段階で必ずファイルシステムが出てくる、ぼんやりとは分かっているけど分からないところがある
まずファイルを物理的に読み書きするとき最終的にストレージのコントローラーが用意してる共通APIがあってそれで制御しているのかOSのAPIでコントローラに命令してるのか良く分からない
次にlinuxで扱うファイルシステムがOSのカーネルに取り込まれていなくて外部ソフトを通して読み書きする場合そのファイルシステムをlinuxがどう見てるのか分からない(ユーザーが関知するする部分ではないがOSに興味があるので調べている)
この二点ヒントだけでも教えて欲しい
Re:ファイルシステムがいまいち分からん (スコア:1)
OS「そのファイルはこのFile Systemに収められているから、そのFile System君に頼もう」というほぼ丸投げ状態(笑)
File System「OSさんの命令に従うなら、このデバイスのここにこんな情報を書けばいいな。Device Driverさんよろしく」
Device Driver「コントローラーは命令通りきりきり働け!File Systemさんが完了をお待ちだぞ!」
コントローラー「こっちだって頑張ってるんだから、お客さん待たせとけ!」
Linuxはそんな感じです(笑)。
Linuxソースを追いかけるなら、組み込み用jffs2非圧縮ファイルシステムを読むという状況のつもりで、fs/read_write.c、fs/jffs2/read.c、drivers/mtd/mtdblock.c、drivers/mtd/devices/m25p80.cという順序が易しいかな。m25p80互換のフラッシュメモリーはありふれているので、ネットで探せばマニュアルは入手できるでしょう。使い方もそんなに難しくありません。
この流れを正確に理解した若い人材ならLinux関連企業から引く手あまたですよ…と悪魔のささやき。実際紹介した3つのファイルを理解するために読まなきゃいけないソースファイルはもっとありますから(笑)。
vyama 「バグ取れワンワン」
Re: (スコア:0)
Re:ファイルシステムがいまいち分からん (スコア:3)
ドライバもカーネル空間の中だし。
Interactive map of Linux kernel [makelinux.net]とかLinuxカーネル解読室 [osdn.net]辺りは眺めが良いかな
# 「storage」のsys_open→vfs_readからlibata→ahci_pci_driverまで目で追ってみよう
Re: (スコア:0)
OS本体→デバイスドライバ→ハードディスク等
という階層になるので、基本的には「OSのAPIでコントローラに命令」という形にはならないような気がする。(ただしOS側もデバイスドライバすっとばしてハードディスクにアクセスすることが無かったわけではない。Windows3.xの頃の仮想記憶とか。最近のやつはよく知らない)
まだMS-DOSの時代に、9801シリーズでフォーマットしたハードディスクを
FMRシリーズで読み書きするためのデバイスドライバを書いたことがある。
その時はデバイスドライバ→ハードディスクの部分はFMRのROM-BIOS(の中のDISK-BIOS)を使ったような記憶がある。
ただこの部分は実はハードディスクのコントローラを直接叩いても良いはず。
今ならATAPIのような共通規格もあるし。
OS本体→デバイスドライバの部分はOSごとに「取り決め」があるんじゃないかな。
つまり「デバイスドライバはこういう関数をOSにたいして公開しないといけない」みたいなやつ。
Re: (スコア:0)
家のX68000でうっかり小文字でファイル名付けてしまって、そのまま会社のPC-98に持っていって認識できず、
普段使いのFILMTNではどうにもならなくて、FDでファイル名の変更(変更でそのまま確定)で大文字にして
事なきを得たなんてことがありました。
FDとFILMTNで使用しているAPIのレベル(層)が違ったんでしょうね。
DOS CALLのほうが便利機能は揃ってるけど、DOSの制限にも引っかかり、
ハード寄りのBIOSにはその制限はないが手間がかかるみたいな。
Re:ファイルシステムがいまいち分からん (スコア:2)
Re: (スコア:0)
大文字・小文字の区別を付けたかったのでHFSXにしたら、OneDrive(旧SkyDrive)やAngryBirdsとかHFSXだと動かないソフトがあったのでHFS+に戻しました。
Re:ファイルシステムがいまいち分からん (スコア:2)
Re: (スコア:0)
VFAT環境なのにFDのディスクエントリソートを実行してしまい大惨事になったことがある。仕事用PCでな!
当時、某ゲーム会社に勤めていましたがPC向けは基本機能だけを持ったDOS互換OSで動かしていたり、物理プロテクトのフロッピーディスクを読み取る専用ドライバがあったりとかそんな時代。
Re: (スコア:0)
標準でDriveSpaceが導入されたPC-9821でFD使って大惨事ということもあったぜ
ヒャッハー
Re: (スコア:0)
ファイル名に使用可能な規則が違うって困るよな
https://web-beta.archive.org/web/20110512194408/http://support.microso... [archive.org]
Re: (スコア:0)
今でも、エクスプローラーでは普通に認識できているフォルダやファイルでも、
使ってる文字によっては、圧縮フォルダにできなかったりファイル履歴が転けたりとか
問題抱えてるからなぁ。いつになったら解決するんだか…
サードのユーティリティで圧縮すれば圧縮フォルダとして認識はできるけど、
標準機能で出来ないんじゃなぁ…
ファイル履歴はもうそろそろ1年ぐらい転けっぱなし。犯人探しも面倒なので放置。
こっちはファイル名じゃなくてパス長かもしれないけど。
エラー吐いて転けるバックアップ機能とか意味なさすぎ。
せめてスキップして継続するとか、エラー箇所のログ吐くとかしろよ。なんで無言で転けるんだか。
あと、パスの長さ制限が嫌すぎる。公式は260文字らしいけど実質240文字ぐらいしか使えず、
ファイルを置いている場所によってファイル名に使える長さが動的に変わる仕様とか嫌すぎ。
32000文字まで使えるAPIも用意されてるらしいけど、使われてないんじゃ意味なさすぎ。
Re: (スコア:0)
ブロックデバイスと仮想ファイルシステム
Re: (スコア:0)
linuxのローカルFS的にはIO要求出すだけ
あとはIOスケジューラなりの仕事で、最終的にはデバドラ
後半の話はfuse?
あれはカーネル(fuse)からイベント飛ばしてるだけ
Re: (スコア:0)
>まずファイルを物理的に読み書きするとき最終的にストレージのコントローラーが用意してる共通APIがあってそれで制御しているのかOSのAPIでコントローラに命令してるのか良く分からない
ストレージのコントローラーがATA規格のコマンドやAHCI規格のコマンドに対応していて、OSはこれらのコマンドをコントローラに送ることでストレージを制御する。
Linux系のOSではこれらのストレージをブロックデバイスとして抽象化していて、ストレージのxバイト目にyというデータを書き込むというようなOSの関数を呼び出すと、上記の処理をやってくれる。
ファイルシステムがOSの中にあろうと外にあろうと、ファイルシステムのプログラムがストレージのブロックデバイスに対して、ディレクトリやファイルのデータ構造を作って処理していることに変わりないと思う。
Re: (スコア:0)
自レスです、おかげで結構理解が進みました、
あとストレージドライバの内部動作イメージとなぜBIOSにIDEモードとAHCIモードがあるのかが理解出来ました
今後はATAコマンドとFUSEについて調べて実際にHDDからの読み書きを実験してみたいと思います~
(FPGAからストレージを読み書きするときの勉強にもなるし一石二鳥)