Sisophw Third Giri Hartono 145150400111104

16
BAB II PROCESS DAN THREAD I. Dasar Teori Proses Proses pada Linux merupakan aktifitas permintaan user terhadap sistem operasi. Model proses pada Linux mirip dengan UNIX, dimana prinsip dasar keduanya menggunakan fungsi fork() dan exec(). fork() digunakan untuk membuat proses baru sedangkan exec() digunakan untuk memanggil program. Kedua pendekatan diatas merupakan dua hal yang berbeda, dimana proses (child) bisa diciptakan tanpa membuka program baru, dan secara sederhana akan meneruskan program awal (parent) untuk mengeksekusi perintah yang sama pada program awal. Untuk membuat proses baru, bisa dengan mengetikan perintah langsung pada shell Linux. TIPE PROSES : Terdapat beberapa tipe proses yang dikenal dalam OS berbasis Linux pada umumnya, antara lain: Interactive : proses yang dimulai (dan dikontrol oleh) shell . Bisa tampak di luar (foreground) ataupun hanya di dalam (background). Batch : proses yang tidak berhubungan dengan terminal, tetapi menunggu untuk dieksekusi secara berurutan (sekuensial). Daemon : proses yang dimulai ketika Linux booting dan berjalan secara background. Proses ini menunggu permintaan dari proses lainnya, bila tidak ada request, maka berada dalam keadaan ‘idle’. # Tipe-tipe proses dalam Linux, dibagi ke dalam 3 bagian. Sebutkan dan jelaskan: -Process Environment Pada sistem operasi Linux process environment terdiri dari dua komponen, argumen dan environment. Argumen adalah daftar opsi tambahan pada CLI yang berkaitan dengan perilaku program ketika dijalankan, sedangkan environment adalah daftar parameter, baik Interactive : process that started (and controlled) by shell. Can appear in foreground or only in background Batch : process that’s not related with terminal, but waiting for being executed in sequence Daemon : process that started when Linux booting and run in the background.

description

sistem operasi

Transcript of Sisophw Third Giri Hartono 145150400111104

  • BAB II

    PROCESS DAN THREAD

    I. Dasar Teori

    Proses

    Proses pada Linux merupakan aktifitas permintaan user terhadap sistem operasi. Model

    proses pada Linux mirip dengan UNIX, dimana prinsip dasar keduanya menggunakan fungsi

    fork() dan exec(). fork() digunakan untuk membuat proses baru sedangkan exec() digunakan

    untuk memanggil program.

    Kedua pendekatan diatas merupakan dua hal yang berbeda, dimana proses (child) bisa

    diciptakan tanpa membuka program baru, dan secara sederhana akan meneruskan program

    awal (parent) untuk mengeksekusi perintah yang sama pada program awal.

    Untuk membuat proses baru, bisa dengan mengetikan perintah langsung pada shell Linux.

    TIPE PROSES : Terdapat beberapa tipe proses yang dikenal dalam OS berbasis Linux pada umumnya, antara

    lain:

    Interactive : proses yang dimulai (dan dikontrol oleh) shell . Bisa tampak di luar (foreground) ataupun hanya di dalam (background).

    Batch : proses yang tidak berhubungan dengan terminal, tetapi menunggu untuk dieksekusi secara berurutan (sekuensial).

    Daemon : proses yang dimulai ketika Linux booting dan berjalan secara background. Proses ini menunggu permintaan dari proses lainnya, bila tidak ada request, maka berada

    dalam keadaan idle. # Tipe-tipe proses dalam Linux, dibagi ke dalam 3 bagian. Sebutkan dan jelaskan:

    -Process Environment Pada sistem operasi Linux process environment terdiri dari dua komponen, argumen dan

    environment. Argumen adalah daftar opsi tambahan pada CLI yang berkaitan dengan

    perilaku program ketika dijalankan, sedangkan environment adalah daftar parameter, baik

    Interactive : process that started (and controlled) by shell. Can appear in foreground or only in

    background

    Batch : process thats not related with terminal, but waiting for being executed in sequence

    Daemon : process that started when Linux booting and run in the background.

  • berupa variabel, direktori home yang secara tekstual dibutuhkan oleh program.

    Environment variable biasanya terdiri dari beberapa informasi seperti:

    PATH, daftar lokasi direktori dimana file executable berada. HOME, lokasi direktori home. CPPLIBS, lokasi dimana library yang berkaitan dengan program disimpan. HOSTNAME digunakan untuk penamaan mesin. USER user yang digunakan pada saat login pada sistem operasi.

    # Untuk itu kita harus mempelajari Manajemen Proses pada Linux. Perintah INTI dari proses manajemen proses di Linux ada 2. Sebutkan ! Pertama :

    Berikanlah contoh hasil output perintah pertama yang Anda tulis di atas (tempelkan hasil screenshot pada kolom di bawah ini)

    $ps

  • Kedua: Berikanlah contoh hasil output perintah kedua yang Anda tulis di atas (tempelkan hasil screenshot pada kolom di bawah ini)

    1. Memulai menggunakan perintah ps

    $kill

  • # Apa perintah yang seharusnya Anda tulis agar menampilkan hasil output seperti di atas ? # Apa fungsi perintah tersebut ? #Lengkapi pernyataan di bawah ini !! 2. Menampilkan semua proses yang sedang berjalan pada sistem

    $ps aux

    To show what is the process that run in the linux/unix system.

  • # Apa perintah yang seharusnya Anda tulis agar menampilkan hasil output seperti di atas ? # atau Anda bisa menggunakan perintah lain, seperti ?

    # option will show all user that run the process, option used to show another

    process run. option used to show proses that not controlled by terminal (tty) like

    daemon, it run when booting.

    # Dan apa perbedaan perintah di atas dengan perintah ps -e |more ?

    # Dan perintah apa yang berfungsi menampilkan semua proses dalam format sesuai definisi user yaitu terdiri dari kolom PID dan CMD.?

    3. Melihat semua proses yang berjalan kecuali root

    ps -A

    ps -e

    $ ps -e | more just show PID, tty, Time, and CMD, but $ ps aux show everything, they are USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, and COMMAND

    $ps eo pid,cmd

    -a -u

    -x

  • # Pada poin ketiga ini, Anda dapat menggunakan perintah seperti di bawah ini :

    ps -U root -u root -N

    #Bagaimana hasil ouputnya ?

    4. Menampilkan proses yang sedang dijalankan oleh user tertentu

    # Untuk menjalankan fungsi pada poin empat, Anda dapat menggunakan perintah seperti di bawah ini :

    ps -u

    #Bagaimana hasil ouputnya ?

  • # Bagaimana contoh sintaksnya ? $ps u gcu 5. Menampilkan proses yang sedang berjalan dalam bentuk pohon # Untuk menjalankan fungsi pada poin lima, Anda dapat menggunakan perintah seperti di bawah ini :

    pstree

    #Bagaimana hasil ouputnya ?

  • #Apa perbedaan perintah pstree dengan pstree h ? pstree used to view system in hirearcy/parent form. pstree h has the same function but the parent highlighted with bold font.

    CONTROLLING PROSES

    Dalam sistem operasi linux semua proses dikontrol oleh shell yaitu sebuah antar muka

    antara sistem operasi dengan user.

    Sebagai contohnya kita akan mengirim output y yang tidak akan pernah selesai. Dengan

    menggunakan sintak sebagai berikut : $ yes

    #Bagaimana untuk menghentikan perintah $yes diatas?

    Hasil output:

    #Bagaimana cara agar perintah yes tetap dijalankan tetapi shell tetap digunakan untuk hal

    yang lain ?

    Hasil Output:

    # Bagaimana Untuk melihat status proses yang sedang berjalan??

    $jobs

    Ctrl +c

    $yes > /dev/null &

  • Hasil Output:

    PERINTAH KILL

    Perintah kill adalah salah satu perintah daasar Linux yang digunakan untuk menghentikan

    atau mematikan proses yang sedang berjalan pada Sistem Operasi Linux / UNIX. perintah ini

    sangat penting karena dengan memahami perintah ini kita bisa mengetahui mana proses yang

    mengganggu performa, tidak dibutuhkan, dll. #Bagaimana contoh perintah kill ?

    # PID adalah nomor proses yang akan di hentikan. Tidak tahu PID proses mana yang akan

    dihentikan? Cobalah bereksperimen dengan perintah:

    ps aux | grep

    # Lalu tempelkan hasil output pada kolom di bawah ini

    kill int 1

  • Daemons Daemons adalah sebuah proses yang bekerja pada background karena proses ini tidak

    memiliki terminal pengontrol. Dalam sistem operasi Windows biasanya lebih dikenal dengan

    sebutan service. Daemon adalah sebuah proses yang didesain supaya proses tersebut tidak

    mendapatkan intervensi dari user. Daemon biasanya bekerja dalam jangka waktu yang sangat

    lama dan bertugas menerima request dan menjalankan responsnya.

    #Apa yang membedakan Daemons dengan proses lain ?

    Berikut ini adalah beberapa cara untuk membuat daemon:

    a. Forking dan pembunuhan Proses induk. Langkah pertama dari pembuatan daemon adalah dengan menspawn proses menjadi

    induk dan anak dengan melakukan forking, kemudian membunuh proses induk. Proses

    induk yang mati akan menyebabakan sistem operasi mengira bahwa proses telah selesai

    sehingga akan kembali ke terminal user. # Contoh Script :

    Daemon is the one and only process that not controlled by terminal and started when

    booting

    #!/usr/bin/php

  • b. Membuat proses bekerja secara independen

    Daemon harus bekerja secara independen daripada proses-proses lain, termasuk juga

    proses yang menjalankannya. Langkah bisa dilakukan dengan memanggil fungsi setsid(),

    sehingga proses akan mendapatkan sebuah session ID yang baru.

    # Contoh Script :

    c. Menutup standar I/O deskriptor yang diwarisi

    Untuk mencegah terjadinya intervensi dari user serta untuk pengamanan, maka standar

    I/O descriptor dan descriptor yang diwarisi dari proses induk harus ditutup. Ada 3 jenis

    standar I/O descriptor : STDIN (standar input), STDOUT (standar output), STDERR

    (standar error).

    # Contoh Script :

    d. Melakukan masking pada File Creation

    Sebagian besar daemon bekerja dalam previlege super user. Daemon biasanya

    memproteksi setiap file yang dibuat, dengan alasan keamanan. Fungsi umask() akan

    mencegah file-file previleges yang tidak aman dalam setiap pembuatan file.

    # Contoh Script :

    sid = setsid();

    if(sid < 0)

    {

    exit(EXIT_FAILURE);

    }

    close(STDIN_FILENO);

    close(STDOUT_FILENO);

    close(STDERR_FILENO);

    pid_t pid,sid;

    pid=fork();

    if(pid < 0)

    {

    exit(EXIT_FAILURE); }

    if(pid > 0)

    { exit(EXIT_SUCCESS);

    }

    umask(0);

  • e. Running Directory

    Directory kerja daemon haruslah sebuah directory yang selalu hidup. Bisa saja pada saat

    starting working directorynya pada saat itu berada pada user home. Karena daemon

    bekerja sampai sistem reboot, maka file sistem user directorynya takkan pernah bisa di

    unmount.

    # Contoh Script :

    f. Mendengarkan signal

    # Tulislah pada kolom di bawah ini, apakah maksud dari proses ini ?

    g. Logging

    # Sebutkan beberapa cara untuk melakukan proses logging dan berikan penjelasan?

    sid = setsid(); if(sid < 0) { exit(EXIT_FAILURE); } if((chdir(/home/assassin/modul2/shift2.1/)) < 0) { exit(EXIT_FAILURE); }

    The real main task of daemon is listen request. So, in daemon must have signal

    listener that can response when daemon get some signal.

    Log File method

    All file written in a file controlled by thatdaemon configuration file. we can call function

    fopen.

    Metode Log Server

    for UNIX family, they have special daemon used for logging, it is syslogd. This daemon

    grouping masages to a group called facility, next this groups can be sent to different

    places.

  • Tantangan !!

    Coba Anda buat daemon yang dapat melakukan beberapa fungsi yaitu menghapus,

    membuat, mengopy dan memindahkan file, serta daemon yang mencatat perubahan isi folder

    di atas, yaitu waktu dan perubahan apa yang terjadi pada suatu log-file. Tugas tersebut akan

    dikerjakan oleh daemon pertama setelah beberapa saat (user dapat menentukan kapan waktu

    pengeksekusian fungsi diatas) setelah tugas tugas tersebut dicatat oleh sebuah file pencatat dan dan tugas daemon kedua adalah mencatat setiap perintah yang telah dieksekusi dan

    maupun mencatat kesalahan perintah.

    int main(void)

    {

    FILE *tulis,*catatan;

    pid_t pid;

    char perintah[100],berkas1[100],berkas2[100];

    int nilai;

    pid = fork();

    if (pid < 0)

    {

    exit(EXIT_FAILURE);

    }

    if (pid > 0)

    {

    exit(EXIT_SUCCESS);

    }

    umask(0);

    sid = setsid();

    if (sid < 0)

    {

    exit(EXIT_FAILURE);

    }

    close(STDIN_FILENO);

    close(STDOUT_FILENO);

    close(STDERR_FILENO);

    tulis = fopen(catatan.txt, r);

    while(fscanf(tulis,%s,&perintah)!=EOF)

    {

    if(strcmp(perintah,buat)==0)

    {

    fscanf(tulis,%s,&berkas1);

    buatfile(berkas1);

    }

    if(strcmp(perintah,hapus)==0)

    {

    fscanf(tulis,%s,&berkas1);

    hapus(berkas1);

  • }

    if(strcmp(perintah,waktu)==0)

    {

    fscanf(tulis,%s,&berkas1);

    nilai = atoi(berkas1);

    waktu(nilai);

    }

    if(strcmp(perintah,ganda)==0)

    {

    fscanf(tulis,%s,&berkas1);

    fscanf(tulis,%s,&berkas2);

    ganda(berkas1,berkas2);

    }

    if(strcmp(perintah,pindah)==0)

    {

    fscanf(tulis,%s,&berkas1);

    fscanf(tulis,%s,&berkas2);

    pindah(berkas1,berkas2);

    }

    }

    fclose(tulis);

    kill(sid2, SIGSTOP);

    kill(sid, SIGSTOP);

    exit(EXIT_SUCCESS);

    }

    void catat(char *pesan,char nama[100])

    {

    pid_t pid;

    pid = fork();

    if (pid < 0)

    {

    exit(EXIT_FAILURE);

    }

    if (pid > 0)

    {

    exit(EXIT_SUCCESS);

    }

    umask(0);

    sid2 = setsid();

    if (sid2 < 0)

    {

    exit(EXIT_FAILURE);

    }

    close(STDIN_FILENO);

    close(STDOUT_FILENO);

  • close(STDERR_FILENO);

    time_t curtime;

    struct tm *loctime;

    FILE *pf;

    char buffer[SIZE];

    curtime = time(NULL);

    loctime = localtime(&curtime);

    strftime (buffer, SIZE, [%d/%m/%y (%I:%M %p)], loctime);

    pf=fopen(wajib.log, a+);

    fprintf(pf,%s %s %sn, buffer, pesan, nama);

    fclose(pf);

    }

    void hapus(char nama[100])

    {

    FILE *baru1 = fopen(nama,r);

    if(baru1 == NULL)

    {

    catat(nama,Tidak Ada);

    }

    else

    {

    remove(nama);

    catat(nama,Telah Berhasil Dihapus);

    }

    }

    void buatfile(char nama[100])

    {

    FILE *baru1 = fopen(nama,r);

    if(baru1 != NULL)

    {

    catat(nama,Sudah Ada);

    }

    else

    {

    fopen(nama, w+);

    catat(nama,Telah Berhasil Dibuat);

    }

    }

    void pindah(char asal[100],char tujuan[100])

    {

    FILE *baru1,*baru2;

    baru1 = fopen(asal,r);

    baru2 = fopen(tujuan,w+);

  • char string[100];

    if(baru1 != NULL)

    {

    while(fgets(string,100,baru1) != NULL)

    {

    fputs(string,baru2);

    }

    catat(asal,Telah Berhasil Dipindah);

    }

    else

    {

    catat(asal,Tidak ditemukan);

    }

    fclose(baru1);

    fclose(baru2);

    remove(asal);

    }

    void ganda(char asal[100],char tujuan[100])

    {

    FILE *baru1,*baru2;

    baru1 = fopen(asal,r);

    baru2 = fopen(tujuan,w+);

    char string[100];

    if(baru1 != NULL)

    {

    while(fgets(string,100,baru1) != NULL)

    {

    fputs(string,baru2);

    }

    catat(asal,Telah Berhasil Digandakan);

    }

    else

    {

    catat(asal,Tidak ditemukan);

    }

    fclose(baru1);

    fclose(baru2);

    }