投稿

Erlang & Elixir Fest 2019 に参加してきた

Erlang & Elixir Fest 2019 に参加してきました。
来ました pic.twitter.com/dtShHONnzH — もぷり (@Mopp_jp) June 1, 2019 その感想をメモを兼ねて時系列順にざっと思うままに書いてみます。
開始前 Erlang & Elixir Festは過去に何度か開催されていたようですが、自分は今回が初参加でした。
場所は永田町で、10時開場、10:30セッション開始というスケジュールで、10:10くらいに入場しました。

会場は縦に長く、中央にプロジェクターのスクリーンが1枚という構成でした。
後ろの方に座るとスライドがよく見えないだろうと思ったので前の方の席を探すと中央の前から2番目というかなりのいい席に座ることができてセッション中に不自由しなかったのがとてもよかったです。
セッション 超並列高速実行処理系 Hastega 〜 Lonestar ElixirConf 凱旋帰国 本日の Erlang & Elixir Fest 2019 の発表資料を公開します。#elixirfesthttps://t.co/OFdnRXZlaA — Susumu Yamazaki (@zacky1972) June 1, 2019
一つ目の発表はHastegaというElixirのコードをOpenCLに変換して分散処理をするライブラリ(でいいのだろうか)についての発表でした。名前の由来はFFの仲間を強化する魔法だそうです。現状はdefhastegaというマクロで囲んだ中にあるEnum.mapなどが変換され、並列処理されるようになるそうです。また、将来はdefhastegaマクロを使わずに、できそうなところは変換するようにしたいとも話していました。
スライドに性能評価はありましたが、コード生成の仕組みに悩んでいるとのことでリリースはされていないそうです。Hastegaを使ったコード例を見た限り、使う分にはシンプルそうでよさそうでした。
Erlang/OTP 22からはHiPEが非推奨になるのでそこも悩みどころ、と話しており、それについてツイートしたところ、記事を教えていただきました。
Joseから紹介された記事です。https://t.co/BcENYgWIPG — Susumu Yamazaki …

Elixir に入門したいので雑な 分散KVS を自作した

イメージ
長い連休を利用して、Elixir入門のために分散kVSを自作しました。
前書き 動機は以下の2点です。 Elixirに入門したかった何か自分で手を動かしたかった Erlangが書けるので同じErlangVM上の言語であるElixirが前から気になっていました。 丁度いい機会だし、入門してみるかな、くらいの気持ちで始めました。
初めてだったので、株式会社gumiが連載しているElixir入門の連載を開始(Elixir入門もくじ) - DEV Community 👩‍💻👨‍💻を参考にしました。単純な日本語翻訳ではなく、適宜加筆修正をしているようです。(後半に行くに連れて雑な文が増えているのが少しだけ残念でした。)
自分は集中力が無いので通読は苦手なのですが、23個の記事に全て目を通してから次を考えることにしました。Erlangと同じErlangVMで動くので、他の全く知らない言語よりは理解がしやすいだろうと思っていましたが、軽量プロセスやメッセージのやり取りといった基礎は共通していても、かなり機能が豊富、という印象を受けました。
なんとか全てを読み終わった後に、ErlangVMなので分散システムがいいな、と思い雑な分散KVSを作って見ることにしました。適当に検索したところBuilding a Distributed Fault-Tolerant Key-Value Store - The Blog of Fourthbitという、Apache Cassandraの概要を紹介しつつ、KVSの大事な部分の実装ぽいものを説明する、という記事を今回の目的にぴったりの記事を発見しました。この記事は実装するためにかなり参考になりました。 目標休みの間にそれっぽく動くところまで持っていくCRUD (Create/Read/Update/Delete) のインターフェースを持つ1台は落ちても読み書きができる耐障害性 出来たもの リポジトリはこちら
mopp/brownie: Hobby Distributed Key-Value Store 機能の概要N台1組のElixirクラスタを構築する実行時のノード追加は不可データはオンメモリで保持しているCRUD (Create/Read/Update/Delete) のインターフェースを持つElixir上の公開関数Key/ValueはE…

技術書典6にサークル参加しました

前回の技術書典5に引き続き、今回で2回目の参加になりました。
当日の感じを忘れないうちにブログに書こうと思います。

前回はメモリアロケータについての本、今回はプロセススケジューラについての本を書きました。
サークルの公開ページはこちらです。 当日の流れ 10時10分くらいには入場して、10時30分くらいには設営を完了していました。
設営完了した!
う36です!!!#技術書典pic.twitter.com/ffMo1ogh3u — もぷり (@Mopp_jp) 2019年4月14日
旧刊のメモリアロケータ本を50部、新刊のプロセススケジューラ本を100部の合計150部を持ち込みました。
売れた…!!! — もぷり (@Mopp_jp) 2019年4月14日 11時に開場で割りとすぐに1冊目が売れました。
2回目ですが「おお、売れたぞ…!」という気持ちになります。

前回は配置場所が入り口が近かったこともあり、開場してからしばらくはバタバタとしていた記憶がありますが、今回は入場一部有料化のお陰か混み合ってはいるが、まあ、隙間は見えるな、というくらいでした。運営スタッフの経験を積み重ねた改善を感じて素晴らしいですね。
また、今回は表紙や図を担当してくれているデザイナーさんが当日のお手伝いに来てくれたのでとても助かりました。
デザイナーさん(@manam_0)の名札アイコン #技術書典pic.twitter.com/ECw0qCtvkr — もぷり (@Mopp_jp) 2019年4月14日
ゆっくりと売れ進み、14時前には旧刊と新刊の両方が無事に完売しました。
mopprisの旧刊、新刊共に完売しました
ありがとうございます!!!#技術書典pic.twitter.com/CfjAbPtaRo — もぷり (@Mopp_jp) 2019年4月14日 この辺の画像は即興でデザイナーさんが書いてくださったのでとても感謝しています。

その後は会場を一回りして、自分の買い物を済ませたあとに早めの撤収。
そして、打ち上げをしました。
今回、買ったもの #技術書典pic.twitter.com/JTaPELN7WZ — もぷり (@Mopp_jp) 2019年4月14日 所感 かんたん後払いを使う人が増えていた 前回に比べて「すみません。現金のみです。」と発言した回数が多かった…

自作OSでのプロセス実装について (2) ~初めてのユーザプロセス~

イメージ
この投稿は Aizu Advent Calendar 2014 の 7 日目の記事です。

前の人 @masaponto
次の人 @MiZuKi_Sonoko

また、自作OS Advent Calendar 2014 の 7日目の記事でもあります。


自作OSでのプロセス実装について (1) ~初めてのユーザプロセス~の続きです。

前回の内容
プロセスとは?x86リングプロテクション(ユーザモードとカーネルモード)マルチタスク割り込みコンテキストスイッチ を一気に説明しました。
正直、多少知識が無いとわからないよなあって感じになっているのでその点は反省しております。

今回は

コンテキストスイッチの実装ユーザプロセス起動
を見て行きたいと思います。

前回はタイマ割り込みによってコンテキストスイッチが起きる、というところで終わったと思います。
そこの流れが大事ですので再掲します。

タイマ割り込み発生 実行中プロセスは割り込まれる (中断される) カーネルモード突入 今のカーネルモードスタックへ 今の実行コンテキストを保存 (CPUのレジスタとか) 次のプロセスを選ぶ 次のカーネルモードスタックから 次の実行コンテキスト復元 ユーザモードに復帰 はい、こんな感じです。
(※カーネルスタックではわかりづらいのでカーネルモードスタックに変更します。)

では、早速ですがもぷりんOSのコンテキストスイッチ実装を見て行きましょう。 この部分は主にLinuxの実装を真似ています。 と言っても、x86上で同じことをやろうとしたら大体こうなると思います。。。
リポジトリはこちら mopp/Axel

上記の流れに沿ってコードを掲載していきます。
まずは、一番はじめに呼ばれる割り込みコードを見てみましょう。
以下のこれは、割り込みエントリ関数で、タイマー割り込み以外のキーボード割り込みや一般保護例外などでも呼ばれる部分です。

上記コードはsrc/interrupt_asm.asmにあります。
ただし、Gistに貼った方は見やすさのためにマクロなど全て展開済みです。

レジスタ操作があるのでC言語では書けません。ですのでアセンブラを使用しています。
asm_interrupt_timerという関数がカーネル初期化時にCPUのタイマ割り込みハンドラに登録されます。
ですので、タイマ割り込みが発生したらCPUが勝手にa…

自作OSでのプロセス実装について (1) ~初めてのユーザプロセス~

イメージ
この投稿は Aizu Advent Calendar 2014 の 5 日目の記事です。

前の人 @i__yahoo
次の人 @masaponto

また、自作OS Advent Calendar 2014 の 5日目の記事でもあります。

Aizuの方に登録してたのですが、ネタ的に自作OSだし、自作OSカレンダーの方は空きが激しいので、まとめて登録してしまいました。
今回は自作OS Advent Calendar的に先日の記事の続きみたいなものです。
また、ALTで話した内容をもっとわかりやすく書いたものです。(次回のALTもあるらしいので興味のある人はぜひに)


この記事では、もぷりんOSの現在の実装における観点から話を進めていきますので、LinuxなどのOSとは異なることもあると思いますので注意してください。
特にもぷりんOSは権限周りなどがまだまだですし、私もよくわかって無いことが多いです。それだと危なくない?みたいなことがめっちゃ有ります(つまり、吹けば飛ぶ)
それに、趣味で楽しいからやっていることです。(だからといってセキュリティを軽視しているわけではないです。安心安全もぷりんOSを目指しますよ)
なので、あんまり細かいことは言わず、こんな風に書いてれば動くんだふーん程度の気持ちでお願いしたいです。
そして、何より自作OSを作ってる人、少し興味を持ってる人が見て、こんなの俺でもできるじゃねーかと感じて、自作OS作成してくれればなあと思いつつ書いていきます。


さてさて、本題に入るその前に、通常話しているプロセスについていくつか事前知識として、さらっと話そうと思います。
詳しいことはプロセス-Wikipediaにどうぞ
大雑把に言うと、プロセスは実行されているあるプログラムのことです。
もぷりんOSは一応?UNIX系のOSなので、ここでいうプロセスはUNIX系のプロセスを指しています。UNIX系プロセスは親子関係を持ちます。この親子関係というのはデータ構造で言うところの木構造で、大体こんな感じです。
数字はプロセスID(pid)を表します。
プロセス0がルートプロセス、その子プロセスがプロセス1
この時、プロセス1から見れば親はプロセス0になります。

当たり前ですが、プロセスの生成と削除はOSでは頻繁に行われます。
例えば、目の前のターミナルでlsコマンドを実行したとしましょ…

[自作OS Advent Calendar 2014] 自作OSの紹介的なの

イメージ
この記事は「自作OS Advent Calendar 2014」3日目の記事として書かれました。


まずはじめに、上記リンクを見ていただければ直ぐにわかりますが、自分が主催にもかかわらず1,2日が空きで書いてないです。これについて申し訳ありません。(言い訳ですが多忙につき書いていられませんでした)。

さて、とりあえず、何でもいいから書かないと始まらないということで、3日目として、現在開発中の自作OSの紹介的な話をしたいと思います。

開発リポジトリはこれ
https://github.com/mopp/Axel



名前は"Axel"と書いて、"あくせる"と呼んでいます。
通称"もぷりんOS"です。(余談だけど、Mopris(もぷりす)って案もあった)
イメージカラーはメタリックレッドです。この時点で、名前の由来がわかる人にはわかるかもしれませんね。

きっかけとしては、元々Linuxとかの中身が気になっていたということと、自作OS入門を読んで作って見たいなーと思っていたからです。
あと、セキュキャンに応募して2回落とされているので、それも開発モチベーションとして一つあります。来年も応募します(来年で最後なので行きたいんですよかなり)

具体的な話に移ります。
この記事を書いている時点のOSスペックは以下です。


モノリシックカーネルソースコード長さ 8000 行ソースコード容量 250 KB実行ファイル容量 105 KB対応アーキテクチャ x86_32最低動作メモリ 12MB使用言語 C, nasm参考OS Linux, FreeBSD, Unix v6, xv6, HariboteOS
実装されている機能は以下です。


物理メモリ管理 (BuddySystem)x86ページング仮想メモリ管理 (Two Level Segregated Fit Allocator)割り込みPS/2マウス、キーボードVBEグラフィックATAデバイスアクセスFAT32/16 ファイルシステムACPI(シャットダウンのみ)システムコールELF形式ロード (静的のみ)プロセス管理 (fork, execのみ)プロセススケジューリング(ラウンドロビン)
環境にはQEMUとBochsを使ってます。
Bochsはデバッガが良い感じなのでおすすめです。
ス…

セキュリティ・ミニキャンプ in 東北 2014 に行ってきた話

タイトルの通り、9/13, 9/14に会津で行われたミニキャンプに参加しました。
その感想を書いていきたいと思います。
事前課題はオレオレSNSの脆弱性探しでした。
セキュリティ・ミニキャンプin東北は会津大学で!準備開始しています! #spcamp#seccamppic.twitter.com/jZ1yzUM8DO
— security_camp (@security_camp) September 13, 2014
まず1日目ですが、各講師の講義を受けました。
中でも園田講師の「情報セキュリティの今そこにある危機」が印象に残っています。
サービス提供者の求める情報とユーザの持つ情報のどこまでが個人情報でどこからが個人情報ではないのか、また、単体では意味をなさない(個人情報足り得ない)ものでも、データマイニング的に複合化すれば様々なことを知ることが出来る。 なので、最近のスマートフォンに始まり、ウェアラブルデバイス(なんとかウォッチですね※妖怪ではない)が持つ情報などを駆使して、抽象的な人格コピーが可能になる日も近いのでは?事前に集積したデータから、その人が何かを感じて、思考となる前に機会側で推測することが出来るのでは?といった意見が大変興味深かったです。
続いて宮本講師による「情報セキュリティ人材は本当に不足しているのか?」でした。 この講義によると、2004年に登場したウィルスが未だに大量に報告されている、というものがあり、少々意外に思いました。ウィルス意外にも古い脆弱性はまだまだ残っているそうです。ただそういったものはアップデートや最新版を使えば何も問題無いケースが多いとのこと。 そして、情報セキュリティ人材は数万人規模で足りないらしいです。 情報セキュリティに携わっている人でも力不足な人も結構いるとか。
その後、少しの休憩を挟み、西村講師(イケメンだった)による「スマートフォンのセキュリティ概論」と「HTML5のセキュリティ」でした。 前者は「マルウェア」「リスクウェア」「脆弱性のあるアプリ」の3つについて詳しくお話しいただきました。 後者はHTML5に段々と移行していく中で、脆弱性を作りこまないようにするにはどうするかなど具体例も多くあってわかりやすかったと思います。 特に動的ページ生成部分にはDOM Based XSSさせないために注意が必要のこと。