Uygulamalar ve Onların Kriptoki’yle Kullanımı
Cryptoki için bir uygulama bir adres uzayı ve kontrol için kullanılan threadlerden ibarettir. Bir uygulamanın cryptoki uygulaması olabilmesi için C_Initialize fonksiyonu kullanımıyla başlamalı ve uygulama daha sonra diğer cryptoki fonksiyonlarını çağırmalıdır. Uygulama ne zaman biterse o zaman C_Finalize fonksiyonu Crypoki uygulaması kesmek için çağrılır.
Uygulamalar ve Prosesler
C_Initialize ile çağrılan bir Unix uygulaması düşünün. Bunu P ile gösterelim. Daha sonra yeni bir çocuk proses oluşturmak için fork() kullanalım. Oluşan prosesi C olarak isimlendirelim. Bu durumda P ilklendirilmiş olmasına rağmen C ilklendirilmemiş olacaktır. P ve C farklı adres uzaylarında yer alan iki prosesi olacaktır. Böylelikle C cryptoki kullanmak için kendi C_Initialize çağrısına ihtiyaç duyacaktır. Dahası P login olmuş olsa bile ikisi ayrı uygulama olduğundan C tekrar login olmaya ihtiyaç duyacaktır. Bu gibi durumlarda C kendi C_Initialize çağrısını kullanmazsa Cryptoki’nin davranışı belirsizdir. İdeal olarak CKR_CRYPTOKI_NOT_INITIALIZED değeri dönüş değeri olarak dönülecektir. Fakat buna rağmen fork() çağrısının çalışma yönteminden dolayı bu dönüş değerinde ısrar etmek kütüphanelerin performansını kötü etkileyebilir. Böylelikle cryptoki’nin davranışı belirsiz kalır. Uygulamalar bu gibi durumlara neden olabilecek kısa yollardan uzak durmalılar.
Yukarıdaki senaryoda Cryptoki’ye ihtiyaç duysun veya duymasın C ilklendirme çağrısını(C_Initialize) yapmalıdır. Eğer cryptoki kullanmaya ihtiyaç yoksa, C_Finalize çağrısı hemen yapılmalıdır. Eğer P Cryptoki kullanıyorsa, C için ilklendirme çağrısı yaptıktan hemen sonra sonlandırma(C_Finalize) çağrısı yapmak kaynakların çoklu kullanımı engellediğinden dolayı iyi bir Cryptoki programlama pratiğidir.
Uygulamalar ve Threadler
Bazı uygulamalar Cryptoki kütüphanesine multi-thread yapısıyla erişecekler. Cryptoki, uygulamalara multi-threading için hazır olarak verilebilen kütüphanelere bilgi sağlamak için olanak tanır. Özellike bir uygulama C_Initialize fonksiyon çağrısı yaparak Cryptoki kütüphanesini ilklendirdiğinde, kütüphane için dört multi-threading davranışından biri olabilir:
- Multi-treadlerden eş zamanlı erişim olmaz ve kütüphanenin bu nedenle thread-güvenliği bakımından herhangi bir tip kilitleme tipin gitmesine gerek olmaz. (mutex vs.)
- Multi-treadlerden eş zamanlı erişim olabilir ve kütüphane uygun thread-safe davranışı garanti altına alabilmek için yerel işletim sisteminin senkronizasyon temellerini kullanabilir.
- Multi-treadlerden eş zamanlı erişim olabilir ve kütüphane uygun thread-safe davranışını garanti altına alabilmek için uygulama destekli senkronizasyon temellerini kullanabilir.
- Multi-treadlerden eş zamanlı erişim olduğunda, yine uygun thread-safe davranışını garanti altına alabilmek için hem işletim sistemi hem de uygulama destekli senkronizasyonu kullanabilir.
Üçüncü ve dördüncü tipler yerel işletim sistemi thread modelini kullanmayan uygulamalar için uygundur. Uygulama destekli senkronizasyon temelleri uygulama thread modelinde mutex nesnelerini idaresi için dört fonksiyondan oluşur. Mutex objeleri verilen herhangi bir zamanda unlocked veya locked durumlarında bulunabilen temel objelerdir. Lock durumunda bir mutex nesnesine bir thread tarafından lock durumuna geçme çağrısı yapılırsa ve thread unlocked durumu için çağrı yapılana kadar engelleniyorsa o zaman tekrar lock durumuna geçilir ve çağrı tekrar edilir. Eğer özel bir mutex üzerinde birden fazla thread engelleniyorsa ve bu mutex nesneleri unlocked oluyorsa, o zaman tam olarak bu threadlerden biri mutex üzerinde lock durumunda olacak ve çağrı için kontrol dönüşü yapacak. (Diğer engellenen threadler engellenmeye ve sıralarını beklemeye devam edecekeler.)
Ek olarak, ilklendirme zamanında yukarıda bahsedilen thread idare etme bilgisini cryptoki kütüphanesi için sağlayarak, uygulama thread çalıştırma kütüphanelerinin oluşan yeni threadler için yerel işletim sistemi çağrılarının kullanılıp kullanılmayacağını belirleyebilir.