XV6'da basit bir öncelik tabanlı zamanlayıcı oluşturmaya çalışıyorum. Bunu yapmak için, bir sürecin önceliğini belirlemesine izin verecek bir sistem çağrısı oluşturmak zorundayım. Burada ve başka yerlerde tartışıldığı gibi sistem çağrısını oluşturmak için gereken her şeyi yaptık:XV6'da bir sistem çağrısı işlevine nasıl değer aktarılır?
how do i add a system call/utility in xv6
Sorun işlevi çağırmak, daha doğrusu ne zaman herhangi bir değişken geçemez olduğunu, bu şey gibi çalışır yanlıştır ama Doğru değerler fonksiyonun içinde görünmez.
Harici beyan (syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
Sys-call Vektör (syscall.h):
#define SYS_setpty 22
Uygulama (sysproc.c):
void
sys_setpty(int pid, int pty)
{
cprintf("function pid: %d \n", pid);
cprintf("function pty: %d \n", pty);
}
(def.h & user.h):
void setpty(int, int);
Makro (usys.S):
SYSCALL(setpty)
Fonksiyon çağrı:
setpty(3, 50);
Çıktı: 16843009. Ben: değerleri her zaman aynı tam sayısı vardır
function pid: 16843009
function pty: 16843009
pprint ve pty değerlerini atayarak cprintf'in düzgün çalışıp çalışmadığını kontrol etti. Düşünebildiğim her şeyin olası kombinasyonunu denemek için yaklaşık 6 saatimi harcadım ve XV6'da sistem çağrısı yoluyla değerleri iletmek için yerleşik bir mekanizmanın olmadığını düşünmeye başladım. Bir şey mi eksik? Şimdiden teşekkür ederim. Kullanıcı düzeyinde işlevlerden çekirdek düzeyi işlevlerine geçiş argümanları XV6'da yapılamaz.
Aynı noktada sıkışıp kaldınız mı? – WannaBeCoder
Bununla oynadığımdan birkaç ay geçti, deneyeceğim ama neye ihtiyacın olduğu konusunda emin değilim. – bertmoog
Kendi cevabınız +1 sayesinde, kullanıcı uzayından çekirdek alanına parametrelerin nasıl aktarılacağını anladım. Ancak öncelik tabanlı zamanlama yapamadım. :( – WannaBeCoder