Космос (операциялық жүйе) - Cosmos (operating system)

Ғарыш
Cosmos logo.png
COSMOS Shell Screenshot.png
GOS интерфейсін құру мүмкіндігін ұсынатын COSMOS-пен жасалған ОЖ скриншоты
ӘзірлеушіКосмос жобасы
ЖазылғанC #, X #
Жұмыс жағдайыБелсенді
Дереккөз моделіАшық ақпарат көзі
Соңғы шығарылым20200708/8 шілде 2020 шығарылым; 4 ай бұрын (2020-07-08)
Қол жетімдіАғылшын
Ядро түріМонолитті
ЛицензияBSD
Ресми сайтwww.гокосмос.org

C # ашық басқарылатын операциялық жүйе (Ғарыш) Бұл құралдар жинағы құрылыс үшін операциялық жүйелер, көбінесе бағдарламалау тілінде жазылған C # және аз мөлшерде жоғары деңгей құрастыру тілі X # деп аталады. Ғарыш Бұл гетроним,[1] бұл аббревиатура мағынасынан бұрын таңдалған. Бұл ашық бастапқы бағдарламалық жасақтама астында шығарылды BSD лицензиясы.

Космос ан AOT компиляторы аталған IL2CPU аудару Жалпы орта тіл (CIL) жергілікті нұсқаулықта. Космос қолданушы жасаған және соған байланысты бағдарламаларды құрастырады кітапханалар құру үшін IL2CPU пайдалану жүктелетін қолдаусыз іске қосылатын жергілікті орындалатын. Нәтижесінде a жүктелуі мүмкін USB флэш-жады, CD-ROM, арқылы желі арқылы Алдын ала жүктеудің орындалу ортасы (PXE), немесе а виртуалды машина. Жақында шыққан шығарылымдар кейбіреулерін орналастыруға мүмкіндік береді x86 ендірілген құрылғылар әмбебап сериялық шина арқылы (USB флеш ). C # әзірлеушілер қолданатын негізгі тіл болып табылады (артқы жағында да, тілінде де) соңғы пайдаланушылар Космос), көптеген CLI тілдері оларды қолданбай-ақ таза CIL-ге құрастырған жағдайда пайдалануға болады Шақыру қызметтері платформасы (P / шақырады). Космос негізінен пайдалануға арналған .NET Framework, бірге Моно жұмыстарда қолдау.

2016 жылғы жағдай бойынша, Космос толық операциялық жүйеге айналуды мақсат етпейді, керісінше а құралдар жинағы басқа әзірлеушілерге өз амалдық жүйелерін қарапайым және оңай құруға мүмкіндік беру .желі жақтау. Ол сондай-ақ абстракциялық қабат ретінде жұмыс істейді, аппараттық құралдардың көптеген ішкі бөліктерін түпкілікті әзірлеушіден жасырады.

Космостың ескі нұсқалары шығарылды Кезеңдер, соңғысы - Milestone 5 (2010 жылдың тамызында шыққан). Жуырда жоба жаңа шығарылымдарды міндеттемелердің соңғы нөмірінің атауына ауыстыруға көшті. Космос шығарылымдары екі түрге бөлінеді: Userkit, және Девкит. Userkit «бұл жүйеге жаңартылған алдын-ала оралған шығарылым, өйткені жаңа және жақсартылған мүмкіндіктер қосылады. Userkits негізінен тұрақты болып саналады, бірақ соңғы өзгерістерді қамтымайды және мүмкіндіктің болмауы мүмкін. Devkit бастапқы код космостың қолымен жасалуы керек. Әдетте девиттер тұрақсыз, себебі оларда аяқталмаған немесе тексерілмеген код болуы мүмкін. Devkit-ті GitHub-тан алуға болады[1] және Git-ті басқаруды басқару ретінде қолданады. Космостағы көптеген жұмыстар қазіргі кезде жақсартуға бағытталған түзеткіш функционалдылық және Visual Studio интеграция. Ядро жұмыс іске асыруға бағытталған файлдық жүйелер, жадыны басқару, және сенімді желілік интерфейсті дамыту. Syslinux жоба ретінде қызмет етеді жүктеуші.

Космоспен дамуда

Космос өзімен бірге операциялық жүйелерді құру тәжірибесін жақсартуға мүмкіндік беретін, процесті мүмкіндігінше тез және ауыртпалықсыз етуге арналған, құрастыру тілі ғарышты қолдану үшін қажет емес.

Visual Studio интеграциясы

Космостың оны басқа типтегі операциялық жүйелерден ажырататын басты ерекшелігі - оның тығыз интеграциясы Microsoft Visual Studio. Кодты жазуға болады, жинақталған, түзетілді және толығымен іске қосыңыз Visual Studio, бірнеше пернені басқанда ғана. Космос енді қолдамайды Visual Studio 2015 немесе Visual Studio 2017, енді ол тек қолдайды Visual Studio 2019.

Жөндеу

PXE үстінде немесе виртуалды машинада жұмыс істеген кезде космосты Visual Studio арқылы біртіндеп түзетуге болады. Түзету нүктелері, іздеу және журналға кіру сияқты көптеген стандартты түзету мүмкіндіктері бар. Сонымен қатар, физикалық жабдықта жұмыс істейтін болса, күйін келтіруді сериялық кабельдер арқылы жасауға болады. VMWare-де жұмыс істеген кезде, Cosmos қадамдық және тоқтау нүктелерін қолдайды, тіпті амалдық жүйе жұмыс істеп тұрған кезде де.

Жүгіру

Космос виртуалдандыруды дамытушыларға компьютерлерін жиі қайта қоспай-ақ операциялық жүйелерін тексеруге мүмкіндік беру арқылы дамудың жылдамдығына көмектесу үшін қолданады. Әдепкі бойынша, VMWare ойнатқышы жобамен біріктіру тұрғысынан пайдалану ыңғайлылығына байланысты қолданылады. Bochs және VirtualPC сияқты виртуалдандырудың басқа орталарына қолдау көрсетіледі. Сондай-ақ, USB флэш-жадына, CD-ROM-ға немесе соған ұқсас медиаға жазуға болатын ISO дискісінің кескіні жасалуы мүмкін.

Сондай-ақ, PXE жүктелуіне қолдау көрсетіледі, бұл қашықтағы машиналарға ғарышты желі байланысы арқылы басқаруға мүмкіндік береді.

Жинақтау процесі

IL2CPU

.NET CIL-ді ассемблер тіліне жинақтау үшін, Cosmos әзірлеушілері уақытынан бұрын IL2CPU атты компилятор, CIL мен шығынды талдауға арналған x86 опкодтар. (CPU-ге IL) - бұл AOT компиляторы деп жазылған Жалпы орта тіл сәйкес тіл (C # ). Ол аударады Жалпы орта тіл дейін машина коды.

X #

X # төменгі деңгей бағдарламалау тілі үшін әзірленген x86 операциялық жүйенің дамуын жеңілдету үшін Космос операциялық жүйесінің бөлігі ретінде процессор архитектурасы. X # кейбірін келтіруге арналған C тәрізді тіл синтаксис дейін құрастыру тілі. Бастапқыда X # Космостың қызметтерін жоюға көмекші болды. X # компиляторы an ашық ақпарат көзі консоль типтік емес архитектурасы бар интерфейс бағдарламасы. Ол код жолдарын жетондарға бөліп, оларды үлгілермен салыстырады. Соңында сәйкес X # код үлгілері аударылады intel синтаксисі x86 құрастыруы, әдетте NASM құрастырушы. Алғашқы нұсқаларда X # операциясы көбінесе құрастыру кодымен 1: 1 болды, бірақ X # компиляторының жазылу себебі болмады.

Синтаксис

X # синтаксисі қарапайым. Ұқсас болғанына қарамастан C, X # синтаксисі әртүрлі және қатаң.

Түсініктемелер

X # түсініктеменің тек бір түрін қолдайды, C ++ стиліндегі бір жолды түсініктеме, екі сызықпен басталады - //.

Тұрақты

X # функциялардан тыс жарияланған атаулы тұрақтылардың анықтамасын қолдайды. Сандық константаны анықтау ұқсас C ++ - мысалы,

const мен = 0

. Тұрақтыға басқа жерде сілтеме жасау а # атаудан бұрын - «# мен», мысалы.

  • A анықтау үшін жіп тұрақты, бір тырнақшалар ('') қолданылады. Жол дәйектілігінде бір дәйексөзді қолдану үшін оның артына кері сызықшаны қойып қашу керек, сияқты 'Мен сондай қуаныштымын'. X # жолдары нөл тоқтатылды.
  • Он алтылық тұрақтыларға доллар белгісінің префиксі қойылған ($), содан кейін тұрақты. ($ B8000).
  • Ондық тұрақтылар безендірілмеген, бірақ олардан басталмауы мүмкін 0.
  • Әдетте екілік және сегіздік тұрақтыларға қолдау көрсетілмейді.

Жапсырмалар

X # белгілері негізінен басқа жиынтық тілдеріндегі белгілерге тең. Жапсырмаға өту туралы нұсқаулық бару әдеттегіден айырмашылығы мнемикалық секіру немесе jmp мнемикалық.

CodeBabel1:    бару CodeLabel2:

Атаулар кеңістігі

X # бағдарламасының файлдары ат кеңістігі директивасынан басталуы керек. X # атау кеңістігінің иерархиясы жоқ, сондықтан кез-келген директива ағымдағы аттар кеңістігін өзгертілгенге немесе файл аяқталғанға дейін өзгертеді. Әр түрлі атаулар кеңістігіндегі айнымалылардың немесе тұрақтылардың аттары бірдей болуы мүмкін, себебі аттар кеңістігі құрастыру нәтижесінде мүшенің атына қосылады. Атаулар кеңістігі бір-біріне сілтеме жасай алмайды, тек «жиынтық» деңгейіндегі амалдарды қолданатын «чит» арқылы.

аттар кеңістігі БІРІНШІ// Айнымалы немесе тұрақты аттың барлығы FIRST префиксімен және астын сызумен жазылады. Осыдан төмендегі айнымалының толық атауы шығады// FIRST_aVar болып табылады.var aVarаттар кеңістігі ЕКІНШІ// aVar басқа айнымалысын атау қиын емес. Оның шын атауы - SECOND_aVar.var aVarаттар кеңістігі БІРІНШІ// Бұл код енді файл аяқталғанша БІРІНШІ аттар кеңістігіне оралады.

Функциялар

Барлық X # атқарушы коды 'function' кілт сөзімен анықталған функцияларға орналастырылуы керек. C # -ден айырмашылығы, X # функциялар тақырыбында кез-келген формальды декларацияны қолдамайды, сондықтан функция атауынан кейінгі шартты жақша алынып тасталады. Сызықпен бекітілген үлгілер код талдағышында жүзеге асырылатын синтаксисте көрсетілгендіктен, C стиліндегі көптеген басқа тілдерден гөрі, ашылатын бұйра жақшаны келесі жолға орналастыру мүмкін емес.

функциясы xSharpFunction {    // функция коды}

X # төменгі деңгейлі тіл болғандықтан, стек жақтаулары салынбаған, сондықтан әдепкі бойынша стектің жоғарғы жағында қайтарылатын EIP мекен-жайы болуы керек.X # функционалдық қоңыраулар функция тақырыбына қарағанда жақшаға алынған аргументтерден тұрады. Функцияларға берілген аргументтер регистрлер, адрестер немесе тұрақтылар болуы мүмкін. Бұл дәлелдер стекке кері тәртіпте итеріледі. X86 платформасындағы стек бір байтты регистрлерді итермелемейтінін немесе баса алмайтынын ескеріңіз.

функциясы xSharpFunction {    EAX = $10    басқа функция(EAX);    қайту}функциясы басқа функция {    // функция коды}

The қайту кілт сөз орындалуын стекте сақталған қайтарылған EIP мекен-жайына қайтарады.

Арифметикалық және биттік амалдар

X # деректердің үш деңгейлі құрылымымен жұмыс істей алады: регистрлер, стек және жады, әр түрлі порттарда. Регистрлер X # үшін барлық қалыпты операциялардың негізі болып табылады. Тіркелімді басқасына жазбаша түрде көшіруге болады DST = SRC қарсы мов немесе нұсқаулықтарды жүктеу / сақтау. Тізілімдерді де оңай көбейтуге немесе азайтуға болады. Арифметикалық амалдар (қосу, азайту, көбейту, бөлу) былай жазылады dest op src қайда src тұрақты, айнымалы немесе регистр болып табылады және dest бұл операнд және нәтиже сақталатын орын.

Тағайындау және арифметикалық амалдардың мысалдары төменде көрсетілген.

ESI = 12345              // ESI-ге 12345 тағайындаңызEDX = #тұрақтыForEDX    // EDX-ке #ConstantForEDX тағайындаңызEAX = EBX                // EBX-ті EAX-қа жылжытыңыз => mov eax, ebxEAX--                    // EAX => dec eax декрементіEAX++                    // өсу EAX => inc eaxEAX + 2                  // eax-ға 2 қосу => eax қосу, 2EAX - $80                // eax => sub eax, 0x80 санынан 0x80 шегеруBX * CX                  // BX-ді CX-ке көбейту => mul cx - бөлу, көбейту және модуль бойынша регистрлер сақталуы керекCX / BX                  // CX-ті BX-ке бөлу => div bxCX мод BX                // CX / BX-ден BX => div bx-ге қалдық

Тіркеуді ауыстыру және илектеу С-ге ұқсас.

DX << 10  // жылжу 10 битке қалдырылдыCX >> 8   // 8 битке оңға жылжуEAX <~ 6  // 6 битпен солға айналдырыңызEAX ~> 4  // оң жаққа 4 битке айналдырыңыз

Басқа биттік операциялар арифметикалық амалдарға ұқсас.

DL & $08     // 0х08 көмегімен DL бойынша биттік және орындау және нәтижені DL-де сақтауCX | 1       // CX-тің ең төменгі битін 1-ге орнат (оны тақ қыл)EAX = ~ECX   // ECX-де ЕМЕС биттік орындау және нәтижені EAX-те сақтауEAX ^ EAX    // өзімен бірге XORing арқылы EAX өшіріңіз

Стек

Стек манипуляциясы X # көмегімен жүзеге асырылады + және - префикстер, қайда + регистрді, мәнді, тұрақты немесе барлық регистрлерді стекке итереді және - кейбір регистрге мәнді шығарады. Барлық тұрақтылар, егер басқаша көрсетілмесе, стекке қос сөздер ретінде итеріледі (бір байтты басуға қолдау көрсетілмейді).

+ESI                   // push esi-EDI                   // эдиге кіру+Барлық                   // барлық регистрлерді сақтау => pushad-Барлық                   // барлық регистрлерді жүктеу => popad+$1badboo2             // стекке 0x1badboo2 басыңыз+$кафе сияқты сөз         //          \/+$сәби сияқты сөз         // 0xcafebabe түртіңіз+#VideoMemory          // тұрақты VideoMemory-нің басу мәні

Айнымалылар

Айнымалылар ат кеңістігінде анықталады (стек жақтаулары болмағандықтан, жергілікті айнымалыларға қолдау көрсетілмейді) var кілт сөз. Массивтерді декларацияның соңына массивтің типі мен өлшемін қосу арқылы анықтауға болады. Айнымалылар мен массивтер әдепкі бойынша нөлге теңеледі. Айнымалының мәніне сілтеме жасау үшін оның алдына нүкте қойылуы керек. Мұнымен префикстеу @ айнымалының адресіне сілтеме жасайды.

аттар кеңістігі XSharpVariablesvar нөлВар                      // айнымалыға нөл беріледіvar myVar1 = $f000 сиыр еті           // айнымалыға 0xf000beef тағайындаладыvar someString = 'Сәлеметсіз бе XSharp!' // айнымалыға 'Hello XSharp!  0' беріледі,var буфер байт[1024]            // 1024 байт көлеміндегі айнымалыға 1024 нөлдік байт беріледі...EAX = .myVar1                    // myVar1 (0xf000beef) мәнін EAX-қа ауыстырадыESI = @.someString               // someString адресін ESI-ге ауыстырадыCL = .someString                 // someString ('H') бірінші символын CL-ге ауыстырады.нөлВар = EAX                   // EAX мәніне zeroVar тағайындайды

X # адреске квадрат жақшалар көмегімен белгіленген ығысуымен қатынаса алады:

var someString = 'Сәлеметсіз бе XSharp!' // айнымалы 'Hello XSharp!  0' мәніне беріледі...ESI = @.someString       // someString мекенжайын ESI-ге жүктеуCL = 'B'                 // CL-ді 'B' етіп орнатыңыз (басында 'H' қайта жазыңыз)CH = ESI[1]              // екінші символды ('E') жолдан CH-ге ауыстыруESI[4] = $00             // соңғы жол// someString мәні 'Bell' (немесе 'Bell  0 XSharp!  0') болады

Салыстыру

Мәндерді салыстырудың екі әдісі бар: таза салыстыру және егер-салыстыру.

  • Таза салыстыру нәтижені FLAGS-ке қалдырады, сондықтан оны жергілікті жиынтықта немесе пайдалануға болады егер салыстыру мүшелерін көрсетпей кілт сөз.
  • Егер салыстыру екі мүшені аннан кейін тікелей салыстырса егер кілт сөз.

X # жолының ұзындығын (баяу) жазудың екі тәсілі (стрлен) функциясы:

// 1-әдіс: таза салыстыруды қолдануфункциясы стрлен {    ESI = ESP[4] // бірінші аргумент ретінде берілген жолға нұсқағышты алу    ECX ^ ECX    // таза ECXІлмек:    АЛ = ESI[ECX]// келесі таңбаны алу    АЛ ?= 0      // бұл 0 ма? жалаушаларға сақтаңыз    егер = қайту  // егер ZF орнатылған болса, қайтарыңыз    ECX++        // else өсуі ECX    бару Ілмек    // цикл ...// 2-жол: егер пайдалануфункциясы стрлен {    ESI = ESP[4]    // бірінші аргумент ретінде берілген жолға нұсқағышты алу    ECX ^ ECX       // таза ECXІлмек:    АЛ = ESI[ECX]    егер АЛ = 0 қайту// AL = 0? қайту    ECX++    бару Ілмек       // цикл ....}

Салыстырудың алты операторы бар: < > = <= >= !=. Бұл операторларды салыстыру кезінде де, циклда да қолдануға болады. Бар екенін ескеріңіз биттік ЖӘНЕ биттерді тексеретін оператор:

АЛ ?& $80      // AL MSB тестіегер = қайту    // егер ZF 0-ге тең болса, тестілік нұсқаулық 0-ге тең болады және MSB орнатылмайды.

Космос кодын жазу

Космоспен жасалған операциялық жүйе кез келген .NET C # консольдық бағдарламасына ұқсас түрде жасалған. Бағдарламаның басында қосымша сілтемелер келтірілген, олар Космос кітапханаларына қол жеткізуге мүмкіндік береді. Бұл кітапханалар әдетте C # консольдық бағдарламаларында қолданылатын жүйелік кітапханаларды жоққа шығарады, өйткені алынған екілік қондырғыда жұмыс істемейді Microsoft Windows.

Пайдаланушы жинағы және Visual Studio

Космос қолданушылар жинағы - бұл Космостың жасаушыларға қолдануын жеңілдетуге арналған бөлігі Microsoft Visual Studio. Орнатылған кезде пайдаланушы жиынтығы Visual Studio-ға Cosmos Project деп аталатын жаңа жоба түрін қосады. Бұл консольдық қосымшаның, Космоспен бірге өзгертілген нұсқасы құрастырушы және жүктеудің бастапқы коды қосылды.

Жобаны құрастыру

Код аяқталғаннан кейін оны .NET компиляторы көмегімен құрастыруға болады. Бұл қолданбаны бастапқы бастапқы кодтан түрлендіреді (C # немесе басқаша) ішіне Жалпы орта тіл (CIL), .NET Framework-тің ана тілі. Бұдан әрі бағдарлама іске қосылады, онда Cosmos Builder терезесі көрсетіледі, ол жобалаушыға жобаның нақты қалай жасалатынын анықтайтын нұсқалар ұсынады. Бұл опцияларға жобаны қалай жүктеу керек - мысалы, эмуляторлар арқылы, мысалы, жылдам эмулятор (QEMU ), Виртуалды компьютер, және VMWare, а-ға жазу диск кескіні Кейінірек жазуға болатын (ISO) файл CD-ROM, немесе арқылы Алдын ала жүктеудің орындалу ортасы (PXE) желіні жүктеу - сонымен қатар Космос орнатқан күйін келтіру опциялары түзеткіш және басқа опциялар.

Пайдаланушы өз қалаған параметрлерін таңдаған кезде, олар Құрастыру батырмасын басады. Бұл шақырады IL2CPU барлық қосымшаларды жүйелі түрде тексеретін компилятор (COS кодын қоспағанда), оны түрлендіретін құрастыру тілі таңдалған процессор архитектурасы үшін. 2016 жылғы жағдай бойынша, тек x86 қолдау көрсетіледі. Әрі қарай, Космос таңдалған ассемблерді осы жинақтау тілінің кодын ана тіліне түрлендіру үшін шақырады Орталық процессор (ОРТАЛЫҚ ЕСЕПТЕУІШ БӨЛІМ) опкод. Соңында, қажетті шығару мүмкіндігі іске қосылады, мысалы эмуляторды бастау, PXE қозғалтқышын іске қосу немесе ISO шығару диск кескіні файл екілік код опкод.

Жөндеу опциялары

Космос нәтижесінде пайда болған ОЖ-ны қалай орналастыруға және қалай жасауға болатындығы туралы бірнеше нұсқаны ұсынады түзету шығу.

Виртуализация

Космостың әдепкі жүктеу экраны QEMU-да көрсетілгендей.

Космос қолданушыларға операциялық жүйе а қолдана отырып эмуляцияланған ортада виртуалды машина. Бұл әзірлеушілерге жүйені қайта жүктеуді қажет етпестен тексеруге мүмкіндік береді, бұл қосымша жабдықты қажет етпейтін артықшылықтар береді немесе әзірлеушілер одан шығуға мүмкіндік береді даму ортасы. Қазіргі уақытта тек VMWare-ге қолдау көрсетіледі. Бохс қолдау жүріп жатыр. QEMU және VirtualBox-қа ресми түрде қолдау көрсетілмейді.

Дискідегі кескіндер

Бұл опция амалдық жүйені а-ға жазады диск кескіні (ISO ) кейбір эмуляторларға жүктелетін файл (мысалы Бохс, QEMU немесе жиі кездеседі VMware ) немесе а CD-ROM және нақты жабдықта жүктелді. Бұл опция сонымен қатар а. Сақтау құрылғысын USB-ге орналастыруға мүмкіндік береді USB флэш-жады, оптикалық диск жетегі болмауы мүмкін құрылғыларда жүктеу үшін. Желі әлі орнатылмағандықтан, бұл орналастыру опциясымен түзетуді қолдамайды.

PXE желісін жүктеу

Бұл опция амалдық жүйені нақты жабдықта жүктеуге мүмкіндік береді. Деректер a арқылы жіберіледі жергілікті желі (LAN) дейін клиент машина. Бұл үшін екі компьютер қажет: біреуі клиенттік машина ретінде (ОЖ жүктелген) және екіншісі сервер ретінде (әдетте әзірлеуші ​​машина). Сондай-ақ, бұл үшін екі компьютер, а желі картасы, және негізгі енгізу / шығару жүйесі (BIOS PXE жүктей алады. 2016 жылғы жағдай бойынша, желі арқылы түзетуді қолдамайды.

Космос құрастырушысы

«Космос» жобасының тобы сонымен бірге құрастырушы ол ақырында Космос жүйесінің негізгі құрастырушысы болуға арналған. Алайда, құрастырушы әлі де тиімсіз және баяу жұмыс істейді, сондықтан да Желілік ассемблер Оның орнына (NASM) қолданылады.

Сондай-ақ қараңыз

Әдебиеттер тізімі

Сыртқы сілтемелер

Жаңалықтар