İşletim sistemi geliştirmeye başlamak için bazı kaynaklar nelerdir? [kapalı]


589

Her zaman yapmak istediğim bir şey, kendi işletim sistemimi geliştirmektir (Linux veya Windows gibi süslü olmak zorunda değil, daha önce yaptığım basit bir önyükleyiciden daha iyi).

Basit bir "Merhaba Dünya" işletim sistemi yazarak geçmişe götüren kaynakları / kılavuzları bulmakta zorlanıyorum.

Linux veya BSD'ye bakmamı muhtemelen birçok insanın tavsiye edeceğini biliyorum; ama böyle sistemler için kod tabanı (muhtemelen) o kadar büyük ki, nereden başlayacağımı bilemezdim.

Herhangi bir öneri?

Güncelleme: Bu yayına Google üzerinden ulaşan kişilerin daha kolay olması için bazı işletim sistemi geliştirme kaynakları:

Diğer kaynaklar:

MikeOS adında güzel bir kaynak buldum , "MikeOS, işletim sistemlerinin ne kadar basit çalıştığını göstermek için bir öğrenme aracıdır. BIOS erişimi için 16 bit gerçek modu kullanır, böylece karmaşık sürücülere ihtiyaç duymaz"

Güncelleme 11/14/08

Freebyte'nin Kılavuzunda ... OSKit ve ExOS kütüphanesi gibi kitlere bağlanan ücretsiz ve özgür olmayan İşletim Sistemleri için bazı kaynaklar buldum . Bunlar, OS geliştirmeye başlarken çok yararlı görünüyor.

Güncelleme 23.02.209

Ric Tokyo önerilen nanoos bu soruya . Nanoos, C ++ ile yazılmış bir işletim sistemidir.

Güncelleme 3/9/09

: Dinah OS geliştiricileri hedefleyen bazı yararlı yığın taşması tartışma sağlanan özel bir işletim sistemi oluştururken Roadblock'lar bir işletim sistemi geliştirmek ve sırasında karşılaşabileceğiniz ne tuzaklar tartışmaktadır OS Geliştirme daha genel bir tartışmadır.

Güncelleme 7/9/09

LB , işletim sistemi geliştirmeyi öğrenen öğrenciler için tasarlanmış bir eğitim işletim sistemi olan Pintos Projesi'ne bir bağlantı sağladı .

Güncellendi 7/27/09 (Hala güçlü gidiyor!)

Berkley'den 23 derslik bir çevrimiçi işletim sistemi kursuna rastladım .

TomOS , küçük bir bellek yöneticisi ve fare desteği içeren bir MikeOS çataldır . MikeOS olarak eğitim projesi olarak tasarlanmıştır. NASM montajcısında yazılmıştır.

Güncelleme 8/4/09

Yukarıda listelenen çevrimiçi Berkeley dersleriyle birlikte slaytları ve diğer materyalleri buldum .

Güncelleme 23.08.209

Bütün sorular stackoverflow üzerinde osdev olarak etiketlendi

OS / 161 , simüle edilmiş bir donanımda çalışan c ile yazılmış akademik bir işletim sistemidir. Bu işletim sistemi Nachos'ta benzerdir. Teşekkürler Novelocrat!

tangurena , gömülü sistemler için tasarlanmış bir işletim sistemi olan http://en.wikipedia.org/wiki/MicroC/OS-II ürününü önerir . Bir de eşlik kitabı var .

Robert Love tarafından Linux Çekirdek Geliştirme Anders tarafından önerilmektedir. "Yaygın olarak alkışlanan içeriden öğrenenin Linux çekirdeğine bakışı" dır.

Güncellendi 9/18/2009

Tim S. Van Haren , tamamen c # ile yazılmış bir işletim sistemi olan Cosmos'u bize anlattığınız için teşekkür ederiz .

tgiphil bize Yönetilen İşletim Sistemi İttifakı (MOSA) Çerçevesi , "Ortak Ara Dile dayalı yönetilen işletim sistemlerinin geliştirilmesini teşvik etmek için bir dizi araç, özellik ve kaynak kodu" anlatıyor .

Güncelleme 24.09.2009

Steve, Visual Studio kullanarak pencerelerde geliştirme için birkaç kaynak buldu , VS 2005 veya OSDev'in VS Bölümü ile BrokenThorn'un rehber kurulumuna göz atın .

Güncelleme tarihi: 9/5/2012

kerneltrap.org artık mevcut değil. Linux çekirdeği v0.01 kernel.org adresinden edinilebilir.

Updated 12/21/2012 Bir dönem projesi olarak tasarlanmış temel bir OS geliştirme öğretici . Temel bileşenlere sahip bir işletim sistemi kurmanız için size yol gösterir. Yeni başlayanlar için çok iyi bir başlangıç. İlgili makale . Teşekkürler Srujan!

Güncelleme: 15.11.2013

Sıfırdan Basit Bir İşletim Sistemi Yazma . Teşekkürler James Moore!

8.12.2013 tarihinde güncellendi

Nasıl bir bilgisayar işletim sistemi yapmak Teşekkürler ddtoni!

18.03.2014 Güncellendi

ToAruOS, GUI dahil olmak üzere çoğunlukla sıfırdan oluşturulmuş bir işletim sistemi

Güncelleme: 12 Eylül 2016

Kendi Oyuncak İşletim Sisteminizi Yazmak

Güncelleme: 10 Aralık 2016

Scratch'tan Basit Bir İşletim Sistemi Yazma (teşekkür ederim @Tyler C)



15
Bu tür iyi genel amaçlı sorular neden SO'da her zaman kapalıdır?
Pratik Singhal

30
Bu soru 370 upvotes var, 422 kez upvated ve StackOverflow ilk başlatıldığından beri etrafında olmuştur. Topluluk hoşuna gitmiş gibi görünüyor, ama bir nedenden dolayı bir avuç insan bunu herkes için mahvetmek zorunda. BU yüzden
SO'dan

1
Bu çabaların çok alakalı olduğu Unikernels ile çok ilginç bir eğilim var (sadece bir şey yapın ve iyi yapın). Bir sanal makinede genellikle tek bir dosyayı soğuk önyükleyebilir ve kullanıcı kodunu bir saniyeden daha kısa sürede çalıştırabilirsiniz. Böyle bir hizmet için DNS aramasının, DNS sunucusunu "önyükleme sanal makinesi" tetiklediği bir çözüm gördüm, bu yüzden hizmet için gerçek istek geldiğinde hazır.
Thorbjørn Ravn Andersen

Yanıtlar:


95

Bu kısa genel bakıştan sonra , X86 platformu için bir işletim sistemi yazmaya neyin dahil olduğuna dair çok sayıda bağlantı var .

En umut verici görünen bağlantı (www.nondot.org/sabre/os/articles) artık mevcut değildir, bu nedenle okumak için Archive.org sürümünü okumanız gerekir.

Günün sonunda önyükleyici çekirdeğin makine kodunu alır, belleğe koyar ve ona atlar. İstediğiniz çekirdeğe herhangi bir makine kodu koyabilirsiniz, ancak çoğu C programı bir işletim sistemi bekler, böylece derleyicinize bunların hepsine sahip olmayacağını veya önyükleyicinin bir kısmını oluşturması gerektiğini söylemeniz gerekir.

Çekirdek daha sonra tüm ağır kaldırmayı yapar ve bunun istediğiniz örnek çekirdek olduğundan şüphelenirim. Ancak, "Merhaba dünya" yazan bir çekirdeğe sahip olmak ile komut yorumlayıcı yükleyen, disk hizmetleri sağlayan ve programları yükleyen ve yöneten bir çekirdeğe sahip olmak arasında uzun bir yol vardır.

Eski literatürlerine erişmek için ACM'ye abone olmayı düşünebilirsiniz - 80'lerin sonlarında ve 90'ların başında, erken işletim dergilerinde alternatif işletim sistemlerinin nasıl oluşturulacağına dair birçok makale var . Bu döneme ait baskısı tükenmiş kitaplar da vardır. Aynı bilgileri, bu dergilerin dizinlerine bakarak (bu sitede bulunan - dergi adının yanındaki "index" i tıklayın) ve daha sonra bir kopyası olan kişileri sorarak ücretsiz olarak edinebilirsiniz.

Son olarak, usenet'in öldüğünü biliyorum (yani internet kıyametinin peygamberleri için), ancak o dönemin sarp eski uzmanlarının çoğunun hala orada yaşadığını göreceksiniz. Google gruplarında arama yapmalısınız (dejanews'in eski deposuna sahipler) ve şu anda sorduğunuz on yıl veya 1,5 yıl önce aynı soruları soran birçok insan bulacağınızı umuyorum. Linus Torvalds'ın başlangıçta linux geliştirdiği için birçok yardım sorgusuyla bile karşılaşabilirsiniz. Aramalar hiçbir şey getirmezse, uygun haber grubunda sorun (muhtemelen comp.arch ile başlar, ancak adında işletim sistemi olanları arayın).


hey efendim, COSMOS işletim sistemi geliştirmek için iyi bir araç mı?
Vikas Verma

@VikasVerma Kullanmadım, bu yüzden bilmiyorum.
Adam Davis

@AdamDavis İlk bağlantı koptu (ve diğerleri de öyle görünüyor). Lütfen düzeltin!
nbro

35

Minix çok daha küçüktür ve öğrenme amaçları için tasarlanmıştır ve onunla birlikte gitmek için de iyi bir kitaptır .

Güncelleme: Sanırım Minix 3 biraz farklı bir hedef, ama Minix 2 (ve tabii ki ilk versiyon) öğretim amaçlıydı.


En son Tanenbaum kitabım var ama minix3 kaynak kodu oldukça büyük görünüyor! OP gibi benzer bir hedefim var, sıfırdan bir çekirdek oluşturmak istemezken, bir çekirdeğin nasıl çalıştığını ve ne yaptığını gerçekten anlamak istiyorum. Tanenbaum book and minix3Minix3'te değişiklik yapmak için yeterli olanı takip etmek sonunda linux çekirdeğine katkıda bulunmamda yardımcı olur mu?
gideon

32

Sıfırdan gerçek zamanlı bir çoklu görev işletim sistemi yazmış biri olarak ...

klavye açılma rutini, klavye sürücüsü, disk sürücüsü, video sürücüsü, dosya sistemi ve son olarak bir önyükleyici - ve bu sadece ilk kez yapılacak bir şey olmadan başlatmak için!

... donanıma aşina olmanın ne kadar önemli olduğunu vurgulayamıyorum! Bu özellikle, sadece sizin için başkalarının ortaya koyduğu ilkel bir sistemi almak yerine, hepsini kendiniz yapmak istiyorsanız. Örneğin, Intel'e başvurun ve CPU türünüz için bir CPU kartı isteyin! Bu sizin için ortaya koyacaktır - "pin-outs", keser, opcodes, adını siz koyun!

Donanımı mümkün kıldığını unutmayın. Donanımı inceleyin. Pişman olmayacaksınız.

.


18

Bir mikrodenetleyici işletim sistemi yazın. Bir x86 tabanlı mikrodenetleyici öneririm. Modern bir işletim sistemi çok büyük . Önce temel bilgileri öğrenin.


2
bununla nereden başlayacağına dair bir fikrin var mı? ben çok ilgileniyorum ne kit satın almak .. vb başlatmak için kitaplar
Julio

@ Unncle: Bugüne kadar birinci sınıf bir gömülü sistem kitabı ile karşılaşmadım. Ya çok üst düzeyler ve bir işletim sistemi varsayarlar ya da bir elektrik mühendisine yönlendirilirler ve kodu görmezden gelirler. Kitlere gelince, bir google bir " bifferos.bizhat.com " bulur . Orada da ARM kitleri var. Ben arduino de ilgisiz am yüzden şahsen değil Harvard mimarileri gibi yaparlar, ama olduğunu en popüler. Daha egzotik işler için XC-1A da güzel.
Paul Nathan

@Paul, cevabınızı genişletebilirseniz memnun olur. AVR ve Arduino'ya baktım , ancak yakın zamanda .NET mikro gördüm. Ben çok daha yüksek bir soyutlama LOB adamım ama yığın yürümeye başlamak istiyorum. Nereden başlamayı önerirsiniz?
Mart'ta gideon

@giddy: AVR'ler geçerli moda. Küçük ve ucuzlar, ama mimariyi gerçekten sevmiyorum. Bir ARM dev kiti (est maliyet ~ 100) almanızı tavsiye ederim. Ticari uygulamalarda popülerdirler.
Paul Nathan

@ Paul teşekkürler! ARM hakkında pek bir şey duymadım. .Net micro ne olacak? Bir şeyi yakma konusunda biraz endişeliyim. Çoğu kit bir tür talimatla gelecek değil mi? Tekrar teşekkürler.
Mart'ta gideon

16

Kendi işletim sistemi geliştirme hakkında tüm bilgi almak için bir yer olsaydı. Buna en yakın OS OS Wiki ve Forumlar . Kurulum, geliştirme ve cihaz donanım bilgileri ile ilgili bir ton iyi bilgi sunarlar.

Ayrıca bazı büyük dersler vardır BoneFide , ben tarafından başlarken öğretici kullandım Bran ve şimdi onun denilen dayalı daha yeni biri bakıyorum Rulo kendi oyuncak UNIX klonu OS .

İkinci olarak şunu kontrol ediyorum: "İşletim Sistemleri: Tasarım ve Uygulama"

Windows'da geliştirmek istiyorsanız, jolson'un blog gönderisine göz atın .

Düzenleme: Visual Studio kullanarak pencerelerde geliştirme için BrokenThorn'ın kılavuzuna veya OSDev'in wiki'sine bakın .


1
İlgili: SO'nun x86 etiketi wiki'sinde Intel / AMD kılavuzlarına bağlantılar ve birçok iyi şey var.
Peter Cordes

15

Mükemmel bir kaynak MIT 6.828: İşletim Sistemi Mühendisliği dersinin malzemesidir.

XV6 - x86 için ANSI C ile yazılmış basit Unix benzeri öğretim işletim sistemi http://pdos.csail.mit.edu/6.828/2012/xv6.html

XV6 kaynağı - satır numaralarıyla basılı bir kitapçık olarak http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

XV6 kitabı - os tasarımının ana fikirlerini açıklıyor http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

Malzeme kompakttır: 92 sayfa kaynak ve 96 sayfa yorumlama.

Minix kitabından daha çok hoşuma gitti! Gerçek bir mücevher!



9

Kitaplarda işletim sistemi temelleri için iyi kaynaklar vardır. Sıfırdan yeni işletim sistemleri oluşturmak için çok fazla çağrı olmadığından, internette bir ton hobi türü bilgi bulamazsınız.

Tanenbaum'un "Modern İşletim Sistemleri" adlı standart ders kitabını öneriyorum. Ayrıca Calingaert'i kullanarak "İşletim Sistemi Elemanları" nı bulabilirsiniz - bir tasarımcının bakış açısından bir işletim sisteminin ne olduğuna dair kaba bir taslak veren bir kitabın ince bir genel görünümü.

Gerçek zamanlı sistemlere ilgi duyuyorsanız (ve en azından gerçek zamanlı işletim sistemlerinin farklılıklarını ve nedenlerini anlamalısınız) Labrosse tarafından "MicroC / OS-II" yi de öneririm.

Düzenle:

Ne demek istediğinizi "daha teknik" olarak belirtebilir misiniz? Bu kitaplar sahte kod uygulama ayrıntıları verir, ancak belirli bir makine / dil için örnek bir işletim sistemi veya kod parçacıkları mı arıyorsunuz?

-Adam


7

Sadece başka bir sorudan geliyor. Pintos'tan bahsetmek istiyorum ... Nachos ile yaptığım OS kursumu hatırladım ve Pintos x86'da çalışabilecek bir şey gibi görünüyor.


7

Robert Love'ın Linux Çekirdek Geliştirme'yi oldukça ilginç buldum. Linux çekirdeğindeki farklı alt sistemlerin nasıl çok yeryüzünde çalıştığını anlatıyor. Kaynak mevcut olduğundan, Linux saldırıya uğraması gereken bir şey için en iyi adaydır.



6

Lisanstaki işletim sistemleri kursum, OS / 161 için bir dizi alt sistem inşa etmemizi sağladı ; basit, BSD benzeri bir çekirdek, üst düzey hizmetlerin uygulanmasında çeşitli tasarım alanı kararlarını keşfetme özgürlüğünü bırakıyor.


6

Minix'te hack yapmaya başlayın. Linux'tan çok daha küçüktür (açıkçası) ve öğretim amaçları göz önünde bulundurularak tasarlanmıştır (bazıları, en azından). Minix 3 değil, bu tamamen farklı bir hikaye.


5

Zaten cevap verdim, ancak üniversitede İşletim Sistemlerini aldığımda erken bir linux çekirdeği ile başladık ve basit modern özellikler (temel dosya sistemleri, sanal bellek, çoklu görev, muteksler) ekledik. İyi eğlenceler. Bazı bağırsakları hala öğrenirken, gerçekten korumalı mod ve sayfa tablolarını mucking için GERÇEKTEN deli düşük seviye montaj bazı şeyler atlamak için olsun.

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2


4

Linuxfromscratch'a bakmak isteyebilirsiniz .

Linux From Scratch (LFS), tamamen özel kaynak koddan kendi özel Linux sisteminizi oluşturmak için adım adım talimatlar sağlayan bir projedir.


32
Bir işletim sistemini derlemek, bir sistem yazmaktan çok uzaktır.
duskwuff -inactive-

7
@duskwuff Haklısın ama ondan çok şey öğreneceksin. Sonra devam edip kendiniz yazabilirsiniz.
jfs

4

Bir dönem projesi olarak tasarlanmış basit ve temel bir işletim sistemi geliştirme öğreticisi . Temel bileşenlere sahip bir işletim sistemi kurmanız için size yol gösterir. Yeni başlayanlar için çok iyi bir başlangıç. İlgili makale burada .


Harika kaynaklar. Makale Nachos (2500 satır kod), OS / 161 (11000), MINIX (30000), GeekOS'a atıfta bulunmaktadır. Her üniversite resmi sayfasına gittiğinizde, kaynak kodu, simülatör ve araçları ve yıllık ödevleri bulacaksınız.
limitcracker



3

Yönetilen İşletim Sistemi Birliği (MOSA) Projesi göz atın www.mosa-project.org . C # 'da bir AOT / JIT derleyicisi ve tamamen yönetilen işletim sistemi tasarlıyorlar. Geliştiricilerin bazıları etkin olmayan SharpOS projesindendir.


3

"Tamamen CIL uyumlu dillerde uygulanan bir işletim sistemi projesi" olan Cosmos ile oynadım . C # ile yazılmış, bu yüzden benim sokak kadar oldu. Benim gibi bir işletim sistemi kurmaya çalışmayan biri için, "Hello World" işletim sistemini kısa sürede çalıştırmak gerçekten çok güzeldi.



3

Yukarıda belirtildiği gibi, OSDev Wiki (bugüne kadar) OS geliştirme için en iyi kaynaktır. Almanca bilenler için lowlevel.eu Wiki de harika. Nispeten bilinmeyen bir şey Incitatus OS , küçük bir kullanıcı alanı uygulamaları setine sahip basit bir çekirdek. İşletim sistemi geliştirmenin karmaşık konusuna girmek için kullanmak harika.


2

Movitz , Common Lisp ile yazılmış ve "metal üzerinde" çalışan bir Lisp ortamıdır. Ne yazık ki, bazı bağlantılar Movitz ana sayfaya erişimi reddetmek, ancak kaynak kodunu indirip derlemek için nasıl talimatlar bulabilirsiniz trac sayfa . Ayrıca, bu sayfanın arşivinde hazır bir resim bulunabilir .

IMHO, Lisp makine konseptini şu anda mevcut olan donanımda geri getirdiğinden bu son derece ilginç . Ticari olarak başarısız oldu, ama bu bana fikrin kötü olduğunu kanıtlamıyor.

Unix haters el kitabı , Unix kavramını ve türevlerini yarı ciddiye alan eğlenceli bir kitap. Birçok bölüm Lisp makine konseptinin ne kadar iyi olduğu konusunda tartışıyor.


2

İşte " Sıfırdan Basit Bir İşletim Sistemi Yazma " adlı bir makale . Bir önyükleyici yazmayı, x86-32 korumalı moda girmeyi ve C'de temel bir çekirdek yazmayı kapsar. Her şeyi ayrıntılı olarak açıklamakta iyi bir iş çıkarmış gibi görünüyor.


Bu kitabı takip ettim ve koduna göre geliştirdim. Böyle bir kitapla başlamak harika.
user3405291


1

Programcılar için ilginç soru. Windows veya Mac gibi işletim sistemi oluşturmak uzun zaman alacaktır, ancak basit bir tane oluşturmak istiyorsanız elinizden gelenin en iyisini deneyebilirsiniz

  1. Montaj Dili, C ve C ++ üzerine odaklanmanız gerekir. Bu dillerde uzman olmalısınız.
  2. Önce işletim sisteminin nasıl çalıştığına dair iyi bir kitap okuyun [Google it], ardından Wiki OS'deki tüm bilgileri okuyun
  3. Youtube'da Ara "Montaj Dili'nde kendi işletim sisteminizi nasıl oluşturabilirsiniz" videosunu izleyin, Ör. Video
  4. Linux OS kaynak kodunu indirin ve kendiniz derleyin ve kodu kendiniz değiştirmeye çalışın
  5. Şimdi Minix ve QNX indirmek deneyimli bir OS editörü ve onlarla geliştirmeye başlamak ve buradan belgeleri almak Minix Doc ve QNX Doc

Şimdi işletim sistemi oluştururken master derecesini (Tamamen sadece biraz daha fazla değil) kazandınız, şimdi bu bilineni arkadaşlarınıza dağıtın ve onların yardımıyla Mac, Linux veya Windows kadar güçlü bir işletim sistemi oluşturmaya çalışın


Editörler cevabımı düzenleyin ve http: ve www i yeni bir geleneği olarak alan kaldırmak lütfen, çok yüksek
repu

1

Temel bir işletim sistemi oluşturduğunuzda, GUI oluşturma veya kitaplıkları taşıma konusunda çok fazla kaynak olmadığı için devam etmek gerçekten zor. Ama ToAruOS'a bir göz atmanın çok yardımcı olacağını düşünüyorum !

Bu işletim sisteminin yüzeyinin altındaki kod çok basit! ama aynı zamanda cairo, python, (henüz değil ama yakında) sdl gibi şeyleri taşıdı, paylaşma belleği yaptı ve ayrıca kendi widget araç setini yaptı. Her şey C ile yazılmış.

Bir başka ilginç işletim sistemi pedigreeOS olacaktır . JamesM ( jamesM'in çekirdek eğitiminin arkasındaki adam) tarafından yapılmıştır. ToaruOS'tan daha fazla özelliğe sahip olsa da, daha büyük ve daha kafa karıştırıcıdır.

Yine de bu 2 işletim sistemi özellikle ToAruOS'a çok yardımcı olacaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.