Görev (bilgisayar bilimi)

Bilgisayar biliminde **görev**, bilgisayarın yaptığı işi ölçen ölçü birimidir. Alternatif olarak *[[İşlem (bilgisayar)|işlem]]*, *adım*, *istek* veya *sorgu* şeklinde adlandırılabilir. Yandaki diyagramda tamamlanan ve tamamlanmayan görevler ile görevleri tamamlayan, *işlem havuzu* dahilindeki iş parçacıkları gösterilmiştir. Bu bağlamda "görev" terimi, hem tamamlanmayan görevler hem de görevleri tamamlayan işlem havuzu birimlerini ifade edebilir.

## Terminoloji
Bazı işletim sistemlerinde işlem ile **görev** aynı şeyi ifade ederken bazılarında **görev**, işlem havuzu birimleri olan iş parçacığını ifade eder. Toplu işlemlerde (Batch processing) ise her bir görev, ayrı işlemleri ifade edebilir  ve genellikle görevin kendisi de bir işlemdir. "Çoklu görev" terimi, esas olarak bilgisayarın aynı anda birden çok *görev* yapması anlamını taşısa da günlük konuşmada aynı anda birden fazla yazılımın çalışması anlamında da kullanılabilir.

"İş birimi" anlamında, bir işte (tek seferlik iş parçacığı anlamında) görev tek bir adıma karşılık gelebilir (adımın yürütülüşü değil, kendisi). Toplu işlemede ise tekil görevler, bir toplu iş içindeki tek bir ögeyi işlemenin tek bir adımına ya da bir toplu işin tüm ögelerini işlemenin tek bir adımına karşılık gelebilir. Çevrimiçi sistemlerde, görevler genellikle tek bir isteğe (istek-yanıt mimarisinde) veya bir sorguya (bilgi erişiminde) karşılık gelir. Bu, tek bir işleme aşamasına veya tüm sistem genelinde işlemeye karşılık gelebilir.

### Örnekler
Java dilinde iş birimi ve işlem birimi kavramları, doğrudan iş parçacıklarıyla çalışırken birbirine karışır; ancak Executors tnımlaması ile açıkça ayırt edilebilirler:

### IBM terminolojisi
IBM'in bu terimi sıkça kullansa da terimin muğlaklığı göz önüne alındığında IBM terminolojisinde "görev" teriminin onlarca anlamı vardır. Bunların bazıları şu şekildedir:

* Bir işlemdeki adımlardan birini temsil eden iş birimi.
* Bir cihaz veya işlemle gerçekleştirilen iş birimi.
* Bir süreç ve süreci çalıştıran prosedürler.
* Belirli bir amaca ulaşmak üzere tanımlanmış eylem kümesi. Bir görev, belirli bir zaman çizelgesine göre bir dizi hedef üzerinde gerçekleştirilir.
* Bir hesaplama birimi. Paralel bir işte, iki veya daha fazla eşzamanlı görev, mesaj iletimi ve paylaşımlı bellek aracılığıyla birlikte çalışır. Fiziksel veya mantıksal işlemci başına bir görev tahsis etmek yaygın olsa da, "görev" ve "işlemci" terimleri birbirinin yerine kullanılamaz.
* Bir kullanıcı tarafından başlatılan ve yazılım tarafından gerçekleştirilen, ticari değeri olan bir etkinlik.

Z/OS'ta şu şekilde tanımlanır:

* "Çoklu programlama veya çoklu işlem ortamında, bir kontrol programı tarafından bir bilgisayar tarafından gerçekleştirilecek bir işin ögesi olarak ele alınan bir veya daha fazla talimat dizisi."

OS/360'tan z/OS'a kadar olan sistemlerde "görev" terimi kabaca "hafif iş (light-weight process)" ile eşdeğerdir, bir iş adımındaki görevler aynı adres alanını paylaşır. Ancak MVS/ESA'dan z/OS'a kadar bir görev veya Hizmet Talep Bloğu (SRB), erişim listesi aracılığıyla diğer adres alanlarına erişebilir.

### Linux çekirdeği
*Görev* terimi, Linux çekirdeğinde (en dar kapsamda v2.6.13'ten  v4.8'e kadar ) bir işlem birimini ifade eder ve bu birim, sistemdeki diğer görevlerle çeşitli sistem kaynaklarını paylaşabilir. Paylaşım düzeyine bağlı olarak *görev,* bir iş parçacığı veya işlem anlamına gelebilir. Görevler, kullanıcının kaynak paylaşım düzeyini belirleyebildiği `clone()` sistem çağrısı aracılığıyla oluşturulur.

## Tarihçe
Bir işin parçası anlamında kullanılan görev teriminin tarihçesi 1960'ların başındaki çoklu programlamaya kadar uzanır. 1961'deki örnekte olduğu gibi:

Bu terim, OS/360'ın tanıtılmasıyla (1964) popülerlik kazandı. Bu durumda görevler *hafif işlemler* ile tanımlanıyordu, dolayısıyla bir iş çok sayıda görevden oluşuyordu ve görevler de alt görevlerden oluşabiliyordu.

Günümüzde "görev" terimi oldukça muğlak bir biçimde kullanılmaktadır. Örneğin, Windows Görev Yöneticisi (çalışan) *işlemleri* yönetirken, geleneksel olarak "iş zamanlayıcı" olarak bilinen ve `.job` uzantısını kullanan Windows Görev Zamanlayıcı, gelecekte çalıştırılacak programları zamanlamak için kullanılır. Buna karşılık, "görev kuyruğu" terimi ise genellikle "iş birimi" anlamında kullanılmaktadır.

## Kaynakça