sysproc.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "types.h"
  2. #include "arm.h"
  3. #include "defs.h"
  4. #include "param.h"
  5. #include "memlayout.h"
  6. #include "mmu.h"
  7. #include "proc.h"
  8. int
  9. sys_fork(void)
  10. {
  11. return fork();
  12. }
  13. int
  14. sys_exit(void)
  15. {
  16. exit();
  17. return 0; // not reached
  18. }
  19. int
  20. sys_wait(void)
  21. {
  22. return wait();
  23. }
  24. int
  25. sys_kill(void)
  26. {
  27. int pid;
  28. if(argint(0, &pid) < 0)
  29. return -1;
  30. return kill(pid);
  31. }
  32. int
  33. sys_getpid(void)
  34. {
  35. return curr_proc->pid;
  36. }
  37. int
  38. sys_sbrk(void)
  39. {
  40. int addr;
  41. int n;
  42. if(argint(0, &n) < 0)
  43. return -1;
  44. addr = curr_proc->sz;
  45. if(growproc(n) < 0)
  46. return -1;
  47. return addr;
  48. }
  49. int
  50. sys_sleep(void)
  51. {
  52. int n;
  53. uint ticks0;
  54. if(argint(0, &n) < 0)
  55. return -1;
  56. acquire(&tickslock);
  57. ticks0 = ticks;
  58. while(ticks - ticks0 < n){
  59. if(curr_proc->killed){
  60. release(&tickslock);
  61. return -1;
  62. }
  63. sleep(&ticks, &tickslock);
  64. }
  65. release(&tickslock);
  66. return 0;
  67. }
  68. // return how many clock tick interrupts have occurred
  69. // since start.
  70. int
  71. sys_uptime(void)
  72. {
  73. uint xticks;
  74. acquire(&tickslock);
  75. xticks = ticks;
  76. release(&tickslock);
  77. return xticks;
  78. }