[ 하드웨어와 운영체제(2) - 메모리 관리 ]
+ 저장장치 계층 구조 (about 하드웨어 )
* 캐시(cache) : 메인메모리보다 작은 용량
- 메인 메모리의 일부만 저장하며 좀 더 빠른 저장소에 정보를 복사하는 것을 캐싱이라고 함
- 캐싱은 재사용성을 목적으로 함
- 똑같은 메모리를 여러 곳에서 요청하면 캐시를 이용하여 빠르게 보냄
- secondary는 main memory의 swap 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: 요청 block이 cache에 존재하지 않는(=cache miss) 비율
* Miss rate = 1 - Hit Rate
- 보통 miss rate를 많이 사용함
(값이 더 낮은 경우가 많고 숫자의 차이를 명확하게 표현하기 위해)
- hit rate가 높기만 하다고 다 좋은 것은 아님
이게 좀 낮아도 hit time이 더 좋을 때가 있다. (L1 캐시?)
* Hit time: cache hit 시 cache 접근에 소요되는 시간
* Miss penalty: cache miss 시 아래 계층에서 cache로 block을 읽어들이는데 소요되는 시간
* 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에 진입하는 block을 cache 상의 어느 위치에 보관할지 결정하는 문제
> 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
: 새로운 block을 cache에 보관을 위해 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에 의해 발생
'about COMPUTER > 컴퓨터 시스템' 카테고리의 다른 글
# 09. 프로세스 관리 (0) | 2020.10.20 |
---|---|
# 08. 프로세스 (0) | 2020.10.20 |
# 06. 하드웨어와 운영체제(1) / 컴퓨터 시스템 구조 (0) | 2020.10.15 |
# 05. 운영체제 OS (0) | 2020.10.15 |
# 04. 프로그램 컴파일 과정 (고급언어가 실행되기 까지) (0) | 2020.10.15 |
댓글