İşlem Resmi
Artık sürecin ve onun ana sürecinin temel bilgilerini nasıl elde edeceğimizi gördüğümüze göre, süreç / program bilgilerinin ayrıntılarına bakmanın zamanı geldi.
Süreç görüntüsü tam olarak nedir? İşlem görüntüsü, programı çalıştırırken gerekli olan yürütülebilir bir dosyadır. Bu görüntü genellikle aşağıdaki bölümleri içerir -
- Kod parçası veya metin parçası
- Veri segmenti
- Yığın segmenti
- Yığın segmenti
İşlem görüntüsünün resimli gösterimi aşağıdadır.
Code segmentnesne dosyasının veya programın sanal adres alanının yürütülebilir talimatlardan oluşan bir bölümüdür. Bu genellikle salt okunur veri segmentidir ve sabit bir boyuta sahiptir.
Veri segmenti iki türdendir.
- Initialized
- Un-initialized
Initialized data segment nesne dosyasının veya programın sanal adres alanının başlatılmış statik ve global değişkenlerden oluşan bir bölümüdür.
Un-initialized data segmentnesne dosyasının veya programın sanal adres alanının başlatılmamış statik ve global değişkenlerden oluşan bir bölümüdür. Başlatılmamış veri segmenti, BSS (Sembolle Başlatılan Blok) segmenti olarak da adlandırılır.
Data segmentokuma-yazmadır, çünkü değişkenlerin değerleri çalışma süresi boyunca değiştirilebilir. Bu segment ayrıca sabit bir boyuta sahiptir.
Stack segmentotomatik değişkenler ve fonksiyon parametreleri için ayrılmış bir hafıza alanıdır. Ayrıca, işlev çağrılarını yürütürken bir dönüş adresi depolar. Yığın, yerel veya otomatik değişkenleri, işlev parametrelerini ve sonraki adresi veya dönüş adresini depolamak için LIFO (Son Giren İlk Çıkar) mekanizmasını kullanır. İade adresi, işlevin yürütülmesi tamamlandıktan sonra dönülecek adresi ifade eder. Bu segment boyutu, yerel değişkenler, fonksiyon parametreleri ve fonksiyon çağrılarına göre değişkendir. Bu segment daha yüksek bir adresten daha düşük bir adrese doğru büyür.
Heap segmentmalloc () ve calloc () çağrıları gibi dinamik bellek depolaması için ayrılan bellek alanıdır. Bu segment boyutu, kullanıcı tahsisine göre de değişkendir. Bu segment daha düşük bir adresten daha yüksek bir adrese doğru büyür.
Şimdi segmentlerin (veri ve bss segmentleri) boyutunun birkaç örnek programla nasıl değiştiğini kontrol edelim. Segment boyutu, "boyut" komutunun çalıştırılmasıyla bilinir.
Başlangıç programı
Dosya: segment_size1.c
#include<stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
Aşağıdaki programda, başlatılmamış bir statik değişken eklenmiştir. Bu, başlatılmamış segment (BSS) boyutunun 4 Bayt artacağı anlamına gelir.Note- Linux işletim sisteminde int boyutu 4 bayttır. Tamsayı veri türünün boyutu, derleyiciye ve işletim sistemi desteğine bağlıdır.
Dosya: segment_size2.c
#include<stdio.h>
int main() {
static int mystaticint1;
printf("Hello World\n");
return 0;
}
Aşağıdaki programda, başlatılmış bir statik değişken eklenir. Bu, başlatılan segment (DATA) boyutunun 4 Bayt artacağı anlamına gelir.
Dosya: segment_size3.c
#include<stdio.h>
int main() {
static int mystaticint1;
static int mystaticint2 = 100;
printf("Hello World\n");
return 0;
}
Aşağıdaki programda, başlatılmış bir global değişken eklenir. Bu, başlatılan segment (DATA) boyutunun 4 Bayt artacağı anlamına gelir.
Dosya: segment_size4.c
#include<stdio.h>
int myglobalint1 = 500;
int main() {
static int mystaticint1;
static int mystaticint2 = 100;
printf("Hello World\n");
return 0;
}
Aşağıdaki programda, başlatılmamış bir global değişken eklenmiştir. Bu, başlatılmamış segment (BSS) boyutunun 4 Bayt artacağı anlamına gelir.
Dosya: 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;
}
Yürütme Adımları
Derleme
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
Yürütme / Çıktı
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