セルゞュぞのむンタビュヌ

KolibriOSプロゞェクトで最も生産性の高い開発者の1人であるSergey Semenov aka Serge Habr ion2 のむンタビュヌに泚目したす。



むンタビュヌは、 ワむルドりェストずしおも知られるセルゲむクズミン  Habrr W__Wで によっお行われたした。



趣味はありたすか



䞀床タンクず飛行機をタンクに接着したした 。 趣味はプログラミングの鉄になり、ドキュメントを読んで、他の人のコヌドを孊ぶようになりたした。



い぀、どのようにしおコンピュヌタヌずプログラミングに興味を持ちたしたか どの本が圹に立ちたしたか



たず、プログラム可胜な蚈算機ず、Science and Life誌の最初の蚘事がありたした。 1985幎でした。 それ以前は、ホヌムコンピュヌタヌは月ぞの飛行のように非珟実的でした。 その埌、Spark 1080が登堎し、その䞊でアセンブラヌ8080を調べたした。

曞籍「Borland C ++に぀いおはシンプルで明確」、チャヌルズカルバヌトの優れた「21日間でWindowsプログラミングを理解する」、「パヌ゜ナルコンピュヌタヌ甚のCプログラミング蚀語」、「プログラムの開発にTurbo Assemblerを䜿甚する」 もちろん、Kulakovによる「ハヌドりェアレベルでのプログラミング」および他の2ダヌスの本、Straustrupはその䞭です。 しかし、本棚の名誉ある堎所は、IA-32 Intel Architecture Software Developer's Manualの3巻ず最適化ガむドで占められおいたす。 Intelがこれらのレンガを䞖界䞭に送った時がありたした。

非衚瀺のテキスト
暖かいランプのマニュアルたで





曎新埌





どのOSを詊したしたか 自宅、職堎、お気に入りのOSは䜕ですか



DOS 3.0、4.0、5.0、およびほがすべおのWindows3.1、95、95OSR2、98、NT4.0、XP、Win7。

珟圚の䟡栌は8.1です。私にはかなり䌌合いたすが、以前のものからハミングバヌドにリロヌドする方が䟿利でした。 たた、異なるLinuxを䜿甚し、Debian JessieずKDEデスクトップに萜ち着きたした。



あなたはどのプログラミング蚀語を知っおいたすか、なぜそれらを孊びたしたか どれが他の人よりも奜きですかその理由は



倧孊のコヌスで圌らはPL / Mを導入し、孊校では圌らを筆で拷問したした。 研究所には、 クラリオン 2.0の䜜業䞭に匷制的なフォヌトランがありたした。 私はしばらくの間Borland Pascal 7.0を䜿甚しおいたしたが、このひどい構文にうんざりしおCに切り替えたした。 それから20幎が経ちたした。



KolibriOSに関係のないプロゞェクト以前および珟圚に぀いお、あなたは䜕を蚀うこずができたすか



今は䜕も残っおいたせん。



KolibriOSをい぀、どのように発芋したしたか 圌女のためにすぐに開発を始めたしたか なぜ圌女のためにプログラミングしおいるのですか



2001幎に、ComputerraのMenuetOSに関する小さなメモがありたした。 おそらくそこには、ダりンロヌドしたばかりの0.38が非垞に遅くなり、恐ろしく芋えたので、圌らは他のMenuetに぀いお曞きたした。 時々、新しいバヌゞョンをチェックし、2006幎にハミングバヌドに出䌚いたした。 新しいシステムは倖芳がずっずきれいで、動䜜も高速でした。 それから私はフォヌラムに行き、IRQ凊理に぀いお議論したした。 誰かがたた間違っおいた。 そしお吞い蟌たれた。 私はい぀も鉄で遊ぶこずに興味がありたした。 ハミングバヌドは、コアず鉄の間に耇雑なHAL䞭間局がないずいう点で䟿利です。 すべおが非垞にシンプルで明確であり、カヌネルは即座にコンパむルおよびロヌドされたす。 これは、100回行うずきに重芁です。



KolibriOSプロゞェクトで䜕をし、䜕をしたしたか プロゞェクトの珟圚のステヌタスずその履歎を説明したす。



最初のプロゞェクトはサりンドサブシステムでした。 Hummingbirdには、 Ivan Poddubnyのac97wavずいうプレヌダヌがいお、コントロヌラヌずコヌデックを盎接操䜜しおいたした。 問題は、プログラムがコントロヌラヌからの割り蟌みを凊理できず、クリック音が鳎るずいうこずでした。次に、ハヌドりェアぞの排他的アクセスでした。 耇数のプログラムが同時にサりンドを出力できるように、ダりンロヌド可胜なドラむバヌずシステムミキサヌを䜜成する必芁がありたした。 AC97のコントロヌラヌドラむバヌには特別な問題はありたせんでしたが、ヘッドフォンが銬鹿げお焌かれおいたしたが、カヌネルはダりンロヌド可胜なドラむバヌをサポヌトしおいないため、非珟実的なDOSモヌドでコヌドをテストする必芁がありたした。 カヌネルに仮想メモリを割り圓おたり、物理ペヌゞを必芁なアドレスにマップしたり、IRQハンドラヌをむンストヌルしたりするこずは䞍可胜でした。 ファむルをダりンロヌドするための内郚機胜すらありたせんでした。 これは、0x40カヌネルコヌルを介しお行う必芁がありたした。 その結果、Hummingbirdでサりンドが衚瀺される前に、ペヌゞず仮想メモリの管理、ドラむバヌロヌダヌ、およびIRQ凊理をやり盎す必芁がありたした。

ただ䞍完党な2番目の䞻芁な䜜業は、「フィンランドの困難な過去」の遺産を克服するこずでした。 たず、倉数のシンボル名はMenuetコヌドで䜿甚されおいたせん。 初期の改蚂では、ハチドリは通り抜けなければなりたせんでした

mov eax、[0xFE00]

shr eax、1

mov [0xFB0A]、ax

mov eax、[0xFE04]

shr eax、1

mov [0xFB0C]、ax



たたは



mov edi、[0x3004]; 最埌のプロセス数倀

movzx esi、ワヌド[0xC400 + edi * 2]

shl esi、5

esi、window_dataを远加したす



第二に、「小さなアセンブラヌコア」はメモリを完党に倧量に消費したした。 バむト倉数の堎合、キロバむトの割り圓おが䞀般的でした。数十キロバむトのバッファの堎合、アドレスは絶察的であるため、矎しいラりンド倀に調敎されたした。 これはすべお貧困からでした。 カヌネルがメモリを動的に割り圓おる方法を知らない堎合、静的に䜙裕を持っお予玄したす。 埐々に、すべおの絶察アドレスがシンボリックラベルに眮き換えられ、カヌネルの食欲は玄3倍瞮小されたした。

たた、コアには倚くの小さな倉化があり、それほど倉化はありたせんでした。 最初に、ハヌドりェアカヌ゜ルを含むATI R100-R500甚のアセンブラドラむバがありたした。 その埌、AMDはradeonhdを導入し、Hummingbirdではビデオモヌドを倉曎する機䌚がありたした。 数か月埌、LinuxカヌネルはHummingbirdに続きたした:-) KMSに切り替え、新しいドラむバヌが再び移怍されたした。 11の終わりにi915のドラむバヌが登堎し、2幎埌にMesaドラむバヌのi965ず最初の「鉄」ギアが回転し始めたした。 䞊行しお、ffmpegが移怍され、それに基づいたビデオプレヌダヌが䜜成されたした。 +いく぀かの人気のあるラむブラリを移怍したした cairo 、 freetype 、 libpng 、 zlib 、 mesa 。 最埌のプロゞェクトはbinutils ld objcopy stripであり、Hummingbirdに盎接リンクする必芁があるすべおです。

非衚瀺のテキスト
FPlayビデオプレヌダヌ





デモカむロ





Hummingbird組み蟌みフォント巊ずDroid Sans MonoおよびFreeType 2.5





開発䞭のカヌネルブランチに぀いお教えおください。



kolibri-acpiは、kolibri-nextずより正確に呌ばれたす。 ここで、コヌドはメむンコアに含たれる前にテストされたす。



Kolibri-process-マルチスレッドアプリケヌションのサポヌトの改善。 倉曎はメむンコアにアップロヌドされ、ブランチは䞍必芁に削陀されたす。



kolibri_pe-歎史ず動機はフォヌラムで読むのが䞀番です。 䜜業の最初の郚分は正垞に完了したした。 Cおよびアセンブラのカヌネルコヌドは、固定ベヌスアドレスを持぀PE DLLのldを䜿甚しおリンクされたした。 カヌネルはGRUBをロヌドし、保護モヌドからリアルモヌドにゞャンプし、オプションを遞択しおお気に入りの青いブヌト画面を衚瀺し、グラフィックモヌドをオンにしお保護モヌドに戻りたした。 プロゞェクトの衚玙の最初の釘は、AMDによっお打たれたした。 redéonhdドラむバヌが衚瀺され、すぐに切り替えたした。 2番目の釘はCCPゲヌムからのものでした。



結果は、倜のアセンブリで、プロゞェクトのFTPサヌバヌに衚瀺されたす 。 これらのプロゞェクトの䞭で最も難しいものはどれですか



運呜の移怍。 メヌ゚ットのバヌゞョンはすでに存圚しおいたため、䜜業はそれほど耇雑ではないようでした。䞻なタスクはサりンドを远加するこずでした。 しかし、いたいたしいプログラムはロヌド埌にクラッシュし、䜕が問題なのかが完党に䞍明でした。 id SoftwareずOpen Watcomがsizeofboolを異なる方法で定矩するこずが刀明するたで、1週間のデバッグに察凊する必芁がありたした。 その埌、すべおが時蚈仕掛けのようになりたした。

非衚瀺のテキスト
ポヌトドゥヌム





さたざたな䌁業のデバむス甚にプログラミングした堎合は、ドキュメントを読んでください。 鉄の郚分たたはOSの郚分に制限があった困難な瞬間がありたしたか



ハチドリは、ACPIたたはデバむスマネヌゞャヌをサポヌトしおいたせん。 これは倚くの問題を匕き起こしたす。 たずえば、カヌネルは䟝然ずしお先史時代の8259Aモヌドで割り蟌みを凊理し、BIOSは共有されたIRQラむンを異なるPCIデバむスに割り圓おるこずがよくありたす。 理論的には、この線の分離は機胜するはずですが、実際にはそうではありたせん。 カヌネルはAPICモヌドでも動䜜したすが、これにはナヌザヌ偎での準備アクションが必芁であり、残念ながら肯定的な結果は保蚌されたせん。

PCIバス䞊のデバむスを列挙するず、䜿甚されおいるリ゜ヌスに関する情報が埗られたすが、ACPIがないず䞍完党です。 デバむスi915 Gen3 gpuは、空いおいる物理アドレスの範囲を必芁ずし、カヌネルはそれをバックアップするのに十分なデヌタを持っおいない堎合がありたす。 たた、最初の16MBでのみ動䜜する叀代のSoundBlasterもあり、静的にメモリを予玄する必芁がありたす。



サりンドおよびビデオカヌド、ポヌティングラむブラリ、ビデオプレヌダヌのドラむバヌ...次は䜕ですか



AMD Radeonの3DドラむバヌおよびFplayでのハヌドりェアビデオデコヌドの蚈画。 残念ながら、これにはいく぀かの障害がありたす。 Fplayはffmpegを䜿甚しおおり、その開発者はVAAPIずlibVAの開発者にあたり銎染みがありたせん。おそらく、埌者には独自のgstreamerがあるためです。 䞀方、ffmpegにはvdpauで十分な機胜が備わっおいるため、Galluim3Dのr600ずradeonsiの準備が敎うずすぐにデコヌダヌは無線で動䜜したす。 しかし、それらはllvmに䟝存しおおり、移怍されたllvmは予想されるコヌドの代わりに生成したす... llvmが䜕をどのように生成するかは正確にはわかりたせん。



倚くの堎合、初心者が来お、OSの個々の郚分を曞き換えお、他のハヌドりェアプラットフォヌムに移怍するこずに぀いお尋ねたす。 たずえば、 mike.dld 、 art_zhなどから、単䞀の開発者のフォヌクでさえ時々珟れたす。 これに぀いおどう思いたすか



萜ち着いおいたす。 自分でフォヌクを起動しおから終了したした。



KolibriOSにずっお、ハヌドりェアプラットフォヌムたたは他のオペレヌティングシステムずの互換性は重芁ですか



x86甚のHummingbirdアセンブリシステム。 他のハヌドりェアプラットフォヌムに぀いお話すこずはほずんど意味がありたせん。



基本的に、C ++プログラムを䜜成しお移怍したす。 開発に䜿甚するツヌルは䜕ですか



WindowsずLinuxのバヌゞョンのgcc-4.8.2ずbinutils-2.24に基づくツヌルチェヌンず、libstdc ++などの必芁なラむブラリの小さなセットがありたす。



欠萜しおいる関数を远加しお、暙準のコンパむララむブラリを線集する必芁がありたすか POSIXはどの皋床完党にサポヌトされおいたすか



C / C ++プログラムは、 newlibを暙準ラむブラリずしお䜿甚したす。 すべおはffpmegベヌスのビデオプレヌダヌから始たりたした。 最初のバヌゞョンには、最䜎限必芁な機胜数がありたした。 新しいプロゞェクトごずに、必芁な機胜をnewlibに远加したす。 これは確かに間違っおいたすが、暙準ラむブラリの移怍は退屈な䜜業です。 menuetlibcでは、POSIXは倧容量でサポヌトされおいたす。 䞀般に、POSIXの問題はすべお克服可胜であり、少しの忍耐ず忍耐が必芁です。



プログラマヌになりたいず思っおいる人に䜕かアドバむスはありたすか どの蚀語を詊すべきですか 新しいOSの開発者に䜕をお勧めしたすか 開始方法 読むべき教科曞は䜕ですか



以前は、コヌドが最終的にどのようになるかを理解するために、タヌゲットプラットフォヌムのアセンブラヌを調べるこずをお勧めしたす。 そしお今、すべおがクロスプラットフォヌムであり、解釈されおおり、それが䜕で実行されるかは䞍明です。 しかし、OS開発者にはいく぀かのヒントがありたす。

  1. 既存のプロゞェクトに参加するか、志を同じくする人々を芋぀けおください。 3぀のヘッドは1぀より4倍優れおいたす。
  2. 特に単独で、マむクロカヌネルを䜿甚しお開発を開始しないでください。 ドラむバヌずアプリケヌションを開発するこずはより困難になりたす。
  3. 「比類のないナニヌクなAPI」を思い぀いたら、POSIXに぀いお考えおください。 遅かれ早かれ、互換性が必芁になりたす。




さお、読者の皆さん、ハミングバヌドに関連するトピックに぀いお質問したいのですが、蚘事を芋たいですか



All Articles