İŞLETİM SİSTEMLERİ-ÖNEMLİ NOTLAR -1-

ÇOK DÜZEYLİ KUYRUKLAR

1-Bellek büyüklüğü önceliği ve proses türüne göre birbirinden farklı her işlem için ayrı bir hazır kuyruğu bulunmaktadır.

2-Prosesler bu bilgilere göre kalıcı olarak bir kuyruğa atanmaktadır.

3-Her kuyruğun kendine ait bir iş sıralama algoritması bulunur.

ÇOK DÜZEYLİ GERİ BESLEMELİ KUYRUKLAR

1-Prosesler işlemci kullanımlarına kuyruklara yerleşir

2-Her işlemci kullanımında diğre kuyruğa alınır

3-Çok düzeyli kuyrukta işlemler FIFO ile dönüşümlü sıralamanın hibrit yapısı gibidir.

PETRI NETLER

1-Bilgi akışında sistemlerin kontrollerinde ve aynı anda gerçekleşen aktivitelerin olduğu sistemlerin analizinde de ölümcül kilitlenmenin sezilmesi ve giderilmesi için uygulanana yöntemdir.

ÖLÜMCÜL KİLİTLENME

1-Çok prosesli ortamlarda prosesler bellek alanı cpu kullanımı dosyalar giriş çıkış birimlerigibi sonlu sayıdaki kaynaklar için yarışırlar.Bir proses kaynak alamadığında bekleme durumuna geçer.Kaynağı elinde bulunduran diğer proseste bekleme durumunda olabilir.Bu durumda kaynağı bırakamaz ve kaynağı bekleyen proses bekleme durumunda kalır.Yani ölümcül kilitlenme kaynakları paylaşan ve haberleşen proseslerin sonsuza kadar bekleme durumunda kalıp bloke olmasıdır.
Prosesler elindeki kaynakları bırakmadan başka kaynak isterlerse ölümcül kilitlenmeye neden olabilirler.

BİR İPLİK OLUŞTURUP 1 SN SONRA SIGKILL SİNYALİNİ GÖNDERECEK C++ PROGRAMI

#include <iostream>
#include <signal.h>
using namespace std;

void *iplik_islemi( )
{
    while(1)
         cout<<"BEN İPLİK"<<endl;

}
int main( ){
     pthread_t iplik;
     pthread_create(&iplik,NULL,iplik_islemi,NULL);
     sleep(1);
     pthread_kill(iplik,SIGKILL);
     pthread_join(iplik,NULL);



}

KENDİSİNE kill( ) SİSTEM ÇAĞRISIYLA SIGKILL KOMUTUNU GÖNDERİP SONLANAN C++ PROGRAMI

#include <iostream>
#include <signal.h>
using namespace std;

int main( ){
    kill(getpid( ),SIGKILL);
    cout<<"SİNYAL GÖNDERİLDİ..."<<endl;


}

SIGINT İLE CTRL+C KOMUTUNU YAKALAMAK (C++,İSLETİM SİSTEMLERİ)

#include <iostream>
#include <stdlib.h>
#include <signal.h>
#include <windows.h>
using namespace std;
void Sinyal_Yakala(){
    cout<<"Sinyal Yakalandi..."<<endl;
}

int main()
{
    while(true){
    if( signal(SIGINT,Sinyal_Yakala)==SIG_ERR)
cout<<"Sinyal Yakalanamadı..."<<endl;

}
}

BİR İPLİK OLUŞTURAN VE BU İPLİĞİN SONLANMASINI pthread_join( ) SİSTEM ÇAĞRISIYLA BEKLEYEN İPLİK(C++,İSLETİM SİSTEMLERİ)

#include <iostream>
#include <pthread.h>
using namespace std;
void *iplik_islemi(){
    Cout<<"Iplik"<<endl;
}
int main() {
    pthread_t iplik;
    pthread_create(&iplik,NULL,iplik_islemi,NULL);
    cout<<"İpliğin sonlanmasını bekle"<<endl;
    pthread_join(iplik,NULL);
    cout<<"İplik Sonlandı";

}

wait( ) Sistem Çağrısı İle Çocuk Prosesi Bekleme (C++,İSLETİM SİSTEMLERİ)

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;

int main( ){
   pid_t pid;
   int statu; //Çocuk prosesin sonlanma değeri
   pid= fork( );
   if(pid==0)
      cout<<"Ben Cocuk Proses"<<endl;
   else
      {
       cout<<"Ben Anne Proses Bekledim..."<<endl;
       wait(&statu);
}


}

clone( ) Çağrısı İle Yeni Proses Oluşturma (C++,İSLETİM SİSTEMLERİ,LİNUX)

#include <sched.h>
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

#define STACK_SIZE 1024

int new_process (){
    cout<<"My new process..."<<endl;
    return 1;
}
int main( )
{
    int pid;
    void *stack; //Cocuk prosesin yığın işaretçisi
    stack=malloc(STACK_SIZE); //Bellek alanı alma
    if(stack==0){
       cout<<"Bellek tahsis hatasi"<<endl;
       exit(1);
    }
pid=clone(&new_process,(char*) stack+STACK_SIZE,0,0);//clone-->>İle yeni proses oluşturuldu...
pid=waitpid(pid,NULL,0);//Wait a child process
cout<<"CHILD PROCESS ENDED..."<<endl;
free(stack); //Belleği Bırak

}

fork( ) Sistem Çağrısı ve Yeni İplik Oluşturma Çağrısı(C++,İŞLETİM SİSTEMLERİ)

#include <iostream>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
int main(){
   pid_t pid;
   pid=fork();
   if(pid==0)
     cout<<"Merhaba ben cocuk proses"<<endl;
   else
     cout<<"Merhaba ben anne proses"; 

}

//Şimdide yukarıda oluşturduğumuz prosese bir iplik ekleyelim

#include <iostream>
#include <pthread.h>
using namespace std;

void *iplik_islemleri(void *i)
{
   cout<<"İplik çalışmaya başladı..."<<i<<endl;
}

int main(){
//İplik bilgilerini saklamak için pthread_t tipinde bir değişken
pthread_t iplik;

int iplik_no,i=1;

iplik_no=pthread_create(&iplik,NULL,iplik_islemleri,(void*)i);
//iplik oluşturuldu...
//ipliğin sonlanmasını bekliyoruz...
pthread_join(iplik,NULL);

}

SQL DİSTİNCT KOMUTU

DİSTİNCT KOMUTUMUZ TEKRARLI KAYITLARIMIZIN GÖSTERİLMEMESİNİ SAĞLIYOR.

ÖRNEĞİN VERİ TABLOMUZDA AHMET ADINDAN YÜZLERCE KİŞİ VAR VE BİZ SADECE

BİR TANESİNİN GÖSTERİLMESİNİ İSTİYORUZ O ZAMAN DİSTİNCT KOMUTUNU

KULLANMAMIZ GEREKECEKTİR.

SQL DELETE (SİLME) KOMUTU

SON DML KOMUTUMUZ OLAN DELETE...



SQL UPDATE KOMUTU

SQL UPDATE KOMUTU

KOMUTLARIMIZIN ANLATIMI BİTİNCE BİR SÜRÜ ÖRNEK ÇÖZECEĞİZ İYİ

ÇALIŞMALAR.

Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...