Gambar Proses

Sekarang kita telah melihat bagaimana mendapatkan informasi dasar dari proses dan proses induknya, sekarang saatnya untuk melihat detail informasi proses / program.

Apa sebenarnya gambar proses itu? Gambar proses adalah file yang dapat dieksekusi yang diperlukan saat menjalankan program. Gambar ini biasanya berisi bagian berikut -

  • Segmen kode atau segmen teks
  • Segmen data
  • Segmen tumpukan
  • Segmen Heap

Berikut adalah representasi gambar dari proses gambar.

Code segmentadalah bagian dari file objek atau ruang alamat virtual program yang terdiri dari instruksi yang dapat dieksekusi. Ini biasanya merupakan segmen data hanya-baca dan memiliki ukuran tetap.

Segmen data terdiri dari dua jenis.

  • Initialized
  • Un-initialized

Initialized data segment adalah bagian dari ruang alamat virtual file objek atau program yang terdiri dari variabel statis dan global yang diinisialisasi.

Un-initialized data segmentadalah bagian dari ruang alamat virtual file objek atau program yang terdiri dari variabel statis dan global yang tidak diinisialisasi. Segmen data yang tidak diinisialisasi juga disebut segmen BSS (Block Started by Symbol).

Data segmentadalah baca-tulis, karena nilai variabel dapat diubah selama waktu proses. Segmen ini juga memiliki ukuran tetap.

Stack segmentadalah area memori yang dialokasikan untuk variabel otomatis dan parameter fungsi. Ini juga menyimpan alamat pengirim saat menjalankan panggilan fungsi. Stack menggunakan mekanisme LIFO (Last-In-First-Out) untuk menyimpan variabel lokal atau otomatis, parameter fungsi dan menyimpan alamat berikutnya atau alamat pengirim. Alamat pengirim mengacu pada alamat yang akan dikembalikan setelah penyelesaian eksekusi fungsi. Ukuran segmen ini bervariasi sesuai dengan variabel lokal, parameter fungsi, dan pemanggilan fungsi. Segmen ini berkembang dari alamat yang lebih tinggi ke alamat yang lebih rendah.

Heap segmentadalah area memori yang dialokasikan untuk penyimpanan memori dinamis seperti untuk panggilan malloc () dan calloc (). Ukuran segmen ini juga bervariasi sesuai alokasi pengguna. Segmen ini berkembang dari alamat yang lebih rendah ke alamat yang lebih tinggi.

Sekarang mari kita periksa bagaimana ukuran segmen (segmen data dan bss) bervariasi dengan beberapa program sampel. Ukuran segmen diketahui dengan menjalankan perintah “size”.

Program awal

File: segment_size1.c

#include<stdio.h>

int main() {
   printf("Hello World\n");
   return 0;
}

Dalam program berikut, variabel statis yang tidak diinisialisasi ditambahkan. Ini berarti ukuran segmen yang tidak diinisialisasi (BSS) akan meningkat sebesar 4 Bytes.Note- Pada sistem operasi Linux, ukuran int adalah 4 byte. Ukuran tipe data integer tergantung pada kompiler dan dukungan sistem operasi.

File: segment_size2.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   printf("Hello World\n");
   return 0;
}

Dalam program berikut, variabel statis yang diinisialisasi ditambahkan. Ini berarti ukuran segmen yang diinisialisasi (DATA) akan meningkat sebesar 4 Bytes.

File: segment_size3.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

Dalam program berikut, variabel global yang diinisialisasi ditambahkan. Ini berarti ukuran segmen yang diinisialisasi (DATA) akan meningkat sebesar 4 Bytes.

File: segment_size4.c

#include<stdio.h>

int myglobalint1 = 500;
int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

Dalam program berikut, variabel global yang tidak diinisialisasi ditambahkan. Ini berarti ukuran segmen yang tidak diinisialisasi (BSS) akan meningkat sebesar 4 Bytes.

File: segment_size5.c

#include<stdio.h>

int myglobalint1 = 500;
int myglobalint2;
int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

Langkah Eksekusi

Kompilasi

babukrishnam $ gcc segment_size1.c -o segment_size1
babukrishnam $ gcc segment_size2.c -o segment_size2
babukrishnam $ gcc segment_size3.c -o segment_size3
babukrishnam $ gcc segment_size4.c -o segment_size4
babukrishnam $ gcc segment_size5.c -o segment_size5

Eksekusi / Output

babukrishnam size segment_size1 segment_size2 segment_size3 segment_size4 segment_size5
   text  data  bss  dec  hex  filename
   878   252    8   1138 472  segment_size1 
   878   252   12   1142 476  segment_size2 
   878   256   12   1146 47a  segment_size3 
   878   260   12   1150 47e  segment_size4 
   878   260   16   1154 482  segment_size5
babukrishnam