운영체제 퀴즈를 보고 오답을 정리하다가 작성하게된 포스트
문제는 다음과 같았다. 헷갈려서 다시 제대로 정리하고 넘어가려고 한다.
일단 multiprogramming과 multitasking
각각 다중 프로그래밍 과 다중 태스킹 이라고 한다.
multiprogramming
일단 하나의 프로그램으로는 CPU 나 I/O 장치를 계속 바쁘게 만들 수는 없다.
하나의 프로그램으로는 CPU를 쓰거나... I/O 장치를 쓰거나... 둘 중 하나기 때문에
CPU랑 I/O 장치 중에 무언가 하나는 쉬고 있을 수 밖에 없다.
이게 아까운거다.(유휴상태가 발생함)
사람들은 사용을 안하는 그 시간에 다른 프로그램도 돌리고 있으면 좋겠다는 생각을 했다.
그래서 한 번에 두 개 이상의 프로그램을 돌리는 게 multiprogramming(다중 프로그래밍) 이다.
이렇게 되면 CPU는 항상 한 개의 프로그램을 돌리고 있을 수밖에 없다 -> CPU의 이용률이 늘어난다.
이 프로그램 돌리다가 안돌릴때에는 저 프로그램 돌리는 거다.
(여기서 multiprogramming 에서 실행하는 프로그램은 process 라고 부른다)
정리하자면...
1프로세스가 실행중,
1프로세스가 실행하다가 대기하는 경우에는 CPU 안쓰니까 유휴상태가 됨,
이럴땐 2프로세스가 CPU를 씀.
그러다가 대기상태가 풀리면 1프로세스는 CPU자원을 다시 돌려받음.
multitasking
multitasking 은 우리가 멀티태스킹이 된다 라고 할때 그 멀티태스킹을 생각해볼 수 있을 것 같다.
우리가 '멀티태스킹'을 할 때에 이 일 했다가- 저 일 했다가-를 굉장히 빠르게 전환하면서 한다면
동시에 처리하는 것처럼 보일 수 있을 것이다(적절한 비유가 되려나?)
CPU가 여러 프로세스를 전환하면서 프로세스들을 실행하는 것인데
이 전환이 너무 빨라서 사용자한테 빠른 응답 시간을 제공하니까
여러 프로그램이 동시에 실행되는 것처럼 보인다.
결론
멀티프로그래밍은 CPU가 쉬지 않도록 여러 프로세스가 실행되는 것
멀티태스킹은 여러 프로세스를 전환하면서 실행하여 동시에 처리되는 것처럼 보이는 것
ref