-
(14) 메모리CS 지식/○ OS(Operating System) 2021. 6. 28. 20:42
1. 주메모리장치란?
1-1) 정의
메인 메모리는 CPU가 직접 접근할 수 있는 접근장치
기본적으로 모든 부분에서 중간 결과 저장의 역할을 맡고 있음
참조 :
https://korshika.tistory.com/120?category=970463
https://korshika.tistory.com/124?category=970463
1-2) 특징
- 프로세스가 실행되려면 프로그램이 메모리에 올라와야 함
- 요즘에는 메모리에 모두 할당하지 않고 가상메모리 구조로 사용하는 부분만 올려놓고 사용 - 주메모리장치는 주소가 할당된 일련의 바이트들로 구성되어있다
1-3) 연산과정
참조 4-1)번 항목 : https://korshika.tistory.com/125?category=970463
- 주기억 / 보조기억 장치에 있는 프로그램을 load하여 읽어옴
- CPU 레지스터의 지시(적힌)대로 메모리에 접근하여 다음 명령어를 가져옴
- 명령어 가져온 후 수행 시, 필요 데이터가 없으면 해당 데이터를 MMU가 가져와 메모리에 적재
> MMU
- 가상 메모리 접근이 필요할 때 동작하는 하드웨어 장치
- 메모리 관리장치, 논리주소를 물리주소(실제 RAM상의 주소)
- 메모리 보호, 캐시관리 등 CPU가 메모리에 접근하는 모든것을 총 관리 - 가상주소 / 논리주소에 데이터를 올려놓고, 연산을 하여 다시 주기억장치에 결과를 저장
※ 3 , 4번 거치면서 주기억장치 ↔ CPU 사이에 캐시, 레지스터를 거침
※ 가상주소는, 물리적으로는 모여있지 않아도, 프로그램의 관점에서 사용하는 주소이며
OS가 제공하는 가상 공간에대한 주소값이다 - 1~4번 반복
2. 가상 메모리
참조 : https://probe29.tistory.com/25
2-1) 정의
프로세스가 어느 시점에 사용하는 메모리/CPU자원은 제한적이기 때문에,
특정 시점에 CPU가 사용하는 공간만을 메모리에 적재하는 개념이 가상메모리
2-2) 필요 이유
다중 프로세스마다 충분한 메모리를 전부 확보하기에는 무리가 있기 때문에
폰노이만 구조에 의해 메모리에 적재된 코드형태와 함께 사용하기 위해 가상 메모리가 필요한 것
(코드는 반드시 메모리에 적재되어야 함)
→ 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고 쓸때만 물리주소로 바꿔주면 됨
2-3) MMU ( Memory Management Unit )
(a) MMU 정의
- 가상 메모리 접근이 필요할 때 동작하는 하드웨어 장치
- 메모리 관리장치, 논리주소를 물리주소(실제 RAM상의 주소)
- 메모리 보호, 캐시관리 등 CPU가 메모리에 접근하는 모든것을 총 관리※ 주소변환을 빠르게 하기 위해 실제 하드웨어로 MMU를 구성하여 속도를 높임
(b) MMU 메모리 보호
프로세스는 독립적인 메모리 공간을 가져야하므로
한 프로세스에 전용 주소 영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호
- 메모리 보호 예시- 프로세스 접근가능 합법 메모리 영역은
base <= x < base+limit
- 해당 영역 밖에서의 요구는 trap을 발생시켜 처리
- base / limit 영역은 사용자 영역 말고 kernel mode에서만 처리 가능하도록 함
3. 메모리 과할당 ( over allocating )
3-1) 정의
실제 메모리 가능 사이즈 보다, 더 큰 메모리 사이즈를 가진 프로세스를 할당을 하는 상황
3-2) 과할당 방생 원인
페이징 기법과 같은 메모리 기법을 통해서 가능한 메모리 자원 보다 더 큰 메모리를 활용할 수 있도록 하는데,
이 때 사용자의 편의성을 확보하기 위해 속인것을 들킬만한 상황이 존재한다※ 페이지 폴트 trap
프로그램이 자신의 가상메모리 공간, 주소에는 있는 메모리 주소이지만, 실제 RAM 주기억장치에는 올라오지 않았을 때
접근을 시도하였을 경우 발생하는 현상을 말한다
→ 해결 방법
- 요구 페이징 : 요구가 들어온 메모리에 대해 그 시점에 데이터를 메모리에 적재를 하는 것
https://korshika.tistory.com/155?category=970462
- 페이지 교체 알고리즘 :
요구 페이징 알고리즘을 통해 메모리를 효율적으로 관리하는데, 만약 실제 메모리 주소가 가득찬 경우
페이지 swap을 해주어야 하며 교체를 하는 알고리즘을 돌려 요구된 데이터를 실제 메모리에 올린다.3-3) 과할당 해결
- 프로세스 실행 도중 페이지 폴트 발생
→ 페이지 폴트 미발생시 바로 메모리에 적재, 끝 - 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음
- 메모리의 빈 프레임 / 연결된 빈 페이지에 데이터를 올려야 하는데, 모든 메모리가 사용중이라 빈 프레임이 존재하지 않음
- 페이지 교체 알고리즘에 따라 page-out을 하여 page-in을 할 수 있도록 swap을 해준다
- 프로세스 지속 수행
> 프로세스를 지속 수행할 때 over-head가 많이 줄어야 큰 문제없이 사용자가 컴퓨터를 사용할 수 있음
3-4) 페이징 교체 오버헤드 줄이기
참조 : https://korshika.tistory.com/155?category=970462
페이징교체 알고리즘에 따라, 페이지 frame 수를 늘리거나, 효율적인 교체 알고리즘을 선택하여 빈번한 교체를 막아
over-head를 최대한 줄이도록 한다- FIFO
- OPT
- LRU
4. 캐시 메모리
참조 : https://korshika.tistory.com/124?category=970463
4-1) 정의
주기억장치에 저장된 데이터의 일부를 임시로 저장해두는 기억장치
CPU와 주기억장치 사이 level에 위치하여 속도차이로 인한 성능저하를 막기위한 방법
자주 사용하는 데이터를 빠르게 접근하여 속도를 높일 수 있음
4-2) 캐시 동작방식
- ( CPU → 레지스터 ) 에서 데이터 주소를 전송
- 캐시 기억장치에 데이터가 존재하는지 확인
> 존재 / hit
- 해당 명령어를 CPU로 전송, 데이터 확인 완료
> 비존재 / miss
- 주기억장치로 접근
4-3) 캐시 hit을 높이기
캐시에 hit이 높을 수록, 효율이 좋으므로
보통 시간과 공간을 따져서 자주 쓰이는 데이터들을 집중적으로 캐시에 올려 hit을 높이는 방식
- 시간지역성 : for loop안의 데이터와 같이 최근에 참조된 주소의 내용은 가까운 시점에 다시 참조되는 특성을 이용
- 공간지역성 : 프로그램상에서 list / array등과 같이 인접하게 위치한 주소 영역이 다시 참조되는 특성을 이용
4-4) 캐싱 라인
(a) 정의
저장한 캐시 데이터들을 효율적으로 조회하기 위해서
( 효율적으로 조회할 수 없으면 캐시를 쓰는 의미가 없으므로 )
자료구조를 활용해서 캐시 데이터를 저장하도록 하는데 이를 "캐싱 라인" 이라고 함
(b) 방식
캐시에 저장하는 데이터에 데이터 메모리 주소를 함께 저장하여 빠르게 조회할 수 있도록 함
참조
https://slenderankle.tistory.com/189
https://gyoogle.dev/blog/computer-science/operating-system/Memory.html
반응형'CS 지식 > ○ OS(Operating System)' 카테고리의 다른 글
(13) 페이지 교체 알고리즘 (0) 2021.06.28 (12) 페이징 & 세그먼테이션 (0) 2021.06.26 (11) 세마포어(Semaphore) & 뮤텍스(Mutex) (0) 2021.06.26 (10) 경쟁 상태 ( Race Condition ) (0) 2021.06.24 (9) 데드락 ( Dead lock) (0) 2021.06.23 - 프로세스가 실행되려면 프로그램이 메모리에 올라와야 함