{"id":30717,"date":"2019-10-31T21:37:05","date_gmt":"2019-10-31T18:37:05","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-1-intro-perevod\/"},"modified":"2019-10-31T21:37:05","modified_gmt":"2019-10-31T18:37:05","slug":"operating-systems-three-easy-pieces-part-1-intro-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod","title":{"rendered":"Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>\u00davod do opera\u010dn\u00edch syst\u00e9m\u016f<\/h1>\n<p>Ahoj, Habr! R\u00e1d bych v\u00e1m p\u0159edstavil s\u00e9rii \u010dl\u00e1nk\u016f-p\u0159eklad\u016f jedn\u00e9 zaj\u00edmav\u00e9 literatury \u2014 OSTEP. V tomto materi\u00e1lu se dostate\u010dn\u011b podrobn\u011b zab\u00fdv\u00e1me fungov\u00e1n\u00edm unixov\u00fdch opera\u010dn\u00edch syst\u00e9m\u016f, konkr\u00e9tn\u011b \u2014 prac\u00ed s procesy, r\u016fzn\u00fdmi pl\u00e1nova\u010di, pam\u011bt\u00ed a dal\u0161\u00edmi podobn\u00fdmi komponentami, kter\u00e9 tvo\u0159\u00ed modern\u00ed OS. Origin\u00e1l v\u0161ech materi\u00e1l\u016f m\u016f\u017eete naj\u00edt zde <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">tady<\/a><\/noindex>. Upozor\u0148uji, \u017ee p\u0159eklad byl proveden neprofesion\u00e1ln\u011b (pom\u011brn\u011b voln\u011b), ale douf\u00e1m, \u017ee jsem zachoval celkov\u00fd smysl.<\/p>\n<p>Laboratorn\u00ed pr\u00e1ce k tomuto p\u0159edm\u011btu najdete zde:<br \/>\n \u2014 origin\u00e1l: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html<\/a><\/noindex><br \/>\n \u2014 origin\u00e1l: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><br \/>\n \u2014 moje osobn\u00ed adaptace: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">github.com\/bykvaadm\/OS\/tree\/master\/ostep<\/a><\/noindex><\/p>\n<p>A m\u016f\u017eete tak\u00e9 nahl\u00e9dnout na m\u016fj kan\u00e1l na <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegramu<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Fungov\u00e1n\u00ed programu<\/h3>\n<p>\nCo se tedy d\u011bje, kdy\u017e b\u011b\u017e\u00ed n\u011bjak\u00fd program? Spu\u0161t\u011bn\u00fd program vykon\u00e1v\u00e1 jednu jednoduchou \u010dinnost \u2014 prov\u00e1d\u00ed instrukce. Ka\u017edou sekundu procesor na\u010d\u00edt\u00e1 miliony a dokonce mo\u017en\u00e1 miliardy instrukc\u00ed z opera\u010dn\u00ed pam\u011bti, n\u00e1sledn\u011b je dek\u00f3duje (nap\u0159\u00edklad rozpozn\u00e1, k jak\u00e9mu typu pat\u0159\u00ed tyto instrukce) a vykon\u00e1v\u00e1 je. M\u016f\u017ee to b\u00fdt s\u010d\u00edt\u00e1n\u00ed dvou \u010d\u00edsel, p\u0159\u00edstup do pam\u011bti, kontrola podm\u00ednky, skok na funkci a tak d\u00e1le. Po dokon\u010den\u00ed jedn\u00e9 instrukce se procesor p\u0159esune k proveden\u00ed dal\u0161\u00ed. A tak se instrukce prov\u00e1d\u011bj\u00ed jedna za druhou, dokud program nedokon\u010d\u00ed.<br \/>\nTento p\u0159\u00edklad je samoz\u0159ejm\u011b zjednodu\u0161en\u00fd \u2014 ve skute\u010dnosti modern\u00ed hardware umo\u017e\u0148uje procesoru vykon\u00e1vat instrukce mimo po\u0159ad\u00ed, p\u0159edv\u00eddat mo\u017en\u00e9 v\u00fdsledky, prov\u00e1d\u011bt instrukce sou\u010dasn\u011b a pou\u017e\u00edvat podobn\u00e9 triky.<\/p>\n<h3>Von Neumannova architektura<\/h3>\n<p>\nN\u00e1\u0161 popsan\u00fd zjednodu\u0161en\u00fd model fungov\u00e1n\u00ed je podobn\u00fd Von Neumannov\u011b modelu v\u00fdpo\u010dt\u016f. <i>Von Neumann byl jedn\u00edm z pr\u016fkopn\u00edk\u016f po\u010d\u00edta\u010dov\u00fdch syst\u00e9m\u016f, tak\u00e9 je jedn\u00edm z autor\u016f teorie her<\/i>. B\u011bhem pr\u00e1ce programu se odehr\u00e1v\u00e1 je\u0161t\u011b spousta dal\u0161\u00edch ud\u00e1lost\u00ed, b\u011b\u017e\u00ed mnoho dal\u0161\u00edch proces\u016f a vedlej\u0161\u00ed logika, jejich\u017e hlavn\u00edm c\u00edlem je zjednodu\u0161en\u00ed spu\u0161t\u011bn\u00ed, b\u011bhu a \u00fadr\u017eby syst\u00e9mu.<br \/>\nExistuje sada softwaru, kter\u00e1 je zodpov\u011bdn\u00e1 za jednoduchost spou\u0161t\u011bn\u00ed program\u016f (nebo dokonce umo\u017e\u0148uje spou\u0161t\u011bn\u00ed v\u00edce program\u016f sou\u010dasn\u011b), umo\u017e\u0148uje program\u016fm sd\u00edlet stejnou pam\u011b\u0165 a tak\u00e9 interagovat s r\u016fzn\u00fdmi za\u0159\u00edzen\u00edmi. Tato sada softwaru se v z\u00e1sad\u011b naz\u00fdv\u00e1 opera\u010dn\u00edm syst\u00e9mem a jeho \u00fakolem je sledovat, aby syst\u00e9m fungoval spr\u00e1vn\u011b a efektivn\u011b, a tak\u00e9 usnad\u0148ovat spr\u00e1vu tohoto syst\u00e9mu. <\/p>\n<h2>Opera\u010dn\u00ed syst\u00e9m<\/h2>\n<p>\n<b>Opera\u010dn\u00ed syst\u00e9m, zkr\u00e1cen\u011b OS \u2014 komplex vz\u00e1jemn\u011b propojen\u00fdch program\u016f ur\u010den\u00fdch pro spr\u00e1vu zdroj\u016f po\u010d\u00edta\u010de a organizaci interakce u\u017eivatele s po\u010d\u00edta\u010dem.<\/b>. <br \/>\nOS dosahuje sv\u00e9 efektivity p\u0159edev\u0161\u00edm prost\u0159ednictv\u00edm nejd\u016fle\u017eit\u011bj\u0161\u00ed techniky \u2014 techniky <b>virtualizace<\/b>. OS interaguje s fyzick\u00fdm zdrojem (procesorem, pam\u011bt\u00ed, diskem atd.) a transformuje ho do obecn\u011bj\u0161\u00ed, schopn\u011bj\u0161\u00ed a u\u017eivatelsky p\u0159\u00edv\u011btiv\u011bj\u0161\u00ed podoby sebe sam\u00e9ho. Proto lze pro obecn\u00e9 porozum\u011bn\u00ed velmi hrub\u011b p\u0159irovnat opera\u010dn\u00ed syst\u00e9m k virtu\u00e1ln\u00edmu stroji.<br \/>\nAby umo\u017enila u\u017eivatel\u016fm d\u00e1vat p\u0159\u00edkazy opera\u010dn\u00edmu syst\u00e9mu a t\u00edm vyu\u017e\u00edvat schopnosti virtu\u00e1ln\u00edho stroje (jako je: spou\u0161t\u011bn\u00ed program\u016f, p\u0159id\u011blov\u00e1n\u00ed pam\u011bti, p\u0159\u00edstup k soubor\u016fm atd.), opera\u010dn\u00ed syst\u00e9m poskytuje ur\u010dit\u00fd rozhran\u00ed, naz\u00fdvan\u00e9 <b>API<\/b> (aplika\u010dn\u00ed programovac\u00ed rozhran\u00ed), ke kter\u00e9mu je mo\u017en\u00e9 prov\u00e1d\u011bt vol\u00e1n\u00ed. Typick\u00fd opera\u010dn\u00ed syst\u00e9m umo\u017e\u0148uje prov\u00e9st stovky syst\u00e9mov\u00fdch vol\u00e1n\u00ed.<br \/>\nA nakonec, proto\u017ee virtualizace umo\u017e\u0148uje mnoha program\u016fm pracovat (t\u00edmto zp\u016fsobem spole\u010dn\u011b sd\u00edlet CPU) a z\u00e1rove\u0148 p\u0159istupovat k jejich instrukc\u00edm a dat\u016fm (\u010d\u00edm\u017e se pam\u011b\u0165 d\u011bl\u00ed), a tak\u00e9 p\u0159istupovat k disk\u016fm (t\u00edmto zp\u016fsobem spole\u010dn\u011b pou\u017e\u00edvat vstupn\u011b-v\u00fdstupn\u00ed za\u0159\u00edzen\u00ed), opera\u010dn\u00ed syst\u00e9m se tak\u00e9 naz\u00fdv\u00e1 spr\u00e1vcem zdroj\u016f. Ka\u017ed\u00fd procesor, disk a pam\u011b\u0165 jsou zdrojem syst\u00e9mu a tak jednou z rol\u00ed opera\u010dn\u00edho syst\u00e9mu je spr\u00e1va t\u011bchto zdroj\u016f, a to efektivn\u011b, spravedliv\u011b nebo v z\u00e1vislosti na \u00fakolu, pro kter\u00fd byl tento opera\u010dn\u00ed syst\u00e9m navr\u017een.<\/p>\n<h3>Virtualizace CPU<\/h3>\n<p>\nPod\u00edvejme se na n\u00e1sleduj\u00edc\u00ed program:<br \/>\n(https:\/\/www.youtube.com\/watch?v=zDwT5fUcki4&amp;feature=youtu.be)<\/p>\n<p> <img decoding=\"async\" alt=\"Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad)\" src=\"\/wp-content\/uploads\/2019\/04\/1f353e582b857fc71231472ec4f55319.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNed\u011bl\u00e1 nic zvl\u00e1\u0161tn\u00edho, v podstat\u011b pouze vol\u00e1 funkci <b>spin<\/b>(), jej\u00edm\u017e \u00fakolem je cyklick\u00e9 kontrolov\u00e1n\u00ed \u010dasu a n\u00e1vrat pot\u00e9, co uplynula jedna sekunda. Takto nekone\u010dn\u011b opakuje \u0159et\u011bzec, kter\u00fd u\u017eivatel p\u0159edal jako argument.<br \/>\nSpust\u00edme tento program a p\u0159ed\u00e1me mu argumentem znak \u201eA\u201c. V\u00fdsledek nen\u00ed p\u0159\u00edli\u0161 zaj\u00edmav\u00fd \u2014 syst\u00e9m prost\u011b vykon\u00e1v\u00e1 program, kter\u00fd periodicky na obrazovku vypisuje znak \u201eA\u201c.<br \/>\nNyn\u00ed vyzkou\u0161\u00edme variantu, kdy je spu\u0161t\u011bno n\u011bkolik instanc\u00ed stejn\u00e9ho programu, ale vypisuj\u00edc\u00edch r\u016fzn\u00e9 p\u00edsmena, aby bylo jasn\u011bji. V tomto p\u0159\u00edpad\u011b bude v\u00fdsledek pon\u011bkud odli\u0161n\u00fd. P\u0159esto\u017ee m\u00e1me pouze jeden procesor, program se vykon\u00e1v\u00e1 sou\u010dasn\u011b. Jak je to mo\u017en\u00e9? Je to tak, \u017ee opera\u010dn\u00ed syst\u00e9m, s pomoc\u00ed schopnost\u00ed hardwaru, vytv\u00e1\u0159\u00ed iluzi. Iluzi, \u017ee v syst\u00e9mu existuje n\u011bkolik virtu\u00e1ln\u00edch procesor\u016f, p\u0159em\u011b\u0148uj\u00edc\u00ed jeden fyzick\u00fd procesor na teoreticky nekone\u010dn\u00e9 mno\u017estv\u00ed a t\u00edm umo\u017e\u0148uj\u00edc\u00ed program\u016fm vypadat, jako by se vykon\u00e1valy sou\u010dasn\u011b. Takov\u00e1 iluze se naz\u00fdv\u00e1 <i>Virtualizace CPU<\/i>.<br \/>\n Takov\u00fd obr\u00e1zek vyvol\u00e1v\u00e1 mnoho ot\u00e1zek, nap\u0159\u00edklad pokud si p\u0159ej\u00ed spustit n\u011bkolik program\u016f sou\u010dasn\u011b, kter\u00fd z nich bude spu\u0161t\u011bn? Na tuto ot\u00e1zku odpov\u00eddaj\u00ed \u201epolitiky\u201c opera\u010dn\u00edho syst\u00e9mu. Politiky se vyu\u017e\u00edvaj\u00ed na mnoha m\u00edstech OS a odpov\u00eddaj\u00ed na podobn\u00e9 ot\u00e1zky, a tak\u00e9 tvo\u0159\u00ed z\u00e1kladn\u00ed mechanismy, kter\u00e9 OS realizuje. Odtud plyne i role OS jako spr\u00e1vce prost\u0159edk\u016f.<\/p>\n<h3>Virtualizace pam\u011bti<\/h3>\n<p>\n Nyn\u00ed se pod\u00edvejme na pam\u011b\u0165. <b>Fyzick\u00fd model pam\u011bti v modern\u00edch syst\u00e9mech se p\u0159edstavuje jako pole byt\u016f<\/b>. Pro \u010dten\u00ed z pam\u011bti je pot\u0159eba uv\u00e9st <b>adresu bu\u0148ky<\/b>, aby bylo mo\u017en\u00e9 k n\u00ed p\u0159istupovat. Pro zaps\u00e1n\u00ed nebo aktualizaci dat je tak\u00e9 pot\u0159eba uv\u00e9st data a adresu bu\u0148ky, kam je zapisovat.<br \/>\n P\u0159\u00edstupy do pam\u011bti prob\u00edhaj\u00ed neust\u00e1le b\u011bhem provozu programu. Program uchov\u00e1v\u00e1 v pam\u011bti celou svou strukturu dat a p\u0159istupuje k n\u00ed, prov\u00e1d\u011bj\u00edc r\u016fzn\u00e9 instrukce. Instrukce, jak se ukazuje, jsou tak\u00e9 uchov\u00e1ny v pam\u011bti, proto k n\u00ed doch\u00e1z\u00ed p\u0159i ka\u017ed\u00e9m po\u017eadavku na n\u00e1sleduj\u00edc\u00ed instrukci.<\/p>\n<h4>Vol\u00e1n\u00ed malloc()<\/h4>\n<p>Pod\u00edv\u00e1me se na n\u00e1sleduj\u00edc\u00ed program, kter\u00fd alokuje oblast pam\u011bti pomoc\u00ed vol\u00e1n\u00ed <b>malloc()<\/b> (https:\/\/youtu.be\/jnlKRnoT1m0):<\/p>\n<p><img decoding=\"async\" alt=\"Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad)\" src=\"\/wp-content\/uploads\/2019\/04\/00b285e1999c2b010c84e712a3ac3087.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProgram prov\u00e1d\u00ed n\u011bkolik \u00fakon\u016f. Nejprve alokuje ur\u010dit\u00e9 mno\u017estv\u00ed pam\u011bti (\u0159\u00e1dek 7), pot\u00e9 vypisuje adresu alokovan\u00e9 bu\u0148ky (\u0159\u00e1dek 9) a zap\u00ed\u0161e nulu do prvn\u00ed slotu alokovan\u00e9 pam\u011bti. D\u00e1le program vstupuje do cyklu, ve kter\u00e9m inkrementuje hodnotu zapsanou v pam\u011bti na adrese ve prom\u011bnn\u00e9 \"p\". Tak\u00e9 vypisuje identifik\u00e1tor sv\u00e9ho vlastn\u00edho procesu. <b>Identifik\u00e1tor procesu je unik\u00e1tn\u00ed pro ka\u017ed\u00fd spu\u0161t\u011bn\u00fd proces<\/b>. Kdy\u017e spust\u00edme n\u011bkolik kopi\u00ed, naraz\u00edme na zaj\u00edmav\u00fd v\u00fdsledek: V prvn\u00ed \u0159ad\u011b, pokud nic neud\u011bl\u00e1me a jednodu\u0161e spust\u00edme n\u011bkolik kopi\u00ed, adresy budou r\u016fzn\u00e9. Ale to neodpov\u00edd\u00e1 na\u0161\u00ed teorii! Spr\u00e1vn\u011b, proto\u017ee v modern\u00edch distribuc\u00edch je zapnuta funkce randomizace pam\u011bti. Pokud ji vypneme, z\u00edsk\u00e1me o\u010dek\u00e1van\u00fd v\u00fdsledek \u2014 adresy pam\u011bti dvou sou\u010dasn\u011b b\u011b\u017e\u00edc\u00edch program\u016f se budou shodovat. <\/p>\n<p><img decoding=\"async\" alt=\"Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad)\" src=\"\/wp-content\/uploads\/2019\/04\/882fe00a72deadac12f146bc8d15b024.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Nakonec dostaneme to, \u017ee dv\u011b nez\u00e1visl\u00e9 programy pracuj\u00ed se sv\u00fdmi vlastn\u00edmi priv\u00e1tn\u00edmi adresn\u00edmi prostory, kter\u00e9 jsou na druhou stranu mapov\u00e1ny opera\u010dn\u00edm syst\u00e9mem do fyzick\u00e9 pam\u011bti<\/b>. Proto pou\u017eit\u00ed adres pam\u011bti v r\u00e1mci jednoho programu nijak neovliv\u0148uje ostatn\u00ed a ka\u017ed\u00e9mu programu se zd\u00e1, \u017ee m\u00e1 sv\u016fj vlastn\u00ed kus fyzick\u00e9 pam\u011bti, zcela p\u0159id\u011blen\u00fd k jeho dispozici. Realita v\u0161ak je takov\u00e1, \u017ee fyzick\u00e1 pam\u011b\u0165 je sd\u00edlen\u00fd zdroj, jeho\u017e spr\u00e1vu prov\u00e1d\u00ed opera\u010dn\u00ed syst\u00e9m.<\/p>\n<h3>Konzistence<\/h3>\n<p>\nDal\u0161\u00edm d\u016fle\u017eit\u00fdm t\u00e9matem v r\u00e1mci opera\u010dn\u00edch syst\u00e9m\u016f je <b>konzistence<\/b>. Tento term\u00edn se pou\u017e\u00edv\u00e1, kdy\u017e se jedn\u00e1 o probl\u00e9my v syst\u00e9mu, kter\u00e9 mohou vzniknout p\u0159i pr\u00e1ci s mnoha v\u011bcmi najednou v r\u00e1mci jednoho programu. Probl\u00e9my konzistence se vyskytuj\u00ed i v samotn\u00e9m opera\u010dn\u00edm syst\u00e9mu. V p\u0159edchoz\u00edch p\u0159\u00edkladech s virtualizac\u00ed pam\u011bti a procesoru jsme pochopili, \u017ee OS spravuje mnoho v\u011bc\u00ed z\u00e1rove\u0148 \u2014 spou\u0161t\u00ed prvn\u00ed proces, pot\u00e9 druh\u00fd a tak d\u00e1le. Jak se uk\u00e1zalo, takov\u00e9 chov\u00e1n\u00ed m\u016f\u017ee v\u00e9st k ur\u010dit\u00fdm probl\u00e9m\u016fm. Nap\u0159\u00edklad modern\u00ed v\u00edc\u00edtkov\u00e1 (multithreaded) programy za\u017e\u00edvaj\u00ed takov\u00e9 pot\u00ed\u017ee.<\/p>\n<p>Pod\u00edvejme se na n\u00e1sleduj\u00edc\u00ed program:<\/p>\n<p> <img decoding=\"async\" alt=\"Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad)\" src=\"\/wp-content\/uploads\/2019\/04\/091af38bd53fb94e65afa6c57b08f012.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProgram ve funkci main vytv\u00e1\u0159\u00ed dva vl\u00e1kna pomoc\u00ed vol\u00e1n\u00ed <b>Pthread_create()<\/b>. V tomto p\u0159\u00edkladu lze na vl\u00e1kno pohl\u00ed\u017eet jako na funkci spu\u0161t\u011bnou ve stejn\u00e9m pam\u011b\u0165ov\u00e9m prostoru vedle dal\u0161\u00edch funkc\u00ed, p\u0159i\u010dem\u017e po\u010det sou\u010dasn\u011b spu\u0161t\u011bn\u00fdch funkc\u00ed je jasn\u011b v\u011bt\u0161\u00ed ne\u017e jedna. V tomto p\u0159\u00edkladu ka\u017ed\u00e9 vl\u00e1kno za\u010d\u00edn\u00e1 a prov\u00e1d\u00ed funkci <b>worker(), kter\u00e1 na opl\u00e1tku pouze inkrementuje prom\u011bnnou<\/b>,.<\/p>\n<p>. Spust\u00edme tuto aplikaci s argumentem 1000. Jak u\u017e asi tu\u0161\u00edte, v\u00fdsledkem by m\u011blo b\u00fdt 2000, proto\u017ee ka\u017ed\u00e9 vl\u00e1kno inkrementovalo prom\u011bnnou 1000kr\u00e1t. Ale v\u0161echno nen\u00ed tak jednoduch\u00e9. Zkus\u00edme spustit aplikaci s \u010d\u00edslem opakov\u00e1n\u00ed o \u0159\u00e1d v\u00edce.<\/p>\n<p><img decoding=\"async\" alt=\"Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad)\" src=\"\/wp-content\/uploads\/2019\/04\/a6a3e63f9ab94793ffde67342c5a19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKdy\u017e zad\u00e1me \u010d\u00edslo, nap\u0159\u00edklad 100000, o\u010dek\u00e1v\u00e1me, \u017ee na v\u00fdstupu uvid\u00edme \u010d\u00edslo 200000. Nicm\u00e9n\u011b, kdy\u017e spust\u00edme \u010d\u00edslo 100000 n\u011bkolikr\u00e1t, nejen\u017ee neuvid\u00edme spr\u00e1vnou odpov\u011b\u010f, ale dostaneme i r\u016fzn\u00e9 nespr\u00e1vn\u00e9 odpov\u011bdi. Rozlu\u0161t\u011bn\u00ed spo\u010d\u00edv\u00e1 v tom, \u017ee pro zv\u00fd\u0161en\u00ed \u010d\u00edsla jsou pot\u0159eba t\u0159i operace \u2014 na\u010dten\u00ed \u010d\u00edsla z pam\u011bti, inkrementace a n\u00e1sledn\u00e9 zaps\u00e1n\u00ed \u010d\u00edsla zp\u011bt. Proto\u017ee v\u0161echny tyto instrukce nejsou prov\u00e1d\u011bny atom\u00e1rn\u011b (v\u0161e najednou), mohou nast\u00e1vat takov\u00e9 podivn\u00e9 v\u011bci. Tento probl\u00e9m se v programov\u00e1n\u00ed naz\u00fdv\u00e1 <b>race condition \u2014 stav z\u00e1vodu<\/b>. Kdy nezn\u00e1m\u00e9 s\u00edly v nezn\u00e1m\u00e9m okam\u017eiku mohou ovlivnit prov\u00e1d\u011bn\u00ed jak\u00fdchkoliv va\u0161ich operac\u00ed.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446340\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u043d\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22702,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30717","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 1: Intro (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:37:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:05+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Opera\u010dn\u00ed syst\u00e9my: T\u0159i snadn\u00e9 kousky. \u010c\u00e1st 1: \u00davod (p\u0159eklad) | ProHoster","description":"\u00davod do opera\u010dn\u00edch syst\u00e9m\u016f Ahoj, Habr! Cht\u011bl bych v\u00e1m p\u0159edstavit s\u00e9rii \u010dl\u00e1nk\u016f-p\u0159eklad\u016f jedn\u00e9 zaj\u00edmav\u00e9 literatury, kter\u00e1 se mi podle m\u00e9ho n\u00e1zoru l\u00edb\u00ed \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 1: Intro (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:37:05+00:00","article:modified_time":"2019-10-31T18:37:05+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30717","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 02:38:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:30:51","updated":"2026-01-21 02:38:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/30717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=30717"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/30717\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/22702"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=30717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=30717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=30717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}