멀티프로그래밍: 운영체제는 위 그림처럼 메모리에 여러 작업을 올려 놓고, 하나를 선택하여 실행한다. 어떤 작업이 대기해야 하는 경우 CPU는 다른 작업을 처리한다. 이렇게 하면 CPU는 항상 바쁘게 일할 수 있으며, 사용률이 증가한다. 하지만 사용자와 컴퓨터 시스템의 상호작용은 제공하지 않는다.
시분할 시스템(Time sharing): 멀티프로그래밍의 논리적 확장으로, 프로세스마다 작업 시간을 정해주고 매우 빠르게 전환함으로써 동시에 실행되는 것처럼 보인다.
→ 프로세스: 프로그램이 메모리에 로드되어 실행되는 것
→ 작업 스케줄링(Job scheduling): 작업이 메모리에 올라와야 하는데 메모리에 자리가 없을 때 실행
→ CPU 스케줄링(CPU scheduling): 여러 작업이 동시에 실행될 수 있을 때, 먼저 실행할 작업을 선택하는 것
→ 가상 메모리(Virtual memory): 응답 시간을 보장하기 위해 사용, 물리적인 메모리의 크기보다 더 큰 프로그램을 실행할 수 있게 해줌
각 인터럽트의 타입별로 운영체제의 개별 코드 세그먼트가 어떤 조치를 취해야 할지 결정함
인터럽트를 처리하기 위해 인터럽트 서비스 루틴이 제공됨
운영체제와 사용자는 하드웨어와 소프트웨어 자원을 공유함
→ 운영체제는 사용자 프로그램에서 발생한 오류가 다른 프로세스에 영향을 미치지 않도록 방지해야 함
운영체제와 사용자 프로그램의 실행을 구분하기 위해 모드가 나뉘어지고, 모드 비트로 나타낼 수 있음
→ 사용자 모드: 모드 비트가 1
→ 커널 모드: 모드 비트가 0
사용자 프로그램에서 시스템 호출(System call)을 통해 운영체제에 서비스를 요청함
→ 모드 비트의 상태가 0으로 변경되고, 커널 모드로 전환
→ 시스템 호출을 실행한 뒤 모드 비트의 상태가 1로 변경되고, 사용자 모드로 전환
이러한 이중 모드는 잘못된 사용자로부터 운영체제를 보호함
→ 위험요소가 있는 명령을 특권 명령(Privileged instruction)으로 지정
→ 하드웨어는 커널모드에서만 특권 명령을 실행함
→ 만약 유저모드에서 특권 명령을 실행하려 하면 하드웨어는 이것을 실행하지 않고 운영체제에 트랩을 보냄
운영체제는 CPU의 제어권을 유지해야 하고, 사용자 프로그램이 무한루프에 갇혀 운영체제에 제어권을 반환하지 않는 일이 없도록 해야 함
→ 이를 위해 타이머(Timer)를 사용
타이머의 카운터가 0이 되면 인터럽트가 발생
타이머를 사용하여 사용자 프로그램이 너무 오래 실행되는 것을 방지할 수 있음
참고자료
Peter B. Galvin, Abraham Silberschatz, Greg Gagne - operating system concepts 9th edition