Операциялык системалар: үч жеңил даана. 2-бөлүк: Абстракция: Процесс (котормо)

Операциялык системаларга киришүү

Эй Хабр! Мен сиздердин назарыңыздарга менин оюмча бир кызыктуу адабияттын бир катар макала-котормолорун келтиргим келет - OSTEP. Бул материалда Unix сыяктуу операциялык системалардын иши, тактап айтканда, процесстер, ар кандай пландоочулар, эс тутум жана заманбап ОСти түзгөн башка ушул сыяктуу компоненттер менен иштөө абдан терең талкууланат. Бардык материалдардын түп нускасын бул жерден көрө аласыз бул жерде. Көңүл буруңуз, котормо профессионалдуу эмес (абдан эркин) жасалган, бирок мен жалпы маанини сактап калдым деп ишенем.

Бул тема боюнча лабораториялык иштерди бул жерден тапса болот:

Башка бөлүктөр:

Ошондой эле менин каналымды текшере аласыз телеграмма =)

Келгиле, ОС колдонуучуларга берген эң негизги абстракцияны карап көрөлү: процесс. Процесстин аныктамасы абдан жөнөкөй - бул иштеп жаткан программа. Программанын өзү дискте жайгашкан жансыз нерсе - бул нускамалардын жыйындысы жана, балким, ишке киргизүүнү күтүп жаткан кээ бир статикалык маалыматтар. Бул ОС ошол байттарды алып, аларды иштетип, программаны пайдалуу нерсеге айлантат.
Көбүнчө колдонуучулар бир эле учурда бир нече программаны иштетүүнү каалашат, мисалы, ноутбукуңузда браузерди, оюнду, медиа ойноткучту, тексттик редакторду жана башкаларды иштете аласыз. Чынында, типтүү система бир эле учурда ондогон же жүздөгөн процесстерди иштете алат. Бул факт системаны колдонууну жеңилдетет, сиз эч качан CPU бекерби же жокпу деп тынчсызданбайсыз, сиз жөн гана программаларды иштетесиз.

Бул көйгөйдү жаратат: көп процессорлордун иллюзиясын кантип камсыз кылуу керек? Эгер сизде бир эле физикалык CPU болсо да, ОС кантип дээрлик чексиз сандагы процессорлордун элесин түзө алат?

OS бул иллюзияны CPU виртуалдаштыруу аркылуу жаратат. Бир процессти баштоо, андан кийин аны токтотуу, башка процессти баштоо жана башкалар менен ОС көптөгөн виртуалдык процессорлор бар деген иллюзияны сактай алат, ал эми иш жүзүндө бир же бир нече физикалык процессорлор болот. Бул техника деп аталат CPU ресурстарын убакыт боюнча бөлүштүрүү. Бул техника колдонуучуларга каалагандай бир эле учурда көптөгөн процесстерди жүргүзүүгө мүмкүндүк берет. Бул чечимдин баасы өндүрүмдүүлүк болуп саналат - анткени CPU бир нече процесстер менен бөлүшүлсө, ар бир процесс жайыраак иштетилет.
CPU виртуалдаштырууну ишке ашыруу үчүн жана өзгөчө аны жакшы аткаруу үчүн ОС төмөн деңгээлдеги жана жогорку деңгээлдеги колдоого муктаж. Төмөнкү деңгээлдеги колдоо деп аталат механизмдер функционалдуулуктун талап кылынган бөлүгүн ишке ашыруучу төмөнкү деңгээлдеги методдор же протоколдор. Мындай функциялардын мисалы болуп контекстти алмаштыруу болуп саналат, ал ОС бир программаны токтотуп, процессордо башка программаны иштетүү мүмкүнчүлүгүн берет. Бул убакыт бөлүштүрүү бардык заманбап операциялык системаларда ишке ашырылат.
Бул механизмдердин үстүндө "саясат" түрүндөгү ОСке орнотулган логика бар. саясат операциялык система үчүн белгилүү бир чечим кабыл алуу алгоритми болуп саналат. Мындай саясаттар, мисалы, кайсы программаны биринчи (буйруктар тизмесинен) ишке киргизүү керектигин чечет. Демек, маселен, бул маселе деген саясат менен чечилет пландоочу (график саясаты) жана чечимди тандап жатканда, ал төмөнкүдөй маалыматтарга таянат: стартап таржымалы (кайсы программа акыркы мүнөттөрдө эң узак ишке киргизилген), бул процесс кандай жүктү көтөрөт (кандай типтеги программалар ишке киргизилген), аткаруу көрсөткүчтөрү (система же жокпу) интерактивдүү өз ара аракеттенүү же өткөрүү жөндөмдүүлүгү үчүн оптималдаштырылган ) жана башкалар.

Абстракция: процесс

Операциялык система тарабынан аткарылган иштеп жаткан программанын абстракциясы биз деп аталат тартиби. Жогоруда айтылгандай, процесс - бул жөн гана убакыттын каалаган мезгилинде иштеп жаткан программа. Программанын жардамы менен биз ар кандай тутум ресурстарынан бул программа кирүүчү же анын аткарылышы учурунда таасир этүүчү кыскача маалыматты ала турган программа.
Процесстин компоненттерин түшүнүү үчүн системанын абалын түшүнүү керек: программа иштөө учурунда эмнени окуй алат же өзгөртө алат. Каалаган убакта, программанын аткарылышы үчүн системанын кайсы элементтери маанилүү экенин түшүнүшүңүз керек.
Системанын ачык элементтеринин бири процесс камтыган мамлекет болуп саналат эс-тутум. Инструкциялар эстутумда жайгашкан. Программа окуган же жазган маалыматтар да эс тутумда жайгашкан. Ошентип, процесс дарек ала турган эс тутум (дарек мейкиндиги деп аталат) процесстин бир бөлүгү болуп саналат.
Ошондой эле системанын абалынын бир бөлүгү регистрлер болуп саналат. Көптөгөн инструкциялар регистрлердин маанисин өзгөртүүгө же алардын маанисин окууга багытталган, ошондуктан регистрлер да процесстин ишинин маанилүү бөлүгү болуп калат.
Белгилеп кетсек, машинанын абалы да кээ бир атайын реестрлерден түзүлөт. Мисалы, IP - нускама көрсөткүчү — программа учурда аткарылып жаткан инструкциянын көрсөткүчү. Дагы бар стек көрсөткүчү жана ага байланыштуу кадр көрсөткүчү, башкаруу үчүн колдонулат: функциянын параметрлери, жергиликтүү өзгөрмөлөр жана кайтаруу даректери.
Акыр-аягы, программалар көбүнчө ROM (окуу үчүн гана эстутум) кире алышат. Бул "I/O" (киргизүү/чыгарма) маалыматы учурда процессте ачылган файлдардын тизмесин камтышы керек.

Process API

Процесс кантип иштээрин түшүнүү үчүн, келгиле, операциялык тутумдун интерфейсине камтылууга тийиш болгон системалык чалуулардын мисалдарын изилдеп көрөлү. Бул API'лер тигил же бул формада каалаган OSде жеткиликтүү.

түзүү (түзүү): ОС жаңы процесстерди түзүүгө мүмкүндүк берген кандайдыр бир ыкманы камтышы керек. Терминалга буйрук киргизгенде же белгини эки жолу чыкылдатуу менен тиркемени ишке киргизгенде, жаңы процессти түзүү жана андан кийин көрсөтүлгөн программаны ишке киргизүү үчүн ОСке чалуу жөнөтүлөт.
алып салуу: Процессти түзүү үчүн интерфейс бар болгондуктан, ОС процессти күч менен алып салуу мүмкүнчүлүгүн да бериши керек. Көпчүлүк программалар иштеп жатканда, табигый түрдө өз алдынча башталып, аяктайт. Болбосо, колдонуучу аларды өлтүргүсү келет жана процессти токтотуу үчүн интерфейс пайдалуу болмок.
күтүү (күтүү): Кээде процесстин бүтүшүн күтүү пайдалуу, ошондуктан күтүү мүмкүнчүлүгүн камсыз кылган кээ бир интерфейстер берилет.
Башка башкаруу (ар кандай башкаруу): Өлтүрүү жана процессти күтүүдөн тышкары, башка ар кандай башкаруу ыкмалары да бар. Мисалы, көпчүлүк операциялык системалар процессти тоңдоого (анын аткарылышын белгилүү бир мөөнөткө токтотуу) жана андан кийин аны кайра улантууга (аткарууну улантуу) мүмкүнчүлүгүн камсыз кылат.
абал (маалымат): Процесстин абалы жөнүндө кээ бир маалыматты алуу үчүн ар кандай интерфейстер бар, мисалы, ал канча убакыттан бери иштеп жаткандыгы же учурда кандай абалда.

Операциялык системалар: үч жеңил даана. 2-бөлүк: Абстракция: Процесс (котормо)

Процесс түзүү: чоо-жайы

Кызыктуу нерселердин бири - бул программалардын процесстерге кантип айланышы. Айрыкча, ОС программаны кантип алып, иштетет. Процесс кантип түзүлөт.
Биринчиден, ОС программалык кодду жана статикалык маалыматтарды эс тутумга (процесстин дарек мейкиндигине) жүктөшү керек. Программалар, адатта, кандайдыр бир аткарылуучу форматта дискте же катуу абалдагы дискте жайгашкан. Ошентип, программаны жана статикалык маалыматтарды эс тутумга жүктөө процесси ОС дисктен ошол байттарды окуп, аларды эстутумдун кайсы бир жерине жайгаштырууну талап кылат.

Алгачкы операциялык системаларда жүктөө процесси ынтызарлык менен аткарылган, бул программа ишке киргенге чейин бүт код эстутумга жүктөлгөн дегенди билдирет. Заманбап операциялык системалар муну жалкоолук менен жасашат, башкача айтканда, коддун же маалыматтардын бөлүктөрүн программа аткаруу учурунда талап кылганда гана жүктөйт.

Код жана статикалык маалыматтар ОСтун эстутумуна жүктөлгөндөн кийин, процесс ишке кириши үчүн дагы бир нече нерселерди жасоо керек. Стек үчүн эстутумдун кандайдыр бир көлөмү бөлүнүшү керек. Программалар жергиликтүү өзгөрмөлөр, функциянын параметрлери жана кайтаруу даректери үчүн стекти колдонушат. ОС бул эстутумду бөлүштүрөт жана аны процесске берет. Стек кээ бир аргументтер менен да бөлүштүрүлүшү мүмкүн, атап айтканда, ал main() функциясынын параметрлерин толтурат, мисалы argc жана argv массивдери менен.

Операциялык система ошондой эле программа үймөгүнө бир аз эстутум бөлүшү мүмкүн. Үймөк программалар тарабынан динамикалык түрдө бөлүнгөн маалыматтарды ачык суроо үчүн колдонулат. Программалар функцияны чакыруу менен бул мейкиндикти талап кылат malloc () жана функцияны чакыруу менен аны так тазалайт бекер(). Үймөк маалымат структуралары үчүн керектелет, мисалы, байланышкан барактар, хэш таблицалар, дарактар ​​жана башкалар. Алгач үймөккө эстутумдун бир аз көлөмү бөлүнөт, бирок убакыттын өтүшү менен, программа иштеп жатканда үймөк китепкана API чалуу malloc() аркылуу көбүрөөк эстутумду талап кыла алат. Иштөө системасы бул чалууларды канааттандырууга жардам берүү үчүн көбүрөөк эстутум бөлүү процессине катышат.

Операциялык система ошондой эле инициализациялоо тапшырмаларын аткарат, айрыкча I/O менен байланышкан. Мисалы, UNIX системаларында ар бир процесс демейки боюнча стандарттык киргизүү, чыгаруу жана ката үчүн 3 ачык файл дескрипторуна ээ. Бул туткалар программаларга терминалдан киргизүүнү окууга, ошондой эле экранда маалыматты көрсөтүүгө мүмкүндүк берет.

Ошентип, кодду жана статикалык маалыматтарды эс тутумга жүктөө, стекти түзүү жана инициализациялоо жана киргизүү/чыгаруу тапшырмаларын аткарууга байланыштуу башка иштерди аткаруу менен ОС процессти аткаруу үчүн этапты даярдайт. Акыр-аягы, бир акыркы милдет калды: негизги () функциясы деп аталган кирүү чекити аркылуу программаны иштетүү. main() функциясын аткаруу менен ОС CPU башкаруусун жаңы түзүлгөн процесске өткөрүп берет, ошентип программа аткарыла баштайт.

Процесс абалы

Эми биз процесс деген эмне жана ал кандайча түзүлөт деген түшүнүккө ээ болгондон кийин, келгиле, ал процесстин абалын санап көрөлү. Жөнөкөй түрдө процесс төмөнкү мамлекеттердин биринде болушу мүмкүн:
иштеп. Иштеп жатканда процесс процессордо иштейт. Бул көрсөтмөлөр аткарылып жатат дегенди билдирет.
даяр. Даяр абалда процесс иштөөгө даяр, бирок кандайдыр бир себептерден улам ОС аны белгиленген убакта аткарбайт.
бөгөлгөн. Бөгөттөлгөн абалда процесс кандайдыр бир окуя болгонго чейин анын аткарууга даяр болушуна тоскоол болгон кээ бир операцияларды аткарат. Бир кеңири таралган мисал, процесс IO операциясын баштаганда, ал блоктолуп, башка процессор процессорду колдоно алат.

Операциялык системалар: үч жеңил даана. 2-бөлүк: Абстракция: Процесс (котормо)

Сиз бул мамлекеттерди график түрүндө элестете аласыз. Сүрөттө көрүнүп тургандай, процесстин абалы ОСтун кароосу боюнча RUNNING жана READY ортосунда өзгөрүшү мүмкүн. Процесстин абалы ДАЯР абалынан ИШТЕП ЖАТАТ дегенге өзгөргөндө, бул процесс пландаштырылганын билдирет. карама-каршы багытта - макет алынып салынды. Процесс БЛОККА болуп калган учурда, мисалы, мен IO операциясын баштасам, ОС аны кандайдыр бир окуя болгонго чейин, мисалы IO аяктаганга чейин ушул абалда сактайт. ушул учурда ДАЯР абалына өтүү жана ОС чечсе, дароо ИШТЕП жаткан абалга өтүү.
Келгиле, бул мамлекеттер аркылуу эки процесс кандайча жүрүп жатканын мисалга карап көрөлү. Баштоо үчүн, эки процесс тең иштеп жатканын жана ар бири бир гана CPU колдонуп жатканын элестетели. Бул учурда алардын мамлекеттери мындай болот.

Операциялык системалар: үч жеңил даана. 2-бөлүк: Абстракция: Процесс (котормо)

Төмөнкү мисалда, биринчи процесс, бир аз убакыт өткөндөн кийин, IOну сурайт жана БЛОКТОЙТУЛГАН абалга кирип, башка процессти иштетүүгө мүмкүндүк берет (FIG 1.4). OS 0 процесси CPU колдонбой жатканын көрүп, 1-процессти баштайт. 1-процесс иштеп жатканда, IO аяктады жана 0 процессинин абалы ДАЯР болуп өзгөрөт. Акыры, 1-процесс аяктады жана аяктагандан кийин 0 процесси башталат, ишке ашырат жана ишин аяктайт.

Операциялык системалар: үч жеңил даана. 2-бөлүк: Абстракция: Процесс (котормо)

Берилиштер структурасы

Операциянын өзү программа жана башка программалар сыяктуу эле, анын ар кандай тиешелүү маалымат бөлүктөрүн көзөмөлдөгөн негизги маалымат структуралары бар. Ар бир процесстин абалын көзөмөлдөө үчүн, OS кээ бирлерин колдойт процесс тизмеси READY абалындагы бардык процесстер үчүн жана учурда иштеп жаткан процесстерге көз салуу үчүн кээ бир кошумча маалымат. Ошондой эле, ОС бөгөттөлгөн процесстерге мониторинг жүргүзүү керек. IO аяктагандан кийин, ОС талап кылынган процессти ойготуп, аны иштетүүгө даяр абалга келтириши керек.

Мисалы, ОС процессордун регистрлеринин абалын сакташы керек. Процесс токтоп турган учурда регистрлердин абалы процесстин дарек мейкиндигинде сакталат, ал эми анын иштөөсү уланып жаткан учурда регистрлердин маанилери калыбына келтирилет жана бул процесстин аткарылышын улантат.

Даяр, бөгөттөлгөн, иштеп жаткан мамлекеттерден тышкары дагы башка мамлекеттер бар. Кээде жаратуу учурунда процесс INIT абалында болушу мүмкүн. Акыр-аягы, процесс аяктагандан кийин, ФИНАЛ абалына коюлушу мүмкүн, бирок анын маалыматы али тазалана элек. UNIX системаларында бул абал деп аталат зомби процесси. Бул абал ата-эне процесси баланын кайтаруу кодун билгиси келген учурларда пайдалуу, мисалы, адатта 0 ийгиликти жана 1 катаны билдирет, бирок программисттер ар кандай көйгөйлөрдү белгилөө үчүн кошумча чыгуу коддорун чыгара алышат. Ата-эне процесси аяктаганда, ал бала процессинин аякташын күтүү үчүн күтүү() сыяктуу акыркы тутумдук чалууларды жасайт жана ОС токтотулган процесске байланыштуу бардык маалыматтарды тазалай ала тургандыгы жөнүндө сигнал берет.

Операциялык системалар: үч жеңил даана. 2-бөлүк: Абстракция: Процесс (котормо)

Лекциянын негизги пункттары:

тартиби — ОСте иштеп жаткан программанын негизги абстракциясы. Каалаган убакта процессти анын абалы боюнча сыпаттаса болот: анын дарек мейкиндигиндеги эс тутумдун мазмуну, процессор регистрлеринин мазмуну, анын ичинде нускама көрсөткүчү жана стек көрсөткүчү жана IO маалыматы, мисалы, окулуп же жазылып жаткан ачык файлдар.
Process API программалар процесстерге жасай турган чалуулардан турат. Эреже катары, бул түзүү, жок кылуу же башка чалуулар.
● Процесс көптөгөн мамлекеттердин биринде, анын ичинде иштеп, даяр, бөгөттөлгөн. График түзүү, графиктен өзгөчө учурлар же күтүү сыяктуу ар кандай окуялар процесстин абалын биринен экинчисине өзгөртө алат.
Процесс тизмеси системадагы бардык процесстер жөнүндө маалыматты камтыйт. Андагы ар бир жазуу процессти башкаруу блогу деп аталат, ал чындыгында белгилүү бир процесс жөнүндө бардык керектүү маалыматты камтыган структура болуп саналат. 

Source: www.habr.com

Комментарий кошуу