Penciptaan Proses pada Sistem Operasi

Konsep Dasar Proses
Proses  adalah program yang sedang dieksekusi mencakup program counter, register dan variabel di dalamnya. Eksekusi  proses dilakukan secara berurutan. Dalan suatu proses terdapat program counter, stack dan daerah data. Proses tidak hanya  berupa suatu kode program (text section), melainkan meliputi beberapa aktivitas yang bersangktan seperti program counter dan stack. Sebuah proses juga  melibatkan stack yang berisi data sementara (parameter fungsi/metode, return address, dan variable lokal ) dan data section yang menyimpan veriabel-variabel global. Pada sistem operasi UNIX mempunyai system call fork yang berfungsi untuk membuat proses baru, proses yang memanggil system call fork ini akan dibagi menjadi dua, proses induk dan proses turunan yang identik. 

System operasi dalam mengelola proses dapat melakukan operasi-operasi terhadap proses. Operasi tersebut adalah :
  • Penciptaan proses
  • Penghancuran/terminasi proses
  • Penundaan proses
  • Pelanjutan kembali proses
  • Pengubahan prioritas proses
  • Memblok proses
  • Membangunkan proses
  • Menjadwalkan proses
  • Memungkinkan proses berkomunikasi dengan proses lain

Sebagai acuan dasar, kita tahu bahwa penciptaan proses merupakan salah satu operasi yang dikelola oleh suatu proses. Bagaimana suatu proses diciptakan ? ada beberapa aktivitas berkenaan dengan pembuatan proses, antara lain:
  • Member identitas (nama) pada proses yang dibuat;
  • Menyisipkan proses pada list proses atau table proses;
  • Menentukan prioritas awal proses;
  • Membuat PCB;
  • Mengalokasikan resource awal bagi proses tersebut.
Sistem operasi membangun struktur data untuk mengelola dan mengalokasikan 

Kejadian yang menyebabkan terjadinya penciptaan proses :
  • Pada lingkungan batch, sebagai tanggapan atas pemberian satu kerja.
  • Pada lingkungan interaktif, ketika pemakai baru berusaha logon.
  • Sebagai tanggapan suatu aplikasi, seperti  permintaan pencetakan file, system operasi dapat menciptakan proses yang akan mengelola pencetakan itu.
  • Proses penciptaan proses lain (proses anak), untuk mencapai modularitas atau mengeksploitasi kongkurensi, program pemakai memerintah pembuatan sejumlah proses.
Tahap-Tahap Penciptaan Proses
Penciptaan proses meliputi beberapa tahap, yaitu :
  • Beri satu identifier unik ke proses baru. Isian baru ditambahkan ke table proses utama yang berisi satu isian perproses.
  • Alokasi ruang untuk proses
  • PCB harus diinisialisasi
  • Kaitan-kaitan antar table dan seranai yang cocok dibuat.
  • Bila diperlukan struktur data lian maka segera dibuat struktur data itu.
Alasan-Alasan Penciptaan Proses
  • Terdapat batch baru. System operasi dengan kendali batch job , setelah menciptakan proses baru, kemudian melanjutkan membaca job selanjutnya
  • Satu pemakai interaktif logon. Seorang pemakai pada satu terminal  sedang melakukan  logon ke sistem
  • System operasi menciptakan proses untuk member layanan. System operasi menciptakan proses untuk memenuhi satu fungsi pada program pemakai , tanpa mengharuskan  pemakai menunggu
  • Proses menciptakan proses anak. Untuk mencapai modularitas atau mengeksploitasi kongkurensi, program pemakai memerintahkan pembuatan sejumlah proses
Contoh Penciptaan Proses
Contoh program ini menunjukan bagaimana cara menulis sebuah fungsi serupa untuk  membangun system. Program tersebut mengeksekusi  argument sintac menggunakan equivalent “sh –c command”.
#include <stddef.h>
     #include <stdlib.h>
     #include <unistd.h>
     #include <sys/types.h>
     #include <sys/wait.h>
     
     /* Execute the command using this shell program.  */
     #define SHELL "/bin/sh"
     
     int
     my_system (const char *command)
     {
       int status;
       pid_t pid;
     
       pid = fork ();
       if (pid == 0)
         {
           /* This is the child process.  Execute the shell command. */
           execl (SHELL, SHELL, "-c", command, NULL);
           _exit (EXIT_FAILURE);
         }
       else if (pid < 0)
         /* The fork failed.  Report failure.  */
         status = -1;
       else
         /* This is the parent process.  Wait for the child to complete.  */
         if (waitpid (pid, &status, 0) != pid)
           status = -1;
       return status;
     }

sumber : www.gnu.org/
 http://kuliah.dinus.ac.id/