Eski bir masaüstü bilgisayarda nasıl küçük bir işletim sistemi kurabilirim? [kapalı]


111

Bir işletim sistemi yazmanın dayanılmaz derecede karmaşık olduğunu bildiğim için bu boşuna olabilir (özellikle kendi başına).

  • Bir sonraki linux veya pencereleri oluşturmayı beklemiyorum.

  • Korkunç ve adamcağız olacağını ve işe yaramayacağını biliyorum, ama sorun değil.

Her şeyi Assembly , C ve (bazı) C ++ 'ta kendim yazmak istiyorum .

Şu anda başka şeylerle meşgul olduğum ve hemen vaktim olmadığından, bu gelecekteki bir proje, ama şimdi soracağımı düşündüm, bu yüzden belki buna pek çok yanıt alabilirim ve bu olabilir inşa etmek ve bu tür bir yaklaşım için yararlı bir kaynak olmak (gördüğüm her şey minix'ten inşa etmek, var olan bir önyükleyiciyi kullanmak, onu sanal bir önyükleme programında oluşturmak vb.).

Eski masaüstü bilgisayarlarımdan birini bir monitör, klavye ve fare ile kurmak ve boş bir sabit sürücü üzerinde çalışmaya başlamak istiyorum .

Kendi önyükleyicimi nasıl yazacağımı öğrenmek istiyorum (bununla ilgili pek çok kaynak buldum, ancak eksiksiz olması için lütfen yine de iyi olanları ekleyin), kendi USB sürücüm (gerekirse), bir CD sürücüsü (gerekirse) ), vb. Her şey, sıfırdan.

  • Kodu bilgisayara nasıl koyarım? Disket ile yapmak en iyisi mi? Çoğu bilgisayar bunu bir USB çubuğundan yapabilir mi?

  • Hangi sürücülere ihtiyacım var ve bunları oluşturmak için herhangi bir referans önerebilir misiniz?

  • Önyükleme sırasından sonra - o zaman ne olacak? Korumalı moda nasıl girerim vs.

  • Bir işletim sisteminin yardımı olmadan belleği nasıl yönetirim? Sadece istediğim adresi mi kullanıyorum? Başlatma gerekli değil mi?

  • Şüphesiz kafamı karıştıracak ne ile karşılaşacağım?

  • Bunu bir komut satırı O / S ve bir grafiksel nasıl yapabilirim?

  • Temel alınan grafik işletim sistemi nedir? Örneğin, bir yazı tipi olan bir komut satırı ve üstte bir resim gibi bir şeyi nasıl yaparım?

  • Çoklu görev ortamı kurma hakkında nereden okuyabilirim? (yani, yan yana çalışan iki grafik benzeri komut satırına sahip olmak).

  • Bir çeşit pencereleme sistemini nasıl kurarım? Basit çoklu görev kurulduktan sonra ekranda grafikleri nasıl görüntülerim?

İnanın bana, bunun çok karmaşık bir proje olduğunu anlıyorum ve muhtemelen onu hiçbir zaman tamamlayamayacağım veya herhangi bir amaçla üzerine bir şey yazamayacağım.

Bahsetmediğim birçok başka parça var, eğer aklınıza gelirse, bunları da eklemekten çekinmeyin.

Lütfen yanıt başına bir "konu" yazın - örneğin, USB sürücüleri ve sonra belki bir kaynak listesi, dikkat edilecek şeyler vb.

Ayrıca, lütfen başka bir işletim sistemi veya önceden var olan kodun oluşturulmasını önermeyin. Ben biliyorum okumak (vb Linux çekirdeği veya örnek kaynakları, mevcut sürücüleri gibi) önceden var olan bir sürü kod ama sonuçta kendim yazmaya yapmak istiyorum. Başka bir şey üzerine inşa etmem gerektiğini biliyorum ve SO hakkında fikrimi değiştirirsem ve o yola gidersem okuyabileceğim birçok başka soru var. Ancak bu, her şeyi sıfırdan yapmakla ilgili.

Nasıl grafiksel hale getirileceğine dair herhangi bir öneriniz var mı? Farklı video modları ve bunlarla nasıl çalışılır, vb?


14
Bu benim tek en büyük hedefim. Bir işletim sistemini o kadar kötü yazmak istiyorum ki, sadece eğlenmek ve öğrenmek için ... Sadece son birkaç yıldır zamanımı ayıramadım. Yardımcı olacak birini arıyorsanız veya sizinle sadece konuşacaksanız, gmail.com adresinden schmeling88'den bana e-posta gönderebilirsiniz
Max Schmeling

2
@Max ve @Tom, ben de hatayı aldım. Aslında bu sefer başlamak için vites yükseltiyorum :)
Giovanni Galbo

2
Şimdi grafikleri düşünmeyin. Unix, grafikleri hiçbir zaman doğrudan desteklemedi ve o kadar da kötü değil. :-) Ancak temelde 800x600 IIRC'nin ötesine geçmenin kolay ve taşınabilir bir yolu yoktur.
Bastien Léonard


1
Neden? Bu soru çok eskidir ve artık herhangi bir aktivite oluşturmamaktadır. Kimin umrunda?
Carson Myers

Yanıtlar:


51

Her şey sırayla. Okuyun, okuyun, okuyun, okuyun, okuyun. Kendinizinkini uygulamayı ummadan önce işletim sisteminin nasıl çalıştığı konusunda sağlam bir anlayışa sahip olmanız gerekir.

Andrew Tanenbaum'un işletim sistemleri hakkındaki kitaplarından birini alın. Bu, üniversitede OS sınıfımda kullandığımız:

Modern İşletim Sistemleri PDF

Amazon'da Modern İşletim Sistemleri

Gülünç kapağa rağmen, özellikle bir ders kitabı için harika bir okuma. Tanenbaum gerçekten bu alanda bir uzmandır ve işletim sisteminin kaputun altında nasıl çalıştığına dair açıklamaları açık ve anlaşılması kolaydır. Bu kitap çoğunlukla teori, ancak uygulamayı daha çok tartışan bir kitabı da olduğuna inanıyorum. Yine de hiç okumadım, bu yüzden yorum yapamam.

Bu, işlem yönetimi, bellek yönetimi, dosya sistemleri ve işletim sistemi çekirdeğinizin onu önyüklenebilir bir duruma getirmek için yapması gereken diğer her şeyi yapmanıza yardımcı olacaktır. Bu noktadan itibaren, temelde desteklemeniz gereken donanım için aygıt sürücüleri yazma ve dosyaları ve aygıtları açma, okuma ve yazma, işlemler arasında mesajlar gönderme gibi şeyler için çekirdek çağrıları yapmak için C kitaplığı işlevlerinin uygulamalarını sunma meselesi. .

X86 derlemesini okuyun (bunu bir x86 makinesi için tasarladığınızı varsayarak). Bu, işlemci çalışma modları arasında geçişle ilgili birçok sorunuza cevap vermelidir.

Herhangi bir elektronik bilginiz varsa, yeterli dokümantasyona sahip gömülü bir cihaz için bir işletim sistemi yazmakla başlamak daha kolay olabilir, çünkü genellikle bir x86 PC'den daha basit olacaktır. Her zaman kendi işletim sistemimi de yazmak istemişimdir ve Digilent'ten Bu Geliştirme Kartı için bir mikro çekirdek gömülü işletim sistemi yazmakla başlıyorum . Yumuşak çekirdekli MicroBlaze işlemciyi, çok kapsamlı belgelere sahip olan Xilinx'ten çalıştırabilir. Ayrıca biraz RAM, flash veri depolama, LED'ler, anahtarlar, düğmeler, VGA çıkışı, vb. Var. Basit sürücüler yazarken oynayabileceğiniz birçok şey var.

Gömülü bir aygıtın faydalarından biri de uzun süre bir VGA sürücüsü yazmaktan kurtulabilmenizdir. Benim durumumda, Digilent geliştirme kartında yerleşik bir UART var, bu nedenle seri çıkışı, her şeyi en az telaşla bir komut satırına getirmek için konsolum olarak etkin bir şekilde kullanabilirim.

Sadece hedeflemeyi seçtiğiniz her neyse, onun için hazır ve iyi test edilmiş bir derleyiciye sahip olduğundan emin olun. Sen do not bir işletim sistemi ve aynı zamanda bir derleyici yazmak istiyorum.


2
+1, ancak Tanenbaum Minix kitabını tercih ediyorum (daha çok uygulamaya yöneliktir) ve gerçekten önce sadece teoriye odaklanmaya gerek yok. Zaten ilk denemede bir işletim sistemi yazmayacak. Önce bir önyükleyici yazacak, sonra korumalı moda geçecek, sonra G / Ç'yi yönetecek ve bu böyle devam edecek.
Bastien Léonard

2
Gömülü bir yonga için bir işletim sistemi yazmak için +1. Günün sonunda benzersiz bir şey yaptığınızı hissedeceksiniz ve bu aynı temel kavramları korurken (diyelim) x86 için bir tane yazmaktan çok daha basit. Örneğin TinyOS'a bakın (teknik olarak bir işletim sistemi olmasa da, bunun için zamanlayıcı ve görev modülleri gibi şeyler var ..)
Kristopher Micinski

29

http://www.osdev.org/ ve http://www.osdever.net/

İşletim Sistemi Geliştirme dünyasına hoş geldiniz.

SO'lardaki diğer x86 belgesi bağlantılarına da bakın etiket wiki : Intel ve AMD kılavuzları, derleyici / derleyici belgeleri ve çeşitli kılavuzlar.

Ayrıca, önyükleyicinize tek adımda erişebileceğiniz ve kayıtları inceleyebileceğiniz için hata ayıklama için BOCHS veya başka bir sanal ortamın kullanılmasını önerir.


1
Ve özellikle wiki.osdev.org !
Matthew Iselin

Forums.osdever.net unutmayın :)
Brenden

6
Bunların yararlı kaynaklar olduğunun farkındayım, ancak açıklama olmadan bir dizi bağlantı yerine bir bağlam sunmanızın gelecekteki okuyucular için daha yararlı olabileceğini düşünüyorum.
icktoofay

@icktoofay Soru doğru cevaplanamayacak kadar geniş, sanırım.
user253751

15

En azından ilk başta Bochs veya başka bir sanal makinede çalışmanızı öneririm , çünkü onu istediğiniz yere yanınızda götürebilmeniz, hata ayıklamanın daha kolay olmasıdır (donanımın tam durumunu görebilirsiniz) ve eğer hata ayıklama konusunda dışarıdan yardıma ihtiyaç duyarlar, sizinle aynı 'donanımı' kullanabilirler.

Sahip olduğum en yararlı tavsiye, kendinizi olabildiğince hızlı bir şekilde C kodunu çalıştırabileceğiniz bir duruma sokmaktır - yani, önyükleme yapın, tanımlayıcı tablolarınızı ayarlayın ve derlenmiş C'yi çalıştırmanın güvenli olduğu bir noktaya gelin. eğer aklı başında kalmak ve üzerinde çalışmaya devam etmek istiyorsanız, tüm çekirdek C'de olmamalıysa. Montaj, bazı yerlerde gerekli olsa da sıkıcıdır ve hata ayıklaması zor olma eğilimindedir.


Şimdilik etrafta oynamak için Bochs'a bakacağım, ancak sonunda bunu sadece bir PC'de inşa etmek istiyorum
Carson Myers

BOCHS'ta çalışıyorsa, genellikle gerçek bir bilgisayarda çalışır, BIOS'larındaki modulo farklılıkları. Hatalarınızın çoğu muhtemelen BOCHS ve gerçek donanımı etkileyen şeyler olacaktır, ancak aradaki fark, kodunuz BOCHS'ta sonsuz bir döngüde sıkıştığında, BOCHS'nin yerleşik hata ayıklayıcısını nerede ve bulmak için tek adımda kullanabilirsiniz. nasıl / neden. Gerçek donanımda yapabileceğiniz tek şey hata ayıklama baskıları eklemektir. Bir hata ayıklayıcı kullanmak saatlerce ve günlerce kafa karıştırmadan kurtarır.
Peter Cordes

14

En düşük seviyesinde, bir işletim sisteminin yapması gereken minimum şey, bir sistemin donanımını bir şekilde çalıştırmak ve bir şekilde bir tür "kullanıcı kodu" yürütmek için bir şekilde yüklemektir. Bir PC ile başlayacaksanız, onun tarafından herhangi bir cihazdan veya başka bir cihazdan yüklenebilen bir kod yazmanız gerekir. Daha eski bilgisayarlarda, donanımın bazı başlatmaları (en azından video, klavye ve bir tür depolama veya önyükleyici) nasıl gerçekleştirdiğini belirleyen bellenimde bir BIOS bulunur. (Ekim 2017 Güncellemesi: Yeni bilgisayarlarda EFI veya UEFI ürün yazılımı var ... bu büyük ölçüde bilgiçlikçi bir fark; bu tartışma için aynı amaçlara hizmet ediyor).

Bu nedenle, hedef sisteminizde BIOS'u veya diğer aygıt yazılımlarını nasıl kullanacağınıza ilişkin düşük düzeyli ayrıntıları öğrenerek başlayın. Yani, BIOS'un yükleyebileceği ve çalıştırabileceği bir programın nasıl yazılacağını öğrenin. Bu, sonunda önyükleyicinize dönüşecektir. Küçük başla. Doğrudan üretici yazılımı önyükleme işleminden "Merhaba, Linus" yazan bir program edinin (bir diskette veya USB flash sürücüde, iyi bir başlangıç ​​olabilir ... veya isterseniz bir sabit sürücüde).

Oradan çok basit bir seri sürücü yazmanızı öneririm ... bazı seri bağlantı noktalarını başlatmak için önyükleyicinizi güncelleyin ve buradan bir indirme işlemi başlatın. Ardından çektiği kodu çalıştırabilir. Oradan, başka bir blok kümesine yazabilen bir miktar önyükleme yazın (henüz bir dosya sistemi uygulamadık ... bölüm tablosu bile ayrıştırmadık; bu nedenle ilk başta diskteki ham blok aralıklarıyla ilgilenirdik. ).

Bu noktada, önyükleme yükleyiciniz yeni kodu seri hat boyunca çekebilmeli, bir bölüme atabilmelidir (evet, bir tür bölüm tablosu işlemeyi uygulayabilir ... standart PC kurallarına uygun olup olmadığı bu noktada size kalmıştır. ) ve çalıştırın.

Oradan çok daha karmaşık özellikler üzerinde çalışabilmelisiniz. Bu temelden yeni bir "çekirdek" yazabilir ve derleyebilirsiniz ... test ortamınızı yeniden başlatabilir ve yeni çekirdeğin ona konuşlandırılmasını sağlayabilirsiniz.

(Önyükleyiciniz, indirmeyi atlamak ve sadece mevcut görüntüyü başlatmak için seri el sıkışma hatları üzerinden bir BREAK gibi bir sinyal almalı ve bu şekilde de biraz zaman aşımı yapmalıdır).

Oradan çok basit bir terminal katmanı ve komut kabuğu yazabilir misiniz? Dosya sistemi mi? Çekirdekten başka yeni yürütülebilir içeriği indirmek için komutlar uygulayın (dosyalar veya bazı türdeki nesneler). Ve bunun gibi.

Doğal olarak, PC klavyesini ve videoyu kullanarak bir konsol sürücüsüyle başlamış olabilirsiniz (doğru hatırlıyorsam sırasıyla BIOS INT 0x16h ve INT 0x10H şeyler). Bununla birlikte, başka bir mevcut (işlevsel) sistemden derleme / dağıtma / test döngünüzü otomatikleştirebileceğiniz için bir seri sürücü ile başlamanızı öneririm. Yeni işletim sisteminiz çapraz derlenmiş bir proje olarak başlayacağından, bunu halletmek için aerodinamik bir yönteme sahip olmanız sizin için çok önemli olacaktır.

Projenizi ne kadar ileri götürmek istediğinizi bilmiyorum. Oldukça etkileyici bir hedef "kendi kendine barındırma" sağlamaktır. Yeni işletim sisteminizi yeni işletim sisteminizin çalışan bir sürümünü (yeniden) oluşturmak, bağlamak ve önyüklemek için kullanmanıza izin verebilecek basit bir derleyici / derleyici oluşturabilirseniz ... o zaman bu hedefe ulaşmışsınızdır. (Bunun bir gereklilik olmadığını unutmayın. Birçok gömülü sistem asla kendi kendine barındırılmayacaktır ve bunda yanlış bir şey yoktur).


Modern donanımda, bir seri sürücünün çalışmasını sağlamak, konsol (video / klavye) sürücüleri yazmaktan daha zor olabilir. Bunu yazdığımdan bu yana geçen birkaç yıl içinde, düz eski seri konektörler, modern masaüstü ve dizüstü bilgisayarlarda neredeyse yok oldu. Bazı gömülü ve "amatör" donanımlar, USB emülasyonundan geçmeye gerek kalmadan eski moda RS-232C arayüzlerine sahiptir. Örnek için: mpl.ch/t2600.html buna sahip görünüyor.
Jim Dennis

12

Donanım sanallaştırmayı kullanmaktan çekinmiyorsanız, sizi 'Nand'dan Tetris'e' götürecek bir kurs (kitap + dersler + yazılım) vardır. Tamamen kendiniz (bu amaçlar için atomik ve verilen) elektrikli NAND geçidinden, işletim sistemini, bir dili oluşturmaya ve son olarak kişisel makinenizde basit bir oyunu kodlamaya kadar tam bir bilgisayar sistemi yaratırsınız.

Bunun harika bir fikir ve yakında takılıp kalmayı planladığım bir şey olduğunu düşünüyorum. Kitap şaşırtıcı derecede ucuz ve kursun MIT'de verildiğine inanıyorum. Kendinizi sıfırdan inşa ettiğiniz tüm sistem hakkında tam ve eksiksiz bilgiye sahip olmaktan daha büyük bir his hayal edemiyorum.

Bağlantı: http://www1.idc.ac.il/tecs/


Sanırım bu bağlantı öldü. Buna erişmenin başka bir yolunu bilen var mı?
Koray Tugay

1
@KorayTugay nand2tetris.org
user253751

10

Küçük başlayıp 8086 gömülü geliştirme kiti satın alıp bunun üzerinde çok görevli bir işletim sistemi geliştirirdim. Bir çekirdeğe sahip olduğunuzda ve donanım düzeyinde çalışmayı öğrendikten sonra, daha zorlu bir şey yapmaya hazır olacaksınız.

Bir VGA ekranlı DOS klonu bile oluşturmak oldukça zor bir iştir. Detaylar çok büyük. :-)

belirli konular.

Kodu bilgisayara nasıl koyarım? Disket ile yapmak en iyisi mi? Çoğu bilgisayar bunu bir USB çubuğundan yapabilir mi?

BIOS, temel önyükleme yapacaktır.


Hangi sürücülere ihtiyacım var ve bunları oluşturmak için herhangi bir referans önerebilir misiniz?

doğrudan cpu / bellek işlemleri olmayan herhangi bir şey. Doğrudan CPU referans kılavuzunda olmayan herhangi bir şey.


Önyükleme sırasından sonra - o zaman ne olacak? Korumalı moda nasıl girerim vs.

Korumalı mod, önyükleme sırasının bir parçası olacaktır.

daha sonra çoklu görev yapmaya ve süreçleri nasıl başlatacağınızı bulmaya başlarsınız.


Bir işletim sisteminin yardımı olmadan belleği nasıl yönetirim? Sadece istediğim adresi mi kullanıyorum? Başlatma gerekli değil mi?

Doğru. Muhtemelen sonunda bir sanal bellek sistemini çözmek isteyeceksiniz.


Şüphesiz kafamı karıştıracak ne ile karşılaşacağım?

hata ayıklama araçlarına sahip olmama, GÇ'ye sahip olmama


Bunu bir komut satırı O / S ve bir grafiksel nasıl yapabilirim?

Kederle. Windows 3.1 ve Linux'a, özellikle X pencerelerine bakın.


Temel alınan grafik işletim sistemi nedir? Örneğin, bir yazı tipi olan bir komut satırı ve üstte bir resim gibi bir şeyi nasıl yaparım?

X pencerelerine bakın.


son tavsiye: linux / x windows'u inceleyin. Mükemmel değil, ancak bir yaklaşımın anlaşılmasını sağlıyor . Ayrıca gömülü sistemleri inceleyin.


harika cevap, Linux çekirdeği zaten elimde ve kesinlikle Windows 3.1'e bakacağım.
Carson Myers

8

İşletim sistemi geliştirme sitelerine birçok iyi referans görüyorum, bu nedenle farklı bir yaklaşım açıklayacağım:

Çıplak metalden bir işletim sistemi uygulama deneyimi istiyorsanız, eski bir bilgisayardan çok daha iyi donanım seçenekleri vardır. PC mimarisi ile, 30 yıllık tasarım geçmişinin ilginç olmayan eserlerini kodlayarak zamanınızın çok büyük bir kısmını harcayacaksınız. Örneğin, projenin sadece önyükleyici kısmı muhtemelen birçok cesur programcıyı yaktı.

Örneğin, çekirdeğinizi diskten ve / veya ağdan okumak için bir sürücü setine ihtiyacınız olacak. Daha sonra korumalı moda geçmek için koda ihtiyacınız olacak. Bu noktada, başka bir sürücü setine ihtiyacınız var! Çipi korumalı moda almak için yaptığınız işin çok az bir kısmı bu noktadan sonra aktarılabilir olacaktır. 4 yıl + farklı bir PC'de çalıştırmak istiyorsunuz ve başka bir sürücü setine ihtiyacınız olacak.

Bir ARM veya başka bir 32-bit "gömülü" yongayı önyüklemeye bakın. Ucuz geliştirme kartları mevcuttur veya kendiniz lehimleyebilirsiniz! Bazılarında yerleşik ethernet ve usb bulunur. Aklı başında, huysuz olmayan bir mimari üzerinde çalışırken daha çok eğleneceğinizi ve belki de bazı yeniden kullanılabilir becerilere sahip olacağınızı düşünüyorum.


tam olarak istediğim şey değil, ama beni okumanın tanjantına gönderdiği için +1
Carson Myers

Marsh sana iyi tavsiyeler veriyor. X86 / BIOS mimarisinin alt düzey ayrıntıları karmaşıktır. Muhtemelen bu ayrıntılara takılıp kalacaksınız, bu da sizi bellek yönetimi ve işlem zamanlaması gibi daha büyük sorunlara odaklanamayacak durumda bırakacaksınız. Seri bağlantı noktasıyla "daha temiz" bir mimari seçin. Uzun vadede daha mutlu olacaksın.
Barry Brown

8

Her şeyden çok, eğer bunun gerçek donanımda çalışmasını istiyorsanız, kesinlikle işlemcinizin kılavuzunun bir kopyasına ihtiyacınız var. Intel kılavuzları ( http://www.intel.com/products/processor/manuals/ ) paha biçilmezdir. Mod değiştirmeden (gerçek / korumalı) sanal bellek yönetimine (o kadar ileri gitmeyi seçerseniz) sistem çağrıları yapmaya (kullanıcı moduna geçerseniz) kadar her şeyi gözden geçirirler. En önemlisi , TSS ve segment kayıtları gibi, çoğu işletim sistemi metninin tartışmadığı için işlemciden daha üst düzey kavramlarla ilgilendiği için, işleyişi için ayarlanması gereken bir dizi şeyi ayrıntılı olarak açıklıyorlar. özel ayrıntılar.


Ve Intel aracılığıyla kağıt kopyaları ücretsiz olarak edinebilirsiniz.
Matthew Iselin


8

MikeOS gibi küçük, temel bir açık kaynaklı işletim sisteminin kodunu okumaya çalışın.

Alternatif olarak, aşağıdaki adımları öneririm (eğlenceli olmalı!):

  1. Bir sanal makine yazın. Sisteminizin içini ve dışını tanımak için tüm işlemci talimatlarınızı tanımlayın. Klavye, fare, ekran, ses erişimi için SDL ile arayüzleyin. Her şeyi bir kerede kafanıza sığdırabilmek için basit tutun. Son teknoloji bir sanal makine olması gerekmez, sadece 'gerçek' bir bilgisayarın işlevini taklit edebilen bir makine olması gerekir.
  2. Sanal makinenizin işlemcisi için bir derleyici yazın. Unutmayın ki bu assembler, sanal makinenin dilinde yazılmış bir program değil, montaj dilinizi makine koduna dönüştürebilecek herhangi bir şey olmalıdır.
  3. Çalıştırılabilir bir biçim tanımlayın ve basit bir bağlayıcı yazın.
  4. Artık işletim sisteminizi yazmak için gerekli tüm bölümlere sahipsiniz! Montaj dilinde yazın, birleştirin ... vb. Bu kadar karmaşık bir önyükleme işlemine ihtiyacınız yok, sadece makinenizi önce işletim sisteminizi çalıştıracak şekilde ayarlayın.

Yukarıdaki adımlar basit bir işletim sistemi yazmak için biraz aptalca görünebilir, ancak hey, çok eğlenceli.


6

kontrol MikeOS . Yazılan oldukça basit bir işletim sistemi okunabilir (yorumlandığı gibi) derlemesi. Oldukça basit olmasına rağmen, bir GUI'ye sahiptir ve bazı ağ ve multimedyayı destekler.

düzenleme : MenuetOS grafikseldir. Aynı zamanda düz asm yazılmıştır, ancak MikeOS'tan daha karmaşıktır.


6

İddialı bir hedefin var. Ancak yürütme anahtardır.

Yapılandırılmış yaklaşımların çoğu (ders kitabı veya üniversite sınıfı) süreç boyunca size yol gösterecektir, ancak seçtiğiniz platformun gizemli ayrıntılarını parlatan ve büyük resim fikirlerine odaklanmanıza izin veren çok sayıda nitty-gritty kodu sağlarlar: süreç planlaması, bellek yönetimi, kilitlenme önleme, G / Ç vb.

Benim tavsiyem şu: beklentilerinizi azaltın ve temel bir soruyla başlayın.

İşletim sistemi nedir?

Bir bilgisayar bilimcisi, (umarım) bir işletim sisteminin grafiksel bir kullanıcı arayüzü veya bir web tarayıcısı veya USB aygıtlarını bağlamanın bir yolu veya bir kullanıcının gerçekten görebileceği veya dokunabileceği herhangi bir şey olduğunu asla söylemeyecektir. Bunun yerine, en temel düzeydeki bir işletim sistemi, yukarıda bahsettiğim şeylerdir. Hepsi tek bir büyük şemsiyenin altındadır: kaynak yönetimi.

Bir işletim sistemi, bilgisayarın donanım kaynaklarını yöneten bir programdan başka bir şey değildir: bellek, CPU ve çevre birimleri.

İşte basit bir işletim sistemi: Bir program, kullanıcının bir seri bağlantı kullanarak bir programı (onaltılık veya ikili olarak) yazmasına izin verir. Program yazıldıktan sonra programı çalıştırır. Program bittiğinde, kullanıcıya programı yeniden çalıştırabilecekleri veya yeni bir tane yazabilecekleri kontrol döndürülür.

Bunu 64K belleğe sahip gömülü ARM işlemci gibi "temiz" bir mimaride yapın. ARM'nin giriş ve çıkışlarını öğrendikten birkaç gün sonra bunu montajda kodlayabilirsiniz. Ve voila! , kendinize bir işletim sisteminiz var.

Bir işletim sisteminin yapması gereken her şeyi yapar:

  • Kullanıcının işletim sisteminin üzerine yazmasına izin vermeyerek belleği yönetir.
  • Tek bir işlemi çalıştırmak için planlar.
  • G / Ç'yi tek seri çevre birimine yönetir.

Bu size başlangıç ​​için bir yapı taşı verir. Artık birçok seçeneğiniz var. Belki bunlardan biri, iki programın belleğe yüklenmesine izin vermek ve kullanıcının hangisinin daha sonra çalıştırılacağına karar vermesine izin vermek olabilir.

Veya kullanıcının bir programın çalışmasını askıya almasına, diğerine geçmesine, askıya almasına ve geri dönmesine izin verebilirsiniz. Bu, tamamen manuel olmasına rağmen, temel çoklu görevdir.

Seçimleriniz sınırsız ama her biri daha önce sahip olduklarınızdan bir bebek adımı.

Görüşlerini çok yükseğe koymazsan eğlencelidir!



4

Çoğu okulda, tarif ettiğiniz şeylerin çoğunu yapan işletim sistemi sınıfları vardır. Okulum (CMU) C dilinde işletim sistemini öğretti ve bir çekirdek, dosya sistemi ve kabuk yazdık ve bir önyükleyici için kod sağladık.

Ne yazık ki, bu kurs için (15-412) web üzerinde kesin bir kaynak bulamadım ve zamanla gelişti. Ancak belki insanlar, web'de iyi kaynakları olan okullar için kaynaklara ve ödevlere bağlantılar gönderebilirler.


3

Sen hoşunuza gidebilecek bu"Kendi oyuncağınızı UNIX-klon işletim sisteminizi yuvarlayın" adlı öğreticinin gidebilir, çok anlayışlı ve yolunuzda size yardımcı olacaktır.

İyi şanslar.


1
Böylesine derinlemesine bir öğreticiye sahip olmak harika olsa da, yeni başlayanların sürekli karşılaştığı birçok hata var. Öğretici, ancak ve ancak Intel Kılavuzları gibi şeyleri açıp ne yaptığınızı düşünürseniz (yani, kopyalayıp yapıştırmayın!) Harikadır.
Matthew Iselin

3

Çalabileceğiniz fikirler için A2 Sistemini (eski adıyla Oberon sistemi ) inceleyin. Niklaus Wirth kuşkusuz biri olmasına rağmen, sadece iki kişi tarafından oluşturulmuş bir grafik işletim sistemidir. İlk olarak 1990 civarında piyasaya sürüldü ve hız şaşırtıcı derecede iyi. Gutknecht'in bir kitabı var.


3

Düşük seviyeli grafik programlama hakkında, bu size birçok bilgi verecektir: http://www.osdever.net/FreeVGA/home.htm . (Metin modu için de çok ilginç.)

Şüphesiz kafamı karıştıracak ne ile karşılaşacağım?

Bilgisayarda belirsiz birçok şey olduğunu fark edeceksiniz: x86 komut setinin kendisi karmaşıktır ve donanıma doğrudan erişim sağladığınızda, ekranda tek bir karakterin nasıl yazılacağını anlamanız epey zaman alabilir. .

Disket ve benzeri şeyler hakkında endişelenmeyin, çoğu zaman Bochs veya QEmu gibi bir emülatör kullanacaksınız.


3

Abraham Silberschatz tarafından yazılan İşletim Sistemleri Kavramlarına bir göz atmayı düşünebilirsiniz - Sistemleri Anlamak Programlama kavramları temel bir gerekliliktir, OSes linux * BSD ve GNU / Linux'un F / OSS çekirdek iç bileşenlerine , özellikle de daha önceki sürümlere bir göz atın. muhtemelen biraz daha belgelenmiştir.alternatif metin alternatif metin


1
Silbershatz gerçekten oldukça iyi, ancak çok yüksek seviyeli.
Paul Nathan

Kabul; Bununla birlikte, temelde gerekli olduğunu söyleyebilirim. Tanenbaum'un Modern İşletim Sistemleri ile ilgili dokümantasyonu (daha önce bahsedilmiştir)
amaterasu

2

Bir göz atın Minix . " İşletim Sistemleri Tasarımı ve Uygulaması " ile birlikte kaynak kodunu inceleyin . Projeye katkıda bulunmayı düşünün. Minix'in yapım aşamasında gerçekten iyi ve umut verici bir işletim sistemi olduğunu düşünüyorum. Aynı zamanda iyi finanse edilen bir projedir. Bu, katkılarınız için ödeme bile alabileceğiniz anlamına gelir!


1

BIOS'un ekran modunu değiştirmek, piksel rengini değiştirmek, ekrana metin yazmak ve daha pek çok şey için zaten yerleşik birçok giriş / çıkış işlevine sahip olması sayesinde çok kolaydır. Ancak, dosya sistemleri için destek içermez, bu işletim sisteminize dahil etmeniz gereken çok az şeyden biridir.

BIOS, sabit sürücüye ilk sektörü yükler ve kodu oradan yürütmeye başlar, bu nedenle işletim sisteminiz, sabit sürücüdeki ilk sektördeki ilk talimatla yerleştirilmelidir.

Bu Wikipedia makalesi, ekrana metin yazmak, klavyeden anahtarlar almak ve diğer şeyler için BIOS kesintilerine başlamanızı sağlamalıdır. https://en.wikipedia.org/wiki/BIOS_interrupt_call

C ++ kullanmayı planlasanız bile, donanımın nasıl çalıştığını anlamak hayati önem taşıdığından, montaj programlamasını okumayı şiddetle tavsiye ederim.

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.