(통상적으로) 최초의 컴퓨터입니다. 당시에는 운영체제라는 소프트웨어가 존재하지 않아서 수동적으로 컴퓨터를 조작했습니다.
때문에, 프로그램 하나 실행에 많은 시간과 노력이 필요했고, 이로 인해 컴퓨터 운용 효율이 크게 떨어졌습니다.
위에서 언급한 단점을 보완하기 위해 등장한 소프트웨어입니다. 간단하게 운영체제의 전신이라고 생각하면 될 것입니다. 운영체제와 마찬가지로 사용자 프로그램의 실행을 돕고, 제어하는 역할을 수행했습니다.
Monitor가 프로세스들을 제어하는 방식으로, 프로그램들을 여러 개 묶어놓고 차례대로 실행시키는 방식입니다.
CPU 하나에서, 프로그램을 하나하나 차례대로 실행하고 종료하고를 반복하는 방식입니다.
그림에서 볼 수 있듯이, A에 event등이 발생하여 실행할 수 없는 상황이라고 한다면,
프로세스를 하나씩 처리하자! 라는 개념때문에 다른 프로그램도 실행할 수 없을 것이고, CPU Utilization이 많이 떨어지겠죠?
CPU 하나에서, 프로그램을 번갈아가면서 실행하는 방식입니다.
A에 event등이 발생해서 실행할 수 없는 상황이 오니까 다른 프로세스 B를 처리하는 모습입니다. Uniprogramming에서 CPU Utilization이 많이 떨어질 수 있다는 단점을 이렇게 보완한 것이죠.
Multiprogramming과 비슷한 처리방식입니다.
언뜻 보기에는 Multiprogramming과 다른 점이 없어보입니다. 하지만, 눈치 빠르신 분이라면 아셨을 수도 있겠지만, Multiprogramming 방식에서와는 달리, 프로세스 A, B의 실행 간격이 동일합니다. 이에 대한 설명은 바로 아래에서 해보겠습니다.
앞서 언급했듯이, 결정적인 차이는 Time Unit입니다.
그럼 프로세스가 느끼기엔 어떨까요?
Multiprogramming 방식보다, Time Sharing 방식에서 자기에게 프로세서가 주어지는 텀이 더 짧다고 느낄 것입니다. 그럼 더 나은 response time을 보장할 수 있겠죠?
그럼 현대에는 모두 Time Sharing 방식만 사용하는 것일까요?
각자의 장단점이 있기 때문에, 현대에는 Multiprogramming 방식과 Time Sharing 방식을 모두 사용합니다! 그 부분을 살펴보겠습니다.
processor가 여러 개인데, 각 프로세서가 같은 성격의 일을 수행하는 것을 의미합니다.
반대되는 개념은 asymmetric multiprocessing으로, 여기서는 특정 프로세서가 전담 역할을 가집니다.
Mutiprogramming vs. Multiprocessing?
Multiprocessing은 프로세서가 여러 개인 환경을 의미합니다.
Multiprogramming 방식은 프로세서 한 개 안에서 일어나는 일을 설명합니다.
다시 말해서, multiprocessing 방식은 실제로 여러 프로세스가 동시에 실행되는 것이고, multiprogramming 방식은 여러 프로세스가 동시에 실행되는 것처럼 보이는 것입니다.앞으로 위의 개념에서의 process는 parellel하게 실행된다 라고 이야기할 것이고, 아래 개념에서의 processs는 concurrent하게 실행된다 라고 이야기할 것입니다.
하지만, 둘은 서로 구분되는 개념이 아닙니다!!
Multiprocessing 환경에서 Multiprogramming 방식을 선택할 수 있습니다. 이는, 여러 프로세서에서 multiprogramming 방식으로 프로세스 처리가 진행된다는 것을 의미합니다.
Multiprocessing에서의 kernel은?
CPU가 여러 개니까 kernel도 여러 개로 복사해서 쓰는건가? 싶을 수도 있는데, Main Memory(RAM)에 존재하는 kernel 파일은 CPU 개수와 상관없이 1개입니다.