본문 바로가기
about COMPUTER/컴퓨터 시스템

# 07. 하드웨어와 운영체제(2) / 메모리 관리

by saniii 2020. 10. 15.

[ 하드웨어와 운영체제(2) - 메모리 관리 ]

 

 

+ 저장장치 계층 구조 (about 하드웨어 )

* 캐시(cache) : 메인메모리보다 작은 용량

    - 메인 메모리의 일부만 저장하며 좀 더 빠른 저장소에 정보를 복사하는 것을 캐싱이라고 함

    - 캐싱은 재사용성을 목적으로 함

    - 똑같은 메모리를 여러 곳에서 요청하면 캐시를 이용하여 빠르게 보냄

    - secondarymain memoryswap area로도 쓰일 수 있음

 


 

+ 프로그램 실행시의 메모리 load 순서

작성한 코드가 컴파일 되면 실행파일 형태로 하드디스크(file system, 비휘발성)에 저장됨

이 파일이 실행되면 프로세스로 메모리에 로드되어 실행되는 것

 

근데 바로 물리적인 메모리로 가는 건 사실 아님

한단계 있는데 그건 바로 virtual memory

가상메모리는 실행차일이 실행되면 0번지로 시작하는 독자적인 주소(주소공간)가 생성된다.

이게 code / data/stack 이 세가지로 나뉘는데

code는 연산, data는 변수 , stack 주로 함수에 대한 정보

이게 피지컬 메모리로 로드됨 다 올라가면 공간 낭비니까

당장 필요한 일부분만 메모리에 올려 효율적으로 메모리를 사용한다.

 

프로그램 실행중에 삭제하는 메모리를 swap area(휘발성)에 올린다.

 

 

* 커널은 항상 상주하는 영역이고 사용자 프로그램은 실행 후에 사라지는 영역

 


+ 프로그램이 사용하는 함수

* 사용자 정의 함수          

          자신의 프로그램에서 정의한 함수

* 라이브러리 함수

          자신의 프로그램에서 정의하지 않고 갖다 쓴 함수

          자신의 프로그램의 실행 파일에 포함되어 있다

 

(위 두가지는 사용자 프로그램에 포함되어 있다. 프로세스 something의 가상메모리의 code영역)

 

* 커널 함수

          운영체제 프로그램의 함수

          사용자프로그램은 커널 함수를 호출할 수 없으므로 OS를 통해 호출 = 시스템 콜

                    (커널 영역의 가상 메모리의 code 영역)

 


+ Cache Memory

* CPU와 main memory 간의 속도 차이를 보완하기 위해 cache memory를 사용함

 

* 캐시(cache) : 메인메모리보다 작은 용량

    - 메인 메모리의 일부만 저장하며 좀 더 빠른 저장소에 정보를 복사하는 것을 캐싱이라고 함

* caching : 재사용성을 목적으로 함 / 똑같은 메모리를 여러 곳에서 요청하면 캐시를 이용하여 빠르게 보냄

* cache의 용량이 한정적이므로 어떤 정보를 저장하고 삭제할지가 중요함

 

시간지역성 :

공간지역성 :

(이런 locality를 이용하여 cache를 효율적으로 관리)

 

 

* Hit rate: 전체 요청 중 cache에서 직접 처리된 요청(=cache hit)의 비율

 

* Miss rate: 요청 blockcache에 존재하지 않는(=cache miss) 비율

 

* Miss rate = 1 - Hit Rate

- 보통 miss rate를 많이 사용함

  (값이 더 낮은 경우가 많고 숫자의 차이를 명확하게 표현하기 위해)

- hit rate가 높기만 하다고 다 좋은 것은 아님

  이게 좀 낮아도 hit time이 더 좋을 때가 있다. (L1 캐시?)

 

* Hit time: cache hit cache 접근에 소요되는 시간

 

* Miss penalty: cache miss 시 아래 계층에서 cacheblock을 읽어들이는데 소요되는 시간

 

* Average memory access time = Hit time + Miss rate x Miss penalty

 

캐시에 원하는 데이터가 있으면 ht만 있으면 되고

원하는 데이터가 없으면 미스된 ms mp 만큼 더 소요되는 것

miss rate은 이미 캐시에 한번 접근 한 것 ?

 

 

 

+ Cache Memory vs Virtual Memory

L1

 

 


 

메모리 관리에 대해 3가지 정도의 이슈가 있다.

 

+ Block Placement

: Cache에 진입하는 blockcache 상의 어느 위치에 보관할지 결정하는 문제

 

> Direct Mapped

cache 상의 진입 위치가 한 군데로 고정

빠른 Hit time이 중요한 L1 cache에서 사용 (block identification 때문에)

비교적 느림

 

> Fully associative

cache 상의 아무 곳에나 위치할 수 있음

Miss penalty가 지나치게 큰 가상메모리계층에서 사용

주로 dram에서 사용 최대한 하드 디스트 sec로 가서 읽어오는 횟수를 줄이는 것이

   설계 목적이므로 메모리를 효율적으로 활용해야 한다.

비교적 단순한 구현 방식. 빠른 속도

 

> Set associative (위 두 가지의 절충안)

Cache 상의 제한된 위치인 set 내의 아무 곳에나 위치 가능

Set 내에 n개의 block 저장공간이 있다면 n-way set associative

L2/L3 cache 등에서 주로 사용

 


+ Block Identification

Block Identification 문제 : cache 내에 요청 block이 있는지를 찾는 문제

 

fully를 쓰면 hit time이 오래 걸리기 때문에

 

 


+ Block Replacement

: 새로운 blockcache에 보관을 위해 cache에서 쫓아낼 block을 결정하는 문제

 

> Direct Mapped

No choice (진입할 위치가 한군데이므로 쫓겨날 대상도 하나로 고정됨)

 

> Set Associative

Random: 하드웨어 구현이 단순하나 효율성이 떨어짐

LRU (Least Recently Used) 알고리즘

     가장 오래전에 사용된 block을 쫓아냄

     하드웨어적 구현이 Random에 비해 복잡하나 성능이 우수함

 

> Fully Associative (main memory) -> 소프트웨어적 구현

LRU 알고리즘 (linked list)

CLOCK 알고리즘

     • block들을 최근에 사용되었는지 여부에 따라 두 부류로 나눈 후

       최근에 사용되지 않은 부류에서 쫓아낼 block을 선정

     LRU에 비해 구현부담이 적어 가상메모리 계층에서 주로 사용

 


 

+ Cache Miss의 종류

 

> Compulsory miss

최초의 block 접근시 발생하는 miss

cold start miss라고도 부름

 

> Capacity miss

cache 용량이 유한하여 발생하는 miss

공간 부족으로 cache에서 쫓겨난 block이 다시 요청된 경우 발생

Fully associative인 경우에도 발생

 

> Conflict miss

Direct mapped(또는 유한한 set associativity) 환경에서 동일 위치로 매핑된 block 간의 collision에 의해 발생

 

 

 

 

댓글