Mercurial > hg > Document > Growi
changeset 77:e7fad9d0486e
backup 2021-07-14
author | autobackup |
---|---|
date | Wed, 14 Jul 2021 00:10:04 +0900 |
parents | f20d2e9092de |
children | 171f61c00aa9 |
files | user/Itsuki/2021/7-13.md user/matac42/note/2021/07/13.md |
diffstat | 2 files changed, 189 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/Itsuki/2021/7-13.md Wed Jul 14 00:10:04 2021 +0900 @@ -0,0 +1,37 @@ +# 進捗報告 +## 研究目的 +- 当研究室ではOSの信頼性の検証に重きを置いた、GearsOSを開発している。 + - GearsOSはノーマルレベルとメタレベルを分離して記述が行えるCの拡張言語CbC(Continuation based C)で構成されている。 +- GearsOSは現在開発途上であり、OSとして実際に機能するために開発しなくてはならない機能が残っている。 +- 未実装の機能の一つとしてファイルシステムが挙げられる。 + - 当研究室では、CbCとは異なるGearという概念を用いて分散処理を記述することができる分散フレームワークChristieを開発している。 + - GearsOSのファイルシステムをChristieと同様の仕組みを用いて実装したい。 + - そのためにjavaで構成されているChristieをCbCで構成し直していく。 +- GearsOSのファイルシステムは現在使われているOSの問題点を改良した形で構成したい + - 書き足していく + + + +## 進捗内容 +- Christieをまたゆーくんと安田と読み直していました。 + - waitListがどんな役目をしているのか分かった + - intelliJのデバッガでも分散じゃなければ流れがある程度わかる + +- GearsOSの方を本腰入れたい + - wc例題を完成させるべき? + - GearsChristieを本格的に書き出す? + - Parallel直下に書いていく感じになるのだろうか + - 書くとしたらどこからか + - keyの仕組み + +- 久々にwcをいじっていた + - FileOpen時点でbufferをつけるようにしたい + - とりあえず動いたがgoto後も機能してるかは不明。 + + +- 就活 + - 1次面接結果待ち、1次面接これから、筆記試験これからとまばら + - アウトソーシング企業のやばそうなところから逃走 + - 説明会参加人数が3人、終了直後に面接の日程を組まれそうになった。 + - 話聞く分では同業社の中ではまともな方かも + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/matac42/note/2021/07/13.md Wed Jul 14 00:10:04 2021 +0900 @@ -0,0 +1,152 @@ +# 研究目的 + +アプリケーションの信頼性を保証するために、アプリケーションが動作するOSの信頼性を高める必要がある。 + +本研究室では、信頼性に重きを置いたGearsOSを開発している。 + +GearsOSはノーマルレベル、メタレベルの処理を切り分けることができるCbC(Continuation Based C)で記述されている。 + +信頼性とは + +- どのユーザーがどのようなファイル操作をしたかわかること +- logが残ること +- item 操作の辻褄があっていること + +を指す。 + +また、GearsOSには現在未実装の機能があり、その一つにファイルシステムが挙げられる。信頼性を確保するため、ファイルシステムは + +- ファイルシステム全体のトランザクション化 +- ファイルシステム全体のバックアップ\&ロギング + +を取り入れたDataGearManagerとして実装したい。 + +本卒業研究では、GearsOSへファイルシステムの実装を目指す。 + + +# waitlist + +![waitlist.svg](/attachment/60ebcd5e0a7b37004aefec1d) + +- waitlistはDGMが所持している +- waitlistはDGMの数だけ存在する + +### setup + +- どのような変数を持ったDGがあるかを読み取りwaitlistのqueueに入れる +- Take or Peekが読み取られる +- 「CGはDGの変数すべて揃わないと実行されない」という特性を実現するためにあらかじめ変数を読み取っておく +- どういったCGがあるかはこの時点ではまだわからない +- Commandとしてwaitlistにaddしていく感じ + +WaitList.java +```java +public synchronized void add(Command cm) { + if(waitList.containsKey(cm.key)){ + waitList.get(cm.key).add(cm); + } else { + LinkedBlockingQueue<Command> queue = new LinkedBlockingQueue<>(); + queue.add(cm); + waitList.put(cm.key, queue); + } + } +``` +- waitListに"hello"と"world"がaddされている + +![スクリーンショット 2021-07-12 14.57.57.jpg](/attachment/60ebd9ee0a7b37004aefec29) + +(src/test/java/christie/example/HelloWorld) + +### put + +- DGを入れる + - 変数の値をセットする +- putして変数の値が揃ったCGはrunCommand()でTake or Peekが実行される + +# Thread + +Java Thread +- Threadとは並列実行を行うための処理の塊 +- Threadは並列で動く +- Runnableインターフェース +- RunnableをThreadクラスのインスタンスに動かしてもらう + - 実行部とThreadそのものを明確に分けることが目的 + - プログラムの見通しの良さに繋がる + +ネットに落ちてた例(https://java-code.jp/297) + +- そのままThreadを使う場合 + +```java +public class ThreadSample { + private static class MyThread extends Thread { + @Override + public void run() { + for (int i = 0; i < 20; i++) { + System.out.println(i + ":" + this.hashCode()); + } + } + } + + public static void main(String[] args) { + Thread t1 = new MyThread(); + Thread t2 = new MyThread(); + t1.start(); + t2.start(); + } +} +``` + +- Runnableインターフェースを利用する場合 +```java +public class ThreadRunnableSample { + private static class MyThread implements Runnable { + @Override + public void run() { + for (int i = 0; i < 20; i++) { + System.out.println(i + ":" + this.hashCode()); + } + } + } + + public static void main(String[] args) { + Thread t1 = new Thread(new MyThread()); + Thread t2 = new Thread(new MyThread()); + t1.start(); + t2.start(); + } +} +``` + +- ChristieではThreadクラスを継承したAcceptThreadクラスがある +- AcceptThreadクラスのrun()がThread実行される +- node間通信をここで作ってるはず + +```java +@Override + public void run() { + while (true) { + try { + Socket socket = null; + socket = ss.accept(); + socket.setTcpNoDelay(true); + System.out.println("Accept " + socket.getInetAddress().getHostName() + ":" + socket.getPort()); + Connection connection = new Connection(socket, cgm); + String key = "accept" + counter; + IncomingTcpConnection in = + new IncomingTcpConnection(connection); + in.setName(connection.getInfoString()+"-IncomingTcp"); + in.start(); + cgm.setAccept(key, in); + OutboundTcpConnection out = new OutboundTcpConnection(connection); + out.setName(connection.getInfoString()+"-OutboundTcp"); + out.start(); + counter++; + } catch (IOException e) { + e.printStackTrace(); + } + } + } +``` + +