1. 컴퓨터의 기원과 발전
기계적인 스위치를 이용하여 1bit 단위로 컴퓨터에 입력하던 Hand-operated system를 시작으로 1950년도 부터 컴퓨터는 급속도로 발전하였다. 이 과정에서 '효율성'과 '성능'을 끌어올리기 위한 다양한 시도가 있었는데, 과거의 성능 향상을 저지하는 이슈와 그 이슈를 해결한 방식에 대해서 알아보자.
2. Batch system(Automatic job sequence, Spooling)
주어진 job을 일괄 처리하는 형태이다. 즉, 결과를 받기 까지 User Interaction이 불가능하고, 다른 Job으로의 스위칭이 불가능한 형태이다. 이 시대때는 Punch card로 코딩하고, 그것을 기계가 읽어, 연산하는 방식이었는데, 이러한 기계적인 I/O 장치와 전기 장치인 CPU사이에 현격한 속도차가 존재하여 CPU가 빈번히 Idle 상태(프로세스가 실행되고 있지 않은 상태)가 되어 효율이 많이 떨어졌다. 이러한 한계를 조금이나마 극복하고자, 사람의 관여 없이 여러 개의 프로그램을 순차적으로, 이전 job의 종료에 따라 즉각적으로 실행시키는 Automatic job sequencing이 고안되었지만 여전히 I/O에 의해 CPU가 Idle상태로 전환되는 문제점은 해결하지 못했다.
그래서 나온것이 Spooling(Simultaneous Peripheral Operation On-Line)이었다. 문자 그대로 I/O와 Computation을 동시해 진행하는 방식으로 버퍼를 이용하여 이전 작업의 종료를 기다리지 않고도 버퍼에 인쇄 작업을 로드하여 자신의 인쇄 작업을 요청할 수 있게 되었다.
I/O로 인한 CPU Idle 지속시간은 줄어들었지만 여전히 Interactive하지 못하다는 점과 한번 시작한 job을 모두 끝내야 다른 job을 실행할 수 있다는 단점은 계속되었다.
3. Multiprogramming
Multiprogramming은 2개 이상의 작업을 동시에 실행하자는 아이디어에서 부터 착안되었다. 현재 실행중인 작업이 I/O를 해야한다면, 다음 작업을 순차적으로 실행하는 방식으로 여러개의 작업을 동시에 실행시키고자 하였다. 이를 통해 CPU활용도가 증가하였으며 이에 따라 CPU Idle time도 감소하였지만 사용자와 상호작용하지 못한다는 단점은 여전했다.
또한 I/O때 다른 작업으로 스위칭 된다는 점으로 부터 I/O작업을 의도적으로 맨 뒤에 빼서 실행시간을 많이 보장하는 실행 시간의 불공평성과 스위칭이 I/O에 의해서만 일어나고, FCFS스케줄링 방식이어서 Priority를 설정하지 못한다는 단점이 존재했다. 이는 비단 Scheduling만으로 해결할 수 없는 문제였기 때문에 새로운 방식이 필요하게 되었다.
4. Timesharing
그래서 CPU의 실행 시간을 타임슬라이스로 나누어 실행하는 Timesharing방식이 등장하였다. 일정 타임슬라이스 동안 CPU를 점유하고, 그 시간이 다 된다면 스위칭을 통해 CPU를 양도하는 방식으로 구현되었다. 이 특징으로 인해 스위칭 때 User interaction이 가능해지게 되었고, 여러 개의 작업이 CPU 스위칭을 통해 동시에 실행되는 효과를 누릴 수 있었다. 하지만 실행 프로세스의 갯수가 증가함에 따라 더 효율성이 높은 방식의 필요성이 부각되었다.
5. Multitasking
이 방식은 Task기반으로, CPU와 같은 자원을 공유하는 방법이다. 여기서 Task란, 하나의 작업을 소분한 것이다. 이렇게 Task로 나눔으로써 Job 중에서도 주로 사용하는 Task의 실행 빈도가 높아지게 함으로써 CPU효율성이 좋아졌다고 한다. 이렇게 함으로써 여러 개의 프로그램을 동시에 실행할 수 있게 되었으며, CPU가 Idle상태일 때는 Background job을 실행할 수 있게 되었다. 이 방식을 현재까지도 사용하는데, 현재도 해결하지 못한 문제점들이 존재한다.
동시에 여러 개의 프로그램이 실행되고, 각 프로그램의 메모리가 관리 및 보호되어야 하므로, 메모리 관리 시스템이 복잡해졌고, 적절한 응답 시간을 제공해야할 필요성이 대두되었다. 또한 Concurrent Execution을 위해 CPU 스케줄링이 필요해졌고, 때에 따라서 Job 들간의 Orderly Execution도 필요해졌다(Deadlock과 동기화 문제)
이처럼 Multitasking 덕분에 CPU효율성은 높아졌지만 그에 따라 시스템이 복잡해졌다.
'학교 공부 > OS' 카테고리의 다른 글
운영 체제 (Operating System) - Kernel System Call 이해와 구현 (0) | 2021.11.28 |
---|---|
운영 체제 (Operating System) - Computer Architecture (0) | 2021.11.28 |
운영 체제 (Operating System) - Process (0) | 2021.11.28 |
운영 체제 (Operating System) - 운영체제 구조 (2) (0) | 2021.11.28 |
운영 체제 (Operating System) - 개요 (0) | 2021.11.27 |