운영체제의 종류에는 Window10, Mac OS, 안드로이드, IOS 등이 있다.
정말 익숙한 이름들인데 이것들은 과연 컴퓨터에서 어떤 역할을 하는걸까.
이러한 기능을 해주는 프로그램이 바로 운영체제다.
운영체제는 컴퓨터의 하드웨어를 관리하는 프로그램이다. 즉, CPU, 메모리, 키보드, 마우스 등을 관리하고, 이를 통해 효율적으로 사용할 수 있게 한다.
따라서 잘 만든 운영체제는 컴퓨터의 성능을 올려줄 수 있다.
또 운영체제는 사용자의 편의성을 올려준다. 만약 운영체제가 없다면 위에서 설명한 작업들을 할 때 사용자가 일일히 추가적인 작업을 해야 할 것이다.
운영체제의 구조 : 커널 + 쉘
앞서 언급했듯 사용자는 하드웨어에 직접 접근이 불가능하다.
하드웨어를 사용하기 위해서는 운영체제를 통해서 사용해야 한다. 따라서 아래와 같은 접근 구조를 갖는다.
쉘은 명령을 처리하는 역할을 한다. 명령을 받으면 해석한 뒤 해당 명령을 실행한다.
커널은 하드웨어를 관리하는 구역이다. 즉, 운영체제의 핵심이 되는 부분이다.
사용자가 ls라는 명령을 입력하는 상황을 살펴보겠다.
- 쉘을 통해 해당 명령을 해석한다. ls는 디렉토리 내부에 존재하는 파일들을 보여주는 명령어다.
- 파일들을 보기 위해서는 하드디스크에 접근해야 한다. 따라서 커널에게 요청을 보낸다.
- 커널은 요청을 받아 하드디스크에 접근해 해당 작업을 수행하고, 어떤 파일들이 존재하는지 반환한다.
- 쉘은 결과를 사용자에게 반환한다.
App을 사용하는 경우도 마찬가지이다. App도 쉘에게 명령을 보내고, 응답을 받아서 사용한다. 그렇기 때문에 App은 운영체제가 바뀌면 사용할 수 없다. Window에서 할 수 있는 게임이 Mac에서 지원하지 않는 경우가 많은데, 게임을 만든 사람이 Window라는 운영체제에서 돌아가는 게임을 만들었기 때문이다.
초기 컴퓨터에는 운영체제라는 게 존재하지 않았다. 초기 컴퓨터는 미사일 탄도를 계산하기 위해 개발되었다. 초기의 컴퓨터는 직접 변경해주면서 프로그래밍을 할 수 있었다.
조금 더 시간이 지난 이후 천공판을 사용해 명령을 내릴 수 있었는데, Operator들은 천공판이라고 불리는 카드를 사용해서 프로세서에 연산을 시킬 수 있었고, 프린터를 통해 결과를 출력받았다.
Operator는 프로그램을 실행하기 전 컴파일, 링킹, 로딩을 시켜줘야 하는데 이런 반복적인 작업을 자동화시켜주기로 한다. 프로세서 내부의 메모리에 Batch Processing System을 넣어 해당 작업을 자동화시켜줬는데, 이게 최초의 운영체제이다.
과거 프로세서(컴퓨터)는 매우 비싼 자원이기 때문에 최대한 작업을 많이 돌릴 필요가 있었다. 하지만 프린터가 동작하는 동안 프로세서는 프린터의 작업이 끝나기를 기다리며 아무 일도 하지 않았다. 이러한 낭비를 줄이기 위해 메모리 안에 여러 프로세스를 위치시키기로 한다. I/O 작업 발생 시 다른 프로세스를 실행시키는 방식으로 프로세서를 최대한으로 사용하기 시작했다. 이걸 Multi Processing System이라고 한다.
시간이 지나 모니터, 키보드 등을 사용해 컴퓨터와 사용자는 상호작용할 수 있게 되었다. 그러면서 하나의 컴퓨터(단말기)에 여러 사용자를 배치시켜 함께 작업을 할 수 있게 만든다. 그러나 앞선 멀티 프로세싱 방식을 사용하면 각 사용자들의 대기 시간이 너무 길어진다는 문제가 발생한다. 해당 문제를 해결히기 위해 I/O 작업이 발생하기 전에는 프로세서의 권한을 넘겨주지 않는 방식에서 일정 시간 제한이 지나면 다음 사용자에게 프로세서의 권한을 넘겨주는 방식으로 운영체제는 변하게 된다. 시간 제한을 매우 짧게 가져가면 여러 사용자가 동시에 컴퓨터를 사용하는 것과 같은 효과를 가져온다. 이를 Time Sharing System이라고 한다. 지금 사용되는 UNIX 기반의 운영체제들은 Time Sharing System을 기반으로 만들어져 있다.
현대의 운영체제는 인터럽트 기반으로 동작하는데 그 이유는 무엇일까? 인터럽트 이외의 방법으로는 폴링(polling) 방식이 존재한다. 폴링 방식을 사용하는 운영체제는 CPU가 주기적으로 하드웨어를 살펴보며 작업을 수행한다. 이 폴링 방식과 비교를 통해 알아보도록 하겠다.
우리가 바탕화면에 있는 Chrome을 실행시키는 상황을 생각해보자. 우리는 마우스를 이동시켜 바탕화면의 Chrome 아이콘을 클릭해 Chrome을 실행한다. 만약, 운영체제가 폴링 방식이라면 우리가 마우스를 움직일 때 즉각적으로 마우스가 움직이지 않는다. 일정 주기가 지난 뒤에야 운영체제는 마우스가 움직였다는 걸 인지하고 화면에서 마우스를 이동시켜준다. 또, 클릭한 Chrome 역시 바로 실행되는 게 아닌 파일시스템의 주기가 실행되기를 기다려야 한다. 어떻게 이런 컴퓨터를 쓸 수 있겠는가. 답답해서 아마 죽고 말 것이다.
정리하면, 컴퓨터에서는 수많은 이벤트가 일어난다. 이 이벤트들을 재깍재깍 빠르게 처리하기 위해서는 인터럽트 기반으로 운영체제를 만드는 게 최선이다. 인터럽트에 관련해서는 이후에 자세하게 다루도록 하겠다.
사용자가 컴퓨터를 다루기 위해서는 OS가 꼭 필요하다. 그래서 OS는 항상 실행되고 있어야 한다.
프로그램이 실행되기 위해서는 메모리 상에 올라가야 한다. 그런데 메모리는 전원이 꺼지면 데이터가 날아간다. 그래서 컴퓨터는 켜지는 순간 메모리에 OS를 위치시키는데, 이걸 부팅이라 한다.
부팅 과정은 아래와 같다.
메모리는 RAM 이외에도 ROM이라는 메모리가 있는데, ROM은 비휘발성이라 컴퓨터가 꺼져도 데이터를 저장할 수 있다. ROM에 POST(Power On Self Test), 부트스트랩 로직(OS를 실행시키는 로직), 이 두 가지를 저장한다.
아래 그림은 컴퓨터를 켜기 전 상태이다.
컴퓨터가 켜질 때, ROM은 POST 작업을 실행한다. 이 과정에서 여러 하드웨어 등을 검사하며 컴퓨터에 이상이 없는지 Self Test를 한다. POST 작업이 끝난 뒤 부트스트랩 로직을 실행한다.
부트스트랩 로직은 하드디스크 안 OS를 실행하는 역할을 한다.
위와 같은 과정을 끝마치면 아래 그림처럼 메모리 위에 OS가 위치하는 걸 확인할 수 있다. OS는 컴퓨터가 종료될 때까지 메모리 위에 위치한다.
운영체제의 역할 : 하드웨어를 관리하는 프로그램
운영체제를 통해
1. 컴퓨터 성능을 올린다 (하드웨어를 효율적으로 관리해서)
2. 사용자의 편의성을 올린다
운영체제의 구조 : 커널 + 쉘
쉘 : 명령을 처리하는 구역
- 명령을 받아 -> 해석 -> 해당 명령을 실행
커널 : 하드웨어를 관리하는 구역
운영체제의 핵심이 되는 구역으로, 운영체제라는 과목이 다루는 부분이다.
부팅 : 운영체제를 메인메모리에 적재하는 과정
양희재 교수님 운영체제 강의 : https://www.youtube.com/playlist?list=PLK4xviZcdB9ieuusJ5j1UYZMFTuAgZCq8
쉽게 배우는 운영체제 - 조성호