Books/Operating System

Project #2: System Calls

yooom 2024. 11. 15. 02:34

난이도 확 올라간다 ! 진짜 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

 

728x90