Disusun Oleh :
RIZWAN GUSTAMA
NIM : 20180040068
Dosen Pengajar :
HERMANTO, M. Kom
1
KATA PENGANTAR
Dengan mengucapkan puji syukur kehadirat Tuhan Yang Maha Esa dan berkat rahmat
dan izinya sehingga tugas Makalah Mata Kuliah Organisasi dan Arsitektur Komputer yang
mengambil tema “Multiprocesing and alternative architecture” dapat kami selesaikan tepat
pada waktunya. Dalam penulisan Makalah ini tidak terlepas dari dukungan dan partisipasi dari
berbagai pihak. Sehubungan dengan hal itu, kami mengucapkan terima kasih kepada pihak-
pihak yang telah membantu dalam kegiatan ini.
Kami menyadari makalah ini masih jauh dari kesempurnaan oleh karena itu, kami
sangat mengharapkan masukan, kritik dan saran untuk kesempurnaan penulisan makalah ini
pada masa yang akan datang. Demikianlah Makalah yang dapat kami sajikan, mudah-mudahan
dapat bermanfaat bagi tim penulis khususnya dan pada pembaca umumnya.
Tim Penulis,
2
DAFTAR ISI
3
BAB I
PENDAHULUAN
mode dapat dibatasi hanya satu prosesor (baik prosesor tertentu, atau hanya satu
prosesor pada satu waktu), sedangkan kode pengguna-mode mungkin dijalankan dalam
setiap kombinasi prosesor. Sistem Multiprocessing sering difungsikan sebagai jalan
pemecahannya, tetapi fungsi ini terkadang cenderung kurang efisien dibandingkan dengan
sistem di mana semua CPU yang digunakan.
Dalam makalah ini tim penulis menyajikan beberapa ulasan singkat tentang
“Multiprocesing” secara terstruktur. Meskipun hanya ulasan singkat, tetapi tim penulis
berharap makalah ini dapat bermanfaat baik bagi pembaca maupun bagi penulis sendiri.
Arsitektur Komputer membahas hal-hal yang berkaitan dengan atribut-atribut
yang terlihat atau di pertimbangkan oleh pemrogram yang memiliki dampak langsung pada
eksekusi logis pada sebuah program. Dengan kata lain arsiterktur komputer membahas
masalah masalah yang berkaitan dengan dengan fungsi komponen komponen komputer.
Contoh atribut arsitektural adalah:
4
a. Set instruksi
b. Reprsentasi data atau jumlah bit yang digunakan untuk mempresentasikan jenis
data (missal: bilangan, karakter, dll)
c. Mekanisme input output (I/O)
d. Teknik pengalamatan memori
5
1.3 Tujuan Penulisan Makalah
Adapun yang menjadi tujuan penulis dalam penulisan makalah ini adalah :
6
BAB II
PEMBAHASAN
a. Peningkatan throughput.
7
Yang meningkat adalah peningkatan jumlah pekerjaan yang dapat dilakukan
dalam waktu tertentu.
b. Lebih ekonomis.
Dari pada sistem dengan banyak prosesor tunggal, karena bisa berbagi memori,
storage, dan power supply.
c. Peningkatan kehandalan.
Jika pekerjaan terbagi rata, maka kegagalan salah satu prosesor bisa
ditanggulangi oleh prosesor-prosesor yang lain.
8
2.3.1.2 Symmentric Multiprocesing (SMP)
Setiap prosesor menjalankan salinan identik dari sistem operasi dan
banyak job yang dapat berjalan pada suatu waktu tanpa mengurangi
kinerja.
Keuntungan SMP:
Performance
Availability
Incremental growth
9
2.3.2.2 SIMD (Single Instruction on Multiple Data Stream)
Instruksi mesin tunggal Eksekusi dikendalikan secara
simultan Terdapat sejumlah elemen proses Setiap instruksi
dieksekusi dalam set data yang berbeda oleh proses yang berbeda
10
2.3.2.4 MIMD (Multiple Instruction on Multiple Data Stream)
Terdiri dari sejumlah set prosesor
Terdiri dari sejumlah set data yang berbeda
Secara simultan mengeksekusi urutan instruksi yang
berbeda Sifat komputer MIMD :
Mendistribusikan pemrosesan ke sejumlah prosesor
independen.
Membagikan sumber termasuk memori utama ke
prosesor independen.
Setiap prosesor menjalankan programnya sendiri. Setiap
prosesor berfungsi secara independen dan bersama-sama.
11
2.3.3 Berdasarkan kedekatan antar processor, dapat dibagi ke dalam :
2.3.3.1 Loosely Coupled
Setiap site memiliki processor, memori lokal dan clock sendiri namun
semua resource dapat diakses dari setiap site.
12
2.4 Penjadwalan Multiprocesing
2.4.1 Penjadwalan Assymmentric Multiprocesing (Penjadwalan ASMP) Pendekatan
pertama untuk penjadwalan prosesor jamak adalah penjadwalan asymmetric
multiprocessing atau biasa disebut juga sebagai penjadwalan master/slave.
Dimana pada metode ini hanya satu prosesor (master) yang menangani semua
keputusan penjadwalan pemrosesan M/K, dan aktivitas sistem lainnya dan
prosesor lainnya (slave) hanya mengeksekusi proses. Metode ini sederhana karena
hanya satu prosesor yang mengakses struktur data sistem dan juga mengurangi
data sharing.
Dalam teknik penjadwalan master/slave, satu prosesor menjaga status
dari semua proses dalam sistem dan menjadwalkan kinerja untuk semua prosesor
slave. Sebagai contoh, prosesor master memilih proses yang akan dieksekusi,
kemudian mencari prosesor yang available, dan memberikan instruksi start
processor. Prosesor slave memulai eksekusi pada lokasi memori yang dituju. Saat
slave mengalami sebuah kondisi tertentu seperti meminta M/K, prosesor slave
memberi interupsi kepada prosesor master dan berhenti untuk menunggu perintah
selanjutnya. Perlu diketahui bahwa prosesor slave yang berbeda dapat ditujukan
untuk suatu proses yang sama pada waktu yang berbeda.
13
Gambar diatas mengilustrasikan perilaku dari multiprocessor
yang digunakan untuk multiprogramming. Beberapa proses terpisah dialokasikan
didalam memori. Ruang alamat proses terdiri dari halaman-halaman sehingga
hanya sebagian saja dari proses tersebut yang berada dalam memori pada satu
waktu. Hal ini memungkinkan banyak proses dapat aktif dalam sistem.
14
2.5 Affinity dan Load Balancing
2.5.1 Affinity
Data yang paling sering diakses oleh beberapa proses akan memadati cache pada
prosesor,sehingga akses memori yang sukses biasanya terjadi di memori cache.
Namun, jika suatu proses . berpindah dari satu prosesor ke prosesor lainnya akan
mengakibatkan isi dari cache memori yang dituju menjadi tidak valid, sedangkan
cache memori dari prosesor asal harus disusun kembali populasi datanya. Karena
mahalnya invalidating dan re-populating dari cache, kebanyakan sistem SMP
mencoba untuk mencegah migrasi proses antar prosesor sehingga menjaga proses
tersebut untuk berjalan di prosesor yang sama. Hal ini disebut afinitas prosesor
(processor affinity).
Soft affinity yang memungkinkan proses berpindah dari satu prosesor ke prosesor
yang lain, dan Hard affinity yang menjamin bahwa suatu proses akan berjalan pada
prosesor yang sama dan tidak berpindah. Contoh sistem yang menyediakan system
calls yang mendukung hard affinity adalah Linux.
15
prosesor untuk memaksimalkan keuntungan memiliki multiprocessor. Jika tidak,
mungkin satu atau lebih prosesor idle disaat prosesor lain harus bekerja keras
dengan workload yang tinggi. Load balancing adalah usaha untuk menjaga
workload terdistribusi sama rata untuk semua prosesor dalam sistem SMP. Perlu
diperhatikan bahwa load balancing hanya perlu dilakukan pada sistem dimana
setiap prosesor memiliki antrian tersendiri (private queue) untuk proses-proses
yang berstatus ready. Pada sistem dengan antrian yang biasa (common queue),
load balancing tidak diperlukan karena sekali prosesor menjadi idle, prosesor
tersebut segera mengerjakan proses yang dapat dilaksanakan dari antrian biasa
tersebut. Perlu juga diperhatikan bahwa pada sebagian besar sistem operasi
kontemporer mendukung SMP, jadi setiap prosesor bisa memiliki private queue.
Ada dua jenis load balancing, yakni:
• Push migration, pada kondisi ini ada suatu task spesifik yang secara
berkala memeriksaload dari tiap-tiap prosesor. Jika terdapat
ketidakseimbangan, maka dilakukan perataan dengan
memindahkan( pushing) proses dari yang kelebihan muatan ke
prosesor yang idle atau yang memiliki muatan lebih sedikit.
• Pull migration, kondisi ini terjadi saat prosesor yang idle menarik
(pulling) proses yang sedang menunggu dari prosesor yang sibuk.
Kedua pendekatan tersebut tidak harus mutually exclusive dan
dalam kenyataannya sering diimplementasikan secara paralel pada
sistem load-balancing.
16
non- idle sedangkan pada sistem yang lain, proses dipindahkan
hanya jika terjadi ketidakseimbangan yang besar antara prosesor.
2.6 Multithreading
Sistem SMP mengizinkan beberapa thread untuk berjalan secara bersamaan
dengan menyediakan banyak physical processor. Ada sebuah strategi alternatif yang lebih
cenderung untuk menyediakan logical processor daripada physical processor. Strategi ini
dikenal sebagai SMT (Symetric Multithreading). SMT juga biasa disebut teknologi
hyperthreading dalam prosesor intel.
Ide dari SMT adalah untuk menciptakan banyak logical processor dalam suatu
physical processor yang sama dan mempresentasikan beberapa prosesor kepada sistem
operasi. Setiap logical processor mempunyai state arsitekturnya sendiri yang mencakup
general purpose dan machine state register. Lebih jauh lagi, setiap logical prosesor
bertanggung jawab pada penanganan interupsinya sendiri, yang berarti bahwa interupsi
cenderung dikirimkan ke logical processor dan ditangani oleh logical processor bukan
physical processor. Dengan kata lain, setiap logical processor men- share resource dari
physical processor-nya, seperti cache dan bus.
Gambar di atas mengilustrasikan suatu tipe arsitektur SMT dengan dua physical
processor dengan masing-masing punya dua logical processor. Dari sudut pandang sistem
operasi, pada sistem ini terdapat empat prosesor.
17
Perlu diketahui bahwa SMT adalah fitur yang disediakan dalam hardware, bukan
software, sehingga hardware harus menyediakan representasi state arsitektur dari setiap
logical processor sebagaimana representasi dari penanganan interupsinya. Sistem operasi
tidak perlu didesain khusus jika berjalan pada sistem SMT, akan tetapi performa yang
diharapkan tidak selalu terjadi pada sistem operasi yang berjalan pada SMT. Misalnya,
suatu sistem memiliki 2 physical processor, keduanya idle, penjadwal pertama kali akan
lebih memilih untuk membagi thread ke physical processor daripada membaginya ke
logical processor dalam physical processor yang sama, sehingga logical processor pada
satu physical processor bisa menjadi sibuk sedangkan physical processor yang lain
menjadi idle.
2.7 Multicore
Multicore microprocessor adalah kombinasi dua atau lebih prosesor independen
ke dalam sebuah integrated circuit (IC). Pada umumnya, multicore mengizinkan
perangkat komputasi untuk memeragakan suatu bentuk thread-level paralelism (TLP)
tanpa mengikutsertakan banyak prosesor terpisah. TLP lebih dikenal sebagai chip-level
multiprocessing.
adalah suatu teknik yang digunakan dalam sistem pembagian memori terdistribusi
dan multiprocessor yang ditujukan untuk mendapatkan koherensi pada cache. Hal
18
ini dikarenakan sinyal antara CPU yang berbeda mengalir pada jarak yang lebih
dekat, sehingga kekuatan sinyal hanya berkurang sedikit. Sinyal dengan kualitas
baik ini memungkinkan lebih banyak data yang dikirimkan dalam satu periode
waktu dan tidak perlu sering di-repeat .
Secara fisik, desain CPU multicore menggunakan ruang yang lebih kecil pada PCB
(Printed Circuit Board) dibandingkan dengan desain multichip SMP.
Desain multicore memiliki resiko design error yang lebih rendah daripada desain
single-core
19
Langkah-langkah dalam mendesain aplikasi paralel adalah sebagai berikut:
2.7.3.1 Partioning
Tahap desain ini dimaksudkan untuk membuka peluang awal
pengeksekusian secara paralel. Fokus dari tahap ini adalah mempartisi
sejumlah besar tugas dalam ukuran kecil dengan tujuan menguraikan
suatu masalah menjadi butiran- butiran kecil.
2.7.3.2 Communication
Tugas-tugas yang telah terpartisi diharapkan dapat langsung dieksekusi
secara parallel. Akan tetapi, pada umumnya tidak bisa, karena eksekusi
berjalan secara independen. Pelaksanaan komputasi dalam satu tugas
membutuhkan asosiasi data antara masing-masing tugas. Kemudian
data harus berpindah-pindah antar tugas dalam melangsungkan
komputasi. Aliran informasi inilah yang dispesifikasi dalam fase
communication.
2.7.3.3 Agglomeration
Pada tahap ini kita pindah dari sesuatu yang abstrak ke sesuatu yang
konkret. Kita tinjau kembali kedua tahap di atas dengan tujuan untuk
mendapatkan algoritma pengeksekusian yang lebih efisien. Kita
pertimbangkan juga apakah perlu untuk menggumpalkan (agglomerate)
tugas-tugas pada fase partition menjadi lebih sedikit, dengan masing-
masing tugas berukuran lebih besar.
2.7.3.4 Mapping
Dalam tahap yang keempat dan terakhir ini, kita
menspesifikasi di mana tiap tugas akan dieksekusi. Masalah
mapping ini tidak muncul pada uniprocessor yang
menyediakan penjadwalan tugas.
20
server dan application server mempunyai throughput yang
lebih baik.
2.8 Pengertian Architecture
Architecture Adalah konsep perencanaan dan struktur pengoperasian dasar dari
suatu sistem komputer. Arsitektur komputer ini merupakan rencana cetak-biru dan
deskripsi fungsional dari kebutuhan bagian perangkat keras yang didesain (kecepatan
proses dan sistem interkoneksinya). Dalam hal ini, implementasi perencanaan dari
masing–masing bagian akan lebih difokuskan terutama, mengenai bagaimana CPU akan
bekerja, dan mengenai cara pengaksesan data dan alamat dari dan ke memori cache, RAM,
ROM, cakram keras, dll). Beberapa contoh dari arsitektur komputer ini adalah Arsitektur
von Neumann, CISC, RISC, blue gene, dll.
2.9 Interrupt
Interrupt adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler
berhenti sejenak untuk melayani interrupt tersebut. Program yang dijalankan pada saat
melayani interrupt disebut Interrupt Service Routine.
Seperti yang terlihat Gambar dibawah ini, sebuah program yang seharusnya
berjalan terus lurus, tiba-tiba terjadi interrupt dan harus melayani interrupt tersebut terlebih
dahulu hingga selesai sebelum ia kembali meneruskan pekerjaannya.
21
Proses yang dilakukan oleh mikrokontroler saat melayani interrupt adalah sebagai
berikut:
Instruksi terakhir yang sedang dijalankan diselesaikan terlebih dahulu
Program Counter (alamat dari instruksi yang sedang berjalan) disimpan ke stack
Interrupt Status disimpan secara internal
Interrupt dilayani sesuai peringkat dari interrupt (lihat Interrupt Priority)
Program Counter terisi dengan alamat dari vector interrupt (lihat Interrupt Vector)
Program Counter diisi dengan alamat yang tersimpan dalam stack pada saat
interrupt terjadi sehingga mikrokontroler kembali meneruskan program di lokasi saat
interrupt terjadi. Interrupt Status dikembalikan ke kondisi terakhir sebelum terjadi
interrupt
Set instruksi (instruction set) adalah sekumpulan lengkap instruksi yang dapat di
mengerti oleh sebuah CPU, set instruksi sering juga disebut sebagai bahasa mesin
(machine code), karna aslinya juga berbentuk biner kemudian dimengerti sebagai bahasa
22
assembly, untuk konsumsi manusia (programmer), biasanya digunakan representasi yang
lebih mudah dimengerti oleh manusia.
Sebuah instruksi terdiri dari sebuah opcode, biasanya bersama dengan beberapa
informasi tambahan seperti darimana asal operand-operand dan kemana hasil-hasil akan
ditempatkan. Subyek umum untuk menspesifikasikan di mana operand-operand berada
(yaitu, alamat-alamatnya) disebut pengalamatan
Pada beberapa mesin, semua instruksi memiliki panjang yang sama, pada mesin-
mesin yang lain mungkin terdapat banyak panjang berbeda. Instruksi-instruksi mungkin
lebih pendek dari, memiliki panjang yang sama seperti, atau lebih panjang dari panjang
word. Membuat semua instruksi memiliki panjang yang sama lebih muda dilakukan dan
membuat pengkodean lebih mudah tetapi sering memboroskan ruang, karena semua
instruksi dengan demikian harus sama panjang seperti instruksi yang paling panjang.
Missal instruksi dengan 2 alamat operand : ADD A,B A dan B adalah suatu alamat
register. Beberapa simbolik instruksi:
23
Cakupan jenis instruksi :
Data processing : Aritmetik (ADD, SUB, dsb); Logic (AND, OR, NOT, SHR,
dsb); konversidata
Data storage (Memory) : Transfer data (STOR, LOAD, MOVE, dsb)
Data movement : Input dan Output ke modul I/O
Program flow control : JUMP, HALT, dsb.
Bentuk instruksi:
Contoh:
A, B, C, D, E, T, Y adalah register
Program: Y = (A – B) / ( C + D × E)
SUB Y, A, B Y := A – B
MPY T, D, E T := D × E
ADD T, T, C T := T + C
DIV Y, Y, T Y := Y / T
Memerlukan 4 operasi
24
format ini masih digunakan di computer sekarang, untuk mengoprasikan lebih
sedikit register, tapi panjang program tidak bertambah terlalu banyak.
Contoh :
A, B, C, D, E, T, Y adalah register
Program: Y = (A – B) / ( C + D × E)
MOVE Y, A Y := A
SUB Y, B Y := Y – B
MOVE T, D T := D
MPY T, E T := T × E
ADD T, C T := T + C
DIV Y, T Y:= Y / T
Memerlukan 6 operasi
Contoh :
A, B, C, D, E, Y adalah register
Program: Y = (A – B) / ( C + D × E)
LOAD D AC := D
MPY E AC := AC × E
ADD C AC := AC + C
STOR Y Y := AC
LOAD A AC := A
SUB B AC := AC – B
DIV Y AC := AC / Y
STOR Y Y := AC
Memerlukan 8 operasi
25
o Format instruksi 0 alamat
Mempunyai bentuk umum : [OPCODE]. Terdiri dari semua alamat operand
implicit, disimpan dalam bentuk stack. Operasi yang biasanya membutuhkan 2
operand, akan mengambil isi stack paling atas dan dibawahnya missal : SUB yang
mempunyai arti dalam algoritmik : S[top]:=S[top-1]-S[top] dan arti dalam bentuk
penjelasan : kurangkan isi stack no2 dari atas dengan isi stack paling atas,
kemudian simpan hasilnya di stack paling atas, untuk mengoprasikan ada beberapa
instruksi khusus stack PUSH dan POP.
Contoh :
A, B, C, D, E, Y adalah register
Program: Y = (A – B) / ( C + D × E)
PUSH A S[top] := A
PUSH B S[top] := B
SUB S[top] := A – B
PUSH C S[top] := C
PUSH D S[top] := D
PUSH E S[top] := E
MPY S[top] := D × E
ADD S[top] := C + S[top]
DIV S[top] := (A – B) /S[top]
POP Y Out := S[top]
Memerlukan 10 operasi
Berikut ini merupakan karakteristik set instruksi yang digunakan pada beberapa
computer yang memiliki arsitektur CISC
26
pengolahan Disamping itu, CPU mempunyai beberapa alat penyimpan yang berukuran
kecil yang disebut register. Terdapat empat komponen utama penyusun CPU, yaitu
Arithmetic and Logic Unit atau sering disingkat ALU saja dalam bahasa
Indonesia kira-kira berarti Unit Logika dan Aritmatika. Bagian ini mempunyai tugas
utama untuk membentuk berbagai fungsi pengolahan data komputer. Sering juga
disebut sebagai bahasa mesin, karena terdiri dari berbagai instruksi yang
menggunakan bahasa mesin.
ALU sendiri juga masih terbagi menjadi dua komponen utama, yaitu
arithmetic unit (unit aritmatika), bertugas untuk menangani pengolahan data yang
berhubungan dengan perhitungan, dan boolean logic unit (unit logika boolean),
bertugas menangani berbagai operasi logika.
• Control Unit
• CPU Interconections
27
3. dan sistem-sistem lainnya.
28
Memory eksternal adalah memory tambahan yang berfungsi untuk menyimpan
menyimpan data atau program.Konsep dasar memori eksternal adalah menyimpan
data bersifat tetap , baik pada saat komputer aktif atau tidak.Memori eksternal
berfungsi untuk melakukan operasi penulisan ,pembacaan,dan penyimpanan data di
luar memori utama.
Beberapa Memori eksternal yang sering digunakan adalah sebagai berikut:
1. Harddisk
Harddisk merupakan media penyimpanan Internal dengan kapasitas besar yang
digunakan sebagai alat booting dan penyimpan data.Untuk saat ini kapasitas
penyimpanan pada harddisk mencapai 1 TB atau sekitar 1.000 MB.
2. CD (Compact Disk
3. Disket
Disket merupakan media penyimpanan eksternal dengan kapasitas kecil, yaitu
sekitar 1,44 MB.Untuk menggunakan media ini diperlukan flopy disk
drive.Seiring perkembangan teknologi, beragam media penyimpanan data
bermunculan dengan menawarkan kapasitas lebih besar dan kemudahan
penggunaan, dengan demikian Disket perlahan mulai punah.
4. Flashdisk
Flashdisk memiliki bentuk yang jauh lebih kecil dibandingkan dengan
disket.Tingkat ketahanannya juga jauh lebih bagus dibandingkan disket dan
CD.Flashdisk tidak memerlukan drive khusus tetapi hanya memerlukan port
USB.Kapasitas penyimpanan flashdisk hingga saat ini sudah mencapai 16 GB.
5. Blue-Ray
Blue-Ray merupakan media penyimpanan data yang dikelurakan oleh
perusahaan Sony.Satu keping Blue-Ray disc single layer bisa menampung 25
GB.Sementara untuk dual layer bisa menampung 50 GB.
6. Harddisk Eksternal
Harddisk eksternal merupakan perangkat penyimpanan yang mana fungsi dan
kapasitasnya hamper sama dengan harddisk internal.Kapasitas simpan harddisk
29
eksternal sangat bervariasi,mulai dari 40 GB samapi 50 GB.Namun kini juga
sudah muncul harddisk eksternal yang daya tampungnya mencapi 1,5 TB atau
sama dengan 1500 GB.
30
BAB III
PENUTUP
3.1 Simpulan
Multiprocessing adalah penggunaan dua atau lebih unit pengolahan pusat (CPU)
dalam satu sistem komputer. Hal ini berarti kemampuan sistem untuk mendukung lebih
dari satu prosesor dan/atau kemampuan untuk mengalokasikan tugas antara mereka.
Keuntungan multiprocessing antara lain :
a). Dapat meningkatkan throughput, maksudnya adalah peningkatan jumlah
pekerjaan yang dapat dilakukan dalam waktu tertentu;
b). Lebih ekonomis, maksudnya adalah dibandingkan sebuah sistem dengan
banyak prosesor tunggal, metode multiprocessing dapat mengoptimalkan
alokasi hardware seperti memori, storage, dan power supply (hal ini
dikarenakan dapat di shared);
c). Dapat meningkatkan performa/kehandalan, hal ini dikarenakan jika
pekerjaan (instruksi) terbagi secara merata, maka kegagalan salah satu
prosesor bisa ditanggulangi oleh prosesor-prosesor yang lain.
Isi dari makalah ini tidak lepas dari kata sempurna, maka dari itu melalui tulisan
ini kami selaku tim penulis dari makalah ini mengundang masukan baik itu berupa saran,
kritik, ataupun pertanyaan guna melengkapi kajian makalah ini.
3.2 Saran
Pesatnya perkembangan teknologi telah merambah ke segala bidang kehidupan
manusia terutama pada bidang informasi. Untuk menghadapi perkembangan yang
sedemikian pesatnya maka diharapkan kepada kita semua untuk mengimbangi dan
mengikuti perkembangan itu. Maka yang menjadi tujuan
31
DAFTAR PUSTAKA
32