iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
自我挑戰組

C 語言筆記系列 第 28

[C 語言筆記--Day27] 6.S081 Lab syscall: Sysinfo ( II )

接續昨天寫到一半的題目,

昨天還留下了 sys_sysinfo() 沒有完成,

先來大致上分析一下這個 function 應該要做什麼,

  1. 首先他會接收到 user program 的一個型別為 struct *sysinfo 的參數

  2. 再來 sys_sysinfo() 也需要建立一個 struct sysinfo kinfo

  3. sys_sysinfo()kinfo.freemem 以及 kinfo.nproc 的值給填上

  4. kinfo 給複製到傳近來的參數的地方去

uint64
sys_sysinfo(void)
{
  // 2. 再來 ```sys_sysinfo()``` 也需要建立一個 ```struct sysinfo kinfo``` 
  struct sysinfo kinfo;
  struct proc *p = myproc();
  uint64 info;

  // 1. 首先他會接收到 user program 的一個型別為 ```struct *sysinfo``` 的參數
  if(argaddr(1, &info) < 0)
    return -1;

  // 3. ```sys_sysinfo()``` 把 ```kinfo.freemem``` 以及 ```kinfo.nproc``` 的值給填上(未完成)
  info.freemem = 0; // TODO !!
  info.nproc = 0; // TODO !!

  // 4. 把 ```kinfo``` 給複製到傳近來的參數的地方去
  if(copyout(p->pagetable, info, (char *)&kinfo, sizeof(info)) < 0)
    return -1;
  
  return 0;
}

參考資料

https://www.cnblogs.com/weijunji/p/14338408.html


上一篇
[C 語言筆記--Day27] 6.S081 Lab syscall: Sysinfo ( I )
下一篇
[C 語言筆記--Day29] 寫不出來了完蛋
系列文
C 語言筆記30

尚未有邦友留言

立即登入留言