初代UNIXをかたる
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNG0002名無しさん@お腹いっぱい。
NGNGスマソ
0003名無しさん@お腹いっぱい。
NGNG0004名無しさん@お腹いっぱい。
NGNG0005名無しさん@お腹いっぱい。
NGNG0006名無しさん@お腹いっぱい。
NGNG0007名無しさん@お腹いっぱい。
NGNG初代はソース残ってないそうな
0008名無しさん@お腹いっぱい。
NGNGhttp://kakugawa.aial.hiroshima-u.ac.jp/lecture/1999/OS/uv6.html
0009名無しさん@お腹いっぱい。
NGNG0010名無しさん@お腹いっぱい。
NGNGもっと古いのって保管されていないのかな?
Unics'69はないってきいたけれども。
0011名無しさん@お腹いっぱい。
NGNG一度は読んでみたい
0013名無しさん@お腹いっぱい。
NGNGこれわなんなのですか
0014名無しさん@お腹いっぱい。
NGNGでも歴史関係よくわからねー。オライリの本で勉強せなあかんな
0015名無しさん@お腹いっぱい。
NGNGオライリーでUNIXの歴史なんて扱ってる本あんの?
歴史ならあの本よかったよ1/4正規
0016名無しさん@お腹いっぱい。
NGNG0017名無しさん@お腹いっぱい。
NGNGもう4.3BSDまで進んじまったが。
0018名無しさん@お腹いっぱい。
NGNG単行本になるのかねあれ。なるんだったら欲しいな。
0019名無しさん@お腹いっぱい。
NGNGアンケートとかで、アレを単行本にしると積極的に書いておくとかさ。
0020名無しさん@お腹いっぱい。
05/02/12 06:53:33?闇?でくばられている、V6のコード、
を、
あやしくドブログ印刷した、
のだが、
その、行番号740ふきん
_retu:
bis $340,PS
mov (sp)+,r1
mov (sp),r0
mov $_u,r0
1:
mov (r0)+,sp
mov (r0)+,r5
bic $340,PS
jmp (r1)
わからんーわからんーー、
とずーっと悶え(AA略)ていた、
ところ、
あるひ(ほんじつ)、
ふと、
別の?闇?配布サイト
0021名無しさん@お腹いっぱい。
05/02/12 06:55:04のソース見ると
_retu:
bis $340,PS
mov (sp)+,r1
mov (sp),KISA6 /** ここだ(AA略) **/
mov $_u,r0
1:
mov (r0)+,sp
mov (r0)+,r5
bic $340,PS
jmp (r1)
只食いの食あたり、で、
おわり
0022名無しさん@お腹いっぱい。
05/02/12 11:28:24{
register *up, *rp, a;
a = u.u_procp->p_addr;
/* 前半省略 */
up = &u.uisd[16];
rp = &UISD->r[16];
if (cputype == 40) { /* pdp11/40 */
up -= 8;
rp -= 8;
}
while (rp > &UISD->r[0]) {
*--rp = *--up;
if ((*rp & WO) == 0)
rp[(UISA - UISD) / 2] =- a;
}
}
PDP11のセグメント・レジスタ群が
カーネル・モードの仮想アドレス空間の8ページ目にあって
メモリ・マップドI/Oで、
0023名無しさん@お腹いっぱい。
05/02/12 11:29:29017600 UISD0
017602 UISD1
017604 UISD2
017606 UISD3
017608 UISD4
...
017634 UISD14
017636 UISD15
UISA == UISA0 == $017640
017640 UISA0
017642 UISA1
017644 UISA2
017646 UISA3
017648 UISA4
...
017674 UISA14
017676 UISA15
のようになっていて、
rp が UISD2 == 017604 のとき
rp[(UISA - UISD) / 2] =- a;
017604[(017640 - 017600) / 2)] =- a;
017604[40 / 2] = a;
017604[20] = a;
0024名無しさん@お腹いっぱい。
05/02/12 11:30:38*(017604 + (20 * 2)) =- a;
*(017604 + 40) =- a;
*(017644) =- a;
017644 は UISA2にアドレスが一致、つまり
そのページのページ・デスクリプション・レジスタに対応する
ページ・アドレス・レジスタで
テキストセグメントのPARについて、
最初のほうで余分に足した、
データセグメント用のベースアドレス値
u.u_procp->p_addr (Per Process Data Aria の始点)
をひく、ということをやっている。
このアドレスは、
newproc()の中から呼ばれるmalloc()によって、
渡される、ようだ。
しかし、そうすると、
テキスト・セグメントのベースが0になってしまい??
カーネルモードで使用している
物理アドレスの0からproc[0]のPPDAの直前$_endまでの領域と
かぶってしまうのでは、ないか??
PARに入れる値なので、
仮想アドレスということはないだろうし、
mfpiとかmtpiとかfu(i)word/byte,copysegなどは
どういうふうになっているのであろうか??
謎は次回(未定)つづく。
■ このスレッドは過去ログ倉庫に格納されています