유저모드(User mode)와 커널모드(Kernel mode) 요약부터 확인해보자.
요약 : 커널에서 중요 자원들을 관리하기 때문에, 사용자가 중요한 자원에 접근하지 못하도록 모드를 나눈 것이라고 보면 된다.
프로세스가 진행되면서, User mode와 Kernel mode가 계속해서 전환된다.
유저모드에서 프로세스 진행이 되다가 특정 작업이 필요할때 system call을 이용해서 커널에 요청을 한다.
system call 요청을 받은 커널이, 그 요청에 대한 일을 하고 결과값을 system call의 리턴 값으로 전해준다.
예를 들어, 프로세스가 실행되고있는 중에 라이브러리 함수인 fopen함수를 호출하면 fopen 내부에서 system call인 open을 호출하면서 커널모드로 넘어간다.
open에 대한 입력값이 커널로 전달이 되고 해당 일을 완료하고 커널에서 return을 해주면서 유저모드로 돌아가게 된다.
이 작업을 프로세스가 진행되면서 계속 반복하는 것이다.
(출처 : https://blockdmask.tistory.com/69#recentEntries)