이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.
- 컴퓨터 부품들은 전기만 공급하면 마치 마법처럼 알아서 작동하는 것이 아니다.
- 운영체제라는 프로그램의 지휘하에 작동한다.
- 사람으로 비유한다면, 육체는 하드웨어이고 영혼(?)이 운영체제(소프트 웨어)이다.
운영체제란
대표적인 데스크톱 운영체제로는 윈도우, macOS, 리눅스가 있고, 스마트폰 운영체제로는 안드로이드와 iOS가 있다.
모든 프로그램은 하드웨어를 필요로 한다.
간단한 1+2를 계산하는 프로그램이라도 연산장치를 수행할 CPU와 이를 출력할 모니터가 필요하다.
이때 프로그램 실행에 마땅히 필요한 요소들을 가리켜 시스템 자원, 혹은 줄여서 자원이라고 한다.
CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들은 모두 자원이라고 볼 수 있다.
즉, 모든 프로그램은 실행되기 위해 반드시 자원이 필요하다.
여기서 실행할 프로그램에 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램이 운영체제이다.
메모리는 커널(상주) 영역과 사용자(비상주) 영역으로 구분된다.
- 커널 영역 : 언제라도 바로 실행될 수 있는 운영체제의 기본적인 기능과 자주 사용되는 프로그램이 기억되는 구역
- 사용자 영역 : 자주 사용되지 않는 프로그램을 필요할 때만 보조기억장치에서 인출하는 구역
운영체제 또한 프로그램이기에 메모리에 적재되기는 하지만, 가장 중요한 프로그램이기에 커널 영역이라는 곳에 따로 적재된다.
사용자 영역은 커널 영역을 제외한 나머지 영역, 즉, 사용자가 이용하는 응용 프로그램이 적재되는 영역이다.
운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.
가령 우리가 컴퓨터를 부팅하고 워드 프로세서, 인터넷 브라우저, 메모장 프로그램을 켰다고 가정하면 메모리는 아래와 같다.
이러한 프로그램들은 메모리상 각각 2000번지, 1500번지, 1000번지에 적재되어 있는데, 메모리 주소가 겹치지 않도록 적당한 공간에 프로그램들을 적재시킨 것이 바로 운영체제이다.
운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리한다.
어떤 프로그램부터 CPU를 사용하게 할지, 얼마나 오랫동안 CPU를 할지 정하는 것도 운영체제이다.
어느 하나의 프로그램이 CPU를 독점하면 다른 프로그램들은 올바르게 실행될 수 없기에 운영체제는 최대한 공정하게 여러 프로그램을 CPU에 할당한다.
또한 워드 프로세서와 메모장이 동시에 동일한 프린터를 이용하려는 상황이라고 가정하면, 운영체제는 동시에 두 개의 프로그램이 프린터를 사용하지 못하도록 막고, 하나의 프로그램이 프린터를 이용하는 동안 다른 프로그램은 기다리게 만들어 프린터 자원을 관리한다.
이처럼 운영체제는 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 맡는다.
운영체제는 흔히 정부에 비유되기도 한다. 운영체제는 응용 프로그램에 자원을 효율적으로 배분하고, 실행할 프로그램들이 지켜야 할 규칙을 만들어 컴퓨터 시스템 전체를 관리한다.
우리가 사용하는 응용 프로그램과 하드웨어 사이에 위치하여 징검다리 역할을 하는 것이 운영체제이다.
또한 정부에서 여러 역할별로 여러 부서가 있는 것처럼 운영체제도 관리할 자원별로 기능이 나누어져 있다.
운영체제를 알아야 하는 이유
개발자 입장에서 운영체제가 없는 환경에서 개발을 하기란 끔찍한 일이다.
아무리 간단한 프로그램이라도 운영체제가 없다면 하드웨어를 조작하는 코드를 개발자가 모두 직접 작성해야 하기 때문이다.
1+2를 출력하는 간단한 프로그램이라고 할지라도 운영체제가 없다면 작성하기가 매우 어렵다.
왜냐하면 프로그램을 메모리에 적재하는 코드, CPU에게 1과 2를 더하게 하는 코드, 모니터에 계산 결과를 출력하는 코드를 개발자가 모두 직접 작성해야 하기 때문이다.
따라서 우리가 만든 프로그램은 결국 하드웨어가 실행하고, 그 하드웨어를 조작하는 프로그램이 운영체제이다. 그래서 운영체제는 우리의 프로그램이 하드웨어 상에서 어떻게 작동하는지를 우리보다 더 먼저, 더 자세히 알고 있다.
그렇기 때문에 운영체제는 현재 하드웨어의 상태는 어떠한지, 우리의 코드가 어떻게 실행되었는지, 하드웨어 상에 어떤 문제가 있었는지 우리에게 상세히 알려줄 수 있고, 이를 통해 우리는 문제 해결의 실마리를 찾을 수 있다.
우리가 운영체제를 깊이 이해하면 운영체제가 우리에게 건네는 말을 제대로 이해할 수 있고, 운영체제에 제대로 명령할 수 있게 된다. 그리고 결과적으로 하드웨어와 프로그램을 더 깊이 이해할 수 있다.
'컴퓨터 구조 & 운영체제 > 운영체제' 카테고리의 다른 글
[운영체제] CPU 스케줄링의 개념 (0) | 2023.06.30 |
---|---|
[운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드 (0) | 2023.06.27 |
[운영체제] 프로세스 상태와 계층 구조 (0) | 2023.06.26 |
[운영체제] 프로세스 개요 (0) | 2023.06.25 |
[운영체제] 운영체제의 큰 그림 (0) | 2023.06.24 |