CodeBlanks Logo Icon CodeBlanks

Çekirdek modülü

Çekirdek modülü ve syscall katmanı yazarsın.

Çekirdek modülü

İkinci derste çekirdek modülünü eklersin. kernel_init fonksiyonu, çekirdeği başlatır ve bir mesaj yazdırır. syscall fonksiyonu, bir sistem çağrısı numarasını ikiye katlar — bu, basit bir syscall dağıtıcısının (dispatcher) modelidir.

Gerçek çekirdeklerde syscall, kullanıcı alanından çekirdek alanına geçiş yapar; burada basitleştirilmiş bir sürümü yeterlidir. kernel_init çağrısı, main'in başında yapılır; böylece çekirdek hazırdır. Önceki dersin iskeleti başlangıç koduna dahildir; sen yeni fonksiyonları eklersin.

Syscall dağıtıcı deseni

Bir syscall dağıtıcı, numaraya göre farklı işlevlere yönlendirme yapar. Bu projede basitleştirilmiş bir sürüm kullanıyoruz: int syscall(int num) { return num * 2; }. Gerçek dağıtıcı, bir tabloya (dispatch table) bakar ve ilgili işlevi çağırır.

Dağıtıcı deseni, switch veya işlev göstergesi tablosuyla uygulanır. Burada num * 2, dağıtıcının bir çağrıyı işlediğini simüle eder. kernel_init ise main'den çağrılır ve çekirdeğin hazır olduğunu bildirir. Bu iki fonksiyon, mini sistemin çekirdek katmanını oluşturur.

Uygulama Çekirdek modülünü ekle

Var olan bildirimlerin altına void kernel_init(void) tanımını yaz; içinde printf("Çekirdek başladı\n"). int syscall(int num) tanımını yaz; return num * 2; döndürsün. main içinde kernel_init() çağır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>

void kernel_init(void);
int parse_command(const char *cmd);
int security_check(const char *buf, int len);

int main(void) {
    printf("Proje başladı\n");
    return 0;
}

// kernel_init fonksiyonunu yaz: "Çekirdek başladı" yazdır
// syscall fonksiyonunu yaz: num * 2 döndür
// main'de kernel_init'i çağır

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>

void kernel_init(void);
int parse_command(const char *cmd);
int security_check(const char *buf, int len);

void kernel_init(void) {
    printf("Çekirdek başladı\n");
}

int syscall(int num) {
    return num * 2;
}

int main(void) {
    printf("Proje başladı\n");
    kernel_init();
    return 0;
}

Beklenen çıktı

Proje başladı
Çekirdek başladı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 syscall dönüş değerini tamamla

Soru
int syscall(int num) {
    return num * ____;
}
Cevap
int syscall(int num) {
    return num * 2;
}

Açıklama: return num * 2; syscall numarasını ikiye katlar.

2 kernel_init ne yapar?

  • Dosya okur
  • Ağ bağlantısı kurar
  • Bellek serbest bırakır
  • Çekirdeği başlatır ve mesaj yazdırır Doğru cevap

Açıklama: kernel_init çekirdeği başlatır ve 'Çekirdek başladı' yazdırır.

3 Çekirdek işlevini eşle

Kavram Anlamı
kernel_init Çekirdek yazdır
syscall num * 2 döndür
main Akışı yönet
printf Mesaj yazdır

Uzman bölümündeki tüm dersler