
프로그램 하나를 실행한다고 해봅시다. 운영체제가 없다면 이 프로그램은 CPU를 언제부터 얼마나 쓸지, 메모리의 어느 주소에 올라갈지, 디스크의 어느 위치에 파일을 쓸지를 스스로 정해야 합니다. 프로그램이 둘 이상이 되면 문제가 커집니다. 서로 같은 메모리 영역을 덮어쓰거나, 한 프로그램이 CPU를 놓지 않으면 나머지는 영영 실행되지 못합니다.
그래서 하드웨어 바로 위에 한 겹을 둡니다. 운영체제(operating system)는 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 계층입니다.
+--------------------------------------------------+
| 사용자(User) |
+--------------------------------------------------+
| 응용 프로그램 / 시스템 유틸리티 |
+--------------------------------------------------+
| 운영체제(OS) -- 이 중 메모리 상주 부분이 커널 |
+--------------------------------------------------+
| 하드웨어 : CPU / 메모리 / 입출력 장치 |
+--------------------------------------------------+
운영체제 전체를 항상 메모리에 올려두면 정작 사용자 프로그램이 쓸 메모리가 줄어듭니다. 그래서 꼭 필요한 부분만 상주시키고 나머지는 필요할 때 올립니다.
셸, 파일 탐색기, 각종 명령어 도구는 유틸리티 쪽입니다. 실행할 때 메모리에 올라왔다가 끝나면 내려갑니다. 반면 커널은 전원이 켜져 있는 동안 계속 메모리에 남아 있습니다.
운영체제의 목적은 두 가지입니다. 하드웨어를 효과적으로 관리하는 것, 그리고 사용자가 컴퓨터 시스템을 편리하게 사용하도록 돕는 것입니다. 여기서 관리 대상인 자원(resource)은 CPU, 메모리, 입출력 장치 등을 말합니다. 핵심은 주어진 자원으로 최대한의 성능을 내는 것입니다.
편리함 쪽의 결론은 이 한 문장입니다. 동시에 접속한 사용자와 프로그램들이 각각 독자적인 컴퓨터에서 수행되는 것 같은 환상을 제공합니다. 앞으로 나올 프로세스, 가상 메모리, 파일 시스템이 전부 이 환상을 유지하기 위한 장치입니다.
CPU 1개에 프로그램 A, B, C가 올라가 있고 10ms씩 번갈아 준다고 하면 이렇게 됩니다.
시간(ms) 0 10 20 30 40 50 60
CPU | A | B | C | A | B | C |
사람 눈 ------ 셋이 동시에 도는 것처럼 보임 ------
| 기준 | 구분 | 설명 | 예 |
|---|---|---|---|
| 동시 작업 여부 | 단일 작업 | 한 번에 하나의 작업만 처리 | MS-DOS |
| 다중 작업(multitasking) | 두 개 이상을 동시에 처리 | UNIX, Windows | |
| 사용자의 수 | 단일 사용자 | 한 사람만 시스템을 사용 | MS-DOS, 개인용 Windows |
| 다중 사용자 | 여러 사용자가 동시 접속, 계정별 보호 필요 | UNIX | |
| 처리 방식 | 일괄 처리(batch) | 작업을 모아 한꺼번에 처리, 응답이 늦음 | 초기 시스템 |
| 시분할(time sharing) | CPU 시간을 잘라 나눠 씀, 대화형 | UNIX | |
| 실시간(real time) | 정해진 시간 안에 처리를 보장 | 제어 시스템 |
실시간 시스템은 다시 둘로 나뉩니다. 메모에는 이름만 적혀 있어 내용을 채웁니다. 경성 실시간 시스템(hard real time system)은 데드라인을 넘기면 그 자체로 실패인 쪽이고, 연성 실시간 시스템(soft real time system)은 늦으면 품질이 나빠질 뿐 치명적이지는 않은 쪽입니다.
| 용어 | 무엇이 여러 개인가 |
|---|---|
| 다중 프로그래밍(multiprogramming) | 메모리에 여러 프로그램이 동시에 올라가 있음 |
| 시분할(time sharing) | CPU의 시간을 분할하여 나눠 씀 |
| 다중 작업(multitasking) | 여러가지 일을 동시에 처리함 |
| 다중 처리기(multiprocessor) | 하나의 컴퓨터에 CPU가 여러 개 붙어 있음 |
같은 상황을 어느 자원 관점에서 부르느냐의 차이입니다. 여러 프로그램이 번갈아 도는 한 장면을 두고 메모리에 초점을 맞추면 multiprogramming, CPU 시간에 초점을 맞추면 time sharing이라고 부릅니다. multiprocessor만 성격이 다릅니다. 이건 관점이 아니라 하드웨어 구성 자체가 여러 개인 경우입니다.