<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>dasomoli는 다솜돌이라구요!</title>
		<link>http://blog.dasomoli.org/</link>
		<description>dasomoli의 개인적인 관심사를 모두 게으르게 다룹니다.</description>
		<language>ko</language>
		<pubDate>Thu, 21 Jan 2010 14:56:50 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>dasomoli는 다솜돌이라구요!</title>
		<url><![CDATA[http://cfs11.tistory.com/upload_control/download.blog?fhandle=YmxvZzI2Nzk2QGZzMTEudGlzdG9yeS5jb206L2F0dGFjaC8wLzAuanBn]]></url>
		<link>http://blog.dasomoli.org/</link>
		<description>dasomoli의 개인적인 관심사를 모두 게으르게 다룹니다.</description>
		</image>
		<item>
			<title>Vimdiff 사용법</title>
			<link>http://blog.dasomoli.org/231</link>
			<description>&lt;P&gt;linux에서 (거의) 기본적으로 제공하는 vim 을 이용하면 diff 툴을 사용할 수 있다.&lt;br /&gt;
vimdiff 로 실행가능하고 vim 에서 -d 옵션을 사용해서 사용할 수도 있다.&lt;br /&gt;
&lt;br /&gt;간단한 사용법은 다음을 참고하자.&lt;br /&gt;
&lt;A href=&quot;http://amjith.blogspot.com/2007/07/visual-diff-tools-in-linux.html&quot;&gt;http://amjith.blogspot.com/2007/07/visual-diff-tools-in-linux.html&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;정리하면, &lt;br /&gt;
&lt;SPAN style=&quot;FONT-STYLE: italic&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;do&lt;/SPAN&gt; &lt;/SPAN&gt;- 다른 윈도우의 변경 사항을 현재 윈도우로 가져오기&lt;br /&gt;
&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-STYLE: italic&quot;&gt;dp&lt;/SPAN&gt; - 현재 윈도우의 변경 사항을 다른 윈도우로 넣기&lt;br /&gt;
&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-STYLE: italic&quot;&gt;]c&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-STYLE: italic&quot;&gt; &lt;/SPAN&gt;- 다음 변경 사항으로 이동&lt;br /&gt;
&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;&lt;SPAN style=&quot;FONT-STYLE: italic&quot;&gt;[c&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt; &lt;/SPAN&gt;- 이전 변경 사항으로 이동&lt;br /&gt;
&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-STYLE: italic&quot;&gt;Ctrl W + Ctrl W&lt;/SPAN&gt; - 다른 윈도우로 이동&lt;br /&gt;
&lt;br /&gt;다른 윈도우로 이동할 때는 Ctrl&amp;nbsp;+&amp;nbsp;W &amp;lt;방향키&amp;gt; 를 이용할 수도 있다.&lt;br /&gt;
&lt;/P&gt;</description>
			<category>Linux</category>
			<category>diff</category>
			<category>vim</category>
			<category>vimdiff</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/231</guid>
			<comments>http://blog.dasomoli.org/231#entry231comment</comments>
			<pubDate>Thu, 21 Jan 2010 14:55:34 +0900</pubDate>
		</item>
		<item>
			<title>Linux 커널 패치 만들기</title>
			<link>http://blog.dasomoli.org/230</link>
			<description>다음을 참고하라&lt;br /&gt;
&lt;A href=&quot;http://wiki.kldp.org/wiki.php/SubmittingPatches&quot;&gt;http://wiki.kldp.org/wiki.php/SubmittingPatches&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;# diff -uprN linux-2.6.29 linux-2.6.29.org &amp;gt; patch&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;</description>
			<category>Linux</category>
			<category>diff</category>
			<category>Kernel</category>
			<category>Linux</category>
			<category>Patch</category>
			<category>커널</category>
			<category>패치</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/230</guid>
			<comments>http://blog.dasomoli.org/230#entry230comment</comments>
			<pubDate>Wed, 20 Jan 2010 17:28:11 +0900</pubDate>
		</item>
		<item>
			<title>git와 SVN 간의 비교를 통한 이해</title>
			<link>http://blog.dasomoli.org/225</link>
			<description>&lt;div&gt;
이전에 사용하던 것과 다른 SCM 도구를 사용할 때 항상 용어와 개념의 차이 때문에 애를 먹는다.&lt;/div&gt;
&lt;div&gt;난 SVN이 익숙한데, GIT를 사용하려니 애를 먹는다. 이럴 때 볼만한 좋은 글.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;a href=&quot;http://git.or.cz/course/svn.html&quot; target=&quot;_blank&quot; title=&quot;[http://git.or.cz/course/svn.html]로 이동합니다.&quot;&gt;Git - SVN Crash Course&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif; line-height: normal; font-size: medium; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;&lt;p style=&quot;margin-left: 0.4em; margin-right: 0.4em; text-align: justify; margin-top: 0em; margin-bottom: 0em; &quot;&gt;If you are just after tracking someone else&#039;s project, this get you started quickly:&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;/p&gt;
&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: auto; margin-right: auto; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 437px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); margin-top: 0em; margin-bottom: 0em; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 120px; font-weight: bold; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; background-repeat: initial initial; &quot;&gt;git clone&amp;nbsp;&lt;em&gt;url&lt;/em&gt;&lt;br /&gt;
git pull&lt;/td&gt;
&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn&amp;nbsp;checkout&amp;nbsp;&lt;em&gt;url&lt;/em&gt;&lt;br /&gt;
svn update&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;/span&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;글의 거의 맨 처음에 나온 저 글 하나로 이 글이 어떤 글인지 알 수 있을 듯 하다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</description>
			<category>Development</category>
			<category>git</category>
			<category>SCM</category>
			<category>Source</category>
			<category>svn</category>
			<category>관리</category>
			<category>도구</category>
			<category>비교</category>
			<category>소스</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/225</guid>
			<comments>http://blog.dasomoli.org/225#entry225comment</comments>
			<pubDate>Wed, 02 Dec 2009 19:24:12 +0900</pubDate>
		</item>
		<item>
			<title>Linux Kernel Reference Site</title>
			<link>http://blog.dasomoli.org/224</link>
			<description>커널에 관련해서 소스를 뒤지거나 Kernel Tree 안의 Documents들을 참조하는 일이 잦아졌다. 내 피씨(의 하드디스크)가 매우 느린 관계로 I/O 부하를 좀 줄이고자 웹사이트를 자주 뒤지는 편이다. 다음 두 개가 좀 편하다. 다른 건 나중에 추가!&lt;br /&gt;
&lt;br /&gt;
Kernel Source : &lt;a title=&quot;[http://lxr.linux.no]로 이동합니다.&quot; href=&quot;http://lxr.linux.no&quot; target=&quot;_blank&quot;&gt;http://lxr.linux.no&lt;/a&gt;&lt;br /&gt;
Kernel Documents :&amp;nbsp;&lt;a href=&quot;http://www.mjmwired.net/kernel/Documentation/&quot;&gt;http://www.mjmwired.net/kernel/Documentation/&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
Kernel의 Booting Parameter 넘기는 부분을 알고 싶어서 본 글&lt;/div&gt;
&lt;div&gt;Booting ARM Linux :&amp;nbsp;&lt;a href=&quot;http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html&quot;&gt;http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</description>
			<category>Development</category>
			<category>Document</category>
			<category>Kernel</category>
			<category>Linux</category>
			<category>reference</category>
			<category>site</category>
			<category>Source</category>
			<category>리눅스</category>
			<category>참조</category>
			<category>커널</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/224</guid>
			<comments>http://blog.dasomoli.org/224#entry224comment</comments>
			<pubDate>Tue, 24 Nov 2009 14:39:03 +0900</pubDate>
		</item>
		<item>
			<title>register_chrdrv()를 리눅스 커널 2.6 버전용으로 바꾸기</title>
			<link>http://blog.dasomoli.org/223</link>
			<description>Linux Device Driver 중 Character device&amp;nbsp;의 코드를 보면&amp;nbsp;기존의 2.6 기준으로 수정되지 않은 코드들은 register_chrdrv() 함수를 사용하여 Character device를 등록하도록 되어 있다. register_chrdrv 함수의 원형은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;int register_chrdev(unsigned int major, const char *name,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const struct file_operations *fops)&lt;br /&gt;
&lt;br /&gt;그러나 2.6의 디바이스 드라이버들은 이와 다른 방식을 사용한다. register_chrdrv를 사용하는 방식은 Linux device driver 개정 3판을 보면 3장의 &quot;예전 방식&quot;이라는 부분에서 이를 다룬다. 예전 방식이 아닌 새로운 방식으로 작성하려면 &lt;U&gt;register_chrdev 대신 register_chrdrv_region/alloc_chrdev_region 과 cdev_init, cdev_add 로 작성&lt;/U&gt;하면 된다.&lt;br /&gt;
&lt;br /&gt;register_chrdrv_region 함수는 원하는 디바이스의 번호를 미리 알고 있을 때 사용하고, alloc_chrdev_region 함수는 디바이스의 번호를 동적으로 할당받아 파라미터로 받는 dev_t 구조체 포인터를 이용해 dev_t 구조체에&amp;nbsp;넣는다.&lt;br /&gt;
register_chrdrv 대신 register_chrdrv_region을 사용하는 것으로 혼동할 수 있는데 그게 아닌 cdev_add 함수까지 사용하여야 한다. 실제 커널 소스의 register_chrdrv&amp;nbsp;함수를 보면 이런 과정이 구현되어 있음을 볼 수 있다.&lt;br /&gt;
cdev_add 함수를 사용하기 위해서는 struct cdev 구조체를 사용하여야 하는데 이 구조체를 초기화 시켜주는 함수가 cdev_init 이다. struct cdev 구조체 등을 사용하려면 &amp;lt;linux/cdev.h&amp;gt; 를 include하여야 한다. 다음은 사용 예이다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;#include &amp;lt;linux/kernel.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/cdev.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/fs.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;... 
&lt;DIV&gt;struct file_operations dasom_fops;&lt;br /&gt;
&lt;br /&gt;&lt;/DIV&gt;
&lt;DIV&gt;static struct cdev dasom_cdev = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .owner = THIS_MODULE,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .ops = &amp;amp;dasom_fops,&lt;/DIV&gt;
&lt;DIV&gt;};&lt;br /&gt;
&lt;br /&gt;&lt;/DIV&gt;
&lt;DIV&gt;int _init dasom_init(void)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dev_t dev;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int err = 0;&lt;br /&gt;
&lt;br /&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(major) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dev = MKDEV(major, minor);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = register_chrdev_region(dev, 1, &quot;dasomoli&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = alloc_chrdev_region(&amp;amp;dev, mior, 1, &quot;dasomoli&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; major = MAJOR(dev);&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(err &amp;lt; 0) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = -ENODEV;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return err;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cdev_init(&amp;amp;dasom_cdev, &amp;amp;dasom_fops);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dasom_cdev.owner = THIS_MODULE;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dasom_cdev.ops&amp;nbsp; = &amp;amp;dasom_fops;&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(cdev_add(&amp;amp;dasom_cdev, dev, 1)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk(KERN_INFO&quot;dasom: cdev creation failed.\n&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; err = -ENODEV;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto error_label;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
error_label:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return err;&lt;br /&gt;
}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;</description>
			<category>Development</category>
			<category>alloc_chrdrv_region</category>
			<category>cdev</category>
			<category>cdev_add</category>
			<category>cdev_init</category>
			<category>Device</category>
			<category>driver</category>
			<category>Linux</category>
			<category>register_chrdrv</category>
			<category>register_chrdrv_region</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/223</guid>
			<comments>http://blog.dasomoli.org/223#entry223comment</comments>
			<pubDate>Mon, 02 Nov 2009 20:39:45 +0900</pubDate>
		</item>
		<item>
			<title>Linux Kernel 의 Memory barrier 구현</title>
			<link>http://blog.dasomoli.org/222</link>
			<description>Linux Kernel의 프로세스 상태 변경 매크로(set_task_state, set_current_state)를 살펴보다가 ARM 아키텍처에서 다음과 같이 구현된 것을 보았다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px dashed rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot; class=&quot;txc-textbox&quot;&gt;
include/linux/sched.h&lt;br /&gt;
&lt;br /&gt;
#define set_task_state(tsk, state_value)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; set_mb((tsk)-&amp;gt;state, (state_value))&lt;br /&gt;
#define set_current_state(state_value)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; set_mb(current-&amp;gt;state, (state_value))&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
set_mb 매크로는 시스템마다 다르게 구현되어 있는데 ARM 쪽을 따라가보면 다음과 같이 쓰여져 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px dashed rgb(193, 193, 193); padding: 10px; background-color: rgb(238, 238, 238);&quot; class=&quot;txc-textbox&quot;&gt;
arch/arm/include/asm/system.h&lt;br /&gt;
&lt;br /&gt;
#define dmb() __asm__ __volatile__ (&quot;&quot; : : : &quot;memory&quot;)&lt;br /&gt;
&lt;br /&gt;
#define smp_mb()&amp;nbsp;&amp;nbsp;&amp;nbsp; dmb()&lt;br /&gt;
&lt;br /&gt;
#define set_mb(var, value)&amp;nbsp;&amp;nbsp;&amp;nbsp; do { var = value; smp_mb(); } while (0)&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
do-while-0 구문에 대해서는 &lt;a title=&quot;[http://blog.dasomoli.org/220]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://blog.dasomoli.org/220&quot;&gt;이 글&lt;/a&gt;을 참고하도록 하고, memory barrier에 대해서는 &lt;a title=&quot;[http://lksas4-arm11.springnote.com/pages/899194]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://lksas4-arm11.springnote.com/pages/899194&quot;&gt;이 글&lt;/a&gt;을 참고하라. dmb() 의 inline assembly의 구조와 설명은 &lt;a title=&quot;[http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s5]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s5&quot;&gt;이 글&lt;/a&gt;을 참고하자.&lt;br /&gt;
&lt;br /&gt;
참고된 글을 정리하자면, 명령이 R, W, R, W, R, W 순으로 사용된다면,  이를 하드웨어 혹은 소프트웨어 적으로 R, R, R, W, W, W 순으로 배열하는 등의 최적화를 할 수 있는데, 이 때 명령의 순서를 보장해 주는 역할로써 Memory barrier 라는 것을 구현해서 사용한다. 이는 하드웨어적으로 혹은 소프트웨어적으로 구현되는데 하드웨어적인 방법은 CPU 자체의 명령으로 구현되는 등의 방법이 사용될 수 있고, 소프트웨어적으로 구현될 때 위와 같이 구현될 수 있다.&lt;br /&gt;
위 구문은 gcc inline assembly의 확장으로 clobber list에 &quot;memory&quot;를 적어넣어 해당 명령(&quot;&quot; - 아무 명령도 수행하지 않음)을 수행한 후에 변경되는 것이 메모리 타입 저장장치(모든 레지스터, 모든 플래그, 모든 메모리)임을 나타낸다. gcc는 이럴경우 __asm__ __volatile__(&quot;&quot;: : :&quot;memory&quot;) 경계를 넘어가는 최적화 또는 instruction scheduling을 수행하지 않기 때문에 __asm__ __volatile__(&quot;&quot;: : :&quot;memory&quot;)를 사용하면 이전 코드의 수행 완료를 보장할 수 있고 이후 코드가 __asm__ __volatile__(&quot;&quot;: : :&quot;memory&quot;) 이전에 수행되는것을 방지 할수 있다. 별개로 volatile의 경우 읽기 연산에서 메모리에서 한번 읽어온 데이터를 레지스터에 저장해서 사용하는 것이 아닌 사용할 때마다 메모리 참조를 통해 가져오도록 한다.&lt;br /&gt;
&lt;br /&gt;</description>
			<category>Development</category>
			<category>ASM</category>
			<category>Assembly</category>
			<category>barrier</category>
			<category>clobber</category>
			<category>DMB</category>
			<category>gcc</category>
			<category>inline</category>
			<category>Kernel</category>
			<category>Linux</category>
			<category>list</category>
			<category>memory</category>
			<category>Optimization</category>
			<category>set_current_state</category>
			<category>set_mb</category>
			<category>set_task_state</category>
			<category>volatile</category>
			<category>리눅스</category>
			<category>최적화</category>
			<category>커널</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/222</guid>
			<comments>http://blog.dasomoli.org/222#entry222comment</comments>
			<pubDate>Mon, 05 Oct 2009 11:20:43 +0900</pubDate>
		</item>
		<item>
			<title>음악 검색!</title>
			<link>http://blog.dasomoli.org/221</link>
			<description>요즘 MP3 듣는 일이 없어서 어떻게 검색하나 했더니 구글에서&lt;br /&gt;
&lt;br /&gt;1. 국산 외 : 앨범 + torrent&amp;nbsp;붙여 검색&lt;br /&gt;
2. &quot;intitle:index of mp3 소녀시대&quot; 같은 식&lt;br /&gt;
&lt;br /&gt;으로 가능하단다..&lt;br /&gt;
뭐 별일 없으면 사자. 요즘은 태그까지 잘 정리해서 적당한 가격에 파는 듯.&lt;br /&gt;
&lt;br /&gt;</description>
			<category>dasomoli &amp; eureka</category>
			<category>index</category>
			<category>intitle</category>
			<category>mp3</category>
			<category>OF</category>
			<category>torrent</category>
			<category>검색</category>
			<category>구글</category>
			<category>음악</category>
			<category>태그</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/221</guid>
			<comments>http://blog.dasomoli.org/221#entry221comment</comments>
			<pubDate>Wed, 30 Sep 2009 11:14:08 +0900</pubDate>
		</item>
		<item>
			<title>매크로에서 do { ... } while(0) 을 사용하는 이유</title>
			<link>http://blog.dasomoli.org/220</link>
			<description>리눅스 커널 소스를 살펴보다가 헤더쪽의 매크로에서 &quot;do { ... } while(0)&quot; 와 같은 것이 많이 쓰인 것을 보았다.&lt;br /&gt;
당연히 { ... } 이 한번만 실행되고 끝나는 건데, 왜 이렇게 했을까 궁금해서 찾아보았다.&lt;br /&gt;
&lt;br /&gt;정리하자면,&lt;br /&gt;
&lt;br /&gt;1. 빈 문장(&quot;;&quot;)은 컴파일러에서 &lt;STRONG&gt;Warning&lt;/STRONG&gt; 을 발생시키므로 이를 &lt;STRONG&gt;방지&lt;/STRONG&gt;!&lt;br /&gt;
2. &lt;STRONG&gt;지역변수를 할당할 수 있는 Basic block &lt;/STRONG&gt;을 쓸 수 있다.&lt;br /&gt;
3. 조건문에서 복잡한 문장을 사용할 수 있다. 예를 들면 다음과 같은 코드가 있다고 했을 때,&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;#define FOO(x) \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;arg is %s\n&quot;, x); \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something_useful(x);&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
다음과 같이 이 매크로를 사용한다면,&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;if (blah == 2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOO(blah);&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
이렇게 해석되어서 쓰여진다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;if (blah == 2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;arg is %s\n&quot;, blah);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something_useful(blah);;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;STRONG&gt;뭐가 문제냐고? do_something_useful(blah); 는 조건에 관계없이 수행된다.&lt;/STRONG&gt; 이는 원하는 결과가 아니다. 하지만 do { ... } while(0) 를 쓴다면 다음과 같이 해석될 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;if (blah == 2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;arg is %s\n&quot;, blah);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something_useful(blah);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while (0);&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
정확히 원하는 결과를 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;4. 3번과 같은 경우에 다음과 같이 사용할 수도 있지 않냐고 생각할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;#define exch(x,y) { int tmp; tmp=x; x=y; y=tmp; }&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
그러나 &lt;STRONG&gt;다음과 같은 경우에는 원하는데로 동작하지 않는다.&lt;/STRONG&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;if (x &amp;gt; y)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exch(x,y);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Branch 1&lt;br /&gt;
else&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Branch 2&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
왜냐하면 다음과 같이 해석되기 때문이다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;if (x &amp;gt; y) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Single-branch if-statement!!!&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int tmp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The one and only branch consists&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = x;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // of the block.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = y;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y = tmp;&lt;br /&gt;
}&lt;br /&gt;
;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // empty statement&lt;br /&gt;
else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ERROR!!! &quot;parse error before else&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something();&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
do { ... } while(0) 를 사용하면 다음과 같이 해석되어 원하는 의도대로 정확히 쓸 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #c1c1c1 1px dashed; BACKGROUND-COLOR: #eeeeee&quot;&gt;if (x &amp;gt; y)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int tmp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = x;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = y;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y = tmp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while(0);&lt;br /&gt;
else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something();&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
5. &lt;STRONG&gt;gcc에서는 &lt;/STRONG&gt;&lt;A title=&quot;[http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Statement-Exprs.html#Statement-Exprs]로 이동합니다.&quot; href=&quot;http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Statement-Exprs.html#Statement-Exprs&quot; target=_blank&gt;&lt;STRONG&gt;Statements and Declarations in Expressions&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; 확장을 사용할 수 있다.&lt;/STRONG&gt; 이는 위에서 본 do-while-0 Block 대신 쓸 수 있다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
참고 :&amp;nbsp;&amp;nbsp;&amp;nbsp; KLDP의 &quot;&lt;A title=&quot;[http://kldp.org/node/41390]로 이동합니다.&quot; href=&quot;http://kldp.org/node/41390&quot; target=_blank&gt;의미없는 do while 문&lt;/A&gt;&quot;&lt;br /&gt;

&lt;DIV style=&quot;MARGIN-LEFT: 4em&quot;&gt;kernelnewbies.org의 &quot;&lt;A title=&quot;[http://kernelnewbies.org/FAQ/DoWhile0]로 이동합니다.&quot; href=&quot;http://kernelnewbies.org/FAQ/DoWhile0&quot; target=_blank&gt;FAQ/DoWhile0&lt;/A&gt;&quot;&lt;/DIV&gt;</description>
			<category>Development</category>
			<category>and</category>
			<category>C</category>
			<category>Declarations</category>
			<category>do</category>
			<category>do-while-0</category>
			<category>Expressions</category>
			<category>gcc</category>
			<category>in</category>
			<category>Statements</category>
			<category>while(0)</category>
			<category>리눅스</category>
			<category>매크로</category>
			<category>소스</category>
			<category>커널</category>
			<category>확장</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/220</guid>
			<comments>http://blog.dasomoli.org/220#entry220comment</comments>
			<pubDate>Mon, 28 Sep 2009 16:02:29 +0900</pubDate>
		</item>
		<item>
			<title>ARM CPU Now &amp; Future(2008.11.25) 정리</title>
			<link>http://blog.dasomoli.org/219</link>
			<description>&lt;A title=&quot;[http://brand.pandora.tv/my.techworld/34142660/?cateCode=all&amp;amp;listOrder=prg_id&amp;amp;listType=Thumb&amp;amp;P=3&amp;amp;searchText]로 이동합니다.&quot; href=&quot;http://brand.pandora.tv/my.techworld/34142660/?cateCode=all&amp;amp;listOrder=prg_id&amp;amp;listType=Thumb&amp;amp;P=3&amp;amp;searchText&quot; target=_blank&gt;ARM CPU Now &amp;amp; Future 라는 제목의 무료 동영상&lt;/A&gt;이 있길래 한번 보았는데 여러가지 주목할만한-내 주관적으로- 이야기가 있길래 정리한다. 자료 자체는 2008년 11월 25일 자료이므로 현재(2009.9.24) 상황과 비교해서 보는 것도 좋을 듯 하다.&lt;br /&gt;
강연 때 사용한 PPT 역시 구글에서 찾을 수 있길래 첨부(&lt;A title=&quot;[http://www.software.or.kr/ICSFiles/afieldfile/2008/12/01/9_ARM_EmbeddedSWInsightConf.pdf]로 이동합니다.&quot; href=&quot;http://www.software.or.kr/ICSFiles/afieldfile/2008/12/01/9_ARM_EmbeddedSWInsightConf.pdf&quot; target=_blank&gt;링크&lt;/A&gt;)한다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://dasomoli.tistory.com/attachment/cfile3.uf@1371A41C4ABAD361094B2C.pdf&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/pdf.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; 9_ARM_EmbeddedSWInsightConf.pdf&lt;/a&gt;&lt;/div&gt; 
&lt;P&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;1. 멀티 코어 관련 개발 기술 필수&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;일단 ARM 을 버전별로 나누어 정리한 표는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/18566A1C4ABAD858AEF86F&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile27.uf@18566A1C4ABAD858AEF86F.jpg&quot; height=&quot;474&quot; width=&quot;630&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;출처 : ARM CPU – Now and Future, Sanghi(Sky) Lim&amp;#13;&amp;#10;ARM Korea&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;ARMv4, v5, v6, v7 별로 어떤 코어가 사용되고 있는지&amp;nbsp;눈여겨 봐두자. ARM11-MPCore와 Cortex-A9&amp;nbsp;위에 화살표에 적힌 x1~4는 멀티코어 개수를 나타내는데, 반도체 회사에서 마음대로 최대 4개까지 코어 개수를 조정할 수 있다고 한다. 앞으로 나올 프로세서들에는 기본적으로 MPCore 기술이 들어간다고 하니 멀티코어 관련 개발 기술은 임베디드 개발하에서도 필수적인 기술이 될 듯 하니, 꼭&amp;nbsp;익혀둘 필요가 있다.&lt;br /&gt;
저가형을 대체하고자 하는 Cortex-M3와 Cortex-M1은&amp;nbsp;안의&amp;nbsp;FPGA 에 자체 개발한 IP를 탑재하여 시스템에 적용할 수 있다고 한다.&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;2. 파트너십에 의한 웹 접근성 강화&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/153A9F274ABAF767622A94&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile30.uf@153A9F274ABAF767622A94.jpg&quot; height=&quot;473&quot; width=&quot;630&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;출처 : ARM CPU – Now and Future, Sanghi(Sky) Lim&amp;#13;&amp;#10;ARM Korea&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;웹 접근성 향상을 위해서 다양한 소프트웨어&amp;nbsp;회사들과의&amp;nbsp;작업중이라고 한다.&lt;br /&gt;
&lt;br /&gt;1. Adobe Flash player : 자료상으로&amp;nbsp;2009년 상반기 내에 Adobe Flash player 10가 ARM 기반(ARM v6, ARM v7)으로 출시 될 것이라고 이야기하고 있다.&lt;br /&gt;
2. Google Chrome : Google의 웹브라우저인 Chrome&amp;nbsp;은 PC와 ARM&amp;nbsp;을 동시에 지원하고 있다고 한다.&lt;br /&gt;
3.&amp;nbsp;MS Silverlight &amp;amp; Media codecs : MS 윈도우즈 모바일의 실버라이트 역시 ARM 을 지원하도록 작업중이라고 한다. MS에서 미디어 코덱 역시 ARM을 위해&amp;nbsp;내어놓고 있다고 하니&amp;nbsp;멀티미디어 지원에 있어서도 강점을 갖게 될 것이다.&lt;br /&gt;
4.&amp;nbsp;Firefox : Firefox 를 ARM CPU에 대해 최적화 작업을 해서 6배 빨라졌다고 한다. 또한, 이에 관현한 작업물들을 오픈소스로 공개하여&amp;nbsp;ARM 사이트에 가면 공개된 자료를 받아볼 수 있다고 한다. x86 기반의 소스와 비교하면 어떤 최적화 기법을 썼는지 볼 수 있으므로 도움이 되지 않을까?&lt;br /&gt;
5. Ubuntu : Canonical 에서 우분투 데스크탑을 ARM v7에서 사용하도록 지원한다고 한다. 단순히 커널 뿐 아니라 오픈 오피스 등의 프로그램 등도 지원한다고 한다. 우분투 기반의 많은 디바이스들이 나올 듯 하다.&lt;br /&gt;
&lt;br /&gt;위에서 보는 바와 같이 ARM은 임베디드 기기의 Major OS인 윈도우즈, 리눅스를 모두 효과적으로 운영할 수 있도록 지원하고, 플랫폼에 독립적인 웹 환경과 멀티미디어 분야 역시 지원하고 있다. 이를 보면 이미 예측된 바와 같이 무선 환경하의 ARM 기반 디바이스들에 사용될 소프트웨어 및 서비스 시장이 매우 커질 것을 예상할 수 있겠다.&lt;/P&gt;</description>
			<category>Development</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/219</guid>
			<comments>http://blog.dasomoli.org/219#entry219comment</comments>
			<pubDate>Thu, 24 Sep 2009 13:56:43 +0900</pubDate>
		</item>
		<item>
			<title>저작권과 번역물에 관련된 권리</title>
			<link>http://blog.dasomoli.org/218</link>
			<description>영문 자료 중에 공부하고 싶거나 정리를 하고 싶을 때 나는 문장을 번역하면서 어디에 올려둔다. 시간이 오래 걸리기는 하지만 문장을 곱씹어 볼 수 있고 나중에 찾아볼 때도 번역된 내용물을 보는게 편하기 때문-역시 아직은 영문보다 국문이 편하다-이다. 올릴 때도 내가 어디에 있든 볼 수 있도록 대개 인터넷 어딘가-예를 들면 블로그-에 올려두는데 블로그에 올릴 때 항상 신경이 쓰이는 것이 저작권에 관련된 문제이다. 블로그 상에 어떤 정보를 올리는 것은 공공에 대한&amp;nbsp;배포 행위로 간주되기 때문이다. 내 블로그의 Reading 카테고리가 그냥 보면 모두 글 수가 0인 이유가 바로 여기에 있다. ㅋㅋ&lt;br /&gt;
&lt;br /&gt;오늘도 구글 안드로이드 관련 문서를 보다가 이 걸 번역해서 어디다 올려? 라는 생각으로 접근하다가 &lt;A title=&quot;[http://blog.dasomoli.org/217]로 이동합니다.&quot; href=&quot;http://blog.dasomoli.org/217&quot; target=_blank&gt;라이센스에 대한 내용을 한번쯤은 알고 넘어가야겠다&lt;/A&gt;는 생각에 여기저기 뒤적거리던 것들을 정리해두고자 한다.&lt;br /&gt;
&lt;br /&gt;먼저 번역물을 작성하는 것은 원저작물에 대한 저작권 침해의 여부가 있는지에 대해 알아야 하는데 간단하게 대답은 &quot;예&quot;이다.&amp;nbsp;원저자와&amp;nbsp;협의되지 않은 번역물은 원저작물에 대한 2차적 저작물의 작성권을 침해할 우려가 다분히 있다. 다만 이에 대해서도 예외가 존재하는데 이는 &lt;A title=&quot;[http://likms.assembly.go.kr/law/jsp/Law.jsp?WORK_TYPE=LAW_BON&amp;amp;LAW_ID=A0715&amp;amp;PROM_NO=09625&amp;amp;PROM_DT=20090422&amp;amp;HanChk=Y]로 이동합니다.&quot; href=&quot;http://likms.assembly.go.kr/law/jsp/Law.jsp?WORK_TYPE=LAW_BON&amp;amp;LAW_ID=A0715&amp;amp;PROM_NO=09625&amp;amp;PROM_DT=20090422&amp;amp;HanChk=Y&quot; target=_blank&gt;저작권법(일부개정 2009.4.22 법률 제9625호)&lt;/A&gt;의 &quot;제2관 저작재산권의 제한&quot;의 &quot;제36조(번역 등에 의한 이용)&quot;에서&amp;nbsp;기술된 바와 같다.&amp;nbsp;풀어서 쓰면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;1. &quot;학교교육 목적 등에의 이용(제25조)&quot;, &quot;영리를 목적으로 하지 아니하는 공연,방송(제29조)&quot;, &quot;사적이용을 위한 복제(제30조)&quot; 의 경우에는 각 조항의 규정에 따라 번역, 편곡, 개작하여 이용할 수 있다.&lt;br /&gt;
2. &quot;재판절차 등에서의 복제(제23조)&quot;, &quot;정치적 연설 등의 이용(제24조)&quot;, &quot;시사보도를 위한 이용(제26조)&quot;, &quot;시사적인 기사 및 논설의 복제 등(제27조)&quot;, &quot;공표된 저작물의 인용(제28조)&quot;, &quot;시험문제로서의 복제(제32조)&quot;, &quot;시각장애인 등을 위한 복제 등(제33조)&quot; 의 경우에는 각 조항의 규정에 따라 번역하여 이용할 수 있다.&lt;br /&gt;
&lt;br /&gt;내가 이용하는 목적은 &quot;사적이용을 위한 복제&quot;에 해당하므로, 나는 번역해서 혼자만 보면 된다. ㅋㅋ&lt;br /&gt;
그렇지 않은 경우에는 &lt;A title=&quot;[http://100.naver.com/100.nhn?docid=73509]로 이동합니다.&quot; href=&quot;http://100.naver.com/100.nhn?docid=73509&quot; target=_blank&gt;번역권&lt;/A&gt;이라는 권리를 받아야 하는데 원저자의 일종의 허락과 같은 것으로 보면 될 듯 하다.&lt;br /&gt;
&lt;br /&gt;따라서 인터넷 상에 번역된 정보를 올리기 위해서는 원저작권자로부터 번역권과 배포권을 얻어야 하는 것으로 정리하면 될 듯 하다.&lt;br /&gt;
&lt;br /&gt;그리고, 번역권을 얻어 번역한 저작물에 대해서는 2차적 저작물로 취급되므로 독자적인 저작물로서 보호된다. 이에 대해서는 저작권법 &quot;5조(2차적 저작물)&quot;을 참고하면 된다.&lt;br /&gt;
&lt;br /&gt;처음엔 쉽게쉽게 쓰려고 했는데, 법률 등을 참고하다보니 글이 어려워보인다;;&lt;br /&gt;</description>
			<category>dasomoli &amp; eureka</category>
			<category>2자적</category>
			<category>라이센스</category>
			<category>번역</category>
			<category>번역권</category>
			<category>번역물</category>
			<category>저작권</category>
			<category>저작권법</category>
			<category>저작물</category>
			<author>다솜돌이</author>
			<guid>http://blog.dasomoli.org/218</guid>
			<comments>http://blog.dasomoli.org/218#entry218comment</comments>
			<pubDate>Thu, 03 Sep 2009 11:53:45 +0900</pubDate>
		</item>
	</channel>
</rss>
