So far
- 실제 Supervisor Call을 구현하여 앱 실행시 svc 유도
- msp인지 psp인지 구분하고 msp면 kernel mode로 점프
- kernel 모드에서 어플리케이션 진행
- 앱 실행 후 다시 user mode로 리턴
커널 진입 경로
앱 코드 -> asm!("svc 0") -> (SVC 예외)
-> SVCall(트램펄린) -> svcall_rust(핸들러/커널)
-> kernel_dispatch -> board(MMIO)
-> frame.r0에 반환값 저장 -> 예외 복귀 -> 앱으로 리턴
즉, 현재 진행 상태를 요약하면
svc 0콜로 커널(Privileged Handler)로 들어가는 구조를 완성하자.
Meeting
스케줄러 포함하기. 각 앱마다 메모리 배정 -> Stack Pointer
스택 포인터 간격은 앱 사이즈에 맞춰서 내가 원하는대로 만들기.
OS에서 이 SP 주소들을 갖고 있어야 하며, PC를 저장해서 다음 thread timing때 이어서 할 수 있도록 설계.-> 이게 Multi-Thread?
Switch 함수 삭제해야 함. 기본적으로 OS는 돌아가야 하며, 나머지 앱들을 선택해서 운영할 수 있어야 한다.
따라서 Apps 모듈에서도 run::All 남겨두고 나머지 삭제해도 무방할듯.
살려주세요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ