
소프트웨어는 컴퓨터 시스템에서 수행되기 위해 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 한다.
하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간 낭비가 심하다.
이때문에 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려 놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용한다. 이때 메모리에 상주하는 운영체제의 부분을 커널(kernel)이라고 한다.
CPU는 유저 애플리케이션이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공한다.
CPU에 있는 Mode bit로 모드를 구분하여
0은 커널 모드(kernel mode),1은 유저 모드(user mode)로 나뉘어 구동된다.
운영체제는 다양한 서비스들을 수행하기 위해 하드웨어를 직접 관리한다.
반면에 응용 프로그램은 운영체제가 제공하는 인터페이스를 통해서만 자원을 사용할 수 있다.
운영체제가 커널에 접근하기 위한 인터페이스를 시스템 콜(System Call)이라고 한다.
exit), 중지 (abort)load), 실행 (execute)create process) - forkwait time)wait event)signal event)create / delete)open / close / read / write)reposition)get file attribute / set file attribute)ioctl)request device), 장치를 방출 (release device)getpid(), alarm(), sleep()time)date)pipe(), shm_open(), mmap()chmod()umask()chown()
printf)를 호출한다.write)를 호출한다.4)를 CPU 레지스터에 저장한다.system_call()을 호출한다.system_call() 함수 내에 전달한다.sys_call_table을 참조해 해당 인덱스에 맞는 기능(sys_write)을 호출한다.💡 시스템 호출에서의 모드 전환은 컨텍스트 스위칭이다?
컨텍스트 스위칭은 운영체제가 CPU에서 실행 중인 프로세스 또는 스레드를 중단하고, 다른 프로세스 또는 스레드를 실행할 때 일어나는 과정이다. 이 과정에서는 실행 중이던 프로세스의 상태(레지스터, PC 등)를 저장하고, 새로운 프로세스의 상태를 복원하는 작업이 필요하다.
📌 모드 전환(Mode Switching) 과정
시스템 콜이 호출되면 CPU는 사용자 모드에서 커널 모드로 전환된다. 이때, 동일한 프로세스가 실행되지만, 실행 권한이 제한된 사용자 모드에서 더 많은 권한을 가진 커널 모드로 전환되는 것이다. 이 과정에서 프로세스의 상태를 저장하거나 복원하는 작업은 없다. CPU의 권한 모드만 변경되고, 커널이 해당 시스템 콜을 처리하는 것이다.
📌 컨텍스트 스위칭(Context Switching)
반면, 컨텍스트 스위칭은 프로세스 간 전환이다. 만약 시스템 콜을 처리하는 도중, 예를 들어 I/O 작업이 필요해 프로세스가 대기 상태로 전환되면, 그때 다른 프로세스가 CPU를 사용할 수 있도록 컨텍스트 스위칭이 발생한다. 이때는 CPU가 현재 실행 중인 프로세스의 상태를 저장하고, 새로운 프로세스의 상태를 로드하여 다른 작업을 수행하게 된다.
따라서, 시스템 콜의 과정에서 일어나는 모드 전환은 컨텍스트 스위칭이 아니다. 프로세스 자체가 전환되는 것이 아니라, 동일한 프로세스 내에서 권한 모드만 변경되는 것이기 때문이다.
📌 요약
- 모드 전환: 사용자 모드 ↔ 커널 모드 전환 (동일한 프로세스 실행)
- 컨텍스트 스위칭: 프로세스 간 전환 (프로세스 상태 저장 및 복원)
Reference