İskender Atasoy. * iskenderatasoy@yahoo.co.uk Özet



Benzer belgeler
Teknikleri. Önsöz. iskender atasoy

PROGRAMLAMAYA GİRİŞ DERS 2

Jval tipi. Genel veri yapılarını kullanacağımız zaman Jval den faydalanırız.önemli olanlar aşağıda mevcuttur:

BİLG Dr. Mustafa T. Babagil 1

C Programlama printf() Fonksiyonu

Proses. Prosesler 2. İşletim Sistemleri

PROSESLER. Proses. Proses

Qt ile Bir Ağ Uygulaması

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

INTEGER OVERFLOW ***************************************************************/

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Linux Assembly Programlamaya Giriş

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

Dr. Fatih AY Tel: fatihay@fatihay.net

Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı Ver:01

Soket IPC (bağlantı doğrultusunda olan istemci and sunucu operasyonları) Sunucu. İstemci. socket() Bir soket yarat. bind()

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

Fonksiyonlar (Altprogram)

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Multicore/Multithread Programlama

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Temel Dosya İşlemleri. Kütük Organizasyonu 1

enum, struct, union ve typedef Yapıları

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Python ile Programlamaya Giriş DERS 9: FONKSİYONLAR DR. HÜSEYİN BAHTİYAR

ALGORİTMA VE PROGRAMLAMA II

Mifare Kart Yazıcı/Okuyucu Modül (MFM-200)

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

3.1 Pointer in Yararları

Parsing Dostu: AWK! Özkan KIRIK. ozkan ~ enderunix.org

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Linux Dosya Yapısı. Eren BAŞTÜRK.

Bölüm 2 - C ile Programlamaya Giriş

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

Telefon Rehberi Uygulaması

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

BİLG Dr. Mustafa T. Babagil 1

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

int printf (const char *format [, argument,...]);

Bilgisayar Programlama. 1.Hafta

String Sınıfını Yönetmek

Diziler (Arrays) Çok Boyutlu Diziler

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

Squid i Follow X-Forwarded-For headers Yaması İle Patchlemek

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

C PROGRAMLAMA D İ L İ

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

BİLGİ İŞLEM DERS 1. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

NESNEYE YÖNELİK PROGRAMLAMA

Kabuk Programlama (Bash)

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

C ile Uygulamalar 4 - Cevaplar

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

Programlama Dilleri Laboratuvarı

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Bilgisayar Sistemlerine Genel Bakış

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Biçem Belirteçleri (Format Specifiers)

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Adım Adım C-II. Eksik kalmış konular

printf("\nbilgilerini goruntulemek istediginiz ogrencinin numarasini girin: "); scanf("%d",&no);

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Giriş. ENF102 Jeoloji

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

STRİNG DİZİLER(KATARLAR)

10/17/2007 Nesneye Yonelik Programlama 3.1

Hafta 13 Fonksiyonlar

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

Dr. Fatih AY Tel: fatihay@fatihay.net

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

8. İŞARETCİLER (POINTERS)

Pointer Kavramı. Veri Yapıları

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Python ile Programlamaya Giriş DERS 11: DOSYA İŞLEMLERİ DR. HÜSEYİN BAHTİYAR

Temel Linux Eğitimi 1., 2. ve 3. Bölümler

Karma C/C + + Kodlama

Temel Giriş/Çıkış Fonksiyonları

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

1 PROGRAMLAMAYA GİRİŞ

Transkript:

Linux Bellek Kullanımı n /* * Copyright (c) 2005 İskender Atasoy. öğ renilmesi * Mailto : iskenderatasoy@yahoo.co.uk * Permission is granted to copy, distribute and/or modify this document * under the terms of the GNU Free Documentation License, Version 1.2 * or any later version published by the Free Software Foundation; * with no Invariant Sections, no Front-Cover Texts, and no Back-Cover * Texts. A copy of the license is included in the section entitled "GNU * Free Documentation License". * */ Özet Bu dokümanla Linux'ta RAM,SWAP alanının kullanımı ve erişim şekilleri.ayrıca /proc dizini hakkında bilgi ve örnekler verilecektir.bu döküm anı anlamanız için C bilginiz olması konuyu daha iyi anlamanızı sağlayabilir. Bu doküman giriş niteliğindedir. Kodlarda grafik Ara birimi,kanal programlama. gibi kodu büyütecek unsurlardan kaçınılmıştır.

Proc Dizini Proc Dizini linux sistemi çalıştığında linux kernel'i tarafından oluşturulan sistem bilgilerinin tutulduğu bir dizindir. Bu dizinde CPU tipinden,bellek kullanımına,disk yapısı,proses bilgileri ve birçok bilgiye ulaşabiliriz. Örneğin en basit bellek kullanımın görmek istiyorsanız yapmanız gereken # cat /proc/meminfo derseniz sistem size şöyle bir çıktı verecektir.(sizin bilgisayarınızda RAM oranına göre değişebilir.) : total: used: free: shared : buffers: cached: Mem: 294531072 266133504 28397568 0 66404352 85819392 Swap: 271425536 0 271425536 MemTotal: 287628 KB MemFree: 27732 KB MemShared: 0 KB Buffers: 64848 KB Cached: 83808 KB SwapCached: 0 KB Active: 189288 KB ActiveAnon: 70744 KB ActiveCache: 118544 KB Inact_dirty: 25056 KB Inact_laundry: 0 KB Inact_clean: 5804 KB Inact_target 44028 KB HighTotal: 0 KB HighFree: 0 KB LowTotal: 287628 KB LowFree: 27732 KB SwapTotal: 265064 KB SwapFree: 265064 KB Şeklinde bir çıktı olacaktır.bu şekilde cpuinfo(cpu tipi ve özellikleri),harddisk bilgileriniz vb.. sistem bilgileri /proc dizinden inceleyebilirsiniz. Bellek Kullanımın Öğrenim Çeşitleri Linux'te bellek kullanımının öğrenilmesi ile ilgili değişik yöntemler bulunmaktadır. Ben Kullandığım 3 değişik yöntemi bu dokümanda anlatmaktayım. 1.Yöntem : En basit olan yöntem /proc/meminfo dosyasını açıp programımızda kullanmak. Bu istediğiniz her hangi bir dille bu yöntemi uygulayabilirsiniz. 2.Yöntem : Linux sürümlerinde bulabileceğiniz veya İnternet'ten indirebileceğiniz bu kütüphane veya yazılım geliştirme ara birimi ile olan Glibtop kütüphanesi. Bu

kütüphane ile CPU kullanımından, Kullanılan RAM alanında dahil birçok kütüphanesi olan güzel ve kullanışlı bir kütüphane. örnek kullanımı : systeminfo.c /* iskender atasoy email iskenderatasoy@yahoo.co.uk free usage */ #include <stdio> #include <glibtop.h> #include <glibtop/cpu.h>//cpu hakkında bilgi alabileceğimiz header #include <glibtop/mem.h>//bellek hakkında bilgi alabileceğimiz header #include <glibtop/proclist.h>//prosesler hakkında bilgi alabileceğimiz header int main(){ //CPU hakkında bilgilerin depolanacağı struct yapısı glibtop_cpu cpu; //Bellek kullanımı hakkında bilgilerin depolanacağı struct yapısı glibtop_mem memory; //Proses kullanımı hakkında bilgilerin depolanacağı struct yapısı glibtop_proclist proclist; //mutlaka glibtop_init fonksiyonunu çağırıp sistemi //hazırlamalıyız. glibtop_init(); //CPU hakkında bilgiler alınıyor glibtop_get_cpu (&cpu); //ekrana aktarılıyor printf("cpu TYPE INFORMATIONS \n\n" "Cpu Total : %ld \n" "Cpu User : %ld \n" "Cpu Nice : %ld \n" "Cpu Sys : %ld \n" "Cpu Idle : %ld \n" "Cpu Frequences : %ld \n", (unsigned long)cpu.total, (unsigned long)cpu.user, (unsigned long)cpu.nice, (unsigned long)cpu.sys, (unsigned long)cpu.idle, (unsigned long)cpu.frequency);

//bellek kullanımı glibtop_get_mem(&memory); printf("\nmemory USING\n\n" "Memory Total : %ld MB\n" "Memory Used : %ld MB\n" "Memory Free : %ld MB\n" "Memory Buffered : %ld MB\n" "Memory Cached : %ld MB\n" "Memory user : %ld MB\n" "Memory Locked : %ld MB\n", (unsigned long)memory.total/(1024*1024),//toplam RAM (unsigned long)memory.used/(1024*1024),//kullanılan RAM (unsigned long)memory.free/(1024*1024),//boş RAM miktarı (unsigned long)memory.shared/(1024*1024),//paylaşılan ram (unsigned long)memory.buffer/(1024*1024),//tampon bellek alanı (unsigned long)memory.cached/(1024*1024),//cache alanın boyutu (unsigned long)memory.user/(1024*1024),//kullanıcı alanı (unsigned long)memory.locked/(1024*1024));//özel alanların boyutu int which,arg; //istenilen proses hakkında bilgi alınır glibtop_get_proclist(&proclist,which,arg); printf("%ld\n%ld\n%ld\n", (unsigned long)proclist.number,//proses nosu (unsigned long)proclist.total,//proses toplamı (unsigned long)proclist.size);//proses boyu return 0; Makefile CC=gcc CFLAGS=-Wall -g CLIBS=-lgtop-2.0 -lgtop_sysdeps-2.0 -lgtop_common-2.0 cpuinfo:cpu.c $(CC) $(CFLAGS) systeminfo.c -o systeminfo $(CLIBS) clean: rm -f systeminfo Çalıştırmak için sadece make demeniz yeter. Programı silmek için make clean deminiz. Programı./systeminfo ile çalıştırabilirsiniz. Hata olarak glibtop bulunamadı der ise kütüphaneyi kendiniz kurmanız gerekecektir. 3.Yöntem : Linux Kernel'inden faydalanmaktır.linux'te Bellek kullanımı ile ilgili kullanılan sysinfo(..) kütüphanesiyle de bellek oranın tespiti mümkündür. Konsoldan

#man sysinfo bize sysinfo ilgili dokümanı(man İngilizcedeki Manuals sözcüğünün kısaltmasıdır. Türkçe tercümesi el kitabı, kılavuz(bkz. konsolda man man derseniz detaylı kullanımını görürsünüz.)) çıktı olarak konsola SYNOPSIS #include <sys/sysinfo.h> int sysinfo(struct sysinfo *info); DESCRIPTION Until Linux 2.3.16, sysinfo used to return information in the following structure: struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ char _f[22]; /* Pads structure to 64 bytes */ ; and the sizes were given in bytes. Since Linux 2.3.23 (i386),2.3.48 (all architectures) the structure is struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ unsigned long totalhigh; /* Total high memory size */ unsigned long freehigh; /* Available high memory size */ unsigned int mem_unit; /* Memory unit size in bytes */ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */ ; RETURN VALUE On success, zero is returned. On error, -1 is returned, and errno is set appropriately. bize fonksiyonun hangi kütüphanede olduğu hakkında bilgi vermektedir. Burada

önemli noktalardan biride iki farklı struct yapısının olmasıdır. Yukarıda yardım metninde 2.3.16 kernel versiyonuna kadar 1. struct yapısı 2.3.23 den 2.3.48 arasında 2. struct yapısı kullanılmaktadır diyor. Ayrıca hata olduğunda ise -1 geri dönmekte imiş. Hangi kernel versiyonu olduğunu konsoldan uname -a veya cat /proc/version diyerek öğrenebilirsiniz. Şimdi Biraz parmaklarımı çalıştırma zamanı.yapmak istediğimiz şey basit biz çıkmak isteyene kadar sistem sürekli/belli aralıklarda sistem bilgisini bize versin. Örneğimiz için şimdilik sadece RAM ve SWAP bilgisi versin. systeminfo2.c /* iskender atasoy email iskenderatasoy@yahoo.co.uk free usage */ #include <stdio.h> //printf fonksiyonu #include <stdlib.h> //ekranı silmek için system() fonksiyonu #include <string.h> //strerror(..) ve strcpy için #include <errno.h> //errno değişkeni için #include <unistd.h> //sleep fonksiyonu için #include <sys/sysinfo.h> //sysinfo(..) fonksiyonu #include <linux/version.h> //sistem kernel'in numarası için //Funksiyon Prototipimiz void get_ram_info(); int main(){ get_ram_info(); return 0; void get_ram_info() { struct sysinfo system_info; //RAM ve SWAP hakkında bilgi alacağımız yapı int error; //hata kodumuz while(1){ //Biz kapatana kadar çalışsın error=sysinfo(&system_info); //gerekli bilgileri al if(error < 0){//hata varmı? Her zaman kontrol etmemiz gerek error=errno; //errno *nix sistemler için global hata denetleyicisidir. //yani hata numarası buna yazılır.ama bazı durumlarda //kernel bloke edebilir.en güvenilir yol geçici bir nesneye atamaktır. //hata numarasının okunabilir forma dönüştürmesi /* Error Found...Print an error message and exit. */ fprintf (stderr, "Error Definations is: %s\n", strerror (error)); exit (1); //programdan çık

//linuxte en kolay ekranı silme komutudur. //Burada clear bash komutudur. system("clear"); //Ayrıca Linux'ta Bir konsol prog. CTRL+C ile sonlandıra bilirsiniz. printf("\t\t\tmemory Browser Text Versions\n"); printf("\t\t\tto Exit use CTR+C\n\n"); printf("\t\t\ttotal Ram Size : %ld\n",(long)system_info.totalram); printf("\t\t\tfree Ram Size : %ld\n",(long)system_info.freeram); printf("\t\t\tshared Ram Size : %ld\n",(long)system_info.sharedram); printf("\t\t\tbuffered Ram Sizi : %ld\n",(long)system_info.bufferram); printf("\t\t\ttotal Swap Size : %ld\n",(long)system_info.totalswap); printf("\t\t\tfree Swap Size : %ld\n",(long)system_info.freeswap); printf("\t\t\tnumber Of Proses : %d \n",(short int)system_info.procs); //these code block works 2.3.23-48 kernel version //if our kernel number less than it error can happend //if kernel >2.3.23 use these else not //Evet buraya kadar sıradan bir koddu fakat //kernel nosunu alıp iki struct yapısı içinde çalışabilir hale getirdik. //Böylece programımızın çaşılabilirliğini 2.3.48 nolu sürüme kadar garantiledik. if(strcmp("2.3.23",uts_release)<0 && strcmp(uts_release,"2.3.48")>0){ printf("\t\t\ttotal High Memory Size : %ld\n",(long)system_info.totalhigh); printf("\t\t\tavailable High Mem.Size : %ld\n",(long)system_info.freehigh); printf("\t\t\tmemory Unit Sizes : %ld\n",(long)system_info.mem_unit); //Sleep komutu *UNIX sistemlerinde belirtilen süre kadar sistem bekler. //bizim örneğimiz 2 sn bekliyecek yoksa ekranda çok hızlı bir geçiş olacaktı. sleep(2); Derlemek için gcc -Wall systeminfo2.c -o systeminfo2 demeniz yeter. Son Söz Eğer buraya kadar tahammül ettiyseniz :)) linux bellek tespiti için 3 yöntemi göstermiş olmuş bulunmaktayız. Her Türlü görüş ve öneriyi mail adresime ilete bilirsiniz. mail adresim iskenderatasoy@yahoo.co.uk