Apa saja sumber daya untuk memulai dalam pengembangan sistem operasi? [Tutup]

589

Satu hal yang selalu ingin saya lakukan adalah mengembangkan sistem operasi saya sendiri (tidak harus seperti Linux atau Windows, tetapi lebih baik daripada boot loader sederhana yang sudah saya lakukan).

Saya mengalami kesulitan menemukan sumber daya / panduan yang membawa Anda melewati menulis OS "Hello World" sederhana.

Saya tahu banyak orang mungkin akan merekomendasikan saya melihat Linux atau BSD; tetapi basis kode untuk sistem seperti itu (mungkin) sangat besar sehingga saya tidak tahu harus mulai dari mana.

Ada saran?

Pembaruan: Untuk memudahkan orang yang mendarat di pos ini melalui Google, berikut adalah beberapa sumber pengembangan OS:

Sumber lain:

Saya menemukan sumber yang bagus bernama MikeOS , "MikeOS adalah alat pembelajaran untuk menunjukkan bagaimana OS sederhana bekerja. Ia menggunakan mode nyata 16-bit untuk akses BIOS, sehingga tidak memerlukan driver yang rumit"

Diperbarui 11/14/08

Saya menemukan beberapa sumber di Freebyte's Guide to ... Sistem Operasi Gratis dan tidak bebas yang terhubung ke kit seperti perpustakaan OSKit dan ExOS. Ini tampaknya sangat berguna dalam memulai pengembangan OS.

Diperbarui 2/23/09

Ric Tokyo merekomendasikan nanoos dalam pertanyaan ini . Nanoos adalah OS yang ditulis dalam C ++.

Diperbarui 3/9/09

Dinah memberikan beberapa diskusi Stack Overflow yang berguna tentang calon pengembang OS: Penghadang dalam menciptakan sistem operasi khusus membahas kesulitan apa yang mungkin Anda temui saat mengembangkan OS dan Pengembangan OS adalah diskusi yang lebih umum.

Diperbarui 7/9/09

LB menyediakan tautan ke Proyek Pintos , OS pendidikan yang dirancang untuk siswa yang belajar pengembangan OS.

Diperbarui 7/27/09 (Masih kuat!)

Saya menemukan kursus OS online dari Berkley yang menampilkan 23 kuliah.

TomOS adalah cabang dari MikeOS yang mencakup sedikit manajer memori dan dukungan mouse. Sebagai MikeOS, ia dirancang untuk menjadi proyek pendidikan. Itu ditulis dalam assembler NASM.

Diperbarui 8/4/09

Saya menemukan slide dan bahan-bahan lain yang cocok dengan kuliah online Berkeley yang tercantum di atas.

Diperbarui 8/23/09

Semua pertanyaan menandai osdev di stackoverflow

OS / 161 adalah OS akademik yang ditulis dalam c yang dijalankan pada perangkat keras yang disimulasikan. OS ini serupa di Nachos. Terima kasih Novelocrat!

tangurena merekomendasikan http://en.wikipedia.org/wiki/MicroC/OS-II , OS yang dirancang untuk sistem embedded. Ada buku pendamping juga.

Pengembangan Kernel Linux oleh Robert Love disarankan oleh Anders. Ini adalah "pandangan orang dalam yang diakui secara luas pada kernel Linux."

Diperbarui 9/18/2009

Terima kasih Tim S. Van Haren karena memberi tahu kami tentang Cosmos , sebuah OS yang ditulis seluruhnya dalam c #.

tgiphil memberi tahu kami tentang Kerangka Kerja Aliansi Sistem Operasi Terkelola (MOSA) , "seperangkat alat, spesifikasi, dan kode sumber untuk mendorong pengembangan sistem operasi yang dikelola berdasarkan Common Intermediate Language."

Pembaruan 9/24/2009

Steve menemukan beberapa sumber daya untuk pengembangan di windows menggunakan Visual Studio, periksa pengaturan panduan BrokenThorn dengan VS 2005 atau Bagian VS OSDev .

Diperbarui 9/5/2012

kerneltrap.org tidak lagi tersedia. Kernel linux v0.01 tersedia dari kernel.org

Diperbarui 12/21/2012 Tutorial pengembangan OS dasar yang dirancang untuk menjadi proyek semester. Ini memandu Anda melalui membangun sebuah OS dengan komponen dasar. Awal yang sangat bagus untuk pemula. Kertas terkait . Terima kasih Srujan!

Diperbarui 11/15/2013

Menulis Sistem Operasi Sederhana Dari Awal . Terima kasih James Moore!

Diperbarui 12/8/2013

Cara membuat sistem operasi komputer Terima kasih ddtoni!

Diperbarui 3/18/2014

ToAruOS sebuah OS yang dibangun sebagian besar dari awal, termasuk GUI

Diperbarui 12 September 2016

Menulis Sistem Pengoperasian Toy Anda sendiri

Diperbarui 10 Des 2016

Menulis Sistem Operasi Sederhana —dari Scratch (terima kasih @Tyler C)

Giovanni Galbo
sumber
5
Jangan lupa forums.osdever.net
Brenden
15
Mengapa jenis pertanyaan tujuan umum yang baik ini selalu ditutup pada SO?
Pratik Singhal
30
Pertanyaan ini memiliki 370 upvotes, telah dipvotasikan 422 kali dan telah ada sejak StackOverflow pertama kali diluncurkan. Masyarakat tampaknya menyukainya, tetapi untuk beberapa alasan segelintir orang harus merusaknya untuk semua orang. Inilah sebabnya saya mulai sangat tidak suka SO
Giovanni Galbo
1
Ada tren yang sangat menarik dengan Unikernels (lakukan hanya satu hal dan lakukan dengan baik) di mana upaya ini sangat relevan. Anda biasanya dapat mem-boot unikernel di mesin virtual dan menjalankan kode pengguna dalam waktu kurang dari satu detik. Saya telah melihat solusi di mana hanya pencarian DNS untuk layanan seperti itu, membuat server DNS memicu "mesin boot virtual" sehingga siap ketika permintaan sebenarnya untuk layanan masuk.
Thorbjørn Ravn Andersen

Jawaban:

95

Ada banyak tautan setelah tinjauan singkat tentang apa yang terlibat dalam penulisan OS untuk platform X86.

Tautan yang tampaknya paling menjanjikan (www.nondot.org/sabre/os/articles) tidak lagi tersedia, jadi Anda perlu membaca versi Archive.org untuk membacanya.

Pada akhirnya, bootloader mengambil kode mesin dari kernel, memasukkannya ke dalam memori, dan melompat ke sana. Anda dapat memasukkan kode mesin apa pun ke dalam kernel yang Anda inginkan, tetapi sebagian besar program C mengharapkan OS sehingga Anda harus memberi tahu kompiler Anda bahwa ia tidak memiliki semua itu, atau bootloader harus membuatnya.

Kernel kemudian melakukan semua pengangkatan berat, dan saya menduga itu adalah contoh kernel yang Anda inginkan. Tetapi ada jalan panjang untuk memiliki antara kernel yang mengatakan, "Halo dunia" untuk memiliki kernel yang memuat penerjemah perintah, menyediakan layanan disk, dan memuat dan mengelola program.

Anda mungkin ingin mempertimbangkan untuk berlangganan ACM untuk mendapatkan akses ke literatur lama mereka - ada banyak artikel di akhir 80-an dan awal 90-an di majalah komputasi awal tentang cara membuat OS alternatif . Ada kemungkinan buku-buku yang tidak dicetak dari era ini juga. Anda mungkin bisa mendapatkan informasi yang sama secara gratis dengan mencari indeks majalah-majalah itu (yang tersedia di situs itu - klik "indeks" di dekat nama majalah) dan kemudian tanyakan orang-orang yang memiliki salinan.

Terakhir, saya tahu bahwa usenet sudah mati (karena begitu juga para nabi malapetaka internet) tetapi Anda akan menemukan bahwa banyak ahli tua yang kasar dari zaman itu masih hidup di sana. Anda harus mencari grup google (mereka memiliki repositori lama dejanews) dan saya berharap Anda akan menemukan banyak orang mengajukan pertanyaan yang sama satu dekade atau 1,5 lalu yang Anda tanyakan sekarang. Anda bahkan dapat menemukan banyak permintaan Linus Torvalds untuk mendapatkan bantuan saat ia mengembangkan linux pada awalnya. Jika pencarian tidak memunculkan sesuatu, tanyakan di newsgroup yang sesuai (mungkin dimulai dengan comp.arch, tetapi cari yang dengan OS atas nama).

Adam Davis
sumber
hai pak, apakah COSMOS adalah alat yang baik untuk mengembangkan sistem operasi?
Vikas Verma
@VikasVerma Saya belum menggunakannya, jadi saya tidak tahu.
Adam Davis
@AdamDavis Tautan pertama rusak (dan yang lainnya juga tampaknya). Tolong, perbaiki!
nbro
35

Minix jauh lebih kecil, dan dirancang untuk tujuan belajar, dan buku yang cocok dengannya juga bagus.

Pembaruan: Saya kira Minix 3 sedikit tujuan yang berbeda, tetapi Minix 2 (dan tentu saja versi pertama) adalah untuk tujuan pengajaran.

Mike Stone
sumber
Saya punya buku Tanenbaum terbaru tetapi kode sumber minix3 terlihat sangat besar! Saya memiliki tujuan yang sama seperti OP, sementara saya tidak ingin membangun kernel dari awal, saya benar-benar ingin memahami bagaimana sebuah kernel bekerja dan apa fungsinya. Akankah mengikuti Tanenbaum book and minix3cukup untuk membuat perubahan pada minix3 pada akhirnya membantu saya berkontribusi ke kernel linux?
gideon
32

Sebagai seseorang yang telah menulis sistem operasi multi-tugas waktu-nyata dari awal ...

keyboard rutin bounce, driver keyboard, driver disk, driver video, sistem file, dan akhirnya boot-loader - dan itu hanya untuk meluncurkannya untuk pertama kalinya tanpa ada hubungannya!

... Saya tidak bisa cukup menekankan betapa pentingnya untuk mengenal perangkat keras! Ini terutama terjadi jika Anda benar-benar ingin melakukan semuanya sendiri alih-alih hanya mengambil sistem primitif yang sudah disiapkan oleh orang lain untuk Anda. Misalnya, hubungi Intel dan minta kartu CPU mereka untuk jenis CPU Anda! Ini akan menjelaskannya untuk Anda - "pin-out", interupsi, opcode, sebut saja!

Ingat perangkat keras memungkinkan semuanya. Pelajari perangkat kerasnya. Anda tidak akan menyesalinya.

.

Richard T
sumber
18

Tulis OS mikrokontroler. Saya merekomendasikan mikrokontroler berbasis x86. OS modern sangat besar . Pelajari dasar-dasarnya terlebih dahulu.

Paul Nathan
sumber
2
ada ide di mana untuk memulai dengan yang ini? saya sangat tertarik? kit apa yang harus dibeli .. buku untuk memulai Anda, dll
Julio
@Uncle: Saya belum menemukan buku embedded system yang mutakhir. Entah mereka terlalu tinggi dan menganggap OS, atau mereka diarahkan untuk insinyur listrik dan mengabaikan kode. Sedangkan untuk kit, google menemukan " bifferos.bizhat.com ". Ada juga kit ARM di luar sana. Saya tidak suka arsitektur harvard secara pribadi, jadi saya tidak tertarik dengan Arduino, tapi ini yang paling populer. Untuk pekerjaan yang lebih eksotis, XC-1A juga bagus.
Paul Nathan
@ Paul akan menghargai jika Anda bisa memperluas jawaban Anda. Saya melihat ke AVR dan Arduino, tetapi baru-baru ini terlihat .NET micro. Saya terlalu banyak LOB abstraksi yang lebih tinggi tapi saya ingin mulai berjalan di tumpukan. Di mana Anda merekomendasikan memulai?
gideon
@ giddy: AVR adalah mode saat ini. Mereka kecil dan murah, tetapi saya tidak terlalu suka arsitekturnya. Saya akan merekomendasikan mendapatkan kit dev ARM (biaya est ~ 100). Mereka populer di aplikasi komersial.
Paul Nathan
@ Paul, terima kasih! Tidak banyak mendengar tentang ARM. Bagaimana dengan .net micro? Saya sedikit khawatir tentang membakar sesuatu. Sebagian besar kit akan datang dengan beberapa jenis instruksi, bukan? Terima kasih lagi.
gideon
16

Saya berharap ada satu tempat untuk mendapatkan semua info tentang mengembangkan OS Anda sendiri. Yang paling dekat dengan itu adalah OS Dev Wiki and Forums . Mereka menawarkan banyak informasi yang baik mengenai pengaturan, pengembangan, dan informasi perangkat keras perangkat.

Juga ada beberapa tutorial hebat di BoneFide , saya telah menggunakan tutorial memulai oleh Bran , dan sekarang saya melihat tutorial yang lebih baru berdasarkan yang disebut Roll your toy UNIX-clone OS .

Saya kedua memeriksa: "Sistem Operasi: Desain dan Implementasi"

Dan jika Anda ingin mengembangkan di Windows, lihat posting blog jolson .

Sunting: Untuk pengembangan di windows menggunakan Visual Studio, lihat panduan BrokenThorn atau wiki OSDev .

Steve Tranby
sumber
1
Terkait: Wiki tag x86 SO memiliki tautan ke manual Intel / AMD, dan banyak hal bagus lainnya.
Peter Cordes
15

Sumber daya yang bagus adalah materi dari kursus MIT 6.828: Teknik Sistem Operasi.

XV6 - OS pengajaran seperti Unix sederhana yang ditulis dalam ANSI C untuk x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html

Sumber XV6 - sebagai buklet tercetak dengan nomor baris http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

Buku XV6 - menjelaskan ide-ide utama desain os http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

Bahannya kompak: 92 halaman sumber dan 96 halaman komentar.

Saya lebih menyukainya daripada buku Minix! Itu permata sejati!

Jens A. Koch
sumber
11

Anda juga mungkin ingin melihat SharpOS yang merupakan sistem operasi yang mereka tulis di c #.

lomaxx
sumber
9

Ada sumber daya yang baik untuk dasar-dasar sistem operasi dalam buku. Karena tidak ada banyak panggilan untuk membuat OS baru dari awal, Anda tidak akan menemukan satu ton informasi jenis hobi di internet.

Saya merekomendasikan buku teks standar, "Sistem Operasi Modern" oleh Tanenbaum. Anda juga mungkin dapat menemukan "Elemen Sistem Operasi" oleh Calingaert bermanfaat - ini adalah ikhtisar tipis dari sebuah buku yang memberikan sketsa kasar tentang apa OS dari sudut pandang seorang desainer.

Jika Anda memiliki minat pada sistem waktu nyata (dan Anda setidaknya harus memahami perbedaan dan alasan OS waktu nyata) maka saya juga akan merekomendasikan "MicroC / OS-II" oleh Labrosse.

Edit:

Bisakah Anda menentukan apa yang Anda maksud dengan "lebih teknis"? Buku-buku ini memberikan detail implementasi kode semu, tetapi apakah Anda mencari contoh OS, atau cuplikan kode untuk mesin / bahasa tertentu?

-Adam

Adam Davis
sumber
7

Baru saja datang dari pertanyaan lain. Saya ingin menyebutkan Pintos ... Saya ingat kursus OS saya dengan Nachos dan Pintos sepertinya adalah hal yang sama yang dapat dijalankan pada x86.

LB40
sumber
7

Saya menemukan Pengembangan Kernel Linux Robert Love cukup menarik. Ini memberi tahu Anda tentang bagaimana berbagai subsistem dalam kernel Linux bekerja dengan cara yang sangat sederhana. Karena sumbernya tersedia, Linux adalah kandidat utama untuk melakukan peretasan.

Anders Rune Jensen
sumber
6

Kursus sistem operasi saya di tingkat sarjana membuat kami membangun sejumlah subsistem untuk OS / 161 , sebuah kernel sederhana, mirip BSD yang menyediakan beberapa dasar-dasar sambil meninggalkan kebebasan untuk mengeksplorasi berbagai keputusan ruang desain dalam mengimplementasikan layanan tingkat yang lebih tinggi.

Phil Miller
sumber
6

Mulai meretas di Minix. Ini jauh lebih kecil daripada Linux (jelas) dan dirancang dengan tujuan pengajaran dalam pikiran (beberapa, setidaknya). Bukan Minix 3, itu cerita yang sangat berbeda.

Michael Foukarakis
sumber
5

Sudah menjawab, tetapi ketika saya mengambil Sistem Operasi di perguruan tinggi kami mulai dengan kernel linux awal dan menambahkan fitur modern sederhana (sistem file dasar, memori virtual, multitasking, mutex). Menyenangkan. Anda bisa melewatkan beberapa hal benar-benar gila perakitan tingkat rendah hanya untuk mucking w / mode dilindungi dan tabel halaman sementara masih belajar beberapa nyali.

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

basszero
sumber
4

Anda mungkin ingin melihat linuxfromscratch .

Linux From Scratch (LFS) adalah proyek yang memberi Anda petunjuk langkah demi langkah untuk membangun sistem Linux kustom Anda sendiri, seluruhnya dari kode sumber.

jfs
sumber
32
Mengompilasi sistem operasi sangat jauh dari menulis satu.
duskwuff -inactive-
7
@duskwuff Anda benar tetapi Anda akan belajar banyak dari itu. Kemudian Anda dapat melanjutkan dan menulis sendiri.
jfs
4

Tutorial pengembangan OS sederhana dan dasar yang dirancang untuk menjadi proyek semester. Ini memandu Anda melalui membangun sebuah OS dengan komponen dasar. Awal yang sangat bagus untuk pemula. Makalah terkait ada di sini .

Srujan
sumber
Sumber daya luar biasa. Makalah ini mengacu pada Nachos (2500 baris kode), OS / 161 (11000), MINIX (30000), GeekOS. Pergi ke setiap halaman resmi universitas dan Anda akan menemukan kode sumber, simulator dan alat serta tugas per tahun.
limitcracker
4

Saya ingin memasukkan repo ini How-to-Make-a-Computer-Operating-System oleh Samy Pesse. Sedang dalam proses. Sangat menarik.

ddetoni
sumber
Terima kasih, saya bermaksud menambahkan ini ke daftar setelah saya menemukannya di Reddit, tetapi benar-benar lupa.
Giovanni Galbo
3

Lihatlah Proyek Managed Operating System Alliance (MOSA) di www.mosa-project.org . Mereka mendesain kompiler AOT / JIT dan sistem operasi yang dikelola sepenuhnya dalam C #. Beberapa pengembang berasal dari proyek SharpOS yang tidak aktif.

tgiphil
sumber
3

Saya bermain-main dengan Cosmos , yang merupakan "proyek sistem operasi yang diimplementasikan sepenuhnya dalam bahasa yang sesuai dengan CIL." Itu ditulis dalam C #, jadi itu tepat di gang saya. Untuk orang seperti saya yang belum pernah mencoba membangun sistem operasi, sebenarnya cukup keren untuk bisa menjalankan sistem operasi "Hello World" dalam waktu singkat.

Tim S. Van Haren
sumber
3

Seperti disebutkan di atas, Wiki OSDev (sejauh ini) adalah sumber terbaik untuk pengembangan OS. Bagi Anda yang berbicara bahasa Jerman, Wiki tingkat rendah juga bagus. Sesuatu yang relatif tidak dikenal Incitatus OS , sebuah kernel sederhana dengan satu set kecil aplikasi userspace. Ini bagus untuk digunakan untuk masuk ke topik rumit pengembangan OS.

no92
sumber
2

Movitz adalah lingkungan Lisp yang ditulis dalam Common Lisp dan menjalankan "on the metal". Sayangnya, beberapa tautan di halaman utama Movitz menolak akses, tetapi Anda dapat menemukan petunjuk tentang cara mengunduh dan mengkompilasi kode sumber dari halaman trac . Juga, gambar siap dapat ditemukan pada arsip halaman ini .

IMHO ini sangat menarik, karena membawa kembali mesin Lisp konsep pada perangkat keras yang tersedia saat ini. Gagal secara komersial, tetapi ini tidak membuktikan kepada saya bahwa ide itu buruk.

Buku pegangan Unix pembenci adalah buku yang menyenangkan yang secara semi serius mencaci maki konsep Unix dan turunannya. Banyak bagian berargumen tentang seberapa baik konsep mesin Lisp.

Halberdier
sumber
2

Inilah makalah yang disebut " Menulis Sistem Operasi Sederhana Dari Awal ". Ini mencakup penulisan bootloader, memasuki mode terproteksi x86-32, dan menulis kernel dasar di C. Tampaknya melakukan pekerjaan yang baik untuk menjelaskan semuanya secara rinci.

James Moore
sumber
Saya mengikuti buku ini dan mengembangkannya berdasarkan kodenya. Mengagumkan dimulai dengan buku seperti itu.
user3405291
2

The x86 JS simulator dan simulator ARM juga bisa sangat berguna untuk memahami bagaimana berbagai karya potongan hardware dan tes make tanpa keluar browser favorit Anda.

earizon
sumber
1

Pertanyaan Intresting untuk para programmer. Melihatnya akan membutuhkan waktu yang sangat lama untuk membangun OS seperti Windows atau Mac tetapi jika Anda ingin membangun yang sederhana maka Anda dapat mencoba yang terbaik

  1. Anda harus fokus pada Bahasa Perakitan, C dan C ++. Anda harus ahli dalam bahasa-bahasa ini.
  2. Pertama baca buku bagus tentang cara kerja OS [Google it], lalu baca semua info dari Wiki OS
  3. Cari di youtube "Cara membuat OS Anda sendiri dalam Bahasa Majelis" menonton video, Misalnya. Video
  4. Unduh kode sumber Linux OS dan kompilasi sendiri dan coba modifikasi kodenya sendiri
  5. Sekarang Anda adalah seorang editor OS yang berpengalaman sekarang unduh Minix dan QNX dan mulai berkembang bersama mereka dan dapatkan dokumen mereka dari sini Minix Doc dan QNX Doc

Sekarang Anda telah memperoleh gelar master (Tidak sepenuhnya hanya sedikit lagi untuk pergi) dalam menciptakan OS sekarang mendistribusikan pengetahuan ini ke teman Anda dan dengan bantuan mereka mencoba membuat OS sekuat Mac, Linux atau Windows

BharatKhanna
sumber
Editor tolong edit jawaban saya dan hapus spasi antara http: dan www karena saya pendatang baru jadi, saya tidak punya repu sangat tinggi, tolong lakukan itu untuk saya
BharatKhanna
1

Ketika Anda telah membuat sistem operasi dasar, sebenarnya sulit untuk melanjutkan karena tidak banyak sumber daya untuk membuat GUI atau porting library. Tapi saya pikir melihat ToAruOS akan sangat membantu!

Kode di bawah permukaan OS itu sangat sederhana! tetapi pada saat yang sama ia telah porting hal-hal seperti cairo, python, (belum tapi segera) sdl, membuat memori berbagi dan ia juga membuat widget toolkit sendiri. Semuanya ditulis dalam C.

OS lain yang menarik adalah pedigreeOS . Itu dibuat oleh JamesM (orang di belakang tutorial kernel jamesM . Meskipun memiliki lebih banyak fitur daripada ToaruOS itu juga lebih besar dan lebih membingungkan.

Tapi bagaimanapun 2 OS ini akan banyak membantu Anda terutama ToAruOS.

user69969
sumber
1

Ketika saya mulai bekerja pada sistem operasi dasar saya, saya membutuhkan panduan dasar seperti batu loncatan untuk sistem operasi dasar . Itu membantu saya tidak kehilangan kepalaku.

Bahwa jika Anda ingin membuatnya dari nol (kode assembly murni)

ali
sumber