Path: galaxy.trc.rwcp.or.jp!ntt-twins!nttlab!titcca!kogwy!wnoc-tyo-news!sragwa!sran124!srava!nisimura From: nisimura@srava.sra.co.jp (Tohru Nisimura) Newsgroups: fj.sys.news Subject: Re: conditional symbolic link Message-ID: <3906@srava.sra.co.jp> Date: 17 Feb 90 07:15:38 GMT References: Reply-To: nisimura@sra.co.JP (Tohru Nisimura) Distribution: fj Organization: Software Research Associates, Inc., Japan Lines: 90 Xref: galaxy.trc.rwcp.or.jp fj.sys.news:846 X-originally-archived-at: http://galaxy.rwcp.or.jp/text/cgi-bin/newsarticle2?ng=fj.sys.news&nb=846&hd=a X-reformat-date: Mon, 18 Oct 2004 15:18:22 +0900 X-reformat-comment: Tabs were expanded into 4 column tabstops by the Galaxy's archiver. See http://katsu.watanabe.name/ancientfj/galaxy-format.html for more info. おひさしぶりの,たいすけさん@慶応大学 > In article <1540@yufuji.yamanashi.JUNET> > nakayama@yufuji.yamanashi.JUNET (Nakayama Ryu~ji) writes: > |Article <3869@srava.sra.co.jp> で、 > | kameyama@srava.sra.co.jp (亀山豊久) さん、 > |>私はこの機能がどうも好きになれませんが... > | > |の部分にフォローしちゃいます。 > | > |この、conditional symbolic link(とでも呼ぶのだろうか?)は NEWS-OS の機能 > |だと思うのですが、なんとかならないものでしょうか。/sys/OBJ なんて訳わか > |んないですよ。私はいつもこれに泣かされてます。 > > 僕は、基本的に conditional symbolic link(この言い方でいいと思いますよ) > はいいものだと思っています。 “conditional symbolic link”の存在には条件つきで賛成. ただし NEWS-OS のやりかたには反対. 要点を先にいうと,なにをもって condition とするかという実装上の問題がある. 世に“conditional な実行環境”を持つミュータント UNIX は少なくない. たとえば universe という概念 (ほとんど様相論理やんけ) を用いて, ファイルの名前空間を切替える/限定する/構築する,あるいはもっと過激に プロセスの実行環境までスイッチするものがある. 『Dual OS なんちゃら』というやつ. condition の実装には,いろいろある.概念は直交している部分があるので, 箇条書きにするとかえって誤解をまねくが + カーネル内変数かプロセス内変数か + 変数の内容は predefined か configurable か + 変数自体が predefined か configurable か に区分できる.NEWS-OS の“conditional symbolic link”は, + プロセス内変数 (環境変数を代用) + 変数の内容は configurable + 変数自体も configurable (環境変数だもん) さて,このアプローチを採用したとき,“conditional symbolic link”は つまり,プロセスのコンテキストごとにファイル名前空間が 別個に存在することを意味する. で,このようにした場合でも,CPUTYPE の異なるマシン間では, たとえ“conditional symbolic link”を使ったところで, 実行ファイルは共有できない (どだいむちゃな話だとは思うが). これで,解決できることといえば,cputype/machinetype ごとに 別なインストールテープを用意せずに済むことくらいである. 加えて,カーネルの FS (ファイルシステム・サブシステム) が プロセスの環境変数をみて,パスをたどることになる. パスのサーチは本質的にプロセスコンテキトに依存しているが, 環境変数はちぃとひどいのではないか? サブシステムが環境変数をみてパスをたどるなんて, いったいどう実装するのか疑問に思っていたら, /usr/include/syscall.h にこんなものを見つけちゃッたよん. #ifdef sony_news #define SYS_setenvp 151 #else /* 151 is unused */ #endif たとえば,リモートマシン NEWSOS3.2 (cputype=mc68020) に $ rsh NEWSOS3.2 'cputype=mc68020 ps uxa' あるいは $ rsh NEWSOS3.2 'cputype=mc68020; export cputype; ps uxa' とした場合,どちらもうまくいかない. なぜならば cputype 設定は効いていないからである. /bin/ps@ -> $cputype==mc68020?ps.mc68020:ps.mc68030 実際に実行されるのは ps.mc68030 のほう (ログインシェルは /bin/sh). これに対し,リモートマシンが cputype=mc68030 であった場合には, 『たまたま』うまくいく,cputype に何を設定しようと. まぁ,アイデアを考えた本人も, 『環境変数にしたことによって,不必要な一般性を持たせてしまったうえに, 首尾一貫した動作ができなくなった』ともらしております. さて,この問題の直交性を指摘した藤井氏の意見がききたいところだな. にしむら