ChangeLog 最新ページ / カテゴリ最新ページ / 前ページ 1 2 3 4 5 6 次ページ / page 5 (6)

NetBSD - vimrc diary

最終更新時間: 2006-07-31 09:49

2002-11-07 Thu

vim [vim][NetBSD]

NetBSDのvimは、+multibyteでコンパイルされていないので
日本語が使えない・・・(涙)
ソースをとってきて自分でコンパイルするか・・・

2002-11-07 Thu

wmfire [NetBSD]

CPUの負荷を炎で表してくれるWindowMakerのdockアプリ。
たまにはこんなのもいいかも。

2002-11-07 Thu

jlessが化ける [NetBSD]

% setenv JLESSCHARSET japanese
ここで間違ってLESSCHARSETをsetenvしてしまうと、
lessが"invalid charset"と言って動作しなくなる。

2002-11-07 Thu

フォントのインストール [NetBSD]

% bdftopcf hoge.bdf > hoge.pcf
% gzip hoge.pcf
# cp *.pcf.gz /usr/X11R6/lib/X11/fonts/misc/
# mkfontdir /usr/X11R6/lib/X11/fonts/misc/
# vi fonts.alias (fonts.aliasに、aliasを追加)
# xset fp rehash
% kterm -fn a10 -fr r10 -fk k10
ナガ10をいれてみたが、あまりにもフォントが小さすぎた・・・
ので、mplusをinstallして使うことにした。
mplusの作者に感謝!!
<http://www-3.xdsl.ne.jp/~coz/comp/mplus/j-fonts/index.html>
<http://kappa.allnet.ne.jp/kanou/fonts/x11bdfs.html>

2002-11-07 Thu

日本語環境 [NetBSD]

<http://ezine.daemonnews.org/2002/02/japanese-netbsd.html>
を参考に、日本語環境を構築することにした。
sushiは、なぜか動作しなかったので、手動でinstallする。
(ftpでIPv6を使っているため?)
# usermod -G wheel <username> (userをwheelグループに追加する)
# setenv PKG_PATH ftp://ftp.jp.netbsd.org/pub/..../All
# pkg_add bash
# pkg_add kterm
# pkg_add ja-less
# pkg_add w3m
# pkg_add Canna-server
# pkg_add kinput2

2002-11-06 Wed

cross-compile [NetBSD]

NetBSDでのクロスコンパイルの方法
<http://ezine.daemannews.org/200211/xdevnetbsd.html>

2002-10-24 Thu

NetBSD [NetBSD]

インストール失敗。
gameのインストール中にsegmentation falutで止まった X-<
gameを選択しないでインストールしたら、ちゃんとinstallできた。
install後やった事
-/etc/rc.confで、dhclient=YES
-# useradd -m hogehoge (mは、homedirを作成する。hogehogeはユーザ名)
-/etc/wscons.confに、encoding jpを追加
-dateで、時刻の修正
-xf86setupで、Xの設定
 mouseは、wsmouse
 videoは、ATI rageII 2MB
-% cp /usr/X11R6/lib/X11/xinit/xinitrc ~/.xinitrc

2002-10-24 Thu

NetBSD [NetBSD]

Aptive E4A(K6 266MHz)にNetBSD1.6インストール中 :-)
でも、メインのdebianといちいちディスプレイを切替えるのが
めんどい・・・
ノートにNetBSDを入れたほうがいいかもしれない。(入るなら)

2002-10-22 Tue

cfattach [NetBSD]

NetBSDのcfattach構造体は、Configuration Attachmentの
略らしい。(sys/device.h)

2002-10-11 Fri

sushi [NetBSD]

そういえば、NetBSD1.6ではsushiで各種設定ができるんだった。
そろそろ1.6をいれねば。

2002-10-09 Wed

puc関連の構成 [NetBSD]

-puc.cは、comとlptなど複数ポートで構成されるPCIデバイス用のドライバ
-com_puc.cは、comとpucを接続するためのもの
-com_pcmcia.cは、comとpcmciaを・・・以下略
-com_isa.cは、comとpcmciaを・・・以下略
-com.cは、com(16550etc.)のドライバ
・・・ということだと思うんだけど。

2002-10-04 Fri

NetBSDのインストール [NetBSD]

ISOイメージをCDに焼いて再起動してみたが、なぜか起動に失敗。
fd0aにnetbsdのイメージを探しにいって失敗しているようだ。なぜ?
しかたないので、rawrite32でboot1.fsとboot2.fsをfloppyに書き込んで
インストールすることにする。
1.6をまっさらの状態からインストールしようと思ったが、
インストールメニューに「Upgrade」というのを発見。
Upgradeを選択した。

2002-09-27 Fri

NetBSD1.6 [NetBSD]

ISOをダウンロード中。焼いて後でインストールしよう。
ちなみに、i386pkg*.isoは、バイナリパッケージで、
i386でだけ提供されているらしい。

2002-09-20 Fri

NetBSD [NetBSD]

やはり、一つの文やソースコードをじっくり見るよりも、
たくさんのモノをみるほうが、理解が早い気がする。

2002-09-19 Thu

paper [NetBSD]

Jason R. Thorpe氏の"A Machine-Independent DMA Framework for NetBSD"
のps版をdownloadした。
BSD Magazineの和訳をよんでみたけど、さっぱり理解できないので
原文を読む事にしたのである。
<http://www.netbsd.org/Documentation/kernel/programming.html>
<http://www.jp.netbsd.org/ja/Documentation/kernel/programming.html>

2002-09-19 Thu

買物 [NetBSD]

BSD magazineを買った。(買ったのは昨日だけど。)

2002-09-09 Mon

callwheel [NetBSD]

kern_clock.cのsoftclock()では、softclock_ticksを1進め、
その時刻に対応するcalloutがあれば、関数をcallしている。
タイムアウト時刻のhashごとにqueueを持っているが、queue内の
一番近いtimeout値をcq_hintに保持している。
・・・はずなのだが、queue内の走査時に、
if (c->c_time != softclock_ticks) {
if (c->c_time < bucket->cq_hint)
bucket->cq_hint = c->c_time;
...
}
と、cq_hintの再設定をしている。なぜ?

2002-09-06 Fri

NetBSD [NetBSD]

NetBSDのマシン、たまにnetworkがおかしくなり、pingも通らなくなる。
# ifconfig fxp0 down
# ifconfig fxp0 up
でなおるんだけど、なぜだろう?

2002-09-04 Wed

sessionとprocess groups [NetBSD]

sessionとprocess groupsとはなんだ?
process group leaderなprocessは、session leaderには
なれないらしいが・・・(man setsidより)
以下のページを発見。
<http://www.freebsd.org/doc/ja_JP.eucJP/books/design-44bsd/x257.html>
<http://homepage1.nifty.com/~tetsu/ruby/tool/daemon.html>
-プロセスグループは、シグナルの影響する範囲に関係する。
-シェルからlogoutすると、起動していたプロセスにシグナルが送られる。
-セッションは、プロセスグループの集合らしい。

2002-09-04 Wed

procのucred [NetBSD][C]

proc構造体のp_credは、real user idやreal group idが入っていて、
ucred(cred->pc_ucred)にはeffectiveなものが入っているっぽい。

2002-09-04 Wed

forの終了条件 [NetBSD][C]

kern_proc.cより
int inferior(struct proc *p, struct proc *q) {
for (; p != q; p = p->p_pptr)
if (p->p_pid == 0)
return 0;
return 1;
}
ここで、終了条件は
1. p == q
2. p->p_pid == 0
と二つあるわけだが、上記のコードでは1.をforの中に使用して、2.を
ifで使用している。
自分なら、何も考えずに以下のようにしてしまいそうだ。
for (; p->p_pid != 0; p = p->p_pptr)
if (p == q)
return 1;
return 0;
この関数の意図としては、pqが成り立つ方がおそらく多いのだろう。
その場合、p
qの条件判断がpid0よりも先に来ている前者の
コードの方がちょっとだけ高速になる。
極端な例では、引数の時点でp
qの場合、前者は条件判断1回、後者は2回である。
終了条件をどこに持って来るかというのも、良く考えねば。

2002-09-04 Wed

proclistのlock [NetBSD][C]

kern_proc.cのコメントより。
proclistのlockには、readとwriteがある。interrupt contextでもreadlockを
行うが、他にwrite lockしている人がいたら、待ちに入ってしまう。
これを防ぐため、write lock中にはsplclock()でclock interruptを
ブロックし、proclistにアクセスするようなinterruptが発生するのを
防いでいる。

2002-09-03 Tue

kthread(kern_kthread.c) [NetBSD]

kthread_createは、kthreadの作成が必ずinit(8)の作成後になるように
保証する機能がある。
kthread_createは・・・
init(8)作成前なら、コールバック関数をkthread_qに溜める。
init(8)作成後なら、コールバック関数を直接呼ぶ。
kern_mainでは、init(8)作成後にkthread_run_deferred_queue()を呼ぶ。
kthread_run_deferred_queue()は、kthread_qに溜っている全関数を呼ぶ。
実際のkthreadの作成は、コールバック関数がkthread_create1()を呼ぶ時に
行われる。
kthread_createに十分な情報を引数として渡して、kthread_run_deferred_queue()
が直接kthread_create1()をコールすれば良い気もするが、各createルーチンでは、
kthread_create1()を呼ぶだけではなく、ちょっとした条件判断等も行っている。
そのため、kthread_run_deferred_queue()での一括createは行えない。

2002-09-03 Tue

exit [NetBSD]

processがexitすると、SDEAD状態になり、zombprocリストに入る。
その後、資源をいろいろ開放しcpu_exit()をコール。
cpu_exitなんかした後(?)、exit2()をコール。
exit2()は、processをdeadprocリストに繋ぎ、reaper ktheradをwakeup。
reaperスレッド(kernel thread。kern_mainで起動されている)は
deadprocリストに入っているprocのvmspaceを開放し、SZOMBIEに移行させる。

2002-09-02 Mon

kern_sched.c [NetBSD]

SLPQUEは、SSLEEPとSSTOPなprocessが入る場所。
ltsleeo():
  timeoutが指定されていたら、callout_resetでendtsleepを指定。
  mi_switch()をコール。
endtsleep(p):
  pのstatがSSLEEPなら、setrunnable()をコール。STOPならunsleepをコール。
unsleep():
  SLQPから外す。
awaken():
  wakeup()かwakeup_one()から呼ばれる。
  statをSRUNにし
    P_INMEMなら、setrunque()をコールし、need_resched()をコール
    !P_INMENなら、swapperをsched_wakeupする。
sched_wakeup:
  SLPQでident(wchan)が一致し、かつstatがSSLEEPのprocに対して
  awaken()を呼ぶ。
  SSTOPの場合SLPQから外すだけっぽい。
  (SLPQに入っているのは、SSLEEPかSSTOPのprocのみ)
wakeup():
  ロックして、sched_wakeup()を呼ぶ。
wakeup_one():
  ロックして、SSLEEPのprocのうち、priorityの一番小さいものを起こす。
  いなかったら、SSTOPのうち、priorityの一番小さいものを起こす。
yield():
  自らcontext switchをする。余り使用されていないようだ。
preempt(newp):
  newpにpreemptする。(今はpreempt機能は未実装で、yieldと同じ動作をする)
mi_switch():
  issignal()、ltsleep()、yield()、preempt()から呼ばれる。
  経過時間などを記録し、cpu_switch()をコール。
setrunnable():
  SSTOPでもSSLEEPでもrunnableに戻す。
  unsleep()し、awaken()と同じような事(P_INMEMなら〜)をする。
  awaken()とは、need_reschedを必ず呼ぶかどうかが異なる?
setrunqueue(p):
  pをrunqueに入れる。
remrunque(p):
  pをrunqueから外す。

2002-09-02 Mon

clock [NetBSD]

-1secにhz回、kern_clock:hardclockが呼ばれる。
-hardclock()は、processのrrticksを1減らし、0以下になったら
 roundrobin()をコールする。
-roundrobin()は、rrticksをセットし直し、need_resched()をコールする。
 rrticksは、initclockでhzの1/10に初期化される。つまり、100msec毎に
 roundrobin()が呼ばれる。
-need_resched()では、ast(asynchronous system trap)フラグを1にする。
 kernelモードからuserモードに戻る際、フラグが1ならpreemptする。

2002-08-30 Fri

カーネル読み [NetBSD]

次に読むのは、kern_synch.cにしよう。

2002-08-30 Fri

BSD風インデント [vim][NetBSD]

BSDスタイルで、関数のreturn typeと関数名を別の行に書いていたら
void
func(int a, int b)
のように、return typeがインデントされてしまう。キーッ!
俺は
void
func(int a, int b)
のように書きたいんじゃー!
set cino=t0 (set cinoptions)
で解決した。

2002-08-29 Thu

pool_cache [NetBSD]

pool_cacheは、construct済みのobjectのリストと
考えればいいのか。
そう考えれば、pool_cacheからbackendのpoolに戻される時に
destructorが呼ばれるのは当り前か。

2002-08-29 Thu

NetBSD [NetBSD]

poolはだいぶ理解したつもり。次は何を読もうか。

2002-08-29 Thu

pool_cache [NetBSD]

-pool_cache_getは、cacheに何も無い時はpool_getし、constructorを
 コールする。pool_cacheにobjectがある場合は、それを返す。
-pool_cache_putは、pool_cacheにobjectを返す(その時に
 destructorは呼ばない)。一つのpool_cacheには16個のobject(の
 ポインタ)を格納できるが、足りなくなったらcacheをallocateする。
-destructorが呼ばれるのは、pool_cacheからbackendのpoolに戻される時。
-pageが残り少なくなって来たら、pagedaemon(uvm)がpool_drain()を
 コールする。すると、未使用pool_cacheが破棄される。

2002-08-28 Wed

queue.h [NetBSD]

ようやくqueue.hを理解した。
LIST : 双方向リスト
SLIST : singly-linked list。remove時に前の要素のnextポインタの
             設定のため、前の要素をlistをたどって検索する必要あり
SIMPLEQ : SLISTと基本的には同じだが、headが最後の要素の
             nextへのポインタを持っているため、INSERT_TAILが可能。
             SLISTと異なり、removeはREMOVE_HEADしか用意されていない。
TAILQ : LISTで、headが最後の要素へのポインタを持っている。
             TAILQ_FOREACH_REVERSEは、varの一つ前の要素を指すために、
             prevのprevのnextというように、逆順にたどって行く。
CIRCLEQ : headも含んだ双方向リスト。ただ、他のリストとは異なり、
             prevは、前の要素のnextへのポインタ(**)ではなく、
             要素へのポインタ(*)である。
             また、headはfirstとlastへのポインタを持っている。
subr_pool.cを読むのは、明日にしよう。

2002-08-28 Wed

queue.h [NetBSD]

NetBSDのqueueのentryは、
struct xxx {
struct yyy *next;
struct yyy **prev;
};
と、なっている。図示すると、
  elm1 elm2
+-------+ --->+-------+

+field+ | | +field+
| next----- | | |
| ↑------------prev|

+-+-----+ +-+-----+
分りにくいな・・・
nextは、次の要素(elm2)を指している。
prevは、前の要素(elm1)を指す必要は無くて、前の要素のnextポインタさえ
指していれば、リスト操作ができる。
nextも次の要素のnextポインタを指してしまうと、リスト操作はできるが
elmの他の要素を(ストレートには)見ることができなくなってしまう。
# linuxではそのようになっていて、offsetof()でnextからelmの位置を
# 無理矢理出していたような気がする

2002-08-27 Tue

OpenBSDとNetBSDの関係 [NetBSD]

OpenBSDは、Theo(セオ)氏の揉め事がきっかけで、NetBSDから分裂
したものらしい。
<http://freebsd.flathill.gr.jp/~flathill/FreeBSD/chat/log/1999/log990531-0601.html>
<http://cruel.org/openbsd/>

2002-08-22 Thu

pool allocator [NetBSD]

NetBSDのpool allocatorのcacheは、slab allocatorにそっくりだ。

2002-08-22 Thu

swapperとpagedaemon [NetBSD]

init_main()は、uvm_scheduler()をコールして、proc0(swapper)となる。
swapper(#0)は、どれか一つのプロセスのpageinを行う(uvm_swapin(proc))。
phys memが残り少なくなっていたら、pagedaemon(#1)をwakeする(uvm_wait())。

2002-08-20 Tue

locore.s [NetBSD]

startでは、ほんとに限られた事しかしていない(MIPSの場合。
他のportのソースはまだ見ていない)
-割り込み禁止
-SPのセット
-コプロのenable/disable
-CPUid、FPUidの取得
-_C_LABEL(mach_init)をコール
-SPをproc0のstackにセットし直す
-_C_LABEL(main)をコール

2002-08-20 Tue

カーネルのポーティング方法 [NetBSD]

Porting BSD UNIX to a New Platform
by Lawrence Kesteloot
<http://tofu.alt.net/~lk/291.paper/291.paper.html>

2002-08-20 Tue

カーネルの構築 [NetBSD]

新しいカーネルでbootできた。:-)
まあ、<MYCONF>をなにも変更していないので当然なんだけど。
MYCONFに記述されているoptionは、man4に説明がある。

2002-08-19 Mon

カーネルの構築 [NetBSD]

NetBSDでのカーネルの構築の方法
<http://www.jp.netbsd.org/ja/Documentation/kernel/>
Linux(debian)の構築方法は、何回見ても覚えれなかったが、
これなら覚えれそう。
15:33に、make開始。
16:04終了。30分しかかかってないけど、こんなもんなのか?
昔は、一晩とかかかっていたような気がするんだけど・・・

2002-08-19 Mon

softc [NetBSD]

softc構造体とは、Software Contextの略で、
デバイスのプライベートな情報を格納するらしい。
<http://www.ht.sfc.keio.ac.jp/move/momodoc/usbdriver>

2002-08-19 Mon

NetBSD [NetBSD]

NetBSDのtelnetdを有効にした。
# vi /etc/inetd.conf
で、telnetの項のコメントアウトを外し、
# /etc/rc.d/inetd restart
としただけ。

2002-08-19 Mon

NetBSD [NetBSD]

NetBSDのrcスクリプトは、スクリプト間の依存関係が記述されている。
そのため、rc.0, rc.1や、010inetc等のように、ファイル名や
ランレベルで依存関係を処理しなくて良い。
<http://www.jp.netbsd.org/ja/Documentation/rc/>
/etc/rcを見てみると、rcorderコマンドで、実際に
起動する順序をきめているようだ。

2002-08-19 Mon

NetBSD [NetBSD]

ドライバの勉強のため、if_ne_pci.cを見る。
NE2000とは、チップの名前だと思っていたが,
ただのカード名で、DP8390というのがチップ名だった。

2002-08-19 Mon

BSD Magazine [book][NetBSD]

次号は9/13発売。NetBSDの内部構造の解説があるらしい。
絶対に買わねば
特集1 NetBSDの設計と実装
特集2 セキュアプログラミングのすすめ
<http://www.ascii.co.jp/BSDmag/next/index.html>

2002-08-16 Fri

splxxxの名前の由来 [NetBSD]

*BSDでのsplxxxは、spin lockではなく、
Set Priority Levelの略だと知った。
追記 NetBSDのmanによると、system priority levelの略かも。

2002-08-16 Fri

UVM [NetBSD]

論文を読んでいて、気の付いた事
-COWは、map entryの属性であり、pageの属性ではない
 COW属性は変わる事はない。read-onlyなどは、pageの属性。

2002-08-09 Fri

UVM [NetBSD]

一応UVMのページを書いておこう
<http://ccrc.wustl.edu/pub/chuck/tech/uvm/>
webでUVMの資料をさがしたが、これくらいしか見付からなかった。
英語のページなら、いろいろあるのかも知れないが。

2002-08-09 Fri

UVM [NetBSD]

UVMの勉強中
<http://www.netbsd.org/Documentation/kernel/uvm.html>
にある、Charles Cranorのpaperを読んでみるが、英語なので
眠くなって来る・・・

2002-08-08 Thu

vfork [NetBSD]

vforkは、copy on writeが無かった時代のもの。
forkでメモリのコピー後にexecすると、コピーが無駄になるの。
vforkは、コピーを行わない。
現在ではcopy on writeされるので、vforkのメリットはあまりない。
(それでも、page tableのcopyは無いので、多少高速)


[PR]澱涅:芹臆f