<?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/"
	>

<channel>
	<title>Журнал системного программиста &#187; XSystem</title>
	<atom:link href="http://sadko.xskernel.org/archives/category/xskernel_org/feed" rel="self" type="application/rss+xml" />
	<link>http://sadko.xskernel.org</link>
	<description>блог обо всём и ни о чём</description>
	<lastBuildDate>Wed, 14 Dec 2011 20:21:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Проекту xskernel.org нужны участники!</title>
		<link>http://sadko.xskernel.org/archives/1669</link>
		<comments>http://sadko.xskernel.org/archives/1669#comments</comments>
		<pubDate>Sun, 13 Dec 2009 20:20:04 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[xskernel]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/?p=1669</guid>
		<description><![CDATA[Tweet Последнее время разработка ядра XSystem замедлилась ввиду банальной нехватки времени у лидера проекта &#8212; SadKo (то есть, меня). Тем не менее, разработка продолжается, но ввиду кардинальных переделок время нового релиза проекта продолжает отодвигаться. Помимо этого, для дальнейшего успешного развития проекта требуется своевременное документирование функций ядра. Именно поэтому проекту сейчас особенно требуются новые участники: разработчики [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1669',
  title: 'Проекту xskernel.org нужны участники!',
  description: 'Последнее время разработка ядра XSystem замедлилась ввиду банальной нехватки времени у лидера проекта - SadKo (то есть, меня).\n\nТем не менее, разработка продолжается, но ввиду кардинальных передело...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1669"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&Ntilde;&ETH;&frac34;&ETH;&micro;&ETH;&ordm;&Ntilde;&Ntilde; xskernel.org &ETH;&frac12;&Ntilde;&ETH;&para;&ETH;&frac12;&Ntilde; &Ntilde;&Ntilde;&ETH;&deg;&Ntilde;&Ntilde;&ETH;&frac12;&ETH;&cedil;&ETH;&ordm;&ETH;&cedil;!" data-url="http://sadko.xskernel.org/archives/1669">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Последнее время разработка ядра XSystem замедлилась ввиду банальной нехватки времени у лидера проекта &#8212; <b>SadKo</b> (то есть, меня).</p>
<p>Тем не менее, разработка продолжается, но ввиду кардинальных переделок время нового релиза проекта продолжает отодвигаться.</p>
<p>Помимо этого, для дальнейшего успешного развития проекта требуется своевременное документирование функций ядра.</p>
<p>Именно поэтому проекту сейчас особенно требуются новые участники:</p>
<ul>
<li>разработчики С/С++/Assembler;</li>
<li>технические писатели.</li>
</ul>
<p>Напомним, что, проект развивается без какого-либо финансирования, на чистом энтузиазме его участников. Тем не менее, если проект Вам интересен и Вы хотите поучаствовать в нём, милости просим.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1669/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Развитие XSystem</title>
		<link>http://sadko.xskernel.org/archives/1375</link>
		<comments>http://sadko.xskernel.org/archives/1375#comments</comments>
		<pubDate>Thu, 27 Aug 2009 11:42:34 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/?p=1375</guid>
		<description><![CDATA[Tweet Как-никак, а развитие ядра потихоньку идёт. В последнее время мною был реализован загрузчик PE-файлов в память с последующим запуском в user level. Реализация загрузчика PE немножко замедлила реализацию загрузчика файлов формата ELF, так как я обнаружил серьёзные изъяны в функциях, работающих с файлами. Нужно будет переписывать их реализацию. А так, надеюсь, к сентябрю успею [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1375',
  title: 'Развитие XSystem',
  description: 'Как-никак, а развитие ядра потихоньку идёт.\nВ последнее время мною был реализован загрузчик PE-файлов в память с последующим запуском в user level. Реализация загрузчика PE немножко замедлила реали...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1375"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&nbsp;&ETH;&deg;&ETH;&middot;&ETH;&sup2;&ETH;&cedil;&Ntilde;&ETH;&cedil;&ETH;&micro; XSystem" data-url="http://sadko.xskernel.org/archives/1375">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Как-никак, а развитие ядра потихоньку идёт.<br />
В последнее время мною был реализован загрузчик PE-файлов в память с последующим запуском в user level. Реализация загрузчика PE немножко замедлила реализацию загрузчика файлов формата ELF, так как я обнаружил серьёзные изъяны в функциях, работающих с файлами. Нужно будет переписывать их реализацию. А так, надеюсь, к сентябрю успею выпустить новый релиз.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1375/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Это пипец. Это просто пипец.</title>
		<link>http://sadko.xskernel.org/archives/1106</link>
		<comments>http://sadko.xskernel.org/archives/1106#comments</comments>
		<pubDate>Sat, 04 Jul 2009 15:00:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[О жизни]]></category>
		<category><![CDATA[Одминское]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1106</guid>
		<description><![CDATA[Tweet Стал внезапным участником переезда. Смена 24 квадратных метров жилища на 17 (UPD: 15) &#8212; это полная жп&#8230;Простите те, кому что-то в ближайшее время обещал. Скорее всего, не выполню обещания в срок.Особенно прошу прощения у klark973&#160;, так как, скорее всего, так и не успею написать скрипт к отъезду. А сейчас пока я большей частью в [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1106',
  title: 'Это пипец. Это просто пипец.',
  description: 'Стал внезапным участником переезда. Смена 24 квадратных метров жилища на 17 (UPD: 15) - это полная жп...Простите те, кому что-то в ближайшее время обещал. Скорее всего, не выполню обещания в срок.Особе...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1106"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&shy;&Ntilde;&ETH;&frac34; &ETH;&iquest;&ETH;&cedil;&ETH;&iquest;&ETH;&micro;&Ntilde;. &ETH;&shy;&Ntilde;&ETH;&frac34; &ETH;&iquest;&Ntilde;&ETH;&frac34;&Ntilde;&Ntilde;&ETH;&frac34; &ETH;&iquest;&ETH;&cedil;&ETH;&iquest;&ETH;&micro;&Ntilde;." data-url="http://sadko.xskernel.org/archives/1106">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Стал внезапным участником переезда. Смена 24 квадратных метров жилища на <strike>17</strike> (<strong>UPD</strong>: 15) &#8212; это полная жп&#8230;<br />Простите те, кому что-то в ближайшее время обещал. Скорее всего, не выполню обещания в срок.<br />Особенно прошу прощения у <a href="http://users.livejournal.com/klark973/profile/"><img src="http://stat.livejournal.com/img/userinfo.gif" style="border: 0pt none ; vertical-align: bottom;" height="17" width="17"></a><a href="http://users.livejournal.com/klark973/"><b>klark973</b></a>&nbsp;, так как, скорее всего, так и не успею написать скрипт к отъезду.
<p>А сейчас пока я большей частью в офлайн. И&nbsp;http://xskernel.org/ тоже временно не пашет.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1106/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Менеджер виртуальной памяти</title>
		<link>http://sadko.xskernel.org/archives/1104</link>
		<comments>http://sadko.xskernel.org/archives/1104#comments</comments>
		<pubDate>Thu, 25 Jun 2009 22:21:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[os]]></category>
		<category><![CDATA[virtual memory]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1104</guid>
		<description><![CDATA[Tweet Всё-таки нашёл в себе силы реализовать менеджер виртуальной памяти в XSystem. Конечно, готов он не на все 100%, но бОльшая часть уже действительно оттестирована и работает. Как подтверждение этого ядро было переведено на новый менеджер, а старый был выкинут из дерева проекта. Теперь ядро умеет одинаково хорошо обращаться с обычной страничной адресацией и PAE [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1104',
  title: 'Менеджер виртуальной памяти',
  description: 'Всё-таки нашёл в себе силы реализовать менеджер виртуальной памяти в XSystem. Конечно, готов он не на все 100%, но бОльшая часть уже действительно оттестирована и работает. Как подтверждение этого ...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1104"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&ETH;&micro;&ETH;&frac12;&ETH;&micro;&ETH;&acute;&ETH;&para;&ETH;&micro;&Ntilde; &ETH;&sup2;&ETH;&cedil;&Ntilde;&Ntilde;&Ntilde;&ETH;&deg;&ETH;&raquo;&Ntilde;&ETH;&frac12;&ETH;&frac34;&ETH;&sup1; &ETH;&iquest;&ETH;&deg;&ETH;&frac14;&Ntilde;&Ntilde;&ETH;&cedil;" data-url="http://sadko.xskernel.org/archives/1104">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Всё-таки нашёл в себе силы реализовать менеджер виртуальной памяти в XSystem. Конечно, готов он не на все 100%, но бОльшая часть уже действительно оттестирована и работает. Как подтверждение этого ядро было переведено на новый менеджер, а старый был выкинут из дерева проекта.<br />
Теперь ядро умеет одинаково хорошо обращаться с обычной страничной адресацией и PAE (Page-Address Extension). Для этого достаточно перекомпилировать ядро с соответствующими параметрами.<br />
В ближайшее время на wiki постараюсь разместить документацию по сделанному менеджеру. Зато сейчас как гора с плеч: пришлось очень долго и очень много думать, как правильнее реализовать менеджер. Теперь же можно потихоньку начинать разделять user-space и kernel-space для процессов.<br />
Механизм подкачки пока не реализован, но это уже &#8212; отдельный разговор.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1104/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Inline assembly: GCC + Watcom.</title>
		<link>http://sadko.xskernel.org/archives/1055</link>
		<comments>http://sadko.xskernel.org/archives/1055#comments</comments>
		<pubDate>Tue, 07 Apr 2009 23:40:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[Кодинг]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[openwatcom]]></category>
		<category><![CDATA[watcom]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1055</guid>
		<description><![CDATA[Tweet Задумался о кросс-компиляции моего ядрышка GCC (сейчас пока компилируется только Watcom&#8217;ом). Первый большой и краеугольный камень &#8212; это, конечно, ассемблерные вставки. Поэтому был придуман механизм, чтобы минимизировать писанину и дублирование ассемблерного кода для обоих компиляторов. С этой целью я сделал некий заголовочный файл, в котором объявил: #ifdef __WATCOMC__ // Define Pragmas #define inline_func(prag_d, ret_t, [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1055',
  title: 'Inline assembly: GCC + Watcom.',
  description: 'Задумался о кросс-компиляции моего ядрышка GCC (сейчас пока компилируется только Watcom\'ом).\n\nПервый большой и краеугольный камень - это, конечно, ассемблерные вставки. Поэтому был придуман механ...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1055"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Inline assembly: GCC + Watcom." data-url="http://sadko.xskernel.org/archives/1055">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Задумался о кросс-компиляции моего ядрышка GCC (сейчас пока компилируется только Watcom&#8217;ом).</p>
<p>Первый большой и краеугольный камень &#8212; это, конечно, ассемблерные вставки. Поэтому был придуман механизм, чтобы минимизировать писанину и дублирование ассемблерного кода для обоих компиляторов. С этой целью я сделал некий заголовочный файл, в котором объявил:</p>
<p><span id="more-1055"></span></p>
<pre>
#ifdef __WATCOMC__
    // Define Pragmas
    #define inline_func(prag_d, ret_t, body)    ret_t __pragma(#prag_d) body;
    #define inline_proc(prag_d, body)           void  __pragma(#prag_d) body;
#endif /* __WATCOMC__ */

#ifdef __GNUC__
    // Define Pragmas
    #define inline_func(prag_d, ret_t, body)        \
        static __inline ret_t body                  \
        {                                           \
            ret_t __result;                         \
            __asm__ __volatile__ (                  \
                    &quot;.intel_syntax noprefix&quot;        \
                    prag_d                          \
            );                                      \
            return __result;                        \
        }

    #define inline_proc(prag_d, body)               \
        static __inline void body                   \
        {                                           \
            __asm__ __volatile__ (                  \
                    &quot;.intel_syntax noprefix&quot;        \
                    prag_d                          \
            );                                      \
        }
#endif /* __GNUC__ */
</pre>
<p>Заметим, что для GNU GCC я заведомо врубил синтаксис интела (ну не люблю я синтаксис AT&amp;T, да и нафиг он не нужен на i386, на мой взгляд).</p>
<p>Теперь, допустим, захотел я сделать функцию __strlen на ассемблере. Для этого я ворочу соответствующие макросы:</p>
<pre>

#define __I386_STREND_IMPL          \
        &quot;mov    ecx, -1&quot;            \
        &quot;xor    al, al&quot;             \
        &quot;repne  scasb&quot;

// macro for strlen() function
#define __I386_STRLEN               \
        __I386_STREND_IMPL          \
        &quot;mov    eax, -2&quot;            \
        &quot;sub    eax, ecx&quot;
</pre>
<p>И связываю эти макросы с параметрами для каждого компилятора по-своему:</p>
<pre>
#if defined(__WATCOMC__)
    // strlen function bindings for Watcom
    #pragma aux I386_STRLEN     =       \
            __I386_STRLEN               \
            parm caller [edi]           \
            value [eax]                 \
            modify [edi ecx]
#elif defined(__GNUC__)
    // strlen function bindings for GCC
    #define I386_STRLEN                 \
            __I386_STRLEN               \
            : &quot;=a&quot;(__result)            \
            : &quot;D&quot;(str)
#endif /* compiler detection */
</pre>
<p>После чего осталось объявить прототип функции:</p>
<pre>
inline_func(I386_STRLEN,    size_t,     __strlen(const char *str)                       )
</pre>
<p>Всё, теперь я могу использовать функцию __strlen, и она будет инлайниться во всех участках кода как для GCC, так и для Watcom. Замечательно, не правда ли?</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1055/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hand-made синхронизация репозиториев Subversion</title>
		<link>http://sadko.xskernel.org/archives/1050</link>
		<comments>http://sadko.xskernel.org/archives/1050#comments</comments>
		<pubDate>Sun, 29 Mar 2009 13:25:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[Кодинг]]></category>
		<category><![CDATA[Одминское]]></category>
		<category><![CDATA[Туториалы]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1050</guid>
		<description><![CDATA[Tweet Несмотря на то, что репозиторий ОС XSystem мигрировал ко мне на домашний сервер, всё же хорошо было бы хранить бэкапы на каком-нибудь удалённом сервере. Для этого я решил воспользоваться уже имеющимся репозиторием subversion на http://sourceforge.net/. Идея работы такая: раз в сутки мой репозиторий должен синхронизироваться с удалённым репозиторием. При этом, все изменения в одном [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1050',
  title: 'Hand-made синхронизация репозиториев Subversion',
  description: 'Несмотря на то, что репозиторий ОС XSystem мигрировал ко мне на домашний сервер, всё же хорошо было бы хранить бэкапы на каком-нибудь удалённом сервере.\nДля этого я решил воспользоваться уже имею...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1050"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Hand-made &Ntilde;&ETH;&cedil;&ETH;&frac12;&Ntilde;&Ntilde;&ETH;&frac34;&ETH;&frac12;&ETH;&cedil;&ETH;&middot;&ETH;&deg;&Ntilde;&ETH;&cedil;&Ntilde; &Ntilde;&ETH;&micro;&ETH;&iquest;&ETH;&frac34;&ETH;&middot;&ETH;&cedil;&Ntilde;&ETH;&frac34;&Ntilde;&ETH;&cedil;&ETH;&micro;&ETH;&sup2; Subversion" data-url="http://sadko.xskernel.org/archives/1050">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Несмотря на то, что репозиторий <a href="http://xskernel.org/">ОС XSystem</a> мигрировал ко мне на домашний сервер, всё же хорошо было бы хранить бэкапы на каком-нибудь удалённом сервере.<br />
Для этого я решил воспользоваться уже имеющимся репозиторием subversion на <a href="http://sourceforge.net/">http://sourceforge.net/</a>.</p>
<p>Идея работы такая: раз в сутки мой репозиторий должен синхронизироваться с удалённым репозиторием. При этом, все изменения в одном репозитории должны однозначно отражаться на другом. С версии subversion 1.4 появилась такая тулза, как <b>svnsync</b>, но она для моего случая не подходит: оба репозитория не предоставляют прямого доступа к svnroot.</p>
<div text="Мой solution..." class="ljcut">Поэтому, немного порывшись в гугле, решил прибегнуть к собственному механизму синхронизации. Идея простая: раз в сутки сливается содержимое первого и второго (будем называть source и destination) репозитория. После этого сверяем содержимое source-репозитория с содержимым destination-репозитория: создаём несуществующие каталоги и копируем несуществующие файлы. Файлы, имеющие различные контрольные суммы md5, также перезаписываем. Но это не всё. После того, как мы влили новое файло в локальное дерево destination-репозитория, мы должны удалить из него те файлы, которых уже нет в source-репозитории. Для этого осуществляем обратную сверку снимка destination-репозитория с source-репозиторием и удаляем из него лишние файлы.</p>
<p>В результате всё это было сведено к скрипту на PERL.</p>
<pre>
#!/usr/bin/perl

use strict;

my @blacklist   =
(
    qr(^\.svn|\/\.svn$),
    qr(^\.{1,2}$|\/\.{1,2}$)
);

my $src_path  = 'xsystem';
my $dst_path  = 'xskernel-sync';
my $svn_user  = '<destination-username>';
my $svn_pass  = '<destination-password>';

# Update repositories
`svn update $src_path`;
`svn update $dst_path`;

# now search files in src_path and compare to dst_path

add_files();
remove_files();

`svn commit $dst_path -m &quot;Synchronization commit&quot; --username $svn_user --password $svn_pass`;</destination-password></destination-username></pre>
<p>Как видно, работа скрипта достаточно примитивна. Для его работы нужно иметь два рабочих снимка репозитория: source и destination. У меня source-репозиторий находится в каталоге xsystem, а destination &#8212; в каталоге dst_path.<br />
Скрипт сначала обновляет снимки репозиториев, затем осуществляет вливание новых файлов в destination-репозиторий при помощи функции add_files(). После этого удаляются устаревшие файлы и каталоги из destination-репозитория функцией remove_files() и производится коммит изменений в destination-репозиторий.</p>
<p>Дело осталось за малым &#8212; разобрать функции добавления и удаления файлов и каталогов. Для этого сначала напишем функцию, которая получает md5sum файла:</p>
<pre>
sub md5sum
{
    my $fname = shift;
    if (open PIPE, &quot;md5sum $fname |&quot;)
    {
        my $line =
<pipe>;
        close PIPE;
        my ($sum) = ($line =~ /^(\w+)\s+/o);
        return $sum;
    }
    return undef;
}</pipe></pre>
<p>В принципе, ничего нового. Вызывается утилита md5sum и анализируется её вывод.</p>
<p>Также необходимо игнорировать каталоги &quot;.svn&quot;, &quot;.&quot; и &quot;..&quot;, для чего вводится массив @blacklist и пишется функция банинга файлов:</p>
<pre>
sub ban_file
{
    my $src_file = shift;
    foreach (@blacklist)
    {
        ($src_file =~ $_) and
            return 1;
    }
    return undef;
}</pre>
<p>После этого можно спокойно разобрать функцию add_files():</p>
<pre>

sub add_files
{
    my @directories = ();
    my $curr_dir = '';

    do
    {
        # Открываем каталог
        if (opendir DIRHDL, &quot;$src_path$curr_dir&quot;)
        {
            CYCLE: # Читаем содержимое каталога
            while (my $fname = readdir DIRHDL)
            {
                # Баним ненужные файлы
                my $src_file = &quot;$src_path$curr_dir/$fname&quot;;
                (ban_file($src_file)) and
                    next CYCLE;

                my $dst_short = &quot;$curr_dir/$fname&quot;;
                my $dst_file  = &quot;$dst_path$dst_short&quot;;

                # Файл является каталогом?
                if (-d $src_file)
                {
                    # необходимо проверить, что он есть в destination-репозитории
                    unless (-d $dst_file)
                    {
                        # если каталога нет - его нужно создать
                        print &quot;mkdir   $dst_short\n&quot;;
                        `mkdir -p $dst_file`;
                        `svn add $dst_file`;
                    }

                    # Запомним каталог для того, чтобы в будущем его просмотреть
                    push @directories, $dst_short;
                }
                else
                {
                    # проверяем, существует ли файл в destination-репозитории
                    unless (-e $dst_file)
                    {
                        # файл не существует, его нужно скопировать и добавить
                        print &quot;add     $dst_short\n&quot;;
                        `cp -f $src_file $dst_file`;
                        `svn add $dst_file`;
                    }
                    else
                    {
                        # файл существует, вычисляем md5sum обоих файлов
                        my $sum1 = md5sum($src_file);
                        my $sum2 = md5sum($dst_file);

                        # если суммы не совпадают - заменяем файл новым
                        if ($sum1 ne $sum2)
                        {
                            print &quot;replace $dst_short\n&quot;;
                            `cp -f $src_file $dst_file`;
                        }
                    }
                }
            }
        }
        else
        {
            print &quot;Can't open dir $src_path$curr_dir\n&quot;;
        }

        # закрываем каталог и получаем следующий каталог, который следует обработать
        closedir DIRHDL;
        $curr_dir = shift @directories;
    }
    while (defined $curr_dir); # крутимся, пока в списке присутствуют обрабатываемые каталоги.
}</pre>
<p>При удалении функция будет очень похожа, только теперь надо осуществлять поиск файлов в destination-репозитории и смотреть, есть ли они в source-репозитории:</p>
<pre>
sub remove_files
{
    my @directories = ();
    my $curr_dir = '';

    do
    {
        # опять же, открываем каталог destination-репозитория
        if (opendir DIRHDL, &quot;$dst_path$curr_dir&quot;)
        {
            CYCLE: # читаем файлы
            while (my $fname = readdir DIRHDL)
            {
                # баним недопустимые diren'ы
                my $src_file = &quot;$dst_path$curr_dir/$fname&quot;;
                (ban_file($src_file))
                    and next CYCLE;

                my $src_short = &quot;$curr_dir/$fname&quot;;
                my $dst_file  = &quot;$src_path$src_short&quot;;

                # проверяем, является ли это каталогом
                if (-d $src_file)
                {
                    # проверяем, существует ли этот каталог в source-репозитории
                    unless (-d $dst_file)
                    {
                        # каталога нет - удаляем его из destination-репозитория
                        print &quot;rmdir   $src_short\n&quot;;
                        `svn delete $src_file`;
                    }
                    else
                    {
                        # каталог существует, запоминаем его для дальнейшей обработки
                        push @directories, $src_short;
                    }
                }
                else
                {
                    # Это обычный файл, проверяем, есть ли он в source-репозитории
                    unless (-e $dst_file)
                    {
                        # Файла нет, удаляем его из destination-репозитория
                        print &quot;unlink  $src_short\n&quot;;
                        `svn delete $src_file`;
                    }
                }
            }
        }
        else
        {
            print &quot;Can't open dir $dst_path$curr_dir\n&quot;;
        }

        # Закрываем каталог, получаем следующий
        closedir DIRHDL;
        $curr_dir = shift @directories;
    }
    while (defined $curr_dir);
}
</pre>
</div>
<p>Недостаток этой тулзы один: если файл был перемещён, то он будет распознан как новый файл. Хотя, я не думаю, что файлы и каталоги так часто перемещаются в логически корректно построенном дереве проекта.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1050/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Не все виртуалки превосходны.</title>
		<link>http://sadko.xskernel.org/archives/1011</link>
		<comments>http://sadko.xskernel.org/archives/1011#comments</comments>
		<pubDate>Wed, 05 Nov 2008 23:22:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[bochs]]></category>
		<category><![CDATA[parallels]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1011</guid>
		<description><![CDATA[Tweet В связи с тем, что на форуме появился очень интересный баг: http://forum.xskernel.org/viewtopic.php?f=10&#038;t=18 Решил поиграться с виртуальными машинами, а именно проверить, как на них запускается XSystem. Вот что из этого получилось: В общем, APIC Timer дохнет по неизвестной причине в VirtualBox, что можно наблюдать на видео (в правом верхнем углу нет красных счётчиков как на [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1011',
  title: 'Не все виртуалки превосходны.',
  description: 'В связи с тем, что на форуме появился очень интересный баг:\nhttp://forum.xskernel.org/viewtopic.php?f=10&amp;t=18\n\nРешил поиграться с виртуальными машинами, а именно проверить, как на них запускается XSystem.\n\nВот что и...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1011"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&ETH;&micro; &ETH;&sup2;&Ntilde;&ETH;&micro; &ETH;&sup2;&ETH;&cedil;&Ntilde;&Ntilde;&Ntilde;&ETH;&deg;&ETH;&raquo;&ETH;&ordm;&ETH;&cedil; &ETH;&iquest;&Ntilde;&ETH;&micro;&ETH;&sup2;&ETH;&frac34;&Ntilde;&Ntilde;&ETH;&frac34;&ETH;&acute;&ETH;&frac12;&Ntilde;." data-url="http://sadko.xskernel.org/archives/1011">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>В связи с тем, что на форуме появился очень интересный баг:</p>
<p>http://forum.xskernel.org/viewtopic.php?f=10&#038;t=18</p>
<p>Решил поиграться с виртуальными машинами, а именно проверить, как на них запускается <b>XSystem</b>.</p>
<p>Вот что из этого получилось:<br />
<object width="425" height="350"><param value="http://www.youtube.com/v/JeHQk9QrMqA" name="movie" /><embed width="425" height="350" type="application/x-shockwave-flash" src="http://www.youtube.com/v/JeHQk9QrMqA"></embed></object></p>
<p><span id="more-1011"></span><br />
<object width="425" height="350"><param value="http://www.youtube.com/v/jvCne-Oc1K4" name="movie" /><embed width="425" height="350" type="application/x-shockwave-flash" src="http://www.youtube.com/v/jvCne-Oc1K4"></embed></object></p>
<p>В общем, <b>APIC Timer</b> дохнет по неизвестной причине в VirtualBox, что можно наблюдать на видео (в правом верхнем углу нет красных счётчиков как на остальных эмуляторах). Мало того, обычный <b>ISA Timer</b> работает очень медленно (обратите внимание на счётчик в левом верхнем углу).</p>
<p>Ну <b>ISA Timer</b> ещё можно простить, а вот <b>APIC Timer</b> почему дохнет &#8212; для меня загадка.<br />
Создал баг на сайте virtual box:</p>
<p>http://www.virtualbox.org/ticket/2573</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1011/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>А развитие идёт дальше&#8230;</title>
		<link>http://sadko.xskernel.org/archives/1009</link>
		<comments>http://sadko.xskernel.org/archives/1009#comments</comments>
		<pubDate>Sun, 02 Nov 2008 21:12:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[Кодинг]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1009</guid>
		<description><![CDATA[Tweet Выпущен новый релиз ОС XSystem &#8212; October 2008 Fishes: Carp. Основные нововведения: - Из дерева проекта удалены утилиты &#8216;xarch&#8217; и &#8216;fontcut&#8217;. - Полностью переписан планировщик (теперь более быстрый и надёжный). - Блочный распределитель памяти теперь выделяет блоки с адресом, кратным 8 байтам. - Исправлены ошибки в контроллере клавиатуры (теперь работает в Bochs). - Оптимизации [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1009',
  title: 'А развитие идёт дальше...',
  description: 'Выпущен новый релиз ОС XSystem - October 2008 Fishes: Carp.\nОсновные нововведения:\n- Из дерева проекта удалены утилиты \'xarch\' и \'fontcut\'.\n- Полностью переписан планировщик (теперь более быстрый и надёжный).\n- Блочн...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1009"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH; &Ntilde;&ETH;&deg;&ETH;&middot;&ETH;&sup2;&ETH;&cedil;&Ntilde;&ETH;&cedil;&ETH;&micro; &ETH;&cedil;&ETH;&acute;&Ntilde;&Ntilde; &ETH;&acute;&ETH;&deg;&ETH;&raquo;&Ntilde;&Ntilde;&ETH;&micro;&amp;#8230;" data-url="http://sadko.xskernel.org/archives/1009">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Выпущен новый релиз ОС XSystem &#8212; <b>October 2008 Fishes: Carp</b>.<br />
<u>Основные нововведения:</u><br />
- Из дерева проекта удалены утилиты &#8216;xarch&#8217; и &#8216;fontcut&#8217;.<br />
- Полностью переписан планировщик (теперь более быстрый и надёжный).<br />
- Блочный распределитель памяти теперь выделяет блоки с адресом, кратным 8 байтам.<br />
- Исправлены ошибки в контроллере клавиатуры (теперь работает в Bochs).<br />
- Оптимизации реализации библиотеки &lt;string.h&gt;.<br />
- Частично перенесён код Watcom C++ Runtime Library, необходимый для использования C++ &#8212; конструкций.<br />
- Изменены сборочные скрипты.<br />
- Кодовые страницы перемещены в &#8216;media/share/codepages&#8217;.<br />
- Изменён метод &#8216;for_file&#8217; в утилите &#8216;xsmake&#8217;.<br />
- Большинство архитектурно-зависимого кода вынесено в ветку &#8216;include/arch&#8217; ядра.<br />
- Написан прототип будущего механизма подкачки виртуальной памяти.<br />
- Добавлена поддержка записи конфигурационного пространства шины PCI (экспериментальное).<br />
- Реализована поддержка загрузки/сохранения контекстов FPU/MMX/SSE при переключении задач.<br />
- Добавлена защита от ошибочного прерывания со стороны PIC.<br />
- Доступна загрузка с USB Flash Drive.<br />
- Первичный загрузчик (&#8216;bootload&#8217;) полностью переписан для поддержки файловых систем FAT12 и FAT16.<br />
- Вторичный загрузчик &#8216;xload&#8217; переписан на C++.<br />
- Добавлены функции &#8216;unlink&#8217;, &#8216;cp&#8217; в утилите &#8216;xsmake&#8217;.<br />
- Добавлена условная конструкция &#8216;if-else&#8217; в утилиту &#8216;xsmake&#8217;.<br />
- Добавлена проверка зависимостей в OMF-файлах утилитой &#8216;xsmake&#8217;.<br />
- Переписана утилита &#8216;rawmake&#8217; (поддержка создания образов FAT12 и FAT16-дисков).<br />
- Утилиты &#8216;xsmake&#8217;, &#8216;exe2bin&#8217; и &#8216;rawmake&#8217; теперь также можно собрать с помощью GNU GCC под Linux.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1009/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Форум</title>
		<link>http://sadko.xskernel.org/archives/1004</link>
		<comments>http://sadko.xskernel.org/archives/1004#comments</comments>
		<pubDate>Tue, 14 Oct 2008 20:42:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[Одминское]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1004</guid>
		<description><![CDATA[Tweet Вот и дожили до того, что открыл форум своего проекта. Расположен он здесь: http://forum.xskernel.org/ Если есть желание реально поучаствовать в проекте и/или обсудить его &#8212; приветствую гостей. Основной сайт тут: http://xskernel.org/ . А здесь можно найти кое-какую полезную документацию: http://wiki.xskernel.org/ .]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1004',
  title: 'Форум',
  description: 'Вот и дожили до того, что открыл форум своего проекта.\nРасположен он здесь: http://forum.xskernel.org/\nЕсли есть желание реально поучаствовать в проекте и/или обсудить его - приветствую гостей.\nОсновной ...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1004"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&curren;&ETH;&frac34;&Ntilde;&Ntilde;&ETH;&frac14;" data-url="http://sadko.xskernel.org/archives/1004">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Вот и дожили до того, что открыл форум своего проекта.<br />
Расположен он здесь: http://forum.xskernel.org/<br />
Если есть желание реально поучаствовать в проекте и/или обсудить его &#8212; приветствую гостей.<br />
Основной сайт тут: http://xskernel.org/ .<br />
А здесь можно найти кое-какую полезную документацию: http://wiki.xskernel.org/ .</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1004/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Странно&#8230;</title>
		<link>http://sadko.xskernel.org/archives/1003</link>
		<comments>http://sadko.xskernel.org/archives/1003#comments</comments>
		<pubDate>Sun, 05 Oct 2008 17:56:00 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[XSystem]]></category>
		<category><![CDATA[Кодинг]]></category>
		<category><![CDATA[xsystem]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/archives/1003</guid>
		<description><![CDATA[Tweet Уже где-то вторую или третью неделю непроизвольно соблюдаю правило &#171;ни дня без коммита&#187;. Хм&#8230; К чему бы это? Наверное, к новому релизу&#8230; Написал статейку на WIKI про планировщик потоков: http://wiki.xskernel.org/doku.php/xskernel/ipc/scheduler Новый планировщик пофиксил много неприятных багов и корявостей в ядре. И (о чудо!), казалось бы, для более сложной реализации планировщика новая версия работает на [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1003',
  title: 'Странно...',
  description: 'Уже где-то вторую или третью неделю непроизвольно соблюдаю правило &quot;ни дня без коммита&quot;.\n\nХм... К чему бы это? Наверное, к новому релизу...\n\nНаписал статейку на WIKI про планировщик потоков:\nhttp://wiki...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1003"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&iexcl;&Ntilde;&Ntilde;&ETH;&deg;&ETH;&frac12;&ETH;&frac12;&ETH;&frac34;&amp;#8230;" data-url="http://sadko.xskernel.org/archives/1003">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Уже где-то вторую или третью неделю непроизвольно соблюдаю правило &#171;ни дня без коммита&#187;.</p>
<p>Хм&#8230; К чему бы это? Наверное, к новому релизу&#8230;</p>
<p>Написал статейку на WIKI про планировщик потоков:</p>
<p>http://wiki.xskernel.org/doku.php/xskernel/ipc/scheduler</p>
<p>Новый планировщик пофиксил много неприятных багов и корявостей в ядре. И (о чудо!), казалось бы, для более сложной реализации планировщика новая версия работает на порядок быстрее старой.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1003/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

