2011-07-06 23 views
6

Hem 64 bit hem de 32 bit için çok işlemcili bir Linux Sürümü adres alanı düzeninin tüm ayrıntılarını bilmek istiyorum. Bunu açıklayan herhangi bir makaleye bağlantı takdir edilecektir. Ve sadece ayrıntılara değil, tüm ayrıntıları bilmem gerektiğine dikkat etmeliyim, çünkü ben doğrudan bununla ilgileneceğim. Bu yüzden, örneğin, iş parçacığı yığınlarının bulunduğu yer, yığın, iş parçacığı özel verileri vb. ...Çok Dilli Bir Linux İşlemi için Adres Yerleşim Düzeni

+0

Özellikle ilgili ayrıntıları bilmek istiyorum SplitStacks özelliği ile sınırsız olmasını yığını verir

mem = mmap (NULL, size, prot, MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); 

yazılabilir bölüm. Örneğin, yazılabilir olmadığı için kodu içeren adres alanının parçasıyla uğraşmaya ihtiyacım yok. – MetallicPriest

+0

İşlenmemiş linux işleminin tüm ayrıntılarını biliyor musunuz, değil mi? İşlenmemiş ve çok iş parçacıklı olmayanlar arasındaki fark, yığınların sayısı ve yeridir. – osgx

cevap

6

İplik başlangıcında mmap ile iş parçacığı yığınları ayrılır (veya daha önce - yığın alanını pthread_attr s). TLS verileri iş parçacığı yığınının başında saklanır. İş parçacığı yığınlarının boyutu sabittir, genellikle 2 ila 8 MB arasındadır. İş parçacığı çalışırken her bir iş parçacığının yığın boyutu değiştirilemez. (İlk iş parçacığı - ana işletim - adres alanının sonunda hala ana yığını kullanır ve bu yığın büyüyebilir ve daraltabilir.) Yığın ve kod tüm iş parçacıkları arasında paylaşılır. Muteksler data bölümünde herhangi bir yerde olabilir - sadece bir yapıdır.

parçacığı yığınının mmap herhangi adreste sabit değildir:

Glibc sources PS Modern GCC ipler

İlgili konular