Operating System Lecture No.2
Menu
Mind Map
freeplane 使ってみよう。
gitlab を使う
オンプレ版の githubhttps://gitlab.ie.u-ryukyu.ac.jp
Golang に関して
ソースコードは、UTF8 で書くこと。tab は(Makefileをのぞき)使用しない。
VSCode の設定
golang の plugin を入れる
InteliJ
golang だとあまりよろしくないので、使わなくても良いです。InteliJ は最新を使います。学生なので Ultimate を使える。
InteliliJ IDeA Edu Emacs Keybind を使うこと。
問題2.1
(注意: gitlab ci の失敗例は、compiler error とか file not found ではだめ。テストを実行してテストが失敗している例を示す)
Golang/Rust/Java/TypeScript のどれかで、プロジェクトを作る。
go lang は brew install go でもよいが、サーバ上で singularity で動かしてもよい
問題2.1 Golang Project
Rust は brew install rust でもよいが、サーバ上で singularity で動かしてもよい Rust Project
Java 17 Project
TypeScript Project
Buffered と Unbuffered な書き出し
Buffer を使う場合と使わない場合での書き出し速度の実験を行う。実験結果をレポートにまとめる。綺麗なグラフを作成する。
gitlab での merge 、pullreq
複数人で作業する時に行われる merge と pull request を試してみる。問題2.3 読み込みの実験を pull equest で作る
ファイル管理
階層型ファイルシステムの取り扱い
/ で区切られた階層にたいしてアクセスする。ディレクトリごと複写する。
cp -rrsync -av を使う。cp -r との違いは?
rsync はネットワーク越しのcopyも可能。ssh が使われるが、port を変更したい時には
rsync -av -e "ssh p 222" ...みたいにする。あるいは ~/.ssh/config を記述する。
ls のオプション
-R
(wild card *) を使って調べる。
ls *.c echo *.c
find tool
find の使い方を調べよう。
man find find . -exec file {} \;Perl の find module の使い方を調べよう。
perldoc -m File::Findzsh の **
locate database
man locate locate database の作成法を調べて、 locate database が正しく作られているか調べよう。Spotlight
Spotlight の仕組み mdimporter の役割は何か? mdfind の使い方
問題2.4
問題2.5
tmux も使ってみようファイルの見つけ方
自分のディレクトリの下のすべてのCのソースコード・ファイルを見つけ出す方法を何種類か示せ。特定のコンピュータのすべてのCのソースを見つけ出す方法を何種類か示せ。また、実際に実行し、実行時間を比較せよ。
実行時間を調べるには time コマンドを使う。time コマンドの使い方を調べよ。
ファイルタイプ
file コマンドman fileExtenstion との違いは?
Magic Number とは何か?
メタデータ
メタデータとはデータに関するデータメタデータの例
ls -l Mime header WWW server/CGI/Browser
File system Interface
putchar, getchar fread, fwrite read, write seek file type opendir
Unix のI/O
Unix のI/Oは、file ( /dev/rwd0a ) などにより、ファイルとしての統一されたインタフェースを持っている。このような/を使った名前がUnixのI/Oを特徴づけている。(名前空間)
問題2.6
C のAPIは、構造体を用いることが多い。構造体の扱いに気をつけながら、API の使い方を勉強しよう。C/C++/Rust/Go の ファイルシステムに関して調べる 以下は参考。
Disk の構造
Mac OS X では、diskutil というコマンドがある。Fedora Linux で、これに相当するコマンドは何か?
Cylinder は、Head * Track のまとまり。
円周を分割する形で Sector が並び、一つのSectorには512Byte が格納されている。
データを読み書きするには、track を移動して、sector が廻って来るのを待つ必要がある。
トラック間の移動
Track 間の移動速度 3 msec/track のハードディスクで、Track 5, 20, 100 のアクセスの100msec後に、Track 7, 120, 70, 2 の順でアクセスが来た。これを、もっとも効率よくアクセスするためには、どのような順番でTrackにアクセスすれば良いか? (回転の待ち時間は無視するものとする)一般的には、データの要求を前もって知らなければ最適なスケジューリングをすることはできない。公平性を考慮したもには、SCAN alogrithm というものがある。これは内向きに移動したら、内側のリクエストがなくなるまで内側のリクエストを処理し、それから外向きに順番に処理すると言うものである。
昔は、ハードディスクへのアクセスは、cylinder, track, sector でアクセスしていたが、今は、LBA と呼ばれる番号でアクセスされる。
現状ではハードディスクのデータ転送速度は回転数で決まる。市販されているハードディスクの回転数と転送速度を調べてみよう。
Flash Memory
Flash Memory は大容量の不揮発性半導体メモリである。書込回数に制限があるところに特徴がある。特定のメモリセルに書込が集中しないようにデバイス内部で、書込領域を制御している。
最近は、Flash Memory base のハードディスク SSD や、ハイブリッド型のハードディスクが出てきている。
RAID
RAID とは、 Redundant Arrays of Inexpensive Disksの略で、複数のディスクを使用して、大容量と信頼性を確保しようと言うものである。
RAID 0: 耐故障性の無いディスクアレイ (ストライピング) RAID 1: 二重化 (ミラーリング) RAID 5:ブロック単位でのパリティ分散記録などが良く使われている。
自分達の使用するPCクラスタで採用されているRAID技術は何か?
また、読み込み/書き込みの途中で電源が落ちた場合について考察せよ。
Ceph
学科で最小している erasure coding で多重にコピー持つ分散ファイルシステム。
問題2.7 MTBF
MTBF とは Mean Time Between Failures (平均故障間隔) の略で、故障発生までの時間の平均値のこと。MTBF について調べてみよう。
Unix の File system
Unix では以下のようなキーワードでファイルシステムが作られている。
raw device, block device partition fragmentation i-node
Unix i-node
Uhix では、ディレクトリはi-nodeをさし、i-node は木構造のIndexを持つ。空いている領域は、free i-node list にためられる。
Unix でのディスク管理
以下は Unix のファイルシステムに関するコマンドである。sync mount fsck tar rsync rsnapshotこれらについて調べて理解しよう。
また、以下のキーワードについても調べてみよう。
rsync journaling file system recovery tfs NFS AFS
問題 2.8 df command
df command を使って、自分がどこにいるかを調べよう。
学科のサーバの構成は?
Windows の File system
FAT32 NTFS
FAT (File Allocation Table )
MSDOSやWindows で用いれている手法。ディレクトリの中に、一連のブロックへのポインタがリストで格納されている。どのBlockが開いているかを簡単に調べるために Bit Vector を作り、これもファイルシステムの中の特別な部分に置かれる。
Flash memory のファイルシステムは、いまだにFAT32 を用いていることがあり、FAT が壊れてしまうと、ファイルシステム全体が読めなくなってしまうことがある。
Journaling
ファイルの変更を、日記のように追記する形でディスクに記録していくファイルシステム。(Linux のext3 や、Mac OS Xの HFS+)システムダウンした時の recovery の時間が早いという特徴がある。
たまに、掃除が必要になる場合もある。
Link, Link count
Unixでは複数のディレクトリが同じi-nodeを指し示すことがある。また、もしファイルがディレクトリから削除されても、そのファイルをまだopenしているプロセスがいることがある。このように複数のプロセスまたはディレクトリが一つのi-nodeをさすことをリンクという。リンクカウントは、そのi-nodeをさしているディレクトリの数とオープンしているプロセスの数の和である。これが0になって初めてファイルが削除されたことになる。また、Unixではi-nodeではなく、名前によってもリンクすることができる。この場合は、リンクカウントは関係しない。これはシンボリックリンクと呼ばれる。ディレクトリはハードリンクすることはできないが、シンボリックリンク(Symbolic link)することはできる。何故だろうか?
Symbolic link は、異なるファイルシステム間でもリンクすることができたり、NFSで接続が切れている場合でもリンクすることができる。Unix によって、環境変数によってリンク先を変えることができる条件付きSymbolic link を導入している場合がある。Symbolic link では、cd .. の結果が奇妙になることがあるので注意しよう。(実際に奇妙な結果になる例を考察してみよ)
Authentication
ファイルには、OnwerとGroupとmode が付いている。これにより、誰からアクセスできるか、誰からアクセスできないかを決定する。
Unix ではグループで管理する。これは比較的小さな一つのファイルで管理できるところに特徴がある。
しかし、個人個人を対象としたきめ細かな管理はできない。そのようなことをしたければ、Access/Capability list を使う。
ssh では、
~/.ssh/id_dsa ~/.ssh/id_dsa.pub ~/.ssh/authorized_keysで、Access/Capability list を構成している。
known_hosts に関するエラーメッセージを理解して、正しく対処しよう。
User
/etc/passwd , /etc/master.passwd で管理されている。Uid は数字で16bitのシステムが多かったが、今では32bitが普通。パスワード自体は/etc/master.passwd にあり直接検索できない。また見ることができたとしても、encode されているので解析は不可能ではないが難しい。
昔は、crypt されたパスワードが、/etc/shadow などに格納されていて、元のパスワードに復号することが出来なかった。この方法では、CHAPなどの challenge 型の認証には対応できない。現在では、パスワード自体が暗号化されて、復号化可能な状態で格納されているのが普通である。
Mac OS X には、KeyRing というパスワードの管理システムが使われている。
Group
複数のユーザをまとめて名前を付けたもの。
file mode flag
ls を調べて file mode を理解しよう。
drwxr-xr-x 5 kono staff 170 Jan 24 2012 FAT.diagram2/file mode flag 以外にあるファイルのアクセス制御
chflags ACL ls -e chmod -a
LDAP (Light weight directory acess protocol)
ldapsearch を使ってみよう
ldapsearch -x uid=kono -h xxxx.ie.u-ryukyu.ac.jp
Windows や Linux, Mac OS X の大規模なユーザ管理は、LDAP で行われるようになった。
認証の管理
Linux では、これらの認証は、PAM で制御されている。/etc/pam.d を調べてみよう。WWW server での認証も、PAM を使用するように設定することが出来る。LDAP による認証も、PAM経由で行われることになる。
Setuid, Setgid
su コマンドsudo コマンド
sendmail の setuid bit の意味は?
(ファイルそのものに、セキュリティの属性を持たせることは正しいのか考えてみよう )
Mac OS X
Mac OS X のファイルシステムは、HFS+ と呼ばれるものである。(UFSも使用可能だが普通は使わない)HFS+ には
i-node symblic linkという概念は無いが、Unix (POSIX interface) のために、それをシミュレーションしている。
また HFS+ は、
ファイル名には大文字小文字の区別がある しかし検索時には大文字小文字の区別をしないという特徴がある。
Mac OS X 上で、
echo aaa > Test cat Test echo bbb > test cat test cat Testなどとしてみて、それを確かめよう。
Mac OS X の HFS では、ファイルは、中身は一つだけではなくて、複数のデータが一つの名前に対応している。これらは、Resource Folk や、attribute (属性) などと呼ばれる。
属性には、icon の情報や、desktop 上の位置、あるいは、プログラムで使われるデータなどが格納される場合がある。
cp や、rsync で、attribute をどう処理するかを決定するフラグがあることがある。