Mercurial > hg > Document > Growi
changeset 41:52aa51e8a039
backup 2021-02-10
author | autobackup |
---|---|
date | Wed, 10 Feb 2021 00:10:03 +0900 |
parents | cd983fd7cf07 |
children | 2f33bc3a5b9b |
files | Gears/gearstools/impl2cbc.pl.md Gears/gearstools/trans_impl.pl.md user/Okud/メモ/2021/02/03.md user/Okud/メモ/2021/02/09.md user/anatofuz/note/2021/02/09.md user/pine/note/2021/02/09.md user/tobiuo/メモ/2021/02/08.md |
diffstat | 7 files changed, 252 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Gears/gearstools/impl2cbc.pl.md Wed Feb 10 00:10:03 2021 +0900 @@ -0,0 +1,29 @@ +# trans_impl.pl + +- Interfaceの定義とInterfaceの実装の定義(ヘッダファイル)を参照して、CbCの雛形を生成するスクリプト + + +# 実行方法 +- `trans_impl.pl`に**実装側のヘッダファイル**を通すことで生成できます + - `perl trans_impl.pl SingleLinkedStack.h` +- `-w` オプションを付けることで、同名の`.cbc`ファイルが生成されます + - `perl trans_impl.pl -w SingleLinkedStack.h` +- `-o` オプションを付けることで、生成するファイル名を指定できます + - `perl trans_impl.pl -o single_linked_stack.cbc SingleLinkedStack.h` + +# 生成されたファイル +- 特にオプションを指定しないと標準出力に出力されます + - `perl trans_impl.pl SingleLinkedStack.h | pbcopy` + - こうしておくとクリップボードにコピーされて便利 + + +# 実装に関して + +- trans_impl側に直書きしている処理と, ライブラリ化した`Gears::` 名前空間のモジュールをいくつか利用している +- 引数で入力されたヘッダファイルをまずパースして、使用しているInterfaceを特定する + - Perlの中で実行しているディレクトリを再帰的にたどって、ヘッダファイルを探す + - このときに同じ名前のヘッダファイルがあると衝突する + +# TODO +- 実装側の`__code`は別ファイルに書き出すようにしたい + - 同じファイルの場合はgenerate_stubでの生成が怪しくなる \ No newline at end of file
--- a/Gears/gearstools/trans_impl.pl.md Sun Feb 07 00:10:03 2021 +0900 +++ b/Gears/gearstools/trans_impl.pl.md Wed Feb 10 00:10:03 2021 +0900 @@ -1,29 +1,1 @@ -# trans_impl.pl - -- Interfaceの定義とInterfaceの実装の定義(ヘッダファイル)を参照して、CbCの雛形を生成するスクリプト - - -# 実行方法 -- `trans_impl.pl`に**実装側のヘッダファイル**を通すことで生成できます - - `perl trans_impl.pl SingleLinkedStack.h` -- `-w` オプションを付けることで、同名の`.cbc`ファイルが生成されます - - `perl trans_impl.pl -w SingleLinkedStack.h` -- `-o` オプションを付けることで、生成するファイル名を指定できます - - `perl trans_impl.pl -o single_linked_stack.cbc SingleLinkedStack.h` - -# 生成されたファイル -- 特にオプションを指定しないと標準出力に出力されます - - `perl trans_impl.pl SingleLinkedStack.h | pbcopy` - - こうしておくとクリップボードにコピーされて便利 - - -# 実装に関して - -- trans_impl側に直書きしている処理と, ライブラリ化した`Gears::` 名前空間のモジュールをいくつか利用している -- 引数で入力されたヘッダファイルをまずパースして、使用しているInterfaceを特定する - - Perlの中で実行しているディレクトリを再帰的にたどって、ヘッダファイルを探す - - このときに同じ名前のヘッダファイルがあると衝突する - -# TODO -- 実装側の`__code`は別ファイルに書き出すようにしたい - - 同じファイルの場合はgenerate_stubでの生成が怪しくなる \ No newline at end of file +redirect /Gears/gearstools/impl2cbc.pl \ No newline at end of file
--- a/user/Okud/メモ/2021/02/03.md Sun Feb 07 00:10:03 2021 +0900 +++ b/user/Okud/メモ/2021/02/03.md Wed Feb 10 00:10:03 2021 +0900 @@ -41,6 +41,7 @@ ```https://sourceforge.net/projects/gnu-efi/files/?source=navbar``` - cd gnu-efi-3.0.12 - ```make CROSS_COMPILE=arm-linux-gnueabihf-``` + - appsをbuild - ``` make CROSS_COMPILE=arm-linux-gnueabihf- apps``` - ```cp -r arm /tmp/build```
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/Okud/メモ/2021/02/09.md Wed Feb 10 00:10:03 2021 +0900 @@ -0,0 +1,75 @@ +# Gears OS Device Driver 作成 +## 研究目的 +2017年にIntel社が2020年までにLegacy BIOSとUEFIへの互換を非推奨とし、互換モジュールのCSMを削除すると発表した。 +Legacy BIOSは長年に渡り16bitパソコンの時代からの資産を引き継いできたため、16bitモードでしか動作しない。 +そのためPCの進化に伴い、致命的な問題点が発生する。 +問題点として、拡張性がないことがあげられる。EthernetやUSBにつながるでディスクなど、新たにブートデバイスが追加されるたびに, +OSのブートローダを変更しなければならない。またマザーボードごとに、ファームウェアをアセンブラで開発する必要がある。 +また、1MBのメモリ制限により、セキュリティを含めたシステム機能の強化が困難であるためセキュリティにも問題がある。 +これらの問題を解決するためにUEFIが開発された。 +UEFIは、2TBを超える大きなディスクからブートでき、高速にブートできる。 +CPUに依存しないアーキテクチャとドライバを持ちネットワークも使用可能な柔軟なプレOS環境が利用できる。 +今後、Legacy BIOSからUEFIへの移行が急速に進むだろう。\\\ +当研究室では、信頼性と拡張性をテーマにGearsOSを開発している。 +GearsOSはContinuation based C(CbC)によってアプリケーションとOSそのものを記述している。 +現在、CbCで証明可能なOSを実装するために、xv6のCbCの書き換えを行っている。 +xv6はレガシーOSなため、UEFIから起動することができない。 +UEFIからxv6を起動させることができれば、キーボードやマウスなどのデバイスとの接続が容易になる。 +本研究では、ARMで動くシングルコンピュータであるRaspberryPi上にUEFIからGearsOSをブートさせ、GearsOSのDeviceDriverを作成することが目標である。 + + +## やったこと +### 卒論 +- 卒論の目次を作った +- 卒論を書き始めた + +### uefi +- bootloaderがコンパイルされてない + - コードのvarsionが古かった + - 修正したら通った +``` +arm-linux-gnueabihf-gcc -I/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps -I/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc -I/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/arm -I/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/protocol -Wno-error=pragmas -marm -fpic -g -O2 -Wall -Wextra -Werror -fshort-wchar -fno-strict-aliasing -ffreestanding -fno-stack-protector -fno-stack-check -fno-stack-check -fno-merge-all-constants -DCONFIG_arm -D__KERNEL__ -I/usr/src/sys/build/include -c /home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c -o bootloader.o +In file included from /home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/efi.h:41:0, + from /home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c:1: +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c: In function 'efi_main': +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c:17:88: error: passing argument 3 of 'BS->OpenProtocol' from incompatible pointer type [-Werror=incompatible-pointer-types] + Status = uefi_call_wrapper(BS->OpenProtocol, 6, ImageHandle, &LoadedImageProtocol, &LoadedImageParent, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + ^ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/arm/efibind.h:165:51: note: in definition of macro 'uefi_call_wrapper' + #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) + ^~~~~~~~~~~ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c:17:88: note: expected 'void **' but argument is of type 'EFI_LOADED_IMAGE ** {aka struct <anonymous> **}' + Status = uefi_call_wrapper(BS->OpenProtocol, 6, ImageHandle, &LoadedImageProtocol, &LoadedImageParent, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + ^ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/arm/efibind.h:165:51: note: in definition of macro 'uefi_call_wrapper' + #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) + ^~~~~~~~~~~ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c:36:82: error: passing argument 3 of 'BS->OpenProtocol' from incompatible pointer type [-Werror=incompatible-pointer-types] + Status = uefi_call_wrapper(BS->OpenProtocol, 6, Image, &LoadedImageProtocol, &LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + ^ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/arm/efibind.h:165:51: note: in definition of macro 'uefi_call_wrapper' + #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) + ^~~~~~~~~~~ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/bootloader.c:36:82: note: expected 'void **' but argument is of type 'EFI_LOADED_IMAGE ** {aka struct <anonymous> **}' + Status = uefi_call_wrapper(BS->OpenProtocol, 6, Image, &LoadedImageProtocol, &LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + ^ +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../inc/arm/efibind.h:165:51: note: in definition of macro 'uefi_call_wrapper' + #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) + ^~~~~~~~~~~ +cc1: all warnings being treated as errors +/home/student/e17/e175701/workdir/gnu-efi-3.0.12//apps/../Make.rules:52: recipe for target 'bootloader.o' failed +make[1]: *** [bootloader.o] Error 1 +rm t.o t.so +make[1]: Leaving directory '/home/student/e17/e175701/workdir/gnu-efi-3.0.12/arm/apps' +Makefile:79: recipe for target 'apps' failed +make: *** [apps] Error 2 +``` +- gnu-efiでbootloaderを書く + - edk2のapiとかは使えない + - buildは簡単 +- EDK2をARMに直す + - ARMPKGはある + - コード自体はx86に依存していない + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/anatofuz/note/2021/02/09.md Wed Feb 10 00:10:03 2021 +0900 @@ -0,0 +1,64 @@ +# 最近 +- 修論審査おわった +- 修論手直し + - 當間先生から詳細な手直しが...(ありがてぇ...) +- ポスターをつくり + - Googleスライドをポスターとして使う形式 + - ポスターにする必要ない気がするが... +- 製本の調査 +- そろそろGearsの勉強会をしないといけない気がする + - GearsOSで必要な知識 + - CbC + - Gears + - Perl + - 恐ろしいことに全部必要になる... +- 権限周りの移譲したい + - growi + - scrapbox +- 【PR】growiはgrowsync使うと便利ですよ + +# 修論の質問 + +通常のプログラミングのコンパイル時実行時よりもエラーが増える? + +ノーマルレベルに構文エラーが出たらどうする? (當間先生 + +C++と比べてどう? + +メタ計算の切り替え + +手でかけるんじゃないの? + +一般ユーザにはどうなの? + +Aspect J みたいに系統的に書き換える + +実装例? + +何が動くと嬉しい? (山田先生 + +ユーザはトランスパイラ使うの? + +動くまで遠いの? (和田先生 + +stack stack stack 問題って何? (當間先生 + + +```note ++kajika+anatofuz$ rg -F '。\cite' +chapter/01-introduction.tex +48:この為にはOSの処理を証明しやすくする表現で実装する必要がある。\cite{hyperkernel} + +chapter/04-interface.tex +81:Javaでは\texttt{implements}キーワードを用いてどのInterfaceを実装しているかを記述する。\cite{javaimpl} +332:主要なJavaのLanguage Serverの実装であるeclipse.jdt.ls\cite{eclipse.jdt.ls}では、 LanguageServerの機能として未実装の メソッドを検知する機能が実装されている。\cite{eclipse_pull322} + +chapter/02-cbc.tex +107:関数型プログラミングの見方では、 メタ計算はモナドの形で表現されていた。\cite{moggi-monad} +108:OSの研究ではメタ計算の記述に型付きアセンブラを用いることもある。\cite{Yang:2010:SLI:1806596.1806610} + +chapter/03-gears.tex +3:GearsOSとはContinuation Based Cを用いて信頼性と拡張性の両立を目指して実装しているOSプロジェクトである。\cite{gears} +487:CbC xv6はGearsOSのシステムを利用してxv6 OSの置き換えを目指しているプロジェクトである。\cite{cbcxv6repo} +489:Raspberry Pi上での動作を目指しているため、 ARMアーキテクチャ用に改良されたバージョンを利用している。\cite{xv6rpi} +```
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/pine/note/2021/02/09.md Wed Feb 10 00:10:03 2021 +0900 @@ -0,0 +1,13 @@ +# Gears OS +## 研究目的 +- なんとなくOSやりたい +- ファイルシステム +- x.v6のファイルシステムの書き換え + +## 今週やったこと +- 最終面接 +- GTEC + +## 来週やること +- 先輩たちの研究発表を見る +- テスト期間で最終レポートが何個かあるので終わらせる
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/tobiuo/メモ/2021/02/08.md Wed Feb 10 00:10:03 2021 +0900 @@ -0,0 +1,69 @@ +# 研究目的 +現在開発の進んでいる言語にスクリプト言語のRakuがある. +Rakuは起動時間がPerl5やPython, Rubyなどの主要なスクリプト言語に比べて非常に低速である. +RakuはコンパイラがRakuそのもので書かれているため, 毎回コンパイラのロードとコンパイル, JITコンパイルを繰り返すことになる. +最近のスクリプト言語では, コンパイラが自身で書かれているケースが多い. 例えば, PyPy, Go言語, Haskellなどである. +そこで, この問題を解決するために, 既にコンパイラをロードしてあるサーバーを用意し, サーバー上でスクリプト言語を実行する手法を提案している. +Rakuに対しては, 当研究室にてAbyssサーバーを開発している. + +# やったこと +- 今までhomebrewでinstallしたrakudo-starを使っていたが, githubからroastをcloneしてbuildした. + - `brew unlink rakudo-star`でrakudo-starを無効化したり, githubからzefをclone&buildしたり. +- `use v6;`がどのように実装されているのかを調べた. (後述) +- `EVALFILE`を参考に`EvalAsMod.pm6`を作成した. +```raku:EvalAsMod.pm6 +unit module EvalAsMod; +use MONKEY-SEE-NO-EVAL; + +sub EVALASMOD($filename, :$lang = 'Raku', :$check) is export { + my $code = 'my module Mod {'~"\n"~slurp($filename)~'}'; + $code = $code.lines.map({$_ unless $_ ~~ /^use\sv6.*$/}); + $code = $code.join("\n"); + EVAL $code, :$lang, :$check, :context(CALLER::), :$filename; +} +``` +- `EvalAsMod.pm`を使用して名前空間が切られているか実験した. (後述) +- 複数のスクリプトをServerに送れるよう`client.p6`に手を加えた. + +## `use v6;`がどのように実装されているのかを調べた. +- [このページ](https://github.com/rakudo/rakudo/blob/master/docs/language_versions.md)で下記の記述を発見. `use v6;`のコードはコメント行を除いた中で最初の行でなければならないっぽい. +> we'll require that a "use v6.X" is the first non-comment, non-whitespace declaration in a file. Anything later will trigger a "too late to switch Raku language version". +> +- `use v6;`を複数回宣言して出てくるerror文`Too late to switch language version.`がどこで定義されているのか調べた. +- [rakudo/src/core.c/Exception.pm6](https://github.com/rakudo/rakudo/blob/master/src/core.c/Exception.pm6)にて`X::Language::TooLate`として定義されている. +- `X::Language::TooLate`は以下で呼び出されている. + 1. [rakudo/src/perl6/Grammar.nqp](https://github.com/rakudo/rakudo/blob/master/src/Perl6/Grammar.nqp) + 2. [rakudo/src/perl6/World.nqp](https://github.com/rakudo/rakudo/blob/master/src/Perl6/World.nqp) + - `World.nqp`では`X::Language::TooLate`の部分がコメントアウトされている. + +- `Grammar.nqp`のコードを読んでみた. + - `X::Language::TooLate`は`token statement_control`の中で使われている. + - `statement_control`はmoduleのimportなどを解釈する役割? + - `typed_panic`という関数の引数にされている. + - 同じく`Grammar.nqp`内に定義されていた関数. + - 読んでもよくわからなかった… + +## `EvalAsMod.pm`を使用して名前空間が切られているか実験した. +- 実験用の2つのスクリプトを用意. +```raku:intadd.raku +use v6; + +our sub add ($a, $b) { + say $a + $b; +} + +add 7, 11; +``` +```raku:stradd.raku +use v6; + +our sub add ($a, $b) { + say $a ~ $b; +} + +add 'hello', 'world'; +``` +- `EVALFILE`でスクリプトを評価するverの`Abyss::Server.pm6`で上の2つのスクリプトを実行する. + - `Redeclaration of routine 'add' (already defined in packageAbyss::Server). Did you mean to declare a multi-sub?`というerrorがでた. +- `EVALASMOD`でスクリプトを評価するverの`Abyss::Server.pm6`で上の2つのスクリプトを実行する. + - errorが出ずに無事結果を出力. 同じスクリプトを複数回実行させても大丈夫. \ No newline at end of file