Mainframe sistemlerden VPS teknolojisine bilgisayar tarihi
VPS hizmetlerinin temelindeki zaman paylaşımı mantığını 1960'lardan günümüze inceleyin. CTSS, Multics, Unix ve KVM evrimini takip ederek modern sunucuların çalışma prensibini öğrenin.
VPS hizmetinizin kökeni
Mainframe sistemlerden bulut bilişime uzanan bilgisayar tarihi, tek bir fikrin ucuzlamasının hikayesidir. Bu fikir zaman paylaşımıdır (time-sharing): pahalı bir makineyi aynı anda birçok kişinin kullanmasına izin vermek ve her birine makinenin özel bir görünümünü sunmak. Bu yöntem, 1960 civarında bilgisayar maliyetinin onu kullanan insanların maliyetinden daha yüksek olması nedeniyle icat edilmiştir. Bugün kiraladığınız VPS'in her parçası bu sorun için inşa edilmiştir: kullanıcılar arasındaki izolasyon, CPU süresini paylaştıran zamanlayıcı, hypervisor ve saat bazlı ücretlendirme. Sorun hiçbir zaman ortadan kalkmadı. Donanım ucuzladı; bu sayede bir zamanlar araştırma fonu gerektiren bir sunucu dilimi, günümüzde ayda birkaç dolara mal olmaktadır.
1959 - 1961: Zaman paylaşımlı sistemler neden icat edildi
1950'lerde bilgisayarlar toplu işleme (batch) yöntemiyle çalışıyordu. Programınızı kartlara deler, desteyi bir operatöre teslim eder ve çıktıyı almak için daha sonra geri gelirdiniz. Hatalı yazılan tek bir karakter size bir güne mal olurdu. Makinenin sürekli meşgul tutulması temel amaçtı; çünkü IBM 7090 gibi bir makine milyonlarca dolara mal oluyordu ve bekleyen insanların zamanı hiçbir faturada görünmüyordu.
Ocak 1959'da John McCarthy, MIT'de yazdığı bir notta bunun tam tersini savundu. Makinenin insanı beklemesi gerektiğini öne sürdü. Christopher Strachey, aynı yıl bir UNESCO konferansında zaman paylaşımının bir biçimini tanımladı; ancak o, birçok kişinin aynı anda yazmasından ziyade, diğer işler çalışırken bir programcının hata ayıklama yapmasını kastediyordu. 1961'de MIT'nin yüzüncü yıl dönümünde konuşan McCarthy, konuyu daha ileri taşıdı: bilişim, elektrik gibi ölçümlenen bir kamu hizmeti olarak satılabilirdi.
O dönemdeki itiraz, zaman paylaşımının makineyi israf ettiği yönündeydi. Kullanıcılar arasında geçiş yapmak işlemci döngülerine mal oluyordu ve döngüler o zamanlar pahalıydı. Bu itiraz doğruydu ancak zamanla önemini yitirdi; çünkü bir döngünün maliyeti altmış yıl boyunca düşerken, bir saatlik insan dikkatinin maliyeti düşmedi.
CTSS'in icat etmek zorunda kaldığı özellikler
MIT Hesaplama Merkezi'ndeki Fernando Corbató'nun grubu, tartışmayı sonlandırmak için Compatible Time-Sharing System (CTSS) sistemini geliştirdi. İlk kez Kasım 1961'de bir IBM 709 üzerinde gösterilen sistem, dört kullanıcıya hizmet veriyor ve her kullanıcının çalışmasını kendi manyetik bant sürücüsüne aktarıyordu. "Compatible" (Uyumlu) ifadesi, makinenin altta eski toplu iş sistemini hâlâ çalıştırabildiği anlamına geliyordu; çünkü kimse sadece yeni işi yapan bir bilgisayar satın almaz.
Dört kullanıcı küçük bir sayıdır. Bu sayıya ulaşmak için çözülmesi gereken sorunlar listesi ise hiç de küçük değildir ve bu liste, çekirdeğinizin şu anda üzerinde çalıştığı liste ile aynıdır. CTSS'in bir zamanlayıcıya ihtiyacı vardı, böylece uzun bir iş diğer tüm terminalleri donduramıyordu. Bellek korumasına ihtiyacı vardı, böylece çöken bir program tüm sistemi değil, sadece bir kullanıcıyı etkiliyordu. Oturum kapatıldıktan sonra da varlığını sürdüren bir depolama alanına ihtiyacı vardı; bu yüzden CTSS, modern bir kullanıcının tanıyabileceği ilk dosya sistemlerinden birine sahipti. Ayrıca parolalara ihtiyacı vardı, böylece bir kullanıcı diğerinin dosyalarını okuyamıyordu.
Bu parçaları yeniden adlandırdığınızda elinizde bir Linux makinesi olur. Zamanlayıcı, Linux 6.6 sürümünde CFS'in yerini alan EEVDF'dir. Bellek koruması, her sürece kendi sanal adres alanını veren MMU (bellek yönetim birimi) birimidir. Oturum kapatıldıktan sonra varlığını sürdüren depolama alanı ise ev dizininizdir. Parola dosyası hâlâ /etc/passwd olarak adlandırılmaktadır.
Multics ve bilgisayar hizmeti
MIT'nin bir sonraki sistemi, McCarthy'nin tarif ettiği hizmet olma amacını taşıyordu. Project MAC 1963 yılında başladı, Ağustos 1964'te bir General Electric GE-645 için imza atıldı ve 1965'te ilk Multics makaleleri yayımlandı. İsim, argümanı içinde barındırır: Multiplexed Information and Computing Service (Çoklanmış Bilgi ve Hesaplama Hizmeti). Hizmet, tıpkı saatlik ücretle satın alınan bir şey gibi.
Multics planlanandan çok daha uzun sürdü. Prototip GE-645 makineleri Ocak 1967'de MIT ve Bell Labs'e ulaştı. Bell Labs projeden Nisan 1969'da ayrıldı. Multics, 1 Ekim 1969'da MIT Bilgi İşlem Merkezi müşterilerine açıldı ve ardından otuz bir yıl boyunca bir yerlerde üretim ortamında çalıştı. Halifax, Nova Scotia'daki Kanada Ulusal Savunma Bakanlığı'nda bulunan son canlı Multics sistemi, 30 Ekim 2000 tarihinde kapatıldı.
Multics, geç geldiği ve yavaş çalıştığı için genellikle bir başarısızlık olarak sınıflandırılır. Ancak terminoloji aksini söyler. Bize dizinler içinde dizinlerden oluşan hiyerarşik dosya sistemini, her dosyada bir erişim denetim listesini, bir programın dosyaya sanki bellekmiş gibi erişmesini sağlayan bölümlenmiş sanal belleği ve kodu güvenilirlik derecesine göre sıralayan koruma halkalarını kazandırdı. Halkalar hala önünüzdeki silikonun içinde yer alır. Çekirdek için Ring 0 ve kullanıcı kodu için Ring 3, Multics terminolojisidir; donanım sanallaştırması daha sonra Ring 0'ın altında, insanların gayriresmi olarak Ring -1 adını verdiği hipervizör için bir mod eklemiştir.
Unix: uygun fiyatlı bir makinede zaman paylaşımlı sistem
Multics'ten ayrılmak, Ken Thompson'ı Bell Labs'te kullanmak istediği bir sistemden mahrum bıraktı. 1969 yılında, atıl durumdaki bir PDP-7 üzerinde çok daha küçük bir sistem geliştirmeye başladı. İlk Unix Programmer's Manual, Kasım 1971 tarihlidir; o tarihe gelindiğinde çalışma bir PDP-11'e taşınmıştı. 1973'te Thompson ve Dennis Ritchie, çekirdeği C diliyle yeniden yazdılar; böylece sistem, elle yeniden yazılmaya gerek kalmadan yeni donanımlara taşınabilir hale geldi.
Bugün Multics'in değil, Unix'in bir türevine komut girmenizin nedeni budur. Multics, kendisine özel üretilmiş donanımlara ihtiyaç duyuyordu. Unix ise ucuz ve erişilebilir olan her donanımda çalışıyordu; belirleyici özellik de bu oldu.
Ritchie ve Thompson tarafından kaleme alınan "The UNIX Time-Sharing System" adlı makale, Temmuz 1974'te Communications of the ACM'de yayımlandı. Makale, günümüzde kullandığınız VPS'i tanımlar: süreçler, tek bir hiyerarşik dosya sistemi, düz bayt akışları olarak dosyalar, fork, izin bitlerine sahip kullanıcılar ve gruplar ile çekirdeğin bir parçası değil, sıradan bir program olan bir kabuk (shell). Elli iki yıl sonra bu arayüz genişletilmiş, ancak asla değiştirilmemiştir.
Mainframe sistemler 1972 yılında gerçekten sanal makineler çalıştırıyor muydu?
Evet, bu hikayenin çoğu kişi tarafından gözden kaçırılan kısmıdır. MIT, Multics üzerinde çalışırken, IBM'in Cambridge Scientific Center birimi aynı hedefe farklı bir yaklaşımla odaklandı. Bir işletim sisteminin birçok kullanıcıya hizmet vermesi yerine, Robert Creasy ve Les Comeau her kullanıcıya eksiksiz bir simüle edilmiş bilgisayar sunan bir kontrol programı geliştirdi. CP-40, Ocak 1967'de üretime girdi. Her kullanıcı sanal bir System/360 elde etti ve bunun içinde küçük, tek kullanıcılı bir işletim sistemi olan CMS'i çalıştırdı.
CP-40, 1968 yılında System/360-67 üzerinde CP-67 haline geldi ve IBM, 2 Ağustos 1972'de VM/370'i duyurdu. Bu, elli dört yıl önce ücret ödeyen müşterilere satılan ticari bir hipervizördür. Bir kontrol programı gerçek donanımı çoğulluyor (multiplexing) ve konuk işletim sistemleri, makinenin sahibi olduklarını sanan sanal makineler içinde değiştirilmeden çalışıyordu.
Teori iki yıl sonra, Unix makalesini de içeren Communications of the ACM dergisinin Temmuz 1974 sayısında ortaya çıktı. Gerald Popek ve Robert Goldberg'in "Formal Requirements for Virtualizable Third Generation Architectures" (Sanallaştırılabilir Üçüncü Nesil Mimariler için Biçimsel Gereksinimler) başlıklı makalesi, bir işlemcinin sanallaştırılabilir olması için neler yapması gerektiğini ortaya koydu. Temel kural kısadır: Makinenin durumunu okuyabilen veya değiştirebilen her komut, bir konuk sistem bu komutu çekirdek modu dışında çalıştırdığında bir trap (yakalama) oluşturmalıdır; böylece hipervizör kontrolü ele alır ve o konuğun kendi özel durum sürümüyle yanıt verir. Buna trap and emulate (yakala ve taklit et) denir. IBM donanımı bu kurala uyuyordu.
Minibilgisayar modeli neden bozdu
DEC, 22 Mart 1965 tarihinde 1965 yılı değerleriyle yaklaşık 18.000 dolar fiyat etiketine sahip PDP-8 modelini tanıttı. 20.000 doların altında fiyatlandırılan ilk minibilgisayar olan bu cihaz, 50.000 adetten fazla satış rakamına ulaştı. Ardından mikroişlemciler fiyatları tekrar aşağı çekti. Bir departman kendi makinesini alabildiğinde ve daha sonra bir birey bunu yapabildiğinde, tek bir merkezi bilgisayarı paylaşmak artık çözülmesi gerekmeyen, çözülmüş bir sorun gibi görünmeye başladı. 1980'ler ve 1990'lar boyunca bilişim, masaüstüne ve küçük x86 sunuculardan oluşan kabinlere taşındı.
İsraf, farklı bir biçimde geri döndü. Sunucu başına tek bir uygulama çalıştırmak mantıksal olarak basittir; ancak bu durum donanımın büyük kısmının boşta kalmasına, buna karşın elektrik ve kabin alanı maliyetlerinin tam olarak ödenmesine neden olur. Bu, CTSS sorununun yeni bir ölçekte tekrarıdır; burada pahalı kaynak artık işlemci değil, oda ve elektriktir. Cevap, eski cevaptı. Makineyi paylaşın.
x86 mimarisini sanallaştırmak neden bu kadar zordu?
Çünkü x86, Popek ve Goldberg kuralını ihlal ediyordu. Ağustos 2000'de düzenlenen 9. USENIX Güvenlik Sempozyumu'nda John Scott Robin ve Cynthia Irvine, Pentium komut setini incelediler ve kullanıcı modu kodları tarafından çalıştırıldıklarında hata vermeden ayrıcalıklı durumu okuyan veya değiştiren on yedi komut tespit ettiler. popf bunun standart örneğidir. Bu komutu kullanıcı modunda çalıştırdığınızda, işlemci programın değiştirmesine izin verilmeyen bitleri bir hata (trap) oluşturmak yerine sessizce görmezden gelir; bu nedenle "trap and emulate" (yakala ve taklit et) yöntemiyle oluşturulan bir hipervizör, konuk işletim sisteminin bu girişimi yaptığını asla öğrenemez.
Donanım düzeltilmeden önce iki çözüm ortaya çıktı. Stanford'un Disco araştırmasından yola çıkarak 1998'de kurulan VMware, konuk çekirdek kodunu inceledi ve sorunlu komutları yürütülmeden önce yeniden yazdı; bu tekniğe ikili çeviri (binary translation) denir. Cambridge Üniversitesi Bilgisayar Laboratuvarı'ndan çıkan Xen ise bunun yerine konuk işletim sistemini değiştirdi. Ekim 2003'te SOSP'de sunulan "Xen and the Art of Virtualization" başlıklı makale, parasanallaştırmayı (paravirtualisation) tanımladı: değiştirilmiş bir konuk çekirdeği, hipervizörün yakalayamadığı komutları çalıştırmak yerine hipervizörü bilinçli olarak çağırır.
Daha sonra, IBM'in 1960'larda yaptığı gibi donanım düzeltildi. Intel, 14 Kasım 2005'te iki Pentium 4 modelinde VT-x desteğini sundu; AMD ise Mayıs 2006'da AMD-V'yi piyasaya sürdü. Her ikisi de konuk çekirdeğinin altında bir işlemci modu ekledi; böylece konuk işletim sistemi kendi çekirdeğini tam hızda çalıştırırken, hipervizör talep ettiği olayların kontrolünü elinde tutabildi. Bu durum, bir hipervizörün sıradan bir işletim sistemi içinde çalışabilecek kadar küçülmesini sağladı ve Qumranet'ten Avi Kivity'nin KVM projesi tam olarak bunu yaptı: Linux çekirdeğinin kendisini hipervizöre dönüştürdü. KVM, Şubat 2007'de yayınlanan Linux 2.6.20 sürümüyle ana çekirdeğe dahil edildi ve günümüzde VPS sağlayıcılarının büyük bir kısmı tarafından kullanılmaktadır.
VPS isminin kökeni
2000'lerin başında iki farklı yaklaşım birleşti. Bunlardan ilki, kendi çekirdeğini başlatan bir konuk işletim sistemiyle x86 üzerinde tam sanallaştırma idi. Diğeri ise işletim sistemi seviyesinde sanallaştırmaydı: tek bir paylaşılan Linux çekirdeğinin, her biri kendi root kullanıcısına ve süreç tablosuna sahip ayrı ortamlara bölünmesi. Linux-VServer ve SWsoft'un Virtuozzo ürünü 2001 yılında ortaya çıktı; SWsoft, 2005 yılında Virtuozzo'nun bir kısmını açık kaynaklı OpenVZ olarak yayınladı. "Virtual private server" ifadesi, virtual private network (sanal özel ağ) kavramına benzetilerek bu aileden türetilmiştir.
Amazon, sunucu kiralamayı bir API çağrısına dönüştürdü. S3 14 Mart 2006'da başlatıldı; EC2 ise 25 Ağustos 2006'da Xen üzerinde çalışan tek bir instance tipiyle sınırlı bir genel beta olarak kullanıma açıldı. Bilgi işlem gücü satın almak, bir servis bürosuyla yapılan sözleşme olmaktan çıkıp bir dakika içinde sonuçlanan bir istek haline geldi.
Her iki yaklaşım da günümüzde varlığını sürdürmektedir ve bu ayrım, kiraladığınız sunucuyla neler yapabileceğinizi belirlemeye devam eder. KVM tabanlı bir VPS kendi çekirdeğini başlatır; bu sayede çekirdek modülleri yükleyebilir ve hatta VPS'nizin içinde bir hipervizör çalıştırabilirsiniz. Konteyner tabanlı bir plan ise ana makinenin çekirdeğini paylaşır ve bu işlemlere izin vermez. Bir fiyatlandırma sayfasındaki o tek satırın arkasında altmış yıllık bir tarih yatar; bu nedenle bir seçim yapmadan önce VPS, VM ve VPC arasındaki farkları anlamak faydalıdır.
Mainframe sistemlerden VPS'e ne değişti, ne değişmedi
Dört şey değişti. Makine sizin binanızda değil. Terminal bir mobilya parçası değil, bir yazılımdır. Kiraladığınız birim, başkasının işletim sistemi üzerindeki bir hesap değil, kendi çekirdeğine sahip bütün bir bilgisayardır. Fiyat ise, bir satın alma sürecinden ziyade kredi kartı ödemesiyle halledilebilecek kadar düşmüştür.
Mekanizma ise hiç değişmedi.
- ssh oturumunuz bir zaman paylaşımlı terminaldir. Bir kullanıcı girişi ve bir kabuk (shell) alırsınız; bir zamanlayıcı (scheduler), sürecinizin ne zaman çalışacağına karar verir.
- İzolasyon hala donanım tarafından zorunlu kılınır. MMU ve işlemcinin ayrıcalık seviyeleri, tıpkı 1967 yılında CP-40'ın ihtiyaç duyduğu gibi işini yapar.
- Hala bir makinenin payı için, servis bürolarının bağlantı saatleri üzerinden faturalandırdığı gibi, geçen süreye göre ücretlendirilirsiniz.
- Diğer kiracıları hala hissedersiniz. Bir sunucu aşırı yüklendiğinde (oversubscribed), misafir sisteminiz fiziksel bir CPU için bekler ve Linux bu bekleme süresini gürültülü komşudan kaynaklanan CPU steal time olarak raporlar.
Bu son nokta, tüm tarihin dürüst bir özetidir. Bir makineyi paylaşmak bir takastır. 1961 yılında bilgisayarın insanlardan daha pahalı olması nedeniyle kabul görmüştü; 2026 yılında ise kapasitesinin yüzde onunda çalışan bir sunucunun boşa harcanan para olması nedeniyle kabul görmektedir. Eğer bu takasın operatör tarafında yer almayı tercih ederseniz, sahibi olduğunuz donanım üzerinde Proxmox çalıştırmak, size hipervizörü ve operatörün sorunlarını birlikte sunar.
Oranı aklınızda tutun. CTSS, 1961 dolarıyla milyonlarca dolara mal olan ve bir odayı dolduran bir makinede dört kullanıcıya hizmet veriyordu. 2026 yılında aylık birkaç dolara kiraladığınız VPS, Corbató'nun ekibinin karneyle dağıttığı bilgisayardan çok daha üstündür ve tamamen size aittir. Onu kiralayabilmenizin nedeni, altmış beş yıllık bir fikrin nihayet ucuz donanımla buluşmuş olmasıdır. Üzerine ne kuracağınızı planlıyorsanız, bir VPS'in size aslında ne sağladığı ile başlayın ve ardından insanların üzerinde neler çalıştırdığına göz atın.
FAQ
İlk zaman paylaşımlı (time-sharing) bilgisayar sistemi hangisidir?
MIT Hesaplama Merkezi'nde Fernando Corbató'nun grubu tarafından inşa edilen CTSS (Compatible Time-Sharing System). İlk kez Kasım 1961'de bir IBM 709 üzerinde gösterilmiş ve her biri ayrı bir teyp sürücüsüne aktarılan dört kullanıcıya hizmet vermiştir. Tüm bir topluluğa yönelik ilk zaman paylaşımlı hizmet ise Dartmouth Time-Sharing System'dir: 1 Mayıs 1964 tarihinde John Kemeny ve bir öğrenci programcı, iki terminal üzerinde aynı anda BASIC programlarını çalıştırmış ve her ikisi de doğru yanıtları almıştır.
Sanal makineler gerçekten 1960'larda mı icat edildi?
Evet. IBM'in Cambridge Bilimsel Merkezi, Ocak 1967'de CP-40'ı üretime almış ve her kullanıcıya, içinde CMS işletim sistemi çalışan eksiksiz bir sanal System/360 sağlamıştır. Bunu 1968'de System/360-67 üzerinde CP-67 izlemiş ve IBM, 2 Ağustos 1972'de VM/370'i duyurmuştur. Bunlar, x86 donanımı aynı şeyi yapabilmeden on yıllar önce ticari olarak satılan ve üzerinde değiştirilmemiş konuk işletim sistemlerini çalıştıran gerçek hipervizörlerdir.
Ana bilgisayarlar (mainframe) değilken, x86 neden sanallaştırılması zor bir mimariydi?
Popek ve Goldberg'in 1974 kuralına göre, makine durumunu okuyabilen veya değiştirebilen her komut, bir konuk sistem bunu çekirdek modu dışında çalıştırdığında bir trap (tuzak) oluşturmalıdır. x86 bu kuralı ihlal etmiştir. Robin ve Irvine, kullanıcı modunda trap oluşturmak yerine sessizce başarısız olan on yedi adet Pentium komutu tespit etmiştir; bu nedenle klasik bir trap-and-emulate hipervizörü bu komutları göremez ve popf bunun tipik bir örneğidir. VMware bu sorunu binary translation ile, Xen ise paravirtualisation ile aşmıştır; ta ki Kasım 2005'te Intel VT-x ve Mayıs 2006'da AMD-V, hipervizör için donanım tabanlı bir mod ekleyene kadar.
VPS kiralamak ile zaman paylaşımlı bir hesap sahibi olmak aynı şey midir?
Faturalandırma modeli ve izolasyon sorunu aynıdır. Ancak birim farklıdır. Zaman paylaşımlı bir kullanıcı, herkesle paylaşılan bir işletim sistemi üzerinde bir hesaba sahipti; bu nedenle yönetici, bilgisayar merkezindeki bir görevliydi. Bir KVM VPS ise size kendi çekirdeğiniz ve kendi root hesabınız olan bir sanal makine sunar; dolayısıyla yönetici sizsiniz. Container tabanlı bir VPS ise bu ikisi arasında yer alır; çünkü kendi ortamınızda size root yetkisi verirken ana makinenin çekirdeğini paylaşmaya devam eder.