Senin, 26 November 2012

Alamat Logik dan Alamat Fisik


Alamat Logika adalah alamat yang dibentuk di CPU, disebut juga alamat virtual. Alamat fisik adalah alamat yang terlihat oleh memori. Waktu compilasi dan waktu pemanggilan menghasilkan daerah dimana alamat logika dan alamat fisik sama. Sedangkan pada waktu eksekusi menghasilkan alamat fisik dan logika yang berbeda. Kumpulan alamat logika yang dibuat oleh program adalah ruang alamat logika. Kumpulan alamat fisik yang berkorespondensi dengan alamat logika disebut ruang alamat fisik. Untuk mengubah dari alamat logika ke alamat fisik diperlukan suatu perangkat keras yang bernama MMU ( Memory Management Unit ).
MMU (Memory Management Unit) : perangkat keras yang memetakan alamat logika ke alamat fisik
     Menyediakan perangkat register yang dapat diset oleh CPU: setiap proses mempunyai data set register tersebut (disimpan di PCB)
     Harga dalam register base/relokasi ditambahkan ke setiap alamat proses user pada saat run dimemori
     Program-program user hanya berurusan dengan alamat logika saja











Paging adalah suatu metode yang memungkinkan suatu alamat fisik memori yang tersedia dapat tidak berurutan.

Memori fisik dibagi ke dalam blok-blok ukuran tetap yang disebut “frame”
     Memori logika dibagi ke dalam blok-blok dengan ukuran yang sama yang disebut “page”
     Untuk menjalankan program berukuran n page, harus dicari frame kosong sebanyak n untuk meload program
     Page table digunakan untuk translasikan alamat logik ke alamat fisik
     Alamat yang dibangkitkan CPU dibagi menjadi :
      Page number (p) à digunakan sebagai index ke page table. Page table berisi alamat basis dari setiap page pada memori fisik
      Page Offset (d) à dikombinasikan dengan alamat basis untuk mendefinisikan alamat memori fisik yang dikirim ke unit memori
Skema Translasi Alamat





Contoh :


















Segmentasi adalah skema manajemen memori dengan cara membagi memori menjadi segmen-segmen. Berbeda dengan page, ukuran tiap segmen tidak harus sama dan memiliki cirri tertentu, yaitu nama dan panjang segmen.
      Sebuah program merupakan kumpulan dari segment. Sebuah segement berisi  unit logik seperti:    main program, procedure, function, method, object, local variables, global variables, common block, stack, symbol table, arrays




















Contoh :

Selasa, 13 November 2012

coding sembako


Define max : mendfinisikan nilai yang bernama max sepanjang 100
Typedef char string[20] : sebuah karakter sepanjang 20
typedef struct : sebuah data jenis baru yang bernama sembako yg mmpunyai atribut string jenis, string asal, float berat
typedef struct: jenis data baru bernama stack sembako yang memiliki atribut
void int : membuat sebuah stack dengan ktentuan...
void input sembako(): menginputkan sebuah sembako
void push: memasukkan data dr void input sembako kedalam stack sembako. jika nilai top<99 akan="akan" dimasukkan="dimasukkan" jika="jika" maka="maka" output="output" pd="pd" penuh="penuh" sembako="sembako" span="span" stack="stack">
void show: mnampilkan isi dr stack sembako yg sudah di inputkan, jika nilai teratas>-1 mnampilkan isi stack sembako, jika nilai kosong maka output"stack kosong"
void pop: menghapus data teratas dr stack sembako, jika nilai >-1 maka data teratas dihapus apabila stack kosong
float rerata: menghitung rata" isi stack sembako
int banyak paket: menhitung banyaknya jumlah sembako pada stack sembako jika nilai teratas>-1 maka data akan dihitung, apabila stack osong  output "stack kosong"


typedef struct
sebuah data jenis baru yang bernama StackSembako
{
            int top;
            Sembako content[Max];
            float totalBerat;
            int nelemen;
}StackSembako;
Sebuah data yang bernama StackSembako

void init(StackSembako *S) à membuat sebuah stack dengan ketentuan StackSembako * S
{
            (*S).top=-1; è nilai top=-1
            (*S).totalBerat=0;à nilai totalBerat=0
            (*S).nelemen=0;à nilai nelemen=0
}

void inputSembako(Sembako *x, string a, string b, float c)
menginputkan sembako
{
            strcpy((*x).jenis,a);
            strcpy((*x).asal,a);
            (*x).berat=c;

}

void push(StackSembako *S, Sembako x)
memasukkan data dr void input sembako kedalam stack sembako
{
            if((*S).top
            {
                        (*S).top++;
                        strcpy((*S).content[(*S).top].jenis,x.jenis);
                        strcpy((*S).content[(*S).top].asal,x.asal);
                        (*S).content[(*S).top].berat=x.berat;
                        (*S).totalBerat=(*S).totalBerat+x.berat;
                        (*S).nelemen++;
            }
            else
                        printf("\nStack penuh....");
}
jika nilai top<99 akan="akan" dimasukkan="dimasukkan" jika="jika" maka="maka" output="output" pd="pd" penuh="penuh" sembako="sembako" span="span" stack="stack">stack penuh”.

void show(StackSembako S)
menampilkan isi dari stack sembako yang sudah diinputkan,
{
            if(S.top>-1)
            {
                                    while(S.top!=-1)
                                    {
                                                printf("\n\nJenis barang :%s",S.content[S.top].jenis);
                                                printf("\n\nAsal barang :%s",S.content[S.top].asal);
                                                printf("\n\nBerat :%0.2f",S.content[S.top].berat);
                                                S.top--;
                                    }
                                    printf("------------------------------------");
                                    printf("\n\nTotal Berat : %f kg",S.totalBerat);
            }
            else
                        printf("\nStack kosong");

}
jika nilai top/nilai teratas >-1 menampilkan isi stack sembako, jika nilai kosong maka output"stack kosong"

void pop(StackSembako *S)
menghapus data teratas dari stack sembako
{
            Sembako x;
            if((*S).top>-1)
            {
                        x=(*S).content[(*S).top];
                        (*S).totalBerat=(*S).totalBerat-x.berat;
                        (*S).nelemen--;
                        (*S).top--;
                        printf("\nAsal : %s",x.jenis);
                        printf("\nJenis : %s",x.asal);
                        printf("\nBerat : %f",x.berat);
            }
            else
            {
                        printf("\nStack kosong");
            }
}
jika nilai >-1 maka data teratas dihapus apabila nilai <= -1 maka stack kosong

float rerata(StackSembako S)
menghitung rata-rata isi stack sembako
{
            return S.totalBerat/S.nelemen;
}

int banyakPaket(StackSembako S,string a,string b)
menghitung banyaknya jumlah sembako pada stack sembako
{
            int n=0;
            if(S.top>-1)
            {
                        while(S.top!=-1)
                        {
                                    if((strcmpi(S.content[S.top].jenis,a)==0 && (strcmpi(S.content[S.top].asal,b)==0)))
                                    {
                                    n++;
                                    }
                                    S.top--;
                        }
                        return n;
            }
            else
            {
                        printf("\nStack kosong");
                        return 0;
           
            }
}
jika nilai teratas >-1 maka data akan dihitung, apabila stack kosong  output "stack kosong"