메인 메모리(main memory) == 주기억장치 == Random Access Memory(RAM)
CPU가 직접 접근할 수 있는 기억 장치
프로세스가 실행되려면 프로그램이 메모리에 올라와야 한다
RAM은 DRAM(주기억장치), SRAM(캐시, 레지스트리)가 있음
CPU는 레지스터가 지시하는대로 메모리에 접근하여 다음에 수행할 명령어를 가져옴
명령어 수행 시 메모리에 필요한 데이터가 없으면 해당 데이터를 우선 가져와야 함
이 역할을 하는 것이 바로 MMU.
MMU (Memory Management Unit, 메모리 관리 장치)
CPU 코어안에 탑재되어 가상 주소를 물리주소로 변환해 준다.
메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어
메모리의 공간이 한정적이기 때문에, 사용자에게 더 많은 메모리를 제공하기 위해 '가상 주소'라는 개념이 등장
(가상 주소는 프로그램 상에서 사용자가 보는 주소 공간이라고 보면 됨)
이 가상 주소에서 실제 데이터가 담겨 있는 곳에 접근하기 위해선 빠른 주소 변환이 필요한데, 이를 MMU가 도와주는 것
메모리 관리(Memory Management)
어떤 프로그램이든 프로세스가 되어 프로세서에 적재되기 위해서는 메모리에 적재되어야 실행이 가능하다.
따라서 메모리는 중요한 작업 공간이고 한정된 메모리를 다중 프로그래밍 환경에서 이용하기 위해서는 여러 프로세스가 함께 메모리를 사용하므로 효율적인 관리를 해야한다.
메모리 관리 정책
적재 청책(Fetch Policy)
디스크에서 메모리로 프로세스를 언제 가져와야 할지를 정하는 것이다.
배치 정책(Placement Policy)
디스크에서 메모리로 가져온 프로세스를 어느 위치에 저장 할 것인지 정하는 것이다.
대치 정책(Replacement Policy)
메모리가 충분하지 않을 때 현재 메모리에 적재된 프로세스 중 제거할 프로세스를 결정하는 방법이다.
바인딩(Binding)
일반적으로 속성과 개체 사이 또는 연산과 기호 사이와 같은 연관 ( Association )
변수에 변수와 관련된 속성을 연관시키는 것
값들이 확정이 되어 구속(Bind) 된 상태
함수 호출된 부분에서 함수가 위치한 메모리 번지를 연결
바인딩 타임(Binding Time)
프로그램에서 변수들이 갖는 속성이나 값이 완전히 결정되는 시간. 즉, 이름에 속성이 연결되는 시간
바인딩 타임의 종류(Variety of Binding Time)
1. 컴파일 시간 (Compile Time)
- 프로세스가 메모리에 적재될 위치를 컴파일 과정에서 알 수 있다면 이때 바로 물리적 주소를 생성 할 수 있다.
- 굉장히 비효율적이다
- 컴퓨터 안에서 하나의 프로그램만 실행할 때는 위 방식을 사용했다
- 절대 코드라고 부른다
2. 적재 시간(Load Time)
- Loader의 책임하에 물리적 메모리 주소 부여
- 컴파일러가 재배치 가능 코드(relocatable code)를 생성한 경우 가능
- 프로그램이 시작돼서 메모리에 올라갈 때 물리적인 메모리 주소가 결정되는 것
(ex 실행시킬 때 메모리 500번지가 비어있는 것을 보았다 -> 500번지에 올린다) - 재배치 가능 코드
3. 실행 시간(Run Time)
- 실행 시 주소가 결정되는 것은 같으나, 실행 도중에 주소가 바뀔 수 있다는 것을 말한다
(프로그램이 실행되다 경우에 따라서는 메모리에서 쫓겨날수도 있고, 바인딩될 수도 있다) - CPU가 주소를 참조할 때마다 binding을 점검(address mapping table)
- 하드웨어 자원이 필요하다(ex base and limit registers, MMU)
Overlays(Manual Overlay)
- 메모리에 프로세스 중 실제 필요한 정보만을 올림
- 프로세스의 크기가 메모리보다 클 때 유용
- 오버레이는 초창기 컴퓨터의 메모리가 작기 때문에 하나의 프로그램도 올리기 어려웠고, 그 때문에 큰 프로그램을 수작업으로 쪼개서 올리는 코딩을 한 것
스레싱(thrashing)
프로세스가 집중적으로 사용하는 페이지들의 집합이 메모리에 한꺼번에 적재되지 못하여 페이지 부재율(page fault)가 많이 발생하게 되고 CPU 이용율이 급격히 떨어지는 현상
각 프로세스가 필요로 하는 최소한의 프레임 갯수를 보장해주어야한다
'CS' 카테고리의 다른 글
개발하면서 자주 만났던 이슈 및 용어 정리 (0) | 2023.04.19 |
---|---|
[CS] 네트워크 (1) | 2023.02.28 |
[CS] UI & UX에 대해 (0) | 2023.01.29 |
[CS] 웹에서 일어나는 Push, Pull, Polling, WebSocket에 대해 (0) | 2023.01.29 |
[CS]CSRF & XSS & CORS에 대해 (0) | 2023.01.29 |