준코딩

주 메모리 & 가상 메모리 본문

CS/운영체제

주 메모리 & 가상 메모리

Ljunhyeob - App Dev 2019. 3. 29. 18:22

메모리?

:메모리는 기억장치라는 뜻을 가지고 있다. 원하는 작업을 컴퓨터에서 처리하기 위해서는, 처리대상의 내용이나
 
처리결과를 잠시 기억하고 있어야 할 필요성이 생기는데, 이때 메모리가 사용된다.

 CPU에 의해 제어된 장치로 즉시 필요한 프로그램이나 데이터가 기억됨

->일반적으로 컴퓨터에서 메모리라고 하면 메인메모리(주기억장치)를 가리킵니다.

주기억장치의 종류

-캐쉬메모리, RAM, ROM, 등등

기본 하드웨어

-주 메모리와 처리기에 내장되어 있는 레지스터들은 CPU가 직접 접근할 수 있는 유일한 저장장치 이다.

  모든 실행되는 명령어와 데이터들을 CPU가 직접적으로 접근할 수 있는 주 메모리와 레지스터에 있어야 한다.

  만약 데이터가 메모리에 없다면 CPU가 데이터를 처리하기 전에 메모리로 이동시켜야 한다.

 

주소 연계(Address Binding)

-데이터의 주소를 결정하는 것, 물리적 메모리의 어느 부분에 적재할 지 결정하는 것

 

되는 순간에 따라 3가지로 분류

1.컴파일 시간 연계(compile time): 물리적인 메모리가 많아도 이미 주소가 결정되어 변경할 수 없는 비효율적인 방법   

2.적재 시간 연계(load time): 프로그램이 실행 되었을 때 연계가 이루어진다.

3.실행 시간 연계(execution time): 현재 사용하는 방법, 프로그램이 실행된 후에도 주소를 변경할 수 있다.

 

 

논리 대 물리주소 공간(logical, Physical address space)

-CPU는 보통 논리주로 접근한다.
-
메모리에 주어지는 주소는 물리주소이다.

컴파일 시간 연계, 적재 시간 연계 는 동일한 가상/물리 주소를 가지지만 실행 시간 연계는 두 개가 서로 다르다.

->프로그램의 실행 중에는 이와 같은 가상 주소를 물리 주소로 변환해야 하는데 이 변환 작업은 하드웨어 장치인

메모리 관리기(MMU: Memory Management Unit)에 의해 실행된다.

동적 적재(Dynamic Loading)

-메모리 공간을 효율적으로 이용하기 위해서는 동적 적재를 해야 한다.

-프로그램 실행에 반드시 필요한 루틴/데이터만 적재하는 것

 

 

스와핑

-프로세스가 실행되기 위해서 메모리에 있어야 하지만 필요한 경우 프로세스는 실행 도중에 임시로 보조 메모리로

 교체되어 나갔다가 다시 메모리로 되돌아 올 수 있다.

 

 

연속 메모리 할당

-주 메모리는 운영체제뿐만 아니라 여러 사용자 프로세스도 수용해야 한다.

 그리고 이 각 영역은 목적에 맞도록 효율적으로 관리되어야 한다.

-메모리를 분할하여 여러 개의 프로그램을 수용하여 다중 프로그래밍
 가능하게 하는 것

 

 

 

페이징

-논리주소 공간이 연속된 하나의 공간에 모두 모여 있어야 한다는 제약을 없앤다.

->디스크에 연속적인 공간이 있는지 찾을 필요가 없다.

 

세그먼테이션

-페이징처럼  메모리를 같은 크기가 아닌 서로 다른 크기의 논리적 단위인 세그먼트로 분할 한다.

-세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법처럼 미리 분할해 둘 수 없고,

 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법

 

 

가상 메모리?

-어떤 프로세스를 실행할 때 프로세스 전체가 메모리에 적재되지 않고도 실행이 가능하도록 하는 기법

->필요한 부분만 메모리에 적재 되면 실행이 가능하기 때문에 물리 메모리 용량을 초과하는 프로그램도 동작 가능.

-대체로 가상 메모리 = “요구 페이징 을 의미함

->CPU가 처리하는데 필요한 페이지만 즉, 요구되는 페이지만 메모리에 적재하는 것

 

 

 

요구 페이징(Demand Paging)

->초기에 필요한 것들만 적재하고, 페이지들이 실행 과정에서 실제로 필요할 때 적재하는 기법

장점

1.실제 필요한 페이지들만 메모리로 읽어오므로 사용되지 않는 페이지를 메모리로 가져오지 않음으로써
 
 시간 낭비와 메모리 공간 낭비를 줄일 수 있다.

2.프로세스가 메모리에 존재하는 페이지들만 접근하는 한 실행은 정상적으로 진행된다.

-> 메모리에 없는 페이지를 접근하려고 하면 페이지 부재 트랩을 발생 시킨다.

 

 

쓰기--복사(Copy on write)

-fork() 를 할 때, 처음에는 메모리내의 같은 페이지를 공유한다.

 만약 둘 중 하나가 공유중인 페이지 내용을 바꾸려고 하면, 그때 복사한다.

->복사된 페이지만 바꿈 으로서 효율 개선 가능

 

 

 

페이지 교체(Page Replacement)

-페이지 부재가 발생했을 때 필요한 페이지를 적재해야 하는데, 이때 모든 페이지 프레임이 사용 중 이면

 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법이다.

기법 종류

1.OPT(OPTimal replacement, 최적 교체)

-가장 오랫동안 사용하지 않을 페이지를 교체하는 기법

->각 페이지의 호출 순서와 참조상황을 미리 예측해야 하므로 실현 가능성이 낮다.

2.FIFO(First In First Out)

-각 페이지가 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법

->이해하기 쉽고, 프로그래밍 및 설계가 간단하다.

3.LRU(Least Recently Used)

-최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법

->각 페이지마다 계수기(Counter)스택(Stack)을 두어 현 시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래전에

   사용된 페이지를 교체한다.(계수기나 스택과 같은 별도의 하드웨어가 필요하다.)

4.LFU(Least Frequently Used)

-사용 빈도가 가장 적은 페이지를 교체하는 기법

->활발하게 사용되는 페이지는 사용횟수가 많아 교체되지 않고 사용된다.

->프로그램 실행 초기에 많이 사용된 페이지가 그 후로 사용되지 않을 경우에도 교체되지 않는다.

프레임의 할당

-프로세스 여러 개가 동시에 수행되는 상황에서 각 프로세스에게 얼마만큼의 메모리 공간을 할당할 것인지를 결정해야 한다.

3가지 방식

-균등할당 방식: 페이지 프레임은 균일하게 할당

-비례할당 방식: 프로세스의 크기에 비례해 페이지 프레임 할당

-우선순위 방식: 프로세스 우선순위에 따라 할당 -> CPU에서 실행될 프로세스에게 더 많은 페이지 프레임 할당

 

 

쓰레싱(Thrashing)

-집중적으로 참조되는 페이지들의 집합을 메모리에 한꺼번에 적재하지 못하면, 페이지 부재율이 크게 상승해

 CPU 이용율이 급격히 떨어질 수 있다.

 

 

메모리 사상 파일(Memory-mapped Files)

-파일의 일부 영역을 가상 메모리 일부에 연결해주는 메커니즘이다.
데이터를 파일과 연결돼 있는 가상 메모리 영역에 저장하면 메모리에만 데이터가 
저장돼는 게 아니라
연결된 파일에도 저장된다
.

'CS > 운영체제' 카테고리의 다른 글

파일 시스템  (0) 2019.04.09
보안  (0) 2019.04.09
보안 Security  (0) 2019.03.29
운영체제 구조  (0) 2019.01.21
운영체제 서론2  (0) 2019.01.11
Comments