Sabtu, 18 Desember 2021

Nama : Ariyadi Dwi Saputra

Kelas : IF20C

NPM : 20312084 


IMPLEMENTASI ALGORITMA DIVIDE AND CONQUER PADA SORTING DAN SEARCHING

 

1.     Insertion sort

Salah satu algoritma sorting yang paling sederhana adalah insertion sort. Ide dari algoritma ini dapat dianalogikan seperti mengurutkan kartu. Penjelasan berikut ini menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu. Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja ini sebagai meja pertama, disusun dari kiri ke kanan dan atas ke bawah. Kemudian kita mempunyai meja yang lain, meja kedua, dimana kartu yang diurutkan akan diletakkan. Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan pada meja kedua. Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang berada pada meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan. Proses tersebut akan berlangsung hingga seluruh kartu pada meja pertama telah diletakkan berurutan pada meja kedua. Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan (meja kedua). Elemen pertama diambil dari bagian array yang belum diurutkan dan kemudian diletakkan sesuai posisinya pada bagian lain dari array yang telah diurutkan. Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.

Algoritmanya : 


2.     Selection sort

Jika anda diminta untuk membuat algoritma sorting tersendiri, anda mungkin akan menemukan sebuah algoritma yang mirip dengan selection sort. Layaknya insertion sort, algoritma ini sangat rapat dan mudah untuk diimplementasikan. Mari kita kembali menelusuri bagaimana algoritma ini berfungsi terhadap satu paket kartu. Asumsikan bahwa kartu tersebut akan diurutkan secara ascending. Pada awalnya, kartu tersebut akan disusun secara linier pada sebuah meja dari kiri ke kanan, dan dari atas ke bawah. Pilih nilai kartu yang paling rendah, kemudian tukarkan posisi kartu ini dengan kartu yang terletak pada pojok kiri atas meja. Lalu cari kartu dengan nilai paling rendah diantara sisa kartu yang tersedia. Tukarkan kartu yang baru saja terpilih dengan kartu pada posisi kedua. Ulangi langkah – langkah tersebut hingga posisi kedua sebelum posisi terakhir dibandingkan dan dapat digeser dengan kartu yang bernilai lebih rendah.

Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.

Algoritmanya :

3.     Quick sort

Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini juga berdasar pada pola divide-and-conquer. Berbeda dengan merge sort, algoritma ini hanya mengikuti langkah – langkah sebagai berikut :

1. Divide

Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r] dimana setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan setiap elemen pada A[q+1…r] adalah lebih besar atau sama dengan elemen pada A[q]. A[q] disebut sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian dari prosedur pemisahan

2. Conquer

Mengurutkan elemen pada sub-rangkaian secara rekursif

Pada algoritma quicksort, langkah “kombinasi” tidak di lakukan karena telah terjadi pengurutan elemen – elemen pada sub-array

Algoritmanya :

4.     Counting sort

Adalah sebuah algoritma sorting linear yang digunakan untuk mengurutkan ‘item’ ketika urutannya telah ditentukan dan memiliki panjang yang terbatas. Bilangan interval yang telah tetap, katakana k1 ke k2 adalah contoh dari ‘item’ tersebut. Counting sort sebenarnya merupakan metode pengurutan yang memanfaatkan index variabel array. Hanya effektif pada data yang nilainya kecil.

Algoritma ini diproses dengan mendefinisikan sebuah hubungan urutan antara ‘item’ yang akan disorting. Katakana ‘item’ yang akan disorting adalah variable A. Maka, terdapat sebuah array tambahan dengan ukuran yang serupa dengan array A. katakana array tersebut adalah array B. untuk setiap element di A, sebut e, algoritma ini menyimpan jumlah ‘item’ di A lebih kecil dari atau sama dengan e di B(e). jika hasil sorting yang terakhir disimpan di array C, maka untuk masing-masing e di A, dibuat dalam arah yang sebaliknya, yaitu C[B(e)]=e. setelah step di atas, niali dari B(e) berkurang dengan 1.

Algoritma ini membuat 2 passover A dan passover B. Jika ukuran dari range k lebih kecil dari ukuran input n, maka time complexity = O(n). perhatikan juga bahwa algoritma ini stabil yang berarti bahwa sambungan diselesaikan dengan langsung mengabarkan element-element yang muncul pertama kali.

Adapun syarat algoritma ini berjalan dengan baik ialah:

1.      Data harus bilangan bulat yang bernilai lebih besar atau sama dengan nol

2.      Range data diketahui

Ada 3 macam array yang terlibat:

1.      Array untuk mengisi bilangan yang belum diurutkan.

2.      Array untuk mengisi frekuensi bilangan itu, sekaligus sebagai penghitung kejadian.

3.      Array untuk mengisi bilangan yang sudah diurutkan.

Algoritmanya :



5.     Radix sort

Radix sorting bisa digunakan ketika masing-masing universal element bisa dilihat sebagai sebuah urutan digit (atau huruf atau symbol lainnya). Sebagai contoh, kita bisa membuat masing-masing bilangan bulat antar 0 sampai 99 sebagai sebuah urutan dengan dua digit (seperti “05”). Untuk menyorting sebuah array dari angka 2-digit, algoritma ini membuat dua ‘passing’ sorting melalui array tersebut. Pada ‘passing’ pertama, element array disorting pada least significant decimal digit. Kunci utama dari radix sort adalah pada passing yang kedua. Hasilnya, setelah kedua passing melewati array tersebut, data yang terisi telah disorting.

Algoritmanya :






 

6.     Linear searching

Algoritma pencarian secara linear adalah algoritma untuk mencari sebuah nilai pada table sambarang dengan cara melakukan pass atau transversal. Transversal dari awal sampai akhir table. Ada dua macam cara pencarian pada table. Algoritma mempunyai dua jenis metode yaitu dengan Boolean dan tanpa Boolean.

 





Algoritma di atas melakukan pengulangan sampai i sama dengan Nmax (ukuran tabel) atau harga value dalam tabel sudah ditemukan. Kemudian harga i di-assign ke dalam variable idx. Elemen terakhir diperiksa secara khusus.



Jumat, 10 Desember 2021

Sejarah, Definisi dan Cara Kerja Algoritma Divide and Conquer.

Nama : Ariyadi Dwi Saputra
Kelas : IF20C
Npm : 20312084


Sejarah Algoritma Devide dan Conquer

Awal dari algoritma ini utamanya adalah pengurangan dan penaklukan - masalah asli secara berturut-turut dipecah menjadi sub-masalah tunggal, dan memang dapat diselesaikan secara berulang.

Pencarian biner, algoritma penurunan-dan-taklukkan di mana sub-masalah berukuran kira-kira setengah dari ukuran aslinya, memiliki sejarah yang panjang. Sementara deskripsi yang jelas tentang algoritma pada komputer muncul pada tahun 1946 dalam sebuah artikel oleh John Mauchly, gagasan untuk menggunakan daftar item yang diurutkan untuk memfasilitasi pencarian tanggal kembali setidaknya sejauh Babylonia pada 200 SM.
Algoritma penurunan-dan-taklukkan kuno lainnya adalah algoritma Euclidean untuk menghitung pembagi persekutuan terbesar dari dua bilangan dengan mengurangi bilangan tersebut menjadi subproblem ekuivalen yang lebih kecil dan lebih kecil, yang berasal dari beberapa abad SM.

Contoh awal dari algoritma bagi-dan-taklukkan dengan beberapa subproblem adalah deskripsi Gauss tahun 1805 tentang apa yang sekarang disebut algoritma Cooley – Tukey fast Fourier transform (FFT), meskipun dia tidak menganalisis jumlah operasinya secara kuantitatif, dan FFT tidak tersebar luas sampai mereka ditemukan kembali lebih dari satu abad kemudian.

Algoritma D&C dua sub problem awal yang secara khusus dikembangkan untuk komputer dan dianalisis dengan benar adalah algoritma pengurutan gabungan, yang ditemukan oleh John von Neumann pada tahun 1945.

Contoh penting lainnya adalah algoritma yang ditemukan oleh Anatolii A. Karatsuba pada tahun 1960 [8] yang dapat mengalikan dua angka n-digit di O (n log 2 ⁡ 3) {\ displaystyle O (n ^ {\ log _ {2} 3} )} O (n ^ {\ log _ {2} 3}) operasi (dalam notasi Big O). algoritma ini menyangkal dugaan Andrey Kolmogorov tahun 1956 bahwa operasi Ω (n 2) {\ displaystyle \ Omega (n ^ {2})} \ Omega (n ^ {2}) diperlukan untuk tugas tersebut.
Sebagai contoh lain dari algoritma bagi-dan-taklukkan yang awalnya tidak melibatkan komputer, Donald Knuth memberikan metode yang biasanya digunakan kantor pos untuk merutekan surat: surat diurutkan ke dalam kantong terpisah untuk wilayah geografis yang berbeda, masing-masing kantong ini diurutkan sendiri ke dalam batch untuk sub-wilayah yang lebih kecil, dan seterusnya sampai dikirimkan. Ini terkait dengan jenis radix, yang dijelaskan untuk mesin sortir kartu berlubang sejak tahun 1929.

Definisi Algoritma Devide dan Conquer

Dalam ilmu komputer, Algoritma divide and conquer adalah paradigma desain algoritma yang didasarkan pada rekursi multi-cabang. Algoritme bagi-dan-taklukkan bekerja dengan memecah masalah secara rekursif menjadi dua atau lebih sub-masalah dari jenis yang sama atau terkait, hingga masalah ini menjadi cukup sederhana untuk diselesaikan secara langsung.

Cara Kerja Algoritma Devide dan Conquer

Contoh sederhana : Misalkan, untuk menghitung total jumlah dari bilangan-bilangan yang ada di dalam sebuah list, kita dapat menggunakan perulangan sederhana

nums = [1, 2, 3, 5, 6, 7, 19, 28, 58, 18, 28, 67, 13]
total = 0

for i in range(0, len(nums)):
    total = total + nums[i]

print(total) # 255

Algoritma perulangan yang digunakan pada kode di atas memang sederhana dan memberikan hasil yang benar, tetapi terdapat beberapa masalah pada kode tersebut, yaitu perhitungan dilakukan secara linear, yang menghasilkan kompleksitas O(n). Hal ini tentunya cukup ideal untuk ukuran list kecil, tetapi jika ukuran list menjadi besar (beberapa Milyar elemen) maka perhitungan akan menjadi sangat lambat. Kenapa perhitungannya menjadi lambat? Karena nilai dari total tergantung kepada kalkulasi nilai total sebelumnya. Kita tidak dapat melakukan perhitungan total dari depan dan belakang list sekaligus, sehingga kita dapat mempercepat perhitungan dua kali lipat. Dengan kode di atas, kita tidak dapat membagi-bagikan pekerjaan ke banyak pekerja / CPU!

Lalu apa yang dapat kita lakukan? Langkah pertama yang dapat kita lakukan adalah menerapkan teknik rekursif untuk membagi-bagikan masalah menjadi masalah yang lebih kecil. Jika awalnya kita harus menghitung total keseluruhan list satu per satu, sekarang kita dapat melakukan perhitungan dengan memecah-mecah list terlebih dahulu:

 def sums(lst):
    if len(lst) >= 1:
         return lst[0]

    mid = len(lst) // 2
    left = sums(lst[:mid])
    right = sums(lst[mid:])

    return left + right

print(sums(nums)) # 255 

Apa yang kita lakukan pada kode di atas?

  1. Baris if len(lst) >= 1 memberikan syarat pemberhentian fungsi rekursif, yang akan mengembalikan isi dari list ketika list berukuran 1 (hanya memiliki satu elemen).
  2. Baris mid = len(lst) // 2 mengambil median dari list, sebagai referensi ketika kita membagi list menjadi dua bagian.
  3. Baris left = sum(lst[:mid]) dan selanjutnya membagikan list menjadi dua bagian, dengan nilai mid sebagai tengah dari list.

Singkatnya, setelah membagikan list menjadi dua bagian terus menerus sampai bagian terkecilnya, kita menjumlahkan kedua nilai list tersebut, seperti pada gambar berikut:

Cara Kerja Algoritma Devide n Conquer

Minggu, 03 Oktober 2021

 

Combinatorial problems

Nama     : Ariyadi dwi saputra

 Kelas      : IF20C

NPM        : 20312084


Pengertian

Combinatorial merupakan suatu proses menemukan sejumlah alternatif penyelesaian suatu masalah diskrit (Syahputra, 2015:3). Berpikir kombinatorial merupakan kemampuan untuk mempertimbangkan seluruh alternatif yang mungkin pada suatu situasi tertentu. Anak saat memecahkan suatu 8 masalah akan menggunakan seluruh kombinasi atau faktor yang ada kaitannya dengan masalah tertentu.

 

Combinatorial problems (biasanya berdasarkan fungsi evaluasi heuristik ). Proses ini diulang sampaipuas. Untuk menghindari stagnasi dalam proses pencarian, hampir semua algoritma pencarian lokal menggunakan beberapa bentuk pengacakan, biasanya dalam menghasilkan posisi awal dan dalam banyak kasus juga dalam langkah pencarian. Ini mengarah pada konsep algoritma pencarian lokal stokastik (SLS).

 

 

 

Permasalahan Combinatorial problems

Permasalahan Combinatorial problems σ 1 , … , σ P ∈ S ( n ) dari jenis siklus yang diberikan μ ( 1 ) , … , μ ( P ) seperti yang

[6] σ 1 ⋯ σ P = 1 .
 
Penyelesaian Combinatorial problems

Sebuah interpretasi geometris dari masalah ini adalah untuk menghitung sampul bola S 2 = C P 1 bercabang di atas p poin yang diberikan dengan monodromy μ ( 1 ) , … , μ ( P ) . Teori karakter dasar dari S ( n ) memberi ( Jones 1998 )

[7] # { σ Saya ∈ C μ ( Saya ) , Π σ Saya = 1 } = kan Π F μ ( Saya ) kan Planch

di mana C μ μ danadalah kelas konjugsi dengan tipe siklus

F μ ( λ ) = | C μ | χ μ λ redup λ
 
Kelebihan
kombinatorik dapat digunakan melatih siswa untuk membilang, membuat perkiraan, menggeneralisasi, dan berpikir sistematis. Kombinatorik dapat diterapkan dalam 9 banyak bidang lainnya seperti programming, fisika, dan teknik serta bidang ilmu lainnya. Kombinatorik dapat menuntun siswa memahami kekuatan dan keterbatasan matematika. Selain itu kombinatorik memainkan peranan penting dalam ilmi-ilmu hitung.
 
Kekurangan
 Kesulitan siswa dalam menyelesaikan permasalahan kombinatorik disebabkan oleh kurangnya pemahaman siswa terhadap masalah yang diberikan. Students also had a difficulty when they were given the problems in the form of a real context related to permutation and combination  Sebagian guru kurang mengasah siswa dalam hal pemecahan masalah kombinatorik, guru cenderung mengikuti proses yang terdapat di dalam buku teks matematika siswa yang umumnya langsung menyajikan rumus permutasi dan kombinasi beserta contohnya.  dalam jurnalnya juga mengungkapkan analisis kesulitan siswa terhadap permasalahan kombinatorik: “....bahwa kebanyakan siswa mengalami kesulitan persoalan kombinatorik yang diberikan. Kesulitan memahami masalah berdampak pada kesulitan siswa merancang model matematika dari masalah itu. Kesulitan ini berlanjut terus sampai pada kesalahan mereka menentukan formula menyelesaikan masalah dan tentunya juga kesalahan pada jawaban persoalan yang diberikan.”
 

Selasa, 30 Maret 2021

 

Pengenalan Sinkronisasi Proses

Atas dasar sinkronisasi, proses dikategorikan sebagai salah satu dari dua jenis berikut:

  • Proses Independen : Eksekusi satu proses tidak memengaruhi eksekusi proses lainnya.
  • Proses Kerjasama : Eksekusi satu proses mempengaruhi pelaksanaan proses lainnya.

Masalah sinkronisasi proses muncul dalam kasus proses Koperasi juga karena sumber daya digunakan bersama dalam proses Koperasi.
 
Kondisi Balapan
Ketika lebih dari satu proses mengeksekusi kode yang sama atau mengakses memori yang sama atau variabel yang dibagi dalam kondisi itu ada kemungkinan bahwa output atau nilai variabel bersama salah sehingga semua proses melakukan perlombaan untuk mengatakan bahwa keluaran saya benar kondisi ini dikenal sebagai kondisi balapan. Beberapa proses mengakses dan memproses manipulasi atas data yang sama secara bersamaan, kemudian hasilnya bergantung pada urutan tertentu di mana akses tersebut terjadi.
Kondisi balapan adalah situasi yang mungkin terjadi di dalam bagian kritis. Hal ini terjadi jika hasil eksekusi beberapa utas di bagian kritis berbeda sesuai dengan urutan eksekusi utas.

Kondisi balapan di bagian kritis dapat dihindari jika bagian kritis diperlakukan sebagai instruksi atom. Selain itu, sinkronisasi utas yang tepat menggunakan kunci atau variabel atom dapat mencegah kondisi balapan.
 
Masalah Bagian Kritis

Bagian kritis adalah segmen kode yang dapat diakses hanya dengan satu proses dalam satu waktu. Bagian kritis berisi variabel bersama yang perlu disinkronkan untuk menjaga konsistensi variabel data.
masalah bagian kritis

Di bagian entri, proses meminta entri di Bagian Kritis.





Setiap solusi untuk masalah bagian kritis harus memenuhi tiga persyaratan:

  • Saling Pengecualian : Jika suatu proses sedang dijalankan di bagian kritisnya, maka tidak ada proses lain yang diizinkan untuk dijalankan di bagian kritis.
  • Kemajuan : Jika tidak ada proses yang dijalankan di bagian kritis dan proses lain menunggu di luar bagian kritis, maka hanya proses yang tidak dijalankan di bagian sisanya yang dapat berpartisipasi dalam memutuskan mana yang akan masuk ke bagian kritis berikutnya, dan pemilihan dapat tidak ditunda tanpa batas waktu.
  • Bounded Waiting : Harus ada batasan berapa kali proses lain diizinkan untuk memasuki bagian kritisnya setelah proses membuat permintaan untuk masuk ke bagian kritisnya dan sebelum permintaan tersebut dikabulkan.

 
Solusi
Peterson Solusi Peterson adalah solusi berbasis perangkat lunak klasik untuk masalah bagian kritis.

Dalam solusi Peterson, kami memiliki dua variabel bersama:

  • boolean flag [i]: Diinisialisasi menjadi FALSE, awalnya tidak ada yang tertarik masuk ke bagian kritis
  • int turn: Proses yang gilirannya memasuki bagian kritis.

peterson
 
Solusi Peterson mempertahankan ketiga kondisi:

  • Saling Pengecualian dijamin karena hanya satu proses yang dapat mengakses bagian penting kapan saja.
  • Kemajuan juga terjamin, karena proses di luar bagian kritis tidak menghalangi proses lain untuk memasuki bagian kritis.
  • Bounded Waiting dipertahankan karena setiap proses mendapat peluang yang adil.

     
    Kerugian dari Solusi Peterson

    • Ini melibatkan penantian yang sibuk
    • Dibatasi pada 2 proses.

     

    TestAndSet
    TestAndSet adalah solusi perangkat keras untuk masalah sinkronisasi. Di TestAndSet, kami memiliki variabel kunci bersama yang dapat mengambil salah satu dari dua nilai, 0 atau 1.

    0 Buka kunci
    1 Kunci
    

    Sebelum masuk ke bagian kritis, sebuah proses menanyakan tentang kunci. Jika terkunci, ia terus menunggu hingga menjadi gratis dan jika tidak terkunci, ia mengambil kunci dan menjalankan bagian kritis.



    Di TestAndSet, Saling pengecualian dan kemajuan dipertahankan tetapi menunggu terbatas tidak dapat dipertahankan.
     
    Pertanyaan: Fungsi enter_CS () dan leave_CS () untuk mengimplementasikan bagian kritis dari suatu proses direalisasikan menggunakan instruksi test-and-set sebagai berikut:

    int TestAndSet (int & kunci) {
        int inisial = kunci;
        kunci = 1;
        kembali awal;
    }
    
    batal enter_CS (X)
    {
      saat test-and-set (X);
    }
    
    batal cuti_CS (X)
    {
      X = 0;
    }
    

    Dalam solusi di atas, X adalah lokasi memori yang terkait dengan CS dan diinisialisasi ke 0. Sekarang, pertimbangkan pernyataan berikut:
    I. Solusi di atas untuk masalah CS adalah bebas-jalan buntu
    II. Solusinya adalah bebas kelaparan.
    AKU AKU AKU. Proses masuk CS dalam urutan FIFO.
    IV. Lebih dari satu proses dapat masuk CS secara bersamaan.
     
    Manakah dari pernyataan di atas yang BENAR?
    (A) I
    (B) II dan III
    (C) II dan IV
    (D) IV

    Klik di sini untuk Solusinya . Semaphores
     sejati

    Semafor adalah mekanisme pensinyalan dan utas yang menunggu di semafor dapat ditandai oleh utas lain. Ini berbeda dari mutex karena mutex hanya dapat ditandai oleh utas yang memanggil fungsi tunggu.

    Semaphore menggunakan dua operasi atom, tunggu dan sinyal untuk sinkronisasi proses.
    Semaphore adalah variabel integer, yang hanya dapat diakses melalui dua operasi wait () dan signal () .
    Ada dua jenis semaphore: Binary Semaphore dan Counting Semaphore

    • Semaphore Biner: Mereka hanya bisa 0 atau 1. Mereka juga dikenal sebagai kunci mutex, karena kunci dapat memberikan pengecualian timbal balik. Semua proses dapat berbagi semaphore mutex yang sama yang diinisialisasi ke 1. Kemudian, proses harus menunggu hingga kunci menjadi 0. Kemudian, proses dapat membuat mutex semaphore 1 dan memulai bagian kritisnya. Ketika menyelesaikan bagian kritisnya, itu dapat mengatur ulang nilai mutex semaphore menjadi 0 dan beberapa proses lain dapat memasuki bagian kritisnya.
    • Menghitung Semaphores: Mereka dapat memiliki nilai apa pun dan tidak dibatasi pada domain tertentu. Mereka dapat digunakan untuk mengontrol akses ke sumber daya yang memiliki batasan pada jumlah akses simultan. Semaphore dapat diinisialisasi ke jumlah instance sumber daya. Kapan pun sebuah proses ingin menggunakan sumber daya itu, ia memeriksa apakah jumlah instance yang tersisa lebih dari nol, yaitu, proses tersebut memiliki instance yang tersedia. Kemudian, proses dapat memasuki bagia

Kamis, 07 Januari 2021

Perbedaan Threads dan Processes



Apa itu Threads

Thread

    Adalah Unit dasar dari penggunaan CPU, Thread mengandung Thread ID, program counter, register set, dan stack. Sebuah thread berbagi code section, data section, dan sumber daya sistem operasi dengan thread lain yang dimiliki oleh proses yang sama. Thread juga sering disebut lightweight process. Sebuah proses tradisional atau heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Perbedaan antara proses dan thread tunggal dengan proses dan thread banyak adalah proses dengan thread yang banyak dapat mengerjakan lebih dari satu tugas pada satuan waktu.

Keuntungan penggunaan Thread

  • Tanggap
  • Pemberdayaan Resource
  • Ekonomis
  • Pemberdayaan Arsitektur Multiprocessor

Bentuk Threads

  • Single Thread 
    Processor hanya mengeksekusi satu thread saja pada satu waktu.
  • Multi Thread
    Processor hanya mengeksekusi sejumlah thread dalam satu waktu.

Apa itu Processes

Processes
    Adalah sebuah peristiwa adanya sebuah program yang dapat dieksekusi. Sebagai sebuah eksekusi proses, maka hal tersebut membutuhkan perubahan keadaan. Keadaan dari sebuah proses dapat didefinisikan oleh aktivitas proses tersebut. Suatu proses adalah lebih dari kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada program counter dan isi dari daftar prosesor register. Suatu proses umunya juga termasuk process stack, yang berisikan data temporer (parameter metoda, address yang kembali, dan variabel lokal) dan sebuah data section, yang berisikan variabel global.
Setiap proses mungkin menjadi satu dari beberapa state berikut, yaitu : 
  • New : Proses baru diciptakan
  • Ready : Proses menunggu untuk dilayani processor
  • Running : Proses sedang dijalankan
  • Waiting : Proses sedang menunggu suatu kondisi tertentu untuk bisa berjalan
  • terminated : Proses telah menyelesaikan eksekusi
Setiap proses direpresentasikan ada sistem operasi berdasarkan proses-control-block (PCB) nya.

Proses memiliki 2 karakteristik, tetapi dilakukan secara independen oleh sistem operasi : 
  • Resource Ownership (kepemilikan sumber daya)
    yaitu proses yang mempunyai ruang alamat virtual untuk menangani image proses yang didefinisikan dalam PCB.
  • Scheduling-execution (penjadwalan-eksekusi)
    Mengikuti suatu path eksekusi (trace), ada pergantian dari suatu proses ke lainnya unit dari kepemilikan sumber daya diacu sebagai proses atau task suatu thread yang salah dapat mengganggu thread lainnya didalam proses yang sama, karena thread dipakai di berbagai ruang memori virtual dan sumber daya lain yang sama.

Perbedaan Antara Threads dan Processes

  1. Membutuhkan waktu yang lebih sedikit untuk mengakhiri Thread daripada Process.
  2. Pembentukan Thread membutuhkan waktu yang lebih sedikit daripada Process.
  3. Lebih mudah dan cepat untuk melakukan switch antar Thread daripada Process.
  4. Thread menggunakan secara bersama ruang alamat dari proses yang penciptaanya. Proses memiliki ruang alamat sendiri-sendiri.
  5. Thread dapat saling komunikasi dengan Thread lain dalam satu Process. Namun antar Process harus menggunakan komunikasi antar Proses.
  6. Thread memiliki akses langsung ke segmen data dari prosesnya. Masing-masing Proses memiliki salinan segmen data dari parent Process nya.
  7. Thread hampir tidak memiliki overhead. Proses memiliki overhead.
  8. Thread dapat memiliki pengaruh kontrol yang besar terhadap Thread lain dalam satu proses. Proses hanya dapat mengedalikan proses anakannya.
  9. Perubahan pada Thread utama seperti pembatalan atau perubahan suatu prioritas dapat mempengaruhi tingkah laku Thread lain dalam satu proses. Perubahan pada parent Proses tidak mempengaruhi proses anakanyna.

Kesimpulan

Proses dan Thread merupakan 2 bagian yang saling berhubungan dan berkaitan. Suatu program yang sedang dieksekusi merupakan pengertian dari suatu proses. Proses membutuhkan sumber daya. Sistem operasi mengeksekusi proses dengan dua cara yaitu batch system yang mengeksekusi jobs dan time-shared system yang mengatur pengeksekusian program pengguna (user) atau tasks. Proses berisikan stack yang menyimpan alamat register dan juga alamat dari sebuah instruksi yang berisikan data-data yang dibutuhkan untuk instruksi selanjutnya. Program Counter, register set serta tacdk merupakan bagian dari thread. Thread berbagi code section, data section dan juga sumber daya sistem operasi dengan thread lain yang dalam proses yang sama. Kelebihan Thread antara lain responsif, berbagi sumberdaya, ekonomis, serta utilitas arsitektur mikroprosessor.


Rabu, 06 Januari 2021

 

SISD

SISD adalah singkatan dari 'Instruksi Tunggal dan Aliran Data Tunggal' . Ini mewakili organisasi dari satu komputer yang berisi unit kontrol, unit prosesor, dan unit memori.

Instruksi dijalankan secara berurutan, dan sistem mungkin atau mungkin tidak memiliki kemampuan pemrosesan paralel internal.

Kebanyakan komputer konvensional memiliki arsitektur SISD seperti komputer Von-Neumann tradisional.

Single Instruction Single Data menjadi model komputer yang dibuat oleh Von Neumann dimana ciri khasnya prosesor yang digunakan lebih dari satu buah. Konsepnya adalah setiap menjalankan skema aritmetika maupun logika hanya bisa dilakukan satu kali perhitungan saja. Ketika terjadi instruksi maka mesin komputer hanya bisa membaca data hanya sebanyak satu kali saja. Contoh dari komputer dari SISD adalah komputer mini dan juga PC.

Pemrosesan paralel, dalam hal ini, dapat dicapai dengan menggunakan beberapa unit fungsional atau dengan pemrosesan jalur pipa.

SISD
  1. Dimana,  CU  =   Unit Kontrol ,  PE  =   Elemen Pemrosesan ,  M  =  Memori  

Instruksi diterjemahkan oleh Control Unit dan kemudian Control Unit mengirimkan instruksi ke unit pemrosesan untuk dieksekusi.

Aliran Data mengalir antara prosesor dan memori secara dua arah.

Contoh:

Komputer, minikomputer, dan workstation generasi lama

    Software Requirements Specification for Aplikasi Sistem Informasi    Akademik Mahasiswa Berbasis Web   Version 1.0 appro...