March 14, 2020
참고도서: Operating System Concepts (9/E) Abraham Silberschatz, Peter B. Galvin, Greg Gagne
운영체제는 multiprogramming 에서 큰 역할을 한다. 운영체제가 CPU에 작업을 분배해서 모든 CPU가 쉬지 않고 작업을 수행하도록 하는 것이다.
지난번에 배웠던 것 처럼, 모든 프로그램과 작업이 실행되려면 메모리에 load 되는 작업이 선행되어야 한다. 운영체제는 메모리에 올라와 있는 작업들 중에 실행할 작업들을 선택해서 CPU에 넣어주게 된다. multiprgramming을 하지 않는 시스템에서는 운영체제가 넣어준 작업이 끝날 때까지 다른 작업들은 대기상태에 있다. 하지만 multiprogramming은 한 작업이 수행될 때, interrupt와 같은 이유로 CPU가 어떤 결과를 기다려야 하는 상황이 생기면 그 작업이 끝날때까지 메모리에 있는 다른 작업을 가져와서 CPU가 새 작업을 수행하도록 한다. 만약 첫 작업이 끝나면 CPU는 현재 작업하는 작업을 중단하고 다시 첫 작업으로 돌아가게 된다. 이런 방식은 굉장히 효율적이지만, 사용자의 개입을 허용하지 않는다는 단점이 있다.
단점은 누군가에 의해 항상 보완된다.. multiprogramming 을 보완하기 위해서 사용자와의 interaction이 가능한 Time sharing 시스템이 등장했다. Time sharing은 multiprogramming은 작업이 교체되는 빈도수를 훨씬 더 잦게 만드는 방법이다. 따라서 사용자가 어떤 작업에 개입할 수 있도록 운영체제가 작업을 분배해준다. multiprogramming 과 비슷한 것 같지만 time sharing은 프로세스마다 시간을 주어서 CPU가 꼭 대기상태가 아니라도 작업을 변경해버린다. 마지막으로 time sharing 에서는 프로세스가 자주 바뀌기 때문에 response time 이 굉장히 중요한 요소하는 것을 기억하자!
Multiprogramming 과 time sharing 은 결국 동시에 여러 프로세스를 수행하기 위함이다. 그렇다면 계속 언급하고 있는 것 처럼 메모리에 프로그램들이 올라와 있어야 하지 않는가? 메모리의 용량이 충분치 않아서 여러 프로그램들을 중 선별해서 메모리에 넣는 과정을 job scheduling 이라고 하고, 메모리에 있는 여러 작업들 중 어떤 작업을 선택하여 수행할 건지 선택하는 과정을 CPU scheduling 이라고 한다.
운영체제는 interrupt(하드웨어) 나 trap(소프트웨어)에 의해 어떤 작업들을 수행할 때가 많다. 이때 운영체제는 특정한 작업 수행에 대한 접근 권한을 명확히 해서 명령어의 잘못된 사용을 최소화 할 필요가 있다.
위와 같은 이유로, 운영체제는 두 가지 모드의 실행 모드를 지원한다. 그리고 이를 구분하기 위해 mode bit라는 비트를 하드웨어 내에 넣어두고 사용한다.
어떤 명령어는 user mode에서 절대 수행되면 안되는 명령어들의 있다. 이 명령어들은 미리 kernel mode에서만 수행되도록 지정되어 있는데, 이런 명령어들을 privileged instruction 이라고 한다.
운영체제가 제어를 가지고 있음에도 불구하고, 어떤 명령이나 프로그램이 수행되다가 무한루프에 빠지는 경우가 생길 수도 있다. 이런 문제를 방지하기 위해서 Timer 를 사용한다. Timer는 특정한 시간 이상으로 어떤 작업이 수행되거나 작업이 종료되지 않으면 interrupt 를 하게 하는 역할을 수행한다.