タグ

unixに関するyamanetoshiのブックマーク (142)

  • 第15回 V7から始めるUNIX講座 復習とまとめ(shellのなぞ、そしてプロセスの停止処理)

    第15回 shellのなぞ、そしてプロセスの停止処理 ●前回の補足 ・forkとexecのなぞ forkしてexecというのは知っていましたが何故というのはずっともやもやでした。 forkしてからexecしないことはないので最初から目的とするプロセスを起動すれば良いのにと。 前回でパイプをやりましたがそれでやっと分かりました。 forkして分身を作ってからexecする間に標準入出力をパイプに切り替えるために、分かれているんですね。 ・dup2について dup2(fildes, fildes2) fildesをfildes2にコピーします。 fildesは既にオープンしているファイルのFD(コピー元)です。 fildes2がfildesと等しくなく、既にオープンしているファイルのFDの場合、まずクローズされます。 なので close(fildes2) dup(fildes) と同じです。 f

    第15回 V7から始めるUNIX講座 復習とまとめ(shellのなぞ、そしてプロセスの停止処理)
  • Omicron システムコール番号の歴史

    Unix 系 OS におけるシステムコール番号を調べてみる. とりあえず,UNIX v7 を基準に 100 番まで比較してみた.空欄は UNIX v7 と同じ. UNIX v7 MINIX 1.0(?) Linux 2.4.18 FreeBSD 4.5 1 exit fork read write open close wait waitpid wait4 creat old creat(non) link 10 unlink exec (non) execve obsolete execv(non) chdir time fchdir mknod chmod chown lchown break brk break(non) stat oldstat getfsstat seek lseek old lseek(non) 20 getpid mount umount setuid get

  • 第14回 V7から始めるUNIX講座 復習とまとめ(パイプ)

    第14回 V7から始めるUNIX講座 復習とまとめ(パイプ) 前回の補足というか余談 System360ではアドレスは24bitしかなかった。データは32bit 上位の8ビットをタグに使っていたりしたが、ハードウエアが変わったらプログラムが動かなくなった。 68000でもアドレスは24bitしかなかったので、上位の8bitをタグに使ったりしていたプログラムがあったけど、それは68020になったときに動かなくなった。 →あるものは使うというのは共通のようです(^^;) シグナルを送る命令が「kill」というのは →おそらくsignalという機能はプロセスを殺すためだけにあったのだろう。その後に色々な種類が追加されたと思われます。 signalは実行中のシステムコールを中断することがある。そのときシステムコールはEINTRを返す。 →なのでシステムコールを呼ぶような処理を書くときはEINTRが

    第14回 V7から始めるUNIX講座 復習とまとめ(パイプ)
  • 10 tips on working fast in UNIX

  • 第13回 V7から始めるUNIX講座 復習とまとめ(シグナル)

    第13回 シグナル ●スタックマシン IBMのSYSTEM360はFORTRAN,COBOLの処理に向けて設計されており、Pascal, ALGOLなどが前提としたスタックの観念を持たない。 SYSTEM360については以下を参照 http://ja.wikipedia.org/wiki/System/360 スタックマシンについては以下を参照して下さい。 http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%83%9E%E3%82%B7%E3%83%B3 ●日の話題の前にマニュアルの話題 V7の良いマニュアルが見つかったので紹介します。 以下からダウンロードできます。 ht

    第13回 V7から始めるUNIX講座 復習とまとめ(シグナル)
  • 第12回 V7から始めるUNIX講座 復習とまとめ(メモリ再配置)

    第12回 メモリ再配置 放送当日のG2Mの調子が悪くて前回の復習が中心になりますがご了承下さい。 sleepについては、問題ないですがsleep(2)はないので(システムコールではない)の区別するなら「sleepk」と言ったほうが良い 疑問 メモリマップドIOで良いか? →良い。 PDP-11だと、RKADDRがメモリマップドIOの領域になり、CPUとDISK Controllerの両方から見える。 RDADDRを構造体deviceとしてアクセスすることにより、IOの指示を行う。 下図を参照して下さい。 ○参考 最近の組み込みCPUはだいたいMemory mapped I/Oが多い ARM、モトローラ、System360、PDP-11などもMemory mapped I/O また、ポートマップドI/Oという方式もあり、これは、専用の命令(例:INTELだとIN命令、OUT命令)と別のアドレ

    第12回 V7から始めるUNIX講座 復習とまとめ(メモリ再配置)
  • 第11回 V7から始めるUNIX講座 復習とまとめ(IO割り込みとDISKドライバ)

    第11回 IO割り込みとDISKドライバ ●callout 前回、何に使うのか(functionに登録するのは、何か)という話題がありました。 特定の時間が経過したら実行する処理として、何を思い浮かべるでしょうか? そう、sleep(3)です。 カーネルの内部で使う、sleep,wakeupではなくsleep(3)です。 Section3ですので、ライブラリ(システムコールではない)です。 man 3 sleepを実行します。 最後に SEE ALSO alarm(2), pause(2) と表示されます。 これは、sleep(3)がalarm(2), pause(2)の素材から出来ていることを示します。 alarm(2), pause(2)はシステムコールです。 sleep(3)とsleep(2)は全く別物なので注意が必要です。 alarm, pauseシステムコールのソースファイルは以

    第11回 V7から始めるUNIX講座 復習とまとめ(IO割り込みとDISKドライバ)
  • 第10回 V7から始めるUNIX講座 復習とまとめ(割り込みPart2)

    となっています。 どちらも割り込みも、PCはkwlpを実行します。 PSWはbr6(300)、8進数の300なので、11000000 5,6,7がプロセッサ優先度を示すので、110⇒6となります。上記のP336の割り込み優先度と一致しています。 kwlpはもう少し下に定義されています。 64 .globl _clock 65 kwlp: jsr r0,call; jmp _clock jsr r0,call; jmp _clock jsrはサブルーチンを実行する命令です。 実行すると以下のようになります。 PC=call サブルーチン:callへ分岐します。 r0=サブルーチンからの戻り先、つまりjsrの次の命令を示します。 この場合、;で命令を続けて記述しています。 よって、r0=jmp _clockとなります。 1、callの実行 callは、m40.sに定義されています。 http:

  • 第9回 V7から始めるUNIX講座 復習とまとめ(割り込みPart1)

    第9回 割り込み ●前提知識 ・メモリ上に命令がリニアに並んでいる。 ・PC(プログラムカウンタ)に次に実行する命令のアドレスが書いてある。 PCについては、以下を参照して下さい。 http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF#.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.82.AB.E3.82.A6.E3.83.B3.E3.82.BF 命令の実行は以下の3サイクルで行われる。 ①フェッチ(読み込み) ②解析(デコード) ③実行 詳細は以下の「動作」を参照して下さい。 http://ja.wikipedia.org/wiki/CPU 上記より引用 プログラムは数値列

  • 第8回 V7から始めるUNIX講座 復習とまとめ(キャッシュバッファ)

    ●第8回:キャッシュバッファ 先読み、遅延書き込みを行うための機能 「UNIXカーネルの設計」の3章 バッファキャッシュに構造やロジックが記載されています。 日の内容を理解するのに役立ちます。お持ちの方は参照ください。 http://www.amazon.co.jp/UNIX%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AE%E8%A8%AD%E8%A8%88-Maurice-J-Bach/dp/4320025512 ・遅延書き込み ディスクIOを減らすために、書き込みの命令があってもすぐには書き込まずにメモリに保持しておいてまとめて書く。 ⇒DBなどでも良くあります。 当時のUNIXのハードウエアは現在のマイコン並みの性能しかなかったので色々工夫したのだと思います。 ⇒メインフレームの世界ではありえない。書き込み命令が来たらすぐ実行して終了させな

  • 第7回 V7から始めるUNIX講座 復習とまとめ(initの起動)

    ●第7回目:initの起動 initとは http://ja.wikipedia.org/wiki/Init initは、UNIX系システムのプログラムのひとつであり、他の全てのプロセスを起動する役目を持つ。デーモンとして動作し、一般にPID 1 を付与される。 全てのプロセスはinitの子プロセスになります。 まず、「init」は誰が起動しているのか? ⇒kernelです。 例えば、BeagleBoardでAndroidを起動する場合、ブートローダからカーネルに対してカーネルパラメータとして「init=/init」を渡しています。 bootargsとしてカーネルに対して色々オプションを指定出来ます。 一般的にinitは「/sbin/init」のようです。 詳しくは、横浜PF部で発表した時の資料を参照して下さい。 https://docs.google.com/a/android-pf.o

    第7回 V7から始めるUNIX講座 復習とまとめ(initの起動)
  • 第6回 V7から始めるUNIX講座 復習とまとめ

    第6回 V7から始めるUNIX講座 復習とまとめ ●復習 前回でディレクトリファイルにファイル名とinodeが対になって管理している。 ↓ てっきり、ディレクトリのツリー構造をどこかに保持していると思ってた(DBのインデックスのように) これは間違い。 あくまでディレクトファイルで管理している。 しかし、それだと辻褄が合わなくなる場合がある(突然電源がダウンした場合など) その場合にinode(ファイル)としては存在するが、ディレクトリファイル上に管理情報がない状態になる。 そのファイルをlost+foundに置きます。 ファイル名が分からないので、inode番号のファイル名になります。 (備考) 当はLost & Found(落とし物あずかり所)の意味らしいですが、&が特別な意味があるので+にしたと聞いたことがあります。 このチェックをするのが、fsckになります。 初期のUNIXでは

  • 第5回 V7から始めるUNIX講座 復習とまとめ

    第5回 V7から始めるUNIX講座 復習とまとめ ●復習 ・2針クロックアルゴリズム VAX(DECの32ビットマシン)はリファレンスビットがなかった。 ハードウエアによっては、エラー書き込み例外からの再実行が許さないものもあったので、この実装を参考にした。 ↓ これは、Copy on Writeのことでしょうか? コピーした振りをしておいて、どちらかに書き込み(変更)があった場合にエラー書き込み例外が発生 その例外の中で当に領域を探して割り当てて、再実行することにより、上位には何事もなかったかの ように見せかける。 http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%94%E3%83%BC%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%88 ・BSD2.9のインストール 問題なし stty erase '^H'

  • 第4回 V7から始めるUNIX講座 復習とまとめ

    第4回 V7から始めるUNIX講座 復習とまとめ ●復習 ・2針クロックアルゴリズム 問題なし。 リファレンスビット(参照ビット)を2つの針でチェックして参照されてないものを ページ・アウトの対象とする。 →メモリが足らなくなってくると針が動き出す。 VAX(DECの32ビットマシン)はリファレンスビットがなかった。 知らなかった!!ということで調べてみました。 http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=%B2%BE%C1%DB%B5%AD%B2%B1 時計アルゴリズムの実装にはページテーブルエントリに参照ビットが必要であるが, BSD のターゲットマシンである VAX には存在しなかった.そこで,ダーティ(更新)ビットを利用し, ソフトウェア的に参照ビットをエミュレートする形で実装された.この方法はページフォールを利用する分,オーバヘッドに

  • 第3回 V7から始めるUNIX講座 復習とまとめ

    ●復習 以下の内容に対しての復習、補足です。 https://coriandre.seesaa.net/article/201011article_9.html ・LRUに関して 最近使われていないものは今後も使われることがないと仮定する考え方です。 →参照の局所性に基づきます。 最近使われていないPageをページ・アウトして物理メモリを空けます。 当初、2 Way Clock arugorizumuで検索てヒットしませんでしたが 2針クロックアルゴリズムで検索すると資料出てきました。 http://h50146.www5.hp.com/products/software/oe/hpux/developer/document/memmanage/mem8.html http://docs.sun.com/app/docs/doc/817-0158/6mfvqchsq?l=ja&a=view

    第3回 V7から始めるUNIX講座 復習とまとめ
  • 第2回 V7から始めるUNIX講座 まとめ

    第2回はexec()です。 前回まででfork()をざっと見ましたので、新しく作ったプロセスを別プロセスに化けさせるexec()です。 ソースコードはこちら http://www.tamacom.com/tour/kernel/unix/S/98.html#L22 Wikiによれば http://ja.wikipedia.org/wiki/Fork#Fork-Exec fork()によって子プロセスが親プロセスのコピーとして生成され、exec()システムコールを呼び出すことで(子プロセス)自身の内容を置き換える。 子プロセスがexec()を呼び出すと、そのアドレス空間の内容は全て失われ、指定されたプログラムを実行するためのアドレス空間のマッピングが設定される。これをオーバーレイと呼ぶ。 とあります。 →なのでexec()するとfork()した時にコピーした(環境変数:スタック?)が消えてし

  • 第1回 V7から始めるUNIX講座 復習

    先々週から始まった、V7から始めるUNIX講座 まだまだ知識不足ですね。 第2回目が始まる前に30分ほど復習の時間をとっていただけましたので、メモを書いておきます。 第1回のまとめは以下参照 https://coriandre.seesaa.net/article/201011article_7.html ●SWAP、Paging SWAP、Pagingについては問題なし 仮想記憶を実現するには、ハードウエアサポート(MMU)が必要になる。 (余談) SUN1は68000を使っていたが、68000はMMUを搭載していない。 どうやって仮想記憶を実現したかというと68000を2つ搭載していて 1つめのCPUがこけたら2つめのCPUで復旧するという方法で実現していた。 SUN1について http://ja.wikipedia.org/wiki/Sun-1 68000の仮想記憶については以下の「

    第1回 V7から始めるUNIX講座 復習
  • 第1回 V7から始めるUNIX講座 まとめと疑問

    先週から始まった、 V7から始めるUNIX講座、UST中継しますが保存しないので記憶および視聴者の方のつぶやきを元にまとめながら、疑問に思ったことを書いていきます。 メモ書きなので系統だった書き方になっていませんがご容赦を はじめに カーネルソースは/usr/sysの下 総ステップ数は25KSくらい 1、SWAPとPagingの違い UNIXでいうところのSWAPとPagingの違いについて ●SWAPはメモリからプログラム全体をハードディスクに追い出す。 そのため、完全にプログラムを実行できる(メモリ上)、できない(HD上)のいずれかになる。 (補足) Lionsによれば、proc構造体のp_addrにより以下のように判断できるようです。 メインメモリ内:ブロック番号 HD内:ディスクレコード番号 ●Pagingは、プログラムをPageと呼ばれる単位(4KB)に分割して、使っていない(

    第1回 V7から始めるUNIX講座 まとめと疑問
  • 禁書が届きました

    日曜日のV7から始めるUNIX講座 いや面白かった、V7の関数って一つ一つは短い、1ページに収まるくらいです。 いきなりLinuxのソースコード見るのは確かに敷居が高すぎる。 まずは、V7で勉強して基を押さえるってのは、良いなと思いました。 実は放送が始まるまでに家の中探してたのですが、ついに見つからずにポチッた Lions' Commentary on UNIX が届きました。 放送で紹介されてたUNIXカーネルの設計も一緒に Lions' Commentary on UNIX自体はV6の解説らしいですが、forkのところ読んでみたらV7と一緒でしたね。 前半がソースコード(コメント付き)、後半に解説という構成のです。 前書きを読むとは元々は2冊だったようです(ソースコードと解説) まえがきを読むと、出版までに紆余曲折があったのことが分かります。 表紙にあるようにUNIXに興味があ

    禁書が届きました
  • ウェブリブログ:サービスは終了しました。

    「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧

    ウェブリブログ:サービスは終了しました。