Linux pada 286?


15

Saya tidak memiliki 286 dan saya juga tidak bermaksud menjalankan Linux. Namun karena 286 memiliki mode terproteksi, mengapa sering dinyatakan bahwa Linux membutuhkan CPU 386 atau lebih tinggi?

Dari http://tuxmobil.org/286_mobile.html tampaknya versi Linux ELKS dapat berjalan pada 286, apakah ini benar? Apa modifikasi (jika ada) yang telah dilakukan untuk memungkinkan kernel berjalan pada CPU 286?

Sekarang jelas saya mengerti bahwa kernel yang dikompilasi untuk 386 tidak dapat dijalankan pada CPU 286, yaitu 16-bit. Jadi pertanyaan saya adalah, mengapa kernel Linux standar tidak dapat dikompilasi untuk 286, dan kemudian dieksekusi pada 286? Apakah Linux memerlukan dukungan perangkat keras VM86?


6
16-bit berlebihan. 8-bit sudah cukup untuk menjalankan Linux. Lihat proyek Dmitry Grinberg.
Marco


Minix berjalan pada 8086 (8 bit, 128KiB RAM IIRC). Microsoft Xenix benar-benar berjalan pada 80286. Beberapa orang gila mencoba mencoba Linux menjadi 8086 juga (dengan sedikit keberhasilan). Tapi tidak, "pengalaman Linux penuh" tidak akan mungkin pada mesin yang terbatas.
vonbrand

Anda dapat memilih Linux untuk dijalankan pada perangkat yang sangat terbatas. Tapi ini tidak akan sangat berguna sebagai mesin desktop misalnya. Kecuali jika Anda menyatakan tujuan Anda, sulit untuk mengetahui apakah 'Linux on 286' layak untuk Anda.
9000

Jawaban:


4

286 protected mode (PM) pada dasarnya berbeda dengan apa yang ditawarkan 386. Pikirkan 286 PM sebagai prototipe, yang memiliki banyak kekurangan sehingga hampir tidak ada yang pernah menggunakannya, dan semuanya benar-benar dirancang ulang dari bawah ke atas untuk 386.

Itu tidak menggunakan model memori datar, itu menggunakan model tersegmentasi seperti mode nyata, yang berarti Anda harus melompat melalui lingkaran untuk mengakses memori dalam blok yang lebih besar dari 64kB sekaligus.

Itu benar-benar tidak kompatibel dengan semua program (MS-DOS) yang tersedia pada saat itu, jadi setelah Anda berada di PM Anda tidak dapat menggunakan salah satu dari program yang Anda gunakan.

Anda juga tidak dapat meninggalkan mode terlindungi lagi kecuali Anda mem-boot ulang PC, sehingga pabrikan datang dengan solusi kreatif seperti meletakkan bendera di RAM, kemudian menulis nilai ajaib ke pengontrol keyboard, yang akan mengibaskan pin reset pada CPU untuk mem-boot ulang mesin. Hal pertama yang akan dilakukan BIOS adalah mendeteksi flag yang ditetapkan sebelumnya, di mana ia kemudian akan melompat kembali ke program asli alih-alih menjalankan rutin POST, memungkinkan program asli untuk terus berjalan setelah "keluar" dari PM.

Ini berarti bahwa menggunakan 286 PM mencegah Anda menjalankan program DOS normal tanpa banyak trik. Pada saat hanya ada program-program DOS, itu tidak sebanding dengan upaya menggunakan PM sama sekali.

Jadi akhirnya menjadi lebih rumit untuk bekerja dengan 286 PM daripada hanya hidup tanpa itu, dan mengandalkan EMS dan XMS untuk mengakses memori tambahan. Sejumlah 286 motherboard memiliki dukungan chipset untuk EMS sehingga Anda dapat menggunakan semua memori sistem tambahan tanpa memerlukan PM.

Intel mengenali kekurangan-kekurangan ini dan menghasilkan PM baru yang benar-benar berbeda di 386. Model memori datar membuat mengakses memori dalam potongan hingga 4GB sederhana. CPU dapat masuk dan keluar dari PM dengan beberapa instruksi sehingga tidak diperlukan protokol reboot yang canggung. VM86 berarti bahwa sebagian besar waktu Anda bahkan tidak perlu keluar dari PM, Anda dapat menjalankan program DOS saat masih dalam PM.

Semua peningkatan ini berarti bahwa 386 PM tidak hanya lebih fungsional, tetapi secara signifikan lebih kompatibel juga.

Dengan kata lain, satu-satunya kesamaan antara mode terproteksi 286 dan 386 adalah namanya. Inilah sebabnya mengapa sistem operasi PM biasanya 386 atau lebih baru. Menambahkan dukungan untuk 286 PM akan menjadi upaya yang sepenuhnya independen, dengan sedikit atau tidak ada kode yang dapat dibagikan dengan 386 PM yang sama sekali berbeda.

Sebaliknya, 386 PM bekerja dengan cara yang sama hingga CPU 32-bit terakhir, dan bahkan lebih dari itu jika Anda menjalankan perangkat lunak 32-bit pada CPU 64-bit.


3

Ada bagian-bagian dalam kernel yang ditulis dalam rakitan dan mereka harus ditulis ulang untuk mendukung 286.

Mengenai ELKS, dalam FAQ mereka mereka mengindikasikan itu adalah subset dari kernel Linux, jadi mungkin mereka hanya porting kebutuhan mutlak.


1
Ada prosesor matematika untuk 286, 80287.
Renan

3

Saya pikir jawaban sebenarnya untuk pertanyaan saya adalah ini:

Setiap arsitektur CPU utama (atau revisi besar daripadanya) memerlukan beberapa kode dukungan perakitan selain kode C.

Bahkan jika Anda mendapat GCC untuk mengkompilasi kernel Linux ke dalam kode mesin 16-bit 286, masih akan ada kode assembly kompatibel 16-bit yang esensial.

Dengan kata lain, kernel hanya akan dibangun sebagian saja. Setiap kode rakitan khusus arsitektur akan gagal untuk dirakit karena tidak ditulis untuk arsitektur itu.

Berdasarkan hal ini saya mengasumsikan bahwa inilah yang dilakukan oleh ELANG dan proyek serupa ketika mengimplementasikan Linux pada 286 atau arsitektur lainnya - mereka mengimplementasikan kode dukungan perakitan yang hilang.


3

The 80386 mendukung paging selain segmentasi memori sementara 286 hanya mendukung segmentasi memori. Linux sangat tergantung pada dukungan paging yaitu, menggunakan skema memori datar yang pada dasarnya mengatur semua register segmen ke 0 dan menggunakan paging untuk mengelola aplikasi. Untuk mem-port Linux ke 286, manajer memori dasar membutuhkan desain ulang yang lengkap untuk bekerja dalam mode tersegmentasi tanpa paging yang mungkin banyak pekerjaan.


2

Apakah Linux memerlukan dukungan perangkat keras VM86?

Saya bukan orang majelis, tetapi menurut ini :

Sebagai implementasi asli dari ekstensi 32-bit arsitektur 8086, set instruksi 80386, model pemrograman, dan pengkodean biner masih merupakan penyebut umum untuk semua prosesor x86 32-bit, ini disebut x86, IA-32, atau i386 - Arsitektur, tergantung pada konteksnya.

386 mewakili set instruksi yang diperluas dari 286, jadi siapa yang tahu seberapa sulit port akan. Sudah cukup jelas bahwa hampir tidak ada yang mau repot-repot mencobanya ... Saya kira Anda dapat bertanya kepada orang-orang ELKS tentang hal itu.


2

Alasan terbesar adalah bahwa proyek GNU asli ditujukan pada mesin 32-bit (seperti pertengahan tahun 1980-an Unix workstatons) daripada repot-repot mendukung apa pun yang lebih kecil, sehingga seluruh rantai alat GNU tidak cocok untuk pembuatan kode 16-bit. Porting kernel Linux awal, perakitan-berat, segmen menggunakan 286 akan lebih mudah daripada target porting lainnya - jika GCC memiliki kemampuan untuk menghasilkan 286 kode mode dilindungi. Tetapi membidik GCC pada 286 mode terproteksi akan menjadi proyek besar untuk mendukung prosesor yang usang.


1

Baru-baru ini kernel linux telah meninggalkan 386 sebagai platform yang didukung dan kernel Linux TIDAK mendukung prosesor Intel 286..80286 bukan cpu 32bit, yang diperlukan untuk boot.


5
Linux pada awalnya ditulis pada 386 pada tahun 1991. Saat itu 286 sudah lama, dan pohon kernel utama tidak pernah memiliki kode yang di-backport untuk mendukung 286.
Flukas88

Itu mungkin, tetapi pertanyaannya adalah mengapa ini tetap terjadi? Bukan mengapa keputusan dibuat untuk menghentikan dukungan untuk 286/386 (yang jelas) tetapi apa alasan teknis yang mendukung prosesor yang lama tidak dapat dengan mudah dilakukan. Yaitu mengapa kernel MEMBUTUHKAN CPU 32-bit? Mengapa kernel tidak bisa dikompilasi untuk 286?
ioctlvoid

Bukankah kernel juga memiliki co-prosesor aritmatika seperti yang disyaratkan?
Bonsi Scott

Tidak, kernel mendukung emulasi matematika, paling tidak ia melakukannya sebelumnya. Karenanya Anda bahkan dapat menjalankan kernel Linux pada CPU dengan FPU yang rusak. Namun, 286 masih mendukung prosesor matematika, 80287.
ioctlvoid

Di bagian jawaban saya yang sudah diedit, saya menunjukkan bahwa emulasi diterapkan pada kernel Linux. Itu bahkan digunakan untuk port Linux ke S / 390 (alias IBM Mainframe) karena tidak memiliki unit floating point pada saat itu porting.
Didi Kohen

1

Linux x86 tidak dapat dengan mudah di-porting ke 80286 karena merupakan prosesor 16-bit dan Linux x86 memerlukan prosesor 32-bit.

Lebih khusus, register pada 286 masih hanya 16-bit. Tidak ada register EX yang tersedia. Segmen memori dan offset juga masih panjang 16-bit. Program masih harus berurusan dengan kode dekat / jauh dan data.

Ini berarti bahwa Linux / 286 akan membutuhkan kernel dan pengguna API yang secara radikal berbeda dari Linux / 386. Setiap file sumber rakitan dan banyak file sumber C perlu ditulis ulang. Ini akan seperti perbedaan antara pemrograman untuk Win16 versus Win32.

Singkatnya, Anda tidak bisa hanya memberitahu GCC untuk melakukan kompilasi untuk CPU yang berbeda. Setiap bit kode harus ditulis ulang untuk lingkungan 16-bit.


1
Harap pertimbangkan penggunaan penurunan harga untuk meningkatkan keterbacaan.
lord.garbage

0

Dari apa yang saya baca cara kanonik untuk menjalankan Linux pada 80286 adalah dengan menjalankannya di dalam mesin virtual. Inilah yang dilakukan Fabrice Bellard di sini . Anda harus mengimplementasikan mesin virtual sendiri, atau port satu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.