Кіріспе
Компьютерлік бағдарламаның нақты орындалуы. Есептеуде процесс – бір немесе бірнеше жіптер арқылы орындалатын компьютерлік бағдарламаның бір данасы. Процестердің көптеген түрлі модельдері бар, олардың кейбіреулері жеңіл салмақты, бірақ барлық процестер (тіпті толыққанды виртуалды машиналар да) операциялық жүйенің (ОЖ) процесіне негізделген. ОЖ процесі бағдарламалық кодты, тағайындалған жүйелік ресурстарды, физикалық және логикалық қол жеткізу рұқсаттарын, сондай-ақ орындау қызметін бастау, басқару және үйлестіру үшін қажетті дерек құрылымдарын қамтиды. ОЖ-ге байланысты, процесс бір мезгілде нұсқауларды орындайтын бірнеше орындау жіптерінен тұруы мүмкін. Компьютерлік бағдарлама – дискідегі файлда сақталатын нұсқаулардың пассивті жиынтығы, ал процесс – бұл нұсқаулардың дискіден жадқа жүктелгеннен кейін орындалуы. Бірнеше процесс бір бағдарламамен байланысты болуы мүмкін; мысалы, бір бағдарламаның бірнеше данасын ашу көбінесе бірден көп процестің орындалуына әкеледі. Көп тапсырмалылық – бірнеше процеске процессорларды (CPU) және басқа жүйелік ресурстарды бөлісуге мүмкіндік беретін әдіс. Әрбір CPU (ядро) бір мезгілде бір ғана процесті орындайды. Дегенмен, көп тапсырмалылық әрбір процессорға әр тапсырманың аяқталуын күтудің қажеті болмай, орындалып жатқан тапсырмалар арасында ауысуға мүмкіндік береді (үзіліс). Операциялық жүйенің іске асылуына байланысты, ауысулар тапсырмалар басталғанда және кіріс/шығыс операцияларының аяқталуын күту кезінде, тапсырма өз еркімен CPU-ны босатқанда, аппараттық үзілістерде және операциялық жүйенің жоспарлаушысы процесске берілген CPU уақытының үлесі таусылған деп шешкенде (мысалы, Linux ядросының Толық әділ жоспарлаушысы) жүзеге асырылуы мүмкін. Көп тапсырмалылықтың кең таралған түрі – CPU уақытын бөлісу, ол пайдаланушы процестері мен жіптерінің орындалуын, тіпті тәуелсіз ядро тапсырмаларының орындалуын кезекті түрде жүзеге асыру әдісі, бірақ соңғы мүмкіндік тек Linux сияқты үзіліспен жұмыс істейтін ядроларда ғана мүмкін. Үзіліс интерактивті процестер үшін маңызды қосымша әсерге ие, олар CPU-ға байланысты процестерге қарағанда жоғары басымдыққа ие, сондықтан пайдаланушылар пернеге басу арқылы немесе тышқанды жылжыту арқылы дереу есептеу ресурстарын алады. Сонымен қатар, бейне және музыка ойнату сияқты қолданбаларға басқа төмен басымдықты процестерден бұрын нақты уақыт басымдығы беріледі. Уақытты бөлісу жүйелерінде контексттік ауысулар жылдам орындалады, бұл бір процессорда бірнеше процесс бір мезгілде орындалып жатқандай сезім тудырады. Бірнеше процестің бір мезгілде орындалуы – бірқатарлылық деп аталады. Қауіпсіздік пен сенімділік үшін қазіргі заманғы операциялық жүйелердің көпшілігі тәуелсіз процестер арасында тікелей байланысты болдырмайды, олардың арасындағы байланыс қатаң түрде бақыланады және реттеледі.
In computing, a process is the instance of a computer program that is being executed by one or many threads. There are many different process models, some of which are light weight, but almost all processes (even entire virtual machines) are rooted in an operating system (OS) process which comprises the program code, assigned system resources, physical and logical access permissions, and data structures to initiate, control and coordinate execution activity. Depending on the OS, a process may be made up of multiple threads of execution that execute instructions concurrently. While a computer program is a passive collection of instructions typically stored in a file on disk, a process is the execution of those instructions after being loaded from the disk into memory. Several processes may be associated with the same program; for example, opening up several instances of the same program often results in more than one process being executed. Multitasking is a method to allow multiple processes to share processors (CPUs) and other system resources. Each CPU (core) executes a single process at a time. However, multitasking allows each processor to switch between tasks that are being executed without having to wait for each task to finish (preemption). Depending on the operating system implementation, switches could be performed when tasks initiate and wait for completion of input/output operations, when a task voluntarily yields the CPU, on hardware interrupts, and when the operating system scheduler decides that a process has expired its fair share of CPU time (e. g, by the Completely Fair Scheduler of the Linux kernel). A common form of multitasking is provided by CPU's time sharing that is a method for interleaving the execution of users' processes and threads, and even of independent kernel tasks – although the latter feature is feasible only in preemptive kernels such as Linux. Preemption has an important side effect for interactive processes that are given higher priority with respect to CPU bound processes, therefore users are immediately assigned computing resources at the simple pressing of a key or when moving a mouse. Furthermore, applications like video and music reproduction are given some kind of real time priority, preempting any other lower priority process. In time sharing systems, context switches are performed rapidly, which makes it seem like multiple processes are being executed simultaneously on the same processor. This seemingly simultaneous execution of multiple processes is called concurrency. For security and reliability, most modern operating systems prevent direct communication between independent processes, providing strictly mediated and controlled inter process communication.
Процестер арасындағы байланыс
Процестер бір-бірімен байланыс орнату қажет болғанда, олар өздерінің адрестік кеңістіктерінің бөліктерін бөліседі немесе процестер аралық байланыс (IPC) ның басқа түрлерін пайдаланады. Мысалы, қабықша құбыржолында бірінші процестің нәтижесі екінші процеске берілуі керек, және т.с.с. Тағы бір мысал – бір уақытта орындала алатын, өзара әрекеттесетін, бірақ ішінара тәуелсіз процестерге бөлінген тапсырма (яғни, бір мезгілде орындалу немесе нағыз параллелизмді пайдалану). Соңғы модель – бір мезгілде орындалудың ерекше жағдайы болып табылады және егер процестерді орындауға дайын күйде болғанда бірнеше процессорлық ядро қолжетімді болса, орындалуы мүмкін. Тіпті екі немесе одан көп процестер әртүрлі операциялық жүйелерді (ОЖ) қолданатын әртүрлі машиналарда жұмыс істеуі мүмкін, сондықтан байланыс және синхрондау үшін кейбір механизмдер қажет (бұл таратылған есептеулер үшін коммуникациялық протоколдар деп аталады), мысалы, хабар алмасу интерфейсі {MPI}.
Тарих
1960-шы жылдардың басында компьютерлік басқару бағдарламалық жасақтамасы, мысалы IBSYS, мониторды басқару бағдарламалық жасақтамасынан атқарушы басқару бағдарламалық жасақтамасына дамыды. Уақыт өте келе компьютерлер жылдамдықтарын арттырды, бірақ компьютерлік уақыт әлі де арзан емес және толыққанды пайдаланылмады; мұндай жағдай мультипрограммалауды мүмкін және қажетті етті. Мультипрограммалау – бірнеше бағдарламаның бір уақытта орындалуы дегенді білдіреді. Алғашқыда бір процессорда бірнеше бағдарлама жұмыс істеді, себебі негізге бірпроцессорлық компьютерлік архитектура жатты, және олар аз және шектеулі аппараттық ресурстарды бөлісті; нәтижесінде, бір мезгілде орындалу тізбекті сипатта болды. Кейінгі көппроцессорлық жүйелерде бірнеше бағдарлама бір уақытта параллель түрде орындалуы мүмкін. Бағдарламалар процессорлар үшін арналған нұсқаулар тізбектерінен тұрады. Бір процессор бір уақытта тек бір ғана нұсқауды орындай алады: бір уақытта бірнеше бағдарламаны орындау мүмкін емес. Бағдарламаға үлкен кешігуі бар кіріс құрылғысы сияқты кейбір ресурстар қажет болуы мүмкін, немесе бағдарлама принтерге шығыс жіберу сияқты баяу операцияны бастауы мүмкін. Бұл процессордың "босқа тұруына” (пайдаланылмауына) әкеледі. Процессорды үнемі жұмыс істеу үшін, мұндай бағдарламаның орындалуы тоқтатылады және операциялық жүйе процессорды басқа бағдарламаны орындау үшін ауыстырады. Пайдаланушыға бағдарламалар бір уақытта орындалып жатқандай көрінеді (осыдан “параллель” термині пайда болды). Көп ұзамай “бағдарлама” түсінігі “орындалып жатқан бағдарлама және оның контексті” түсінігіне дейін кеңейтілді. Процесс түсінігі туды, ол қайта кіретін кодты жасаумен бірге қажет болды. Желдер кейінірек пайда болды. Дегенмен, уақытты бөлісу, компьютерлік желілер және бірнеше CPU ортақ жады компьютерлері сияқты ұғымдардың пайда болуымен ескі “мультипрограммалау” нақты көпміндеттілікке, көппроцессорлық өңдеуге және кейінірек көпжіптілікке жол берді.