Как се правят операционните системи?

Създаването на операционна система изглежда като масов проект. Как някой изобщо би започнал?

Например, когато пусна Ubuntu в устройството си, как компютърът ми може просто да го изпълни? (Това, предполагам, е, което наистина бих искал да знам.)

Или, погледнато от друг ъгъл, какво е най-малкото количество байтове, които могат да бъдат на диска и все още да се "изпълняват" като операционна система?

(Съжалявам, ако това е неясно. Просто нямам представа за тази тема, така че не мога да бъда много конкретен. Преструвам се, че знам доста за това как работят компютрите, но аз аз съм напълно невеж по тази тема.)


person stalepretzel    schedule 31.12.2008    source източник
comment
Grr, изтрихте първия си въпрос или се е случило нещо друго. Написах много дълъг отговор само за да получа страница този въпрос вече не съществува при изпращане и не можах да щракна обратно и да си върна стария текст :(   -  person TravisO    schedule 31.12.2008
comment
Ето защо никога не композирам директно в страница на браузър. Чувам да казват, че Opera е решила този проблем чрез кеширане на въведеното от потребителя.   -  person Chris Noe    schedule 31.12.2008
comment
@TravisO: Ето вашия отговор: pastebin.com/m517b4eb9   -  person Christian C. Salvadó    schedule 31.12.2008
comment
Последният път, когато проверих, беше чрез писане на код.   -  person NotMe    schedule 01.01.2009
comment
TravisO, всички чувстваме болката ти. ericsink.com/entries/TellYourGeekStory.html   -  person icelava    schedule 01.01.2009
comment
Гласуването за затваряне като твърде широко. Подобно: stackoverflow.com/questions/130065/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 15.08.2015


Отговори (25)


Е, отговорът се намира в книгите: Модерни операционни системи - Андрю С. Таненбауме много добър. Илюстрацията на корицата по-долу.

Най-простото, но пълно ядро ​​на операционната система, подходящо за учене или просто за любопитство, е Minix .
Ето ви можете да разглеждате изходния код.

Модерни операционни системи
(източник: cs.vu.nl)

person Roberto Russo    schedule 31.12.2008
comment
+1 Заслужаваше си да погледна снимката само заради всички каламбури. Бих искал да отида на цирк със зомбита и философи за хранене. - person new123456; 30.07.2011
comment
Искаше ми се да пляскам на няколко неща в тази снимка. Много благодаря! Това ми оправи деня! =D - person gideon; 03.12.2011

Операционните системи са огромна тема, най-доброто нещо, което мога да ви препоръчам, ако искате да навлезете наистина в дълбочина как са проектирани и конструирани операционните системи, е добра книга:

Концепции на операционната система

Концепции на операционната система

person Christian C. Salvadó    schedule 31.12.2008
comment
Мисля, че може би съм използвал тази книга в колежа. Но по-стара версия с по-малко динозаври върху нея. - person Alex Baranosky; 31.12.2008
comment
Ползвах и 7-мо издание. Въпреки че ми харесаха динозаврите, използващи ipods и други преносими компютри, мисля, че корицата на това издание ми харесва повече :) - person Will Mc; 31.12.2008
comment
@Will: Да, наистина страхотно изкуство на всички корици, codex.cs.yale.edu/avi/os-book/os8/covers-dir/index.html - person Christian C. Salvadó; 31.12.2008
comment
Отнема много време, за да се дипломирам. Използвах 6-то издание, но все още съм на училище... - person Adam Peck; 31.12.2008
comment
Преподавах в курса по операционни системи за студенти и магистри през миналия семестър в Marist College, използвайки тази книга. Това е страхотна книга и горещо я препоръчвам. - person Alan; 01.01.2009
comment
Ох Аз съм втора година по компютърни науки и чета от петото издание от нашата библиотека... - person Mike B; 05.01.2009
comment
Взех курс в гореспоменатия колеж, използвайки тази книга, макар и преди няколко години, и също ми хареса. Динозаврите са там, за да опровергаят трудността на темата. - person Alex; 20.07.2009
comment
@compie: Благодаря, сменихте връзката и URL адресите на корицата на книгата. - person Christian C. Salvadó; 30.03.2010
comment
@caramba вероятно го премахнах в някакъв момент. Вече е оправено! - person Christian C. Salvadó; 16.11.2020

Ако сте наистина любопитни, ще ви насоча към Linux от нулата като добро място да научите пълните тънкости на операционна система и как всички части си пасват. Ако това е повече информация, отколкото търсите, тогава тази статия в Уикипедия за операционните системи може да е добра място за начало.

person Andrew Hare    schedule 31.12.2008
comment
Linux от нулата наистина е просто начин за сглобяване на различен софтуер, за да се образува "мета" операционна система, той не ви учи на основите на операционните системи, неща като планиране на задачи, зареждане, управление на паметта и т.н. - всички компютърни науки... - person Bryan Rehbein; 01.01.2009
comment
Linux от нулата не е мета операционна система - сигурни ли сте, че сте запознати с нея? - person Andrew Hare; 01.01.2009
comment
LFS е добър инструмент за изучаване на Linux. Но само Linux. Не мисля, че можете да научите пълните тънкости на една операционна система с неща от толкова високо ниво. Високо ниво като отдалечен от хардуер. Знам, минах през това на виртуална машина =). - person Marcelo MD; 30.03.2010

Компютърът знае, че трябва да погледне конкретен сектор на диска за инструкции за стартиране. След това тези инструкции ще кажат на процесора, че при дадени прекъсвания на процесора трябва да се извика специфичен код. Например, при периодичен тик, извикайте кода на планировчика. Когато получа нещо от устройство, извикване на кода на драйвера на устройството.

Сега как една операционна система настройва всичко със системата? Хардуерът също има API. Те са написани с мисълта за системния програмист.

Виждал съм много операционни системи с голи кости и това наистина е абсолютното ядро. Има много вградени домашни операционни системи, които правят само това и нищо друго.

Допълнителни функции, като изискване на приложенията да питат операционната система за памет или изискване на специални привилегии за определени действия, или дори самите процеси и нишки са наистина незадължителни, въпреки че са внедрени в повечето компютърни архитектури.

person Doug T.    schedule 31.12.2008

Операционната система е просто това, което дава възможност на вашия софтуер да управлява хардуера. Очевидно някои операционни системи са по-сложни от други.

В самата си същност компютърът започва да изпълнява на фиксиран адрес, което означава, че когато компютърът се стартира, той настройва програмния брояч на предварително определен адрес и просто започва да изпълнява машинен код.

В повечето компютри този процес на "стартиране" веднага инициализира познатите периферни устройства (като, да речем, дисково устройство). Веднъж инициализиран, процесът на стартиране ще използва някаква предварително дефинирана последователност, за да използва тези периферни устройства. Използвайки отново драйвера на диска, процесът може да прочете код от първия сектор на твърдия диск, да го постави в известно пространство в RAM и след това да премине към този адрес.

Тази предварително дефинирана последователност (стартиране на процесора, зареждане на диска) позволява на програмистите да добавят повече и повече код в ранните части на стартирането на процесора, което с течение на времето може в крайна сметка да стартира много сложни програми.

В съвременния свят, със сложни периферни устройства, усъвършенствани CPU архитектури и огромни, огромни ресурси (GB или RAM, TB диск и много бързи CPU), операционната система може да поддържа доста мощни абстракции за разработчика (множество процеси, виртуална памет , зареждаеми драйвери и др.).

Но за проста система, с ограничени ресурси, всъщност не се нуждаете от много за "ОС".

Като прост пример, много малки компютри с контролер имат много малки "ОС" и някои могат просто да се считат за "монитор", предлагайки малко повече от лесен достъп до сериен порт (или терминал, или LCD дисплей). Разбира се, няма много нужда от голяма ОС при тези условия.

Но също така помислете за нещо като класическа Forth система. Тук имате система с "ОС", която ви дава вход/изход на диск, вход/изход на конзола, управление на паметта, плюс действителния език за програмиране, както и асемблер, и това се побира в по-малко от 8K памет на 8-битова машина.

или старите дни на CP/M с неговия BIOS и BDOS.

CP/M е добър пример за това, когато една проста операционна система работи добре като абстракционен слой, за да позволи на преносими програми да работят на широк набор от хардуер, но дори и тогава системата отне по-малко от 8K RAM, за да стартира и работи.

Далеч от MBs памет, използвана от съвременните операционни системи. Но, за да бъдем честни, ние ИМАМЕ MB памет и животът ни е МНОГО МНОГО по-прост (предимно) и много по-функционален поради това.

Писането на операционна система е забавно, защото е интересно да накарате ХАРДУЕРА да отпечата „Здравей свят“, като избутва данни 1 байт наведнъж от някакъв неясен входно-изходен порт или ги зарежда в някакъв магически адрес на паметта.

Вземете x86 емулатор и купонясвайте, като получите сектор за зареждане, за да произнесете името си. Това е кикотливо удоволствие.

person Will Hartung    schedule 31.12.2008

По принцип... вашият компютър може просто да стартира диска, защото:

BIOS включва това дисково устройство в реда на зареждане.

При зареждане BIOS сканира всички стартиращи устройства по ред, като флопи устройството, твърдия диск и CD ROM. Всяко устройство има достъп до своя носител и проверява твърдо кодирано местоположение (обикновено сектор, на диск или cd устройство) за пръстов отпечатък, който идентифицира носителя, и изброява местоположението, към което да премине на диска (или носителя), където започват инструкциите. BIOS казва на устройството да премести главата си (или каквото и да е) на определеното място на носителя и да прочете голяма част от инструкциите. BIOS предава тези инструкции на процесора.

Централният процесор изпълнява тези инструкции. Във вашия случай тези инструкции ще стартират операционната система Ubuntu. Те също така могат да бъдат инструкции за спиране или добавяне на 10+20 и т.н.

Обикновено операционната система ще започне, като вземе голямо парче памет (отново директно от процесора, тъй като библиотечните команди като „GlobalAlloc“ и т.н. не са налични, тъй като се предоставят от операционната система, която все още не е заредена ) и започва да създава структури за самата ОС.

Операционната система предоставя куп „функции“ за приложения: управление на паметта, файлова система, вход/изход, планиране на задачи, работа в мрежа, управление на графики, достъп до принтери и т.н. Това е, което прави, преди да „получите контрол“: създаване/стартиране на всички услуги, така че по-късните приложения да могат да работят заедно, да не се тъпчат взаимно в паметта и да имат хубав API към предоставяните от ОС услуги.

Всяка „функция“, предоставена от ОС, е голяма тема. Една операционна система ги предоставя всички, така че приложенията просто трябва да се тревожат за извикването на правилната библиотека на операционната система, а операционната система управлява ситуации, като например две програми да се опитат да отпечатат едновременно.

Например, без операционната система, всяко приложение би трябвало да се справя със ситуация, в която друга програма се опитва да отпечата и да „направи нещо“ като отпечата все пак или да отмени другото задание и т.н. Вместо това само операционната система трябва да се справи с При него приложенията просто казват на операционната система „отпечатайте тези неща“ и операционната система гарантира, че едно приложение ще отпечата, а всички други приложения просто трябва да изчакат, докато първото приключи или потребителят го отмени.

Най-малкото количество байтове, за да бъде ОС, всъщност няма смисъл, тъй като "ОС" може да предполага много или много малко функции. Ако всичко, което искахте, беше да изпълните програма от компактдиск, това щеше да е много малко байтове. Това обаче не е ОС. Работата на операционната система е да предоставя услуги (наричам ги функции), за да позволи на много други програми да работят и да управлява достъпа до тези услуги за програмите. Това е трудно и колкото повече споделени ресурси добавяте (мрежи, и wifi, и CD записващи устройства, и джойстици, и iSight видео, и двойни монитори и т.н. и т.н.), толкова по-трудно става.

person Community    schedule 31.12.2008

http://en.wikipedia.org/wiki/Linux_startup_process вероятно търсите това. http://en.wikipedia.org/wiki/Windows_NT_startup_process или това.

person mannicken    schedule 31.12.2008

Един от най-новите проекти за операционна система, който съм виждал и има сериозна подкрепа, беше проект на MS Research, наречен Singularity, който е написан изцяло на C#.NET от нулата.

За да получите представа колко работа е необходима, има 2 основни разработчици, но те имат до дузина стажанти във всеки един момент и все пак им отне две години, преди дори да успеят да доведат операционната система до точка, в която да стартира и показват BMP изображения (това е начинът, по който правят презентациите си). Отне много повече работа, преди дори да успеят да стигнат до момент, в който има команден ред (като около 4 години).

person TravisO    schedule 31.12.2008
comment
.NET Micro Framework е пълна операционна система, която също излезе от MS Research. - person ctacke; 31.12.2008
comment
Singularity не беше изцяло в C# или .NET, по-скоро предимно. - person Lawand; 01.01.2009
comment
COSMOS също е операционна система, написана на C#. - person mmx; 01.01.2009

По принцип има много аргументи за това какво всъщност е една операционна система. Ако сте се съгласили с това какво конкретно представлява операционната система (само ядрото ли е? всичко, което работи в режим на ядрото? обвивката част ли е от OS? X част от OS ли е? Уеб браузърът част от OS ли е?), вашият въпрос е отговорено! Иначе няма конкретен отговор на въпроса ти.

person mmx    schedule 31.12.2008

Може да искате да вземете книгата Проектирането и внедряването на операционната система FreeBSD за много подробен отговор. Можете да я вземете от Amazon или тази връзка към сайта на FreeBSD.org изглежда като книгата, както я помня: текст на връзката

person tmeisenh    schedule 31.12.2008

Не мога да повярвам, че това не е споменато... но класическа книга за общ преглед на дизайна на операционната система е Операционни системи - Проектиране и внедряване, написан от Андрю С. Таненбаум, създателят на MINIX. Много от примерите в книгата също са насочени директно към MINIX.

Ако искате да научите малко повече, OS Dev е чудесно място да започнете. Особено wiki. Този сайт е пълен с информация, както и с разработчици, които пишат лични операционни системи за малък проект/хоби. Това също е страхотен учебен ресурс, тъй като има много хора в същата лодка като вас в OSDev, които искат да научат какво влиза в една операционна система. В крайна сметка може и вие да опитате сами!

person John T    schedule 01.01.2009

операционната система (OS) е слоят софтуер, който контролира хардуера. Колкото по-прост е хардуерът, толкова по-проста е операционната система и обратното ;-)

ако в ранните дни на микрокомпютрите, можете да поставите операционната система в 16K ROM и да окабелите дънната платка, за да започнете да изпълнявате инструкции на машинния код в началото на адресното пространство на ROM. След това този процес на "зареждане" ще зареди кода за драйверите за другите устройства като клавиатура, монитор, флопи устройство и т.н. и след няколко секунди вашата машина ще бъде стартирана и готова за употреба.

В наши дни... същият принцип, но много повече и по-сложен хардуер ;-)

person Steven A. Lowe    schedule 31.12.2008
comment
Първият ми компютър (Heathkit H8 с 2MHz 8080) имаше, мисля, 4k ROM. И 16K RAM. - person Darron; 31.12.2008

О, това е забавно. Правил съм всичко в един или друг момент и съм бил там през голяма част от еволюцията.

По принцип започвате да пишете нова операционна система, като започнете с малко. Най-простото нещо е bootstrap loader, което е малка част от кода, която изтегля част от кода и го изпълнява. Имало едно време, с Nova или PDP компютрите, можете да влезете в зареждащото устройство за първоначално зареждане през предния панел: въвеждахте шестнадесетичен номер на инструкциите по шестнадесетичен номер. След това програмата за зареждане чете някакъв носител в паметта и задава програмния брояч на началния адрес на този код.

Тази част от код обикновено зарежда нещо друго, но не е задължително: можете да напишете програма, която е предназначена да работи на голо метално устройство. Този вид програма прави нещо полезно сама по себе си.

Истинската операционна система е по-голяма и има повече части. трябва да заредите програми, да ги поставите в паметта и да ги стартирате; трябва да предоставите код за стартиране на IO устройствата; тъй като става по-голям, трябва да управлявате паметта.

Ако наистина искате да научите как работи, намерете книгите Xinu на Дъг Комер и най-новата книга за операционна система на Анди Таненбаум на Minix.

person Charlie Martin    schedule 31.12.2008

Опитайте How Computers Boot Up, Процесът на зареждане на ядрото и други свързани статии от същия блог за кратък преглед на това какво прави компютърът, когато се стартира.

Какво прави компютърът, когато стартирането му е силно зависимо (може би очевидно?) от проекта на процесора и други "неща от ниско ниво"; следователно е доста трудно да се предвиди какво прави вашият компютър, когато се стартира.

person cic    schedule 31.12.2008

Ами имате нещо, което свързва стартирането на чипа с "bios", след това с OS, което обикновено е много сложна задача, изпълнявана от много услуги на код.

Ако НАИСТИНА искате да научите повече за това, бих ви препоръчал да прочетете книга... за микроконтролерите, особено такава, в която създавате малка операционна система в c за 8051 или други подобни... или научете някои x86 асемблиране и създайте много малък " зареждаща ОС".

person DFectuoso    schedule 31.12.2008

Може да искате да разгледате този въпрос.

person skiphoppy    schedule 31.12.2008

ОС е програма, както всяко друго приложение, което пишете. Основната цел на тази програма е, че ви позволява да стартирате други програми. Съвременните операционни системи се възползват от съвременния хардуер, за да гарантират, че програмите няма да се сблъскват една с друга.

Ако се интересувате да напишете своя собствена операционна система, вижте моя собствен въпрос тук:

Как да започнете разработката на операционна система

person Giovanni Galbo    schedule 31.12.2008

Питате колко малко байта можете да поставите на диска и пак да работите като операционна система? Отговорът зависи от това какво очаквате от вашата операционна система, но най-малката полезна операционна система, за която знам, се побира в 1,7 мегабайта. Това е Tom's Root Boot диск и е много хубава, макар и малка операционна система със „спасителни“ приложения, които Побира се на една дискета. В дните, когато всяка машина имаше флопи устройство, а не всяка машина имаше CD-ROM устройство, го използвах често.

person Norman Ramsey    schedule 31.12.2008

Моето мнение за това е, че е като вашия собствен живот. В началото знаете много малко - достатъчно, за да се разбирате. Това е подобно на това, което предоставя BIOS - той знае достатъчно, за да търси дисково устройство и да прочете информация от него. След това научавате малко повече, когато отидете в началното училище. Това е като секторът за зареждане да бъде прочетен в паметта и да му бъде даден контрол. След това отивате в гимназия, което е като зареждането на ядрото на ОС. След това отивате в колеж (шофьори и други приложения.) Разбира се, това е моментът, в който сте застрашени от катастрофа. HE HE.

Изводът е, че слоевете с все повече и повече възможности се зареждат бавно. Няма нищо магическо в една ОС.

person Michael Bray    schedule 01.01.2009

Прочитането тук ще ви даде представа какво е необходимо, за да създадете Linux https://netfiles.uiuc.edu/rhasan/linux/

person jwpfox    schedule 01.01.2009

Друга наистина малка операционна система, която се побира на един диск, е QNX (когато я гледах за последен път преди много време, цялата ОС, с GUI интерфейс, уеб браузър, достъп до диска и вграден уеб сървър, се побираше на едно флопи устройство) .

Оттогава не съм чувал много за него, но това е операционна система в реално време, така че е проектирана да бъде много бърза.

person Sam Schutte    schedule 18.03.2009

Всъщност някои хора посещават 4-годишен колеж, за да получат груба представа за това..

person ercan    schedule 08.10.2009

В основата си ОС е изключително проста. Ето ръководството за начинаещи за това КАКВО трябва да правят успешните операционни системи: 1. Управлявайте процесора с помощта на планировчик, който решава кой процес (изпълнена инстанция на програмата) да бъде планиран. 2. Управлявайте паметта, за да решите кои всички процеси я използват за съхраняване на инструкции (код) и данни (променливи). 3. Управлявайте I/O интерфейси като дискови устройства, аларми, клавиатура, мишка. Сега, горните 3 изисквания пораждат необходимостта процесите да комуникират (а не да се бият!), да взаимодействат с външния свят, да помагат на приложенията да правят това, което искат. За да разберете по-дълбоко КАК се прави това, прочетете книгата за динозаврите :)

Така че можете да направите ОС толкова малка, колкото искате, стига да успеете да управлявате всички хардуерни ресурси. Когато стартирате, BIOS казва на процесора да започне да чете буутлоудъра (който зарежда първата функция на ОС, която се намира на фиксиран адрес в паметта - нещо като main() на малка C програма). Тогава това създава функции, процеси и нишки и започва големия взрив!

person NeilBlue    schedule 02.05.2014

Първо, четене четене и четене за това какво е OS; тогава какви са употребите/видовете/естеството/целта/нуждите/на различните операционни системи. Някои от връзките са както следва; начинаещият ще се радва на тези връзки:

Модерна ОС - това дава представа за общи ОПЕРАЦИОННА СИСТЕМА.

Старт на ОС - това дава основите на това, което наистина е необходимо, за да НАПРАВИМ OS, как можем да го направим и как човек може сам да модифицира настоящ отворен код на OS.

Wiki OS - Дава представа за различните операционни системи, използвани в различни области, и техните приложения (обекти / характеристики на ОПЕРАЦИОННА СИСТЕМА.)

Нека да видим най-общо какво съдържа OS (Не сложната Linux или Windows)

ОС се нуждае от процесор и за да изхвърлите код в него, ви трябва bootloader. ОС трябва да има целите, които да изпълни и тези цели трябва да бъдат дефинирани в обвивка, която се нарича Kernel Вътре можете да имате scheduling time и ISR's (В зависимост от целта и ОС, които трябва да направите)

person np2807    schedule 15.12.2016

Разработката на ОС е сложна. Има някои уебсайтове като osdev или lowlevel.eu (немски), посветени на темата. Има и някои книги, които други вече споменаха.

Не мога да не спомена и видео поредицата „Напишете своя собствена операционна система“ в youtube, тъй като аз съм този, който я направи :-)

Вижте https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M

person Algoman    schedule 13.03.2017