annotate TaskManager/Changelog @ 13:b658f8ca4408

*** empty log message ***
author gongo
date Fri, 08 Feb 2008 09:55:20 +0900
parents 7aa4c006e4be
children ee339757428d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
1 2008-02-07 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
2
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
3 * memo: プログラミングの姿勢
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
4 scheduler とか、task の管理をする部分は
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
5 kernel programing のつもりで、
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
6 example とか、task に割り当てる処理を決めたりする部分は
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
7 user programing のつもりで。
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
8
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
9 それぞれ違った視点で見る必要がある
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
10
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
11 * memo: OS というもの
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
12 OS 起動の流れ
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
13
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
14 - PC の電源を入れる
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
15 - BIOS が立ち上がる (OpenFirmWare, EFI, BIOS)
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
16 - 起動デバイスをチェック (優先度とか種類とか)
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
17 - 起動デバイスから Boot loader を起動
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
18 + BIOS によって、認識できるファイルシステムが違う(だっけ?)
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
19 + ファイルシステムのどこに Boot Loader があるか知っている
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
20 - Boot Loader が kernel を起動
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
21 + ネットワークブートの場合、TCP/IP や
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
22 ネットワークデバイス(イーサとか?)のドライバを持ってる必要がある
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
23 - kernel は、最初に scheduler を起動する
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
24 - scheduler の初期化 (init を呼ぶ?)
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
25 - init では、事前?に設定されているスクリプトとかを呼ぶ
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
26 + linux とかだと /etc/rc にあるやつを init が呼ぶ
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
27 - login form が起動
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
28
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
29 補足 こっからユーザ
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
30 - login する
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
31 - shell を呼ぶ
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
32 + login shell かどうか確かめる
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
33 - ユーザに設定されてる起動スクリプト?を実行
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
34 - 晴れてログイン
b658f8ca4408 *** empty log message ***
gongo
parents: 10
diff changeset
35
10
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
36 2008-02-06 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
37
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
38 * kernel/spe/*.cpp: new と placement new
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
39 現在、spe kernel のタスクは、切り替わる毎に
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
40 new/delete を繰り返しています。今はこれでいいんだけど、
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
41 速度的にも、いずれは直さないといけないと思うわけで。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
42 で、予め allocate された領域を利用した placement new を使えば
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
43 new よりもそれなりに早くなるっぽい。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
44 例題として、与えられた回数分 new/delete を繰り返すプログラムと、
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
45 同じ回数分、placement new したときの速度の比較
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
46
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
47 for (int i = 0; i < num; i++) {
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
48
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
49 < task = new Task;
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
50 < task->init(i);
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
51 < task->printID();
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
52 < delete task;
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
53 ---
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
54 > task = new(buff) Task; // buff = malloc(BUFF_SIZE);
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
55 > task->init(id);
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
56 > task->printID(id);
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
57 }
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
58
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
59 placement new では、delete の必要は無い。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
60 その中で新たに allocate してるなら必要かもしれないが。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
61 速度比較は以下。no_new が placement new で、ln_new が new/delete 。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
62
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
63 % ./a.out 10 // 10 回
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
64 no_new: time: 0.012135(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
65 ln_new: time: 0.003572(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
66
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
67 % ./a.out 100
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
68 no_new: time: 0.022453(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
69 ln_new: time: 0.018989(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
70
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
71 % ./a.out 1000
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
72 no_new: time: 0.115277(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
73 ln_new: time: 0.136335(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
74
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
75 % ./a.out 10000
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
76 no_new: time: 1.056156(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
77 ln_new: time: 1.322709(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
78
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
79 % ./a.out 100000
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
80 no_new: time: 10.622221(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
81 ln_new: time: 13.362414(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
82
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
83 % ./a.out 1000000
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
84 no_new: time: 109.436496(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
85 ln_new: time: 136.956872(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
86
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
87 10、100 回だと負けてるが、まあ無視しよう(ぇ
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
88 回数が多くなるにつれて、ほんの少しだが no_new が勝ってる。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
89 どうなんだろうね。ちなみに printID を無くすと
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
90
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
91 % ./a.out 1000000
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
92 no_new: time: 0.008512(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
93 ln_new: time: 27.100296(msec)
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
94
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
95 I/O に左右され過ぎ。まあそんなもんだろうけどさ。
7aa4c006e4be *** empty log message ***
gongo
parents:
diff changeset
96