메모리 단편화에 대해 설명하시오

 

 

메모리 단편화란?

- 메모리의 빈공간 또는 자료가 여러개의 조각으로 나뉘는 현상이다. 쉽게 말해 할당한 메모리를 해제를 하게되면 그 메모리공간이 빈공간(사용하지않는 공간)이 되고 그 빈공간의 크기보다 큰 메모리는 사용 할 수 없다. 그리하여 이 공간들이 하나둘 쌓이게되면 수치상으로는 많은 메모리공간이 남았음에도 불구하고, 실제로 사용 할 수 없는 메모리가 발생한다.

 

 

내부단편화(Internal Fragmentation)

 

- 분할된 영역이 할당된 프로그램의 크기보다 커서 사용되지 않고 남아 있는 빈 공간

ex) 메모장을 생성해서 아무것도 치지 않고 공백인 채로 속성을 확인해보면?

실제 용량은 1kb도 안되는데 4kb로 할당되는 것과 같은 현상

 

 

외부단편화(External Fragmetation)

 

- 분할된 영역이 할당될 프로그램의 크기보다 작아서 할당할 수 없어 모두 빈 공간으로 남아 있는 전체 영역

ex) 일반적으로 응용프로그램은 메모리를 연속적으로 할당하므로.. 연속적으로 할당될 그 크기보다 작은 곳에는 할당 될 수가 없다.

 

- 해결방법 -

메모리 압축 : 디스크 조각 모음

 

메모리 통합 : 단편화가 발생된 공간들을 하나로 통합시켜 큰 공간으로 만드는 기법

 

세그멘테이션 : 가상기억장치(가상메모리)를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하고 메모리를 할당하며 주소변환을 하는 기법이다. 세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법에서처럼 미리 크기를 잡아둘 수 없고, 메모리에 적재될 때 빈공간을 찾아 할당하는 사용자 관점의 가상 메모리 기법이다. 내부단편화는 없지만 외부단편화가 발생한다.

 

 

페이징 : 페이징은 가상기억장치(가상메모리)를 모두 같은 크기의 블록으로 편성하고 이 일정한 크기인 블록을 페이지라고 한다. 주소공간을 페이지 단위로 나누고 실제 기억공간(RAM)은 페이지 크기와 같은 크기의 블록을 프레임으로 나누어 사용한다. 그리하여 사용하는 메모리는 프레임에 올리고 사용하지 않는 메모리는 페이지에 저장한다. 필요한 메모리는 페이지 단위로 프레임에 올리고 사용하지 않는 프레임은 페이지로 옮기는 기법이다. 외부단편화는 해결하지만 내부단편화가 발생한다.

 

 

 

 

스레드와 프로세스에 대해 설명하시오

 

프로세스

: 현재 실행중인 프로그램을 말하며 CODE, DATA, HEAP, STACK으로 구성되어 있다.

 

스레드

: 프로세스 안에서 CODE, DATA, HEAP을 공유하고 STACK만 별도로 갖고 있다.

프로세스간 이동시에 비해 STACK만을 스위칭 하면 되므로 전환 속도가 빠르다.

스레드간 자원공유가 가능하여 편리하다, 반면 공유자원에 대한 관리 문제가 있다.

 

 

컨텍스트 스위칭에 대해 설명하시오

 

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업.

 

 

스레드 스케줄링, CPU 스케줄링

 

 

메모리 단편

커널에 대해서 설명하시오

 

 

커널은 운영체제의 핵심 부분으로 운영체제의 다른 부분 및 응용프로그램 수행에 필요한 여러 가지 서비스를 제공 한다. 커널에는 종료된 입출력 연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와 스케쥴러, 수퍼바이저 등이 포험되어 있다.

메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들은 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 메모리 관리자를 갖고 있다.

 

보안, 자원관리 추상화 등의 역할을 한다.

 

 

 

사용자 수준 스레드 vs 커널 수준 스레드

 

 

1. 커널 모드와 유저 모드

 

-메모리 영역은 사용자에 의해서 할당되는 메모리 공간인 유저 영역과 운영체제라는 하나의 소프트웨어를 실행시키기 위해서 필요한 메모리 공간인 커널 영역으로 나뉜다.

 

-사용자가 사용하는 메모리 영역은 유저 영역이지만 C언어는 메모리 참조가 용이하기 때문에 안정성 제공 측면에서 커널 모드와 유저 모드가 사용된다.

 

-기본적으로 유저 모드로 동작하다가 Windows 커널이 실행되어야 하는 경우에 커널 모드로의 전환이 일어난다.

 

-커널 모드와 유저 모드의 차이는 유저 모드에서 동작할 때 커널 영역으로의 접근이 금지된다. 커널 모드일 때는 모든 영역의 접근이 허용된다.

 

 

 

 

-Windows 에서 운영체제 차원에서 제공되는 시스템 함수들 중 일부는 호출시 커널 모드로 동작한다.

 

-주의할 점은 모드의 전환은 시스템에 부담을 준다.

 

-커널 모드와 유저 모드를 제공하는 대상은 Windows운영체제가 아닌 프로세서(Process)이다. 즉 메모리 보호 기능이 CPU에 달려있다.

 

 

 

 

2. 커널 레벨 쓰레드와 유저 레벨 쓰레드

 

-커널 레벨 쓰레드와 유저 레벨 쓰레드는 생성 주체가 누구냐에 따라 구분된다.

 

-프로그래머 요청에 따라 쓰레드를 생성하고 스케줄링하는 주체가 커널이면 커널 레벨(Kernel Level) 쓰레드라고 한다.

 

-커널이 쓰레드 모델을 지원하지 않거나 제공하는 쓰레드 모델이 마음에 들지 않을 경우, 커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 활용할 수 있는데 이러한 방식으로 제공되는 쓰레드가 유저 레벨(User Level) 쓰레드이다.

 

-커널 레벨 쓰레드의 장점은 커널이 직접 제공해 주기 때문에 안정성과 다양한 기능이 제공된다.

 

-커널 레벨 쓰레드의 단점은 유저 모드에서 커널 모드로의 전환이 빈번하게 이뤄져 성능 저하가 발생한다.

-유저 레벨 쓰레드의 장점은 커널은 쓰레드의 존재조차 모르기 때문에 모드 간의 전환이 없고 성능 이득이 발생한다.

 

-유저 레벨 쓰레드의 단점은 하나의 스레드가 커널에 의해 블로킹 되면 프로세스 전체가 블로킹되고, 이를 해결하려면 프로그래밍이 어려워지고 커널 레벨 쓰레드에 비해 결과 예측이 어려워진다



'프로그래밍 > 운영체제' 카테고리의 다른 글

[2] 운영체제 소개  (0) 2019.02.07
[1] 컴퓨터 시스템 소개  (0) 2019.02.07
쓰레드란?  (0) 2019.02.05

+ Recent posts