# HG changeset patch # User autobackup # Date 1633446604 -32400 # Node ID d55c9448d3a8f19d5419e58ce68f5d8d39998bf2 # Parent 04cff9568106a4d943fcb5887d6ae31934ad9e50 backup 2021-10-06 diff -r 04cff9568106 -r d55c9448d3a8 user/Itsuki/2021/10-5.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/Itsuki/2021/10-5.md Wed Oct 06 00:10:04 2021 +0900 @@ -0,0 +1,85 @@ +# 進捗報告 +## 研究目的 +- 当研究室ではOSの信頼性の検証に重きを置いた、GearsOSを開発している。 + - GearsOSはノーマルレベルとメタレベルを分離して記述が行えるCの拡張言語CbC(Continuation based C)で構成されている。 +- GearsOSは現在開発途上であり、OSとして実際に機能するために開発しなくてはならない機能が残っている。 +- 未実装の機能の一つとしてファイルシステムが挙げられる。 + - 当研究室では、CbCとは異なるGearという概念を用いて分散処理を記述することができる分散フレームワークChristieを開発している。 + - GearsOSのファイルシステムをChristieと同様の仕組みを用いて実装したい。 + - そのためにjavaで構成されているChristieをCbCで構成し直していく。 +- GearsOSのファイルシステムは現在使われているOSの問題点を改良した形で構成したい + - ファイルの変更をデータベース的にレコード単位で行いたい。 + + + +## 進捗内容 +- Implement間の遷移をするとセグフォを起こしてしまう解決ができずに困っています。 + - お時間いただいて解決するか、間違えている部分を見つけたいです。 + +``` +[WARN] Not found SingleLinkedStack.h at generate_stub.pl line 678. + +``` +- WordCountを新しく書き直しています。 + - ファイルのOpen&Put / ファイル内文字列を受け取って表示&Countの二つにプログラムを分割したい。 + +ファイルを開く&文字列を送信する側のコード(修正前) + - なぜかこの時点ではimpl間の遷移ができていた。 +``` +__code openFile(struct WordPutImpl* wordPut, __code next(...)) { + printf("%s\n", wordPut->filename); + WordCount* wordCount = createWordCountImpl(context); + goto wordCount->getWord(Put); +} + +__code Put(struct WordPutImpl* wordPut, int lineNum, __code next(...)) { + printf("goto WordPut & lineNum=%d\n", lineNum); + goto next(...); +} +``` + +文字列を受け取る側のコード +``` +__code getWord(struct WordCountImpl* wordCount, __code next(...)) { + printf("getWord\n"); + goto next(1); +} +``` + +- Gearsのファイルシステムの思いつき + - OS時代がバージョン管理ができるようにする + - レコード単位でファイルの変更を行うならば、流用的に構築できるのでは? + - 利点:hgやgitなどのアプリの導入が不要になる + - Gearsファイルシステムと相性が良さそう(な気がする) + - 欠点:おそらく大量にある + - ファイルのメタデータについて + - メタデータ部分は赤黒木に保持させる + - メタデータは一部分しか利用しない場合が多そう + - keyとデータをペアにして必要なデータだけ呼び出すイメージ + - ファイル内文字列はQueueに保存。(文字列が行単位でそれぞれkeyを持たせるならばダメそう) + +``` + - ファイル構造について + - 文字列の保存でなく変更履歴を蓄積する。変更履歴を遡ることでファイルを形成する + - かなり重い処理になりそう、バージョン管理はディレクトリ単位の方が楽 +``` + +Gearsファイル構造体のinterfaceの構想 +``` +typedef struct GearsFileStructure <>{ +struct Queue* inputStreamQueue; //inputのSynchronizedQueue +struct Queue* outputStreamQueue; //outputのSynchronizedQueue + +struct Tree* dataGearPool; //ファイル内文字列のkeyとデータのペアを保持する赤黒木 +or +struct Queue* dataGearPool; //ファイル内文字列を保持するキュー(Synchronizedでない) + +struct Tree*orList metaDataList; //メタデータの保管所 + +} + +``` + +- 研究題材の案 + - CbCのトランスコンパイラ自体のデバッガができると嬉しい + - トランスコンパイル部分再編成するらしい?ので不要かも \ No newline at end of file diff -r 04cff9568106 -r d55c9448d3a8 user/mizuki/メモ/2021/10-05.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/mizuki/メモ/2021/10-05.md Wed Oct 06 00:10:04 2021 +0900 @@ -0,0 +1,53 @@ +### 研究目的 +知能情報コースでは5年に一度システムの更新があり、現在のシステムは去年の夏に更新された。 + +旧システムにはサービス監視、ログ可視化が導入されていたが、現在の学科システムには導入されておらず、トラブルの早期発見や障害発生時の原因部分のログの発見が困難となっている。 + +本研究では障害発生時の対応を円滑に進める為にサービス監視、ログ可視化を実装していく。 + + +### gitlabの移行 +christinaでgitlabを立ち上げ、コンソール接続ができた。 + +vmのipv6に対しipを割り振る→NAT64化をする + policy&objects→Addresses→IPv6addressに「gitlab-christina-6」という名前で作成。 + policy&objects→Addresses→IPv4addressに「gitlab-christina-6」という名前で作成。ipは133.13.50.14を使用 + policy&objects→Addresses→NAT64に「gitlab-christina-6」という名前で作成。 + policy&objects→Addresses→virtual IPsに「christina-gitlab」という名前で作成。 + policy&objects→Addresses→NAT46に上記で作成したchristina-gitlabを反映 + 133.13.50.14にpingが通った。またブラウザにてアクセスできた。 + + ・ドメインの設定 + okiwanaサーバーでDNSが動いているのでそこのie.zoneに設定を追加した。 +``` + /var/named/chroot_sdb/var/named/masters/ie.zone + test-gitlab IN A 133.13.50.14 + IN AAAA 2001:2f8:1c:a504:5054:ff:feb4:7e3c +``` +またgitlab側のgitlab.rbを変更 +``` + /etc/gitlab/gitlab.rb + external_url 'http://gitlabchris.ie.u-ryukyu.ac.jp' + + gitlab_rails['ldap_enabled'] = true + gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # remember to close this block with 'EOS' below + main: + label: 'LDAP' + host: '2001:2f8:1c:a532::20' + port: 389 + uid: 'uid' + method: 'plain' # "tls" or "ssl" or "plain" + bind_dn: 'cn=Manager,ou=ie,o=u-ryukyu,c=jp' + password: "K9&+Gac1) { + push(@emitCbCFileArray, $_); + } + close $fh; +``` + +ダイアモンド演算子(行入力演算子)を単独で使ってるので、whileで回してるcbcの各行がデフォルト演算子$_に入るっぽい。 + +[行入力演算子「<>」 - ファイルから一行読み込む - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説](https://perlzemi.com/blog/20080722121673.html) + +## getDataGear +`my ($filename, @content) = @_;` +一行目でサブルーチンの引数を受け取っている。 + +ちなみにmainルーチンでのサブルーチンの呼び出しは、`getDataGear($fn, $cbc_content);`なので、 + +$filename = $fn, @content = $cbc_contentとなる。 + +$は変数、@は配列を表す。 + +[サブルーチンの引数 @_ - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説](https://perlzemi.com/blog/20180523152759.html) + +``` +my ($lineNumber, $codeGearName, $name, $inTypedef,$described_data_gear, $currentCodeGear, $codeGearInfo); +``` + +my()で複数の変数を同時に局所化できる。 + +↓局所化とは? +[my と local どう違う? - futomi’s CGI Cafe](https://www.futomi.com/lecture/local/index.html) + +perlでは特に変数宣言しなくても変数として使えてしまう。なので局所化によって{}で囲まれた部分のみで使える変数にする。つまりローカル変数にすることができる。 + +for文でcbcの各行が入った配列を回して、パターンマッチをして処理をしている。 + +### 正規表現について +[Perlの正規表現をマスターしよう - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説](https://perlzemi.com/blog/20100827127859.html) +[基本的な正規表現一覧 | murashun.jp](https://murashun.jp/article/programming/regular-expression.html) + +`AtomicT *createAtomicTImpl(struct Context* context, T init){` +に対する正規表現が↓ +`/^(\w+)(?:<(\w+)>)?\s*(\*)\s*create(\w+)\(/` + +/は最初と最後を表す + +()でパターンマッチした文字列から特定の部分をキャプチャすることができる。キャプチャした文字列は、特殊変数である$1や$2に格納される。 + +\wはアルファベット、アンダーバー、数字 + ++は直前の文字が1文字以上 + +なので、\w+はアルファベット、アンダーバー、数字が一文字以上という意味 + +例でいうとAtomicTの部分のキャプチャをしている。 + +`?:`を使うとキャプチャしない括弧、つまりグループ化するだけの括弧を定義できる。 + +なので、(?:<(\w+)>)でいうと、`?:`を使っているので、<や>を合わせた部分でキャプチャはされない。しかし中で(\w+)は書かれているので、その部分はキャプチャされる。 + +この正規表現は、例でいうと、<>内の文字列のキャプチャ。すなわちのTをキャプチャしている。 + +?は直前の文字が0個か1個を表す。つまり直前の文字があっても無くてもいいってこと? + +例でいうと`(?:<(\w+)>)?`となっているので、の部分があっても無くてもいいってこと? + +## searchCbCFromCodeGearNameWCurrentFrileName +``` +my $searchCbCFromCodeGearNameWCurrentFrileName = createSearchCbCFromCodeGearNameWCurrentFrileName($FindBin::Bin); +``` +となっているので、実際にはcreateSearchCbCFromCodeGearNameWCurrentFrileName関数のこと。 + +ちなみに$FindBin::Binはスクリプトが存在するディレクトリのパスが入ってる。 + +[FindBin - スクリプトが存在するディレクトリのパスを取得 - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説](https://perlzemi.com/blog/20100524127696.html) + +``` + #Find the cbc file that contains CodeGear. + #If there are more than one cbc file, the one whose namespace is the same as the filename has priority. +``` +とのことなので、CodeGearが含まれたcbcファイルを探す関数。 + +また、複数のcbcファイルがあった場合は、ファイル名と同じ名前空間を持つcbcファイルが優先されるらしい。 + +`my $search_root = shift;` +のshiftは配列の先頭を取得する。今回は単独shiftなので、mainルーチンであればARGV、サブルーチンであれば@_の先頭を取得する。 + +## やること +- generate_stub.plのコードリーディングの続き +- generate_stub.plを読んで、stubにどんな感じでdataGearの表示を組み込むか考える + +