Operating System Lecture No.2

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

Operating System Lecture No.2

Mind Map
* freeplane
gitlab を使う
* https://gitlab.ie.u-ryukyu.ac.jp
Golang に関して
VSCode の設定
InteliJ
* InteliliJ IDeA Edu
問題2.1
* 問題2.1 Golang Project
* Rust Project
* Java 17 Project
* TypeScript Project
Buffered と Unbuffered な書き出し
* 問題2.2 書き出しの実験
gitlab での merge 、pullreq
* 問題2.3 読み込みの実験を pull equest で作る
ファイル管理
階層型ファイルシステムの取り扱い
(wild card *) を使って調べる。
find tool
問題2.4
* find の使い方
問題2.5
* zsh の使い方
ファイルの見つけ方
ファイルタイプ
メタデータ
File system Interface
Unix のI/O
問題2.6
* C/C++/Rust/Go の ファイルシステムに関して調べる
* golang でやってみる
* Rust でやってみる
Disk の構造
トラック間の移動
Flash Memory
RAID
Ceph
問題2.7 MTBF
* MTBF
Unix の File system
Unix i-node
Unix でのディスク管理
問題 2.8 df command
* df command の使い方
Windows の File system
FAT (File Allocation Table )
Journaling
Link, Link count
Authentication
User
* 問題2.9
Group
file mode flag
LDAP (Light weight directory acess protocol)
認証の管理
Setuid, Setgid
Mac OS X

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