Çekirdek modülü
- C kursu
- Uzman
- Ders 44/47
- 6 dk
Ç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
#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
#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
int syscall(int num) {
return num * ____;
}
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 |