İşletim sistemi tarihçesi İlk nesİl iŞletİm sİstemlerİ ... · İşletim sistemi tarihçesi...

22
İş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ı.

Upload: others

Post on 26-Sep-2019

76 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

İş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ı.

Page 2: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

İ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

Page 3: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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.

Page 4: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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.

Page 5: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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.

Page 6: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John
Page 7: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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. Basit (Yapısızlık Yapısı)

2. Mikroçekirdek

3. Hibrit

4. Modüler (Modüler çekirdek açılış ve çalışma anında dinamik olarak bağlanır.)

a. Window

b. Linux

5. Sanal Makinalar

6. Dış Çekirdek (ekzokernel)(Dışardan ve kısıtlı bir kaynak kullanmak istiyorsa ekzokernel)

7. Katmalı yapı

8. Sunucu İstemci Yapısı

Page 8: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John
Page 9: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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

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.

Uygulama Sistem Çağrısı yap

Sistem Çağrısı

Sistem

Çağrısından Dönüş

Trap

(tuzak)

Çekirdek Uzayı

Kullanıcı

Uzayı

Page 10: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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>

Page 11: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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 Windows

Fork+exec Creareprocess

waitpid WaitForSingleObject

exit ExitProcess

brk

getpid GetProcessID

getpgrp

setsid

ptrace 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;

Page 12: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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.

Page 13: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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.

Page 14: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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İ

Page 15: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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 lpFileName,

_In_ DWORD dwDesiredAccess,

_In_ DWORD dwShareMode,

_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,

_In_ DWORD dwCreationDisposition,

_In_ DWORD dwFlagsAndAttributes,

_In_opt_ HANDLE hTemplateFile

);

Bir dosya ya da giriş çıkış birimi oluşturmak için kullanılır.

1. Parametre oluşacak dosyanın adı

2. Parametre dosyaya erişim hakları

3. Parametre dosya hangi prosesler tarafından nasıl paylaşabilir.

4. Parametre güvenlik öznitelikleri

5. Parametre dosyanın önceden var olup olmadığı, varsa ne yapılacağı

6. Parametre dosyanın öznitelikleri

7. Parametre oluşacak dosyanın şablonu

BOOL WINAPI ReadFile(

_In_ HANDLE hFile,

_Out_ LPVOID lpBuffer,

_In_ DWORD nNumberOfBytesToRead,

_Out_opt_ LPDWORD lpNumberOfBytesRead,

Page 16: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

_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 hFile,

_Out_ LPVOID lpBuffer,

_In_ DWORD nNumberOfBytesToWrite,

_Out_opt_ LPDWORD lpNumberOfBytesWrite,

_Inout_opt_ LPOVERLAPPED 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,

Page 17: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

_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. Parametre Windows nesnesine ait prosesi alır.

2. Parametre Windows nesnesini alır.

3. Parametre yeni oluşacak kopya Windows nesnesinin barınacağı hedef prosesi alır.

4. Parametre yeni oluşacak kopya Windows nesnesinin işaretçi değişkenini alır.

5. Parametre kopya nesne için erişim haklarını belirler.

6. Parametre kopya nesnesini miras alıp almayacağını belirtir.

7. 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; }

Page 18: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

/*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) {

Page 19: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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);

Page 20: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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 Windows

Chmod SetFileAttributes (Dosyaya özellik ekler)

Getuid OpenProcessToken + (O prosesin jetonuna erişim hakkı sağlar) GetTokenInformation(Jeton hakkında bilgi verir.)

GetGid

setuid 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.)

setGid

Chown 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

);

Page 21: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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.

Page 22: İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ ... · İşletim Sistemi Tarihçesi İLK NESİL iŞLETİM SİSTEMLERİ (1945 – 1955) 1940 larda Howard Aiken, John

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;