USP MAGAZINE

急 が ば 回 れ、 一 歩 ず つ。

IT美女特集ǋ¯ǴǚÁǡǑȜǡǴ
ƉǂƝŸƠƕƸȏ

ユニケージ開発手法教育講座「ユニケージ開発手法教育講座」は、ユニケージ開発手法におけるデータ管理の方法や、オリジナルコマンドの開発プロジェクトの進め方まで、ユニケージエンジニアとしてのトータルスキルを習得できます。

http://www.usp-lab.com/LECTURE/CGI/LECTURE.CGI
ǡ
ȏǴǚÁ
ࢬܹ‫ރ‬
սਖ֦

も充実中！
続々と新講座K1

コマンド学習編

K2

シェルスクリプト学習編（帳票・バッチ処理）

K3

シェルスクリプト学習編（ウェブアプリケーション処理）

K4

ユニケージアーキテクチャ編

K5

ユニケージ開発環境セットアップ編

K6

システム運用・管理編

K7

プロジェクトマネジメント・人材育成編

KSQL

SQL エンジニアのためのユニケージ活用編

KSTAT

ユニケージにおける統計コマンド編

2014 August vol.16

使用方法などをハンズオン形式で具体的に学べる講座です。UNIX の基礎からユニケージ開発手法によるUNIX 初心者のための講座などもご用意しています。
技術の草原で百獣の王を目指す
エンジニアたちの新感覚トークライブ！

http://techlion.jp/

上記のサービス内容は 2014 年 7 月現在のものです。
最新の情報は弊社ホームページにてご確認ください。

ISBN 978-4-9048-0710-1
C3455 ￥500

USP 研究所
定価（本体 500 円＋税）

Artwork created by Koji Ishizuka. © 2012 Zie's Bank .Co,. LTD All rights reserved.

2014Vol.
16
8
t
s
Augu
¥500

2014 August vol.16

C o n t e n t s
特集

04

IT美女特集女の生き方とこれから

14

漢のUNIX 第13 回

19

後藤大地

サーバー運用お助けTips

未来に活きる！ 現場で使える！

濱田康貴

データモデリング 第 6 回
熊野憲辰

23

IPv6新時代を体感しよう！第 3 回
波田野裕一

32 組織文化を変える汗と涙の物語

アジャイル改善塾 第 4 回
山海一剛

34

第3回

50

ユニケージ開発手法
コードレビュー 第 5 回
大内智明

28

46 教えて先輩♡

りゅうちの工作員日記 第 5 回
りゅうちてつや38 「シェル芸」に効く

AWK 処方箋 第5 回
斉藤博文

42 シェル芸勉強会後追い企画

Haskell でやってはいかんのか？第 5 回
上田隆一

中小企業
手作りIT化奮戦記 第 12 回
菅雄一

53

スズラボ通信 第8 回
すずきひろのぶ58

人間とコンピュータの可能性

第 16 回
大岩元

60

法林浩之の
FIGHTING TALKS
第3回

63 自転車の上にも 30 年 シェル魔人／編集後記ȭȻɣɈྰடɉඋĉຒȢɉູୠࡥૢɈෂɅĤĤ（特集企画：かまた ひろこ）
4

USP MAGAZINE 2014 August

IT美女特集

டɈ
౺ȧၫɂ
ȭɦȥɣ
2014年、積極的な財政出動、大胆な金融緩和政策を背景に、国内の景気が上向きつつあるそうです。
皆さんの実感はいかがですか？ ただ、長いスパンで眺めると̶̶少子高齢化で日本全体の労働力人口は減り続け、地域経済の低迷、過疎化、限られた財源の中で若者世代の負担増が懸念されるなど難しい
課題が山積みです。
その突破口として今、あらためて女性の存在が注目されています。アベノミクス第三の矢と言われる成長戦略でも、女性の活躍が期待されています。それは、IT業界でも例外ではありません……などと、シリアスなことを申し上げてしまいましたが、本特集では強くたくましく美しく花咲くIT女子の姿を、明るく楽しく
ご紹介していきたいと思います。
記事ではLinux女子部とのコラボで開催したイベント、TechGIRLの盛り上がりをお伝えします。さらに、本誌の人気コーナー「IT美女図鑑」が復活！ “IT美女”といえども女性の中身を重視しているこのコーナー。今回は、データセンターをこよなく愛する女性です。
本特集で読者の皆様に、IT業界の女性達のありのままの姿を知ってほしい、身近な存在に感じていた
だきたいという想いが、私たちにはあります。
ところで、USP友の会が開催するシェル芸勉強会（シェルのワンライナー勉強会）には毎回40名ほどの参加者の中に女性の姿がちらほら見られます。USP友の会会員メンバーの一人として、IT業界の一人の人間としてそんなIT女子を心から応援しています。
5

女の生き方の現実と描く未来

UfdiHJSMާ੓ၡਠ
2014年5月24日(土)に、USP研究所、GMOインターネット、Linux女子部の共催で「TechGIRL」を開催致しました。当日MCを担当したLinux女子部 部長の平愛美がレポートいたします。

UfdiHJSM ཡഫɈȧȽȥȫ
「TechGIRL」とは、女子部から派生した、IT 業界を●「ワーキングマザーエンジニアの三種の神器」
たかはし るみさん
独立行政法人 情報通信研究機構 (NICT)

明るく、そしてワクワクさせる為の交流イベントです。

ベンダー資格 CCIE を保有す

IT 業界で働く女性の悩み…「もっとプレゼンする

るエキスパートなネットワー

機会が欲しい」「女性エンジニア同士の交流を深めた

クエンジニアであり、一児の母い」といった声に応えるべく、TechGIRL を立ち上げでもある高橋さんは、仕事とました。

子育ての両立をするための「三そして記 念すべき第一回目は、GMO インター

種の神器」は、「保育園」「家電」「パートナー」でネットグループが運営するコミュニケーションスペースあると説明。さらに、パートナーから掛けてもら「GMO Yours」にて開催し、男女合わせて 100 名

いたい魔法の言葉は「私が○○みているから、あを超える参加者が集結しました。

なたは△△しておいで」−−相手をいたわる心の余ட౯ʑʬĜʃĜȺɣȫɈ MU ൥‫ޏ‬
第一部は、IT 業界を支える女性スピーカーによ裕が重要であることを伝えました。今回、出産しても働きたい女性や、イクメンパパが多数参加していたこともあり、多くの参加者が共感し、参考にしていました。

る LT 大会を行いました。ちなみに、IT 系イベン●
「新卒がCIerの営業になってそれなりに時が経っ

トの LT は、銅鑼を叩く女性 ( どら娘 ) が配置された話」永淵 恭子さんているのが一般的ですが、本イベントでは増田さ

株式会社サーバーワークス / JAWS-UG AWS User Group - Japanんが執事役となりました。LT の制限時間 (5 分間 )クラウド女子会 コアメンバーを過ぎると、呼び鈴を鳴らして「お嬢様、お時間

CIer（クラウドインテグレーです」と優しくお知らせしました。

ター）の法人営業である永淵

第一部では計 10 名のスピー

さんは、これまで男社会といカーによる LT を行いました（本

われていた営業職の世界に飛誌では誌面の関係上、5 名のび込んで経験したことを本音スピーカーをご紹介いたしま

で語り、会場を共感と笑いの渦に巻き込みました。

す）。

女性ならではのポジティブさ、周囲への気配り、【執事役】サイバーエージェント

行動力は、営業職に向いていることをアピール。

増田謙一さん

今後の目標は、女性営業職として産休・育休・復帰にチャレンジすることを宣言。これからの永淵さんの活躍から目が離せません。

10 USP MAGAZINE 2014 August

おお げ

みどり

●「Apache CloudStack のおはなし」大削 緑さん●「時短主婦の味方の紹介」ゆうこさん

NTT コミュニケーションズ / 日本 CloudStack ユーザー会 副会長

株式会社 ISAO

パブリック・クラウドサー

インフラエンジニアの ゆう

ビス、Cloudn（クラウド・エ

こさんによるプレゼン。ゆうこヌ）のアーキテクト、大削ささんは一児の母で、Linux 女子

んよる CloudStack の紹介プ

部の勉強会に子連れでよく参加

レゼン。大削さんはインプレされています。

ス R&D 出版「CloudStack 実践ガイド」の著者でもあります。

仕事と育児の両立のため、選択肢の一つとして育児短時間勤務制度（時短勤務）を利用する方法があCloudStack は無料で入手でき、システム要件をります。ゆうこさんは時短勤務を選択していますが、満たしている Linux マシンさえあれば、自分の手で限られた勤務時間の中で、インフラストラクチャ自クラウド環境を作ることができます。

動化フレームワークである「Chef」を活用し、業務

女性エンジニアがクラウドの最前線で活躍していることに、多くの参加者が元気をもらいました。エ

の効率化を図っています。帰宅後も最速で家事をするために、家電をフル活用しています。

ンジニアの皆さんはぜひこの機会に、CloudStack

もちろん、両立できるのは心身の健康があってこでクラウド環境を作って、スキルアップを目指してそ。無理をしないこと、無理が出てきそうだったらみましょう。

実家や職場の上司に相談して一人で抱え込まないこ●「女性エンジニアが長く働くコツ」石川 博子さんとが大事だと伝えました。

株式会社エイチアイ・シス 代表取締役 / 日本プロジェクトマネジメ
ント協会 Women's SIG リーダー

石川さんは理系大学を卒業

プレゼンで紹介された家電はどれも欲しくなる逸品ばかりで、中には購入を真剣に検討する参加者も。
バランスを取って、無理せずにお仕事を続けること

後、大手ゲーム会社に就職。

が大事ですね。

入社当初は「女性は結婚した

スピーカー公開済みのスライドは、Linux 女子部公式

ら退職するから、女性には技サイトにて紹介しております。

術は教えられない」という理

http://www.linux-joshi.net/2014/06/techgirl.html

由で企画開発のお茶汲みからスタート。でも、エンジニアになることを諦めたくなくて他部署の上司に頼み込んだ結果、技術部に転部することができ所属していたゲーム会社で初の女性エンジニアになることができたそうです。

その他スピーカー●「RHEL7 リリース間近!?systemdで焦らないための Fedora のススメ」
Linux女子部 平 愛美●「ConoHa中の人」 GMOインターネット GRACEさん●「新入社員でもこわくない、
やさしい世界のご案内」USP研究所 かまた ひろこ●「ますだっく執事になります」サイバーエージェント 増田 謙一さん●「Windows女子部のご紹介」 Windows女子部

第二部の懇親会では食事をしながら参加者同士で歓結婚後ゲーム会社を退職し、フリーランスを経て談をし、交流を深めることができました。また、希会社を設立。女性起業家となった今でも現役エンジ望者による LT を実施。こちらも大盛況でした！ 最ニアを貫き通す理由は、もの作りで完成したときの後に全員で集合写真！

達成感が嬉しかったり、IT 系コミュニティに参加す
ることにより仲間が増えたり、新しい知識を吸収でTechGIRL では、IT 業界で働く女性が主役のイベントを今後も企画する予定です。お楽しみに！

きて楽しいことが多いからだそうです。
仕事で無理をせず、「細く長く」続けることで、人生を楽しみながら仕事をするという働き方は、参加者に多くの気付きを与えたようです。

11ǢǣȒȅହॅ.
o
N 8
Alloc, Free and Die Hard
Author : すずきひろのぶ

Email: suzuki.hironobu@gmail.com

プログラマはその生涯で三度メモリーアロケーション

ります。その右側には、スタック領域があります。さについて考えるという古くからの言い伝えがあります。

てシステムコール brk/sbrk によってヒープ領域が成

これは、その三度目のお話です 。

長（拡大）します。その領域が個々の malloc の呼び※1

出しの都度、切り出され、提供されていく「原資」と古典的 UNIX の malloc

なります。

malloc は C 言語の標準ライブラリで、メモリーをだったら malloc じゃなくシステムコール brk/sbrk
でいいじゃないか、という話になりますが、malloc を

割り当てます。

リスト 1

使うと 2 つ大きな利点が得られます。1 つは、いちい

wpje!+nbmmpd)tj{f`u!tj{f*<ち呼び出しコストのかかるシステムコールを呼ばない

C 言語の標準ライブラリ、とあっさりと言っていまこと、もう 1 つは free をかけた領域を再利用するこ

すが、C 言語は UNIX のカーネルコードをアセンブラとができる点です。現実問題として昔の UNIX は brk/

から高級言語へ書き換えるために作られた言語ですかsbrk を呼び出すと大変遅かったのです。

ら、そもそもの malloc は UNIX のアーキテクチャー

いったん大きなエリアで取ったメモリー空間は次に細分化された上で使われます。切り出す時は、アロにどっぷりと依存しています。
man で見ればわかるように malloc は man3 のカテ

ケーションで呼び出したエリアの他に、頭の部分にメゴリ、つまりユーザー空間で動作するライブラリです。

タデータ（制御情報）を入れます。まず切り出された

malloc の仕組みはざっくりと次のようなものです。

時のメモリー空間を見てみましょう。こんな風に切りまずシステムコール brk/sbrk でヒープエリアを拡出されたデータが並んでいます（図 2）。

大します。そこで得られたメモリー空間から、malloc

図 2：アロケーションされたエリアで求められたサイズに合わせて切り出していきます。

Allocated

ちなみにシステムコール brk/sbrk は POSIX.1-2001
では、すでに外されているシステムコールで、レガシー

metadata扱いになっています。
UNIX のプログラムが割り当てられるメモリーは図1 のように、テキスト領域があって、次にデータ領域※2があって、ヒープ領域（青色の部分を含む）があ
アロケーションされたメモリー空間で、使われなく

図 1：メモリー空間の割り当てなったら、free を呼び出せば、それが再利用のリス
text

data heap

stack

トに登録され、次回 malloc が呼び出された時に、そのリストの中に適したサイズのものがあれば、それをアドレスの大きくなっていく方向

再利用します（図 3）。

53図 3：Free List を使って再利用する

ソースコード 2: 不正な領域を書き込む$jodmvef!=tuemjc/i?
nbjo)*|

free!!dibs!+b<

mallocFree List!!jou!j<!!b!>!)dibs!+*nbmmpd)9*<!!gps)!j!>!1!<!j!=!239!<!j,,*!|!!!!b\j^!>!2<!!~~

mallocfree

そこでいくらデバッグしてもまるでアロケーション
したデータが魔法のように書き換えられる、
あるいは、
malloc でデータを取ってこようとすると、free のリ処理コストは実質的に数カ所のポインタの書き換えストにあったメタデータが壊れていて、malloc がまで済みます。それらのリストなどを管理するための情報

ともに動作しないといった不思議な現象が現れます。

がメタデータです。
実装方法によって違いはありますが、80 年代のまだ UNIX が普及し始めて C 言語を使

こんな感じで色々と重要な情報が格納されています。

い慣れない、そして malloc のソースコードなど一度ソースコード 1：linux の /usr/include/malloc.
h にあるメタデータ

も眺めたことがない人にとって malloc は魔法の、あtusvdu!nbmmjogp|!!jou!bsfob<!!!!0+!opo.nnbqqfe!tqbdf!bmmpdbufe!gspn!tzt
ufn!+0!!jou!psecmlt<!!0+!ovncfs!pg!gsff!divolt!+0!!jou!tncmlt<!!!0+!ovncfs!pg!gbtucjo!cmpdlt!+0!!jou!icmlt<!!!!0+!ovncfs!pg!nnbqqfe!sfhjpot!+0

いったんこのあたりでバグり始めると収集がつかな!!jou!icmlie<!!!0+!tqbdf!jo!nnbqqfe!sfhjpot!+0!!jou!vtncmlt<!!0+!nbyjnvn!upubm!bmmpdbufe!tqbdf!+0!!jou!gtncmlt<!!0+!tqbdf!bwbjmbcmf!jo!gsffe!gbtucjo!cmp
dlt!+0!!jou!vpsecmlt<!0+!upubm!bmmpdbufe!tqbdf!+0!!jou!gpsecmlt<!0+!upubm!gsff!tqbdf!+0!!jou!lffqdptu<!0+!upq.nptu-!sfmfbtbcmf!)wjb!nbmmpd`usj
n*!tqbdf!+0~<

るいは泥沼のブラックボックスだったと思います。
くなり、面倒くさいものでした。80 年代も終わりの頃、とあるソフトウェア生産関連の研究会の論文では「malloc にはバグがある云々、よって UNIX は安定していない OS である」ということが堂々と書かれていました。
それ以外にもメモリーリークという名の、アロケー
ション後、使われなくなった領域を free するのを忘れて、どんどん使用メモリー量が増えていくバグなど、様々な問題を引き起こすものがありました。そもそもメモリーが漏れて（リーク）、などという表現そのものが変な話です。設計レベルにおいて、利用するメモ

次にソースコード 2 を見てください。思いっきりリー空間をどこで割り当て、どこで解放するのかをき

バグっていますが、これで動いてしまいます。これはちんと考慮していないために、リークじゃなく、延々次に続く領域のメタデータを破壊しているはずです。

と溜め込んでいるというのが正しい表現でしょう。

元々は自分の持ち物になった 1 つのメモリー空間で90 年代に入ると、そんなデバッグがむずかしい

すから、その範囲であればデータを書き込めてしまう

malloc に使える Purify というツールが出てきます。

ので、このような大問題が、問題なくできてしまうの

これは、今でも IBM Rational Purify として販売されです。もちろん隣接しているアロケーションされたています。

データ領域がどこで使われているかなど、神のみぞ知るです。領域をオーバーしてデータを書き込むバグな

時代は mmap

ど日常茶飯事なはずです。この時、実際にデータを不

これまでは brk/sbrk のシステムコールを使って正に書き込むバグの部分と、その結果として何らかのユーザーの使えるメモリー空間を確保していました

現象を起こす部分には関連がありません。

が、mmap が使えるようになって、mmap を使った

54 USP MAGAZINE 2014 Augustmalloc 実装が出てきました。glibc の malloc 実装で（MAP̲PRIVATE ですので自分以外はこの領域へアクは mmap を使っています。

セスすることはできません）。この時のメモリー領域

こうなると mmap で取れるメモリー領域が理論上は仮想記憶空間から、そのまま割り当てられます。この最大メモリ領域なので、glibc の malloc で使うこの時、ファイルディスクリプタを（Linux では）「-1」とができるメモリ領域の総量が、size̲t が 32 ビットとします。

だと 2 -2 ページ分、size̲t が 64 ビットだと、2 -2
32

64

ページ分になります。

これである大きさのメモリー空間を mmap で確保し、ユーザーライブラリである malloc で、データを

ソースコード 3 は、1GB のメモリー領域を確保し細分化、あるいは使いまわしをする、ということになています。今時のメモリー管理は copy-on-write でります。mmap は POSIX.1-2001 で定義されている

すから、何か書き込まないと実メモリー領域は確保さので、POSIX 互換性である OS ならば問題はありまれないので、ここでは 1 を代入しています。

せん。あとは malloc の実装の問題になります。

ソースコード 3$jodmvef!=tzt0nnbo/i?
nbjo)*!|!!dibs!+nn<!!jou!j<!!nn!>!)dibs!+*nnbq)1-!2135+2135+2135-!)QSPU`SFBE!}!QSPU`XSJUF*NBQ`BOPOZNPVT}NBQ`QSJWBUF-!.2-!1*<!!gps)j>1<j=2135+2135+2135<j,,*|!!!!nn\j^>2<!!~~

リスト 2：ソースコード 3 の実行結果
VTFS!!!!!!!QJE!&DQV!&NFN!!!!WT[!!!STT!UUZ!!!!!!TUBU!TUB
SU!!!UJNF!DPNNBOE
ijspopcv!2647:!::/2!!7/9!2163847!2159:59!qut022!T,!!24;
29!!!1;19!/0b/pvu

アクセスによるデータの破壊や、セキュリティだけ で は な く、 そ の 他 に も 並 列 処 理 や ス ケ ー ラ ビ リティ、あるいはデバッキングの簡便さなど、色々な利点をもった malloc 置き換えのためのアロケーショ
ンのライブラリが出てきます。Google はツールとし て tcmalloc を 公 開 し て い ま す し、FreeBSD はjemalloc を用意しています。Mozilla プロジェクト
ではシステム標準ライブラリの malloc を使わずに、
Mozilla Firefox のソースツリーの中に jemalloc を用意し、それを使っています。
他にもセキュリティ強化された secmalloc や smalloc、
OpenBSD プロジェクトの Otto Moerbeek 氏が作った通称 otto malloc など多数の malloc 実装が現れます。ちなみに otto malloc は OpenBSD プロジェクト

mmap は基本的にファイルをメモリー領域にマッ
プして、メモリー空間もファイルも単一のアクセス方

では単に malloc、あるいは malloc for OpenBSD のような呼び方をしています。

法、つまりメモリー空間と同じアクセスで扱えるよう

OpenBSD の otto malloc は、 ア ロ ケ ー シ ョ ン すにするものです。このメカニズムのことを単一レベル

るメモリー空間のサイズがページより大きい場合は記憶（Single Level Storage）といいます。mmap

mmap で直接アロケーションします。OpenBSD のが現れるまでは、単一レベル記憶は、IBM のミニコ

mmap はランダムなアドレスに割り当てられる実装なン OS ぐらいにしか用意されていなかったので、IBMので他のアドレスから、次に割り当てられたアドレス

独自のアイデア、あるいは機能かと思われるかもしれを推測することができません。

ませんが、アイデアと実装はとても古く、UNIX より

mmap で生成した個々のメモリー空間は基本的に以前に作られた（作ろうとした）OS である Multics

独立であり、書き出しが領域からはみ出してアクセスでも使われました。

していくと、セグメンテーション・フォルトを起こしUNIX の mmap は、 カ ー ネ ギ ー メ ロ ン 大 学 で作った OS である Mach のメモリー管理を経由して4.3BSD で入ってきました。
mmap は MAP̲ANONYMOUS オプションを使うとファイルがなくてもメモリー領域を返してくれますてプログラム自体が不正終了することになります。
メモリー空間のサイズがページサイズ以下の小さな場合のみ、これまでのように切り出して使いますが、なるべくランダムな領域を取ろうとするので、これまでの問題を最小限に留めようとしています。

55

このような新しい試みがなされた malloc が徐々に

数 b が HeartbeatResponse だ と 思 っ て く だ さ い。

増えました。ですが古典的な、というよりスタンダー

HeartbeatResponse には本来見えないはずの秘密の情ドな実装ともいえる glibc の malloc では、やっぱり、報がダダ漏れです。

ユーザーがどこでもアクセスできてしまう（そして、

ソースコード 4

いくらでも関係のないデータを壊してしまう）という$jodmvef!=tuemjc/i?

昔からの問題が依然として持ち越されたままです。
そしてプログラマーは、あまりにも増えた malloc
実装のバリエーションに頭を悩ませるのでした。

Heartbleed とメモリーアロケーション$jodmvef!=tuejp/i?
$jodmvef!=tusjoh/i?
wpje!bmmpdebub!)wpje*|!!dibs!+e\4^<!!0+!๩ྟ͈ΟȜΗͬnbmmpd͈΀ςͺͅ੥̞̤̩̀!+0!!e\1^!>!)dibs!+*!nbmmpd!)9*<!!tusodqz!)e\1^-!#bcdefg#-!8*<

最近話題の Heartbleed です。TLS/SSL の実装の!!e\2^!>!)dibs!+*!nbmmpd!)9*<

1 つである OpenSSL にバグがあって、秘密にしてい!!tusodqz!)e\2^-!#hijklm#-!8*<!!e\3^!>!)dibs!+*!nbmmpd!)9*<

なければならない情報がダダ漏れになるアレです。
TLS には Heartbeat という拡張機能があって、相手が生きているか死んでいるかを確認する、またはネットワーク接続を継続させる、一種の死活監視を行います。HeartbeatRequest のパケットを投げると、その中身をコピーした HeartbeatResponse のパケットを戻してくれます。
HeartbeatRequest を送った側はそれを受け取り、自分の投げたものと同じかどうかを確認します。
HeartbeatRequest を 投 げ る の が ク ラ イ ア ン ト、HeartbeatRequest を受け取り、HeartbeatResponseを送るのがサーバー、としてモデル化するとこんな流れ（図 4）になります。

!!tusodqz!)e\3^-!#nopqrs#-!8*<~
wpje!nbjo!)wpje*|!!tusvdu!|!jou!mfo<!dibs!+cvg<~!b-c<!!jou!j<!!b/mfo>91:7!<!0+!ಿ̯9LC̵͙̥̫̀ͅ!+0!!b/cvg!>!)dibs!+*nbmmpd)4*<!0+!ུ൚͈ಿ̯͉4C͈͙!+0!!bmmpdebub!)*<!0+!๩ྟ͈ΟȜΗ୆଼ಎ!+0!!c/mfo>b/mfo<!0+!ֿ͈ಿ̯ͬ΋άȜ!+0!!c/cvg>)dibs!+*nbmmpd)c/mfo*<!0+!΀ςͺ̦9LC̱̈́̽̀ͅ
̞̽̀ͥ͘!+0!!nfndqz!)c/cvg-!b/cvg-!c/mfo*<!0+!ΨΛέ͹!΂ȜΨȜςȜΡ!!+0!!gps!)j!>!1<!j!=!239<!j,,*|!0+!୶൮239C͈͙Θϋί!+0!!!!qvudibs!)c/cvg\j^*<!!~~

図 4：処理のおおよその流れ :リスト 3：ソースコード 4 の実行結果

2ȫ
!IfbsucfbuSfrvftu ௣૞&!dd!tbnqmf/d&!/0b/pvu!}!dbu!.w_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A"_A_A_A_A_A_A_Abcdefg_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_
A"_A_A_A_A_A_A_Ahijklm_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_
A"_A_A_A_A_A_A_Anopqrs_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_A_
AN.2_`_A_A_A_A_A_AɜΟȜΗ͈ಿུ̯͉൚͉239C͈̈́ͅ75LC͈͂ܺૂ༭ͬ௣ͥȃɜΟȜΗΨΛέ͹͈৘ष͈ඤယ͉239CȪ̭̭͉́‫͈ب‬౵ȫˎȫ!IfbsucfbuSfrvftu਋૞ɜΟȜΗ͈ಿ̯͉75LC̺͂೒౶̯̞͈ͦ̀ͥ́Ȃུ൚ͅ75LC
̺͂এ̞̽̀ͥȃɜΟȜΗΨΛέ͹ͬ239C̺̫උ̷͙ࣺ͙͈΍ͼΒ͈ικςȜͺυΉȜΏοϋ࣐̞ͬȂ̷̭ͅ΋άȜ̱̤̩̀ȃˏȫ!IfbsucfbuSftqpotf௣૞͈੔๵
ɜΟȜΗ͈ಿ̯ͅ‫ૂ̳ͥ۾‬༭ͬࡉ̀75LC໦ͬ‫ږ‬༗̳ͥȃ
ɜ239C̺̫ικςͺυΉȜΏοϋ̱̹ਫ਼̥ͣ75LC໦΋άȜ̳ͥȃːȫ!IfbsucfbuSftqpotf௣૞

OpenSSL は デ バ ッ グ の た め に malloc に 一 皮 か
ぶ せ て い ま す。 デ フ ォ ル ト で は、 標 準 ラ イ ブ ラ リ

ɜ239Cུ̺̫໤́Ȃ
75LC̥ͣ239C̞̹ͬ֨໦ུ͉ြͺ·ΓΑ

の malloc、realloc、free を 使 っ て い ま す。 プ ロ グ̱͉̞̫̞̀̈́๩ྟૂ༭

ラ ム 中 で は、CRYPTO̲malloc̲init() と い う マ ク ロˑȫ!IfbsucfbuSftqpotf਋૞ɜȪ‫̫̞̥͉̥̓̈́ͣͩة‬ȫུြ๩ྟ̜́ͥૂ༭ͬංͥȃを CRYPTO̲set̲mem̲functions(malloc, realloc,free) に展開し、このインタフェースを使って malloc、

これをモデルにしてプログラムを書くと、こんな

realloc、free の関数をデフォルトで使うメモリーア

感 じ に な り ま す。 変 数 a が HeartbeatRequest、 変

ロケーションの関数にセットしています。これが各々56 USP MAGAZINE 2014 AugustCRYPTO̲malloc、CRYPTO̲realloc、CRYPTO̲

まされたからです。
この時が一回目です。
当時はデバッfree という関数で包まれて（ラップされて）います。

グ文を挟むしか手だてがありませんでした。ちょうど実際にプログラム中でメモリーアロケーションをし今の OpenSSL の mem.c にあるようなコードです。

ているのは OPENSSL̲malloc() というマクロで、こ2014 年に大騒ぎした話題も元をたどれば 80 年代か

れも CRYPTO̲malloc() へ展開しているだけです。

ら変わらないのか、と不思議な感覚になります。

これらのコードが含まれる src/crypto/mem.c や動的なメモリーアロケーションに劇的な変化を

mem̲dbg.c をみると、山ほどデバッグ用のデータダ

生 ん だ の は mmap 実 装 の 登 場 で し ょ う。MAP̲

ンプのためのコードが組み込まれています。

ANONYMOUS を使えば仮想記憶側からメモリー空メ モ リ ー を フ リ ー す る 時 は OPENSSL̲free() で間を持ってこれますが、やろうと思えばプログラムレ

すが、これも free を呼び出しているだけです。こベルでローカルな仮想記憶モドキを作ってしまえるの エ リ ア を ク リ ア に は し て い ま せ ん。 つ ま り、ほどの柔軟性です。そして mmap という標準化したHeartbeatResponse で戻されている秘密情報の中システムコールを利用できることになって、色々なには、すでにアクティブではない、free されている ( がmalloc の実装が進みました。malloc と free の間を内容は必ずしも消されていない )、といった、かなり行き来する細切れ（チャンク）にされたリストをどう

古い秘密情報まで入っている可能性があります。

効率よく管理するか、
そしてデータ侵害・セキュリティ

Heartbleed Bug のために OpenSSL のソースコー

侵害からの保護、あるいはデバッグライブラリの充実ドを読んでいて、特にメモリーアロケーションまわりなど、いったいどれを選べばいいのか、ほとほと困りのやたらと汚いデバッグ用ダンプコードや、あるいは、

果て、の、二回目です。色々な資料を読んでいって、システムのデフォルトの malloc をそのまま使うコー

思ったことは「信ずるものは救われる」です。ただしドだということがわからないほど関数ポインターの嵐

glibc の malloc では、もう機能不足のように思えるで、何がどこでセットされているのか、かなりじっくのは確かです。

り読まないと見過ごします。このソースコードの見通

そして、今回が三回目。バッファ・オーバー・リー

しの悪さはこれから先もトラブルを起こす原因となる

ドなんですが、それは malloc で使っているメモリー

ことでしょう。

空間をガリガリと読んでしまう点が、本質的な問題でプ ロ グ ラ ム で、 既 存 の malloc や free や realloc

す。どんな風にメモリーアロケーションがなされていを使わず、別の malloc を使いたい時は、CRYPTO̲

るのかについて今回は論じませんが、先ほど言ったよ

set̲mem̲functions() を使えばセットアップできる

うに OpenSSL はメモリーアロケーションのデバッと Makeﬁle には書いています。

グのために大量のデバッグ用コードを入れています。

図 5：CRYPTO̲set̲mem̲functions() を使えばですから、（どんな秘密がアロケーションされている$!NGVOD!.!Nblf!bmm!Nbmmpd0Gsff0Sfbmmpd!dbmmt!dbmm$!!!!!!!DSZQUP`nbmmpd0DSZQUP`gsff0DSZQUP`sfbmmpd!xijdi!
dbo!cf!tfuvq!up$!!!!!!!dbmm!bqqmjdbujpo!efgjofe!dbmmcbdlt!wjb!DSZQUP`
tfu`nfn`gvodujpot)*のか）実際の影響度を図るのには、実は十分なコード

ですが、これを理解できている人は世界中でも何人もいないでしょう。

malloc について考えるのは人生で三度目が用意されています。
というわけで、真面目に malloc のことを考えたのは、人生で三度目。もうこれ以上、malloc を振り返ることのない人生を歩めるよう、日々精進していくことを心に決めて今回は筆を措きたいと思います。
ɦ2!ུ‫̠̞̈́ͣ৾͢ͅͅܨ‬ȃ
ɦ3!ctt ΓΈιϋΠ͜ΟȜΗႀ֖̳̦́Ȃ଎2 ̷͉̭́ͅ‫̀͛܄‬̞̳͘ȃ

Heartbleed の 問 題 点 を 追 っ か け て い て、 す ぐに、あーこれは、と理解できたのは、実は 80 年代に UNIX プログラマーに成り立ての頃、この手のバッ
ファー・オーバー・ライト（リード）のバグに散々悩

57

いま私たちは何を学ぶべきか

人間とコンピュータの可能性
第 16 回生体システムはあり合わせ材料の再利用で進化した
written by 慶應義塾大学 名誉教授 大岩 元
今回は、我々の身体を生涯通じて思い通りに動かすための健康法を紹介しつつ、生体の持つ合理的な動作について考えてみたい。

自律分散協調系としての筋肉組織たからである。
ある時、菊池さんの体操教室に 70 代半ばの女性が100 万年を越える人類の歴史の中で、わずか 200訪れた。
「腰が曲って足が上げられなくなり、バスにも年前に始まった産業革命による工業化によって、人間乗れなくなった。体操をしてバスに乗れるようにしたい」

は労働から解放されて筋肉を使う時間と量が圧倒的にと相談を持ちかけられたという。その女性は以来 14 年

少なくなってしまった。情報化はこの傾向をさらに助間、毎日熱心に体操を続けた結果、開脚で上体を前に長しているが、使わなくなった筋肉は劣化し、その事倒して床にピタリとつけられるまで、体の柔軟性を取りが健康に大きな影響を与え出している。

戻すことができたそうである。彼女が 90 歳近くで亡く

要らなくなった筋肉を使わなくても困らないようになった時、担当された医師が「こんな見事な亡くなり方

思えるが、そうではない。筋肉組織は人工物と違って、をされた方は見たことがありません。是非解剖させて欲目的に応じて設計されたものではなく、既存の筋肉をしい」と希望されて、解剖を行うことになった。その結果、新たな目的のために利用することを通じて、複雑な筋

この医師は「すべての筋肉、骨、臓器をここまで使い切っ

肉組織を形成してきたのである。
例えば、首の筋肉が弱まると、噛めなくなる、頭がはった方は見たことがありません」と驚いたそうである。私も是非このような状態で逝きたいと思う。

きりしない、唾液が出ずらい、聴力が落ちる、頚椎がず「きくち体操」では体操を行なう時に、筋肉と脳の関れたり減ったりする、猫背になる、ひざや腰が痛んだり係を意識することが重視される。学校で教わる体育のする、といった症状が現れる。首を支える筋肉は、その時間では、前屈して手が地面につくかどうかというよう他の目的にも使われており、劣化すると、上記のようにな、動作の結果として得られる「形」だけを問題にする

関連する機能も同時に劣化してしまうのである。

ことが多い。しかし、これでは筋肉は「育たない」ので「きくち体操」

ある。
両脚を前に出して座る「長座」でも、筋肉を普段から菊池和子氏が開発した「きくち体操」では、「筋肉を育てていない人は、後ろに手をつかないと座れない。背鍛える」のではなく、「筋肉を育てる」という新しい考

中に力を入れて上体を前に持ってこようとしても、うまえ方の体操を行っていて、女性を中心に広く支持を集

くいかない。
「きくち体操」では、まず太ももに力を入れめている。私がこの体操を自分の生活に取り入れたのて、膝を床に押しつけ、お腹を引いて上体を起こすようは、菊池氏の著書『はじめての「きくち体操」』（講談社に指導する。この時、ふくらはぎや膝の裏側がどのよう

プラスアルファ新書）に紹介されていた事例に感激しな感じがするか、に気を配って、長座に必要な筋肉を動58 USP MAGAZINE 2014 Augustかすように意識させるのである。うまく座れたかどうかを問題にするのではない。筋肉を意識して動かすことを毎日続けることで、筋肉は育っていくのである。

生体の形成とユニケージ技法
コンピュータ上に作る情報システムは、実現したい目

太ももの筋肉は、前はお腹、後ろはお尻につながっ的に到達するべく合理的な設計を伴って作られる。目ていて、上体を支えている。太ももが弱くなると、お尻的を実現するのに必要となる機能モジュールを洗い出の筋肉も弱って、お尻が横にずり落ちて股関節や腰もし、そこへの情報の出し入れはできるだけ小さくして、定められた出入り口だけを通じてモジュール間で情報弱りだすのである。

協調作業が合理的な仕事を可能にする

交換をするようにして、巨大なシステムを構築する方

タイピングを行なう場合、キーを叩くのは指であるが、これに対して情報システムよりはるかに複雑で巨大

熟練タイピストは指をあまり使わない。キーの上に指のな生体システムは、全く違う方式で構成されている。

先をもっていく作業は、指を動かすのではなく、腕全体

脳もその例外でない。ゲアリー・マーカス『脳はあり合を動かすことで、指の負担を軽減している。叩く作業自せの材料から生まれた』（早川書房）は、題名自体がそ体も、腕の重さを使って筋肉はできるだけ使わないようの事を示しているが、原題は "Kluge: The Haphazardにする。

Construction of the Human Mind" である。kluge と法が一般的である。

指は、キーを叩くだけでなく、多様な使い方をする。

いう用語を、私がこの本で初めて知ったが、「エレガン

同様に、腕も色々な働きをする。このように、多様な働

トにはほど遠く、無様であるのにもかかわらず、驚くほきをする指と腕に協調作業させることで、それぞれのど効果的な問題解決法」を表わす技術用語であるとい

負担は小さくても、大きな仕事をできるようになる。

う。生体は、人工物とは全く違う原理で作られたにも手、指、腕といった、人間の機能モジュールは、魚のひれから足へと進化したものが、直立歩行にともなっかかわらず、はるかに複雑で強力な仕組みを何憶年という長い時間をかけて、形成したのである。

て、巨大化した脳とともに生まれたものである。手と腕ユニケージは、生体的なシステム構築法であるようにの協調動作が脳によって飛躍的に強力に発展したこと見える。商品管理のために、1000 以上のコマンドを作り、で、ことばの発達をうながし、現生する人類を生み出し

結局数十個のコマンドだけが使われているそうであるが、たように思われる。

進化の歴史で淘汰された種のことが思い起こされる。

じっとしているように見えますが、こうしているだけでもものすごく意識を使っています

ひざを床に
足首を手前に
折り曲げる

押しつける

お腹を引く

太ももに
力を入れる

お尻を寄せる

ひざと床の間に隙間がないよう、虫も通れないくらい菊池和子著『はじめての「きくち体操」』（講談社プラスアルファ新書）

ピターッとつける59

USP MAGAZINE

急 が ば 回 れ、 一 歩 ず つ。

IT美女特集ǋ¯ǴǚÁǡǑȜǡǴ
ƉǂƝŸƠƕƸȏ

ユニケージ開発手法教育講座「ユニケージ開発手法教育講座」は、ユニケージ開発手法におけるデータ管理の方法や、オリジナルコマンドの開発プロジェクトの進め方まで、ユニケージエンジニアとしてのトータルスキルを習得できます。

http://www.usp-lab.com/LECTURE/CGI/LECTURE.CGI
ǡ
ȏǴǚÁ
ࢬܹ‫ރ‬
սਖ֦

も充実中！
続々と新講座K1

コマンド学習編

K2

シェルスクリプト学習編（帳票・バッチ処理）

K3

シェルスクリプト学習編（ウェブアプリケーション処理）

K4

ユニケージアーキテクチャ編

K5

ユニケージ開発環境セットアップ編

K6

システム運用・管理編

K7

プロジェクトマネジメント・人材育成編

KSQL

SQL エンジニアのためのユニケージ活用編

KSTAT

ユニケージにおける統計コマンド編

2014 August vol.16

使用方法などをハンズオン形式で具体的に学べる講座です。UNIX の基礎からユニケージ開発手法によるUNIX 初心者のための講座などもご用意しています。
技術の草原で百獣の王を目指す
エンジニアたちの新感覚トークライブ！

http://techlion.jp/

上記のサービス内容は 2014 年 7 月現在のものです。
最新の情報は弊社ホームページにてご確認ください。

ISBN 978-4-9048-0710-1
C3455 ￥500

USP 研究所
定価（本体 500 円＋税）

Artwork created by Koji Ishizuka. © 2012 Zie's Bank .Co,. LTD All rights reserved.

2014Vol.
16
8
t
s
Augu
¥500