앞으로 운영체제에 대해 수 글을 걸쳐 알아볼 것이다. 우선 운영체제가 무엇인지 간단하게 살펴보고 컴퓨터 시스템의 동작 원리에 대해 간단헤개 알아볼 것이다. 운영체제의 핵심인 CPU 스케쥴링과 메모리 관리를 이해하려면 해당 파트에 대한 선수 지식이 필수이기 때문이다.
<운영체제 TIL 목록>
1. 운영체제란? 목적? 분류?
2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자.
3. 하드웨어, 메모리 및 메모리 보안 방법?
4. 프로그램의 구조, 실행 시 작동 과정?
5. 프로세스란? 6가지 상태? PCB?
6. 스레드, 멀티스레드란? 프로세스와의 차이?
7. CPU 스케줄링?
8. ''업데이트 예정''
1. 운영체제란?
- 정의: 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어(출처: 운영체제와 정보 기술의 원리-반효경 저). 하드웨어와 소프트웨어를 관리하는 소프트웨어 전체(출처: 나무위키)
*왜 Operating System이라고 부를까? 왜 필요할까?
- 하드웨어를 직접 사용자가 다루는 것은 사실상 불가능에 가깝다. cpu가 알아들을 수 있는 언어를 직접 적어서 소프트웨어를 만드는 것은 구방식일 뿐 아니라 비효율적이기 때문이다. 따라서 하드웨어를 관리하는 시스템이 필요하고, 하드웨어를 잘 관리하려면 그 위에 올릴 소프트웨어 또한 같이 관리해야한다. 이에 컴퓨터를 운영하는 시스템이 필요하게 되고 Operating system이 존재하게 된다.
*어떻게 동작하는가?
- 컴퓨터를 키면 메모리 위에 운영체제가 메모리 위에 올라간다. 하지만 메모리 공간이 한정적이기 때문에 운영체제의 모든 부분이 올라가지는 못하고 현재 실행에 필수적인 부분만 올라간다. 해당 부분을 커널(Kurnel)이라고 부른다. 커널은 운영체제의 코드 중에서도 핵심적인 부분이면서 항상 메모리 위에 상주한다. 이에 좁은 의미에서 운영체제를 이야기할 때는 커널을 말한다. 넓은 의미에서의 운영체제는 파일 복사 프로그램 등 항상 메모리 위에 올라가진 않지만 소프트웨어와 하드웨어를 잇는 유틸리티를 포함한다.
2. 운영체제 기능?
- 기능1: 컴퓨터 시스템 내의 자원을 효율적으로 사용하도록 관리. 자원은 하드웨어 자원, 소프트웨어 자원 모두를 포함한다. 한정된 메모리 공간을 효율적으로 사용해야하고 소프트웨어 자원이 원활히 돌아가도록 유지해야한다. 이에 운영체제를 때론 자원관리자(Resourse manager)라고 부르기도 한다.
- 기능2: 사용자에게 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공. 사용자가 컴퓨터에서 원하는 프로그램을 사용할 때 하드웨어에 대해 신경쓰지 않고 마치 자신이 컴퓨터를 직접 조작하고 관리하는 환상 or 느낌 처럼 편리한 사용감을 주는 것이 목적이다.
- 기능3: 사용자와 운영체제 자신을 보호. 원칙적으로는 메모리 위에 있는 A프로그램이 B프로그램의 메모리를 침해하면 안된다. 이와 같은 일이 일어나는 것을 운영체제는 방지하여 컴퓨터 환경을 보호한다. 또한 사용자 프로그램이 운영체제의 메인 코드인 커널을 침해할 수도 있는데 이를 방지하는 역할 또한 운영체제가 한다.
*중요 포인트
운영체제는 효율성과 형평성 두가지를 지향점으로 두고 자원을 관리한다. 운영체제는 cpu, 메모리, i/o 장치들을 효율적으로 관리하여 컴퓨터 시스템이 좋은 성능을 내도록 하는 역할을 가진다. 이때 자원 관리 과정에서 효율성만 생각한다면 일부 프로그램들이 실행 순서가 많이 밀리는 등 불이익을 받을 수 있다. 따라서 운영체제는 효율성 뿐 아니라 형평성 또한 고려하며 자원을 관리한다.
3. 운영체제 분류?
1) 동시 작업 지원 여부
- 단일 작업: 초기 운영체제는 하나의 프로그램이 돌아갈 때, 실행이 끝나기 전까지 다른 프로그램을 실행하지 못했다.(ex. dos)
- 다중 작업: 현재 대부분의 운영체제는 하나의 프로그램을 실행시키고 다른 프로그램 또한 실행시킬 수 있는 구조다. 워드 작업하며 유튜브로 노래를 틀 수 있거나 커널을 여러개 켜놓고 다양한 프로그램을 실행시킬 수 있는 것도 이러한 이유 때문이다.
2) 작업 처리 방식
- 일괄 처리: 초기 운영체제에서는 실행할 프로그램들을 모두 특정 센터에 가져가 이를 한번 실행시키고 결과 값을 받는 일괄 처리 방식이었다.
- 시분할 방식: 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정 시간 단위로 분할하여 사용하는 방식이다. 대부분의 운영체제가 이와 같은 방식을 사용한다. 프로그램 5개를 0.01초마다 실행하면 사용자 입장에선 프로그램 5개가 동시에 실행되는 것 처럼 느껴지며 이는 대화형 시스템이라고 불린다. 시분할 방식을 통해 다중작업을 할 수 있다.
- 실시간 운영체제: 정해진 시간 안에 어떠한 일이 반드시 끝나야할 때 실시간 운영체제가 사용된다. 원자로 혹은 군사시설 같은 경우는 0.001초가 중요할 수 있기 때문에 사용자에게 대화형 시스템 환경을 제공하는 것 보다 특정 프로그램이 특정 시간에 반드시 끝나는 것이 중요할 수 있다. 실시간 운영체제는 실시간성이 지켜져야하는 정도에 따라 hard realtime system과 soft realtime system으로 나뉜다. 원자로와 같이 실시간성이 지켜지지 못하면 위험도커 실시간성이 반드시 보장 돼야 하는 시스템을 hard realtime system이라고 부른다. soft realtime system은 데이터가 정해진 시간 단위로 전달돼야 올바른 기능을 수행할 수 있는 시스템을 말한다. 대표적으로 멀티미디어 시스템이 있다. 동영상 재생 같은 경우는 정해진 시간 단위로 데이터가 전송되지 못하면 사용자 경험이 낮아지나 hard realtime system처럼 위험한 결과를 초래하지는 않는다.
4. 운영체제의 자원 관리 방법?
1) cpu 관리
- 선입 선출 기법: 큐와 같은 자료구조를 이용하여 먼저 들어온 프로그램을 먼저 처리하는 기법이다. 이와 같은 관리 기법을 사용하면 cpu사용 방법 자체는 간단하지만 전체 프로그램 사용의 효율이 저하되는 치명적인 단점이 있다. 중요도가 낮은 프로그램이 cpu를 오래 잡고 있으면 중요도가 높은 프로그램이 오래 기다려야하기 때문이다.
- 라운드 로빈 기법: 프로그램이 cpu를 한번 할당 받아 사용할 수 있는 시간을 일정하게 고정하는 방식이다. 프로그램이 cpu를 잡고 instruction을 실행 하는 시간을 정해 놓고 특정 시간이 지나면 cpu를 다른 프로그램이 사용하도록 커널에게 내놓는 기법이다. 정해진 시간이 지나면 cpu는 cpu 사용 대기열 맨 뒤로가서 다시 대기해야한다. cpu 할당 시간을 밀리초 단위로 설정하여 짧게 잡으면 선입 선출 기법이 가지는 전체 프로그램 사용 효율 문제가 해결될 수 있다.
- 우선 순위 스케줄링: cpu 사용을 위해 대기중인 프로그램들에게 우선 순위를 부여하여 우선순위가 높은 프로그램에게 cpu를 주는 방식이다. 상대적으로 더 우선순위가 높은 프로그램이 존재한다면 해당 프로그램에게 cpu를 먼저 할당하는 것이 핵심이다. 이때 무조건 우선순위가 높은 프로그램에게 cpu를 할당하면 자원 관리의 형평성이 문제가 될 수 있다. 따라서 프로그램이 사용된 후 지난 시간을 측정하여 우선순위를 조정하는 방식이 사용되기도 한다.
2) 메모리 관리
- 고정 분할 방식(fixed partition): 메모리에 동시 적재될 수 있는 최대 프로그램 갯수로 물리적 메모리를 몇개로 나누어 관리핳는 방식이다. 해당 방식은 프로그램 사용성과 메모리 효율성이 좋지 않다. 나뉘어진 물리적 메모리 보다 큰 프로그램은 올릴 수 없어 프로그램 사용성이 낮다. 또한 나뉘어진 물리적 메모리 크기보다 훨씬 작은 프로그램을 실행할 경우 남은 메모리는 사용되지 못하여 메모리 사용 효율이 낮아진다.
- 가변 분할 방식(variable partition): 매 시점 프로그램의 크기에 맞게 메모리를 분할하는 방식이다. 해당 방식은 메모리 효율성이 좋지 않다. 고정 분할 방식과 마찬가지로 사용되지 않는 프로그램 조각이 생성될 수 있기에 메모리 사용 효율이 낮다. 또한 여전히 물리적 메모리 크기보다 큰 프로그램은 적재가 가능하지 않다. 이외에 오랫동안 사용하지 않은 코드 혹은 데이터까지 메모리 위에 올리면 메모리 사용 효율이 낮아질 수 밖에 없다.
- 가상 메모리 방식(virtual memory): 현재 사용되고 있는 부문만 메모리에 올리고, 나머지는 하드디스크와 같은 보조기억장치에 저장해두었다가 필요할때 적재하는 방식. 해당 기법은 물리적 메모리보다 더 큰 크기의 프로그램이 실행되는 것을 지원한다. 이때 실행될 수 있는 메모리 크기는 가상 메모리 크기에 의해 결정된다. 모든 프로그램은 물리적 메모리와는 독립적으로 존재하는 0번지 부터 시작하는 가상 메모리 주소를 갖는다. 운영체제는 가상 메모리 위 주소와 물리적 메모리 위 주소를 매핑(Mapping)하는 기술을 이용하여 프로그램을 메모리에 올려 실행시킨다. 이때 보조기억장치에 적재되어 있는 프로그램의 영역을 스왑 영역(Swap area)라고 불린다. 가상 메모리 주소 공간은 페이지(Page)라는 일정 크기의 단위로 나뉘어 스왑 영역과 물리적 메모리 공간 위에 존재하게 된다. 이렇게 가상 메모리 주소 공간을 동일한 단위로 나뉘는 기법을 페이징(Paging)이라고 부른다.
'운영체제(OS)' 카테고리의 다른 글
[운영체제] 6. 프로세스란? 5 or 6가지 상태? 스케줄러? (0) | 2022.02.20 |
---|---|
[운영체제] 5. 인터럽트, 문맥 교환(컨텍스트 스위칭), PCB 정의와 차이? (0) | 2022.02.19 |
[운영체제] 4. 프로그램의 구조, 실행 과정? Easy with TMI (0) | 2022.02.18 |
[운영체제] 3. 하드웨어, 메모리 및 메모리 보안 방법? Easy with TMI (0) | 2022.02.16 |
[운영체제] 2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자 Easy with TMI (0) | 2022.02.15 |