Sanallaştırma (bilişim)

**Sanallaştırma** (İngilizce: Virtualization) bilgisayar kaynaklarının (İngilizce: resource) kullanıcılardan soyutlanması işlemine verilen isimdir. Bunu yapmak için kullanılan metodlar bilgisayar kaynaklarının paylaştırılmasını veya birleştirilmesini sağlar. Sanallaştırmanın ilk hedefi kullanıcıya bir soyutlama tabakası sunarak kullanıcıyı kaynaklardan soyutlamak. Böylece kullanıcı ve kaynaklar arasına bir mantıki katman eklenmiş oluyor. Bir **hiper yönetici** veya **sanal makine monitörü** (**VMM**), sanal makineleri oluşturan ve çalıştıran bilgisayar yazılımı, bellenim veya donanımdır . Bir hipervizörün bir veya daha fazla sanal makineyi çalıştırdığı bir bilgisayara ana makine adı verilir ve her sanal makineye konuk makinesi adı verilir. Hiper yönetici, konuk işletim sistemlerini sanal bir işletim platformuyla sunar ve konuk işletim sistemlerinin yürütülmesini yönetir. Çeşitli işletim sistemlerine sahip birden fazla aygıt, sanallaştırılmış donanım kaynaklarını paylaşabilir. Örneğin; Linux, Windows ve macOS işletim sistemlerinin tümü, tek bir fiziksel x86 makinede çalışabilir. Konuk işletim sistemleri aynı çekirdeğe sahip farklı Linux dağıtımları gibi kullanıcı alanında farklılık gösterebilse de, bu, tüm örneklerin (genellikle kapsayıcılar olarak adlandırılır) tek bir çekirdeği paylaşması gereken işletim sistemi düzeyinde sanallaştırma ile çelişir.

## Yazılım bazlı sanallaştırma
Yazılım bazlı sanallaştırma çok çeşitli ve farklı amaçlarla kullanılabilir. Mesela bir işletim sistemini (İS) veya bir kullanıcı yazılımını taklit (simulation) etmek için.

### Sanal İşletim Sistem Ortamları

#### İS Konteynerleri ile İS Sanallaştırması
Bu sanallaştırma türünde bir yazılıma kendisine ait bir kapalı bir konteyner ('jail') içinde eksiksiz (sanal) bir çalıştırma ortamı (İngilizce runtime environment) oluşturulur. Bu işlemde ayriyetten bir İşletim Sistemi daha çalıştırılmaz ve bundan dolayı da ev sahibi (host) işletim sistemi haricinde bir işletim sistemi de çalıştırmak mümkün değildir. İşletim sistemi konteynerleri ev sahibi işletim sistemlerinin bir altkümesidirler. Bu yaklaşımın artısı misafir sistemin ev sahibi ile iyi bütünleşmesidir. Eksisi de konteynerlerin kendisidir, yani bu konteynerlerden bir sürücü veya çekirdek modülü yüklemek mümkün değildir. İşletim sistemi konteyner misalleri: Solaris/OpenSolaris de non-global Zones, Zoning, BSD jails, Mac-on-Linux, OpenVZ, Virtuozzo, Linux-VServer ve User Mode Linux

#### VMM veya Hypervisor ile sistem sanallaştırması

Virtual Machine Monitor (VMM) veya Hypervisor ile yapılan sanallaştırmada mevcut olan yerel (yani fiziki olarak mevcut donanım) kaynaklar akıllıca dağıtılır. Bu dağılım farklı şekillerde geçekleştirilebilir ve aşağıdaki kategorilere ayrılır. Bu işlemde her bir misafir sistemine tüm donanım unsurlarına sahip (MİB, Sürücüler, RAM vs.) komple bir bilgisayar yansıtılır. Bu yaklaşımın artısı misafir işletim sistemlerinde (neredeyse) hiçbir değişiklik yapılmasına gerek kalmadan her bir işletim sistemi kendi çekirdeği ve yazılımları ile birlikte çalışabilmesidir.

##### Tip 1, native veya bare-metal hipervizörler
Bu hipervizörler, donanımı kontrol etmek ve konuk işletim sistemlerini yönetmek için doğrudan sunucunun donanımında çalışırlar. Bu nedenle, bazen bare metal hipervizörleri denir. IBM'in 1960'larda geliştirdiği ilk hipervizörler, native hipervizörlerdi.  Bunlara SIMMON test yazılımı ve CP/CMS işletim sistemi (IBM'in z/VM'nin selefi) dahil edildi. Modern eşdeğerler arasında AntsleO'lar, Xen, XCP-ng, SPARC için Oracle VM Sunucusu, x86 için Oracle VM Sunucusu, Microsoft Hyper-V, Xbox One sistem yazılımı ve VMware ESX/ESXi bulunur.

##### Tip 2 veya Hosted hipervizörler
Bu hipervizörler, diğer bilgisayar programlarında olduğu gibi geleneksel bir işletim sisteminde (OS) çalışır. Konuk işletim sistemi, ana bilgisayarda bir işlem olarak çalışır. Tip 2 hipervizörleri, konuk işletim sistemlerini ana bilgisayar işletim sisteminden soyutlar. VMware Workstation, VMware Player, VirtualBox, Mac için Parallels Desktop ve QEMU tip 2 hiper yönetici örnekleridir.

Bu iki tip arasındaki ayrım her zaman net değildir. Örneğin, Linux'un Çekirdek Tabanlı Sanal Makinesi (KVM) ve FreeBSD'nin BHyVe, ana bilgisayar işletim sistemini etkili bir tip 1 hiper yöneticiye dönüştüren çekirdek modülleri. Aynı zamanda, Linux dağıtımları ve FreeBSD hala genel amaçlı işletim sistemleri olduğundan, VM kaynakları için birbirleriyle rekabet eden uygulamalar, KVM ve bhyve de tip 2 hiper denetleyiciler olarak kategorize edilebilir.

### Yazılım sanallaştırması
Yazılım sanallaştırmasında (application virtualization) kullanıcı veya sunucu yazılımlarının yerel sistemde yüklenmeden çalıştırılmasıdır. Bunun için sanallaştırılan yazılıma bir sanal ortam oluşturlulmakta ve bu ortamda tüm Registry-kayıtları, dosyalar ve diğer birleşen unsurlar içermektedir. Bu sanal ortam yazılım ve işletim sistemi arasında bir tampon görevini yaparak başka yazılım veya işletim sisteminle çarpışmaları önler. Misaller: Microsoft Application Virtualization, Citrix Application Streaming, VMware ThinApp, Thinstall vs.

## Donanım bazlı sanallaştırma
Bu sanallaştırma türünde donanımın tümü (mesela LPAR) veya bazı kısımları (mesela Merkezi işlem biriminde İntel-VT veya AMD-V) sanallaştırılabilir.

## Anabilgisayar kökenleri
Tam sanallaştırma sağlayan ilk hipervizörler, Ocak 1967'de üretime başlayan ve IBM'in CP/CMS işletim sisteminin ilk versiyonu olan test aracı SIMMON ve IBM'in araştırma sistemi CP-40 idi. CP-40, sanallaştırmaya izin veren önemli bir özellik olan Dynamic Address Translation'ı desteklemek için IBM Cambridge Scientific Center'da değiştirilmiş bir S/360-40 üzerinde çalıştı. Bu süreden önce, bilgisayar donanımı yalnızca birden fazla kullanıcı uygulamasının aynı anda çalışmasına izin verecek kadar sanallaştırılmıştı (bkz. CTSS ve IBM M44/44X). CP-40 ile donanımın denetleyici durumu da sanallaştırılarak birden fazla işletim sisteminin aynı anda ayrı sanal makine bağlamlarında çalışmasına izin verildi.

Programcılar yakın zamanda, tam sanallaştırma yapabilen ilk üretim bilgisayarı olan IBM System/360-67 için CP-40'ı (CP-67 olarak) uyguladılar .IBM, bu makineyi ilk kez 1966'da gönderdi; sanal bellek için sayfa çeviri tablosu donanımı ve I/O ve interrupt işlemesi de dahil olmak üzere tüm çekirdek görevlerinin tam olarak sanallaştırılmasını sağlayan diğer teknikleri içeriyordu.(“Resmi” işletim sistemi, kötü niyetli TSS/360'ın tam sanallaştırma kullanmadığına dikkat edin.) Hem CP-40 hem de CP-67, 1967'de üretime başladı. CP/CMS,IBM müşterilerine 1968'den 1970'lerin başlarına, desteksiz olarak kaynak kod biçiminde ulaşılabilirdi.

CP/CMS, IBM'in ana bilgisayarları için sağlam zaman paylaşımı sistemleri kurma girişiminin bir parçası oldu. Aynı anda birden fazla işletim sistemi çalıştırarak, hiper yönetici sistem sağlamlığını ve dengesini artırdı: Bir işletim sistemi çökse bile, diğerleri kesintisiz çalışmaya devam ederdi. Aslında, bu bile işletim sistemlerinin beta veya deneysel sürümlerinin —yeni donanımlar için bile olsa— kararlı ana üretim sistemini tehlikeye atmadan ve maliyetli ek geliştirme sistemleri gerektirmeden konuşlandırılıp hata ayıklanmasına izin verdi.

IBM, 1970 yılında System/370 serisini herhangi bir sanallaştırma özelliği olmadan duyurdu, ancak Ağustos 1972 Gelişmiş İşlev duyurusunda sanal bellek desteği ekledi. Takip eden tüm sistemlerinde (zSeries hattı gibi tüm modern IBM anabilgisayarları, 1960'lar dönemi olan IBM S/360 hattıyla geriye dönük uyumluluğu koruyor) sanallaştırma özelliği mevcut. 1972 duyurusu, S/370 için CP/CMS'nin bir yeniden uygulaması olan VM/370'ı da içeriyordu. CP/CMS'den farklı olarak, IBM bu sürüm için destek sağladı (yine de birkaç sürüm için kaynak kod biçiminde dağıtılmış olmasına rağmen).VM, donanım arayüzlerinin sadece bazılarının değil, hepsinin sanallaştırıldığını vurgulayarak *[[Sanal Makine]]* anlamına gelir. Hem VM hem de CP/CMS, üniversiteler, kurumsal kullanıcılar ve zaman paylaşımı sağlayıcılarının yanı sıra IBM dahilinde erken kabul görmüş ve hızlı bir gelişim göstermişlerdir. Kullanıcılar, modern açık kaynaklı projelerde görülen trendleri öngörerek devam eden gelişimde aktif rol oynadılar.Bununla birlikte, bir dizi tartışmalı ve acı savaşta, zaman paylaşımı, IBM'in politik mücadelesiyle toplu işleme için kaybedilmiş ve VM, yıllar boyunca IBM'in "diğer" ana bilgisayar işletim sistemi olarak kaldı ve MVS'yi kaybetti. 2000'den itibaren z/VM ürünü olarak, örneğin zSeries Linux için bir platform olarak popülerlik ve desteğin yeniden dirilişini yaşadı.

Yukarıda belirtildiği gibi, VM kontrol programı, sanal bir makinede kullanılan DIAG ("Diagnose", opcode x'83 ') komutlarını arayarak alan bir *hipervizör çağrısı* işleyicisi içerir. Bu, dosya sistemi erişiminin ve diğer işlemlerin hızlı yoldan sanallaştırılmamış olarak yürütülmesini sağlar (DIAG, normal programlamada kullanılmayan modele bağlı ayrıcalıklı bir talimattır ve dolayısıyla sanallaştırılmaz). Bu nedenle "ana bilgisayar" işletim sistemine bir sinyal olarak kullanılabilir). CP/CMS sürüm 3.1'de ilk kez uygulandığında, DIAG'ın kullanımı, Sistem/360 Supervisor Call instruction (SVC) benzer olan ancak sistemin SVC'nin sanallaştırılmasını değiştirmeyi veya genişletmeyi gerektirmeyen bir işletim sistemi arayüzü sağladı.

1985 yılında IBM, mantıksal bölümleri (LPAR) yönetmek için PR/SM hipervizörünü tanıttı.

## x86 sistemleri

2005'ten itibaren CPU satıcıları, ürünlerine donanım sanallaştırma yardımı eklediler; örneğin: [Intel VT-x](https://en.wikipedia.org/wiki/X86_virtualization#Intel_Virtualization_Technology_for_x86_(Intel_VT-x)) (Vanderpool kodlu) ve [AMD-V](https://en.wikipedia.org/wiki/X86_virtualization#AMD_virtualization_(AMD-V)) (Pacifica kodlu).

Alternatif bir yaklaşım, konuk işletim sisteminin, hipervizörün simüle ettiği makine I/O talimatlarını uygulamak yerine, hipervizöre sistem çağrıları yapmak için değiştirilmesini gerektirir.Buna Xen'de paravirtualization, Parallels Workstation'da "hiper çağrı" ve IBM'in [VM](https://en.wikipedia.org/wiki/VM_(operating_system))'sinde "DIAGNOSE kodu" denir. Hepsi gerçekten aynı şey, altta yatan hiper denetçiye bir sistem çağrısı. [Mach](https://en.wikipedia.org/wiki/Mach_(kernel)) ve L4 gibi bazı mikro çekirdekler, konuk işletim sistemlerinin "paravirtualization"'a mümkün olacak şekilde yeterince esnektir.

## Güvenlik uygulamaları

*[https://en.wikipedia.org/wiki/Hyperjacking Hyperjacking]* olarak bilinen, işletim sisteminin altına hiper yönetici olarak kendilerini yükleyen, kötü amaçlı yazılım ve rootkitler tarafından hipervizör teknolojisinin kullanılması, kötü amaçlı yazılımın işletim sisteminin herhangi bir işlemini (bir parola giren biri gibi) işlemlerini engelleyebileceği için tespit etmelerini zorlaştırabilir. kötü amaçlı yazılımdan koruma yazılımı mutlaka onu algılar (kötü amaçlı yazılım tüm işletim sisteminin altında çalıştığı için). Konseptin uygulamasının, SubVirt laboratuvarının kök setinde (Microsoft ve University of Michigan araştırmacıları birlikte geliştirilmiştir) ve [Blue Pill malware](https://en.wikipedia.org/wiki/Blue_Pill_(software)) paketinde gerçekleştiği iddia edildi. Bununla birlikte, bu tür iddialar, hiper yönetici tabanlı bir kök setinin varlığını tespit etmenin mümkün olacağını iddia eden diğerleri tarafından tartışılmıştır.

2009 yılında, Microsoft ve Kuzey Carolina Eyalet Üniversitesi'nden araştırmacılar, çekirdek modu kök kitlelerine karşı genel koruma sağlayabilen Hooksafe adlı bir hiper yönetici katmanı anti-rootkit sergilediler.

## Dış bağlanlatılar
* http://www.vmware.com/tr/virtualization

## Kaynakça