Time-sharing system
Timer Interrupt
Timer sleep
Synchronization
여러 프로세스가 동시에 실행되는 환경.
하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정이다. 커널에 의해 일어난다. 이전 프로세스 상태(문맥)을 보관하고 새로운 프로세스의 문맥을 적재하는 작업이다.
<aside> 💡 커널은 어느 별도의 프로세스가 아니다. 단지 시스템 콜과 같은 예외 상황에 실행되는 메모리 상단에 위치한 각각의 프로세스의 일부분이다.
</aside>
제어 흐름이 프로세스 A로부터 B로 이양되었다 다시 A로 돌아왔다.
시분할 시스템 환경에서는 각각의 프로세스가 타이머 인터럽트에 의해 짧은 시간동안 CPU를 사용한 후 빼앗겼다가 다시 획득하는 구조로 이루어진다. 따라서 다시 CPU를 획득해 명령을 수행할 때 직전 수행 시점의 상태를 알아야 한다. 이 때 필요한 정보가 프로세스의 문맥이다.
프로세스의 문맥은 크게 3가지로 구분된다.
하드웨어 문맥
CPU의 수행 상태를 나타내는 것. 프로그램 카운터값과 레지스터에 저장되었던 값을 의미. 이는 프로세스 제어 블록에 저장된다.
프로세스의 주소 공간
프로세스가 가지고 있는 독자적인 주소 공간. 코드, 데이터, 스택으로 구성된다.
커널상의 문맥
운영체제가 프로세스를 관리하기 위한 자료구조. 커널 스택과 프로세스 제어 블록(자세한 정보는 여기)이 이에 해당한다.
커널 역시 프로세스이므로 독자적인 주소 공간을 가진다.
커널의 코드 영역은 CPU의 메모리 자원을 관리하기 위한 부분과 사용자에게 편리한 인터페이스를 제공하기 위한 부분이 주이다. 또한 시스템 콜 및 인터럽트를 처리하기 위한 부분을 포함한다.
커널의 데이터 영역은 각종
커널의 스택 영역에 수행 중인 프로세스마다 별도의 스택을 두어 관리한다.
시분열 시스템에서 운영체제는 CPU와 같은 컴퓨터 자원들을 적절히 프로세스마다 배분함으로써 효율적으로 많은 프로세스들을 동시에 실행시킬 수 있다. 이런 역할을 수행하는 프로세스(소프트웨어)를 스케줄러라고 한다.
운영체제는 모든 PCB를 Process Scheduling Queue들에 보관한다. 각각의 프로세스 상태에 따라 다른 종류의 큐들에 보관하는데, 프로세스가 한 상태에서 다른 상태로 넘어가면 기존의 큐와의 연결을 끊고 다음 상태의 큐로 넘어간다.