Operating System Lecture No.2

Menu


Mind Map

freeplane 使ってみよう。


gitlab を使う

オンプレ版の github

https://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 を使う場合と使わない場合での書き出し速度の実験を行う。実験結果をレポートにまとめる。

綺麗なグラフを作成する。

問題2.2 書き出しの実験


gitlab での merge 、pullreq

複数人で作業する時に行われる merge と pull request を試してみる。

問題2.3 読み込みの実験を pull equest で作る


ファイル管理


階層型ファイルシステムの取り扱い

/ で区切られた階層にたいしてアクセスする。

ディレクトリごと複写する。

    cp -r

rsync -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::Find

zsh の **

locate database

    man locate
    locate database の作成法を調べて、
    locate database が正しく作られているか調べよう。

Spotlight

   Spotlight の仕組み
   mdimporter の役割は何か?
   mdfind の使い方


問題2.4

find の使い方


問題2.5

zsh の使い方

ファイルの見つけ方

自分のディレクトリの下のすべてのCのソースコード・ファイルを見つけ出す方法を何種類か示せ。特定のコンピュータのすべてのCのソースを見つけ出す方法を何種類か示せ。

また、実際に実行し、実行時間を比較せよ。

実行時間を調べるには time コマンドを使う。time コマンドの使い方を調べよ。


ファイルタイプ

file コマンド
    man file

Extenstion との違いは?

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 の ファイルシステムに関して調べる 以下は参考。

golang でやってみる Rust でやってみる


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 について調べてみよう。

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 を使って、自分がどこにいるかを調べよう。

学科のサーバの構成は?

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 というパスワードの管理システムが使われている。

問題2.9


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 をどう処理するかを決定するフラグがあることがある。


Shinji KONO / Fri Dec 1 14:13:22 2023