İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John von Neumann, Jpresper Eckert ve William Mauncley VAKUM TÜPLERİ kullanarak ilk hesap yapabilen motorlar üretmişlerdir. Bu makineler odalar dolusuydu ve binlerce tüpten oluşuyordu. Başka makineler üretilmiş, bu makinelerin fişlerinin farklı yerlere takılıp çıkartılması ile programlama yapılabiliyordu. 1950 lerde delikli kartlar (punch cart) çıkmıştır. Programlar bu kartlar üzerine delikler ile işleniyordu. İKİNCİ NESİL, TRANSİSTÖRLER VE TOPLU İŞ(BATCH) SİSTEMLERİ Bu makineler müşterilere satılabilecek hale ve güvenilirliğe gelmişlerdi. Çok pahalı olduğu için büyük kurumlar, devletler ya da üniversiteler alabiliyordu. Bir iş yaptırmak için program FORTRAN ya da ASSEMBLER ile bir kağıda yazılır. Sonra bu program delikli kartlara aktarılır. Bu kartlar sırasıyla makinelerde işletilirdi. Programların kartlardan aktarılma işlemi süresini azaltmak amacıyla toplu iş sistemleri (batch systems) geliştirilmiştir. İKİNCİ NESİL, TRANSİSTÖRLER VE TOPLU İŞ(BATCH) SİSTEMLERİ Bu sistemde programlar kart okuyucusundan manyetik teyp'e kayıt edilir, bu teyp bilgisayarda çalıştırılır, çıktılar manyetik teype kayıt edilir. Başka yerden de çıktılar yazıcılar ile alınırdı. ÜÇÜNCÜ NESİL (1965-1980) ENTEGRE DEVRELER VE ÇOKLU PROGRAMLAMA (Multi Programming) Mevcut ortamda sayısal hesaplamalar için kullanılan IBM 7094 ve karakter işlemleri için kullanılan IBM 1401 vardı. İkisinin gücünü IBM birleştirerek System/360 isimli bir sistem oluşturdu. Hem matematiksel hem de ticari işler için geliştirilmişti. 360 ilk kez entegre devreleri kullanan bilgisayardır. Bu sistemde kullanılan işletim sistemi OS/360 dır. Bu sistemde çoklu programlama kavramı ortaya çıkmıştır. Eskiden bir iş çalışırken I/O nedeniyle beklediğinde başka bir iş çalışmazdı. OS/360 ile bellek birden fazla parçaya ayrılmış ve her parçada başka işin çalışması sağlanmıştır. Bir işin çalışması I/O için askıya alındığında, bellekteki başka bir işe geçilirdi. Diğer yeniliği kartlardaki programları diske okuması ve programları diskten yüklemesidir. DÖRDÜNCÜ NESİL (1980-1990) KİŞİSEL BİLGİSAYARLAR LSI(Large Scale Integration) büyük ölçekli entegre devrelerin geliştirilmesi ile (1 cm slikon üzerinde yüzlerce transistör vardır) kişisel bilgisayarlar üretilmiştir. PDP-11 sınıfı sistemlerden farklı değildirler fakat fiyatları daha ekonomiktir. 1974 de Intel 8080 8 bitlik bir CPU geliştirmiştir. Bu CPU için bir işletim sistemi aranmaktaydı. Gary Kildall CP/M (Control Program for Microcomputers) isimli bir işletim sistemi geliştirmiştir. 1980 lerde IBM, IBM PC isimli bir bilgisaayr geliştirmiştir. IBM yeni sistemi için Bill Gates den BASIC yorumlayıcısının lisansı için anlaşırken işletim sistemi konusunu da görüştüler. Bill Gates en büyük işletim sistemi üreticisi olan Digital Research firmasını önerdi(CP/M). Firma IBM 'in isteklerini kabul etmedi. IBM Bill Gates'e tekrar teklif verdi İşletim Sistemi Türleri * Mainframe (Ana Çatı) sistemleri * Sunucu(Server) işletim sistemleri * Çok işlemcili işletim sistemleri * Kişisel bilgisayar işletim sistemleri * Gerçek Zamanlı(real-time) işletim sistemleri *Gömülü(embedded) işletim sistemleri *Akıllı-kart(smart card) işletim sistemleri Anaçatı(Mainframe) İşletim Sistemleri *Yoğun I/O işlemi gerektiren çok sayıda görev çalıştırmaya yönelik sistemler için kullanılır: Hizmetleri: 1. toplu iş(batch) kipinde çalışma. Örneğin, aynı anda tüm kullanıcıların belirli hesaplarını güncelleme gibi. 2.birim-iş[hareket] (transaction) işleme. Örneğin, rezervasyon işlemleri gibi. 3.zaman paylaşımlı çalışma. Örneğin, veritabanı sorgulama Sunucu İşletim Sistemleri Sunucular üzerinde çalışırlar. sunucuların kaynak kapasiteleri yüksektir. bağlı iş istasyonları vardır. anaçatı sistemler bulunur. Bilgisayar ağı üzerinden çok sayıda kullanıcıya hizmet verir. donanım ve yazılım paylaştırma yazıcı hizmeti, dosya paylaştırma, web erişimi, Çok İşlemcili İşletim Sistemleri -Birden fazla işlemcili bilgisayar sistemlerinde kullanılır. -işlem gücünün arttırılması hedeflenmektedir. -İşlemcilerin bağlanma şekillerine göre sistemler gruplanırlar: *paralel sistemler *grid sistemler *çok işlemcili sistemler özel işletim sistemi tasarlanabilir. Kişisel Bilgisayar İşletim Sistemleri -Kullanıcıya etkin ve kolay kullanılabilri bir arayüz sunmak. -ofis uygulamaları gibi programlar mevcuttur. Windows 98,2000,XP MacOS Linux Gerçek Zamanlı İşletim Sistemleri Endüstriyel kontrol sistemlerinde kullanılırlar. Zaman kısıtlaması çok önemlidir. Örnek:VxWorks , QNX Gömülü(Embedded) İşletim Sistemleri avuç-içi bilgisayarlar ve gömülü sistemlere yönelik tasarlanmıştır. kısıtlı ve özel amaçlı işlevler içerir. TV, mikrodalga fırın, çamaşır makinesi, cep telefonları için geliştirilmiş sistemler. Bazı sistemlerde boyut, bellek ve güç harcama kısıtlamaları vardır. PalmOS , WindowsCE, Symbian OS Akıllı Kart(Smart Card)İşletim Sistemleri -En küçük işletim sistemi türüdür. -Kredi kartı boyutunda üzerinde işlemci olan kartlarda çalışır. -İşlemci ve bellek kısıtlamaları çok önemlidir. -bazı işletim sistemleri Java tabanlıdır.JVM içerir ve Java programları çalıştırabilirler. Örn:MULTOS, Windows Embedded CE,SmartecOS TEMEL İŞLETİM SİSTEMİ YAPILARI 1.Tek Parça (monolitik) Sistemler 2.Katmanlı(Layered) Sistemler 3.Sanal Makineler(Virtual Machines) 4.Dış-çekirdek(exo-kernel) Sistemler 5.Sunucu-İstemci Modeli (server-client) Tek Parça(Monolitik) Sistemler Bu mimaride genel bir yapı yoktur. İşletim sistemi büyük bir prosedür topluluğudur. Tüm yapılabilecek işler işletim sisteminin içinde yer alır. İşlevleri yerine getiren tüm prosedürler aynı seviyede yer alır ve birbirleri ile etkileşim yapabilirler. Çekirdek yapısı büyüktür. Sanal Makineler (Virtual Machines) -İlk kez IBM tarafından geliştirilmiştir. VM/370 ismiyle çıkmıştır. -Amaç çoklu programlama ortamı ile tamamen donanıma bağımlı olan kısmı birbirinden ayırmaktır. -Sistemin temeline SANAL MAKİNE MONİTÖRÜ denilir. Bu makine donanım üzerinde çalışır ve çoklu programlamayı gerçekleştirir. -Birden fazla sanal makineyi bir üst katmanda çalıştırır. Bu makineler asıl sistemin herşeyiyle birebir kopyasıdır. -Her sanal makine farklı İşletim Sistemi çalıştırabilir. Kabuk: İşletim sisteminin bir parçası olmayan yazılımdır. Çekirdek: Sistem Çağrıları: Sistem yazılımları ve fiziksel donanım arasındaki arayüzdür. UNİXteki Sistem Çağrıları Windowstaki NT Sistem Servislerine eşittir. O.S Yapıları 1. 2. 3. 4. 5. 6. 7. 8. Basit (Yapısızlık Yapısı) Mikroçekirdek Hibrit Modüler (Modüler çekirdek açılış ve çalışma anında dinamik olarak bağlanır.) a. Window b. Linux Sanal Makinalar Dış Çekirdek (ekzokernel)(Dışardan ve kısıtlı bir kaynak kullanmak istiyorsa ekzokernel) Katmalı yapı Sunucu İstemci Yapısı KATMANLI MİMARİ 5 OPERTATÖR 4 KULLANICI PROGRAMLARI 3 GİRİŞ/ÇIKIŞ YÖNETİMİ 2 SÜREÇ-OPERATÖR İLETİŞİMİ 1 BELLEK YÖNETİMİ 0 İŞLEMCİ TAHSİS ETME VE ÇOKLU PROGRAMLAMA SİSTEM ÇAĞRILARI Uygulama Sistem Çağrısı yap Kullanıcı Uzayı Sistem Çağrısından Dönüş Çekirdek Uzayı Sistem Çağrısı FORK FONKSİYONU KULLANARAK ÇOCUK PROSES OLUŞTURMAK #include<sys/types.h> #include<unistd.h> Sistem çağrısı için eklenen başlık dosyaları #include<stdio.h> main() { pid_t pid; //fork çağrısının dönüş tipi pid=fork(); //yeni proses if(pid==0) printf("Ben çocuk%d/n",pid); else printf("Ben anne%d/n",pid); } pid: proses işlem, pid 0 değerini döndürürse çocuk proses pozitif değer döndürürse anne prosestir. Fork: Çocuk proses yaratır. Clone: Anne çocuk ilişkkisi var. Aynı zamanda çocuğa bir ikiz kardeş yaratıyor. Trap (tuzak) CLONE FONKSİYONU İLE ÇOCUK PROSES OLUŞTURMAK #include<sched.h> #include<stdio.h> #include<malloc.h> #define YIGIN_BOYUT 1024 int yeni_proses() { printf("yeni prosesim\n"); return 1 } main() { int pid; void *yigin; yigin=malloc(YIGIN_BOYUT); if(yigin==0) { printf("Bellek tahsis hatası"); exit(1); } pid=clone(&yeni_proses,(char*) yigin + YIGIN_BOYUT,0,0); pid=waitpid(pid,0,0) //çocuk prosesin işlemini bitirmesini bekle printf("cocuk proses sonlandı\n"); Free(yigin) //Çocuk prosese tahsis edilen bellek alanı serbest bırakılıyor. } Mallac;Bellek alanı tahsis etmek/almak. Free;Çocuk prosese tahsis edilen bellek alanı serbest bırakılıyor. 26.02.2014 Wait sistem çağrısı #include<sys/wait.h> main() { pid_t pid //fork çağrısının dönüş değeri int statu //çocuk prosesin sonlanma değeri pid=fork() //çocuk proses burada oluşturuluyor. if(pid==0) printf("Ben çocuk proses\n") else { printf("Ben anne proses,bekledim") wait(&statu); } } Proses Yönetim Apileri Linux Fork+exec waitpid exit brk getpid getpgrp setsid ptrace Windows Creareprocess WaitForSingleObject ExitProcess GetProcessID DebugActiveProcess Linux ve Windows sistem programlamadaki eşdeğer fonksiyonlar. Uygulama 1: Not Defteri uygulamasını çalıştırıp ekrana, anne ve çocuk proseslerin PID’lerini yazdıran, uygulama kapanıncaya kadar bekleyen C kodunu yazınız. #include <windows.h> #include <stdio.h> char szClassName [ ] = "WindowsAPP"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { STARTUPINFO sai={0}; PROCESS_INFORMATION pi; char sz[128]; MessageBox(NULL, "Not Defteri baslatiliyor...","Mesaj",MB_OK); //Not defteri prosesi oluşturuluyor. sai.cb=sizeof(sai); CreateProcess(NULL,"notepad.exe",NULL,NULL,FALSE,0,NULL,NULL,&sai,&pi); //ekrana ebeveyn ve yeni process pidleri gösteriliyor// sprintf(sz,"Ebeveyn PID: %d\nNot Defteri PID:%d", GetProcessId(GetCurrentProcess()), pi.dwProcessId); MessageBox(NULL,sz,"process ID",MB_OK); //not defteri sonlanana kadar bekleyecek// WaitForSingleObject(pi.hProcess,0); //Burada 0 yerine INFINITE de yazılabilir INFINITE sabiti seçilirse bekleme süresi dikkate alınmayıp nesne işaretlenene kadar bekleyecektir. 0 yazıldığı takdirde direk Not Defterini çalıştıracaktır. MessageBox(NULL,"Not defteri kapatildi","Mesaj",MB_OK); //Handle Değişkeni Kapatılıyor// CloseHandle(pi.hThread); CloseHandle(pi.hProcess); return 0; } BOOL WINAPI DebugActiveProcess( DWORD dwProcessId); 1) Kodlar ilk çalıştırıldığında bu mesaj kutusu gelecektir. 2) Tamam tuşuna basıldıktan sonra Not Defteri açılarak Processler bu şekilde gösterilecektir. 3) Tamam tuşuna basıldığında bu mesaj kutusu gelecektir ve Buradaki tamama basıldıktan sonra not defteri kapatılacaktır. DebugActiveProcess(): proses için hata ayıklama sağlar. Fonksiyonun geri dönüş değeri TRUE ifadesi ise fonksiyon başlatılacak. Uygulama 2: Not Defteri uygulamasının DebugActiveProcess() API’siyle çökmesini sağlayan C kodunu yazınız. #include <windows.h> #include <stdio.h> int WINAPI WinMain (HINSTANCE hinst, HINSTANCE hprevinst,LPSTR cmd_line,int show_cmd) { STARTUPINFO sai={0}; PROCESS_INFORMATION pi; DEBUG_EVENT dbevent; CONTEXT context; DWORD dw, buf; //Not defteri prosesi oluşturuluyor. sai.cb=sizeof(sai); CreateProcess(NULL,"notepad.exe",NULL,NULL,FALSE,0,NULL,NULL,&sai,&pi); //Prosesin ekranda gözükmesi bekleniyor. Sleep(1000); //Hata ayiklama islemi baslatiliyor. if(!DebugActiveProcess(pi.dwProcessId)) { //Hata oluşursa ekrana mesaj gösteriliyor MessageBox(NULL,"Hata ayiklama islemi baslatilmadi!","Hata",MB_OK|MB_ICONERROR); return -1; } //Hata ayiklama olayi bekleniyor. while(WaitForDebugEvent(&dbevent, 0)) { if(EXIT_PROCESS_DEBUG_EVENT==dbevent.dwDebugEventCode) break; //Proses oluşturulurken prosesin EIP yazmacına prosesin cokmesi icin 0xdeadbeed adresi yaziliyor. if(CREATE_PROCESS_DEBUG_EVENT==dbevent.dwDebugEventCode) { context.ContextFlags=CONTEXT_CONTROL; GetThreadContext(dbevent.u.CreateProcessInfo.hThread,&context); buf=0xdeadbeef; WriteProcessMemory(dbevent.u.CreateProcessInfo.hProcess, context.Eip, &buf ,sizeof(buf), &dw); } //Hata ayiklama islemine devam ediliyor. ContinueDebugEvent(dbevent.dwProcessId,dbevent.dwThreadId,DBG_EXCEPTION_NOT_HA NDLED); } return 0; } YÖNETİM APILERİ Dosya yönetim API’leri Linux Windows Create, mknod, open, Access CreateFile Close CloseHandle Read ReadFile Write WriteFile Lseek SetFilePointer Stat,fstat GetFileInformationByHandle Dup DuplicateHandle Pipe CreatePipe İoctl DeviceİOControl Rename MoveFile Readfile: Bir dosya yâda G/Ç aygıtından veri okumak için. Bunun da geri dönüş değeri false ise fonksiyon başarısız. Writefile: Bir dosya yâda G/Ç aygıtından veri yazmak için. Bunun da geri dönüş değeri false ise fonksiyon başarısız. Setfilepointer: Dosya içindeki konumu belirtir. Başarılı olduysa yeni işaretçi konumunu döndürür. Getfileınformationbyhandle: Elinde tuttuğu dosya bilgilerini döndürür. Bunun da geri dönüş değeri false ise fonksiyon başarısız. Duplicatehandle: Handle değişkenin bir kopyasını elde etmek için. Handle: Bir Windows nesnesidir. Bir kere kullanılan bir olayı n kendini tekrarlamasını engelleyebilir. HANDLE WINAPI CreateFile( _In_ LPCTSTR _In_ DWORD _In_ DWORD _In_opt_ LPSECURITY_ATTRIBUTES _In_ DWORD _In_ DWORD _In_opt_ HANDLE ); lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile Bir dosya ya da giriş çıkış birimi oluşturmak için kullanılır. 1. 2. 3. 4. 5. 6. 7. Parametre oluşacak dosyanın adı Parametre dosyaya erişim hakları Parametre dosya hangi prosesler tarafından nasıl paylaşabilir. Parametre güvenlik öznitelikleri Parametre dosyanın önceden var olup olmadığı, varsa ne yapılacağı Parametre dosyanın öznitelikleri Parametre oluşacak dosyanın şablonu BOOL WINAPI ReadFile( _In_ HANDLE _Out_ LPVOID _In_ DWORD _Out_opt_ LPDWORD hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, _Inout_opt_ LPOVERLAPPED lpOverlapped ); Dosyadan veri okumak için kullanılır. 1.parametre dosyaya ait Windows değişkenini alır. 2.parametre verinin okunacağı bellek bölgesini işaret eder. 3.parametre okunacak verinin bayt cinsinden miktarı 4.parametre okunan verinin bayt cinsinden miktarı 5.parametre paralel işlem yapmak için kullanılır BOOL WINAPI WriteFile( _In_ HANDLE _Out_ LPVOID _In_ DWORD _Out_opt_ LPDWORD _Inout_opt_ LPOVERLAPPED ); hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWrite, lpOverlapped Dosyaya veri yazmak için kullanılır. 1.parametre dosyaya ait Windows değişkenini alır. 2.parametre verinin yazılacağı bellek bölgesini işaret eder. 3.parametre yazılacak verinin bayt cinsinden miktarı 4.parametre okunan verinin bayt cinsinden miktarı 5.parametre paralel işlem yapmak için kullanılır DWORD WINAPI SetFilePointer( _In_ HANDLE hFile, _In_ LONG lDistanceToMove, _Inout_opt_ PLONG lpDistanceToMoveHigh, _In_ DWORD dwMoveMethod ); Dosya işaretçisinin dosya içindeki konumunu ayarlamak için kullanılır. 1.parametre işlem yapılacak olan dosyaya ait Windows değişkenini belirtir. 2.parametre dosya işaretçisinin ilerleyeceği meseafeyi bayt cinsinden belirtir. 3. parametre 64 bit olduğu zaman ne yapılacağını belirtir. 4.parametre işaretçinin konumlanma yöntemini belirlemek için kullanılır. BOOL WINAPI DuplicateHandle( _In_ HANDLE hSourceProcessHandle, _In_ HANDLE hSourceHandle, _In_ HANDLE hTargetProcessHandle, _Out_ LPHANDLE lpTargetHandle, _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ DWORD dwOptions ); Windows nesnesini kopyalamak için kullanılır. Fonksiyon başarısız ise geri dönüş değeri false dır. 1. 2. 3. 4. 5. 6. 7. Parametre Windows nesnesine ait prosesi alır. Parametre Windows nesnesini alır. Parametre yeni oluşacak kopya Windows nesnesinin barınacağı hedef prosesi alır. Parametre yeni oluşacak kopya Windows nesnesinin işaretçi değişkenini alır. Parametre kopya nesne için erişim haklarını belirler. Parametre kopya nesnesini miras alıp almayacağını belirtir. Parametre baxı seçimsel işlemler için kullanılır. ZAMAN.CPP #include <stdio.h> #include <windows.h> int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst, LPSTR cmd_line, int show_cmd) { HANDLE hdosya; BY_HANDLE_FILE_INFORMATION dosya_bilgi; char bilgi[256]; SYSTEMTIME olus,duzen, soneris; /*Dosya okumak için açılıyor */ hdosya = CreateFile("deneme.txt",GENERIC_ALL, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); /*hata oluşuyor ise */ if(INVALID_HANDLE_VALUE == hdosya){ MessageBox(NULL, "dosya acilamadi, dosya gerçekten varmı", "HATA", MB_OK); return -1; } /*dosya bilgisi alınıyor */ if(!GetFileInformationByHandle(hdosya,&dosya_bilgi)) { MessageBox(NULL, "dosya bilgisi alınamadı", "HATA", MB_OK); CloseHandle(hdosya); return -1; } /*dosya kapatma işlemi */ CloseHandle(hdosya); FileTimeToSystemTime(&dosya_bilgi.ftCreationTime,&olus); FileTimeToSystemTime(&dosya_bilgi.ftLastWriteTime,&duzen); FileTimeToSystemTime(&dosya_bilgi.ftLastAccessTime,&soneris); /*Ekranda bu bilgiler nasıl yazılacak*/ sprintf(bilgi,"Olusturulma zamani : : %02d.%02d.%04d %02d:02d\n", "Degistirilme zamani : : %02d.%02d.%04d %02d:02d\n", "Son Erisim zamani : : %02d.%02d.%04d %02d:02d\n", olus.wDay, olus.wMonth, olus.wYear, olus.wHour, olus.wMinute, duzen.wDay, duzen.wMonth, duzen.wYear, duzen.wHour, duzen.wMinute, soneris.wDay, soneris.wMonth, soneris.wYear, soneris.wHour, soneris.wMinute); MessageBox(NULL, bilgi,"Dosya Zamani" ,MB_OK | MB_ICONINFORMATION); return 0; } İSİM_DEGİSTİRME.CPP #include <windows.h> int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hprevinst, LPSTR cmd_line, int show_cmd) { if(!MoveFile("dnm.txt","ege.txt")) { MessageBox(NULL,"Dosya Adi Değiştirilemedi","HATA",MB_OK); return -1; } return 0; } BAGLANTİ.CPP #define _WIN32_WININT #include<windows.h> #define KLS_ADI "D:\\egemen2" #define BAGLAMA_NOKTASI KLS_ADI "\\flash\\" #define DOSYA_ADI "egemen2.txt" int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hprevinst, LPSTR cmd_line,int show_cmd) { BOOL donus; HANDLE hdosya; char bolum_adi[MAX_PATH]; SetCurrentDirectory("D:\\"); hdosya = CreateFile(DOSYA_ADI,GENERIC_ALL,FILE_SHARE_READ, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE == hdosya) { MessageBox(NULL, "Dosya oluşturulamadı","Hata",MB_OK); return -1; } MessageBox(NULL,"Dosya Olusturuldu","Bilgi",MB_OK); CloseHandle(hdosya); donus = CreateDirectory(KLS_ADI,NULL); if(!donus) { MessageBox(NULL,"Klasor Oluşturulamadı","HATA",MB_OK); return -1; } MessageBox(NULL,"Klasor Oluşturuldu","Bilgi",MB_OK); donus = CreateHardLink(KLS_ADI DOSYA_ADI,"D:"DOSYA_ADI,NULL); if(!donus) { MessageBox(NULL,"Hard Link oluşma Hatası","HATA",MB_OK); return -1; } MessageBox(NULL,"Hard Link oluşturuldu","Bilgi",MB_OK); CreateDirectory(BAGLAMA_NOKTASI,NULL); donus = GetVolumeNameForVolumeMountPoint("D:\\", bolum_adi, _countof(bolum_adi)); if(!donus) { MessageBox(NULL,"Bolüm İsmi Alınamadı","HATA",MB_OK); return -1; } MessageBox(NULL,"Bölüm İsmi Alındı","Bilgi",MB_OK); /*donus = SetVolumeMountPoint(BAGLAMA_NOKTASI,bolum_adi); if(!donus) { MessageBox(NULL,"Flash baglanamadı","HATA",MB_OK); return -1; } MessageBox(NULL,"Flash Baglandı","Bilgi",MB_OK);*/ DeleteVolumeMountPoint(BAGLAMA_NOKTASI); RemoveDirectory(BAGLAMA_NOKTASI); DeleteFile(KLS_ADI DOSYA_ADI); DeleteFile(DOSYA_ADI); RemoveDirectory(KLS_ADI); return 0; } Güvenlik API leri Linux Chmod Getuid GetGid setuid setGid Chown Windows SetFileAttributes (Dosyaya özellik ekler) OpenProcessToken + (O prosesin jetonuna erişim hakkı sağlar) GetTokenInformation(Jeton hakkında bilgi verir.) LogonUser + (Çevrimiçi Kullanıcılar) ImpersenoteLoggedonUser + (Giriş yaptıktan çıkış yapılan ana kadar o prosesi kullanım hakkını sağlıyor) RevertToSelf(Bir prosesi başka proses tarafından çağırılmasını iptal eder.) setFileSecurity(Dosyaların Güvenliğini Sağlar) DWORD DesiredAcces: Prosesten istenen erişim isimleri. Örnek Problem: #include int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if(SetFileAttributes("deneme.txt",FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN)) MessageBox(NULL,"İslem basarisiz oldu","hata",MB_OK|MB_ICONERROR); return 0; } BOOL WINAPI OpenProcessToken( HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle ); Yetim proses: Anne proses tarafından yaratılıyor. Ancak anne proses sonlanıyor. Sadece çocuk proses kalıyor. Zombi Proses: Ölü proses. İşlemini bitirmiş ama bilgileri bellekten silinemeyen. Windows ortamında anne proses tarafından çalıştırılıp sonlanan bir çocuk prosesin sonlanma değerini ekrana yazdıran C kodu; #include <stdio.h> #include <windows.h> main() { STARTUPINFO sai={0}; PROCESS_INFORMATION pi; DWORD exit_code; sai.cb=sizeof(sai); CreateProcess("c:\\windows\\notepad.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&sai,&pi); WaitForSingleObject(pi.hProcess, 20000); //20000 yerine infinite olursa elle sonlandırılma olur. if(GetExitCodeProcess(pi.hProcess,&exit_code)) printf("Oluşturulan prosesin sonlanma degeri %d\n",exit_code); } ---Kodları çalıştırdığımızda ekrana aşağıdaki görüntü gelir. Not defterini kapattığımızdaysa aşağıdaki ekranla karşılaşırız. Windows ortamında anne proses tarafından çalıştırılıp sonlandırılan bir çocuk prosesin sonlanma değerini ekrana yazdıran C kodu;