C
Ç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.
Örnek çözümü göster
#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;
}
Kendini test et
-
syscall dönüş değerini tamamla
int syscall(int num) {
return num * ____;
}
Cevabı göster
int syscall(int num) {
return num * 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
Cevabı göster
Çekirdeği başlatır ve mesaj yazdırır — kernel_init çekirdeği başlatır ve 'Çekirdek başladı' yazdırır.
-
Çekirdek işlevini eşle
- kernel_init
- Çekirdek yazdır
- syscall
- num * 2 döndür
- main
- Akışı yönet
- printf
- Mesaj yazdır
Sıradaki ders: Derleyici bileşeni