OS와 하드웨어
위의 RISC-V 코드에서 마지막 ecall 명령이 실행되었을 때 일어나는 일로 올바른 것은 무엇입니까?
li a7, 64 # 시스템 콜 번호
li a0, 1 # 인수 1
la a1, msg # 인수 2
li a2, 13 # 인수 3
ecall
- A지정한 번호의 주소로 특권 모드 그대로 일반 함수 호출처럼 분기한다
- B인터럽트가 금지되고 다음 인터럽트가 올 때까지 CPU가 정지한다
- C예외로 특권 모드로 전환되어 커널의 처리가 실행된다
정답과 해설 보기
정답: C. 예외로 특권 모드로 전환되어 커널의 처리가 실행된다
ecall은 의도적으로 예외를 일으키는 명령입니다. CPU는 현재 명령의 주소를 저장하고 권한이 높은 모드로 전환하여 OS가 설정한 예외 처리의 진입점으로 이동합니다. 커널은 a7의 번호로 어떤 시스템 콜인지 판단하고, a0~a2를 인수로 처리한 뒤 결과를 반환하고 사용자 모드로 돌아갑니다. 사용자 모드에서 커널 함수로 직접 분기할 수는 없으며, CPU를 정지시키는 것은 wfi 같은 다른 명령입니다.
- A. 사용자 모드 그대로 분기하지 않고, 예외로 모드를 전환합니다.
- B. CPU를 멈추고 인터럽트를 기다리는 것은 wfi 등의 다른 명령입니다.
- C. 올바릅니다. 예외로 특권 모드에 들어가 커널이 처리합니다.