목차 확인
1. 운영체제의 탄생 배경
운영체제가 없을 때는 프로그램이 컴퓨터에서 수행되도록 하기 위해서 사용자가 시스템을 직접 시작시키고 프로그램을 컴퓨터에 적재(load)해 수행해야 했습니다.
한편 기계적인 복잡성이 증가해서 컴퓨터 자체를 관리하는 것이 힘들어짐에 따라 이를 자동적으로 처리해줄 수 있는 방법이 필요하게 되었습니다.
처음에는 컴퓨터 외부에서 미리 예약해 한꺼번에 처리하는 '일괄처리 방식(batch processing)'을 사용했으나, 이러한 방법이 비효율적임을 인식하고 컴퓨터 자체가 이를 자동적으로 처리해주도록 하는 방식을 고민한 결과 운영체제가 탄생했습니다.
2. 운영체제의 정의
운영체제(Operating System)란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어를 말합니다.
운영체제는
하드웨어
가 아닌소프트웨어
입니다.
운영체제는 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 계층입니다.
시스템
이라는 용어는 기반이나 틀이 되는 하드웨어를 지칭할 때 주로 사용되는데, 소프트웨어인 운영체제에 '시스템'이라는 용어가 사용된 것은 하드웨어가 운영체제와 한 몸이 되어야만 사용자에게 쓰일 수 있는 진정한 컴퓨터 시스템이 되기 때문입니다.
컴퓨터 전원을 켜면 운영체제는 이와 동시에 실행됩니다.
한편 소프트웨어가 컴퓨터 시스템에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 합니다. 운영체제 역시 소프트웨어이기에 메모리에 올라가 있어야하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라갈 경우 한정된 메모리 공간의 낭비가 심할 것입니다.
따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 됩니다.
이때 항상 필요한 부분을 커널
이라고 부르며, 이를 좁은 의미의 운영체제라고 부릅니다.. 즉, 커널은 운영체제 코드 중에서도 핵심적인 부분을 뜻합니다.
반면 넓은 의미의 운영체제는 커널뿐 아니라 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념입니다.
우리가 흔히 사용하는 MS 윈도우 환경에서 파일을 복사(copy)하는 프로그램
등이 이에 해당됩니다.
2-1. 운영체제의 기능
운영체제의 두 가지 주요 기능
- 컴퓨터 시스템 내의 자원(resource)을 효율적으로 관리하는 것(하드웨어를 위한)
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공하는 것(사용자를 위한)
두 가지 기능 중 중요한 핵심 기능은 자원을 효율적으로 관리하는 것
입니다. 그래서 운영체제를 자원관리자(Resource Manager)
라고 부르기도 합니다.
자원(Resource)이란 CPU, 메모리, 하드디스크 등 하드웨어 자원뿐 아니라 소프트웨어 자원까지를 통칭해서 부르는 말입니다.
2-2. 운영체제의 분류
운영체제는 동시 작업을 지원하는지의 여부에 따라 단일작업(Single Tasking)
용 운영체제와 다중작업(Multi Tasking)
용 운영체제로 나눌 수 있습니다.
초기에는 한 번에 하나의 프로그램만 실행시킬 수 있는 단일작업용 운영체제를 사용했지만,
최근에는 동시에 2개 이상의 프로그램을 처리할 수 있는 다중작업을 지원합니다.
여기서 한 가지 주의할 점이 있습니다.
다중작업을 처리할 때에는 여러 프로그램이 CPU와 메모리를 공유하게 됩니다.
비록 CPU가 하나밖에 없더라도 CPU의 연산 처리 속도가 워낙에 빨라서 여러 프로그램을 CPU에서 번갈아 실행되면 사용자 입장에서는 여러 프로그램이 동시에 실행되는 것처럼 보입니다.
이와 같이 CPU의 작업시간을 여러 프로그램들이 조금씩 나누어 쓰는 시스템을 시분할 시스템(Time Sharing System)
이라고 합니다.
그리고, 메모리 공간을 분할해 여러 프로그램들을 동시에 메모리에 올려놓고 처리하는 시스템을 다중 프로그래밍 시스템(Multi-Programming System)
이라고 합니다.
한편, 다중작업용 운영체제의 경우 여러 프로그램을 같이 실행시키지만 사용자 개개인의 관점에서는 각 프로그램에 대한 키보드 입력의 결과를 곧바로 화면에 보여주기 때문에 이러한 시스템을 대화형 시스템(Interactive System)
이라고 합니다.
한 번에 한 명의 사용자만이 사용하도록 허용하는 운영체제를 '단일 사용자용 운영체제'라고 부르며, 여러 사용자가 동시에 접속해서 사용할 수 있게 하는 운영체제를 '다중 사용자용 운영체제'라고 부릅니다.
ex) 이메일 서버나 웹 서버 등 우리가 흔히 서버라고 부르는 컴퓨터는 여러 사용자가 동시에 접속해 사용할 수 있으므로 다중 사용자용 운영체제라고 합니다.
요청된 작업을 일정량씩 모아서 한꺼번에 처리하는 방식인 일괄처리(Batch Processing) 방식
대신 최근에는 여러 사용자의 작업을 짧은 시간 단위씩 번갈아가며 처리할 수 있는 시분할 방식
을 사용합니다.
2-3. 운영체제의 예
- MS 윈도우 : 사용이 편리한 여러가지 기능들을 제공하기 때문에 컴퓨터를 전문적으로 이용하지 않는 일반 사용자에게 가장 보편적으로 사용되고 있습니다.
- 유닉스 : 1969년 벨 연구소에서 최초로 개발된 것으로 운영체제 분야에서는 주목할 만한 성공 사례 중 하나입니다.
유닉스는 프로그램 개발 환경을 위해 설계된 운영체제로서 이식성(portability)이 좋고, 운영체제 커널의 크기가 작으며, 소스 코드가 공개되었다는 점에서 가장 널리 사용되는 운영체제 중 하나로 자리 잡고 있습니다. 또한 최근에는리눅스(Linux)
의 등장으로 대형 서버뿐 아니라 개인용 컴퓨터에서도 유닉스를 널리 사용할 수 있게 되었습니다.
2-4. 운영체제의 자원 관리 기능
CPU와 메모리는 전원이 꺼지면 처리 중이던 정보가 모두 지워지기 때문에 전원이 나가도 기억해야 하는 부분을 입출력 장치 중 한 종류인 보조기억장치에 파일 형태로 저장합니다.
CPU가 하나밖에 없는 가장 기본적인 컴퓨터 구조에서도 프로세스는 여러 개가 동시에 수행될 수 있기 때문에, 매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정하는일이 필요한데 이러한 일을 CPU 스케줄링(CPU Scheduling)
이라고 합니다.
CPU 스케줄링의 목표는 CPU를 가장 효율적으로 사용하는 것인데 대표적인 기법은 FCFS(First Come First Service)
, 라운드 로빈(Round Robin)
, 우선순위(Priority)
기법 등이 있습니다.
FCFS 기법은 먼저 온 것을 먼저 처리해주는 방식인데, 이게 문제점이 무엇이냐면
첫 번째로 온 프로세스가 장시간 걸리는데 두 번째, 세 번째로 온 프로세스는 단 시간밖에 안걸린다고 했을 때 2,3번째 프로세스는 1번째 프로세스 때문에 장시간을 기다려야 하는 단점이 있습니다.
이를 보완한 '라운드 로빈' 기법입니다.
라운드 로빈 기법에서는 CPU를 한번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한하는 것입니다. 만약 긴 작업을 요청하는 프로세스가 있다면 일정한 시간 뒤에는 대기열 맨 뒤로 가서 다시 줄을 서야 합니다.
즉, 긴 작업을 수행하는 프로세스 때문에 나머지 짧은 작업을 수행하는 프로세스들이 무작정 기다릴 필요가 없게 되는 것입니다.
일반적으로 한 번에 사용할 수 있는 할당 시간을 1회당 밀리초 단위를 사용한다고 합니다.
밀리초는 천분의 1초를 가르킵니다.
우선순위 기법같은 경우는 CPU 사용을 위해 대기 중인 프로세스들에 우선순위를 부여하고 말그대로 우선순위가 가장 높은 순서대로 CPU를 먼저 할당하는 방식입니다.
3. 컴퓨터 시스템의 구조
컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 장치인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구성됩니다.
컴퓨터는 외부장치에서 다시 내보내는 방식으로 업무를 처리합니다. 이때 컴퓨터 내부로 데이터가 들어오는 것을 입력(Input)
, 컴퓨터 외부장치로 데이터가 나가는 것을 출력(Output)
이라고 합니다. 키보드로부터 입력을 받아서 컴퓨터가 어떤 연산을 한 후 그 결과를 모니터에 출력하는 경우를 대표적인 입출력(Input-Output: I/O)
이라고 말합니다. 따라서 컴퓨터 외부장치를 '입출력 장치' 라고도 부릅니다.
그리고 메모리 및 입출력장치 등의 각 하드웨어 장치에는 컨트롤러
라는 것이 붙어 있습니다.
컨트롤러는 일종의 작은 CPU로서, 컴퓨터 전체에 CPU가 있듯이 컨트롤러는 각 하드웨어 장치마다 존재하면서 이들을 제어하는 작은 CPU라고 할 수 있습니다.
이 장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리를 가지고 있는데, 이를 로컬버퍼(Local Buffer)
라고 부릅니다.
각각의 장치 컨트롤러는 어떠한 이벤트가 일어나면 CPU에게 알려주어 작업을 효율적으로 할 수 있게 도와줍니다.
앞서 입출력 장치의 처리 속도는 CPU에 비해 매우 느리기 때문에 이 컨트롤러가 중재역할을 해주는 것이빈다.
3-1. 인터럽트
프로그램이 요청한 데이터를 디스크 컨트롤러가 로컬버퍼로 읽어온 후 인터럽트를 발생시키면 CPU는 인터럽트가 들어옴을 인지하고 인터럽트 관련 업무를 수행합니다.
위에서 디스크 컨트롤러가 인터럽트를 발생시키면 CPU는 하던 일을 잠시 멈추고, 이 인터럽트가 발생했을 때 수행하도록 정의된 코드를 찾아 수행합니다.
CPU에서 명령이 실행될 때에는 CPU 내부에 있는 임시 기억장치인 레지스터(Register)에 데이터를 읽거나 쓰면서 작업을 하는데, 이때 인터럽트가 발생해 새로운 명령을 실행하면 기존의 레지스터값들이 지워지게되므로 CPU 내의 이러한 상태를 저장해두어야 합니다. 이것을 모두 저장한 후에야 인터럽트 처리가 이루어질 수 있는 것입니다.
운영체제는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 프로세스 제어블록(Process Control Block: PCB)
이라는 자료구조를 둡니다.
PCB는 각각의 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있습니다.
4. 입출력 구조
- 동기식 입출력 : 동기식 입출력을 요청한 프로그램은 입출력이 완료될 때까지 다음 명령을 수행할 수 없기 때문에 그동안 CPU가 낭비됩니다.
그러나 CPU의 효율적인 사용을 위해 입출력이 수행되는 동안 다른 프로그램에게 CPU를 양도하면 동시에 다수의 입출력 연산이 일어날 수 있습니다.
이와같이동기성(Synchronization)
을 보장하기 위해 장치마다큐(Queue)
를 두어 요청된 순서대로 처리할 수 있도록 합니다. - 비동기식 입출력 : 한편 비동기식 입출력은 입출력 연산을 요청한 후에 연산이 끝나기를 기다리는 것이 아니라 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식을 말합니다.
일반적으로 동기식 입출력을 사용합니다.
이때 운영체제는 장치별로 입출력 처리를 기다리는 프로세스를 줄 세워 관리함으로써동기성
을 보장하게 되는 것입니다.
5. DMA
모든 메모리 접근 연산이 CPU에 의해서만 이루어질 경우 입출력 장치가 메모리 접근을 원할 때마다 인터럽트에 의해 CPU의 업무가 방해를 받게 되어 CPU 사용의 효율성이 떨어지는 문제점이 발생하게 됩니다. 이를 극복하기 위해 CPU 이외에 메모리 접근이 가능한 장치를 하나 더 두는 경우가 많은데, 이와 같은 장치를 DMA(Direct Memory Access)
라고 합니다.
DMA는 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할을 합니다.
DMA는 바이트(Byte) 단위가 아니라 블록(Block)이라는 큰 단위로 정보를 메모리에 읽어온 후에 CPU에게 인터럽트를 발생시켜 해당 작업의 완료를 알려줍니다.
이런식으로 인터럽트의 빈도를 줄여서 CPU를 더 효율적으로 관리하고 입출력 연산을 빠르게 수행할 수 있게 됩니다.
6. 프로그램 구조와 인터럽트
우리가 사용하는 컴퓨터 프로그램은 어떠한 프로그래밍 언어로 작성되었든 그 내부 구조는 함수들로 구성됩니다. 하나의 함수가 수행되는 중에 다른 함수를 호출하고, 호출된 함수의 수행이 끝나면 다시 원래 호출했던 함수의 위치로 돌아가 프로그램을 계속 실행하게 됩니다.
한편 프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역이 메모리에 올라가 있어야 합니다. 이때 주소 영역은 크게 코드 영역
, 데이터 영역
, 스택 영역
으로 구분됩니다.
- 코드 영역 : 우리가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는
기계어 명령어
형태로 변환되어 저장되는 부분입니다. - 데이터 영역 : 전역 변수 등 프로그램이 사용되는 데이터를 저장하는 부분입니다.
- 스택 영역 : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데에 사용되는 공간입니다.
CPU를 흔히 '컴퓨터의 두뇌' 라고는 하지만 물론 빠른 속도로 처리하는 계산 능력은 있지만,
어떤한 작업을 수행해야 하는지 스스로 결정하는 능력은 갖추고 있지 못하기 때문이다..
CPU는 매 시점 메모리의 특정 주소에 존재하는 명령을 하나씩 읽어와 그대로 실행할 뿐이다.
이때 CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터를 프로그램 카운터(Program Counter)
라고 합니다. 즉, CPU는 매번 프로그램 카운터가 가리키는 메모리 위치의 명령을 처리하게 됩니다.
6-1 프로그램 실행
'프로그램이 실행(Program Execution)되고 있다'는 것은 컴퓨터 시스템 차원ㅇ서 볼 때 크게 두 가지 중요한 의미를 가집니다.
프로그램이란?
특정 작업을 수행하는 일련의 명령어들의 모음입니다.
일련의 명령어는 우리가 작성한 코드들의 모음으로 해석해도 되죠.프로세스란?
현재 수행중인 프로그램(Program In Execution)
디스크에 시행파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행되기 시작하면 비로소 생명력을 갖는 프로세스가 되며, 프로세스는 CPU를 획득해 자신의 코드를 수행하기도 하고, 때로는 CPU를 반환하고 입출력 작업을 수행하기도 합니다. 그러다가 자신의 임무를 다하면 종료되어 사라지게 되죠.
- 디스크에 존재하던 실행파일이 메모리에 적재된다는 의미
- 프로그램이 CPU를 할당받고 명령(Instruction)을 수행하고 있는 상태라는 의미
일반적인 컴퓨터 시스템의 경우 CPU는 하나밖에 없으므로 매 시점 CPU에서 명령을 수행하는 프로그램은 기껏해야 하나뿐이다. 하지만 여러 프로그램이 짧은 시간 단위로 CPU를 나누어 쓰고, 이들 프로그램이 메모리에 동시에 적재되어 있을 수 있으므로, 여러 프로그램이 동시에 실행된다는 말을 보편적으로 사용하는 것입니다.
"여러 프로그램이 함께 사용하는 메모리 공간을 좀 더 효울적으로 사용하기 위해"
CPU의 수행에 필요한 부분은 메모리에 올려놓고, 그렇지 않은 부분은 디스크 중 메모리의 연장 공간으로 사용되는 스왑 영역에 내려놓는 방식으로 운영됩니다.스왑(Swap) 영역
은 물리 메모리가 부족할 경우를 대비해서 만들어 놓은 영역입니다.물리 메모리
와 반대로 프로그램마다 독자적으로 '주소 공간'을 갖는데 이 주소 공간을가상 메모리(Virtual)
혹은논리 메모리(Logical Memory)
라고 합니다
7. CPU 스케줄링
CPU는 프로그램의 기계어 명령을 실제로 수행하는 컴퓨터 내의 중앙처리장치입니다.
프로그램이 시작되어 메모리에 올라가면 프로그램 카운터가 현재 CPU에서 수행할 코드의 메모리 주소값을 가지게 됩니다. 그러면 CPU는 프로그램 카운터가 가리키는 주소의 기계어 명령을 하나씩 수행하게 됩니다.
한편 CPU는 일반적으로 한 시스템 내에 하나씩밖에 없으므로 여러 프로그램이 동시에 수행되는 시분할 환경에서 매우 효율적으로 관리되어야 하는 자원입니다.
그래서 나온 것이 CPU 스케줄링
입니다.
7-1. CPU 스케줄러
CPU 스케줄러는 준비상태에 있는 프로세스들 중 어떠한 프로세스에게 CPU를 할당할지 결정하는 운영체제의 코드입니다. 프로세스가 CPU를 할당받고 기계어 명령을 수행하다가 타이머 인터럽트가 발생하면 CPU 스케줄러가 호출됩니다. 그러면 CPU 스케줄러는 준비 큐에서 CPU를 기다리는 프로세스 중 하나를 선택해 CPU를 할당하게 됩니다.
CPU 스케줄링 방식에는 두 가지가 있습니다.
- 비선점형(Nonpreemptive) 방식 : CPU를 획득한 프로세스가 스스로 CPU를 반납하기 전까지는 CPU를 빼앗기지 않는 방법
- 선점형(Preemptive) 방식 : CPU를 계속 사용하기를 원하더라도 강제로 빼앗을 수 있는 스케줄링 방법
CPU 스케줄러가 어떤 프로세스에게 CPU를 할당해야 할 지 결정하고나면 선택된 프로세스에게 실제로 CPU를 이양하는 작업이 필요합니다. 이와 같이 새롭게 선택된 프로세스가 CPU를 할당받고 작업을 수행할 수 있도록 환경설정을 하는 운영체제의 코드를
디스패처(Dispatcher)
라고 부릅니다.
스케줄링 알고리즘
- 선입선출(First-Come First-Served: FCFS) 스케줄링
- 최단작업 우선(Shortest-Job First: SJF) 스케줄링
- 우선순위(Priority) 스케줄링
- 라운드 로빈(Round Robin) 스케줄링
- 멀티레벨 큐(Multi-Level Queue) 스케줄링
- 멀티레벨 피드백 큐(Multilevel Feedback Queue) 스케줄링
- 다중처리기(Multi-Processor) 스케줄링
- 실시간(Real-Time) 스케줄링
8. 메모리 관리
우리가 사는 집마다 고유의 주소가 있듯이 메모리 역시 주소를 통해 접근하는 '저장장치'입니다. 이때의 주소란 서로 다른 위치를 구분하기 위해 사용하는 일련의 숫자로 구성됩니다. 배열을 생각하면 쉽습니다. 총 100채의 집이 있을 때 각각의 집에 주소를 00번지~99번지까지 지정해주는 것이죠.
8-1. 주소 바인딩
- 논리적 주소(Logical Address) : 프로그램이 실행을 위해 메모리에 적재되면 그 프로세스를 위한 독자적인 주소 공간이 생성되는데 이 주소를 말합니다.
- 물리적 주소(Physical Address) : 물리적 메모리에 실제로 올라가는 위치를 말합니다.
프로세스가 실행되기 위해서는 이 물리적 주소
에 올라가 있어야 하며, 논리적 주소
가 물리적 메모리의 어느 위치에 매핑되는지 확인해야 합니다.
이렇게 프로세스의 논리적 주소를 물리적 주소로 연결시켜주는 작업을 주소 바인딩(Address Binding)
이라고 합니다.
8-2. 물리적 메모리의 할당 방식
- 연속할당 방식 : 프로세스를 메모리에 올릴 때 그 주소 공간을 여러개 분할하지 않고 물리적 메모리의 한 곳에 연속적으로 적재하는 방식
- 고정분할방식 : 물리적 메모리를 주어진 개수만큼의 영구적인 분할(Partition)로 미리 나누어두고 각 분할에 하나의 프로세스를 적재해 실행시킬 수 있게 합니다.
융통성이 떨이지고외부조각
과내부조각
이 발생할 수 있습니다. - 가변분할방식 : 메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식을 말합니다. 따라서 프로그램의 크기를 고려해서 메모리를 할당하고 이를 기술적으로 관리할 수 있는 기법을 필요로 합니다.
- 고정분할방식 : 물리적 메모리를 주어진 개수만큼의 영구적인 분할(Partition)로 미리 나누어두고 각 분할에 하나의 프로세스를 적재해 실행시킬 수 있게 합니다.
외부조각(External Fragmentation) : 프로그램의 크기보다 분할의 크기가 작은 경우 해당 분할이 비어 있는데도 불구하고 프로그램을 적재하기 못하기 때문에 발생하는 메모리 공간
내부조각(Internal Fragmentation) : 프로그램의 크기보다 분할의 크기가 큰 경우 해당 분할에 프로그램을 적재하고 남는 메모리 공간
- 불연속할당 기법 : 하나의 프로세스가 물리적 메모리의 여러 위치에 분산되어 올라갈 수 있는 메모리 할당 기법을 말합니다.
- 페이징(Paging) 기법 : 프로세스의 주소 공간을 동일한 크기의 페이지 단위로 나누어 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식
앞서 연속할당에서 발생했던 동적 메모리 할당 문제가 발생하지 않는다는 장점이 있습니다. - 세그먼테이션(Segmentation) : 먼저 세그먼트(Segment)란 주소 공간(코드, 데이터, 스택 등)을 기능 단위 또는 의미 단위로 나눈 것을 뜻합니다.
세그먼테이션은 프로세스의 주소 공간이 통째로 메모리에 적재되는 것이 아니라 나누어져 각각 메모리에 적재된다는 면에서 페이징과 유사합니다. 하지만 페이징 기법과 달리 프로그램을 의미 단위의 세그먼트로 나누어 관리하므로, 크기가 균일하지 않은 세그먼트들을 메모리에 적재하는 부가적인 관리 오버헤드가 뒤따르게 됩니다.
단, 세그먼트를 어느 가용 공간에 할당할 것인지 결정하는 문제가 발생합니다. - 페이지드 세그먼테이션 : 앞서 페이징 기법과 세그먼테이션 기법의 장점만을 취한 기법입니다. 프로그램을 의미 단위의 세그먼트로 나뉘데, 세그먼트가 임의의 길이를 가질 수 있는 것이 아니라 반드시 동일한 크기 페이지들의 집합으로 구성되어야 합니다. 그리고 물리적 메모리에 적재하는 단위는 페이지 단위로 합니다. 즉 하나의 세그먼트 크기를 페이지 크기의 배수가 되도록 함으로써 세그먼테이션 기법에서 발생하는 외부조각의 문제점을 해결하며, 동시에 세그먼트 단위로 프로세스 간의 공유나 프로세스 내의 접근 권한 보호가 이루어지도록 함으로써 페이징 기법의 약점을 해소합니다.
- 페이징(Paging) 기법 : 프로세스의 주소 공간을 동일한 크기의 페이지 단위로 나누어 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식
9. 가상메모리
운영체제는 보통 모든 프로그램들에 공평하게 같은 크기의 메모리를 할당하기보다는 몇몇 프로그램들에게 집중적으로 메모리를 할당한 후, 시간이 흐르면 이들로부터 메모리를 회수해서 다른 프로그램들에게 다시 집중적으로 메모리를 할당하는 방식을 채택합니다.
이유는 프로세스의 빠른 수행을 위해 프로그램마다 최소한 확보해야 하는 메모리의 크기가 존재하기 때문입니다.
프로세스의 주소공간을 메모리로 적재하는 단위에 따라 가상메모리 기법은 요구 페이징 방식
과 요구 세그먼테이션
방식으로 구현될 수 있습니다. 대부분의 경우에는 요구 페이징 방식을 사용하며, 하나의 세그먼터를 여러 개의 페이지로 나누어 관리하는 페이지드 세그먼테이션 기법을 사용하는 경우에 요구 세그먼테이션 방식을 사용합니다.
9-1. 요구 페이징
요구 페이징
이란 프로그램 실행 시 프로세스를 구성하는 모든 페이지를 한꺼번에 메모리에 올리는 것이 아니라 당장 사용될 페이지만을 올리는 방식을 말합니다. 따라서 요구 페이징 기법에서는 특정 페이지에 대해 CPU의 요청이 들어온 후에야 해당 페이지를 메모리에 적재합니다.
가상메모리 기법에서는 프로세스가 실행되는 동안 일부 페이지만 메모리에 올라와 있고 나머지 페이지는 디스크의 스왑 영역에 존재합니다.
10. 웹캐싱 기법
인터넷에 존재하는 정보의 양은 하루가 다르게 기하급수적으로 늘어나고 있으며, 그 결과 이제는 지구상에 존재하는 모든 정보를 인터넷 어딘가에서는 찾을 수 있다고 생각할 정도에 이르게 되었습니다. 이와 같이 기하급수적으로 늘어나는 인터넷 정보에
신속히 접근할 수 있게 하는 주요 기술 중 하나인 웹캐싱(Web Caching) 기법에 대해 알아봅시다.
캐싱 기법은 저장장치 계층 간의 속도 차이를 완충시켜주기 위해 컴퓨터 구조, 운영체제, 데이터베이스 등의 분야에서 각각 캐시 메모리, 페이징 기법, 버퍼링 기법 등으로 널리 연구되어왔습니다. 웹의 보편화와 컨텐츠 전송 네트워크(Contents Delivery Network: CDN) 서비스의 활성화로 인해 단일 시스템 내에서 속도 차가 있는 저장장치 간에 이루어지는 캐싱 기법뿐 아니라 원격지의 객체를 캐싱하는 기법의 중요성이 커지고 있습니다.
웹캐싱
이란 웹 사용자에 의해 빈번히 요청되는 데이터를 사용자와 지리적으로 가까운 웹캐시 서버에 보관해 빠른 서비스를 가능하게 하는 기법을 말합니다. 또한 웹캐싱만을 전담하는 프록시서버에 의해 광범위하게 이루어지고 있습니다.프록시서버
는 통상적으로 일개 그룹의 웹 사용자에 대한 서비스 지연시간을 줄이기 위해 사용되며, 궁극적으로는 네트워크의 대역폭 절약과 함께 웹서버의 부하를 줄이는 역할도 담당하게 됩니다.
캐싱 시스템의 성능에 있어서 중요한 역할을 하는 부분 중 하나가 캐시 교체 알고리즘
입니다.
캐시 교체 알고리즘은 한정된 캐시 공간을 가지고 사용자들의 지속적인 요청을 처리하기 위해 어떠한 객체를 캐시에 보관하고 어떠한 객체를 캐시에서 삭제할지 온라인으로 결정합니다.
(ex. LRU(Least Recently Used) 알고리즘 등)
일반적으로 캐시 내에 있는 객체의 수 n개에 대해 시간 복잡도 측면에서 캐시 운영에 드는 시간이 O(log n)
을 넘지 않는 것이 바람직합니다.
캐시에 보관된 웹 객체는 근원지 서버에서 변경될 수 있으므로 캐싱 시스템은 통상적으로 일관성 유지 기법
을 필요로 합니다. 일관성 유지 기법은 사용자가 요청한 웹 객체가 캐싱되어 있는 경우 이 객체가 근원지 서버에 있는 객체와 동일한지를 확인해서 사용자에게 최신의 정보를 전달하기 위해 필요합니다.
10-1. 웹캐시의 공유 및 협력 기법
또한 웹캐싱의 효과를 극대화하기 위해서는 웹캐시 간의 공유 및 협력 기법이 필요합니다.
웹캐시 간의 공유는 일반적으로 인터넷 캐시 프로토콜(Internet Cache Protocol: ICP)
에 의해 이루어집니다. ICP는 동료프록시캐시들 사이에서 웹 객체의 검색 및 전송을 지원하기 위한 프로토콜입니다. 사용자가 프록시서버에 웹 객체를 요구했는데 프록시서버가 그 객체를 캐싱하고 있지 않은 경우 ICP에서는 모든 동료 프록시들에게 ICP 질의를 멀티캐스트해서 누가 요청된 객체를 가지고 있다는 답신을 보내오면, ICP 질의를 보냈던 프록시는 객체를 가지고 있는 동료 프록시에게 HTTP 요청을 보내어 해당 객체를 받아온 후 사용자에게 전달합니다.
HTTP는 요청을 보내어 해당 객체를 받아온 후 사용자에게 전달합니다. HTTP는 웹 객체의 전송을 위한 프로토콜인 반면, ICP는 공유 웹캐시들 간에 객체의 위치를 확인하기 위한 프로토콜로서 HTTP에 비해 매우 부담이 적은 프로토콜입니다.
디렉토리 기반 프로토콜(Directory Based Protocol)
에서는 공유 웹캐시에 저장된 객체들의 위치 정보를 디렉토리에 유지함으로써 ICP 프로토콜의 멀티캐스트 부담을 없애고자 했지만 디렉토리의 유지 및 관리에 또 다른 부담이 생기게 됩니다.
디렉토리 서버의 부하 부담을 줄이기 위해 여러 개의 디렉토리 서버를 두기도 합니다.
10-2. 웹캐시의 사전인출 기법
웹서비스의 응답 지연시간을 줄이기 위한 방법의 일환으로 사용자에 의해 아직 요청되지 않은 객체를 미리 받아오는 사전인출 기법(Prefetching)의 중요성이 증가하고 있습니다.
- 예측 사전인출 기법(Predictive Prefetching) : 웹페이지들 간의 관계 그래프 등을 구성해 하나의 웹페이지가 참조되었을 때 새로운 웹페이지가 참조될 확률을 과거의 참조 기록을 통해 예측하고 이 확률을 기반으로 사전인출을 수행하는 방법을 말합니다.
- 대화식 사전인출 기법 : HTML 문서에 대한 요청을 했을 때 웹캐시는 캐싱하고 있던 HTML 문서를 미리 파싱해서 그 문서에 포함되거나 연결된 웹 객체를 미리 받아와서 사용자의 후속 요청에 곧바로 전달하는 기법을 말합니다.
10-3 동적 웹 객체의 캐싱 기법
지금까지 설명한 웹캐싱 기법들은 실시간으로 변하지 않는 데이터, 즉 HTML, JPG, GIF 등의 정적 웹 콘텐츠
에 대한 캐싱에 초점을 맞추었습니다.
그러나 실시간성을 요구하는 콘텐츠, 즉 ASP, CGI 등 동적 웹 콘텐츠
를 처리하는 부분이 전체 웹서비스 지연시간 중 상당한 부분을 차지하며, 이 부분이 웹서버의 과부하를 일으키는 주요 요인으로 분석되고 있습니다. 동적 웹 콘텐츠에 대한 요청의 결과물은 동일한 URL에 대한 웹 요청인 경우에도 서로 다른 결과를 초래할 수 있기 때문에 캐시에 저장하는 것 자체가 의미가 없을 수 있다. 그러나 그 결과물을 활용할 수도 있습니다.
여기까지 운영체제에 대한 기초 포스트를 마치겠습니다.
지금까지의 내용은 반효경 저자
의 운영체제와 정보기술의 원리
책을 바탕으로 정리하였습니다.
감사합니다.
'공부 기록' 카테고리의 다른 글
VS Code 사용중에 "Cannot validate the php" 에러가 뜬다면 (0) | 2020.10.04 |
---|---|
왜 intellij를 사용하는가 (0) | 2020.09.09 |
라이브러리 (0) | 2020.09.09 |
EC2 배포중에 나는 에러 (0) | 2020.08.30 |
컴퓨터구조 기초 (0) | 2020.07.16 |
댓글