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

 

 

메모리 단편화란?

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

 

 

내부단편화(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



운영체제란?


컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스를 담당하는 프로그램. 사용자가 응용 프로그램을 편리하게 실행 할 수 있도록 도와준다.

하드웨어와 컴퓨터 사용자를 연결하는 매개체 역할.





운영체제의 역할


하드웨어와 컴퓨터 사용자를 연결하는 역할. 응용프로그램 간의 하드웨어 사용 제어, 운영체제는 컴퓨터 하드웨어와 응용 프로그램 간의 인터페이스

역할을 하면서 CPU, 메모리와 같은 컴퓨터 자원을 관리하고 사용자에게 편의를 제공한다.


1. 조정자로서의 역할 : 운영 요소를 적절하게 사용 할 수있도록 제어. 다만 프로그램이 작업 할 수 있는 환경만 제공 할 뿐 직접일은 못한다.

                                    예를들어 워드프로세서 역할을 직접 수행하는 것이 아닌, 워드프로세서가 제 기능을 하도록 도움만 준다.


2. 자원 할당자 또는 관리자로서의 역할 : 각 응용 프로그램에 필요한 자원을 할당해준다.

                                                     (프로세서 시간, 메모리 공간, 파일저장 공간, 입출력장치 등 )

                                                     그런데 각 응용프로그램에서 동일한 자원을 요구하는 충돌이 발생 할 수 있다. 이럴때 운영체제는 

                                                     시스템을 공정하고 효율적으로 운영하기위해 자원 할당을 어떻게 할지에 대한 관리자 역할도 한다.


3. 입출력 장치와 사용자 프로그램 제어 : 시스템의 부적절한 사용이나 오류 방지를 위해 사용자 프로그램의 실행을 제어






버퍼링


입출력장치의 느린 속도를 보완하기 위한 운영체제의 기능 중 하나로 프로세서와 입출력장치를 유휴시간이 없도록 프로세서의 연산과정과 함께

어떤 작업의 입출력을 동시에 수행하는 방식

데이터 구성 단위로는 레코드가 쓰인다. 버퍼링의 성능은 처리되는 레코드 수에 따라 달라진다.




스풀링


디스크를 매우 큰 버퍼처럼 사용하는 것. 입력장치에서 미리 읽어들여 출력장치가 받을 수 있을 때 까지 출력파일을 저장.

버퍼링과 비교하여 스풀링은 한 작업의 입출력을 수행하면서 다른 작업의 계산도 할 수 있다는 장점을 갖는다.




운영체제의 유형별 특징


1. 다중프로그래밍 시스템

2. 시분할 시스템

3. 분산처리 시스템

4. 다중처리 시스템

5. 단일 사용자 시스템




다중프로그래밍 시스템


프로세서가 항상 수행할 작압을 가지도록하여 프로세서 이용률을 증진 시키는 방식. 수행 될 작업을 메모리에 적재하여 프로세서가 유휴하지 않는 상태로 만드는 방식. 인터럽트를 수행하여 여러 개의 작업이 수행 준비를 갖추고 있을때 해당 작업을 결정하여 수행한다.


시분할 시스템


다중프로그래밍을 논리적으로 확장한 개념으로 프로세서를 통해 다중 작업을 교대로 수행하여 컴퓨터가 여러개 있는것 처럼 착각하게 만든다.

여러작업이 메모리에 저장되어 있는 경우 한 작업이 다른 작업의 데이터를 변경하는 등의 작업에 대한 보호가 필요하다. 또한 다수의 사용자가 접근하는 파일은 접근 권한을 두어 특정 권한을 가진 사용자만 접근 할 수 있도록 파일 시스템을 보호해야 한다.


분산처리 시스템


시스템마다 운영체제와 메모리를 가지고 독립적으로 운영되며 필요할 때 통신하는 시스템 둘 이상의 독립된 컴퓨터 시스템을 통신선으로 연결한다.





운영체제 기능


자원관리와 프로그램을 위한 인터페이스 역할 수행


1. 자원관리 기능 메모리, 프로세스, 장치, 파일 등의 시스템 구성요소를 관리하는 역할


- 메모리 관리 : 프로세서가 명령어를 수행하려면 명령어가 메인 메모리에 있어야 한다. 프로그램을 수행하려면 프로그램이 절대주소로 맵핑되어 메인 메모리에 저장되어야 한다. 운영체제는 메모리의 사용부분, 사용자 점검, 기억 공간에 어떤 프로세스를 저장할지 결정, 기억 공간 할당 및 회수 결정을 담당한다.


- 보조기억장치 관리 : 비어있는 공간관리, 저장 장소 할당, 디스크 스케줄링을 담당한다.


- 프로세스 관리 : 프로세스와 스레드 스케줄링, 사용자, 시스템프로세스 생성 및 제거, 프로세스 중지와 재수행, 프로세스 동기화를 위한 기법제공, 

                       프로세스 통신을 위한 기법 제공, 교착상태 방지 기법 제공을 담당


- 장치 관리 : 임시 저장시스템, 장치드라이버 인터페이스, 특정하드웨어 장치를 위한 드라이버를 담당


- 파일 관리 : 파일 생성과 제거, 디렉터리 생성과 제거, 보조기억장치에 있는 파일의 맵핑, 안전한 저장매체에 파일 저장 담당


 2. 운영체제의 기타 기능

 

 - 시스템 보호 : 운영체제에 있는 프로세스는 다른 사용자들의 프로그램으로 부터 파일, 기억장치, 프로세서, 기타 자원등에 대하여 적절한 권한을 부여한                       프로세스만 수행될수 있어야 한다.


 - 네트워킹 : 시스템에 있는 프로세서는 통신 네트워크를 통해 연결된다.


 - 명령 해석기와 시스템 관리 :사용자가 입력한 여러가지 명령은 제어 문장에 의해 운영체제에 전달이 되고, 이 전달을 명령해석기가 담당




운영체제 서비스


운영체제는 사용자에게 다음과 같은 서비스를 제공한다.


부트스트래핑 서비스

사용자서비스

시스템 서비스

시스템 호출 서비스


1. 부트스트래핑 서비스


부트스트래핑 : 운영체제가 적재 되는 과정, 부팅이라고도 한다. 부트스트랩 로더는 disk track 0, 나머지는 다른 부분에 적재 된다.


                                       







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

[ 기술면접 정리 서버 / 운영체제 ]  (0) 2019.03.06
[1] 컴퓨터 시스템 소개  (0) 2019.02.07
쓰레드란?  (0) 2019.02.05

레지스터

: 프로세서에 위치한 고속메모리, 프로세서가 바로 사용할 수 있는 데이터를 담는다.




메인 메모리

: 고유 주소를 갖는 워드, 바이트로 구성된 대규모 배열 주소를 읽거나 기록함으로써 상호작용 한다.

 프로세서는 메인 메모리로부터 데이터를 읽거나 쓴다.




캐시 

:처리 속도가 빠른 프로세서와 느린 메인 메모리 사이에서 데이터나 정보를 저장하는 고속 버퍼이다. 메인 메모리에서 일정 블록의 데이터를 가져와

워드 단위로 프로세서에 전달하여 정보를 빠르게 제공하는 역할

메인 메모리 주소 영역을 한 번 읽어 들일수 있는 라인크기로 나눈 후 각 블록에 번호를 부여 한 후 이번호를 태그로 저장.



캐시적중 (Cache Hit) : 프로세서는 메인메모리 접근 전에 캐시를 먼저 조사한다. 만약 캐시가 데이터를 보관하고 있으면, 캐시는 데이터 라인에서 요청한 데이터를 읽어

프로세서에 보낸다.


캐시실패 (Cache Miss) : 원하는 주소의 블록에 캐시에 없을때 캐시제어기는 메인메모리에서 해당 블록을 읽어 캐시에 넣고 프로세서에 전송




시스템의 동작 과정


Data를 디지털 형태로 입력받아 메모리에 저장된 명령어 목록에 따라 처리 후 출력. 저장






인터럽트


컴퓨터에서 설정된 장치에서 프로세서로 보내는 하드웨어 신호. 인터럽트를 받은 프로그램은 실행을 멈추고 다른 프로그램이 실행 된다.


시스템이 예측하지 못하는 갑작스런 정전, 시스템으로 부터의 긴급 요청, 잘못된 명령어 수행, 입출력 작업완료 같은 긴급상황을 처리하기 위해서 필요


프로그램의 정상 실행을 일시 정지 시키는 과정과 재개하는 과정의 연속으로 실행, 사용자 프로그램에 별도로 인터럽트를 위한 조치가 필요한것은 아니다.











참조 : 운영체제 그림으로 배우는 원리와 구조 / 구현회 저 / 한빛 아카데미

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

[ 기술면접 정리 서버 / 운영체제 ]  (0) 2019.03.06
[2] 운영체제 소개  (0) 2019.02.07
쓰레드란?  (0) 2019.02.05

+ Recent posts