CH32V003の割込み周りについて
このリサーチにあたっては、uchanさんのCH32V003の割り込みネストを調査と、redditのWCH 高速割り込みに関するメモ : r/RISCVを参考にしました。
CH32V003のコアは、ネストした割込みをサポートしていますが、逆に、それを有効にしないと、割込みのネストは一切できない仕様になっています。
どういうことかというと、割込み処理中にmstatusレジスタの割込み許可ビットmieを1にしても、割込みはかかりません。実証コードを以下の sample1 で示します。
https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample1-c
UIAPduinoにch32funで実装したコードです。SysTickハンドラでLEDを高速明滅させつつ、ソフトウェア割込みを時々起こすようになっています。ソフトウェア割込みの実行中に、割込みを許可( https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample1-c-L52 )していますが、SysTick 割込みは掛からないままです。
これを無理やり割り込めるようにするサンプルが sample2 です。
https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample2-c
interrupt_enablerという関数がミソで、割込みの終了を偽装することで( https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample2-c-L37 )割込みを受け付けるようになります。
さて、ではきちんとコアの機能を利用して、割込みのネストを許可してみます。sample3 になります。
https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample3-c
INTSYSCRレジスタのビット1(INESTEN)をセットすることで( https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample3-c-L76 )、割込みのネストを許可し、次の行でソフトウェア割込みをネスト可に設定しています。
今度は、ソフトウェア割込み中は、明示して禁止しないと、割込みは許可の状態になっています。これは仕様で、QingKeV2 Microprocessor Manualの29頁に「in the QingKe V2 series microprocessors, MIE is not updated to 0 at this time before entering the last level of interrupt」と書かれています。
ここで一つ謎があります。生成されるコードを見るとわかりますが、GCCのinterruptアトリビュートで生成されるコードは、mepcとmstatusの保存と復帰をしていません。にもかかわらず、ネストした割込みからの多段の復帰がちゃんと行われています。これはどういうことでしょうか。
これを確認しているのが sample4 です。
https://gist.github.com/metanest/007368c511066732aeebe30f6a893735#file-sample4-c
ネストした割込みからのmretの前と後で、mepcが書き換わっていることを検出しています(検出するとLEDの明滅が遅くなる)。ネストした割込みに入る時、mepc(と、おそらくmstatus)が、ハードウェアによって保存され、mretで復原されるのでしょう。
これはドキュメント化されていませんが、以上の挙動から推察できます。
カーネルパラメータのrootのUUIDは小文字で書かないといけない、という話
Linuxのカーネルパラメータに、ルートディレクトリの指示として、root=UUID=9164c505-9ecc-11ed-97f6-6045cb9ba8a6 などといったように書きますが、このUUID中のアルファベットを大文字にすると、起動時に https://www.google.com/search?q=dracut+boot に出てくるような起動しなくなる現象にハマります
ベルの法則について
『2030年の第4次産業革命』という本の p. 107 に、「ベルの法則」とは、約10年あまりごとに、時代を代表するコンピュータープラットフォームの大きさが、数百分の一になっていくという経験的な法則、と書かれているのですが、どこかにさらなる出典があるのでしょうか。
英語版Wikipediaにある Definition: の記述が若干それっぽいですが(2021年8月上旬時点で https://en.wikipedia.org/wiki/Bell%27s_law_of_computer_classes )、
Roughly every decade a new, lower priced computer class forms based on a new programming platform, network, and interface resulting in new usage and the establishment of a new industry.
おおざっぱに10年毎により廉価で新しいスタイルのコンピュータのクラスが形成される、としか言っておらず「時代を代表する」とも「数百分の一」とも言っていません。
なお、そもそもこのWikipedia英語版が、Definition: としてその部分を抽出していることすら怪しく(一次資料のみから書かれている、というテンプレが付いていますが、それに加えて独自研究の気配があります)、主要な参考文献であるCACMの記事 Bell's law for the birth and death of computer classes から該当しそうな部分を見つけてみると(PDFリンク http://gordonbell.azurewebsites.net/cacm%20bell's%20law%20vol%2051.%202008-january.pdf PDF)、次のように、
いくつも挙げられている法則性のうちのひとつでしかなく、またその新しいコンピュータのクラスについても "minimal" とあります。これは、マイクロコンピュータが誕生したその時点では、その当時のミニコンピュータを直接に置き換えるものではなかった、というような正確な歴史とも一致しています。
(追記) 改めて探してみたところ https://community.exawizards.com/aishinbun/20180427/ に「10年でコンピューティングコストは100分の1になる」という、ムーアの法則を拡大解釈したもの、だと書かれていました。執筆順を考えるとこれが出典かもしれません。またこちらのほうの元の記述は英語でこちら https://mindmatters.ai/2019/06/george-gilder-cloud-computing-is-reaching-its-limits/ のようです。
メモ
古(いにしえ)の「ガンダムSF論争」を再構築する13のフラグメンツ:富野とかBLOGサイト2:SSブログ
おおむね私の持っている印象と同じ感じに思える。
メモ
思い出した。99年ごろだったか、NTT研の人から、クローラについて、それ自体が著作権法違反だとして「お前らぶっ潰してやるからな」と著作権法がご専門の大学教授に言われたという悩みを聞かされた記憶がある。産業を萎縮させたのは、法律でも政府でもなく、そうした自己都合で物言う専門家では?
— Hiromitsu Takagi (@HiromitsuTakagi) February 26, 2017
追記: いわゆる「昭和48年 第2小委員会報告」も関係あるかもしれない
「〈特異点〉とは何か?」に関するメモ
「〈特異点〉とは何か?」は、S‐F マガジン2005年12月号 (x巻y号、通巻z号) の記事であるが、冒頭部の著作権表示などに誤植があるので注意が必要である。誤植であることは原文 https://edoras.sdsu.edu/~vinge/misc/singularity.html と対比すれば確認できる。
- 誤: 著作権表示に (C) 1983、本文に一九八三年五月、正: 1993年3月
- 本文最後付近、誤: ダンディエゴ州立大学、正: サンディエゴ州立大学
