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

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

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

Бул тема боюнча лабораториялык иштерди бул жерден тапса болот:
- оригиналдуу: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- оригиналдуу: github.com/remzi-arpacidusseau/ostep-code
- менин жеке адаптациям: github.com/bykvaadm/OS/tree/master/ostep

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

Программанын иштеши

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

Фон Неймандын эсептөө модели

Биз сүрөттөгөн жумуштун жөнөкөйлөштүрүлгөн формасы Фон Неймандын эсептөө моделине окшош. Фон Нейман компьютердик системалардын пионерлеринин бири, ошондой эле оюн теориясынын авторлорунун бири.. Программа иштеп жатканда, башка көптөгөн окуялар, башка көптөгөн процесстер жана үчүнчү жактын логикалык иштери ишке ашат, алардын негизги максаты системаны ишке киргизүүнү, иштетүүнү жана тейлөөнү жөнөкөйлөтүү болуп саналат.
Программаларды иштетүүнү жеңилдетүүгө (же бир эле учурда бир нече программаны иштетүүгө уруксат берүү) жооптуу болгон программалык камсыздоолордун жыйындысы бар, программаларга бир эле эстутумду бөлүшүүгө, ошондой эле ар кандай түзүлүштөр менен байланышууга мүмкүндүк берет. Мындай программалык камсыздоонун (программалык камсыздоонун) жыйындысы негизи операциялык система деп аталат жана анын милдеттерине системанын туура жана эффективдүү иштешин көзөмөлдөө, ошондой эле бул системаны башкаруунун жеңилдигин камсыз кылуу кирет.

Операциондук система

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

CPU виртуалдаштыруу

Төмөнкү программаны карап көрөлү:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

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

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

Эстутум виртуалдаштыруу

Эми эстутумду карайлы. Заманбап системалардагы эс тутумдун физикалык модели байт массиви катары берилген.. Эстутумдан окуу үчүн, тактоо керек уюлдук дарегиага жетүү үчүн. Маалыматтарды жазуу же жаңыртуу үчүн, ошондой эле маалыматтарды жана аны жаза турган уячанын дарегин көрсөтүшүңүз керек.
Программанын аткарылышы учурунда эстутумга тынымсыз кирүүгө болот. Программа өзүнүн бүт маалымат структурасын эс тутумунда сактайт жана ар кандай көрсөтмөлөрдү аткаруу менен ага жетет. Ошол эле учурда инструкциялар да эстутумда сакталат, ошондуктан ага кийинки нускама үчүн ар бир суроо үчүн да жеткиликтүү болот.

malloc() чалуу

Чакыруу аркылуу эстутум аймагын бөлүүчү төмөнкү программаны карап көрөлү malloc () (https://youtu.be/jnlKRnoT1m0):

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

Программа бир нече нерсени жасайт. Биринчиден, ал кандайдыр бир эстутумду бөлүштүрөт (7-сап), андан кийин бөлүнгөн уячанын дарегин басып чыгарат (9-сап), бөлүнгөн эстутумдун биринчи уясына нөлдү жазат. Андан кийин, программа циклге кирет, анда ал эстутумда сакталган маанини "p" өзгөрмөсүндөгү дарек боюнча көбөйтөт. Ал ошондой эле процесстин идентификаторун басып чыгарат. Процесс ID ар бир иштеп жаткан процесс үчүн уникалдуу. Бир нече нускаларды ишке киргизгенден кийин, биз кызыктуу жыйынтыкка туш болобуз: Биринчи учурда, эгер сиз эч нерсе кылбай, жөн гана бир нече нусканы иштетсеңиз, анда даректер ар кандай болот. Бирок бул биздин теорияга туура келбейт! Туура, анткени заманбап дистрибуцияларда демейки боюнча эстутум рандомизациясы иштетилген. Эгер ал өчүрүлгөн болсо, биз күтүлгөн натыйжаны алабыз - бир эле учурда иштеп жаткан эки программанын эстутум даректери дал келет.

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

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

ырааттуулук

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

Төмөнкү программаны карап көрөлү:

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

Негизги функциядагы программа чалуу аркылуу эки жипти түзөт pthread_create(). Бул мисалда жипти башка функциялар менен катар бир эле эс мейкиндигинде иштеген функция катары кароого болот, бир эле учурда бир нече функция иштейт. Бул мисалда ар бир жип функцияны баштайт жана аткарат worker() бул өз кезегинде жөн гана өзгөрмөнү жогорулатат,.

Келгиле, бул программаны 1000 аргументи менен иштетели. Сиз ойлогондой, натыйжа 2000 болушу керек, анткени ар бир жип өзгөрмө 1000 эсеге көбөйгөн. Бирок, баары ушунчалык жөнөкөй эмес. Келгиле, программаны көбүрөөк кайталоо тартиби менен иштетүүгө аракет кылалы.

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

Санды киргизүү менен, мисалы, 100000, биз чыгарууну 200000 саны катары көрөбүз деп күтөбүз. Бирок 100000 санын бир нече жолу иштетсек, биз туура жоопту гана көрбөстөн, ар кандай туура эмес жоопторду да алабыз. Жооп санды көбөйтүү үчүн үч операция талап кылынат - эстутумдан санды алуу, көбөйтүү, анан кайра санды жазуу. Бул көрсөтмөлөрдүн баары атомдук түрдө аткарылбагандыктан (баары бир эле учурда), ушул сыяктуу кызыктай нерселер болушу мүмкүн. Бул көйгөй программалоодо деп аталат жарыш абалы. Белгисиз күчтөр кандайдыр бир операцияларыңыздын аткарылышына таасир этиши мүмкүн болгондо.

Source: www.habr.com

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