İşletim Sistemi 101 – #2 (Servisler)

Bir önceki yazımda, işletim sistemi hakkında genel bilgi vermiştim. Bu yazıda ise işletim sisteminin sunduğu hizmetleri anlamaya ve anlatmaya çalışacağım.

İşletim Sisteminin Sundukları

Ne demiştik? Kullanıcılar olarak aslında işletim sistemini, hatta onun kabuğunu (shell)^1 kullanıyoruz. Kalan her şey ise işletim sisteminin yönetiminde oluyor. Yani hem kullanıcı talepleri hem de programların talepleri, işletim sisteminin üzerinden geçiyor. Peki işletim sistemleri, kullanıcılarına (insanlar, programlar, diğer sistemler) neler sunuyor?

Kullanıcı Arayüzü

İşletim sistemi çalışmaya başladığında bizi karşılayan bir yüzü var. Bilgisayarın çalışmaya başlamasından kapanmasına kadar kullanım sırasında bize eşlik eden bu arayüze, kullanıcı arayüzü (user interface, UI) diyoruz.

Komut Satırı Arayüzü

Bu arayüzlerden aklıma ilk gelen, “Komut Satırı Arayüzü (Command Line Interface, CLI)“. Aşağıda GNU/Linux ve Windows Vista işletim sistemlerinden alınmış birer CLI örneğini görebilirsiniz.

GNU/Linux CLI örneği
GNU/Linux CLI örneği
Windows CLI örneği
Windows CLI örneği

Bu arayüzü kullanarak gireceğiniz birtakım komutlar, bilgisayarınızı kullanabilmenizi sağlar. Bu arayüzün kendisi de ayrı bir yazılımdır ve işletim sisteminin bileşenlerinden biridir. Yine hatırlatmak isterim, işletim sistemi tek bir yazılım değil, bir yazılımlar grubudur.

OpenWrt CLI
OpenWrt CLI

Ne yazık ki birçok insan CLI görünce korkuyor. Ya da bunun “aşırı ilkel!” olduğunu düşünüyor. Üzgünüm arkadaşlar fakat herkes bir gün CLI kullanmak zorunda kalacaktır. Bilgisayarınızda yapabildiğiniz herhangi bir şeyi, buradan da yapabilirsiniz. Tabii ki farklı arayüzlerde bazı işleri yapmak çok daha kolay olabilir. Fakat işlerin en başında ya da yanıp yıkıldığı, patladığı yerlerde CLI kullanmak zorunda kalacaksınız. Birçok depolama (storage) ve ağ (network) ürününün kurulumu ve yapılandırılması sırasında CLI kullanıldığından emin olabilirsiniz. İlerleyen süreçte ise cihazın doğru çalışmadığı durumlarda hata tespiti ve müdahale için yine CLI kullanılır. Yandaki örnekte, bir kablosuz router’a kurduğum OpenWrt’nin yönetim ekranını görebilirsiniz. Ve evet, router da bir bilgisayar.

Yığın Arayüzü

Yığın arayüzü (batch interface), eski zamanlarda kullanılan bir arayüzdü. Bu arayüzde tüm direktifler delikli kart (punched card), delikli şerit (paper tape) gibi ortamlara yazılır (işaretlenir) ve bilgisayara yüklenirdi. Bir önceki yazımda batch sistemlere kısaca değinmiştim.

Batch Interface (Birleşik Devletler Milli Arşiv ve Kayıt Yönetimi - 1940
Batch Interface (Birleşik Devletler Milli Arşiv ve Kayıt Yönetimi) – 1940

Grafik Arayüz

Xerox Star 8010 iş istasyonu (Piyasaya sürülen ilk GUI) - 1981
Xerox Star 8010 iş istasyonu (Piyasaya sürülen ilk GUI) – 1981

Geldik en tanıdık arayüze. Graphical User Interface (GUI). Üzerinde farenizi gezdirebildiğiniz ya da klavyenizdeki tuşlar ile bazı nesneleri gösterip onlarla etkileşime geçebildiğiniz, menüler görebildiğiniz arayüz.

Bu arayüzde “fare” sözcüğüne odaklanmamanızı öneririm. Dokunmatik telefonlarınızda gördüğünüz arayüz de bir GUI’dir. Keza oyun konsollarında gördüğünüz arayüz de GUI’dir. Birinde seçimlerinizi dokunarak yaparken diğerinde konrolör kullanırsınız.

TÜBİTAK UEKAE tarafından geliştirilen Pardus GNU/Linux dağıtımındaki Xfce GUI (https://commons.wikimedia.org/wiki/File:Pardus_19.0_Xfce_Desktop.jpg)
TÜBİTAK UEKAE tarafından geliştirilen Pardus GNU/Linux dağıtımındaki Xfce GUI (https://commons.wikimedia.org/wiki/File:Pardus_19.0_Xfce_Desktop.jpg)

Program Çalıştırma

İşletim sisteminin temel görevlerinden biri de, kullanıcının programlarını çalıştırmaktır. Çalıştırma sürecini; diskten okuma, RAM’e yazma, işlemciye gönderme, kapatma şeklinde özetleyebiliriz.

Kapatma sürecine dikkat çekmek isterim. İşletim sisteminin kaynakları doğru kullanabilmesi için, kapatılan programlara atadığı kaynakları geri alması gerekir. Bazı durumlarda bellek yöneticisi, atadığı kaynakların tamamını geri almaya ihtiyaç duymaz. Örneğin bir oyunu ilk açışınız 5 saniye sürerken, kapatıp tekrar açmayı denediğinizde bu süre 3 saniyeye düşebilir. Çünkü işletim sistemi, RAM’e yazdığı kısımların tamamını silmemiş olabilir. Akıllı telefonlarda uygulamalar arasında geçiş yaparken de bu durumu sıkça yaşarız. Fakat bazı durumlarda, işletim sistemi ipin ucunu kaçırabilir. İşte bu yüzden – özellikle Windows kullanırken – “Bu bilgisayara bir hâller oluyor. Çok yavaşlamaya başladı. Bir kapatıp açsak düzelir.” diyoruz. RAM, geçici (volatile) bir depolama birimidir. Yani gücü kesilince, üzerine yazılan veri silinir. İşletim sisteminin neyi silip neyi silmeyeceği konusunda afallamaya başladığı durumlarda kapatıp açmak güzel bir çözümdür. Gülmeyin!

Windows 10 işletim sisteminde RAM kullanımı. - 8 GB, %25'i Firefox tarafından kullanılmakta.
Windows 10 işletim sisteminde Firefox RAM kullanımı. – 8 GB, %68 doluluk oranı.

Girdi / Çıktı İşlemleri

Programların çalıştırılmasının bir amacı var. Çoğu zaman bu programlara bir girdi veririz ve bir çıktı bekleriz. Bu sürece Input / Output (I/O) deriz. Örneğin bir medya oynatıcıya ses dosyasını verirsiniz ve o verinin okunmasıyla bilgisayarınızdan ses duymak istersiniz. Benzer şekilde bu sayfayı okurken kullandığınız web tarayıcıya da birtakım girdiler veriyorsunuz. Sayfanın adresini yazıyorsunuz, linklere tıklıyorsunuz, ekranı kaydırıyorsunuz. Ve ekranınızdaki görüntüler değişiyor. Ya da bir metin editörüne, klavyeniz aracılığıyla birtakım girdiler gönderiyorsunuz. Sonrasında bu içeriği bir dosyaya kaydediyorsunuz. Tüm bu süreçleri yine işletim sistemi yönetiyor.

Örnek durum. Bazı zamanlar klavyenizde “a” tuşuna basarsınız ve hiçbir şey olmaz. Sonrasında birkaç kere daha basarsınız ve ekranda bir anda – ya da yavaş yavaş – “aaaaaaaaaaaaaaaaa” görürsünüz. Burada işletim sistemi sizin girdinizin önceliğini düşürmüş olabilir, çıktınızın önceliğini düşürmüş olabilir, kullandığınız programın – ki çalışmakta olduğu için process’in – önceliğini düşürmüş olabilir. Tekrar tekrar basmanız işleri olduğundan daha iyi hâle getrmeyecektir.

Dosya Sistemi İşlemleri

Bilgisayarlarımız veriyi depolayan ve gerektiğinde sunan cihazlar. Bu verileri kullanmak için de programlardan faydalanıyoruz. Peki bu süreç nasıl yönetiliyor? Manyetik olarak ya da elektriksel olarak verilerimiz depolama aygıtlarında saklanıyor. Nereye yazıldığına dair en ufak bir fikrimiz yok (İstersek olur).

Hard Disk silindiri üzerinde track ve sector
Hard Disk silindiri üzerinde track ve sector

Yukarıdaki görsel, sıradan bir hard diskin bir silindiri. Track ve sector’lere ayrılmış durumda. Okuma / yazma kafası sayesinde veriler bu alanlardan okunuyor ve bu alanlara yazılıyor. Harita üzerindeki koordinat sistemi gibi düşünebilirsiniz. Peki neresi boş? Neresi dolu? 5 KB boyutunda bir dosyayı yazmak için en uygun yer neresi? Peki 8 GB boyutunda bir filmi sığdırabileceğimiz bir alan var mı? Bu dosyayı tekrar açmak istersem nasıl açacağım? Bu dosyayı kimler açabilir? Benim oluşturduğum bir dosyayı başka bir kullanıcı gelip silmek ya da değiştirmek isterse ne olacak? Tüm bu soruların yanıtı işletim sisteminde.

Kısa bir bilgi. Çeşitli sebeplerle oluşan mekanik hasarlardan dolayı sector’ler kullanılmaz hâle gelebilir. Bu sector’e yazılan veri kaybedilir ve bu alan tekrar kullanılamaz. Disk üzerinde bu durumda bulunan sector’lere “bad sector”^2 denir.

İşletim sistemleri, depolama birimlerini belirli bir dosya sistemi ile kullanılmak üzere şekillendirir, biçimlendirir, FORMATLAR! Format atmak her ne kadar işletim sisteminin kaldırılıp yeniden kurulması olarak bilinse de, aslında formatlamak sadece bir depolama birimi üzerinde bir dosya sistemi oluşturulmasıdır. Dosya sistemi denildiğinde karşınıza çıkması oldukça muhtemel bazı örnekler: ext4^3, xfs^4, NTFS^5, FAT^6

Kabaca anlatmak gerekirse, işletim sistemleri dosyalarınız için bir tablo tutar. Siz dosyaların isimlerini ve yollarını (path) görürsünüz. İşletim sistemi ise fiziken sakladığı yeri de bilmek zorundadır.

PATHCHS^7
/home/ali/beat.flacCylinder 1 Head 2 Sector 3
/home/ali/readme.mdCHS 2/12/26
/var/log/apache.logCHS 3/28/62

Yukarıdaki örnek aşırı iyimser. Neden derseniz, 50 birimlik bir depolama aygıtı düşünelim. 5’lik parçalara ayrılmış. 5 x 10 şeklinde 50 birim depolama şansımız olsun. Bomboş olan diske 5’lik “A” parçasını yazıyorum:

A

Sonrasında 15’lik B ve 25’lik C yazalım:

ABBBCCCCC

Şimdi de B’leri silelim. Zaten elimizde 5 birim alan vardı. B’leri silince 15 birim daha gelecek. Dolayısıyla 20 birim boşluk var. Bu durumda 20 birimlik D’yi nasıl yazarız? Yer yok mu deriz? Yoksa parçalar mıyız? Bu sorunun yanıtı dosya sistemlerine göre değişebilir, emin değilim. Dosya sistemlerinin standartlarına göre tek dosyada minimum ve maksimum boyut, toplamda adreslenebilecek minimum ve maksimum boyut gibi değerleri var. Biz şu an kullandığımız dosya sisteminin 20 birimlik bir dosyayı yazarken sorun yaşamayacağını düşünerek ilerleyelim. Zaten az önce 25’lik C yazmıştık. Dolayısıyla D verisini parçalayarak yazacağız:

AD’D”D”’CCCCCD””

Hemen bir kısa bilgi daha. Yukarıda yaşadığımız durumu inceleyelim. D’nin 40 dakikalık bir film olduğunu düşünelim. İlk 30 dakikayı izlerken problem yaşamıyoruz ancak son 10 dakika yüklenirken bir yavaşlık geliyor. Bu durumun sebeplerinden biri, okuma işinin sırayla yapılamamasıdır. Mekanik bir diskte, okuma kafasının bambaşka bir noktaya gitmesini gerektiren bir durum yaşıyoruz. Bunu birden fazla silindir, on binlerce parçacık olarak düşünürseniz durumun önemini daha iyi anlayabilirsiniz. Yaşanan bu duruma da dosya sistemi parçalanması (file system fragmentation)^8 diyoruz. Eğer disk üzerinde yeterli alan varsa, verilerin yerleri değiştirilerek, ilgili parçalar bir araya ya da daha yakın konumlara getirilerek parçalanma azaltılabilir. Buna da defragmentasyon (defragmentation)^9 diyoruz. Ve bunu GNU/Linux’da Windows’a kıyasla aşırı az yaşıyoruz 🙂

Defragmentasyon örneği
Defragmentasyon örneği

İletişim

Aynı sistem üzerinde ya da farklı sistemlerde çalışan process’ler birbirleriyle iletişime geçme ihtiyacı hissedebilir. Bir process’in çıktısı, diğer bir process’in girdisi olabilir. Bu iletişim, shared memory^10, message passing^11 gibi yöntemlerle yapılabilir. Process’ler arası iletişimden işletim sistemi sorumludur.

Hata Tespiti

İşletim sistemi, bilgisayarımızda meydana gelebilecek hataları tespit eder. Hatta bazı hataları öngörerek gerekli önlemleri alır. Bu hatalar kritik olabileceği gibi, gayet sıradan ve çözümü oldukça basit hatalar olabilir.

Örneğin, anakartınızda ya da belleğinizde yaşanacak bir problemden dolayı, belleğinizin çektiği enerji miktarında dalgalanmalar olabilir. Yukarıda bahsettiğim gibi, hard diskinizde bad sector’ler oluşabilir. Bir process, yetkisi olmamasına rağmen başka bir process’in RAM’deki verilerine erişmeyi deneyebilir. Ya da CPU’yu sömürmeyi deneyebilir. Bunlar kritik hatalara örnek olarak verilebilir. İşletim sistemi, bu hataları tespit edip gerekli işlemleri yapmakla mükelleftir.

Daha basit hatalara örnek verelim. Kulaklığınız ile müzik dinliyorsunuz ve kulaklık bir yere takılıyor, çıkıyor. İşletim sisteminiz o anda hoparlör ve kulaklık ayrımını yapıp ses düzeyini ona göre düzenleyebilir ya da oynatılmakta olan medyayı duraklatabilir. Çıktı almak istersiniz fakat yazıcınızın mürekkebi bitmek üzeredir ya da kağıdı bitmiştir. “Bu bilgiler, yazıcının kendisi tarafından veriliyor ama?!?” diyebilirsiniz. Olabilir. Yazıcının işletim sistemi, bu durumu bağlı olduğu cihazın işletim sistemine iletir. Çıktı almakla sorumlu olan yazılım da gerekli kontrolleri yaparken bu verileri işletim sisteminden ister. İşin ucu hep işletim sistemine gidiyor.

Kaynakların Dağıtımı

Bir bilgisayar sisteminde birden fazla process koşabilir. Aynı sistemi aynı anda birden fazla kullanıcı kullanıyor olabilir. İşletim sistemi; CPU, RAM, I/O işlemleri gibi konularda efektif bir dağılım yapmakla sorumludur.

Daha önceden belirttiğim gibi, eğer sistem için kritik öneme sahip işler varsa, kullanıcının talepleri tamamen göz ardı edilebilir. Önemli olan, sistemin çalışmaya devam edebilmesidir. Örneğin, CPU’da hangi process’in ne zaman ve ne süreyle çalışacağını kararlaştırmak için “CPU Scheduling^12 algoritmalarından faydalanılır. Benzer modeller, sistemin diğer kaynakları için de kullanılmaktadır.

Saymanlık

Şaka mı? Değil. Hangi kullanıcının hangi kaynağı ne derece kullandığına dair detaylı istatistikler işletim sistemi tarafından tutulur. Bu veriler, bazı hataların çıkış noktalarını tespit etmek için kullanılabilir. Benzer şekilde, çok kullanıcılı herhangi bir sistemde kullanıcılardan birinin kaynak taleplerinde yaşanan aşırı dalgalanmalar, dikkatleri o noktaya çeker. Ayrıca, herhangi bir process’in beklenenden fazla kaynak talep etmesi de yine dikkat çeker. Bu tarz durumlar, zararlı yazılımların ve siber saldırıların tespitinde dahi kullanılabilir.

Bulut sağlayıcıları, işletim sisteminden aldıkları bu verileri kullanarak kullanım istatistiklerinizi tutabilir ve bu kullanımlara göre faturalandırma yapabilir.

Koruma ve Güvenlik

Bir bilgisayarı birden fazla kullanıcının kullandığı ya da birden fazla bilgisayarın aynı ağa bağlı olduğu bir senaryoyu düşünelim. Kullanıcılar birbirlerinin kaynaklarına müdahale edememeli, birbirlerinin hesabına giriş yapamamalıdır. Ağ üzerinden paylaşılabilecek dosyalarını seçebilmeli, hatta paylaşacakları dosyaları kimlerle, ne şartlar altında paylaşabileceklerini de belirleyebilmelidir.

İşletim sistemi, bu gibi olanakları sunarak sistemin güvenli çalışmasından sorumludur. Ayrıca, yetkisiz erişim denemelerini fark etmeli ve kayıt altına almalıdır.

Sonuç Olarak

İşletim sistemi, cihazınızda olan biten her şeyden sorumlu bir yazılımdır. Fakat kullanıcı olarak sizin de üzerinize düşen önemli görevler bulunmakta.

Zayıf bir parolanızın olması, işletim sisteminin değil, sizin probleminizdir. Şüpheli bir programı çalıştırmak, sizin probleminizdir. Elbette cihazlarımızın ve ağlarımızın güvenliği için birçok ürün mevcut. Fakat bunların hiçbiri tek başına yeterli değildir.

Ek olarak, eğer tüm kullanımımız kısıtlanacaksa, bilgisayar kullanmanın bir anlamı kalmaz. Kaldı ki, işletim sisteminin temel görevlerinden biri de, kullanıcılara kullanım kolaylığı sunmaktır. Dolayısıyla cihazlarınızı kullanırken ne yaptığınızı biliyor olmalısınız, en azından denemelisiniz. “Emin misin?”, “Yapayım mı?”, “Bak sorun olabilir diyorum, gerçekten devam ediyor muyuz?” uyarılarını dikkate alın. Eğer ısrarla “rm -rf /” yazmaya devam ederseniz, sonucuna katlanırsınız 🙂

Bağlantılar

1 – Shell (computing), https://en.wikipedia.org/wiki/Shell_(computing)

2 – Chapter 6. The Ext4 File System, https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/storage_administration_guide/ch-ext4

3 – Bad sector, https://en.wikipedia.org/wiki/Bad_sector

4 – Chapter 3. The XFS File System, https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-xfs

5, 6 – Overview of FAT, HPFS, and NTFS File Systems, https://support.microsoft.com/en-us/help/100108/overview-of-fat-hpfs-and-ntfs-file-systems

7 – Cylinder-head-sector, https://en.wikipedia.org/wiki/Cylinder-head-sector

8, 9 – Why Linux Doesn’t Need Defragmenting, https://www.howtogeek.com/115229/htg-explains-why-linux-doesnt-need-defragmenting/

10 – Shared memory, https://en.wikipedia.org/wiki/Shared_memory

11 – Message passing, https://en.wikipedia.org/wiki/Message_passing

12 – CPU Scheduling, https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/5_CPU_Scheduling.html

Referans

1 – Operating System Concepts Essentials, Abraham SILBERSCHATZ (Yale University), Peter Baer GALVIN (Corporate Technologies, Inc.), Greg GAGNE (Westminster College)

“İşletim Sistemi 101 – #2 (Servisler)” için 2 yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir