<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>o'log</title>
	<atom:link href="http://hirish.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hirish.wordpress.com</link>
	<description>thoughts, events, etc.</description>
	<lastBuildDate>Thu, 11 Jun 2009 01:50:20 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='hirish.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/7ed5cfa7bdd076249ccd252837a68598?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>o'log</title>
		<link>http://hirish.wordpress.com</link>
	</image>
			<item>
		<title>SH7780におけるTLBの管理</title>
		<link>http://hirish.wordpress.com/2009/06/10/sh7780%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8btlb%e3%81%ae%e7%ae%a1%e7%90%86/</link>
		<comments>http://hirish.wordpress.com/2009/06/10/sh7780%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8btlb%e3%81%ae%e7%ae%a1%e7%90%86/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 02:48:59 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[SH7780]]></category>
		<category><![CDATA[TLB]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=234</guid>
		<description><![CDATA[SH7780は仮想アドレスから物理アドレスへの変換にTLB（Translation Look-aside Buffer）を用いる。TLBには仮想アドレスと物理アドレスの組が表になっている。MMU（Memory Management Unit）はこの表を使って、仮想アドレスから物理アドレスに変換する。このTLBの内容はソフトウェアで管理する。なにしろ、32ビットのアドレス空間では何百万という仮想アドレスがあるのに対して、SH7780のTLBは64（＋4）エントリしかないのである。場面に応じてTLBの内容を書き換えてやらなければならない。この書き換えの仕方でシステムの性能は大きく変わる。
TLBはキャッシュの一種であり、TLBエントリの入れ替えにはキャッシュアルゴリズムをそのまま適用できる。代表的なキャッシュアルゴリズムには、ラウンドロビン、ランダム、LRU（Least Recently Used）がある。
ラウンドロビンは、先頭から順番に入れ替えていくアルゴリズムである。最後のエントリまで言ったらまた先頭に戻る。実装は簡単。エントリを指し示すカウンタを一つ用意しておき、入れ替え毎に一つ足していけばよい。最大値になったらゼロに戻す。
ランダムは、ランダムにエントリを入れ替えるアルゴリズムである。SH7780ではTLBを管理するレジスタの一つにランダムなカウンタがあり、これを使えば簡単に実装できる。
LRUは、最近利用されていないエントリを入れ替えるアルゴリズムである。定期的に各エントリへのアクセスを調べて入れ替えの順位を予め決定しておく。
実装してみると、LRUは面倒くさいことがわかる。まずは、入れ替えの順位を記録する表が必要になる。これはとりあえず配列で作っておけばよいが、あまりにエントリ数が多い場合にはリストにした方がいいだろう。入れ替えの時にはこの表を参照して入れ替えのエントリを決定する。
入れ替えの順位はエントリへのアクセス時刻で決まる。この結果、最も最近利用されていないエントリが入れ替えられ、TLBを効率よく使うことができる。TLBエントリのアクセス時刻を知るために、ソフトウェアの手法としては、ダーティビットが使われる。ダーティビットはTLBエントリの中の一つのフィールドで、プロセッサがTLBエントリにアクセスするとダーティビットがセットされる。定期的にダーティビットをクリアすることでどのエントリが最近アクセスされたかがわかる。SH7780はダーティビットの設定を勝手にやってくれない。これもソフトウェアがやらなければならない。これはつまり、ダーティビットがセットされていないエントリにアクセスすると例外ハンドラが起動されてそこからソフトウェアに処理が移るということである。SH7780では根本的な問題として、書き込みアクセスでしか例外が発生しない。したがって、読み込みアクセスは記録できない。
ダーティビットのセットの仕方には二つの方法が考えられる。一つ目の方法はTLBを直接変更する方法である。SH7780のTLBは物理アドレス空間にマップされているので、その領域を書き換えることでダーティビットを設定できる。しかし、この操作をするためにはCPUのモードを切り替える（P2領域でプログラムを実行する）必要がある。この方法が頻繁に使われる場合にはモードの切り替えが性能上の問題となる可能性が高い。
もう一つの方法は通常のTLBエントリの入れ替えと同じくレジスタを使う方法である。この方法だとCPUのモードを切り替える必要がない。
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=234&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>SH7780は仮想アドレスから物理アドレスへの変換にTLB（Translation Look-aside Buffer）を用いる。TLBには仮想アドレスと物理アドレスの組が表になっている。MMU（Memory Management Unit）はこの表を使って、仮想アドレスから物理アドレスに変換する。このTLBの内容はソフトウェアで管理する。なにしろ、32ビットのアドレス空間では何百万という仮想アドレスがあるのに対して、SH7780のTLBは64（＋4）エントリしかないのである。場面に応じてTLBの内容を書き換えてやらなければならない。この書き換えの仕方でシステムの性能は大きく変わる。</p>
<p>TLBはキャッシュの一種であり、TLBエントリの入れ替えにはキャッシュアルゴリズムをそのまま適用できる。代表的なキャッシュアルゴリズムには、ラウンドロビン、ランダム、LRU（Least Recently Used）がある。</p>
<p>ラウンドロビンは、先頭から順番に入れ替えていくアルゴリズムである。最後のエントリまで言ったらまた先頭に戻る。実装は簡単。エントリを指し示すカウンタを一つ用意しておき、入れ替え毎に一つ足していけばよい。最大値になったらゼロに戻す。</p>
<p>ランダムは、ランダムにエントリを入れ替えるアルゴリズムである。SH7780ではTLBを管理するレジスタの一つにランダムなカウンタがあり、これを使えば簡単に実装できる。</p>
<p>LRUは、最近利用されていないエントリを入れ替えるアルゴリズムである。定期的に各エントリへのアクセスを調べて入れ替えの順位を予め決定しておく。</p>
<p>実装してみると、LRUは面倒くさいことがわかる。まずは、入れ替えの順位を記録する表が必要になる。これはとりあえず配列で作っておけばよいが、あまりにエントリ数が多い場合にはリストにした方がいいだろう。入れ替えの時にはこの表を参照して入れ替えのエントリを決定する。</p>
<p>入れ替えの順位はエントリへのアクセス時刻で決まる。この結果、最も最近利用されていないエントリが入れ替えられ、TLBを効率よく使うことができる。TLBエントリのアクセス時刻を知るために、ソフトウェアの手法としては、ダーティビットが使われる。ダーティビットはTLBエントリの中の一つのフィールドで、プロセッサがTLBエントリにアクセスするとダーティビットがセットされる。定期的にダーティビットをクリアすることでどのエントリが最近アクセスされたかがわかる。SH7780はダーティビットの設定を勝手にやってくれない。これもソフトウェアがやらなければならない。これはつまり、ダーティビットがセットされていないエントリにアクセスすると例外ハンドラが起動されてそこからソフトウェアに処理が移るということである。SH7780では根本的な問題として、書き込みアクセスでしか例外が発生しない。したがって、読み込みアクセスは記録できない。</p>
<p>ダーティビットのセットの仕方には二つの方法が考えられる。一つ目の方法はTLBを直接変更する方法である。SH7780のTLBは物理アドレス空間にマップされているので、その領域を書き換えることでダーティビットを設定できる。しかし、この操作をするためにはCPUのモードを切り替える（P2領域でプログラムを実行する）必要がある。この方法が頻繁に使われる場合にはモードの切り替えが性能上の問題となる可能性が高い。</p>
<p>もう一つの方法は通常のTLBエントリの入れ替えと同じくレジスタを使う方法である。この方法だとCPUのモードを切り替える必要がない。</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=234&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/06/10/sh7780%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8btlb%e3%81%ae%e7%ae%a1%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>
	</item>
		<item>
		<title>タイマーズ</title>
		<link>http://hirish.wordpress.com/2009/06/06/%e3%82%bf%e3%82%a4%e3%83%9e%e3%83%bc%e3%82%ba/</link>
		<comments>http://hirish.wordpress.com/2009/06/06/%e3%82%bf%e3%82%a4%e3%83%9e%e3%83%bc%e3%82%ba/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 12:58:51 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=232</guid>
		<description><![CDATA[
家のCDを片付けていてタイマーズのCDを見つけてしまった。改めて聴くと風刺に満ちていてはっとさせられる。言葉遊びも面白いし、演奏のレベルも高い。忌野清志郎の才能に感心した。「偉人のうた」や「総理大臣」なんかは、今も昔も日本の政治の状況は変わっていないのだな、と思わせる。このCDは、「デイドリームビリーバー」を聴きたくて、中学生の時に中古のCDショップで購入したのだが、そのころはその曲がモンキーズのものだと知らずに買ってしまったものだ。その頃は変なCDを買ってしまったと思ったものだったが、今では良い買い物をしたと思っている。
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=232&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000CBO13E/hro4-22"><img src="http://ec2.images-amazon.com/images/I/31TRAKHBS3L._SL500_AA192_.jpg" border="0" alt="" /></a></p>
<p>家のCDを片付けていてタイマーズのCDを見つけてしまった。改めて聴くと風刺に満ちていてはっとさせられる。言葉遊びも面白いし、演奏のレベルも高い。忌野清志郎の才能に感心した。「偉人のうた」や「総理大臣」なんかは、今も昔も日本の政治の状況は変わっていないのだな、と思わせる。このCDは、「デイドリームビリーバー」を聴きたくて、中学生の時に中古のCDショップで購入したのだが、そのころはその曲がモンキーズのものだと知らずに買ってしまったものだ。その頃は変なCDを買ってしまったと思ったものだったが、今では良い買い物をしたと思っている。</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=232&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/06/06/%e3%82%bf%e3%82%a4%e3%83%9e%e3%83%bc%e3%82%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>

		<media:content url="http://ec2.images-amazon.com/images/I/31TRAKHBS3L._SL500_AA192_.jpg" medium="image" />
	</item>
		<item>
		<title>尾瀬</title>
		<link>http://hirish.wordpress.com/2009/05/26/%e5%b0%be%e7%80%ac/</link>
		<comments>http://hirish.wordpress.com/2009/05/26/%e5%b0%be%e7%80%ac/#comments</comments>
		<pubDate>Tue, 26 May 2009 00:05:09 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[尾瀬]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=224</guid>
		<description><![CDATA[週末高速道路割引の恩恵を受けるため、友人らと尾瀬に行って来た。折良く水芭蕉が咲いていた。
尾瀬にくるのは二回目であった。とはいうものの、小さい頃の家族旅行で行ったのが初めてで、木道を歩いたことぐらいしか記憶に残っていない。
尾瀬の湿原の第一印象は、日本にこんなに広いところがあったのか、というもの。遠くまで平地を見通せるその広さに感動した。後で写真を見返しても、その広さを納め切れていないことが残念だ。天気は曇りだった。前日の予報では雨が降る可能性もあったのでまあ御の字である。土曜日に戸倉で一泊して、日曜日の早朝から出かけ、昼には戻ってきた。というのも、高速道路料金割引で、帰りの道が混雑することを恐れていたからだ。実際、五月の連休直前に千葉に出かけたときの帰りの首都高はひどかった。今回は午後二時頃戸倉を出て六時には東京に着いた。特に長い渋滞に巻き込まれることもなかった。
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=224&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div class="mceTemp">週末高速道路割引の恩恵を受けるため、友人らと尾瀬に行って来た。折良く水芭蕉が咲いていた。</div>
<div class="wp-caption alignnone" style="width: 352px"><a href="http://photohito.com/photo/176907"><img style="border:0 none;" src="http://photohito.com/uploads/photo6/user5266/feefa6ac007f3cdb0c803ed459f02975/feefa6ac007f3cdb0c803ed459f02975_m.jpg" border="0" alt="" width="342" height="512" /></a><p class="wp-caption-text">ミズバショウとリュウキンカ　PENTAX DA★60-250mm F4ED</p></div>
<div class="wp-caption alignnone" style="width: 458px"> <a href="http://photohito.com/photo/176908"><img style="border:0 none;" src="http://photohito.com/uploads/photo6/user5266/acd7a4ffd798de37590101e7489c8ad5/acd7a4ffd798de37590101e7489c8ad5_m.jpg" border="0" alt="" width="448" height="298" /></a><p class="wp-caption-text">リュウキンカ　PENTAX DA★60-250mm F4ED</p></div>
<div class="wp-caption alignnone" style="width: 352px"> <a href="http://photohito.com/photo/176911"><img style="border:0 none;" src="http://photohito.com/uploads/photo6/user5266/80f9bbe42fd7f8d3bfed86bb0642c36f/80f9bbe42fd7f8d3bfed86bb0642c36f_m.jpg" border="0" alt="" width="342" height="512" /></a><p class="wp-caption-text">木と至仏山　PENTAX DA★60-250mm F4ED</p></div>
<div class="wp-caption alignnone" style="width: 458px"><a href="http://photohito.com/photo/176935"><img style="border:0 none;" src="http://photohito.com/uploads/photo6/user5266/1603dbe9947e315a3feb30ed0471cc94/1603dbe9947e315a3feb30ed0471cc94_m.jpg" border="0" alt="" width="448" height="300" /></a><p class="wp-caption-text">燧ヶ岳　PENTAX DA★60-250mm F4ED</p></div>
<p>尾瀬にくるのは二回目であった。とはいうものの、小さい頃の家族旅行で行ったのが初めてで、木道を歩いたことぐらいしか記憶に残っていない。</p>
<p>尾瀬の湿原の第一印象は、日本にこんなに広いところがあったのか、というもの。遠くまで平地を見通せるその広さに感動した。後で写真を見返しても、その広さを納め切れていないことが残念だ。天気は曇りだった。前日の予報では雨が降る可能性もあったのでまあ御の字である。土曜日に戸倉で一泊して、日曜日の早朝から出かけ、昼には戻ってきた。というのも、高速道路料金割引で、帰りの道が混雑することを恐れていたからだ。実際、五月の連休直前に千葉に出かけたときの帰りの首都高はひどかった。今回は午後二時頃戸倉を出て六時には東京に着いた。特に長い渋滞に巻き込まれることもなかった。</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=224&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/05/26/%e5%b0%be%e7%80%ac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>

		<media:content url="http://photohito.com/uploads/photo6/user5266/feefa6ac007f3cdb0c803ed459f02975/feefa6ac007f3cdb0c803ed459f02975_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/acd7a4ffd798de37590101e7489c8ad5/acd7a4ffd798de37590101e7489c8ad5_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/80f9bbe42fd7f8d3bfed86bb0642c36f/80f9bbe42fd7f8d3bfed86bb0642c36f_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/1603dbe9947e315a3feb30ed0471cc94/1603dbe9947e315a3feb30ed0471cc94_m.jpg" medium="image" />
	</item>
		<item>
		<title>美術館のはしご</title>
		<link>http://hirish.wordpress.com/2009/05/18/%e7%be%8e%e8%a1%93%e9%a4%a8%e3%81%ae%e3%81%af%e3%81%97%e3%81%94/</link>
		<comments>http://hirish.wordpress.com/2009/05/18/%e7%be%8e%e8%a1%93%e9%a4%a8%e3%81%ae%e3%81%af%e3%81%97%e3%81%94/#comments</comments>
		<pubDate>Mon, 18 May 2009 05:14:52 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=212</guid>
		<description><![CDATA[まずは午前中、目黒の東京都写真美術館に、野町和嘉写真展を見に行った。これが非常に良かった。彼の写真集を見たことはあったのだが、写真集と美術館の大きなプリントでは全然印象が違う。現代日本人とは大きく異なる生き方にショックを受けた。
午後は上野のルーブル美術館展を見に行った。館内に入るまで60分待ちの長蛇で、入ってからも人ばかりで大変。友達と大勢で行ったので並ぶのは苦にならなかったが、一人で並んでる人は苦痛だったろうな。4，5枚気に入った絵があったけど、全体としてはなんかあっけない感じ。写真展が800円だったからこれで1500円は大分高く感じる。
夜は新丸ビルのドイツレストランで乾杯。楽しい一日でした。
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=212&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>まずは午前中、目黒の東京都写真美術館に、野町和嘉写真展を見に行った。これが非常に良かった。彼の写真集を見たことはあったのだが、写真集と美術館の大きなプリントでは全然印象が違う。現代日本人とは大きく異なる生き方にショックを受けた。</p>
<p>午後は上野のルーブル美術館展を見に行った。館内に入るまで60分待ちの長蛇で、入ってからも人ばかりで大変。友達と大勢で行ったので並ぶのは苦にならなかったが、一人で並んでる人は苦痛だったろうな。4，5枚気に入った絵があったけど、全体としてはなんかあっけない感じ。写真展が800円だったからこれで1500円は大分高く感じる。</p>
<p>夜は新丸ビルのドイツレストランで乾杯。楽しい一日でした。</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=212&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/05/18/%e7%be%8e%e8%a1%93%e9%a4%a8%e3%81%ae%e3%81%af%e3%81%97%e3%81%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>
	</item>
		<item>
		<title>長崎旅行</title>
		<link>http://hirish.wordpress.com/2009/04/28/%e9%95%b7%e5%b4%8e%e6%97%85%e8%a1%8c/</link>
		<comments>http://hirish.wordpress.com/2009/04/28/%e9%95%b7%e5%b4%8e%e6%97%85%e8%a1%8c/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 04:50:41 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[長崎]]></category>
		<category><![CDATA[雲仙]]></category>
		<category><![CDATA[PENTAX DA 14mm F2.8 ED]]></category>
		<category><![CDATA[PENTAX DA 18-35mm F3.5-5.6 AL II]]></category>
		<category><![CDATA[島原]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=196</guid>
		<description><![CDATA[風頭公園からの長崎市の眺め
長崎市内の路面電車
有明海
四明荘
鮎帰りの滝
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=196&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>風頭公園からの長崎市の眺め</h4>
<div class="wp-caption alignnone" style="width: 522px"><a href="http://photohito.com/photo/155367"><img style="border:0 initial initial;" src="http://photohito.com/uploads/photo6/user5266/b48412dc583c6c17f0a3ad1532cecab4/b48412dc583c6c17f0a3ad1532cecab4_m.jpg" border="0" alt="" width="512" height="342" /></a><p class="wp-caption-text">PENTAX DA 14mm F2.8 ED</p></div>
<h4>長崎市内の路面電車</h4>
<div class="wp-caption alignnone" style="width: 352px"><a href="http://photohito.com/photo/155364"><img style="border:0 initial initial;" src="http://photohito.com/uploads/photo6/user5266/c979635ca58f48c2ec9d6f267d764247/c979635ca58f48c2ec9d6f267d764247_m.jpg" border="0" alt="" width="342" height="512" /></a><p class="wp-caption-text">PENTAX DA 18-55mm F3.5-5.6 AL II</p></div>
<h4>有明海</h4>
<div class="wp-caption alignnone" style="width: 344px"><a href="http://photohito.com/photo/155371"><img style="border:0 initial initial;" src="http://photohito.com/uploads/photo6/user5266/832932737028dca5c1fd948c1407ee04/832932737028dca5c1fd948c1407ee04_m.jpg" border="0" alt="" width="334" height="499" /></a><p class="wp-caption-text">PENTAX DA 18-55mm F3.5-5.6 AL II</p></div>
<h4>四明荘</h4>
<div class="wp-caption alignnone" style="width: 522px"><a href="http://photohito.com/photo/155372"><img style="border:0 initial initial;" src="http://photohito.com/uploads/photo6/user5266/e6948b8a222f20d679420aaaec124f30/e6948b8a222f20d679420aaaec124f30_m.jpg" border="0" alt="" width="512" height="342" /></a><p class="wp-caption-text">PENTAX DA 18-55mm F3.5-5.6 AL II</p></div>
<h4>鮎帰りの滝</h4>
<div class="wp-caption alignnone" style="width: 522px"><a href="http://photohito.com/photo/155376"><img style="border:0 initial initial;" src="http://photohito.com/uploads/photo6/user5266/cd01dfc86770c72ae0055c904f1fc5ed/cd01dfc86770c72ae0055c904f1fc5ed_m.jpg" border="0" alt="" width="512" height="342" /></a><p class="wp-caption-text">PENTAX DA 14mm F2.8 ED</p></div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=196&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/04/28/%e9%95%b7%e5%b4%8e%e6%97%85%e8%a1%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>

		<media:content url="http://photohito.com/uploads/photo6/user5266/b48412dc583c6c17f0a3ad1532cecab4/b48412dc583c6c17f0a3ad1532cecab4_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/c979635ca58f48c2ec9d6f267d764247/c979635ca58f48c2ec9d6f267d764247_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/832932737028dca5c1fd948c1407ee04/832932737028dca5c1fd948c1407ee04_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/e6948b8a222f20d679420aaaec124f30/e6948b8a222f20d679420aaaec124f30_m.jpg" medium="image" />

		<media:content url="http://photohito.com/uploads/photo6/user5266/cd01dfc86770c72ae0055c904f1fc5ed/cd01dfc86770c72ae0055c904f1fc5ed_m.jpg" medium="image" />
	</item>
		<item>
		<title>OKL4 3.0 for SH7780</title>
		<link>http://hirish.wordpress.com/2009/04/13/okl4-30-for-sh7780/</link>
		<comments>http://hirish.wordpress.com/2009/04/13/okl4-30-for-sh7780/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 07:45:54 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[OKL4]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=189</guid>
		<description><![CDATA[KTESTはパスするようになったのでソースコードを公開します。動かすためにはSH2007か同等のコンピュータが必要になります。
OKL4 3.0 for SH7780
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=189&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>KTESTはパスするようになったのでソースコードを公開します。動かすためには<a href="http://sh2000.sh-linux.org/sh2007.html" target="_blank">SH2007</a>か同等のコンピュータが必要になります。</p>
<p><a href="http://www.dcl.info.waseda.ac.jp/~ishikawa/okl4.html" target="_blank">OKL4 3.0 for SH7780</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/189/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=189&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/04/13/okl4-30-for-sh7780/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>
	</item>
		<item>
		<title>4月前期の開発日誌</title>
		<link>http://hirish.wordpress.com/2009/04/13/4%e6%9c%88%e5%89%8d%e6%9c%9f%e3%81%ae%e9%96%8b%e7%99%ba%e6%97%a5%e8%aa%8c/</link>
		<comments>http://hirish.wordpress.com/2009/04/13/4%e6%9c%88%e5%89%8d%e6%9c%9f%e3%81%ae%e9%96%8b%e7%99%ba%e6%97%a5%e8%aa%8c/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 07:42:42 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[OKL4]]></category>
		<category><![CDATA[開発日誌]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=187</guid>
		<description><![CDATA[2009-04-12


L4_Mutexが失敗する。


2009-04-11


割り込みを有功にした。


SH7780では割り込みのマスクを解除するだけでなく、割り込みの優先度を２以上にしなければならなかった。




Pckは５０MHz。ティックは１０ms。Pck/4のタイマーで１０msを測るには？


TMUの割り込み要因がクリアされていない。


TMU_TCRのUNFをクリアしなければならない。




キャッシュをフラッシュする区間を割り込み禁止にしていたのだが、これはその区間外が割り込み許可であることが前提。ところが、実際には、まわりの区間は 割り込み許可である。キャッシュをフラッシュした後も割り込み禁止でなければならないのだが、割り込みを許可してしまっていた。


カーネルモードでの割り込みの処理に間違いがあった。


以上、Rev.125


結果、KTESTが最後まで走るようになった！


2009-04-10


CACHE0600で落ちる。


キャッシュをフラッシュする際にアドレスが有効かどうか調べる機能をONにする。




CACHE0600の状況を修正する過程でページフォルトが処理されない問題が発生。


UTCB参照アドレスのキャッシュが更新されていない。


（ワークアラウンド） UTCB参照アドレスのUTLBエントリをライトスルーにすることでなんとなく動いているが…Rev.120


大量に出ていたinvalid page faultも嘘のように消えてしまった。


UTCB参照アドレスをキャッシング不可にした。






TODO UTCB参照ページをキャッシュするかどうかについては、調査が必要。


L4_NotifyがエラーでかえってくるIPC3400


システムコールを修正。Rev.121




KMEM02でUTCBの上限値を設定。Rev.122


L4_Yieldでブロックする。


どうやらタイマーが有功になっていないみたいだ。




2009-04-09


IPCがうまく行っていない。


スレッド1がスレッド2を生成し、スレッド2にBlock Sendする。スレッド2はまだ走っていないので、このBlock Sendは一旦スケジューリングキューに登録される。スレッド2はページャと通信し、メモリページを取得する。スレッド2はスレッド1からのメッセージを 受信する。


最後のスレッド2がスレッド1からのメッセージを受信するところが、受信されていない。


スレッド1からスレッド2へのIPCはコンティニュエーションを使って復帰される。(restart_ipc)


restart_ipcはSYS_IPC_RESTART（アーキテクチャ依存コード）を呼び出す。SYS_IPC_RESTARTはcall_with_asm_continuation（アーキテクチャ依存コード）を呼び出す。


call_with_asm_continuationが正しく状態を復帰していなかった。


この関数を実装した当初は、continuationを呼び出すものだと思っていたので、continuationにジャンプしていたが、これは間違い。


正しくは、continuationをPRレジスタに格納し、functionを呼び出さなければならない。Rev.116






新しくアドレス空間を生成した時にkmem_resourceが確保されていないようだ。


kmem_resourceはどのタイミングで確保されるのか？


この場合には、そもそもkmem_resourceを使ってはいけない。kmem_resourceはUTCB参照ページを参照するページテーブルエント リの確保に使われている。つまり、このページテーブルエントリを作成するのが間違いということになる。幸いなことに、UTCB参照ページを共有ページにす ればページテーブルエントリの確保は必要なくなる。ただし、以下の条件を満たす必要がある。


UTCB参照ページはTLBから追い出されない。


UTCB参照ページのエントリはTLBの中で最大一つ。




直した。Rev.119




キャッシュテストで落ちる。


2009-04-08


ページフォルト（TLB例外）後、ページフォルトハンドラが例外アドレスをマッピングする。この操作はアドレスをページテーブルに登録するだけで、TLB に登録するわけではない。したがって、ページフォルトを発生したスレッドに一旦処理は戻り、再び、TLB例外を発生させ、TLBをフィルするという流れに なっていた。


ページテーブル登録後にTLBをフィルするように変更。Rev.113






（ワークアラウンド） ipc_handler内でTLBにないUTCBアドレスにアクセスする可能性がある。UTCBアドレスはP0領域の仮想アドレスなのでTLB例外を発生 させる。現在の実装では、ipc_handlerは割り込み禁止区間に設定されている。そのため、TLBにないUTCBアドレスにアクセスすると処理が進 まなくなり、クラッシュする。


（方法１）割り込み禁止区間を撤廃する


TLB例外以外の優先度の高い例外や割り込みが発生する可能性がある。


データTLB例外の優先順位は6番め。






（方法２）物理アドレスでUTCBにアクセスする。


TCB経由でUTCBの物理アドレスを得られる。




とりあえず方法1を試す。動作はするが、最終的にはエラーが出てKDBに落ちる。


kernel access raised user page fault (space.cc l212)




ここから得られる結論は、そもそもカーネルモードでUTCBに対するTLB例外を発生させてはならないということである。


方法2でうまくいった。




2009-04-07


ページテーブルエントリが思ったように更新されていない。


ページテーブルエントリのバグ（pgent_t::clear）




get_current_kmem_resourceが失敗する。アサーションに引っかかる line 149 @ kmem_resource.cc。


generic_space_t::activate内でUTCB参照ページのマッピングを常に新しく作成していたため、メモリリークしていた。




ipc_syscall_return内でUTCBにアクセスするとき、ページフォルトが発生する場合がある。この場合に対処していなかったため、クラッシュしていた。


2009-04-06


（ワークアラウンド） データキャッシュにもTLBにも存在しないエントリをライトバック（OCBP）しようとして、クラッシュしている。Rev.108


ページテーブルに登録されているが、TLBに登録されていない場合には次の二つが考えられる。


マッピングしたがそのアドレスにアクセスしていない。


マッピング後アクセスし一旦はTLBに登録されたが、追い出された。




2.の場合はデータはキャッシュされるのでOCBP命令は成功する。




2009-04-02


ktestがアボートされる。


irqのリストが取れないのが原因。ElfWeaverがNO_DEVICE_IRQ_LISTという構造体をアロケーションするのだが、どのような仕組みでアロケーションするのかよくわからない。


とりあえずアサーションを無視。




ThreadControlでアサーションに引っかかる。


システムコールの引数の処理の間違いだった。




IPCでデッドロック


IPCの受信時に送信元を正しく返していなかった。Rev.101




KDBのスタック管理にバグがあった。修正。Rev.99


KDB呼び出しのレジスタ管理にバグがあった。修正。Rev.100


IPCのメッセージが配送されない。


KDB呼び出しがレジスタを破壊していた。Rev.105




2009-04-01


IPCがおかしい。ブロックしない。


UTCBをカーネルが読み取れていない。L4_WaitはフラグをセットしL4_Ipcを呼び出す。このフラグがセットされることでIPCはブロックする 仕組みになっている。このフラグはMsgTagにセットされ、UTCBに保存される。カーネルはUTCBからこのフラグを読み出す。カーネルがブロックし ないということは、このフラグを正しく読み出せていないことを意味する。


IPCの実装が未完成だった。Rev.93




UTCBでTLB多重ヒット例外が出る。


generic_space_t::activate内


UTCBを参照するためのページは共有ページに設定されていたのだが、この設定ではASIDが比較されない。結果としてTLB多重ヒット例外を発生させていた。Rev.95


メモ：UTCB参照ページは共有にすることでUTLBを節約できる。




       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=187&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h3>2009-04-12</h3>
<ul>
<li class="level1">
<div class="li">L4_Mutexが失敗する。</div>
</li>
</ul>
<h3>2009-04-11</h3>
<ul>
<li class="level1">
<div class="li">割り込みを有功にした。</div>
<ul>
<li class="level2">
<div class="li">SH7780では割り込みのマスクを解除するだけでなく、割り込みの優先度を２以上にしなければならなかった。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">Pckは５０MHz。ティックは１０ms。Pck/4のタイマーで１０msを測るには？</div>
</li>
<li class="level1">
<div class="li">TMUの割り込み要因がクリアされていない。</div>
<ul>
<li class="level2">
<div class="li">TMU_TCRのUNFをクリアしなければならない。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">キャッシュをフラッシュする区間を割り込み禁止にしていたのだが、これはその区間外が割り込み許可であることが前提。ところが、実際には、まわりの区間は 割り込み許可である。キャッシュをフラッシュした後も割り込み禁止でなければならないのだが、割り込みを許可してしまっていた。</div>
</li>
<li class="level1">
<div class="li">カーネルモードでの割り込みの処理に間違いがあった。</div>
</li>
<li class="level1">
<div class="li">以上、Rev.125</div>
</li>
<li class="level1">
<div class="li">結果、KTESTが最後まで走るようになった！</div>
</li>
</ul>
<h3>2009-04-10</h3>
<ul>
<li class="level1">
<div class="li">CACHE0600で落ちる。</div>
<ul>
<li class="level2">
<div class="li">キャッシュをフラッシュする際にアドレスが有効かどうか調べる機能をONにする。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">CACHE0600の状況を修正する過程でページフォルトが処理されない問題が発生。</div>
<ul>
<li class="level2">
<div class="li">UTCB参照アドレスのキャッシュが更新されていない。</div>
<ul>
<li class="level3">
<div class="li"><del><strong>（ワークアラウンド）</strong></del> UTCB参照アドレスのUTLBエントリをライトスルーにすることでなんとなく動いているが…Rev.120</div>
</li>
<li class="level3">
<div class="li">大量に出ていたinvalid page faultも嘘のように消えてしまった。</div>
</li>
<li class="level3">
<div class="li">UTCB参照アドレスをキャッシング不可にした。</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="level1">
<div class="li"><strong>TODO</strong> UTCB参照ページをキャッシュするかどうかについては、調査が必要。</div>
</li>
<li class="level1">
<div class="li">L4_NotifyがエラーでかえってくるIPC3400</div>
<ul>
<li class="level2">
<div class="li">システムコールを修正。Rev.121</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">KMEM02でUTCBの上限値を設定。Rev.122</div>
</li>
<li class="level1">
<div class="li">L4_Yieldでブロックする。</div>
<ul>
<li class="level2">
<div class="li">どうやらタイマーが有功になっていないみたいだ。</div>
</li>
</ul>
</li>
</ul>
<h3>2009-04-09</h3>
<ul>
<li class="level1">
<div class="li">IPCがうまく行っていない。</div>
<ul>
<li class="level2">
<div class="li">スレッド1がスレッド2を生成し、スレッド2にBlock Sendする。スレッド2はまだ走っていないので、このBlock Sendは一旦スケジューリングキューに登録される。スレッド2はページャと通信し、メモリページを取得する。スレッド2はスレッド1からのメッセージを 受信する。</div>
</li>
<li class="level2">
<div class="li">最後のスレッド2がスレッド1からのメッセージを受信するところが、受信されていない。</div>
</li>
<li class="level2">
<div class="li">スレッド1からスレッド2へのIPCはコンティニュエーションを使って復帰される。(restart_ipc)</div>
</li>
<li class="level2">
<div class="li">restart_ipcはSYS_IPC_RESTART（アーキテクチャ依存コード）を呼び出す。SYS_IPC_RESTARTはcall_with_asm_continuation（アーキテクチャ依存コード）を呼び出す。</div>
</li>
<li class="level2">
<div class="li">call_with_asm_continuationが正しく状態を復帰していなかった。</div>
<ul>
<li class="level3">
<div class="li">この関数を実装した当初は、continuationを呼び出すものだと思っていたので、continuationにジャンプしていたが、これは間違い。</div>
</li>
<li class="level3">
<div class="li">正しくは、continuationをPRレジスタに格納し、functionを呼び出さなければならない。Rev.116</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="level1">
<div class="li">新しくアドレス空間を生成した時にkmem_resourceが確保されていないようだ。</div>
<ul>
<li class="level2">
<div class="li">kmem_resourceはどのタイミングで確保されるのか？</div>
</li>
<li class="level2">
<div class="li">この場合には、そもそもkmem_resourceを使ってはいけない。kmem_resourceはUTCB参照ページを参照するページテーブルエント リの確保に使われている。つまり、このページテーブルエントリを作成するのが間違いということになる。幸いなことに、UTCB参照ページを共有ページにす ればページテーブルエントリの確保は必要なくなる。ただし、以下の条件を満たす必要がある。</div>
<ul>
<li class="level3">
<div class="li">UTCB参照ページはTLBから追い出されない。</div>
</li>
<li class="level3">
<div class="li">UTCB参照ページのエントリはTLBの中で最大一つ。</div>
</li>
</ul>
</li>
<li class="level2">
<div class="li">直した。Rev.119</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">キャッシュテストで落ちる。</div>
</li>
</ul>
<h3>2009-04-08</h3>
<ul>
<li class="level1">
<div class="li">ページフォルト（TLB例外）後、ページフォルトハンドラが例外アドレスをマッピングする。この操作はアドレスをページテーブルに登録するだけで、TLB に登録するわけではない。したがって、ページフォルトを発生したスレッドに一旦処理は戻り、再び、TLB例外を発生させ、TLBをフィルするという流れに なっていた。</div>
<ul>
<li class="level2">
<div class="li">ページテーブル登録後にTLBをフィルするように変更。Rev.113</div>
</li>
</ul>
</li>
</ul>
<ul>
<li class="level1">
<div class="li"><strong>（ワークアラウンド）</strong> ipc_handler内でTLBにないUTCBアドレスにアクセスする可能性がある。UTCBアドレスはP0領域の仮想アドレスなのでTLB例外を発生 させる。現在の実装では、ipc_handlerは割り込み禁止区間に設定されている。そのため、TLBにないUTCBアドレスにアクセスすると処理が進 まなくなり、クラッシュする。</div>
<ul>
<li class="level2">
<div class="li">（方法１）割り込み禁止区間を撤廃する</div>
<ul>
<li class="level3">
<div class="li">TLB例外以外の優先度の高い例外や割り込みが発生する可能性がある。</div>
<ul>
<li class="level4">
<div class="li">データTLB例外の優先順位は6番め。</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="level2">
<div class="li">（方法２）物理アドレスでUTCBにアクセスする。</div>
<ul>
<li class="level3">
<div class="li">TCB経由でUTCBの物理アドレスを得られる。</div>
</li>
</ul>
</li>
<li class="level2">
<div class="li">とりあえず方法1を試す。動作はするが、最終的にはエラーが出てKDBに落ちる。</div>
<ul>
<li class="level3">
<div class="li">kernel access raised user page fault (space.cc l212)</div>
</li>
</ul>
</li>
<li class="level2">
<div class="li">ここから得られる結論は、そもそもカーネルモードでUTCBに対するTLB例外を発生させてはならないということである。</div>
</li>
<li class="level2">
<div class="li">方法2でうまくいった。</div>
</li>
</ul>
</li>
</ul>
<h3>2009-04-07</h3>
<ul>
<li class="level1">
<div class="li">ページテーブルエントリが思ったように更新されていない。</div>
<ul>
<li class="level2">
<div class="li">ページテーブルエントリのバグ（pgent_t::clear）</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">get_current_kmem_resourceが失敗する。アサーションに引っかかる line 149 @ kmem_resource.cc。</div>
<ul>
<li class="level2">
<div class="li">generic_space_t::activate内でUTCB参照ページのマッピングを常に新しく作成していたため、メモリリークしていた。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">ipc_syscall_return内でUTCBにアクセスするとき、ページフォルトが発生する場合がある。この場合に対処していなかったため、クラッシュしていた。</div>
</li>
</ul>
<h3>2009-04-06</h3>
<ul>
<li class="level1">
<div class="li"><strong>（ワークアラウンド）</strong> データキャッシュにもTLBにも存在しないエントリをライトバック（OCBP）しようとして、クラッシュしている。Rev.108</div>
<ul>
<li class="level2">
<div class="li">ページテーブルに登録されているが、TLBに登録されていない場合には次の二つが考えられる。</div>
<ol>
<li class="level3">
<div class="li">マッピングしたがそのアドレスにアクセスしていない。</div>
</li>
<li class="level3">
<div class="li">マッピング後アクセスし一旦はTLBに登録されたが、追い出された。</div>
</li>
</ol>
</li>
<li class="level2">
<div class="li">2.の場合はデータはキャッシュされるのでOCBP命令は成功する。</div>
</li>
</ul>
</li>
</ul>
<h3>2009-04-02</h3>
<ul>
<li class="level1">
<div class="li">ktestがアボートされる。</div>
<ul>
<li class="level2">
<div class="li">irqのリストが取れないのが原因。ElfWeaverがNO_DEVICE_IRQ_LISTという構造体をアロケーションするのだが、どのような仕組みでアロケーションするのかよくわからない。</div>
</li>
<li class="level2">
<div class="li">とりあえずアサーションを無視。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">ThreadControlでアサーションに引っかかる。</div>
<ul>
<li class="level2">
<div class="li">システムコールの引数の処理の間違いだった。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">IPCでデッドロック</div>
<ul>
<li class="level2">
<div class="li">IPCの受信時に送信元を正しく返していなかった。Rev.101</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">KDBのスタック管理にバグがあった。修正。Rev.99</div>
</li>
<li class="level1">
<div class="li">KDB呼び出しのレジスタ管理にバグがあった。修正。Rev.100</div>
</li>
<li class="level1">
<div class="li">IPCのメッセージが配送されない。</div>
<ul>
<li class="level2">
<div class="li">KDB呼び出しがレジスタを破壊していた。Rev.105</div>
</li>
</ul>
</li>
</ul>
<h3>2009-04-01</h3>
<ul>
<li class="level1">
<div class="li">IPCがおかしい。ブロックしない。</div>
<ul>
<li class="level2">
<div class="li">UTCBをカーネルが読み取れていない。L4_WaitはフラグをセットしL4_Ipcを呼び出す。このフラグがセットされることでIPCはブロックする 仕組みになっている。このフラグはMsgTagにセットされ、UTCBに保存される。カーネルはUTCBからこのフラグを読み出す。カーネルがブロックし ないということは、このフラグを正しく読み出せていないことを意味する。</div>
</li>
<li class="level2">
<div class="li">IPCの実装が未完成だった。Rev.93</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">UTCBでTLB多重ヒット例外が出る。</div>
<ul>
<li class="level2">
<div class="li">generic_space_t::activate内</div>
</li>
<li class="level2">
<div class="li">UTCBを参照するためのページは共有ページに設定されていたのだが、この設定ではASIDが比較されない。結果としてTLB多重ヒット例外を発生させていた。Rev.95</div>
</li>
<li class="level2">
<div class="li">メモ：UTCB参照ページは共有にすることでUTLBを節約できる。</div>
</li>
</ul>
</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/187/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=187&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/04/13/4%e6%9c%88%e5%89%8d%e6%9c%9f%e3%81%ae%e9%96%8b%e7%99%ba%e6%97%a5%e8%aa%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>
	</item>
		<item>
		<title>3月の開発日誌</title>
		<link>http://hirish.wordpress.com/2009/04/11/3%e6%9c%88%e3%81%ae%e9%96%8b%e7%99%ba%e6%97%a5%e8%aa%8c/</link>
		<comments>http://hirish.wordpress.com/2009/04/11/3%e6%9c%88%e3%81%ae%e9%96%8b%e7%99%ba%e6%97%a5%e8%aa%8c/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 02:10:03 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[OKL4]]></category>
		<category><![CDATA[開発日誌]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=181</guid>
		<description><![CDATA[2009-03-31


ページテーブルエントリをフリーするときにフリーリスト（kmem_free_list）のアドレスが変（0×80000000）

kmem_free_listはkmem_tのメンバー。
 kmem_tはkmem_resource_tのメンバーになる（heap）。
 kmem_free_listは0番目のメンバーで、kmem_resource_tの中のkmem_tは0番目のメンバーなので、アドレス0×80000000はkmem_resource_tのアドレスになる。
 つまり、kmem_resource_tの配置がおかしいことになる。

kmem_resource_tはget_current_kmem_resource()で取得する。




free_utcb_area_memory()がフリーリストを書き換えてしまう。


utcbのアドレスに対応するpgentの持つ物理アドレス（utcbの物理アドレス）が0になっている。これが原因でfree_utcb_area_memoryがおかしな挙動をする。原因はUTCBのアロケーションの失敗か？


結局のところ、ページテーブルエントリの有効・無効の判断の仕方に間違いがあったということが分かった。疑わしきは自分の書いたコードである。Rev.92


2009-03-30


SpaceControlがちゃんと動かない。


2009-03-27


トラップハンドラの見直し終わり。ユーザーコンテキストをTCBに保存するようにした。Rev.83


KDBが使えるようになった。




Hello, world! Rev.85


KTESTを走らせてみる。SPACE_CONTROLでこける。コンティニュエーションのアドレスがおかしい。


2009-03-26


トラップハンドラを見直し中。コンテキストの退避と復帰、再突入の考慮など。


メモ


ユーザーモードからカーネルモードに入る（システムコール、例外、割り込み）


ユーザーコンテキストをユーザースタックに退避


カーネルスタックに切り替え


システムコール、例外、割り込みの処理


カーネルの特定の場所でプリエンプション可能になる


例外、割り込みの発生


カーネルコンテキストは破棄する


カーネルスタックをリセット


例外、割り込みの処理


終了後、コンティニュエーションを実行。TCBからレジスタを復帰。スタックはリセット。


終了後、コンティニュエーションを実行。TCBからレジスタを復帰






2009-03-25


ユーザープログラムがこけるのも当たり前、ルートタスク用のcrt0がちゃんと実装されていなかった。


おそらくHelloWorldは実行されているが、メッセージが表示されない。シリアルドライバが不完全か？


KDBコール（システムコールの一種）がおかしいので、シリアルドライバをデバッグできない。まずはKDBコールを直さなければ。


一般例外ハンドラの配置が違ってたので修正。


KDBコールは正しいようだ。


部分的に未実装なので、実装を完璧にする必要がある。






read_write_lockのアサーションに引っかかる。一時的なエラーだったみたい。


ユーザーレベルのシリアルデバイスドライバがおかしい。


2009-03-24


EXPEVTが0の問題は、とりあえず、0を読み込み例外（本来は0×40）と判断することにした。


ElfWeaverのスタックポインタの計算が間違っている？


DEFAULT_STACK_SIZE = 0x1000

def get_sp():
    virt_addr = self.stack.virt_addr
    size = self.stack.size
    return virt_addr + size
となっているけど、これではスタックポインタが次のページに行ってしまう。
def get_sp():
    virt_addr = self.stack.virt_addr
    size = self.stack.size - 4
    return virt_addr + size
とすべきだろう。


pgent_t::is_readableの判定が間違っていたので修正。


正体不明のページフォルト（0×00117550）が発生する。


正体不明ではなく、期待通りのページフォルト。しかし、カーネルが正しく処理できていない。


make_subtreeで64kページを考慮していないのが原因だった。修正。




ユーザーコンテキストが元に戻らない。例外発生前のコンテキストが例外処理後に復元されない。


tcb_tの中のktcb_tにユーザーコンテキストを保存。回復にはexception_returnを新たに実装。


8ビットイミディエイトの加算演算にはまる。結果が8ビットを越えてもキャリーしない。つまり、


0&#215;88301C60 + 0xA4 = 0&#215;88301C04となる。


上記の式の正しい答えは0&#215;88301D04




この様な場合にはイミディエイトではなくレジスタに一旦値をロードして計算する。




ユーザープログラムがアサートでこける。OKL4_ENV_HEAER_MAGICが取れていない。


2009-03-23

 TCBは空っぽではなかった。しかし、PCが指すアドレス（0×100000）には何も配置されていない。
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=181&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h3>2009-03-31</h3>
<ul>
<li>
<div class="li">ページテーブルエントリをフリーするときにフリーリスト（kmem_free_list）のアドレスが変（0×80000000）</div>
<ul>
<li>kmem_free_listはkmem_tのメンバー。</li>
<li> kmem_tはkmem_resource_tのメンバーになる（heap）。</li>
<li> kmem_free_listは0番目のメンバーで、kmem_resource_tの中のkmem_tは0番目のメンバーなので、アドレス0×80000000はkmem_resource_tのアドレスになる。</li>
<li> つまり、kmem_resource_tの配置がおかしいことになる。</li>
<li class="level2">
<div class="li">kmem_resource_tはget_current_kmem_resource()で取得する。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">free_utcb_area_memory()がフリーリストを書き換えてしまう。</div>
</li>
<li class="level1">
<div class="li">utcbのアドレスに対応するpgentの持つ物理アドレス（utcbの物理アドレス）が0になっている。これが原因でfree_utcb_area_memoryがおかしな挙動をする。原因はUTCBのアロケーションの失敗か？</div>
</li>
<li class="level1">
<div class="li">結局のところ、ページテーブルエントリの有効・無効の判断の仕方に間違いがあったということが分かった。疑わしきは自分の書いたコードである。Rev.92</div>
</li>
</ul>
<h3>2009-03-30</h3>
<ul>
<li class="level1">
<div class="li">SpaceControlがちゃんと動かない。</div>
</li>
</ul>
<h3>2009-03-27</h3>
<ul>
<li class="level1">
<div class="li">トラップハンドラの見直し終わり。ユーザーコンテキストをTCBに保存するようにした。Rev.83</div>
<ul>
<li class="level2">
<div class="li">KDBが使えるようになった。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">Hello, world! Rev.85</div>
</li>
<li class="level1">
<div class="li">KTESTを走らせてみる。SPACE_CONTROLでこける。コンティニュエーションのアドレスがおかしい。</div>
</li>
</ul>
<h3>2009-03-26</h3>
<ul>
<li class="level1">
<div class="li">トラップハンドラを見直し中。コンテキストの退避と復帰、再突入の考慮など。</div>
</li>
<li class="level1">
<div class="li">メモ</div>
<ul>
<li class="level2">
<div class="li">ユーザーモードからカーネルモードに入る（システムコール、例外、割り込み）</div>
<ul>
<li class="level3">
<div class="li">ユーザーコンテキストをユーザースタックに退避</div>
</li>
<li class="level3">
<div class="li">カーネルスタックに切り替え</div>
</li>
<li class="level3">
<div class="li">システムコール、例外、割り込みの処理</div>
</li>
<li class="level3">
<div class="li">カーネルの特定の場所でプリエンプション可能になる</div>
</li>
<li class="level3">
<div class="li">例外、割り込みの発生</div>
</li>
<li class="level3">
<div class="li">カーネルコンテキストは破棄する</div>
</li>
<li class="level3">
<div class="li">カーネルスタックをリセット</div>
</li>
<li class="level3">
<div class="li">例外、割り込みの処理</div>
</li>
<li class="level3">
<div class="li">終了後、コンティニュエーションを実行。TCBからレジスタを復帰。スタックはリセット。</div>
</li>
<li class="level3">
<div class="li">終了後、コンティニュエーションを実行。TCBからレジスタを復帰</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>2009-03-25</h3>
<ul>
<li class="level1">
<div class="li">ユーザープログラムがこけるのも当たり前、ルートタスク用のcrt0がちゃんと実装されていなかった。</div>
</li>
<li class="level1">
<div class="li">おそらくHelloWorldは実行されているが、メッセージが表示されない。シリアルドライバが不完全か？</div>
<ul>
<li class="level2">
<div class="li">KDBコール（システムコールの一種）がおかしいので、シリアルドライバをデバッグできない。まずはKDBコールを直さなければ。</div>
<ul>
<li class="level3">
<div class="li">一般例外ハンドラの配置が違ってたので修正。</div>
</li>
<li class="level3">
<div class="li">KDBコールは正しいようだ。</div>
</li>
<li class="level3">
<div class="li">部分的に未実装なので、実装を完璧にする必要がある。</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="level1">
<div class="li"><del>read_write_lockのアサーションに引っかかる。</del>一時的なエラーだったみたい。</div>
</li>
<li class="level1">
<div class="li">ユーザーレベルのシリアルデバイスドライバがおかしい。</div>
</li>
</ul>
<h3>2009-03-24</h3>
<ul>
<li class="level1">
<div class="li">EXPEVTが0の問題は、とりあえず、0を読み込み例外（本来は0×40）と判断することにした。</div>
</li>
<li class="level1">
<div class="li">ElfWeaverのスタックポインタの計算が間違っている？</div>
</li>
</ul>
<pre class="code" style="padding-left:60px;">DEFAULT_STACK_SIZE = 0x1000

def get_sp():
    virt_addr = self.stack.virt_addr
    size = self.stack.size
    return virt_addr + size</pre>
<p>となっているけど、これではスタックポインタが次のページに行ってしまう。</p>
<pre class="code" style="padding-left:60px;">def get_sp():
    virt_addr = self.stack.virt_addr
    size = self.stack.size - 4
    return virt_addr + size</pre>
<p>とすべきだろう。</p>
<ul>
<li class="level1">
<div class="li">pgent_t::is_readableの判定が間違っていたので修正。</div>
</li>
<li class="level1">
<div class="li">正体不明のページフォルト（0×00117550）が発生する。</div>
<ul>
<li class="level2">
<div class="li">正体不明ではなく、期待通りのページフォルト。しかし、カーネルが正しく処理できていない。</div>
</li>
<li class="level2">
<div class="li">make_subtreeで64kページを考慮していないのが原因だった。修正。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">ユーザーコンテキストが元に戻らない。例外発生前のコンテキストが例外処理後に復元されない。</div>
<ul>
<li class="level2">
<div class="li">tcb_tの中のktcb_tにユーザーコンテキストを保存。回復にはexception_returnを新たに実装。</div>
</li>
<li class="level2">
<div class="li">8ビットイミディエイトの加算演算にはまる。結果が8ビットを越えてもキャリーしない。つまり、</div>
<ul>
<li class="level3">
<div class="li">0&#215;88301C60 + 0xA4 = 0&#215;88301C04となる。</div>
</li>
<li class="level3">
<div class="li">上記の式の正しい答えは0&#215;88301D04</div>
</li>
</ul>
</li>
<li class="level2">
<div class="li">この様な場合にはイミディエイトではなくレジスタに一旦値をロードして計算する。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">ユーザープログラムがアサートでこける。OKL4_ENV_HEAER_MAGICが取れていない。</div>
</li>
</ul>
<h3>2009-03-23</h3>
<ul>
<li> TCBは空っぽではなかった。しかし、PCが指すアドレス（0×100000）には何も配置されていない。
<ul> HelloWorldが期待通りにマッピングされていないのが原因のようだ。map_regionを見直す。</ul>
</li>
<li> TLBミスハンドラがオフセット0×400にない！</li>
<li> クラッシュの原因はTLBミスハンドラにあるようだ。
<ul>
<li> TLBミスハンドラの冒頭でユーザーコンテキストをユーザースタックに退避する。しかしながら、ユーザースタックはTLBにエントリがない。これが原因でダブルフォルトが発生し、カーネルがリセットされる。</li>
<li> generic_space_t::activate内でユーザースタックをTLBエントリに追加した。</li>
</ul>
</li>
<li> TLBミスハンドラで例外コードがとれない。EXPEVTを読み込むと値が0。</li>
</ul>
<h3>2009-03-19</h3>
<ul>
<li class="level1">
<div class="li">ページマッピングがうまくいかない。カーネルモードでP0領域にアクセスしようとしてこける。UTLBはちゃんとセットしているんだが。。。</div>
<ul>
<li class="level2">
<div class="li">読み込みは成功しているようだが、書き込みはダメだ。</div>
</li>
<li class="level2">
<div class="li">ライトバックのページを複数箇所にマッピングする時はキャッシュをフラッシュする必要がある。</div>
</li>
<li class="level2">
<div class="li">下記のページテーブルの構成に付随した問題だった。ページサイズを直接指定することで取り合えず解決。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">ページテーブルの構成はTODO</div>
<ul>
<li class="level2">
<div class="li">add_mappingで指定したページサイズとlookup_mappingで取れるページサイズが違う。ページテーブルの構成がコアの実装と合っていないようだ。</div>
</li>
<li class="level2">
<div class="li">直した。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">initial_to_userでTCBが空っぽ。なのでリセットされてしまう。TCBをどこかでセットアップしているはずなんだが…</div>
</li>
</ul>
<h3>2009-03-18</h3>
<ul>
<li class="level1">
<div class="li">ページマッピングでパニック。ページサイズが0になっている。アドレスが0×117400となっており、1kアラインである。これはおかしい。設定ファイル（machines.py）で1kページを許可しないようにしたら直った。本質的な解決ではないかもしれない。</div>
</li>
<li class="level1">
<div class="li">パニックするようなエラーはでなくなった。ちゃんと動いている？HelloWorldが使うシリアルポートドライバがまだ出来ていないので確認できない。</div>
</li>
<li class="level1">
<div class="li">シリアルポートデバイスドライバを実装。でもメッセージは出ない。どこかでハングしているようだ。</div>
<ul>
<li class="level2">
<div class="li">それもそのはず。switch_toが未実装でコンテキストスイッチが起きていなかった。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">switch_to実装も新たなバグ。UTCBの実装を見直さなければならない。</div>
</li>
</ul>
<h3>2009-03-17</h3>
<ul>
<li class="level1">
<div class="li">キャッシュのコードを修正。オペランドキャッシュのフラッシュのためにVIRT_RAM_BASE（0×88210000）を使っていたのだが、実はこの アドレスにはグローバル変数が格納されおり、このグローバル変数の変更がライトバックされていない状態でキャッシュをフラッシュしようとすると、今のアル ゴリズムではグローバル変数が破壊されてしまう。VIRT_RAM_BASEを止めて、KERNEL_AREA_START（0×80000000）に変 更。</div>
<ul>
<li class="level2">
<div class="li">0×88000000とすべきか？</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">トレースを表示するように変更。コマンドラインで指定する方法を探すのに手間取った。カーネルソースでは、VERBOSE_INITというディレクティブ でトレースの表示をコントロールしている。これを単にコマンドラインでVERBOSE_INIT=trueとすれば、トレースの表示が有効になる。他の ディレクティブも同様と思われる。</div>
</li>
<li class="level1">
<div class="li">small_alloc_t::allocateのメモリテストでエラー。check_poisoned_areaで引っかかる。メモリが汚染されているらしい。</div>
<ul>
<li class="level2">
<div class="li">他の誰かが使っている</div>
</li>
<li class="level2">
<div class="li">オーバーフロー</div>
</li>
<li class="level2">
<div class="li">キャッシュ操作の間違い</div>
</li>
</ul>
</li>
</ul>
<pre class="code" style="padding-left:60px;">void *
small_alloc_t::allocate(bool zeroed)
{
    ...
    if (!first_free) {
        /* ここでは４Kのブロックを確保 */
        first_free = allocate_block(mem_group);
        if (!first_free) {
            return NULL;
        }
        /* 確保したブロックを汚染しておく */
        poison_area(get_object(first_free, 0), objs_per_block * obj_size, KMEM_POISON_FREE);
    }

    /* ファーストフィットでフリーブロックを確保 */
    int position = bitmap_findfirstset(first_free-&gt;get_bitmap(), objs_per_block);
    void* object = get_object(first_free, position);
    bitmap_clear(first_free-&gt;get_bitmap(), position);

    /* 現在のブロックがすべて使われているならば、first_freeをアップデート */
    while (bitmap_findfirstset(first_free-&gt;get_bitmap(), objs_per_block) == -1) {
        first_free = first_free-&gt;next;
        if (!first_free) {
            break;
        }
    }
    num++;

    check_poisoned_area(object, obj_size, KMEM_POISON_FREE, object);
    ...
}</pre>
<pre class="code" style="padding-left:60px;">void
poison_area(void* addr, word_t size, unsigned char poison_value)
{
    memset(addr, poison_value, size);
}</pre>
<pre class="code" style="padding-left:60px;">void
check_poisoned_area(void* addr, word_t size, unsigned char poison_value, void* obj_addr)
{
    unsigned char* p = (unsigned char*)addr;
    while (size--) {
        if (*p != poison_value) {
            enter_kdebug("poison");
        }
        ++p;
    }
}</pre>
<ul>
<li class="level1">
<div class="li">原因はmsbを実装していないことにあった。</div>
</li>
</ul>
<ul>
<li class="level1">
<div class="li">l1_entry_tとl2_entry_tのサイズがおかしくなっていたせいで、メモリアロケーションがおかしなことになっていた。</div>
<ul>
<li class="level2">
<div class="li">l1_entry_tとl2_entry_tは4バイトでなければならないのだが、ビット指定を間違えていて33ビットのデータ構造になってしまっていた。</div>
</li>
</ul>
</li>
</ul>
<h3>2009-03-16：カーネルが動き始める</h3>
<div class="level2">
<ul>
<li class="level1">
<div class="li">MMUCRなどを更新した際に、任意のアドレスでICBIを発行するのだが、その任意のアドレスを0×1000とするとクラッシュする。</div>
<ul>
<li class="level2">
<div class="li">0×80000000として回避した。</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li"><strong>最初のカーネルメッセージが表示された！</strong></div>
</li>
</ul>
<pre class="code">  OKL4 - (provider: Open Kernel Labs) built on Mar 16 2009 14:50:15 using gcc version 3.4.5.</pre>
<ul>
<li class="level1">
<div class="li">run_init_scriptでこける</div>
<ul>
<li class="level2">
<div class="li">phys_to_virtのバグ。Machine.pyを修正。</div>
</li>
<li class="level2">
<div class="li">Elf Weaverが物理アドレスでinit scriptを書き込んでいる一方で、カーネルは仮想アドレスでそのスクリプトをロードする。</div>
</li>
</ul>
</li>
</ul>
</div>
<h3>2009-03-13</h3>
<div class="level2">
<ul>
<li class="level1">
<div class="li">いよいよ実機で走らせつつ、デバッグを開始する。</div>
<ul>
<li class="level2">
<div class="li">まずはデバッガ用のウィンドウズのインストールから。</div>
</li>
</ul>
</li>
</ul>
</div>
<h3>2009-03-12：ビルドが通るようになる</h3>
<div class="level2">
<ul>
<li class="level1">
<div class="li">ldスクリプトのしょうもないバグを修正。ビルドが大分進む用になった。</div>
</li>
<li class="level1">
<div class="li">crt0_rootserver.sppを実装したら、<strong>ビルドが通った</strong>！</div>
</li>
</ul>
</div>
<h3>2009-03-11</h3>
<div class="level2">
<ul>
<li class="level1">
<div class="li">とりあえずカーネル内の空の関数は実装した。</div>
</li>
<li class="level1">
<div class="li">ライブラリの実装に取りかかる。</div>
<ul>
<li class="level2">
<div class="li">KDBインターフェースのテンプレートを作成</div>
</li>
<li class="level2">
<div class="li">実装完了か？</div>
</li>
</ul>
</li>
<li class="level1">
<div class="li">シリアルデバイスドライバがないのでビルドが停止する。</div>
</li>
</ul>
</div>
<h3>2009-03-10</h3>
<ul>
<li> トラップハンドラ実装の続き。</li>
<li> 例外ハンドラの実装。</li>
<li> KDBインターフェースを実装しなければならない。lib/l4/include/syscall_asm.hにKDB用のシステムコール番号だけは予約した。</li>
</ul>
<h3>2009-03-09</h3>
<ul>
<li> トラップハンドラを大幅に変更。例外コードをオフセットにして各ベクタに飛ぶようにした。</li>
<li> コンティニュエーションの仕組みと役割を理解した。</li>
</ul>
<h3>2009-03-06</h3>
<ul>
<li> レジスタのネーミングを仕様書どおりにする。いままでは可読性を高めようと独自に名前を変更していたが、かえって仕様書との読み替えが面倒になるのではないかと考えた。その代わり、コメントで可読性を補うことにする。</li>
</ul>
<h3>2009-03-05</h3>
<ul>
<li> 割り込みがいやらしい。L4ではSHでいうところの外部割り込みしか想定していないようだ。内部割り込みもユーザ側に投げる必要があると思うので、その場 合、内部・外部割り込みを一つの空間で管理しなければならないが、各割り込みは必ずしも連番になっていない。一方でL4内部では配列で割り込みの管理をし ている。割り込みの番号空間を連番空間にマッピングする関数が必要なのだが。。。</li>
<li> 結局、虫食いになってもいいから、大きめの配列を用意することにした。将来的に今穴の開いている割り込み番号に何かが加わるかもしれないし。</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=181&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/04/11/3%e6%9c%88%e3%81%ae%e9%96%8b%e7%99%ba%e6%97%a5%e8%aa%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>
	</item>
		<item>
		<title>白浜出張（３）</title>
		<link>http://hirish.wordpress.com/2009/03/09/%e7%99%bd%e6%b5%9c%e5%87%ba%e5%bc%b5%ef%bc%88%ef%bc%93%ef%bc%89/</link>
		<comments>http://hirish.wordpress.com/2009/03/09/%e7%99%bd%e6%b5%9c%e5%87%ba%e5%bc%b5%ef%bc%88%ef%bc%93%ef%bc%89/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 08:52:06 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Sigma 30mm F1.4 EX DC]]></category>
		<category><![CDATA[和歌山]]></category>
		<category><![CDATA[和歌山城]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=170</guid>
		<description><![CDATA[帰りに和歌山に寄りました。天候が雨だったせいか、和歌山城にはほとんど人がいませんでした。東急インの地下にある安愚楽という小料理屋のごはんは美味しかったです。
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=170&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>帰りに和歌山に寄りました。天候が雨だったせいか、和歌山城にはほとんど人がいませんでした。東急インの地下にある安愚楽という小料理屋のごはんは美味しかったです。</p>
<div id="attachment_171" class="wp-caption alignnone" style="width: 438px"><img class="size-full wp-image-171" title="imgp2530" src="http://hirish.files.wordpress.com/2009/03/imgp2530.jpg?w=428&#038;h=640" alt="Sigma 30mm F1.4 EX DC" width="428" height="640" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
<div id="attachment_172" class="wp-caption alignnone" style="width: 438px"><img class="size-full wp-image-172" title="imgp2549" src="http://hirish.files.wordpress.com/2009/03/imgp2549.jpg?w=428&#038;h=640" alt="Sigma 30mm F1.4 EX DC" width="428" height="640" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
<div id="attachment_173" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-173" title="imgp2553" src="http://hirish.files.wordpress.com/2009/03/imgp2553.jpg?w=500&#038;h=334" alt="Sigma 30mm F1.4 EX DC" width="500" height="334" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
<div id="attachment_174" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-174" title="imgp2555" src="http://hirish.files.wordpress.com/2009/03/imgp2555.jpg?w=500&#038;h=334" alt="Sigma 30mm F1.4 EX DC" width="500" height="334" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
<div id="attachment_175" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-175" title="imgp2569" src="http://hirish.files.wordpress.com/2009/03/imgp2569.jpg?w=500&#038;h=334" alt="Sigma 30mm F1.4 EX DC" width="500" height="334" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=170&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/03/09/%e7%99%bd%e6%b5%9c%e5%87%ba%e5%bc%b5%ef%bc%88%ef%bc%93%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2530.jpg" medium="image">
			<media:title type="html">imgp2530</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2549.jpg" medium="image">
			<media:title type="html">imgp2549</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2553.jpg" medium="image">
			<media:title type="html">imgp2553</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2555.jpg" medium="image">
			<media:title type="html">imgp2555</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2569.jpg" medium="image">
			<media:title type="html">imgp2569</media:title>
		</media:content>
	</item>
		<item>
		<title>白浜出張（２）</title>
		<link>http://hirish.wordpress.com/2009/03/07/%e7%99%bd%e6%b5%9c%e5%87%ba%e5%bc%b5%ef%bc%88%ef%bc%92%ef%bc%89/</link>
		<comments>http://hirish.wordpress.com/2009/03/07/%e7%99%bd%e6%b5%9c%e5%87%ba%e5%bc%b5%ef%bc%88%ef%bc%92%ef%bc%89/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 10:01:08 +0000</pubDate>
		<dc:creator>hirish</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[白良浜]]></category>
		<category><![CDATA[白浜]]></category>
		<category><![CDATA[PENTAX DA 14mm F2.8 ED]]></category>
		<category><![CDATA[Sigma 30mm F1.4 EX DC]]></category>
		<category><![CDATA[円月島]]></category>

		<guid isPermaLink="false">http://hirish.wordpress.com/?p=157</guid>
		<description><![CDATA[明け方の白良浜。朝夕は風が強かったです。
夕方の漁港
近くに円月島という名所があったので行ってきました。
日没後の円月島。巣に帰っていく鳥たちが印象的でした。
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=157&subd=hirish&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>明け方の白良浜。朝夕は風が強かったです。</p>
<div id="attachment_158" class="wp-caption alignnone" style="width: 438px"><img class="size-full wp-image-158" title="imgp2239" src="http://hirish.files.wordpress.com/2009/03/imgp2239.jpg?w=428&#038;h=640" alt="PENTAX DA 14mm F2.8 ED" width="428" height="640" /><p class="wp-caption-text">PENTAX DA 14mm F2.8 ED </p></div>
<p>夕方の漁港</p>
<div id="attachment_159" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-159" title="imgp2272" src="http://hirish.files.wordpress.com/2009/03/imgp2272.jpg?w=500&#038;h=334" alt="Sigma 30mm F1.4 EX DC" width="500" height="334" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
<p>近くに円月島という名所があったので行ってきました。</p>
<div id="attachment_160" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-160" title="imgp2282" src="http://hirish.files.wordpress.com/2009/03/imgp2282.jpg?w=500&#038;h=334" alt="Sigma 30mm F1.4 EX DC" width="500" height="334" /><p class="wp-caption-text">Sigma 30mm F1.4 EX DC</p></div>
<p>日没後の円月島。巣に帰っていく鳥たちが印象的でした。</p>
<div id="attachment_161" class="wp-caption alignnone" style="width: 438px"><img class="size-full wp-image-161" title="imgp2449" src="http://hirish.files.wordpress.com/2009/03/imgp2449.jpg?w=428&#038;h=640" alt="PENTAX DA 14mm F2.8 ED" width="428" height="640" /><p class="wp-caption-text">PENTAX DA 14mm F2.8 ED</p></div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hirish.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hirish.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hirish.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hirish.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hirish.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hirish.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hirish.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hirish.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hirish.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hirish.wordpress.com/157/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hirish.wordpress.com&blog=481062&post=157&subd=hirish&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hirish.wordpress.com/2009/03/07/%e7%99%bd%e6%b5%9c%e5%87%ba%e5%bc%b5%ef%bc%88%ef%bc%92%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/827fbcf2c10e39b26e67b120b459af6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hirish</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2239.jpg" medium="image">
			<media:title type="html">imgp2239</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2272.jpg" medium="image">
			<media:title type="html">imgp2272</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2282.jpg" medium="image">
			<media:title type="html">imgp2282</media:title>
		</media:content>

		<media:content url="http://hirish.files.wordpress.com/2009/03/imgp2449.jpg" medium="image">
			<media:title type="html">imgp2449</media:title>
		</media:content>
	</item>
	</channel>
</rss>