1 Vincentius Kurniawan / 13110110028
Chapter 10: Implementing Subprograms
1.
Semantik (Makna Bahasa) Umum Calls and Return
Subprogram linkage
adalah subprogram dari operasi call dan return
Subprogram call memiliki beberapa asosiasi yakni :
i.
Parameter passing methods
ii.
Static local variables
iii.
Execution status of calling program
iv.
Transfer of control
v.
Subprogram nesting
2.
Implementasi Simple Subprogram
Activation Record
adalah format dari bagian nonkode sebuah subprogram sederhana
yang dieksekusi
Activation Record Instance (ARI)
adalah contoh kongkrit dari activation record (koleksi
data untuk aktivasi subprogram tertentu)
Linker
penghubung antar activation record pada sebuah subprogram
3.
Implementasi Subprogram dengan Stack-Dynamic Local Variables
Dynamic Link
sebuah pointer yang menunjuk pada pemanggil subprogram tersebut
dalam ARI tertentu
Run-time stack
adalah sebuah stack urutan eksekusi / proses subprogram (subprogram
yang terakhir dipanggil adaah yang pertama selesai)
Dynamic chain / Call Chain
adalah koleksi / kumpulan dari dynamic link yang ada pada
stack ketika stack tersebut dijalankan/ dipanggil (representasi urutan dynamic di eksekusi)
Local Offset
penunjuk ke local variable yang direpresentasikan didalam kode sebagai
offsets (starting ime/ waktu mulai) di awal ARI dari scope local. DItentukan oleh kompilator
pada saat kompilasi
4.
Nested Subprograms
Static Link
sebuah pointer yang menunjuk pada subprogram parentnya
Static Chain
adalah kumpulan rantai dari static link yang saling terhubung pada sebuah
ARI
Static Depth
adalah bilangan integer yang menunjukan seberapa dalam subprogram
pada ruang lingkup nested
Nesting Depth / Chain offset
perbedaan / selisih antar static depth pada 2 nested
subprogram
5.
Blocks
Blocks
lingkup variabel lokal (lifetime) yang dispesifikasi oleh
user
6.
Implementasi Dynamic Scooping
Deep access
adalah metode implementasi dynamic scoping dengan referensi non local
yang dapat ditemukan dengan pencarian ARI dalam dynamic chain
i.
Disebut deep access karena membutuhkan pencarian yang mendalam pada stack
Shallow access
adalah metode implementasi dynamic scoping dengan meletakan local
2 Vincentius Kurniawan / 13110110028
Chapter 11: Abstract Data Types And Encapsulation Constructs
1.
Konsep Abstraksi
Abstraction
view atau representasi entitas yang hanya meliputi atribut yang paling
siginifikan; atribut-atribut umum dapat diabaikan
Proses Abstraksi
2.
Pendahuluan Data Abstraksi
Object
Abstract Data Type
Clients
Getter
–
setter
3.
Abstract Data Type di Ada
Packages
Packages Specification
Body Package
Private
Limited Private
4.
Abstract Data Type di C++
Data Member
Member Function
Constructor, Destructor
5.
Abstract Data Type di C OOP
3 Vincentius Kurniawan / 13110110028
PEMBAHASAN SOAL2
Implementing Subprogram
Jawaban
:
5 Vincentius Kurniawan / 13110110028
3.
Show the stack with all activation record instances, including static and dynamic chains, when
exexution reaches position 1 in the following skelental program. Assume Bigsub is at level 1
The calling sequence for this program for execution to reach D is :
Bigsub calls A
A calls B
B calls A
A calls C
C calls D
6 Vincentius Kurniawan / 13110110028
Support for Object-Oriented Programming
3.
Desain stack abstract data type untuk real number dengan standard stak operation standard : push
(int N), pop(), isEmpty(), & makeEmpty() !
class Data{
8 Vincentius Kurniawan / 13110110028
Data *curr;
for(curr = head; curr->next != NULL;
curr = curr->next);
int returnValue = curr->value;
curr->next = NULL;
Task
→ Unit dari program, yang mirip dengan subprogram, yang dapat dieksekusi secara bersamaan dengan unit lain dalam program yang sama. Tasks biasanya dipanggil proses. Task terdapat dua kategori umum : heavyweight dan lightweight.heavyweight → mengeksekusi di address spacenya masing-masing lightweight → menjalankan seluruhnya di address space yang sama
Task dapat saling berkomunikasi dengan task lain melalui shared nonlocal variable, melalui message passing atau melalui parameter.
9 Vincentius Kurniawan / 13110110028
Competition
Synchronization→ Sinkronisasi yang dibutuhkan antara task A dan task B ketika task A harus menunggu task B untuk menyelesaikan beberapa aktivitas spesifik sebelum task A dapat memulai atau melanjutkan eksekusinyaContohnya : Dua task mengakses satu variable bernama TOTAL dan saling mengubah satu sama lain. Sama seperti prinsip dalam update data di database waktu SBD, yang dijelasin ama Pak Bekti, permasalahan reader-writer (mungkin)
Cooperation Synchronization → Sinkronisasi yang dibutuhkan antara dua task ketika keduanya membutuhkan penggunaan beberapa resources yang tidak dapat digunakan secara bersamaan Contohnya : Producer-Consumer problem (Kalau lupa baca OS lagi)
Liveness → Suatu task terus melanjutkan eksekusinya, sampai akhirnya mengarah pada penyelesaian task tersebut.
Race Condition→ Situasi dimana dua atau lebih task saling berbalap untuk menggunakan resources dan bergantung kepada siapa task yang lebih dahulu sampai. Race condition merupakan permasalahan dari Competition
Deadlock → Suatu task yang kehilangan karakteristik suatu task, yaitu liveness yang merupakan permasalahan yang serius. Peristiwa deadlock terjadi karena task A butuh resource X yang sedang dipakai oleh task B (menunggu tanda release) sedangkan task B butuh resource Y yang sedang dipakai oleh task A dan menunggu tanda release dari task A. Hal ini menyebabkan saling menunggu tanda release. Sehingga task A dan task B ga bisa menyelesaikan tugasnya dan gentayangan.23.
Keuntungan Monitor pada semaphore:
Merupakan penjaga buffer/resources, dimana Monitor menjaga buffer dan menjamin bahwa
hanya satu task yang dapat mengakses buffer (sebagai pengontrol task-task yang masuk).
Berbeda
dengan
konsep
semaphore
dimana
tiap-tiap
task
tersebut
yang
mengurangi/menambah counter sendiri sebagai tanda bahwa resource sedang digunakan atau
sudah digunakan.
Monitor butuh lock untuk mengeksekusi satu thread saja, sedangkan semaphore butuh lock
untuk mengakses resource
Menyediakan cara yang lebih baik dalam masalah competition synchronization dalam
menghandle buffer overflow dan underflow
24.
Tiga bahasa yang dapat mengimplementasikan monitor:
Java (dapat diimplementasikan dalam class yang didesain sebagai abstract data type).
Pengaksesan object class dicontrol dengan menambahkan Synchronized modifier pada
method akses (wait and notify :: sumber wikipedia)
Ada (memiliki dua cara dalam mengimplementasikan. Ada 83 memasukkan model tasking
secara umum yang dapat digunakan untuk mendukung implementasi monitor. Ada 95
menambah cleaner dan lebih efisien dalam membuat monitor, yang disebut sebagai protected
object)
C# (soalnya ada .Net Framework)
25.
Definisi:
10 Vincentius Kurniawan / 13110110028
Accept Clause→ didefiniskan sebagai cakupan dari statement yang dimulai dengan 'accept' dan diakhiri dengan 'end'.
Entry Clause
→ Bentuk semantic dari spesifikasi task yang akan dijalankan
Actor Task→ task yang tanpa accept clauses (tidak butuh accept clauses)
Server Task → Task yang memiliki accept clause, tetapi tidak memunyai kode lain selain accept clause tersebut11 Vincentius Kurniawan / 13110110028
Open accept clause
→ Sebuah accept clause saat when clause bernilai benar. Kalau accept clause yang tidak memiliki penjaga selalu terbuka. Open accept clause tersedia untuk rendezous
Close Accept clause → Sebuah accept clause saat when clause bernilai salah. Closed accept clause tidak dapat rendezous
Completed Task→ Situasi yang terjadi saat kontrol dari eksekusi sebuah task telah mencapai akhir dari kode (code body). Hal ini dapat terjadi karena exception ditimbulkan ketika tidak ada handler. Jika task tidak dibuat task lain, yang disebut dependents, akan menghentikan ketika eksekusi selesai. Task yang sudah dibuat dependent task (task tersebut dibuat oleh task lain) dihentikan ketika eksekusi dari kode sudah komplit dari seluruh dependant dihentikan. Task dapat menhentikan dengan menunggu open terminal clause. Dalam kasus dimana terminasi hanya ketika master (the block, subprogram atau task yang membuatnya) dan seluruh task lain yang bergantung dengan master tersebut sudah menyelesaikan atau menunggu di open terminate clauseException Handling
12 Vincentius Kurniawan / 13110110028
handler, formal parameter termasuk nama variable yang digunakan untuk tujuan tersebut. Formal parameter juga dapat berupa user-define class yang memiliki banyak member data yang penting.
15.
Exception dapat secara eksplisit diraise dengan menggunakan statement
throw[expression] (expression didalam throw bersifat optional). Throw tanpa operand hanya dapat muncul di handler. Ketika muncul, akan membangkitkan exception, dimana dihandle di suatu tempat.16. Exception terikat dengan handler melalui try construct dan memberikan statement throw dengan tipe expressionnya untuk melemparkan exception ke handler yang formal parameternya sesuai dengan tipe expression pada throw tersebut.
13 Vincentius Kurniawan / 13110110028
14 Vincentius Kurniawan / 13110110028
Functional Programming Language
8. Terdapat function bernama y dengan memiliki parameter berupa s yang berupa atom dan lis yang berupa list. Scheme function tersebut melakukan proses pemberian nilai berdasarkan hasil dari conditional statement. Pada conditional pertama, jika lis adalah null, mengembalikan nilai list yang kosong. Pada conditional kedua, jika s sama dengan dengan nilai pertama dari parameter lis, akan mengembalikan nilai berupa seluruh nilai lis. Pada conditional statement terakhir adalah jika tidak memenuhi kedua kondisi diatas, maka akan melakukan recursion dimana menjalankan fungsi y kembali dengan parameter s dan seluruh nilai dari lis kecuali nilai yang pertama