O(1)なメモリ管理

tarosじゃなくてtalos

結構間違われる



でもtalosは結構使われてるので何かいい略語やハ
ンドル名以外の名前ネタがあればtarOSもいいかも
ー。
ネタはギリシャ神話
あと小文字

TALOSっていうデータベースの商品があるので回
避
自己紹介






ハンドル名:tarosuke
本名とかは調べれば簡単にわかる
/.Jを徘徊している事が多い
tarosukeはいっぱい居る
だけどtalosとtarosukeでgoogleれば捕獲できる
自動二輪二台持ちのバイクバカ


SPADAとBandit400('95)
年に30Mmくらい走る
注意!


目標、理想、蒸気、妄想等も含まれています
それらは進捗をチェックすると見分けられます



カーネルコアがほぼ完了
UIの基礎部分をやっている
ネットワークは旧verから移植中
用語定義

タスク



実行単位(コンテキスト)
スレッドもタスク
プロセス

メモリ空間の単位



カーネル空間を除く
概念上は実行単位とは別
ユーザタスク


プロセッサの非特権モードで動いているタス
ク
特権モードの時はカーネルタスク
talosって何?

理想的環境を得るための基盤







容易に使え
容易に管理でき
安全な
マルチユーザ
マルチタスク
マルチクラスタで
GUIなOS
コンセプト




データを直接扱うかのような操作感
エージェント指向による本物のデータ共有
マルウェアプルーフ
極低TCO
コンセプト




データを直接扱うかのような操作感
エージェント指向による本物のデータ共有
マルウェアプルーフ
極低TCO
データを直接扱うかのような操作感

ナルシステムイメージ




ユーザが見るのはデータのイメージ
システムはできるだけ隠す
「アプリケーション」はそれ自体が一つのシ
ステムなので排除する
反WYSIWYG

WYSIWYGは呪縛



紙イメージや画面イメージでしか考えられない
人って、いるよね?
エクセルワープロとか、ミテクレが合えばそれ
でいいという感覚の元凶がWYSIWYG
画面は紙とは違うのだよ紙とは!
...具体的には

喩えるなら全てが編集できるwebページ




ユーザインターフェイスの実装は一つだけなの
で環境の隅々まで操作感が同じ
ほぼ何をどこにでも書き込める



ブラウザがカーネル
プラグインがプロセス
画像や文章、ガジェット類など、プラグイン
で動かしているものなら何でも置ける
デスクトップに直接メモを書いたりもできる
例えばTEXの様に自動レイアウト
コンセプト




データを直接扱うかのような操作感
エージェント指向による本物のデータ共有
マルウェアプルーフ
極低TCO
本物のデータ共有?


ファイルを共有するのではなく、ファイルを編
集するエージェントを共有する
ファイル自体は書き込み排他、読み出し共有


読み出しが共有なのは書き込み権限の関係
ファイルの場所は問わない

エージェントと通信できれば同じ
コンセプト




データを直接扱うかのような操作感
エージェント指向による本物のデータ共有
マルウェアプルーフ
極低TCO
マルウェアプルーフ?





プロセスはファイルを開けない
窓も開けない
ソケットも開けない
もちろんデバイスも開けない
なので...
プロセスに侵入されても被害はその
時使っているものだけ


「その時使っているもの」は、たいてい侵入者
のものなのでブッ壊れてもあんまり困らない
capabilityは種類だけしか制御できない

が、それでは全然不十分
コンセプト




データを直接扱うかのような操作感
エージェント指向による本物のデータ共有
マルウェアプルーフ
極低TCO
極低TCO?



そのままでマルウェアプルーフ
エージェント指向に基づくクラスタ(後述)にノ
ードをポン付け
プラグインは種類毎にインターフェイスが決ま
っているので交換可能

必要なものを投入するだけで機能するので各
モジュールの依存関係を管理する必要がない
コンセプト




データを直接扱うかのような操作感
エージェント指向による本物のデータ共有
マルウェアプルーフ
極低TCO
プロジェクトの「選択」

実装は統一しなくてもいい


フォーク上等



実装の統一は「誰かの選択」を殺す
そのためのGPL
「ほげふがtalos」と名乗ってくれると、たぶ
んtalosに携わってるみんなが幸せ
デュアルライセンス


デフォルトではGPL
プロプラライセンスは「スパイス」
プロジェクトの「選択」

実装は統一しなくてもいい


フォーク上等



実装の統一は「誰かの選択」を殺す
そのためのGPL
「ほげふがtalos」と名乗ってくれると、たぶ
んtalosに携わってるみんなが幸せ
デュアルライセンス


デフォルトではGPL
プロプラライセンスは「スパイス」
実装は統一しなくてもいい?

実装の統一は「誰かの選択」を殺す



選択の違いによる意見の対立はいつだってあ
るし、一人でやってたって迷う事はいくらで
もある
いろんな選択を試したい
ほげふがLinuxというのと同じで「一応本家は
あるけど好き勝手な改造ができるからこそ
Linux」というのと同じ
プロジェクトの「選択」

実装は統一しなくてもいい


フォーク上等



実装の統一は「誰かの選択」を殺す
そのためのGPL
「ほげふがtalos」と名乗ってくれると、たぶ
んtalosに携わってるみんなが幸せ
デュアルライセンス


デフォルトではGPL
プロプラライセンスは「スパイス」
フォーク上等?

そのためのGPL


ほげふがtalos



フォークしてもフォーク先のソースを取り込
めるのでリソースの無駄使いなんかじゃない
某みたいに名前変えろとか言うつもりはない
よ
ほげふがtalosが増えると「talos圏」みたいな
ものが広がってtalosな人はみんな幸せ
パッチを投げる必要はないよ!


コミュニティでの軋轢はパッチの採用/不採用
が多そうなので回避
それに、パッチの管理って...
マンドクセ('A`)




「リアルタイム応答」の手間暇を減らしたい
パッチの管理だと貰ったら反応しなきゃ
フォークベースならちょいとwikiにでも紹介文
とリンク載せといて、必要になったら取り込み
に行けばいいので互いに非同期
コードの骨格を変えちゃうと共有が難しい
 そうならないようにできるだけポン付け
改造できるように設計してるよ
 でもそれが必要だと思うんならそれも一
つの「選択」
プロジェクトの「選択」

実装は統一しなくてもいい


フォーク上等



実装の統一は「誰かの選択」を殺す
そのためのGPL
「ほげふがtalos」と名乗ってくれると、たぶ
んtalosに携わってるみんなが幸せ
デュアルライセンス


デフォルトではGPL
プロプライエタリライセンスは「スパイス」
デュアルライセンス?





デフォルトではGPL
プロプライエタリな契約もできる
値段が付いていれば違反を発見した場合に行動
しやすいし、違反に対する抑止力が増すかも
事後契約価格はボッタクリ価格


つまるところGPL違反はボッタクリ価格
事前契約価格もそのままでは高め


プロプラの世界ではソース付きは非常に高価
割引オプションでソースが出るよう誘導
プロジェクトの「選択」

実装は統一しなくてもいい


フォーク上等



実装の統一は「誰かの選択」を殺す
そのためのGPL
「ほげふがtalos」と名乗ってくれると、たぶ
んtalosに携わってるみんなが幸せ
デュアルライセンス


デフォルトではGPL
プロプラライセンスは「スパイス」
動機ときっかけ





Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
動機ときっかけ





Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
Macでの経験


操作感の一慣性を重視する世界を知る
後にApple自身がブチ壊した世界でもある

今ではMacに興味はない
動機ときっかけ





Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
1B/V2での経験


アプリケーションとは違うやりかたを学ぶ
実装には「アプリケーション」の影響が色濃く
残ってはいたけれど


超漢字にMozillaが載ったのには幻滅した
HTMLをTADに変換すればいいじゃん
動機ときっかけ





Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
HTMLとPDF

PDFの鬱陶しさに反WYSIWYGに目覚める


それまではWYSIWYGマンセーだった
その反対側の一例にwebを位置付ける
動機ときっかけ





Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
マルウェアの蔓延

反アプリケーションなシステムを妄想してたら
セキュアさを発見してしまった


逆に言えば「アプリケーション」があるとい
う構造は本質的に脆弱
セキュアさはただの余録

一番の売り文句なのにオマケ
動機ときっかけ





Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
Linux


開発環境が揃った
プロジェクトのヒントを得た
動機ときっかけ






Macでの経験
1B/V2での経験
HTMLとPDF
マルウェアの蔓延
Linux
これだけ揃ってやっと開発開始
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
「ちょー」モノリシック?

セキュリティ的理由だけならマイクロカーネル
のように別プロセスにしてもいいんだけど...



メモリ空間を広く使えるし
でもデータがプロセスを渡るたんびに領域確
保してマップしなきゃ
カーネルからならユーザプロセスが丸見えなの
で結局モノリシックにした


カーネルはモノリシックだけどエージェント
は分散できるのでその点ではスケーラブル
マイクロカーネルとは粒度が違うだけ
「ちょー」モノリシック?
ユーザモードでできること

普通のモノリシック
システム




ファイル、ウイ
ンドウ、ソケッ
トの生成/消滅と
オープン
描画
ファイルの編集
通信

talos



描画
ファイルの編集
通信
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
リスト管理



管理対象の中にリストのための構造を持つ
普通はコンテナとしてリストのための構造の中
に管理対象を入れるがtalosでは逆
メモリ確保/解放が一度で済むのがメリット


talosはメモリ確保/開放が高速だけどなー
同時には予め決めておいた数のリストにしか繋
げないのでちと柔軟性に欠けるのがデメリット
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
O(1)なメモリ管理(1)

サイズグループごとに片方向リストを用意


メモリが欲しくなったら必要なサイズに合うグ
ループから一つ取り出す


足りなくなったら未割り当て空間から切り出
す
返す時はサイズグループのリストに追加


talosではサイズグループは2nbytes
実ページは先頭以外は返却
O(1)で高速だが空間効率はよくない

だが、ただの空間なので気にしない事にした
O(1)なメモリ管理(2)


実ページ管理もO(1)
実ページの管理もリスト



サイズが固定なのでリストも一つ
足りなくなったら未割り当て区間から取得
連続ページは直接未割り当て区間から取得
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
ページテーブルへのアクセス



ページディレクトリの最後のエントリにページ
ディレクトリ自身を設定してみた
ただの配列扱いできてとっても便利
でもプロセッサによっては使えないかも
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
tick値が存在しない時間管理




tickの代わりに起動してからの実時間(μ秒単位
、64bits整数)で時間管理
tickハンドラはその周期分だけ現在時刻を加算
ソースにjiffiesだのHZだのを撒いたり、時間単
位をいちいち変換せずに済む
可変tickにする時もタイマ周辺以外はそのまま
実装における「選択」





「ちょー」モノリシックカーネル
リスト管理
O(1)なメモリ管理
ページテーブルへのアクセス
tick値が存在しない時間管理
実装の苦労


解決すると苦労したこと自体を忘れてしまうの
で、ほとんど覚えてない(ぉ
競合状態神経症



GUI



競合の可能性にガクガクブルブル
ロックしてるのにロックしたくなる
ユーザインターフェイスに着手した途端にす
るべき事が増えた
ちょくちょく言語の限界にブチ当たる
でも...
本当の苦労はこれからだぜ

たぶんね。
問題点やその対策

カーネルへの侵入



カーネルはなるべく通信しない
あとはプロセッサにおまかせ
talosのモデルに合わないソフト

コンパイラとかmakeとか


コンパイラが使うファイルは決まってるので
sandboxを作る事はできる
サーバ


未解決
なやましい
仕様における「選択」




モードレスIM
マルチクラスタ/薄クライアント
P2Pディレクトリサービス
6to4アドレスルーティング
仕様における「選択」




モードレスIM
マルチクラスタ/薄クライアント
P2Pディレクトリサービス
6to4アドレスルーティング
モードレスIM?



英字/漢字の区別がないのでモードレス
POBoxみたいな学習と予測のIM
でも表示しただけの文字列も学習対象
仕様における「選択」




モードレスIM
マルチクラスタ
P2Pディレクトリサービス
6to4アドレスルーティング
マルチクラスタ?

一つのノードが複数のクラスタに所属する前提




可用性の確保が主目的
データのある場所のエージェントを使うだけ


負荷が分散するようにはするけどね
ナルシステムイメージ



多対多の共有
結局クラスタはアクセス制御の単位
モノシステムイメージとの対比
システムは隠れて1(mono)が0(null)に
それで例えば...
例えば
データがクラスタに保存されているので...

パソコン買ってきた





パソコン壊れたー



LANに繋いでpxeブートしてログイン
端末管理者権限でインストール
クラスタ管理者権限でノードを登録
使う
新しいノードを買ってきて繋ぐ
あとは「パソコン買ってきた」と同じ
そのままでシンクライアント

「パソコン買ってきた」でインストールしな
い
仕様における「選択」




モードレスIM
マルチクラスタ/薄クライアント
P2Pディレクトリサービス
6to4アドレスルーティング
P2Pディレクトリサービス


マルチクラスタを支える屋台骨
条件に合致するノードを探すだけ



ノードの認証は別の話
ファイル転送も別の話
ホントに「探すだけ」
仕様における「選択」




モードレスIM
マルチクラスタ/薄クライアント
P2Pディレクトリサービス
6to4アドレスルーティング
6to4アドレスルーティング

P2Pするにはグローバルアドレスが欲しい




IPv6はトンネルでは普及しない



全ノードに欲しいけどIPv4だと難しい
IPv4でもできるけど中継しなきゃ
結局IPv6を使いたいけど...
トンネルの中の人に頼まなきゃ使えない
トンネルにトラフィックが集中
6to4アドレスを使えば


IPv4アドレス一つを/80に拡張できる
誰かに頼んだりしなくても使える
仕様における「選択」




モードレスIM
マルチクラスタ/薄クライアント
P2Pディレクトリサービス
6to4アドレスルーティング
まとめ




「データをいじる」に拘って妄想してみた
そしたらマルウェアプルーフだった
開発環境が整った
んじゃ作ってみよう
おしまい

きてくれてありがとー