- process_exec() : 커맨드 라인 명령을 수행할 수 있도록 메모리에 적재하고 실행하는 함수. f_name에 저장된 문자열을 공백 기준으로 parsing하도록 코드 추가
인터럽트가 발생했을 때, 이전에 레지스터에서 작업하던 컨텍스트를 switching 하기 위해 기존 정보를 담아 놓는 역할의 구조체.
실행 중인 프로세스와 레지스터 정보, 스택 포인터, instruction count를 저장하는 자료구조로, 커널스택에 있음
S는 분리하고자 하는 문자열, delimiters는 문자열을 구분하는 기준(구분자), save_ptr는 문자열이 차례로 분리되면서 남은 문자열을 가리키는 포인터.
파싱한 인자를 스택에 올려주는 역할. argument_stack 함수에서 인터럽트 구조체 안의 rsp에 인자를 넣어주면, do_iret 함수에서 이 인트럽트 프레임을 스택에 최종적으로 올려준다.
- 시스템콜을 구현하기 전, 커널이 유저의 가상주소공간에 접근할 수 있는 방법을 제시해줘야 함.
- 포인터가 커널을 가리키거나 할당되지 않은 메모리를 가리키는지 체크해야 함.
물리메모리과 가상메모리를 일정 크기로 쪼갠 후, 그 크기에 맞춰 프로세스를 끼워넣는 방식.
가상메모리를 쪼개서 여러 Page로 만들고, 물리메모리도 Page와 같은 크기로 쪼개서 Frame으로 만든다.
그 후, 특정 Page와 Frame을 매핑한 페이지 테이블(Page Table)을 만듦. (페이징 기법을 이용하면 가상 주소와 물리 주소를 맵핑하는 페이지 테이블이 반드시 필요.)
가상 주소 공간의 각 Page에 대한 물리 메모리 위치를 기록하기 위해, 운영체제는 각 프로세스마다 페이지 테이블이라는 자료구조를 제공함. 페이지 테이블은 주소공간의 가상 페이지 주소 변환(address translation) 정보를 저장하며, 이를 통해 가상 주소를 물리 주소로 변환이 가능함.
페이지 테이블은 실행 중인 프로세스 수가 많은 수록 매우 커질 수 있기 때문에 메모리에 저장됨.
- 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스
- 커널 모드에서 실행되고 처리후에 사용자 모드로 복귀함
유저 어플리케이션에서 무언가 작성할 때, 모니터에 출력하거나 작성한 내용을 저장하는 것 모두 커널(운영체제)의 도움이 필요함.
핀토스를 종료시키는 시스템 콜 함수. Power_off 함수를 이용해 구현함.
프로시저, 제어의 이동
call 과 ret 기능의 예제
call 인스트럭션은 함수의 시작 부분으로 제어를 이동, ret 인스트럭션은 call 다음에 오는 인스트럭션으로 제어를 되돌림