※학부생의 개인 스터디 목적으로 쓰인 포스트입니다. 해당 포스트를 참조할 시, 반드시 더블 체크를 하는 것을 권장합니다.
| 1.1 운영체제란? |
| 1.1.1 운영체제의 역할과 목표 |
| 1.1.2 운영체제의 기능과 역사 |
이번 포스트에서는 운영체제의 역할과 목표, 그리고 기능에 대해 알아본다. 즉, 운영체제가 왜 필요한지에 대해 이해하는 시간이 될 것이다. 또한 그러한 운영체제가 하는 일이 무엇인지에 대해 알아본다. 운영체제라는 과목을 배워야 할 필요성에 대해 이해하는 시간이 되길 바란다.
1.1.1 운영체제의 역할과 목표
1. 운영체제 (OS, Operating System.)
컴퓨터, 태블릿, 스마트폰을 키면 가장 먼저 만나는 소프트웨어. 여기서 주목해야 할 점은 운영체제는 소프트웨어이지 기기 그 자체가 아니라는 점이다. 우리가 흔히 사용하는 맥북같은 경우, macOS를 채택하고있다. 맥북 = macOS가 아니라는 점을 주목해야한다.
하드웨어 위에 설치되어 하드웨어 계층과 다른 소프트웨어 계층을 연결하는 소프트웨어 계층이 바로 운영체제의 정의이다.
기기, 즉 하드웨어의 전원이 들어오면 가장 먼저 이 운영체제라는 소프트웨어가 실행되도록 약속되어있을뿐이다. (이 과정을 부팅이라고 정의한다. 추후, 포스트에서 더 알아볼 예정이다.)
2. 운영체제의 역할과 목표
그렇다면 이러한 운영체제의 역할은 무엇일까? 한 마디로 정리하면, 운영체제는 사용자가 기기를 편하게 이용할 수 있도록 도와주는 소프트웨어이다. 컴퓨터의 자원을 일일히 사용자가 관리하는 것은 매우 불편한 일일 것이다. 간단히 생각해보자. 당신은 CS 편의점 주인이다. 아르바이트를 고용하지 않았기에 발주부터 고객 응대, 시재 계산까지 모두 당신이 홀로 해내야한다. 몸이 열 개라도 모자랄 것이다. 이 때, 운영체제가 나타난다. 이 운영체제는 당신을 대신하여 편의점의 모든 자원을 홀로 도맡아 독점적으로 관리해준다. (사장님은 발주 이상하게 하니까 하지 마세요. 제가 다 관리할거예요.) 이제 다시 편의점에서 컴퓨터 시스템으로 돌아오자.
운영체제는 컴퓨터의 자원을 관리하고, 사용자가 컴퓨터를 사용할 수 있는 환경을 제공해주는 특별한 소프트웨어이다. 컴퓨터의 자원은 CPU, 메모리, 디스크 등등 매우 다양하다. 이러한 자원들을 추상화하여 관리하는 것이 바로 운영체제의 역할이다.
따라서 운영체제의 목표 또한 단순하다. 컴퓨터를 문제 없이 잘 운영하는 것이다. 효율적이고, 안정적이면서, 확장도 잘 되고, 편리하다면 더할 나위 없을 것이다. 위 문장을 네 가지의 항목으로 정리할 수 있다.
- 효율성 Efficiency
- 안정성 Robustness, Security
- 확장성 Scalability, Extensibility, Portability
- 편의성 Useability, Interactivity
이처럼 OS는 하드웨어와 소프트웨어를 이어주는 계층으로써 한정된 자원을 가지고 정확하고 빠르고 안정적으로 주어진 문제를 해결하는 것이 목적이다.
+그런데 만약 운영체제가 없다면 어떻게 될까?
놀랍게도 기기는 작동한다. 운영체제라는 소프트웨어가 사라졌을 뿐 하드웨어 자체에는 문제가 없기 때문이다. 운영체제가 해주는 일을 사용자가 일일히 하고 있다면 기기는 당연히 정상적으로 작동한다. 사용할 수 있는 기능이 극히 한정적이고, 제어가 어렵겠지만. 하드웨어 장치를 추가하거나 소프트웨어를 추가 설치하는 것은 거의 불가능할 것이며 장애에 대한 대응 또한 어려워질 것이다.
하지만 오히려 이 점을 이용하여 운영체제를 의도적으로 배제한 기기가 존재한다. 다른 자원을 연결 및 설치 할 수 없다는 말은 보안적으로 안전하다는 말로 해석할 수 있다. 또한 미숙한 사용자(우리)로부터 보호 가능하다. 때문에 일부 시스템, 특히 Network device의 경우 의도적으로 OS를 배제하고 나오기도 한다.
1.1.2 운영체제의 기능과 역사
1. 운영체제의 기능
지금부터는 운영체제가 주어진 역할을 잘 하기 위해서 필요한 기능을 알아볼 것이다. 운영체제에게 필요한 기능은 다음과 같다. 보안 관리, 네트워크 관리, 장치 관리, 프로세스 관리, 메모리 관리, 파일 시스템 관리를 비롯한 기타 모든 관리... .
물론 이 모든 걸 그냥 머릿 속에 집어 넣어도 되겠지만. 운영체제가 '왜 이 기능이 필요하게 되었는가'를 이해할 수 있다면 자연스럽게 유추 가능할 것이다. 때문에 지금부터 운영체제가 발전한 역사를 알아보도록 하겠다.
2. 운영체제의 역사
역사라고는 하지만 년도와 업적을 외우는 시간은 아니다. 운영체제의 발전사에 가깝겠다. 앞서 말했든 필요가 불러온 발명에 집중하여 운영체제의 발전 과정과 함께 기능을 알아보자.
운영체제의 역사를 구분하면 크게 0기부터 6기까지로 나눌 수 있다.

물론 이 표를 달달 외울 필요는 없다. 지금부터 하나씩 살펴보도록 하자.
0기, 고정 프로그래밍의 시대 fixed program computer
컴퓨터의 태동으로 돌아갈 필요가 있다. 조지 부울, 앨런 튜링의 이름은 누구나 한 번쯤 들어보았을 것이다. 이처럼 막 컴퓨터라는 개념이 시작된 이 시기에는 당연하게도 운영체제라는 개념 자체가 없었다. 컴퓨터는 진공관으로 이루어진 거대한 계산기였고, 하나의 컴퓨터는 당연히 하나의 기능만 하는 것이 상식이었다. 더하기가 아닌 빼기를 하고 싶다면 기계를 새로 만들어야하는 것이다. 회로 수정을 조금이나마 쉽게 하는 하드 와이어링, On/Off 스위치를 제외하고는 기능을 바꾼다는 개념 자체가 없었다. 당연히 새로운 기능을 구축하는 것은 매우 고통스러운 과정이었던 것이다.
그래서 사람들은 필요로 한다.
뭐 하나를 새로 하려면 다 뜯어 고쳐야한다니 너무 불편하다!
기능을 간단히 바꿀 수 있게 할 수는 없을까?
1기, 일괄 작업 시스템의 등장 Batch-processing system
폰 노이만의 등장이다. 노이만은 44년, 애니악 개발에 참여하다가 컴퓨터에 다른 일을 시키려면 전기 회로를 모두 바꿔줘야하는 불편함을 발견했다. 이 문제를 해결하기 위해 바로 내장 프로그래밍 Stored program computer을 도입하였다.
내장 프로그래밍이라 함은 컴퓨터를 CPU와 메모리로 분리하는 것이다. 즉 하드웨어와 소프트웨어를 분리하여, 사람은 소프트웨어만을 바꿔 끼우면 컴퓨터가 알아서 연산을 처리해준다. 이 때, 소프트웨어를 입력하는 방식은 펀치 카드에 구멍을 뚫은 천공카드였다. 카드 리더기는 이를 읽어 컴퓨터의 메모리에 적재해주고, 메모리에 적재된 프로그램을 읽어 CPU가 로직을 처리하는 것이다.
위 동작을 하기 위해서는 천공 카드를 읽고, 메모리에 올려주고, 결과를 프린터로 출력해야한다.
운영체제의 기능 첫 번째, 장치 관리의 등장이다.
물론 아직 운영체제라고 부르기는 부족하나 이는 가히 혁신이었다.
단순히 생각해서 일일히 진공관 갈아끼우다가 펀치질 몇 번으로 해결할 수 있다면 누구나 후자를 택하지 않을까?
하지만, 이러한 내장 프로그래밍 방식에도 사람들은 불편을 호소한다. 한 번에 단 하나의 작업밖에 하지 못했기 때문이다. 심지어 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것이 불가능했다. 간단히 말해 1+1을 해야하는데 뒤늦게 1-1을 펀치질 하여 컴퓨터에게 읽혔다면 작업을 수행하는 그 긴 시간동안 비싼 기계는 그저 전기 먹는 철덩어리가 될 뿐이라는 것이다. 중간 값의 확인 또한 불가능하다. 모든 계산이 끝나고 결과가 프린트 되기 까지 그저 기다려야한다. 그래서 또 사람들은 생각한다.
이걸 언제 다 기다리고있어!
중간 결과를 확인하거나 프로그램 중간에 끼어들고 싶어!
2기, 대화형 시스템의 등장 Interactive system
그래서 모니터와 키보드가 등장했다. 이제 프로그램이 진행되는 도중에 사용자로부터 입력을 받을 수 있다. 이 입력값에 따라 작업의 흐름을 바꾸는 것이 가능해진 것이다. 또한 문서 편집기, 게임과 같은 다양한 응용 프로그램을 만들 수 있게 된다.
그런데 바로 이 편리함이 바로 새로운 문제를 가져온다.
아니, CPU 하나로는 한 번에 하나밖에 처리 못한다며.
그런데 지금 장치 하나에서 해야하는 일이 너무 많아졌는데?
3기, 다중 프로그래밍
그래서 하나의 CPU로 여러 작업을 동시에 실행하는 기술인 다중 프로그래밍이 등장했다. 실제로 여러 작업을 동시에 할 수 있는 것은 아니고, 각 작업당 CPU 사용 시간을 분할하여 여러 작업이 동시에 실행되는 것 처럼 보이게 하는 것이다. A작업, B작업, C작업이 있다면 ABCABC 순으로 빠르게 돌아간다. 또한 한 프로그램이 실행되다가 외부 입출력을 받기 위해 대기할 때 다른 프로그램이 빠르게 실행되어 CPU의 대기시간을 줄이고, 처리율을 증가시켜 더 많은 작업이 처리되도록 한다. 간단히 말해 CPU가 노는 시간을 최소화하는 것이다. 이러한 다중 프로그래밍 시스템은 일괄 처리 시스템보다 작업 시간 면에서 월등히 우수성을 보이고 있다. 오늘날 대부분의 시스템이 이 다중 프로그래밍을 사용하고 있다.
그런데 이 다중 프로그래밍을 구현한다고 생각해보자. 최대한 효율적으로 구현하기 위해서는 고려해야 할 사항이 한 두가지가 아니다.
어떤 작업을 언제 처리해야 가장 효율적일까? → 프로세스 관리
메모리는 한정되어 있는데, 어떤 작업을 올려야하지? → 메모리 관리
그럼 올라가지 않은 작업은 어디에 보관하지? → 파일 시스템 관리
이상 없이 잘 실행되고 있는 거 맞아? → 통계 및 기타 관리
이러한 필요들이 우수수 튀어나오게 된다.
그 후, 네트워크의 등장
컴퓨터의 발전은 여기서 끝이 아니다. 바야흐로 1990년대, 네트워크가 등장한다. 이제 컴퓨터는 단순히 장치 내부뿐만 아니라 바깥의 자원까지 신경써야한다. 컴퓨터 간 정보 전송 또한 중요한 요소가 되었다. 이제 하나의 고성능 장치 또는 특정 서비스를 여러 유저가 동시에 사용하는 서버/클라이언트가 등장하였고, 네트워크 상에 분산되어있는 여러 컴퓨터로 작업을 처리하고 그 결과를 종합하는 분산 시스템이 나타나게되었다.
이러한 장치 외부의 관리를 위해 지금까지와는 다른 기능이 필요해짐은 자명한 수순이다.
네트워크를 지원하기 위한 장치와 프로토콜의 지원, 리소스 제어 → 네트워크 관리
믿을 수 없는 외부 사용자들로부터의 보호 → 보안 관리
누가 내 시스템을 사용하고 있지? → 사용자 관리 등 기타
운영체제의 발전에 따라 다음과 같은 기능들이 필요하게 되었고, 계속해서 발전해나가고 있다.
다시 한 번 순서대로 정리하면,
장치 관리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 네트워크 관리, 보안 관리, 기타 관리 등으로 정리할 수 있다.
//기타 시스템 추가 예정
//요약 추가 예정
'CS > 운영 체제' 카테고리의 다른 글
| 3.1 프로세스의 개념 (4) | 2024.04.17 |
|---|---|
| 3.0 프로세스 (1) | 2024.04.17 |
| 2.1 컴퓨터 구조 (1) | 2024.04.14 |
| 1.2 운영체제의 구조 (0) | 2024.04.11 |
| 0. 운영 체제 (1) | 2024.04.09 |