Category Archives: Operating System

Pertemuan 6 Operating System

1601221420 – Fendy Chandra

Pertemuan 6

Pertemuan 5 kemaren kebetulan jadwalnya bentrok sama IdeaFest BiNus, jadi jadwal OS kelima ini dijadiin GSLC. Kelar GSLC seminggu kita balik lagi ke perkuliahan normal, dan dipertemuan 6 ini materi yang kita pelajarin adalah tentang virtual memory. Nah virtual memory ini termasuk fitur yang lumayan berguna buat kita-kita yang PC/laptopnya punya RAM minimalis (alias kecil), soalnya dengan make VM ini, kita jadi bisa seolah-olah nambahin ukuran RAM yang kita punya. Dari mana kapasitasnya diambil? Jawabannya dari memory harddisk device kita. Jadi prinsipnya dengan make VM, kita ngalokasiin sebagian dari memory hardisk kita buat dijadiin tambahan RAM kita. Cara ini lumayan efektif buat ngebantu komputer kita ngelakuin multi tasking, tapi sayangnya metode ini cenderung bikin pemrosesan di komputer kita jadi lambat (yeah, cara yang ngirit emang ga pernah sesukses yang musti keluar duit; kalo mau yang lebih cepet emang musti beli RAM baru yang lebih gede ;V). Selain 2 cara itu (VM sama beli RAM baru), sekarang juga ada fitur ReadyBoost. Sebenernya hampir sama kayak VM sih, Cuma si ReadyBoost ini ngambil space tambahan buat RAMnya dari flashdisk.

Nah pembahasan minggu ini ga jauh-jauh dari urusan VM management ini. Bahasan pertama yang didapet minggu ini adalah tentang paging, yang artinya proses dimana kita motong-motong memory menjadi bagian yang lebih kecil. Nah bagian yang lebih kecil ini disebut frame.

Kira-kira secara sederhana proses paging bisa digambarin jadi begini:

601

Kalau isi page udah penuh da nada isi baru yang mau masuk, maka kita musti ngelakuin yang namanya page replacement.

Nah didalam memory management ini ada beberapa algoritma yang biasa dipake, kalo di pertemuan minggu ini ada 3 algoritma yang kita pelajarin, yaitu: Algoritma Optimal (Belady’s anomaly), algoritma first in first out (FIFO), sama algoritma least recently used (LRU).

  1. Algoritma Optimal (Belady’s anomaly)

 

Kalo di algoritma ini, page yang bakal di-replace adalah yang datanya paling lama ga dipake.

Contohnya, misalnya kita punya frame yang muat 3 data dan ada inputan data:

70120304230

 

Kalo kita pake algoritma Optimal ini, hasilnya bakalan jadi begini:

 

Input 7 0 1 2 0 3 0 4 2 3 0
Frame 1 7 7 7 2 2 2 2 2 2 2 2
Frame 2 0 0 0 0 0 0 4 4 4 4
Frame 3 1 1 1 3 3 3 3 3 3

 

Penjelasan:

  • Kalo di algoritma ini, waktu framenya masih kosong dan ada data baru yang mo dimasukin, kita tinggal taro data itu diframe yang kosong.
  • Kalo semua frame udah keisi dan ada data baru yang masuk:
    • Kalo datanya = data yang ada didalem frame, ga ada yang direplace
    • Kalo datanya beda sama yang ada didalem frame, maka data yang bakal direplace adalah data yang paling jauh di kanan.
      • Misal: buat contoh masuk data 4, kita liat 2 ada di kolom sebelahnya, 3 ada di 2 kolom setelahnya, 0 ada di 3 kolom sebelah kanannya, jadi yang direplace adalah si 0.
      • Kalo buat contohmasukin data 2 (kolom ke 4),kita bandingin posisi 7, 0, 1 disebelah kanan. 0 ada di kolom setelahnya tapi 7 sama 1 ga ada di sebelah kanan (bisa diasumsiin jaraknya tak hingga di kanan). Nah karena kita gatau yang mana yang paling jauh di kanan antara 7 sama 1, jadi kita liat diantara mereka siapa yang paling lama berada di frame (paling jauh disebelah kiri). 7 ada di kolom pertama, 1 di kolom ke 3, jadi yang kita replace adalah 7.

Hint: jawaban akhirnya pasti isinya variasi dari n angka terakhir dari inputan yang masuk (n = jumlah framenya).

  1. Algoritma FIFO

Kalo algoritma FIFO ini prinsipnya sama kayak Queue, jadi data yang pertama masuk bakal keluar pertama juga. Misalnya framenya 3 dan inputannya kayak gini:

70120304230

 

Kalo pake algoritma FIFO, hasilnya bakal begini:

 

Input 7 0 1 2 0 3 0 4
Frame 1 7 7 7 2 2 2 2 4
Frame 2 0 0 0 0 0 0 0
Frame 3 1 1 1 3 3 3

 

Hint: jawaban akhirnya pasti isinya variasi dari n angka terakhir dari inputan yang masuk (n = jumlah framenya).

 

  1. Algoritma Least Recently Used (RLU)

Kalo algoritma ini prinsipnya data yang bakal direplace adalah data yang paling lama ga dipake. Sebenernya prinsip algoritma RLU ini hampir sama kayak algoritma Queue.

 

Misalnya kalo ada 3 frame dan data yang diinput begini:

70120304230

 

Hasilnya bakal jadi begini:

 

Input 7 0 1 2 0 3 0 4
Frame 1 7 7 7 2 2 2 2 4
Frame 2 0 0 0 0 0 0 0
Frame 3 1 1 1 3 3 3

 

Penjelasan:

 

  • Kalo di algoritma ini, waktu framenya masih kosong dan ada data baru yang mo dimasukin, kita tinggal taro data itu diframe yang kosong.
  • Kalo frame udah penuh dan data yang mau masuk = yang ada didalem frame, maka ga ada data yang direplace.
  • Kalo frame udah penuh dan data yang mau masuk beda sama yang ada didalem frame, maka data yang bakal direplace adalah data yang paling jauh di kiri.

 

Hint: jawaban akhirnya pasti isinya variasi dari n angka terakhir dari inputan yang masuk (n = jumlah framenya).

Oh iya, sekedar ngingetin, denger-denger materi ini termasuk yang bakal keluar di UTS, jadi kudu disiapin baik-baik.

BINUS (www.binus.ac.id) | www.skyconnectiva.com

 

 

 

 

 

Pertemuan 4 Operating System

Fendy Chandra – 1601221420

Di pertemuan ini, kita belajar yang namanya concurrency. Apa itu concurrency? Simpelnya, concurrency bisa diartiin sebagai komunikasi antar beberapa process yang saling berbagi resources yang sama. Di dalam komunikasi ini, ada sinkronisasi dari beberapa proses yang sama-sama memakai resource tertentu. Nah supaya proses-proses ini dapat berjalan dengan baik, perlu dilakuin yang namanya alokasi processor time. Nah contoh penerapan concurrency ini bisa dalam multiprogramming (penggunaan beberapa aplikasi pada saat yang sama), dalam aplikasi terstruktur (structured application, aplikasi ini disusun dari berbagai perintah yang concurrent), dan di dalam struktur sistem operasi (karena OS itu adalah sekumpulan proses/thread).

Nah walopun sebenernya concurrency ini adalah metode yang bagus buat meningkatkan efisiensi komputer, tapi ada beberapa permasalahan yang sering muncul kalo menerapkan concurrency:

  1. Sharing global resources
  2. Pengelolaan alokasi resources
  3. Kesalahan-kesalahan yang terjadi sewaktu programming susah ditemukan (di-debug) setelah dieksekusi.

 

Permasalahan tentang concurrency bisa diliat di contoh codingan ini:

 

void echo (

{

chin = getchar();

chout = chin;

putchar(chout);

}

 

Proses 1 Proses 2
. .
in = getchar(); .
. in = getchar();
chout = chin; chout = chin;
putchar(chout) .
. putchar(chout)

 

Kalo kita liat contoh diatas, bisa terjadi masalah buat proses 1 kalo nilai yang ditampung sama in di proses 1 ke-overwrite sama in di proses 2, sehingga hasilnya bisa ga reliable. Untuk mengatasi masalah-masalah semacem ini, ada beberapa cara yang bisa kita lakuin (bakal dibahas selanjutnya).

Nah, berhubungan sama concurrency ini, O/S punya beberapa concern, diantaranya:

  1. Mentrack proses-proses yang sedang aktif
  2. Mengalokasi dan mendealokasi resource-resource semacem processor time, memory, file, dan I/O devices
  3. Melindungi data dan resource
  4. Hasil dari proses harus independen terhadap kecepatan eksekusi dari proses-proses lain yang concurrent.

Nah, dalam konkurensi ini, ga jarang terjadi yang namanya kompetisi antar proses yang konkuren. Nah dalam kompetisi ini ada istilah mutual exclusion (berkaitan sama critical sections, yaitu cuma ada 1 program yang boleh berada dalam critical sections, contohnya Cuma ada 1 proses yang boleh ngasih perintah ke printer dalam 1 waktu). Masalahnya akibat mutual exclusion ini bisa aja terjadi yang namanya deadlock dan starvation. Deadlock maksudnya ada 2 proses yang musti tunggu-tungguan buat melakukan 1 eksekusi tertentu. Karena saling tunggu, yang ada akhirnya malah kedua-duanya ga ada yang jalan. Kalo starvation itu adalah situasi dimana 1 proses nunggu terlalu lama buat memakai 1 resource/eksekusi tertentu.

Selain kompetisi, ada juga yang namanya kooperasi. Nah kooperasi ini dibagi jadi 2 macem:

  1. By sharing, nah dalam kooperasi ini, writing harus dilakuin secara mutually exclusive. Supaya integritas datanya terjaga, maka perlu dipake yang namanya critical sections.
  2. By communication, nah dalam kooperasi ini, pesan-pesan yang ada dioper antar 1 proses ke proses yang lain (jadi tidak harus ada mutual exclusion). Karena itu, dalam kooperasi ini ada kemungkinan terjadinya deadlock dan starvation).

Nah tadi kan udah disinggung sedikit soal mutual exclusion. Sekarang bakal dijelasin secara lebih lengkap tentang mutual exclusion. Jadi, mutual exclusion itu adalah Suatu metode yang memungkinkan supaya Cuma ada 1 proses dalam 1 waktu yang berhak berada dalam critical section dari suatu resource. Sebuah proses yang berhenti di non-critical section dari suatu proses harus melakukannya tanpa mengganggu proses-proses yang lain. Karena itu, dalam mutual exclusion ga ada yang namanya deadlock atopun starvation. Dengan metode ini, suatu proses ga boleh terhambat dalam memasuki critical section dari suatu resource kalo critical section itu lagi kosong, tapi setelah ada didalemnya, proses itu terbatas berada disana dalam satu waktu tertentu.

Nah supaya bisa mencapai mutual exclusion ini, ada beberapa cara yang bisa dilakukan:

  1. Dengan men-disable interrupts.

Umumnya, suatu proses berjalan sampai dia memanggil suatu layanan OS ato sampai diinterupsi. Dengan metode ini, kita mencegah munculnya interupsi, sehingga bisa menjamin mutual exclusion. Selain itu, metode ini juga dibatasi kemampuannya dalam meng-interleave program. Tetapi jika kita menggunakan multiprocessing, men-disable interrupt di 1 prosesor ga bakal menjamin mutual exclusion.

 

  1. Memakai lock variable

Dengan metode ini, kita menggunakan suatu variable yang berperan sebagai kunci (lock). Variable ini diinisialisasi dengan nilai 0. Jika lock = 0, maka proses boleh memasuki critical section, lalu nilai lock diubah menjadi 1. Setelah proses keluar, maka lock akan kembali diberi nilai 0. Jika ada proses yang ingin masuk tapi nilai lock = 1, maka proses itu harus menunggu samapi lock = 0. Permasalahan yang bisa timbul dari metode ini adalah race condition, dimana 2 proses mencapai critical section pada waktu yang hampir bersamaan.

 

  1. Menggunakan strict alteration
  2. Menggunakan Peterson’s solution
  3. Memakai instruksi TSL

 

Nah selain memakai metode mutual exclusion, permasalahan-permasalahan concurrency bisa dicegah dengan memakai semaphore. Semaphore adalah suatu variable khusus yang digunakan untuk signaling. Jika sebuah proses menunggu sinyal, maka proses itu akan di-suspend sampai sinyalnya terkirim. Wait dan operasi-operasi sinyal ini tidak bisa diinterupsi. Untuk menampung proses-proses yang menunggu semaphore ini kita perlu memakai queue.

 

Semaphore sendiri adalah variable khusus yang memiliki nilai integer:

  • Semaphore ini bisa diinisialisasi dengan nilai negative.
  • Operasi wait akan men-decrement nilai semaphore
  • Operasi signal akan meng-increment nilai semaphore.

Nah berkaitan sama concurrency ini ada permasalahan yang namanya Producer-Consumer’s problem. Nah dalam permasalahan ini, ada 1 atau lebih producer yang men-generate dan menemoatkan data-data ini kedalam buffer, sedangkan ada 1 consumer yang mengambil item-item keluar dari buffer sebanyak 1 di setiap waktu. Permasalahannya adalah hanya ada 1 consumer/producer yang boleh mengakses buffer dalam satu waktu.

Selain producer-consumer, ada juga permasalahan yang namanya dining philosopher’s problem dan readers’ writer problem. Kalo dalam masalah ini, reader dalam jumlah berapapun boleh membaca file secara simultan, tetapi hanya ada 1 writer yang boleh menulis file tersebut dalam 1 waktu. Ketika writer sedang menulis file, tidak boleh ada reader yang boleh membaca file.

Berikut ini adalah solusi dari producer-consumer problem:

 

42

Berikut ini adalah salah satu solusi yang dapat digunakan untuk mengatasi Reader’s Writer Problem:

43

Solusi lainnya dari permasalahan ini jika menggunakan semaphore adalah sebagai berikut:

44

 

Kalo yang ini adalah solusi Dining Philosopher’s Problem:

45

46

Nah kalodalem prakteknya, kita bisa menggunakan keyword mutex lock dan mutex unlock buat menjalankan concurrency. Nah dalam mutex ini, kita perlu memakai yang namanya pthread kayak dibawah ini:

47

Nah kalo kita make pthread buat mengatasi masalah producer-consumer kita bisa juga, contohnya kayak dibawah ini:

48

49

410

Selain itu, dipertemuan minggu kemaren kita juga ngebahas tentang monitor, yaitu suatu konstruksi bahasa pemrograman yang mendukung akses terkontrol ke shared data. Jadi dengan adanya monitor, compiler menambahkan sinkronisasi secara otomatis dan di-enforce pada saat runtime. Dalam monitor, Cuma boleh ada 1 proses yang berada didalamnya dalam 1 waktu (hal ini dikarenakan setiap procedurenya adalah bagian dari critical section).

Jadi, monitor ini mendukung mutual exclusion, karena Cuma ada 1 proses yang bisa mengeksekusi didalam monitor pada 1 waktu, dan proses-proses lain yang ingin memakai monitor tersebut harus meunggu sampai proses yang ada didalamnya selesai mengeksekusi. Saat berada didalam monitor, sebuah proses bisa saja menemukan dirinya tidak dapat berlanjut, hal ini salah satunya disebabkan karena didalam monitor terdapat conditional variables yang bisa diakses dengan fungsi wait dan signal.

Nah untuk memungkinkan sebuah proses untuk menunggu didalam monitor, kita perlu membuat sebuah variable condition, misalnya condition x;

Nah variable ini Cuma bisa diakses dengan 2 operasi/fungsi, yaitu wait dan signal.

  • Wait (x) berarti proses yang meng-invoke operasi ini (x) akan di-suspend sampai proses lain meng-invoke.
  • Signal (x) akan melanjutkan tepat 1 proses yang sudah di-suspend. Jika tidak ada proses yang di-suspend, maka operasi ini tidak punya efek apapun.

Terakhir, di pertemuan kemaren kita juga belajar tentang message passing. Message passing adalah suatu cara untuk mengkomunikasikan operasi dari 1 proses ke proses lainnya dengan operasi send dan receive. Receiver bisa menspesifikasikan apapun, memilih untuk mem-blok ataupun tidak. Metode message passing ini bisa diterapkan dalam single-processing system, multi-processing system, dan distributed system. Metode ini tidak memerlukan shared address spaces.

Operasi send() dapat bersifat synchronous ataupun asynchronous. Synchronous send akan me-return setelah data dikirm dan memblok jika buffernya penuh, sedangkan asynchronous send akan me-return segera setelah I/O dimulai dan akan memblok jika buffer dianggap penuh.

Operasi receive() juga dapat bersifat synchronous ataupun asynchronous. Synchronous receive akan me-return jika ada pesan dan akan memblok jika tidak ada pesan, sedangkan asynchronous receive akan mereturn pesan pertama jika ada 1 pesan dan meretun indikasi jika tidak ada pesan.

Message passing juga bisa dilakukan secara indirect dengan menggunakan mailbox. Jadi, sebuah pesan akan dikirim ke suatu area tertentu yang diberi nama (mailbox). Proses-proses akan membaca pesan dari mailbox, jadi mailbox ini harus dibuat dan dikelola. Sender akan memblok jika mailboxnya sudah penuh. Keuntungan dari penggunaan mailbox adalah metode ini memungkinkan komunikasi many-to-many.

Dalam message passing, jika sebuah pesan dikirim balik ke sender berarti pesan aslinya sudah diterima dengan tepat. Pesan ini juga bisa dikirm secara piggy-back ke pesan lain baik secara implisit maupun eksplisit. Message passing juga bisa synchronous ataupun asynchronous dan positif ataupun negative.

Berikut ini adalah penggunaan message passing untuk menyelesaikan permasalahan producer-consumer :

411

412

 

Walopun metode ini keliatan bagus, tapi message passing juga punya beberapa masalah yang perlu dipertimbangkan:

  1. Scrambled messages (checksum)
  2. Lost messages (acknowledgements)
  3. Lost acknowledgements (sequence no.)
  4. Destination unreachable (down, terminates) -> karena mailbox penuh
  5. Naming
  6. Authentication
  7. Performance (copying, message building)

BINUS (www.binus.ac.id) | www.skyconnectiva.com

 

Pertemuan 3 Operating System

Pertemuan 3

Di pertemuan kali ini, yang kita materi yang kita pelajarin masih seputaran process&thread, tapi  sekarang focus kita lebih ke tentang process scheduling. Kayak yang kita, komputer bisa ngejalanin lebih dari 1 proses di waktu yang sama, artinya komputer bakal mengalokasikan resourcenya seoptimal mungkin supaya proses-proses yang ada tetep bisa jalan dengan baik. Nah supaya proses-proses yang banyak ntu bisa optimal, perlu ada metode penjadwalan proses-proses tersebut. Nah disesi ini kita ngebahas soal metode-metodenya….

  1. First Come First Served (FCFS)

Di metode ini, proses-proses dijadwalin sesuai sama urutan masuknya, siapa yang masuk duluan bakalan dijalanin duluan. Contohnya begini nih:

 

Proses Burst Time
P1 24
P2 3
P3 3

 

Jadi berdasarkan metode FCFS, proses yang bakal dijalanin duluan adalah P1, baru kemudian P2, dan terakhirnya P3. Kalo dibikin dalam bentuk diagram process time jadinya begini:

 

P1 P2 P3

0                                                                                                                                                24         27     30

 

Cara baca diagram process time (PT) diatas kira-kira begini: P1 dijalankan duluan, jadi dari detik ke-0 sampe ke-24 komputer bakal jalanin P1, abis P1 kelar dijalanin, komputer bakal jalanin P2 selama 3 detik dari detik ke-24 sampe detik ke-27, baru habis itu komputer jalanin P3 dari detik ke-27 sampe 30. Jadi buat jalanin proses-proses tersebut komputer butuh waktu PT1 + PT2 + PT3 = 30 detik.

 

Selain diagram PT, di scheduling ada 1 diagram lagi, namanya diagram waiting time (WT). Nah kalo yang ini ngegambarin waktu tunggu setiap proses sampe akhirnya proses tersebut dijalanin. Kalo buat contoh diatas, diagram WT-nya kira-kira begini :

 

P2 P3 P1

0       3       6                                                                                                                                                                30

Cara baca diagram WT diatas kira-kira begini: Pertama, kita anggap P1 langsung dijalanin dan udah kelar, jadi WT1 = 0. Abis P1 kelar, giliran P2 dijalanin. Karena eksekusi P2 butuh waktu 3 detik, jadi P3 butuh waktu 3 detik buat nunggu P2, jadi WT2 = 3 detik. Kalo P1 mau dijalanin lagi, dia perlu nunggu P3 selese dijalanin dulu, yaitu selama 3 detik. Jadi WT3 = 3 detik (di diagram ditulis 6 soalnya ditambahin lagi sama 3 detiknya WT2).

Kelebihannya FCFS adalah metode ini gampang dimengerti dan (katanya) gampang buat dibikin programnya, tapi kekurangannya adalah metode ini ga bisa ngasih prioritas buat proses-proses yang bakal dijalanin, jadi bisa aja proses yang waktu eksekusinya relative sebentar justru harus nunggu proses yang eksekusinya lebih lama.

  1. Shortest Job First (SJF)

 

Metode ini relative lebih pinter dibandingin sama metode FCFS. Sesuai sama namanya, metode ini bakal ngurutin proses-proses yang bakal dijalanin dari yang waktu prosesnya paling sebentar dulu, sebelon proses-prosesnya dijalankan. Kita pake contoh yang ada di poin 1 ya….

 

Proses Burst Time
P1 24
P2 3
P3 3

 

Nah, di metode SJF, komputer bakal ngurutin proses-proses berdasarkan waktu eksekusinya, kalo ada beberapa proses yang waktu eksekusinya sama, maka bakal didahulukan yang masuk duluan. Jadi kalo dari contoh diatas urutan prosesnya bakal jadi begini:

 

Proses Burst Time
P2 3
P3 3
P1 24

Kalo dibikin dalam bentuk diagram PT, hasilnya bakalan jadi begini….

 

P2 P3 P1

0       3       6                                                                                                                                                                30

 

Diagram WT-nya bakalan jadi begini….

 

P3 P1 P2

0       3                                                                                                                                                      27   30

 

  1. Shortest Remaining Time First (SRTF)

 

Sebenernya metode ini masih  pengembangan dari SJF, cuma disini udah lebih canggih lagi, soalnya dia bakalan ngurutin eksekusi proses bukan cuma berdasarkan waktu prosesnya, tapi juga berdasarkan sisa waktu eksekusi  proses tersebut. Jadi setiap ada proses baru yang di-request, komputer bakal bandingin sisa waktu proses yang lagi jalan sama yang baru masuk: kalo ternyata proses yang baru itu lebih singkat, proses yang sekarang lagi jalan bakal di-suspend (ditunda). Supaya lebih jelas kita pake contoh ini yaa….

Proses Arrival Time Burst Time
P1 0 8
P2 1 4
P3 2 9
P4 3 5

 

Jadi dari table diatas, kita tahu kalo ada 4 proses yang bakal dijalankan sama komputer, yaitu P1, P2, P3, sama P4, dimana tiap-tiap proses ini bakal diba dalam waktu yang beda-beda. Waktu detik ke-0, Cuma ada proses P1 yang siap dijalankan, jadi P1 bakal dijalankan. Masuk detik ke-1, masuk proses P2. Disini berarti ada 2 proses yang bakal dibandingin, yaitu P1 (sisa 7 detik) sama P2 (selama 4 detik). Nah karena P2 punya sisa waktu eksekusi yang lebih pendek, jadi P1 bakal disuspend dulu, dan komputer bakal jalanin P2.

 

Masuk detik ke-2, masuk lagi proses P3. Berarti sekarang komputer punya 3 proses buat dibandingin, yaitu P1 (sisa 7 detik), P2 (sisa 3 detik), sama P3 (selama 9 detik). Karena P2 punya sisa waktu eksekusi yang masih paling pendek, maka P2 tetep lanjut.

 

Masuk detik ke-3, masuk lagi proses P4. Sekarang kita punya 4 proses buat dibandingin, yaitu P1 (sisa 7 detik), P2 (sisa 2 detik), P3 (selama 9 detik), sama P4 (selama 5 detik). Karena P2 masih paling pendek sisa waktu eksekusinya, jadi P2 tetep dilanjutin eksekusinya.

 

Di detik ke-5, eksekusi P2 udah selesai. Sekarang masih ada sisa 3 proses lagi buat dijalanin, yaitu P1 (sisa 7 detik), P3 (selama 9 detik), sama P4 (selama 5 detik). Karena P4 punya sisa waktu eksekusi yang paling pendek, jadi P4 bakalan dijalanin duluan.
Di detik ke-10, eksekusi P4 udah selesai. Sekarang tinggal 2 proses lagi yang perlu dijalanin: P1 (sisa 7 detik) sama P3 (selama 9 detik). Karena P1 punya sisa waktu yang lebih pendek, maka P1 bakal dijalanin duluan. Baru setelah P1 selesai, P3 bakal dijalanin. Jadi total waktu yang diperluin buat ngejalanin ke-4 proses diatas adalah 8+4+9+5 = 26 detik.

 

Kalo dalam bentuk diagram PT, hasil soal diatas bakalan jadi begini:

 

P1 P2 P4 P1 P3

0       1                     5                                    10                                       17                                                  26

 

  1. Priority Scheduling

Di metode ini, proses-proses yang masuk punya prioritasnya masing-masing. Buat nentuin proses mana yang dijalanin duluan, kita tinggal liat aja dari prioritynya. Proses yang bakal dijalanin duluan adalah proses yang prioritynya paling kecil. Kalo ada beberapa proses yang prioritynya sama, proses yang waktu eksekusinya paling lama bakal didahuluin.

 

Buat contoh kita pake kasus ini:

Proses Priority Burst Time
P1 1 6
P2 2 3
P3 1 10

 

Nah buat contoh diatas, pertama-tama kita perlu ngurutin proses-proses ditas dari yang prioritynya terkecil. Dari yang kita liat, jelas kalo P2 bakal dijalanin terakhir, soalnya prioritasnya paling gede (2). Nah masalahnya, mana diantara P1 sama P3 yang harus dijalanin duluan? Sesuai aturan yang ditulis diatas, proses yang waktu eksekusinya lebih lama bakal dijalanin duluan. Jadi urutan eksekusinya adalah P3 > P1 > P2. Kalo digambar diagram PT-nya bakalan jadi begini

 

P3 P1 P2

0                                                                                     10                           13                                                             19

 

  1. Round Robin

 

Ini metode terakhir yang kita bahas di sesi kemarin. Kalo dimetode ini, prinsipnya kayak orang lagi giliran ngeronda kampung. Jadi setiap proses bakalan dijalanin selama waktu tertentu (disebutnya kuantum), dimana setiap proses bakal memiliki alokasi waktu dalam kuantum-kuantum tersebut. Misalnya kita ambil contoh begini…

 

Proses Burst Time
P1 3
P2 4
P3 6
P4 2
P5 1

 

Kita anggap kuantum di kasus di atas = 2, berarti alokasi waktu buat setiap proses dibagi dalam blok-blok yang masa aktifnya masing-masing 2 detik. Maka hasilnya bakalan jadi begini:

 

P1 P1 P2 P2 P3 P3 P3 P4 P5

0                  2                   4                  6                       8                    10               12                    14              16       18

Kalo diitung-itung, mustinya total waktu proses buat P1 sampe P5 = 3+4+6+2+1 detik = 16 detik, tapi kenapa di diagram diatas malah butuh waktu 18 detik? Jawabannya adalah soalnya dalam metode round robin, setiap blok udah pasti dialokasikan untuk 1 proses (gabisa ada 2 proses dalam 1 blok), jadi walopun P2 sama P5 waktu prosesnya ganjil (blok kedua P1 sama bloknya P5 masih punya space buat diisi sama proses lain) tetep aja blok tersebut ga dipake buat ngisi space lain. Bisa dibilang ini salah satu bedanya metode Round Robin dibandingin sama metode-metode yang lainnya.

Nah disini gw mau post juga soal latihan yang dikasih di pertemuan ini sama ko Sky….

Diketahui table seperti berikut:

Proses Arrival Time Burst Time
P1 0 1
P2 1 12
P3 2 7
P4 3 15

 

Buatlah diagram PT dan WT (kecuali untuk SRTF) diatas jika penjadwalannya dilakukan dengan metode FCFS, SJF, dan SRTF!

Pertama, kita kerjain pake metode FCFS ya. Sesuai sama yang udah dibahas diatas, kalo pake metode ini, penjadwalannya dilakuin berdasarkan sama urutan masuknya proses-proses ini, Jadi urutannya P1, P2, P3, P4. Kalo dibikin diagram PT-nya jadi begini:

P1 P2 P3 P4

0     1                                                             13                          20                                                                              35

Dari data diatas kita bisa bikin diagram WT-nya kayak dibawah ini:

P2 P3 P4 P1

0                                                          12                          19                                                                   34      35

Nah, sekarang kita bikin pake cara SJF. Kalo pake cara ini, berarti kita perlu ngurutin data di table               atas sesuai burst timenya (ascending). Jadi urutannya begini:

Proses Arrival Time Burst Time
P1 0 1
P3 2 7
P2 1 12
P4 3 15

 

Dari data diatas, diagram PT-nya begini:

P1 P3 P2 P4

0     1                           8                                                       20                                                                      35

Dan diagram WT-nya begini:

P3 P2 P4 P1

0                           7                                                 19                                                                       34       35

Terakhir, kita coba kerjain soal ini pake metode SRTF. Dari table kita tau kalo:

  1. Waktu detik ke-0, cuma ada P1 yang diterima, jadi kita jalanin P1.
  2. Waktu detik ke-1, P1 selesai dijalanin dan P2 masuk, jadi kita jalanin P2.
  3. Waktu detik ke-2, masuk P3. Ternyata sisa waktu yang dibutuhin buat jalanin P3 (7 detik) lebih kecil daripada P2 (11 detik), jadi kita jalanin P3 dulu.
  4. Waktu detik ke-3, masuk P4. Kalo dibandingin, sisa waktu P3 (6 detik) masih paling kecll dibandingin sama P2 (11 detik) ato P4 (15 detik), jadi P3 tetep dilanjutin.
  5. Waktu detik ke-9, P3 selesai. Proses yang masih nunggu ada P2 (sisa 11 detik) sama P3 (15 detik). Karena sisa waktu P2 lebih sedikit jadi kita jalanin P2 dulu.
  6. Waktu detik ke-20, P2 selesai. Karena yang masih nunggu cuma P4, jadi kita jalanin P4.

 

Dari data diatas, kita bisa bikin diagram PT-nya:

 

P1 P2 P3 P2 P4

0       1         2                                             9                                                   20                                                           35

Selaen latihan diatas, kita juga diminta nampilin kodingan C buat FCFS :

#include<stdio.h>

#include<conio.h>

#include<process.h>

void main()

{

char p[10][5];

int tot=0,wt[10],i,n;

float avg=0;

clrscr();

printf(“enter no of processes:”);

scanf(“%d”,&n);

 

for(i=0;i<n;i++)

{

printf(“enter process%d name:\n“,i+1);

scanf(“%s”,&p[i]);

printf(“enter process time”);

scanf(“%d”,&pt[i]);

}

 

wt[0]=0;

for(i=1;i<n;i++)

{

wt[i]=wt[i-1]+et[i-1];

tot=tot+wt[i];

}

 

BINUS (www.binus.ac.id) | www.skyconnectiva.com

Pertemuan 2 Operating System

Fendy Chandra – 1601221420

Pertemuan 2-1

Oke, ini minggu kedua gw belajar OS di kelasnya ko Sky. Materi hari ini ada File System sama Process and Threads. Pertama yang kita bahas File System dulu ya…

Nah sebenernya file system itu apa sih?
File system (FS) itu semacem sistem yang gunanya buat mengorganisir dan me-manage akses dari komputer (hardware) ke data, nah bagian komputer yang diatur sama si FS itu adalah secondary storage. FS sendiri punya metadata yang isinya:

  1. Owner & Group invitation
  2. Time
  3. Permission (isinya semacem hak akses dari User (yang punya file), Group (sekumpulan user), sama Other)

Di FS, permission buat setiap komponen UGO (User-Group-Other) ada 3, yaitu buat Read, Write, sama Execute (disingkat RWX).

Ada beberapa FS yang terkenal, misalnya UFS, NTFS, HFS, sama FAT32.

Nah yang bakal dibahas lebih lanjut disini cuma 1, yaitu si UFS (Unix File System). Di UFS, semua isinya file, ga ada file exenya. Nah didalemnya ada 5 tipe file dasar, yaitu:

  1. Regular
  2. Directory (buat folder)
  3. Link (buat shortcut, ada hardlink sama softlink, bakal dibahas belakangan)
  4. Special File
  5. Named pipes (buat komunikasi data dari 1 tempat ke tempat lain)

Regular file ntu maksudnya dia semacem file biasa (oke, ini cuma translate-an namanya doang). Biasanya sih beberapa OS make ekstensi khusus buat interpret filenya. Isinya Regular file bisa ASCII ato binary.

Kalo special file ntu maksudnya dia semacem file yang punya fungsi khusus. Special file dibagi dua: Block Special (berasosiasi sama disk), sama Character Special (buat komunikasi dengan device tertentu, misalnya konsol, printer, dll.)

Soft link ntu maksudnya semacem shortcut yang gunanya buat menghubungkan file system yang berbeda, kalo Hard link kebalikannya, dia menghubungkan file system yang sama.

Operasi file di FS sendiri ada beberapa:

  • Create, buat bikin file baru
  • Delete, buat ngapus file
  • Open, buat buka file
  • Set attribute, buat nge-set attribute file
  • Close, buat nutup file
  • Read, buat baca file
  • Write, buat nulis (ngedit) file
  • Rename, buat namain ulang file
  • Append, buat nambah isi file
  • Seek, buat nyari file
  • Get attributes, buat dapetin attribute file

Kalo di directory ada juga beberapa operasi:

  • Create, buat bikin directory baru
  • Delete, buat apus directory
  • Opendir, buat buka directory
  • Closedir, buat nutup directory
  • Rename, buat namain ulang directory
  • Link, buat ngehubungin beberapa directory
  • Unlink, buat mutusin hubungan beberapa directory
  • Readdir, buat baca directory

Kira-kira ini yang dibahas di sesi pertama kemaren. Oh iya, abis materi ini kita ada semacem diskusi kelompok soal materi OS juga, disini kita dibagi jadi 9 kelompok. Pertanyaannya kira-kira ini:

  1. Sebutkan OS yang kamu ketahui!
  2. Sebutkan FS yang disupport oleh OS yang kamu sebut di no 1!
  3. Jelasin yang kamu tahu soal dual booting!
  4. Apa yang dimaksud thread dan process?
  5. Kalo kamu bisa bikin OS sendiri, inovasi apa yang mau kamu tambahin dari OS-OS yang sekarang udah ada?

Pertemuan 2-2

Kelar diskusi sama break, kita lanjut bahas thread sama process…

Pertama, kita belajar tentang bedanya program sama process. Program ntu adalah sekumpulan instruksi buat ngelakuin suatu task tertentu, nah kalo process ntu adalah eksekusi dari sebuah process. Jadi beda ya mereka J

Nah sebuah process ntu muncul ga langsung begitu aja, ada beberapa event yang bisa bikin terjadinya process:

  • Inisialisasi system
  • Eksekusi dari process creation system call (fork())
  • User request buat ngebikin process baru
  • Inisisasi batch job

Nah di dalem process ini ada yang namanya 5-state process model, kira-kira bentuknya mirip sama cara kerja Android. Gambarnya bisa diliat dibawah:

11

Nah dalam Process ada juga yang namanya suspended process, maksudnya dia semacem proses yang disuspend/dikirim ke background. Penyebab process bisa disuspend ada beberapa macem, misalnya swapping, other OS reason, Interactive user request, timing, sama parent process request.

Selain ntu, ada juga yang namanya process table, yaitu tempat process dilakuin. Process table punya beberapa atribut, kayak process ID (PID), process state, sama lokasi di memory.

Eksekusi program sendiri dibagi 2, yaitu user mode sama system mode. User mode punya priviledge yang lebih rendah, biasanya user program jalannya pake mode ini. Kalo system mode punya lebih banyak priviledge, dan biasanya terletak di Kernelnya OS.

Nah process ini pada akhirnya bakal mati (terminated). Process termination sendiri ada 4 macem:

  1. Normal exit
  2. Eror exit
  3. Fatal error
  4. Killed by another process

2 tipe yang pertama sifatnya volunterm 2 sisanya involunter.

Termination sendiri ada beberapa penyebabnya:

  • Normal completion
  • Time limit exceeded
  • Memory unavailable
  • Bounds violation
  • Protection error
  • Arithmetic error
  • Time overrun
  • I/O failure
  • Invalid instruction
  • Priviledged instruction
  • Data misuse
  • OS intervention
  • Parentnya udah terminate, jadi child processnya ikut keterminate
  • Parent request

Kira-kira kemaren itu yang kita bahas. Sama kalo gasalah kita belajar sedikit tentang fork() sama system().

BINUS (www.binus.ac.id) | www.skyconnectiva.com

Pertemuan 1 Operating System

Fendy Chandra – 1601221420

 

Pertemuan 1-1: Computer System Overview

Di sesi ini, intinya yang kita pelajari adalah tentang garis besar sistem komputer, kayak elemen-elemen dasarnya, instruction cycle, interupsi, memory, sama I/O types.  Entah kenapa rasanya beberapa materi yang dipelajari disini udah pernah dipelajarin waktu semester awal dulu, tapi ya sudah lah ya :v

Bahasan pertama di pertemuan pertama kemaren adalah tentang Operating System (OS), yang semacem Windows, iOS, Android dan semua kawannya itu lah. Kalau secara teori, OS itu tugasnya buat ngelola resource yang ada didalam komputer, nyediain User Interface (UI), sama ngatur semua memory sekunder dan semua hardware input/output yang dipasang ke komputer.

Nah didalam sistem komputer ini ada 4 elemen dasar, yaitu prosesor, main memory, I/O modules, sama system bus.

Ada juga yang namanya arsitektur komputer, yang kira-kira bisa diliat di gambar ini:

01

Nah didalam sistem komputer ini, ada yang namanya instruction cycle, isinya ngegambarin apa-apa aja yang dikerjain komputer waktu ada instruksi (inputan) yang diterima dari user. Instruction Cycle yang paling simpel tahapannya cuma:

  1. START, jadi komputernya baru mulai nerima instruksi
  2. FETCH NEXT INSTRUCTION, komputer ngambil instruksi berikutnya dari memori
  3. EXECUTE INSTRUCTION, inputan yang udah diterima dari user dieksekusi
  4. HALT, komputernya selesai ngelakuin apa yang diperintahkan user.

Tipe-tipe instruksi yang bisa diterima komputer ada processor-memory (buat transfer data antara prosesor sama memori), processor-I/O (data ditransfer dari/ke peripheral), data processing (bisa berupa perhitungan aritmatika atau logika), dan control (mengubah urutan eksekusi).

Untuk bagannya bisa diliat di sini:

02

Nah di dalam eksekusi instruksi, ada juga siklusnya sendiri. Ada 2 macam siklus eksekusi, yaitu pipelining dan Superscalar. Siklus pipelining punya 3 tahapan, yaitu Fetch (ngambil perintah), Decode (baca perintahnya), sama Execute (lakukan perintahnya). Siklus superscalar sebenernya hampir sama kayak pipelining, cuma ada holding buffer buat nampung instruksi-instruksi yang udah di-decode. Bagan buat 2 siklus ini bisa diliat di bawah:

03

Nah, kelar bahas eksekusi, lanjut ke interrupt. Simpelnya, interupsi itu prinsipnya sama kayak interupsi yang ada di rapat-rapat itu (yang ada orang nyela pembicaraan pas lagi ada bahasan tertentu), jadi ada semacam event tertentu di luar proses yang lagi jalan yang ngaruh ke urutan eksekusi instruksi. Nah, kalo dalam eksekusi komputer, ada 4 macem interupsi, yaitu:

  1. Program
  2. Timer
  3. I/O
  4. Hardware failure

Sebenernya interupsi ini bagus buat meningkatkan efisiensi pemrosesan, soalnya dia memungkinkan prosesor buat ngelakuin instruksi lain selama operasi input/output lagi diproses. Nah supaya ini bisa terjadi, ada program yang namanya interrupt handler. Kalau butuh gambar soal interupsi ini bisa diliat dibawah:

05                                                   04

Interupsi udah, sekarang lanjut ke memory. Memory sendiri ada beberapa tingkatan berdasarkan kecepatannya (bisa diliat di gambar dibawah, makin keatas makin cepet). Intinya, makin cepet sebuah memori, makin berkurang tingkat keamanannya, jadi makin lambat memorinya makin aman juga memorinya. Jadi pilih memori yang mau dipakai sesuai sama kebutuhan juga, jangan asal ngincer cepetnya aja :v

 

10

Nah didalam main memory, ada bagian yang namanya cache (entah cara bacanya gimana, ada yang bilangnya “cas”, ada juga yang bilangnya “kech”, gatau mana yang bener, tapi yaa kira-kira ga jauh-jauh dari situ lah). Nah cache ini mempercepat kecepatan memori. Yang paling sering dialamin sih pas lagi browsing, biasanya website yang sering kita buka bakalan lebih cepet loadnya daripada yang baru pertama kali dibuka, nah ini gara-gara kita udah nyimpen cache dari web yang pernah kita buka.

Cache sendiri ada 3 macem, yaitu L1, L2, sama L3.

Pertemuan 1-2: Operating System Overview

Kayak matkul 4 SKS yang lain, di OS ada 2 slide tiap pertemuannya (entah musti senang ato sedih :v). Jadi abis kelar slide yang pertama tadi, kita lanjut bahas tentang OS.

OS ini sebenernya adalah program yang gunanya ngatur jalannya aplikasi/program lain dan sebagai interface antara aplikasi sama hardware. Jadi, kalo ga ada OS kita ga bisa jalanin program/aplikasi lain.

OS ini punya 3 tujuan utama:

  1. Convenience, soalnya kalo ada OS komputer jadi lebih enak buat dipake
  2. Efficiency, soalnya OS ngatur penggunaan resource secara seefisien mungkin
  3. Ability to evolve, jadi OS ini bisa terus-terusan dikembangin tanpa ngaruhin fungsi-fungsi yang udah ada.

Di dalam OS ini ada juga 7 konsep dasar:

  1. Proses
  2. Space alamat
  3. File
  4. Input/Output
  5. Proteksi
  6. Shell
  7. Harus punya memori yang gede, hardware buat proteksi, disks, sama virtual memory.

OS ini punya beberapa struktur, tapi buat pertemuan kemaren baru 1 yang dibahas (yang “katanya” paling basic), namanya struktur monolitik. Di struktur ini, ada main program yang manggil prosedur yang dibutuhkan, service procedure yang ngerjain system call, sama utility procedure yang ngebantuin service procedure.

Gambar struktur monolitik bisa diliat di bawah:

06

OS juga bisa dianggap sebagai sistem berlapis (layered), yang urutannya dari layer 5 sampe layer 0, yang punya tugas masing-masing.

07

Di dalam OS, ada bagian inti yang “kata ko Sky” paling susah dibikin, namanya Kernel. Isinya si Kernel  ini kebanyakan fungsi-fungsi yang paling sering dipake sama OS. Intinya kalo ga ada Kernel ini gabakal jadi dah OSnya :v

OS sendiri udah ngalamin perkembangan yang jauh dibandingin waktu masih jaman awal-awalnya dulu. Kira-kira begini garis besar perkembangannya:

  1. Sebelon ada OS, yang dipake namanya Serial Processing. Disini mesinnya masih dikendaliin pake konsol.
  2. Simple Batch System, disini ada software yang namanya monitor, fungsinya buat ngelompokin proses-proses tertentu ke dalam batch-batch tertentu. Supaya kita bisa ngasih instruksi ke monitor, kita perlu make bahasa special yang namanya Job Control Language (JCL).

 

Nah dalam OS ada prinsip uniprogramming dan multi programming (gambarnya bisa diliat dibawah). Kalo pake uniprogramming, artinya kita Cuma ngejalanin 1 program aja, nah sebaliknya kalo pake multiprogramming, kita bisa ngejalanin beberapa program dalam 1 komputer (tapi pakenya ganti-gantian juga yaa). Nah prinsip multi programming ini dipake kalo kita perlu ngehandle beberapa tugas yang interaktif, supaya bisa jalan dengan bener kita pake time sharing.

09

08

Nah disini ada juga istilah process, artinya program yang lagi dijalanin (bisa diliat juga kok kalo kita buka Task Manager di Windows). Nah process ini bakal makan memory yang ada di dalam RAM. Jadi kalo komputer/laptop kita kecil otomatis kita ga bisa buka terlalu banyak program sekaligus (ato yang kegedean juga gabisa dibuka sih). Nah, buat ngatasin ini kita bisa beli RAM baru (kalo ada duit), ato cara hematnya bisa pake yang namanya Virtual Memory. Prinsipnya VM adalah ngambil sebagian dari memori Hardisk buat dipake sebagai ‘RAM’ tambahan. Walopun cara ini lebih hemat dibandingin beli RAM baru, tapi bisa dibilang pake VM lebih lambat daripada pake RAM beneran.

Pertemuan pertama kemaren “cuma” 2 materi ini “aja” yang dibahas, jadi kita cukupkan sampai sekian dulu yaa. Minggu depan bakal dipost lagi materi buat pertemuan kedua.

BINUS (www.binus.ac.id) | www.skyconnectiva.com