{"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\/hu\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod","title":{"rendered":"Oper\u00e1ci\u00f3s rendszerek: H\u00e1rom k\u00f6nny\u0171 r\u00e9sz. 1. r\u00e9sz: Bevezet\u00e9s (ford\u00edt\u00e1s)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Bevezet\u00e9s az oper\u00e1ci\u00f3s rendszerekbe<\/h1>\n<p>Hell\u00f3, Habr! Szeretn\u00e9m bemutatni figyelmedbe egy \u00e9rdekes irodalmi sorozat ford\u00edt\u00e1s\u00e1t \u2014 OSTEP. Az anyagban m\u00e9lyebben megvizsg\u00e1ljuk az unix-szer\u0171 oper\u00e1ci\u00f3s rendszerek m\u0171k\u00f6d\u00e9s\u00e9t, k\u00fcl\u00f6n\u00f6s figyelmet szentelve a folyamatoknak, k\u00fcl\u00f6nb\u00f6z\u0151 \u00fctemez\u0151knek, mem\u00f3ri\u00e1nak, \u00e9s m\u00e1s hasonl\u00f3 \u00f6sszetev\u0151knek, amelyek modern oper\u00e1ci\u00f3s rendszert alkotnak. Az \u00f6sszes anyag eredeti forr\u00e1s\u00e1t itt tal\u00e1lod: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">itt<\/a><\/noindex>. K\u00e9rlek vegy\u00e9tek figyelembe, hogy a ford\u00edt\u00e1s szak\u00e9rtelem n\u00e9lk\u00fcli (el\u00e9g szabad), de rem\u00e9lem, az \u00e1ltal\u00e1nos \u00e9rtelemben megmaradt.<\/p>\n<p>A tant\u00e1rgyhoz kapcsol\u00f3d\u00f3 laborat\u00f3riumi munk\u00e1k itt tal\u00e1lhat\u00f3k:<br \/>\n \u2014 eredeti: <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 eredeti: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><br \/>\n \u2014 a szem\u00e9lyes adapt\u00e1ci\u00f3m: <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>Emellett l\u00e1togathattok el a csatorn\u00e1mra a <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">telegramon<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>A program m\u0171k\u00f6d\u00e9se<\/h3>\n<p>\nMi t\u00f6rt\u00e9nik, amikor egy program fut? A futtatott program egy egyszer\u0171 feladatot v\u00e9gez \u2014 v\u00e9grehajtja az utas\u00edt\u00e1sokat. M\u00e1sodpercr\u0151l m\u00e1sodpercre milli\u00f3k, s\u0151t, tal\u00e1n milli\u00e1rdok utas\u00edt\u00e1st von le a processzor a mem\u00f3ri\u00e1b\u00f3l, amelyt\u0151l dek\u00f3dolja \u0151ket (p\u00e9ld\u00e1ul felismeri, hogy milyen t\u00edpus\u00fa utas\u00edt\u00e1sokkal \u00e1ll szemben) \u00e9s v\u00e9grehajtja \u0151ket. Ezek lehetnek k\u00e9t sz\u00e1m \u00f6sszead\u00e1sa, mem\u00f3riahozz\u00e1f\u00e9r\u00e9s, egy felt\u00e9tel ellen\u0151rz\u00e9se, egy funkci\u00f3hoz val\u00f3 ugr\u00e1s stb. Az utas\u00edt\u00e1s v\u00e9grehajt\u00e1s\u00e1nak befejez\u00e9se ut\u00e1n a processzor a k\u00f6vetkez\u0151 utas\u00edt\u00e1sra l\u00e9p. \u00cdgy utas\u00edt\u00e1sr\u00f3l utas\u00edt\u00e1sra, ezek folytat\u00f3dnak, am\u00edg a program be nem fejez\u0151dik.<br \/>\nEz a p\u00e9lda term\u00e9szetesen leegyszer\u0171s\u00edtett \u2014 a val\u00f3s\u00e1gban a modern hardver lehet\u0151v\u00e9 teszi, hogy a processzor rendel\u00e9s n\u00e9lk\u00fcl hajtsa v\u00e9gre az utas\u00edt\u00e1sokat, el\u0151re sz\u00e1molja a lehets\u00e9ges eredm\u00e9nyeket, \u00e9s p\u00e1rhuzamosan hajtja v\u00e9gre az utas\u00edt\u00e1sokat, \u00e9s ehhez hasonl\u00f3 tr\u00fckk\u00f6ket alkalmaz.<\/p>\n<h3>Von Neumann-modell<\/h3>\n<p>\nAkkor az \u00e1ltalunk le\u00edrt leegyszer\u0171s\u00edtett forma hasonl\u00edt a Von Neumann-modellre. <i>Von Neumann a sz\u00e1m\u00edt\u00f3g\u00e9pes rendszerek egyik \u00fatt\u00f6r\u0151je, egyben a j\u00e1t\u00e9kelm\u00e9let egyik szerz\u0151je is.<\/i>A program fut\u00e1sa alatt sz\u00e1mos m\u00e1s esem\u00e9ny is zajlik, sok m\u00e1s folyamat \u00e9s k\u00fcls\u0151 logika m\u0171k\u00f6dik, amelyek f\u0151 c\u00e9lja a rendszer ind\u00edt\u00e1s\u00e1nak, m\u0171k\u00f6d\u00e9s\u00e9nek \u00e9s karbantart\u00e1s\u00e1nak egyszer\u0171s\u00edt\u00e9se.<br \/>\nVan egy szoftvercsomag, amely felel\u0151s a programok egyszer\u0171 ind\u00edt\u00e1s\u00e1\u00e9rt (s\u0151t, lehet\u0151v\u00e9 teszi t\u00f6bb program egyidej\u0171 futtat\u00e1s\u00e1t is), \u00e9s lehet\u0151v\u00e9 teszi a programok sz\u00e1m\u00e1ra, hogy megossz\u00e1k ugyanazt a mem\u00f3ri\u00e1t, valamint interakci\u00f3ba l\u00e9pjenek a k\u00fcl\u00f6nb\u00f6z\u0151 eszk\u00f6z\u00f6kkel. Ezt a szoftvercsomagot alapvet\u0151en oper\u00e1ci\u00f3s rendszernek nevezik, \u00e9s feladatai k\u00f6z\u00e9 tartozik annak nyomon k\u00f6vet\u00e9se, hogy a rendszer megfelel\u0151en \u00e9s hat\u00e9konyan m\u0171k\u00f6dj\u00f6n, valamint a rendszer kezel\u00e9s\u00e9nek egyszer\u0171s\u00edt\u00e9se. <\/p>\n<h2>Oper\u00e1ci\u00f3s rendszer<\/h2>\n<p>\n<b>Az oper\u00e1ci\u00f3s rendszer, r\u00f6viden OS \u2014 egy egym\u00e1ssal \u00f6sszef\u00fcgg\u0151 programk\u00e9szlet, amely a sz\u00e1m\u00edt\u00f3g\u00e9p er\u0151forr\u00e1sainak kezel\u00e9s\u00e9re \u00e9s a felhaszn\u00e1l\u00f3 sz\u00e1m\u00edt\u00f3g\u00e9ppel val\u00f3 interakci\u00f3j\u00e1nak megszervez\u00e9s\u00e9re szolg\u00e1l.<\/b>. <br \/>\nAz oper\u00e1ci\u00f3s rendszer hat\u00e9konys\u00e1g\u00e1t els\u0151sorban a legfontosabb technik\u00e1n kereszt\u00fcl \u00e9ri el \u2014 a <b>virtualiz\u00e1ci\u00f3n<\/b>. Az oper\u00e1ci\u00f3s rendszer interakci\u00f3t folytat a fizikai er\u0151forr\u00e1sokkal (processzor, mem\u00f3ria, lemez \u00e9s hasonl\u00f3k) \u00e9s \u00e1talak\u00edtja azokat egy \u00e1ltal\u00e1nosabb, nagyobb k\u00e9pess\u00e9gekkel b\u00edr\u00f3, egyszer\u0171bben haszn\u00e1lhat\u00f3 form\u00e1ba. Ez\u00e9rt az oper\u00e1ci\u00f3s rendszer az \u00e1ltal\u00e1nos meg\u00e9rt\u00e9s \u00e9rdek\u00e9ben nagyon durv\u00e1n \u00f6sszehasonl\u00edthat\u00f3 egy virtu\u00e1lis g\u00e9ppel.<br \/>\nAhhoz, hogy lehet\u0151v\u00e9 tegye a felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1ra, hogy parancsokat adjanak az oper\u00e1ci\u00f3s rendszernek, \u00edgy kihaszn\u00e1lva a virtu\u00e1lis g\u00e9p lehet\u0151s\u00e9geit (mint p\u00e9ld\u00e1ul program ind\u00edt\u00e1sa, mem\u00f3ria allok\u00e1l\u00e1sa, f\u00e1jl el\u00e9r\u00e9se stb.), az oper\u00e1ci\u00f3s rendszer biztos\u00edt egy interf\u00e9szt, amelyet <b>API<\/b> (alkalmaz\u00e1sprogramoz\u00e1si interf\u00e9sz) n\u00e9ven ismer\u00fcnk, amelyhez h\u00edv\u00e1sokat (call) lehet v\u00e9gezni. Egy tipikus oper\u00e1ci\u00f3s rendszer lehet\u0151v\u00e9 teszi, hogy t\u00f6bb sz\u00e1z rendszerh\u00edv\u00e1st lehessen v\u00e9grehajtani.<br \/>\nV\u00e9g\u00fcl, mivel a virtualiz\u00e1ci\u00f3 lehet\u0151v\u00e9 teszi, hogy sz\u00e1mos program egy\u00fcttm\u0171k\u00f6dj\u00f6n (\u00edgy k\u00f6z\u00f6sen haszn\u00e1lva a CPU-t), \u00e9s egyidej\u0171leg hozz\u00e1f\u00e9rjenek utas\u00edt\u00e1saikhoz \u00e9s adataikhoz (ez\u00e1ltal megosztva a mem\u00f3ri\u00e1t), valamint hozz\u00e1f\u00e9rjenek a lemezekhez (\u00edgy k\u00f6z\u00f6sen haszn\u00e1lva a bemeneti\/kimeneti eszk\u00f6z\u00f6ket), az oper\u00e1ci\u00f3s rendszert er\u0151forr\u00e1skezel\u0151nek is nevezik. Minden processzor, lemez \u00e9s mem\u00f3ria a rendszer er\u0151forr\u00e1sa, ez\u00e9rt az oper\u00e1ci\u00f3s rendszer egyik feladata az, hogy hat\u00e9konyan kezelje ezeket az er\u0151forr\u00e1sokat, igazs\u00e1gosan vagy \u00e9ppen ellenkez\u0151leg, att\u00f3l f\u00fcgg\u0151en, hogy milyen feladatra tervezt\u00e9k azt az oper\u00e1ci\u00f3s rendszert.<\/p>\n<h3>CPU virtualiz\u00e1ci\u00f3<\/h3>\n<p>\nN\u00e9zz\u00fck meg a k\u00f6vetkez\u0151 programot:<br \/>\n(https:\/\/www.youtube.com\/watch?v=zDwT5fUcki4&amp;feature=youtu.be)<\/p>\n<p> <img decoding=\"async\" alt=\"Oper\u00e1ci\u00f3s rendszerek: H\u00e1rom k\u00f6nny\u0171 r\u00e9sz. 1. r\u00e9sz: Bevezet\u00e9s (ford\u00edt\u00e1s)\" src=\"\/wp-content\/uploads\/2019\/04\/1f353e582b857fc71231472ec4f55319.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz nem hajt v\u00e9gre k\u00fcl\u00f6nleges m\u0171veleteket, l\u00e9nyeg\u00e9ben mind\u00f6ssze annyit tesz, hogy megh\u00edvja a <b>spin<\/b>() f\u00fcggv\u00e9nyt, amely feladatk\u00e9nt ciklikusan ellen\u0151rzi az id\u0151t, \u00e9s visszat\u00e9r, miut\u00e1n eltelt egy m\u00e1sodperc. \u00cdgy v\u00e9gtelen\u00fcl ism\u00e9tli azt a sort, amit a felhaszn\u00e1l\u00f3 \u00e1tadott argumentumk\u00e9nt.<br \/>\nFuttassuk ezt a programot, \u00e9s adjuk \u00e1t neki az \u201eA\u201d karaktert argumentumk\u00e9nt. Az eredm\u00e9ny nem t\u00fal \u00e9rdekes \u2014 a rendszer egyszer\u0171en v\u00e9grehajtja a programot, amely id\u0151nk\u00e9nt megjelen\u00edti az \u201eA\u201d karaktert a k\u00e9perny\u0151n.<br \/>\nMost pr\u00f3b\u00e1ljuk meg azt a vari\u00e1ci\u00f3t, amikor t\u00f6bb p\u00e9ld\u00e1nyt futtatunk ugyanabb\u00f3l a programb\u00f3l, de k\u00fcl\u00f6nb\u00f6z\u0151 bet\u0171ket jelen\u00edtenek meg, hogy jobban \u00e9rthet\u0151 legyen. Ez esetben az eredm\u00e9ny valamivel m\u00e1s lesz. Annak ellen\u00e9re, hogy egy processzorunk van, a program egyidej\u0171leg fut. Hogy lehet ez? Az oper\u00e1ci\u00f3s rendszer, a hardver lehet\u0151s\u00e9geinek seg\u00edts\u00e9g\u00e9vel, ill\u00fazi\u00f3t teremt. Az ill\u00fazi\u00f3t, hogy a rendszerben t\u00f6bb virtu\u00e1lis processzor l\u00e9tezik, egyetlen fizikai processzort elm\u00e9letileg v\u00e9gtelen mennyis\u00e9gre v\u00e1ltoztatva, \u00e9s \u00edgy lehet\u0151v\u00e9 t\u00e9ve, hogy a programok l\u00e1tsz\u00f3lag egyidej\u0171leg fussanak. Ezt az ill\u00fazi\u00f3t h\u00edvjuk <i>CPU virtualiz\u00e1ci\u00f3nak.<\/i>.<br \/>\n Az ilyen k\u00e9p sz\u00e1mos k\u00e9rd\u00e9st vet fel, p\u00e9ld\u00e1ul, ha t\u00f6bb program szeretne egyidej\u0171leg elindulni, akkor melyik fog elindulni? E k\u00e9rd\u00e9sre az oper\u00e1ci\u00f3s rendszer \u201epolitik\u00e1i\u201d adnak v\u00e1laszt. A politik\u00e1k sok helyen tal\u00e1lhat\u00f3k az oper\u00e1ci\u00f3s rendszerben, \u00e9s hasonl\u00f3 k\u00e9rd\u00e9sekre v\u00e1laszolnak, valamint alapvet\u0151 mechanizmusok, amelyeket az oper\u00e1ci\u00f3s rendszer megval\u00f3s\u00edt. Innen ad\u00f3dik az oper\u00e1ci\u00f3s rendszer szerepe, mint er\u0151forr\u00e1s-kezel\u0151\u00e9.<\/p>\n<h3>Mem\u00f3ria virtualiz\u00e1ci\u00f3<\/h3>\n<p>\n Most n\u00e9zz\u00fck meg a mem\u00f3ri\u00e1t. <b>A modern rendszerek fizikai mem\u00f3ria modellje b\u00e1jtok t\u00f6mbjek\u00e9nt jelenik meg.<\/b>Az olvas\u00e1shoz a mem\u00f3ri\u00e1b\u00f3l meg kell adni <b>az el\u00e9r\u00e9si c\u00edmet<\/b>, hogy hozz\u00e1f\u00e9rj\u00fcnk. Az adatok \u00edr\u00e1s\u00e1hoz vagy friss\u00edt\u00e9s\u00e9hez szint\u00e9n meg kell adni az adatokat \u00e9s azt a cella c\u00edm\u00e9t, ahov\u00e1 ezeket \u00edrni kell.<br \/>\n A mem\u00f3riahoz val\u00f3 hozz\u00e1f\u00e9r\u00e9s folyamatosan megt\u00f6rt\u00e9nik a program fut\u00e1sa sor\u00e1n. A program t\u00e1rolja a mem\u00f3ria \u00f6sszes adatstrukt\u00far\u00e1j\u00e1t, \u00e9s azt v\u00e9grehajtva hivatkozik r\u00e1 k\u00fcl\u00f6nb\u00f6z\u0151 utas\u00edt\u00e1sokkal. Az utas\u00edt\u00e1sok szint\u00e9n a mem\u00f3ri\u00e1ban vannak t\u00e1rolva, \u00edgy a mem\u00f3ria el\u00e9r\u00e9se minden k\u00f6vetkez\u0151 utas\u00edt\u00e1s k\u00e9r\u00e9sekor megt\u00f6rt\u00e9nik.<\/p>\n<h4>A malloc() h\u00edv\u00e1sa<\/h4>\n<p>Tekints\u00fck \u00e1t a k\u00f6vetkez\u0151 programot, amely mem\u00f3ria ter\u00fcletet foglal, egy h\u00edv\u00e1s seg\u00edts\u00e9g\u00e9vel <b>malloc()<\/b> (https:\/\/youtu.be\/jnlKRnoT1m0):<\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1ci\u00f3s rendszerek: H\u00e1rom k\u00f6nny\u0171 r\u00e9sz. 1. r\u00e9sz: Bevezet\u00e9s (ford\u00edt\u00e1s)\" src=\"\/wp-content\/uploads\/2019\/04\/00b285e1999c2b010c84e712a3ac3087.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA program t\u00f6bb dolgot v\u00e9gez. El\u0151sz\u00f6r is, foglal egy bizonyos mennyis\u00e9g\u0171 mem\u00f3ri\u00e1t (7. sor), majd ki\u00edrja az lefoglalt cella c\u00edm\u00e9t (9. sor), \u00e9s null\u00e1t \u00edr az lefoglalt mem\u00f3ria els\u0151 hely\u00e9re. Ezut\u00e1n a program bel\u00e9p egy ciklusba, amelyben n\u00f6veli az \u00e9rt\u00e9ket, amely a \u201ep\u201d v\u00e1ltoz\u00f3 c\u00edm\u00e9n tal\u00e1lhat\u00f3 mem\u00f3ri\u00e1ban van. Ezenk\u00edv\u00fcl ki\u00edrja a saj\u00e1t folyamata azonos\u00edt\u00f3j\u00e1t is. <b>A folyamat azonos\u00edt\u00f3 egyedi minden fut\u00f3 folyamat sz\u00e1m\u00e1ra<\/b>. Ha t\u00f6bb p\u00e9ld\u00e1nyt ind\u00edtunk, \u00e9rdekes eredm\u00e9nyre bukkanunk: az els\u0151 esetben, ha nem csin\u00e1lunk semmit \u00e9s egyszer\u0171en elind\u00edtunk t\u00f6bb p\u00e9ld\u00e1nyt, a c\u00edmek k\u00fcl\u00f6nb\u00f6zni fognak. De ez nem illeszkedik a mi elm\u00e9let\u00fcnkh\u00f6z! Igaz, mivel a modern disztrib\u00faci\u00f3k alap\u00e9rtelmezett be\u00e1ll\u00edt\u00e1sa a mem\u00f3ria v\u00e9letlenszer\u0171s\u00edt\u00e9se. Ha ezt kikapcsoljuk, megkapjuk a v\u00e1rt eredm\u00e9nyt - a k\u00e9t egyidej\u0171leg fut\u00f3 program mem\u00f3riac\u00edmei egyezni fognak. <\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1ci\u00f3s rendszerek: H\u00e1rom k\u00f6nny\u0171 r\u00e9sz. 1. r\u00e9sz: Bevezet\u00e9s (ford\u00edt\u00e1s)\" src=\"\/wp-content\/uploads\/2019\/04\/882fe00a72deadac12f146bc8d15b024.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>V\u00e9g\u00fcl teh\u00e1t kider\u00fcl, hogy k\u00e9t f\u00fcggetlen program a saj\u00e1t priv\u00e1t c\u00edmter\u00e9nek haszn\u00e1lat\u00e1val dolgozik, amelyek viszont az oper\u00e1ci\u00f3s rendszer \u00e1ltal a fizikai mem\u00f3ri\u00e1ra t\u00e9rk\u00e9pez\u0151dnek<\/b>. Ez\u00e9rt a mem\u00f3ria c\u00edmek haszn\u00e1lata egyetlen programon bel\u00fcl nem befoly\u00e1solja a m\u00e1sikat, \u00e9s minden program \u00fagy \u00e9rzi, hogy rendelkezik egy saj\u00e1t fizik\u00e1lis mem\u00f3ria r\u00e9szecsk\u00e9j\u00e9vel, amely teljes eg\u00e9sz\u00e9ben az \u0151 rendelkez\u00e9s\u00e9re \u00e1ll. A val\u00f3s\u00e1g azonban az, hogy a fizikai mem\u00f3ria egy megosztott er\u0151forr\u00e1s, amelynek kezel\u00e9s\u00e9t az oper\u00e1ci\u00f3s rendszer v\u00e9gzi.<\/p>\n<h3>K\u00f6vetkezetess\u00e9g<\/h3>\n<p>\nAz oper\u00e1ci\u00f3s rendszerek egyik fontos t\u00e9m\u00e1ja <b>a k\u00f6vetkezetess\u00e9g<\/b>. Ezt a kifejez\u00e9st akkor haszn\u00e1lj\u00e1k, amikor olyan probl\u00e9m\u00e1kr\u00f3l van sz\u00f3 a rendszerben, amelyek a programon bel\u00fcli t\u00f6bb dolog egyidej\u0171 v\u00e9grehajt\u00e1sakor l\u00e9phetnek fel. A k\u00f6vetkezetess\u00e9gi probl\u00e9m\u00e1k m\u00e9g az oper\u00e1ci\u00f3s rendszeren bel\u00fcl is felmer\u00fclnek. Az el\u0151z\u0151 p\u00e9ld\u00e1kban a mem\u00f3ria \u00e9s a processzor virtualiz\u00e1l\u00e1s\u00e1val kapcsolatosan meg\u00e9rtett\u00fck, hogy az OS sok dolgot kezel egyidej\u0171leg - el\u0151sz\u00f6r elind\u00edt egy folyamatot, majd a m\u00e1sodikat, \u00e9s \u00edgy tov\u00e1bb. Kider\u00fclt, hogy ez a viselked\u00e9s n\u00e9h\u00e1ny probl\u00e9m\u00e1t okozhat. P\u00e9ld\u00e1ul a modern t\u00f6bbsz\u00e1l\u00fa programok szembes\u00fclnek ilyen neh\u00e9zs\u00e9gekkel.<\/p>\n<p>N\u00e9zz\u00fck meg a k\u00f6vetkez\u0151 programot:<\/p>\n<p> <img decoding=\"async\" alt=\"Oper\u00e1ci\u00f3s rendszerek: H\u00e1rom k\u00f6nny\u0171 r\u00e9sz. 1. r\u00e9sz: Bevezet\u00e9s (ford\u00edt\u00e1s)\" src=\"\/wp-content\/uploads\/2019\/04\/091af38bd53fb94e65afa6c57b08f012.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA program in the main function creates two threads using the call <b>Pthread_create()<\/b>. In this example, a thread can be thought of as a function running in the same memory space alongside other functions, with the number of concurrently running functions being clearly more than one. In this example, each thread starts and executes the function <b>worker(), which simply increments a variable<\/b>,.<\/p>\n<p>. We will run this program with the argument 1000. As you might have guessed, the result should be 2000 since each thread increments the variable 1000 times. However, it's not that simple. Let's try running the program with a much larger number of repetitions.<\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1ci\u00f3s rendszerek: H\u00e1rom k\u00f6nny\u0171 r\u00e9sz. 1. r\u00e9sz: Bevezet\u00e9s (ford\u00edt\u00e1s)\" src=\"\/wp-content\/uploads\/2019\/04\/a6a3e63f9ab94793ffde67342c5a19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBy inputting a number, for example, 100000, we expect to see the output number 200000. However, when running the number 100000 several times, we not only won\u2019t see the correct answer, but we will also get different incorrect answers. The clue lies in the fact that three operations are required to increase the number \u2014 fetching the number from memory, incrementing it, and then writing the number back. Since all these instructions do not occur atomically (all at once), such strange things can happen. This problem is called in programming <b>race condition \u2014 versenyhelyzet<\/b>. When unknown forces can influence the execution of any of your operations at an unknown moment.<br \/>\n<br \/>Forr\u00e1s: <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.4 - 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\/hu\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Operating Systems: Three Easy Pieces. Part 1: Intro (translated) | ProHoster","description":"Introduction to Operating Systems Hello, Habr! I want to present to your attention a series of translated articles on some interesting literature, in my opinion \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/30717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=30717"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/30717\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/22702"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=30717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=30717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=30717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}