Selasa, 13 Maret 2012

Coding Linked List - Penghapusan posisi yang di inginkan

#include<stdio.h>
#include<conio.h>

struct node{
char info;
struct node *next;
};

typedef struct node node;

struct linkedList{
node *H,*T;
};
typedef struct linkedList ll;

ll inisialisasi(ll L) {
L.H=NULL;
L.T=NULL;
return L;
}

node* buatNode(char infoBaru){
node *nodeBaru;
//memory allocation
nodeBaru=(node *)malloc(sizeof(node));

nodeBaru->info=infoBaru;
nodeBaru->next=NULL;
return nodeBaru;
}

ll sisipDepan(ll L, char infoBaru) {
node *nodeBaru;

//panggil fungsi malloc
nodeBaru=buatNode(infoBaru);

//kasus 1 LL masih kosong
if(L.H==NULL){
L.H=nodeBaru;
L.T=L.H;
}

//kasus 2 LL sudah ada isinya
else{
nodeBaru->next=L.H;
L.H=nodeBaru;
}
return L;
}

ll sisipBelakang(ll L, char infoBaru) {
node *nodeBaru;

//panggil fungsi malloc
nodeBaru=buatNode(infoBaru);

//kasus 1 LL masih kosong
if(L.H==NULL){
L.H=nodeBaru;
L.T=L.H;
}

//kasus 2 LL sudah ada isinya
else{
L.T->next=nodeBaru;
L.T=nodeBaru;
}
return L;
}

ll sisipUrut(ll L, char infoBaru)
{
node *nodeBaru, *p1, *p2;

if(L.H==NULL || infoBaru<=L.H->info)
L=sisipDepan(L, infoBaru);
else if(infoBaru>=L.T->info)
L=sisipBelakang(L, infoBaru);
else
{
nodeBaru=buatNode(infoBaru);
p1=p2=L.H;

while(infoBaru > p1->info)
{
p2=p1;
p1=p1->next;
}
nodeBaru->next=p1;
p2->next=nodeBaru;
}

return L;
}


ll hapusDepan (ll L){
node *pb;
if (L.H != NULL) {//cek apakah LL tidak kosong
pb=L.H; //tempatkan pb di head
L.H=L.H->next;//pindahkan posisi head
if(L.H ==L.T)
L.T=NULL;
free(pb);
}
return L;
}

ll hapusBelakang(ll L){
node *pb, *pb2;
if(L.H !=NULL){//cek apakah ll ada
if(L.H==L.T) //node cuma satu
L= hapusDepan(L);
else{
pb= pb2=L.H;
while(pb !=L.T){
pb2=pb;
pb=pb->next;
}
L.T=pb2;
L.T->next=NULL;
free(pb);
}
}
return L;
}



ll hapustengah(ll L,int posisi)
{
int banyakdata,poshapus;
node *p1,*p2;
if(L.H==NULL)
{
printf("Linked list kosong\n");
}
else
{
banyakdata=1;
p1=L.H;
while(p1->next!=NULL)
{
p1=p1->next;
banyakdata++;
}
if((posisi<1)||(posisi>banyakdata))
printf("Posisi di luar jangkauan\n");
else
if(posisi==1)// hapus awal
L=hapusDepan(L);
else
if(posisi==banyakdata) // hapus akhir
L=hapusBelakang(L);
else // hapus tengah
{
p1=p2=L.H;
poshapus=1;
while(poshapus<(posisi-1))
{
p1=p1->next;
poshapus++;
}
p2=p1->next;
p1->next=p2->next;
free(p2);
}
}
return L;
}


void cetak(ll L){
node *P;
P=L.H;
while(P!=NULL){
printf("%c, ",P->info);
P=P->next;
}
}

main() {
ll L1;
int n;
L1=inisialisasi(L1);


L1=sisipUrut(L1, 'B');
L1=sisipUrut(L1, 'A');
L1=sisipUrut(L1, 'D');
L1=sisipUrut(L1, 'C');

printf ("Masukkan posisi yang akan dihapus ;");
scanf ("%d",&n);

L1=hapustengah(L1,n);
cetak(L1);
getch();
}

Jumat, 09 Maret 2012

(TIPS) 10 Cara Agar Berhasil Bangun Lebih Pagi

Berapa kali Anda bertekad bangun lebih pagi tapi tak pernah bisa menghindari dari godaan tombol "Snooze" di jam alarm?

Niat saja tak cukup untuk membuat angan-angan bangun pagi jadi kenyataan. Kita juga perlu menyertainya dengan sejumlah usaha yang bisa membuat kita mau tak mau harus bangun juga.

Berikut beberapa cara yang mungkin bisa membantu.
1. Tidur efektif
Semua juga tahu kalau ingin bangun lebih pagi kita sebaiknya tidur lebih awal. Tapi percuma saja tidur selama delapan jam jika tidur kita tidak efektif. Jika posisi tidur tak nyaman, bantal terlalu tinggi, atau suhu kamar terlalu dingin, kita akan terbangun berkali-kali di tengah malam, dan tubuh pun merasa kita belum mendapat cukup istirahat.

2. Hindari kopi, red wine, dan cokelat sebelum tidur
Penelitian menunjukkan tiga jenis makanan dan minuman ini adalah yang paling berpotensi mengganggu tidur. Mengonsumsinya di malam hari bisa membuat perut Anda bergejolak di malam hari dan tidur pun tak nyaman.

3. Buka tirai jendela kamar
Begitu matahari terbit, sinarnya akan masuk ke kamar dan membantu Anda terbangun.

4. Geser rutinitas Anda jadi lebih pagi
Jika biasanya Anda memulai aktivitas sehari-hari jam 8 pagi, tambahkan beberapa aktivitas tambahan yang dilakukan di jam 7 pagi. Misalnya jogging, berenang di kolam belakang kompleks, memasak sarapan sendiri, menulis untuk blog, atau apa pun aktivitas yang Anda senangi. Lakukan secara rutin setiap hari hingga jadi bagian gaya hidup Anda.

5. Gunakan 2 alarm
Anda biasa menyimpan jam alarm (atau menggunakan alarm ponsel) di samping tempat tidur? Silakan. Tapi pasang juga satu alarm lain, kalau bisa yang bunyinya lebih kencang, di tempat yang berjarak minimal 5 langkah dari tempat tidur. Mau tak mau Anda harus bangun untuk mematikannya. Tapi setelah itu jangan tidur lagi, ya.

6. Simpan segelas air di samping tempat tidur
Begitu alarm berbunyi, duduklah di tempat tidur dan minum segelas air yang sudah disediakan. Sampai habis. Ini berguna untuk membuat tubuh Anda siap beraktivitas dan tak ingin kembali tidur.

7. "Jump out of bed"
Istilah dalam bahasa Inggris ini bisa diartikan secara harfiah. Setelah mematikan alarm, langsung bangkit dan "melompat" turun, lalu jauhi tempat tidur.

8. Pikirkan hal menarik yang akan terjadi hari ini
Sebelum memutuskan untuk tidur lagi, pikirkan rencana kegiatan yang akan Anda jalani hari ini. Jika Anda bangun lebih pagi, tentunya akan ada lebih banyak waktu untuk bersiap-siap, memilih busana terbaik, menata rambut, dan berdandan dengan lebih maksimal. Menyenangkan, bukan?

9. Jadikan kebiasaan
Oke, Anda sudah berhasil bangun lebih pagi dari Senin hingga Jumat. Weekend bisa bangun jam 10 lagi, dong? Jangan salah. Tubuh bekerja menyesuaikan dengan jadwal yang sudah jadi kebiasaan. Jika Anda sudah membiasakan diri selama seminggu untuk bangun pagi, seterusnya tubuh Anda akan terbangun sendiri di jam yang sama. Namun jika rutinitas itu dirusak (tiba-tiba Anda kembali bangun siang selama 3 hari), tubuh pun akan mengikuti jadwal yang baru.

10. Pikirkan risikonya
Setiap Anda berpikir, "Tidur lagi deh, 15 menit lagi," ingatlah bahwa rata-rata manusia menghabiskan sepertiga hidupnya untuk tidur. Jadi jika Anda diberi usia hingga 70 tahun, Anda akan menghabiskan lebih dari 20 tahunnya untuk tidur. Jadi, lupakan tidur 15 menit lagi. Anda masih punya banyak waktu untuk tidur besok-besok.

Rabu, 07 Maret 2012

Penjadwalan CPU (Latihan Soal)

1.    Sebutkan perbedaan antara penjadwalan preemptive dan nonpreemptive.
2.    Terdapat 5 job yang datang hampir pada saat yang bersamaan. Estimasi waktu eksekusi (burst time) masing-masing 10, 6, 2, 4 dan 8 menit dengan prioritas masing-masing 3, 5, 2, 1 dan 4, dimana 5 merupakan prioritas tertinggi. Tentukan rata-rata waktu turnaround untuk penjadwalan CPU dengan menggunakan algoritma
a)   Round Robin (quantum time -2)
b)   Priority
c)   Shortest job first Diketahui proses berikut:
Proses
Arrival Time
Burst Time
P1
0
8
P2
0.4
4
P3
1
1











Tentukan   rata-rata  waktu  tunggu  dan  rata-rata  waktu  turnaround  dengan  algoritma penjadwalan :
a)    FCFS
b)    SJF non preemptive
c)    SJF preemptive / SRTF
d)    Round Robin dengan quantum time = 1
4.   Suatu algoritma penjadwalan CPU kemungkinan melibatkan algoritma yang lain, contohnya algoritma FCFS adalah algoritma RR dengan waktu quantum tertentu. Apakah ada hubungan antara pasangan algoritma berikut ?
a)   Priority dan SJF
b)   Priority dan FCFS
c)   RR dan SJF
5.   Apa yang dimaksud dengan race condition?
6.   Apakah yang dimaksud dengan critical section ? Untuk menyelesaikan masalah critical section , ada tiga hal yang harus dipenuhi, sebutkan dan jelaskan !
7.   Bagaimana algoritma Bakery untuk sinkronisasi banyak proses (n proses) ?
8.   Apa yang dimaksud semaphore dan sebutkan operasi pada semaphore
9.   Bagaimana struktur semaphore permasalahan :
a)   bounded buffer problem.
b)   reader and writer problem.
c)   dining philosopher problem.
10. Apa yang dimaksud dengan sumber daya ? Berikan contohnya.
11. Apa yang dimaksud deadlock ?
12. Sebutkan 4 kondisi yang menyebabkan deadlock.
13. Sebutkan cara mencegah deadlock dari 4 kondisi tersebut pada soal 12.
14. Diketahui snapshot dari suatu sistem :

Allocation
Max
Available

ABCD
ABCD
ABCD
PO
PI
00 12 1000
00 12 17 5 0
15 2 0
P3
1632
1652

P4
00 14
065 6

Jawablah pertanyaan berikut:
a)    Bagaimana isi matrik Need ?
b)    Apakah sistem dalam state selamat ?
c)    Jika proses PI meminta (0,4,2,0) dapatkah permintaan dipenuhi segera ?
15.  Terdapat partisi memori lOOK, 500K, 200K, 300K dan 600K, bagaimana algoritma
First-fit, Best-fit dan Worst-fit menempatkan proses 212K, 417K, 112K dan 426K (berurutan) ? Algoritma mana yang menggunakan memori secara efisien ?
16.  Apa yang dimaksud dengan fragmentasi eksternal dan fragmentasi internal ?
17.  Diketahui ruang alamat logika dengan 8 page masing-masing 1024 word dipetakan
ke memori fisik 32 frame.
18.  Berapa bit alamat logika ?
19.  Berapa bit alamat fisik ?
20.  Diketahui sistem paging dengan page table disimpan di memori
21.  Jika acuan ke memori membutuhkan 200 nanosecond, berapa lama waktu
melakukan paging ?
22.  Jika ditambahkan associative register, dan 75 persen dari semua acuan ke page-table
ditemukan dalam associative register, berapa efective access time (EAT) acuan ke memori ? (diasumsikan bahwa menemukan entri pada page table di associative register membutuhkan waktu 0, jika entri ada).
23.  Diketahui sistem memory demand paging. Page table menggunakan register.
Membutuhkan 8 milisecond untuk melayani page fault jika frame kosong tersedia atau page yang di-replace tidak dimodifikasi dan 20 milisecond jika page yang di-replace dimodifikasi. Waktu akses memori adalah 100 nanosecond. Diasumsikan page yang di-replace akan dimodifikasi adalah 70 persen dari waktu. Berapa rata-rata page fault yang diterima untuk effective access time tidak lebih dari 200 nanosecond ?
24.  Diketahui string acuan dari page : 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6
Berapa banyak page fault yang terjadi untuk algoritma page replacement berikut dengan satu, dua, tiga, empat, lima, enam atau tujuh frame ? Ingat bahwa semua frame diinisialisasi kosong, sehingga setiap page unik pertama akan bernilai masing-masing satu fault
a. LRU
b. FIFO
c. Optimal
25. Diketahui array 2 dimensi A sebagai berikut:
var A : array[1..100] of array{1..100] of integer
Dimana A[l][l] berada pada lokasi 200 pada sistem page memory dengan page-page berukuran              200. Suatu proses kecil pada page 0 (lokasi 0 s/d 199) untuk manipulasi matriks, sehingga setiap      instruksi dimulai dari page 0. Untuk 3 frame page, berapa banyak page fault yang dibangkitkan            oleh loop inisialisasi array berikut menggunakan LRU dan asumsi frame page 1 sudah terdapat        proses dan 2 frame page lainnya diinisialisasi kosong.
a. For (j = 1; j <= 100; j++)                                                                               ,
For (i = 1; i <- 100; i++)
A[i][j] = 0;
b.For (i=1;i<=100; i++)
For (j = 1; j <= 100; j++) A[i][j] := 0;
A[i][j] = 0;

26.  Diketahui sistem demand paging dengan paging disk mempunyai waktu akses dan transfer rata-rata 20 milisec. Alamat ditranslasikan melalui page table di memory, dengan waktu akses 1 microsec per akses memory. Sehingga acuan ke memori melalui page table sama dengan 2 kali akses memory. Untuk memperbaiki waktu, ditambahkan associative memory yang menurunkan waktu akses menjadi satu acuan memori, jika entri page table berada di associative memory. Diasumsikan 80 % akses pada associative memory dan dari sisanya (20%), 10% nya (atau 2 persen dari total) menyebabkan page fault. Berapakah effective access time-nya?
27.  Apakah keuntungan dan kerugian menyimpan nama pembuat program pada atribut
file (seperti pada SO Machintosh)
28.  Terdapat beberapa metode akses misalnya sequential access dan direct access.
Jelaskan !
29.  Sebutkan dan jelaskan Tree-structured directory dan acyclic-graph directory
30.  Diketahui sebuah system mendukung 5000 user. Misalnya akan mengijinkan 4990 userdapat mengakses sebuah file. Bagaimana spesifikasi proteksi pada UNIX ?
31.  Sistem file biasanya diimplementasikan dalam struktur layer atau modular. Jelaskan struktur layer pada system file.
32.  Ada beberapa cara file dialokasikan pada ruangdisk, yaitu contiguous, linked atau berindeks. Jelaskan ketiga cara alokasi file diatas dan berikan contoh.
33.  Sebutkan dan jelaskan cara untuk memperbaiki sistem dari  kegagatan sehingga tidak kehilangan data atau data inconsistency.
34.  Apakah permasalahan yang timbul bila sebuah system memperbolehkan system file di-mount secara simultan lebih dari satu lokasi ?


 JAWABAN !
Pwd : japuh

PROSES

1. sebutkan state pada proses dan jelaskan diagram proses!
a. new: proses sedang dibuat.
b. running: proses sedang dieksekusi.
c. waiting: proses sedang menunggu beberapa event yang akan terjadi (seperti menunggu untuk menyelesaikan i/o atau menerima sinyal).
d. ready: proses menunggu jatah waktu dari cpu untuk diproses.
e. terminated: proses telah selesai dieksekusi.
status proses. new, ready, running, waiting dan terminated.
program counter. menunjukkan alamat berikutnya yang akan dieksekusi oleh proses tersebut.
cpu registers. register bervariasi tipe dan jumlahnya tergantung arsitektur komputer yang bersangkutan. register-register tersebut terdiri-atas: accumulator, index register, stack pointer, dan register serbaguna dan beberapa informasi tentang kode kondisi. selama program counter berjalan, status informasi harus disimpan pada saat terjadi interrupt. gambar disamping menunjukkan switching proses dari satu proses ke proses berikutnya.
informasi penjadwalan cpu. informasi tersebut berisi prioritas dari suatu proses, pointer ke antrian penjadwalan, dan beberapa parameter penjadwalan yang lainnya.
informasi manajemen memori. informasi tersebut berisi nilai (basis) dan limit register, page table, atau segment table tergantung pada sistem memory yang digunakan oleh so.
informasi accounting. informasi tersebut berisi jumlah cpu dan real time yang digunakan, time limits, account numbers, jumlah job atau proses, dll.
informasi status i/o. informasi tersebut berisi deretan i/o device (seperti tape driver) yang dialokasikan untuk proses tersebut, deretan file yang dibuka, dll.


2. apa yang dimaksud short term scheduler dan long term scheduler?
terdapat dua bentuk penjadwal, yaitu:
longterm-scheduler (job scheduler), menyeleksi proses-proses mana yang harus dibawa ke ready queue.
short-term scheduler (cpu scheduler), memilih proses-proses yang siap untuk dieksekusi, dan mengakolakasikan cpu ke salah satu dari proses-proses tersebut.
short-term scheduler terjadi sangat sering (dalam milidetik), jadi setiap proses
dijadwal dengan cepat, sedangkan long-term scheduler terjadi sangat jarang (dalam detik atau menit), sehingga setiap proses dijadwal dengan lambat. long-term scheduler digunakan untuk mengontrol tingkat multiprogramming.


3. jelaskan 4 alasan mengapa proses harus bekerja sama!
keuntungan proses yang saling bekerja sama adalah:
(1)terjadi pembagian informasi
(2)meningkatkan kecepatan komputasi
(3)proses dapat dibagi dalam modul-modul
(4)lebih memberikan kenyamanan pada programmer.


4. tuliskan kode program untuk penyelesaian permasalahan producer consumer dengan menggunakan shared memory!

#define buffer_size 10

typedef struct {

. . .

} item;

item buffer[buffer_size];

int in = 0;

int out = 0;

proses producer:

item nextproduced;

while (1) {

while (((in + 1) % buffer_size) == out)

; /* do nothing */

buffer[in] = nextproduced;

in = (in + 1) % buffer_size;

}

proses consumer:

item nextconsumed;

while (1) {

while (in == out)

; /* do nothing */

nextconsumed = buffer[out];

out = (out + 1) % buffer_size;

}

5. diketahui skema komunikasi antar proses menggunakan mailbox;1. proses p ingin menunggu 2 pesan, satu dari mailbox a dan satu dari mailbox b. tunjukkan urutan send dan receive yang dieksekusi!

send :

receive :

2. bagaimana urutan send dan receive yang dieksekusi p jika p ingin menunggu satu pesan dari mailbox a atau mailbox b (salah satu atau keduanya)

send :

receive :


6. jelaskah apa yang dimaksud dengan thread dan struktur dari thread!

suatu proses didefinisikan oleh resource yang digunakan dan lokasi yang akan dieksekusi. namun adakalanya proses-proses akan menggunakan resource secara bersama-sama. suatu unit dasar dari cpu utilization yang berisi program counter, kumpulan register, dan ruang stack disebut dengan thread atau lighweight process (lwp). thread akan bekerjasama dengan thread yang lainnya dalam hal penggunaan bagian kode, bagian data, dan resource sistem operasi, seperti open file dan sinyal secara kolektif yang sering disebut dengan task.

apabila dilakukan perbandingaan antara sistem multi thread dengan sistem multi proses dapat disimak berikut. pada multi proses, setiap proses secara terpisah melakukan operasi tidak bekerja sama dengan proses lain, setiap proses mempunyai program counter, stack register dan ruang alamat sendiri. organisasi jenis ini berguna jika job dibentuk oleh proses-proses yang tidak saling berhubungan. multi proses membentuk task yang sama. sebagai contoh, multi proses dapat menyediakan data untuk mesin secara remote pada implementasi system file jaringan. hal ini lebih efisien apabila satu proses terdiri dari multi thread melayani tugas yang sama. pada implementasi multi proses, setiap proses mengeksekusi kode yang sama tetapi mempunyai memori dan resource file sendiri. satu proses multi thread menggunakan resource lebih sedikit daripada multi proses, termasuk memory, open file dan penjadwalan cpu. seperti halnya proses, thread memiliki status: ready, blocked, running dan terminated, dan hanya satu thread yang aktif dalam satu waktu. thread dapat membuat child thread. jika satu thread dalam keadaan blocked, maka thread yang lainnya dapat dijalankan. namun, tidak saling bebas, sebab semua thread dapat mengakses setiap alamat dalam satu task, thread dapat membaca dan menulisi stack dari thread yang lainnya. sehingga tidak ada proteksi antara satu thread terhadap thread yang lainnya. suatu proses dapat terdiri dari satu thread (single thread) dan beberapa thread (multi thread).


7. jelaskan empat keuntungan menggunakan threads pada multiple process!

(1)pada respon lebih cepat

(2)menggunakan resource bersama-sama

(3)lebih ekonomis

(4)meningkatkan utilitas arsitektur mikroprosessor


8. apakah perbedaan antara user-level thread dan kernel-supported threads?

user thread adalah thread yang diatur dengan menggunakan pustaka user level thread. contoh; sistem yang menggunakan user thread adalah posix pthreads, mach c-threads dan solaris threads.

kernel thread adalah thread yang didukung oleh kernel. contoh; sistem yang menggunakan kernel thread adalah windows 95/98/nt/2000, solaris, tru64 unix, beos dan linux.


9. ada 3 model multi threading, jelaskan!

model multi thread terdiri dari model many-to-one, one-to-one dan many-to-many.pada model many-to-one, beberapa user level thread dipetakan ke satu kernel thread dan digunakan pada sistem yang tidak mendukung kernel threads.

pada model one-to-one, setiap user-level thread dipetakan ke kernel thread, misalnya pada windows 95/98/nt/2000 dan os/2.

pada model many-to-many, user level thread dipetakan ke beberapa kernel threads. pada sistem operasi ini akan dibuat sejumlah kernel thread, contohnya solaris 2 dan windows nt/2000 dengan threadfiber package.


10. jelaskan state pada java thread!

bahasa pemrograman java menggunakan java thread yang dibuat dengan menggunakan class thread dan mengimplementasikan antar muka yang bersifat runnable (dapat dijalankan). java thread diatur oleh java virtual machine (jvm). java thread terdiri dari state new, runnable, blocked dan dead.