웹개발기초

[웹 개발 기초] 운영체제 - 메모리관리, IPC

코딩하는 공부방 2022. 5. 23. 20:05

 

2022.05.21 - [기타] - [웹 개발 기초] OS 작동원리, 프로세스 관리

 

[웹 개발 기초] OS 작동원리, 프로세스 관리

오늘은 웹에 대한 기초적인 지식인 OS와 프로세스에 대해서 알아보겠습니다. 운영체제(OS) 운영체제는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로

nosechild.tistory.com

안녕하세요

오늘은 저번 시간에 이어서

운영체제에 관해서 자세히 알아볼 건데요

그중에서 "메모리 관리", "IPC"에 대해서

알아보겠습니다.

 


메모리 관리

메모리 관리는 컴퓨터 메모리를 관리하는 행위이다. 가장 단순한 형태의 메모리 관리 방법은 프로그램의 요청이 있을 때, 메모리의 일부를 해당 프로그램에 할당하고, 더 이상 필요하지 않을 때 나중에 다시 사용할 수 있도록 할당을 해제하는 것이다. 이는 하나 이상의 프로세스가 언제든 실행되는 고급 컴퓨터 시스템에 필수적이다.

 

Address Binding

프로세스 주소(Address)는 논리적 주소(Logical address)물리적 주소(Physical address)로 나뉩니다.

논리적 주소는 가상 주소(Virtual address)라고도 하며, CPU가 생성하는 주소이다. 프로세스마다 독립적으로 가지는 주소 공간이기 때문에 프로세스 내부에서 사용하고, 각 프로세스마다 0부터 시작한다.

물리적 주소는 프로세스가 실행되기 위해 실제로 메모리(RAM)에 올라가는 위치이다.

 

1. 컴파일 시간 바인딩(compile time binding)

프로세스가 기억 장치 내에 적재될 위치를 컴파일 시간에 알 수 있으면 컴파일러는 절대 코드를 생성합니다.

컴파일 타임 주소 할당은 프로세스 내부에서 사용하는 논리적 주소와 물리적 주소가 동일합니다.

장점으로는 성능이 좋아집니다. 커널이 주소 할당을 해주기 때문에 시간이 필요가 없습니다.

단점으로는 주기억장치 공간의 낭비가 심해져서 비효율적입니다.

 

2. 적재 시간 바인딩(Load time binding)

프로세스가 기억 장치 내의 어디에 상주할 것인지를 컴파일 시간에 알 수 없을 경우 컴파일러는 절대 코드를 생성할 수 없습니다. 이 경우에 최종 바인딩은 적재 시간이 될 때까지 연기를 합니다. 그리고 Loader가 프로세스를 메모리에 load 하는 시점에 물리적 주소를 결정한다. 

따라서 로드 타임 주소 할당은 논리적 주소와 물리적 주소가 다르다.

장점으로는 컴파일 시간 바인딩에 비해서 공간 할당이 좋습니다. 단점으로는 성능이 다소 떨어진다는 단점이 있습니다.

 

3. 수행 시간 바인딩(excution time binding)

프로세스가 수행이 시작된 이후에 프로세스가 실행될 때 메모리 주소를 바꾸는 방법이다. 물리적 주소가 결정되며 실행 도중에 주소가 바뀔 수 있다.
런타임 주소 할당은 MMU(Memory Management Unit)라는 하드웨어 장치를 사용하여 논리적 주소를 물리적 주소로 바꿔준다. 프로세스가 CPU에서 수행되면서 생성해내는 모든 주소 값에 대해서 base register의 값을 더해주어 물리적 주소를 생성하는 방식이다. base register는 하나이므로 프로세스끼리 공유한다.
장점으로는 주기억장치 공간 낭비가 거의 생기지 않습니다. 단점으로는 성능이 느려집니다.


Swapping

메모리는 크기가 크지 않기 때문에 프로세스를 임시로 디스크에 보냈다가 다시 메모리에 로드해야 하는 상황이 생긴다. 이때 디스크로 내보내는 것을 swap out(주기억장치 -> 보조기억장치), 메모리를 들여보내는 것을 swap in이라고 한다. 일반적으로 중기 스케줄러에 의해 swap out 시킬 프로세스를 선정하며, 우선순위에 따라 어떤 프로세스를 swap in/out 할지 결정한다. 우선순위가 낮은 프로세스를 swap out 시키고, 높은 프로세스를 메모리에 올려놓는 방식입니다.

 

만약 Compile time이나 Load time binding인 경우 원래 메모리 위치로 swap in 해야 하고, Execution time binding인 경우 추후 빈 메모리 영역 아무 곳에나 올릴 수 있다.

swap 하는 데 걸리는 시간의 대부분은 디스크 전송 시간이다.


 Contiguous Allocation

메모리는 일반적으로 커널 영역과 사용자 프로세스 영역으로 나뉘어서 사용됩니다. 그중 사용자 프로세스 영역의 할당 방법으로는 Contiguous Allocation(연속적 할당), Noncontiguous Allocation(비연속적 할당)으로 나뉜다.

연속 할당 기법은 프로세스를 메모리에 올릴 때 주소 공간을 메모리의 한 곳에 연속적으로 적재하는 방식입니다. 연속 할당 방식에서는 물리적 메모리를 다수의 분할로 나누어 하나의 분할에 하나의 프로세스가 적재되도록 합니다.

고정 분할 방식

고정분할 방식은 물리적 메모리를 정해진 개수만큼의 영구적인 분할로 나누어두고, 각 분할에 하나의 프로세스를 적재하는 방식입니다. 분할의 크기는 모두 동일할 수도 있고, 서로 다를 수도 있습니다.

 

고정 분할 방식은 동시에 메모리에 올릴 수 있는 프로그램 수가 고정되어 있으며, 수행 가능한 프로그램의 최대 크기 또한 제한된다는 점에서 가변 분할 방식에 비해 융통성이 떨어집니다.

또한 고정분할 방식에는 외부 조각(외부단편화)내부 조각(내부 단편화) 문제가 발생할 수 있습니다.

 

<고정분할 방식의 단점>

 

 

가변 분할 방식

가변 분할 방식은 메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식이다. 따라서 가변 분할 방식은 프로그램의 크기를 고려해서 메모리를 할당하고 이를 기술적으로 관리할 수 있는 기법이 필요하다.

 

가변 분할 방식은 프로세스에 딱 맞게 메모리 공간을 사용하기에 내부조각 문제는 발생하지 않는다. 그러나 사용 중인 프로세스가 종료되어 메모리에 새로운 프로세를 올릴 메모리 공간이 충분하지 않을 경우 외부 조각 문제(외부단편화)가 발생한다.

 

<가변분할 방식의 외부 조각 문제>

가변 분할 방식은 어디 메모리 공간에 프로세스를 올려야 할지 결정해야 하는 문제가 있다. 이를 해결하기 위한 기술적 방법으로 다음과 같이 3가지가 있다.

 

 

1. First-fit

크기가 n 이상인 Hole 중 최초로 발견한 Hole에 할당한다. 

 

2. Best-fit

크기가 n 이상인 가장 작은 Hole을 찾아 할당한다. Hole들이 크기순으로 정렬되지 않은 경우 모든 Hole을 탐색해야 한다. 항상 거의 딱 맞는 크기를 할당하기 때문에 할당 후에 아주 작은 Hole들이 많이 생성된다.

 

3. Worst-fit

가장 큰 Hole에 할당한다. 마찬가지로 모든 Hole을 탐색해야 하고, 상대적으로 아주 큰 Hole들이 새로 생성된다.

 

First-fit과 Best-fit이 Worst-fit에 비해서는 속도나 공간 측면에서 효과적인 것으로 알려져 있으나, 전체적으로 효율이 좋지 않은 편이다. 


단편화(Fragmentation)

<정의>

  • 주기억장치에서 프로그램을 할당하고 반납하는 과정에서 발생하는 사용되지 않는 작은 조각 공간입니다.
  • 주기억장치 상에서 빈번하게 기억 장소가 할당되고 반납됨에 따라 기억 장소들이 조각들로 나누어지는 현상입니다.

 

내부 단편화(Internal fragmentation)

  • 주기억장치 내 사용자 영역이 실행 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남아있는 공간입니다.
  • 주기억장치 내의 사용자 영역이 실행 프로그램보다 많을 때 실행합니다.

외부 단편화(external fragmentation)

  • 주기억장치 내 사용자 영역보다 실행 프로그램이 커서 프로그램이 할당될 수 없이 남아있는 공간입니다.
  • 주기억장치 내의 사용자 영역이 실행 프로그램보다 적을 때 실행합니다.

 


IPC란?

IPCInter-Process Communication의 줄임말로, 프로세스 간에 데이터 및 정보를 주고받기 위한 메커니즘입니다.

특히나 OS는 프로그램을 실행시키면서 하나의 프로세스가 독박으로 모든 걸 해결할 수 없기 대문에, 통신을 위한 메커니즘은 필수적이죠.

 

따라서, 이런 통신을 할 때 사용하는 것을 IPC라고 합니다.

다른 것들에 알아보기에 앞서, 이런 IPC는 어떠한 상황에서 필요할까요? 크게 4가지로 나누어 볼 수 있습니다.

 

정보 공유 : 여러 사용자가 돌일한 정보에 흥미를 가질 수 있음에 따라, 병행적으로 접근할 수 있는 환경 제공

계산 가속화 : task를 sub task로 나누고, 병렬 처리를 통한 계산 가속화

모듈성 : 시스템 기능을 변도의 프로세스 또는 스레드를 나누어 모듈식 형태로 시스템 구성

편의성 : 한 순간에 작업할 많은 task를 가질 수 있음


※참고자료

https://rebro.kr/178

 

[운영체제(OS)] 8. 메모리 관리(Memory Management)

[목차] 1. Address Binding 2. Swapping 3. Contiguous Allocation 4. Fragmentation 5. Paging 6. Translation Look-aside Buffer 7. Structure of the Page Table 8. Segmentation 참고) - https://parksb.gith..

rebro.kr

https://zangzangs.tistory.com/133
 

[OS] 메모리 연속할당 - 고정분할 방식과 가변분할 방식

[OS] 메모리 연속할당 - 고정분할 방식과 가변분할 방식 안녕하세요? 장장스입니다. 실제 물리적 메모리는 크게 연속할당 방식과 불연속할당 방식으로 나뉩니다. 오늘은 메모리 연속할당 방

zangzangs.tistory.com