01. 운영체제의 발전 (The History of Operating Systems)
운영체제(Operating System)는 컴퓨터의 전반적인 운영을 제어하는 소프트웨어다. CPU, 메모리, 보조기억장치, 입출력장치와 같은 시스템 자원(resource)를 실행한 프로그램에 적절히 할당하고 제어하는 중요한 역할을 한다.
01. 운영체제의 발전 (The History of Operating Systems)
운영체제는 아주 단순한 프로그램으로 시작했다.
운영체제는 20세기 중반 큰 방만한 초기 컴퓨터를 조작할 때 작업을 단순화시키기 위해 만들어졌다. 당시 컴퓨터는 하나의 프로그램을 실행시키기 위해 천공 카드나 테이프로 컴퓨터에 명령을 입력해야 하는 등 준비 기간이 길었다. 또한 한 가지 작업이 진행중인 동안에는 오로지 그 작업만 할 수 있었으므로 다른 작업을 하기 위해 대기하는 사람들은 그저 기다리고 있을 수 밖에 없었다.
이를 개선해 컴퓨터 운영만을 전담하는 컴퓨터 운영자를 고용하고 컴퓨터 작업이 필요한 사람들은 프로그램과 그에 관련한 명령을 컴퓨터 운영자에게 제출하도록 했다. 컴퓨터 운영자는 제출받은 여러 프로그램과 데이터를 대용량 저장장치에 적재하는데, 이때 초기 운영체제가 저장된 프로그램을 하나씩 불러와서 실행시켜 주는 역할을 했다. 이것이 작업을 모아 하나의 묶음으로 만들고 사용자의 개입 없이 이들을 순차적으로 실행시키는 일괄 처리(Batch Processing)다.
일괄 처리 시스템에서는 대용량 저장 장치에 들어있는 프로그램들이 작업 큐(Job Queue)에서 실행되기를 기다렸다가 선입선출(First-In, First-Out, FIFO) 방식으로 나가게 된다. 이 방식의 단점으로 일단 사용자가 운영자에게 프로그램과 데이터를 제출하고 난 뒤에는 작업에 전혀 개입할 수 없다는 것이다. 만약 실행 중에 사용자와 대화가 필요한 프로그램의 경우에는 문제가 생길 수 있다는 뜻이다.
이러한 요구를 수용하기 위해, 실행되는 프로그램이 원격 단말기를 통해 사용자와 대화할 수 있는 새로운 운영체제들이 개발되었는데, 이러한 기능을 대화식 처리(Interactive Processing)이라고 한다. 성공적인 대화식 처리에 핵심적인 부분은 사용자가 기다리지 않도록 컴퓨터의 동작이 충분히 빨라야 된다는 것이며, 이렇게 마감시간을 맞추며 컴퓨터 서비스를 제공하는 것을 실시간 처리(Real-Time Processing)라고 한다.
당시에 한 번에 한 명의 사용자를 위해 실시간 처리를 제공하는 것은 아무런 문제가 없었지만, 또 다른 요구 사항이 발생했는데 바로 동시에 여러 사용자에게 서비스를 제공하는 것이었다. 이러한 서비스를 제공할 수 있도록 운영체제를 설계하는 것을 시분할(Time-Sharing) 방식이라고 한다. 시분할 방식을 구현하는 한 가지 방법은 멀티프로그래밍(Multiprogramming)이라는 기법인데, 이는 시간을 작은 텀으로 나누고 한 작업을 한 번에 한 텀 동안만 실행시키는 것이다. 텀이 끝나면 현재 작업을 중지하고 그 다음 텀에는 다음 프로그램을 실행하도록 하는 것으로, 이를 충분히 빨리 교대시키면 여러 작업이 동시에 실행되는 것처럼 보이게 된다.
멀티프로그래밍은 여러 사용자를 동시에 수용하기 위한 기법이지만, 반대로 멀티태스킹(Multitasking)은 단일 사용자가 동시에 여러 작업을 실행시키는 방식이다.
결론적으로, 다중 사용자 시분할 운영체제의 개발로 사용자들은 컴퓨터 운영자에게 작업을 맡기는 대신 컴퓨터와 직접 통신할 수 있게 되었고 컴퓨터 운영자라는 직업은 점차 사라졌다. 현재 PC에서는 컴퓨터 사용자가 컴퓨터 운영을 전적으로 책임진다. 요약하자면, 운영체제는 프로그램을 한번에 하나씩 불러와서 처리하는 단순한 프로그램에서, 시분할을 조정하고 컴퓨터의 대용량 저장장치에서 프로그램과 데이터 파일을 유지하며 컴퓨터 사용자의 요청에 직접 응답하는 복잡한 시스템으로 발전되었다.
이에 더 나아가서 현대 운영체제는 단일한 프로세서에 여러 개의 작업을 배치하거나, 멀티프로세서에 여러 개의 작업을 시분할해 배치하는 운영체제로 발전했다. 이러한 운영체제들은 부하 균형(Load Balancing)이나 스케일링(Scaling) 등의 문제와 씨름해야 한다.
'프로그래밍 > Computer Science' 카테고리의 다른 글
[Data Structure] Linear - (1) Array (0) | 2023.08.16 |
---|---|
[Overview] 03. Operating Systems - (2) Kernel and Virtual Machine (0) | 2023.08.02 |
[Overview] 02. Data Manipulation - (2) Program Execution (0) | 2023.07.21 |
[Overview] 02. Data Manipulation - (1) Computer Architecture and Machine Language (0) | 2023.07.17 |
[Overview] 01. Data Storage - (4) Data Compression (0) | 2023.07.14 |