2 min read · tagged Operating System, 운영체제
운영체제에서 유저 모드와 커널 모드의 존재는 자원에 대한 접근 권한과 관련 있습니다. 커널이 하드웨어와 유저 애플리케이션의 중간자 역할을 하기 때문에, 유저 애플리케이션은 하드웨어에 대한 접근을 직접 하기보다 커널에게 대신 해달라고 요청을 보내게 됩니다.
유저 모드
커널 모드
종종 그 과정에서 단순히 시스템 콜을 하는 것보다 더 많은 정보가 필요할 때가 있습니다.(e.g. 수많은 텍스트 데이터를 전달하는 등) 하지만, 유저 모드의 프로세스와 커널 모드에서 시스템 콜을 할때의 메모리는 서로 다른 프로세스이기 때문에, 커널은 보통의 방법으로 직접 접근이 불가능합니다.
그렇다면 유저 애플리케이션은 커널에게 인자를 어떻게 전달해야 될까요?
가장 단순한 방법 : CPU에서 레지스터로 직접 전달하는 방법. 인자를 레지스터에 넣은 후 전달합니다.
단, 제한점은 레지스터의 갯수와 크기가 제한적이라는 것.
인자를 메모리상의 블록이나 테이블에 저장 후, 그 주소를 레지스터를 통해 전달합니다.
리눅스와 Solaris가 이 방법을 사용.
ghleokim is a junior developer that tries to see things in a different way.