Project #2: System Calls
난이도 확 올라간다 ! 진짜 os 실습 시작이다.
System Call에서 interrupt가 어떻게 발생하는지 확인한다. 코딩 실력보다 내용의 이해가 더 중요하다.
git clone https://github.com/snu-csl/xv6-riscv-snu
it checkout pa2
1. Implement the nenter() system call (30 points)
nenter 명령어를 쳤을 때 enter를 친 횟수를 반환하는 코드를 작성해야한다.
기본적으로 외부 입력을 받으면 (ex 키보드, 마우스) interrupt가 발생한다. 그리고 enter는 키보드 입력 중에 하나다.
syscall.h에 저장된 #define SYS_nenter 22 를 다른 syscall 함수들과 잘 비교해서 완성해보도록 하자.
한트로는 파일 별로 add, remove등 변환해야하는 코드의 양을 표시해둔 자료다. + 하나에 1~10 줄 정도의 코드를 의미한다. 내 경험상 + 하나는 코드 3줄 정도 됐다.
kernel/console.c | +
kernel/kernelvec.S | ++++
kernel/riscv.h | +
kernel/start.c | +
kernel/syscall.c | +
kernel/sysproc.c | ++++++
kernel/trap.c | +
enter를 처리하기 위해 console.c, syscall.c, sysproc.c를 수정했다.
그리고 키보드 입력 하나하나를 따져보려면 trap.c의 함수를 뜯어볼 때 재미있는 결과를 얻을 수 있다.
정상적으로 코드를 동작시키면 이렇게 출력되는 것을 확인할 수 있고
trap.c에 정의된 uartintr() 함수는 키보드 입력마다 interrupt를 발생시킨다. 그래서 키보드 입력마다 count를 한다면
두 번째 명령부터 nenter + enter 로 7씩 증가하는 것을 확인할 수 있다 (재밌다 !)
2. Implement the getpmpaddr() system call (50 points)
3. Implement the getpmpcfg() system call (20 points)
# 출처
https://github.com/snu-csl/os-pa2
GitHub - snu-csl/os-pa2: OS Project #2 (Fall 2024)
OS Project #2 (Fall 2024). Contribute to snu-csl/os-pa2 development by creating an account on GitHub.
github.com