-
728x90
메모리
컴퓨터 시스템에서 메모리는 데이터를 임시로 저장하는 공간으로, 프로세서가 접근하여 정보를 읽고 쓰는 작업을 수행한다.
메모리는 크게 주기억장치와 보조기억장치로 나뉜다. 주기억장치는 주로 RAM과 ROM으로 구성되어 있으며, CPU가 직접 접근할 수 있는 메모리입니다. 반면, 보조기억장치는 HDD, SSD, 그리고 플래시 메모리 등이 있으며, 주기억장치보다는 느리지만 대용량 데이터를 저장하는 데 사용됩니다.
RAM은 데이터를 일시적으로 저장하며, 컴퓨터가 켜져 있는 동안에만 정보를 유지합니다. 프로그램 실행과 데이터 처리에 필수적인 역할을 합니다. 반면, ROM은 컴퓨터의 기본 입력/출력 시스템(BIOS)나 펌웨어 같은, 변하지 않는 데이터를 저장하는 데 사용됩니다. ROM에 저장된 데이터는 전원이 꺼져도 사라지지 않습니다.
메모리 관리 기법
논리 메모리와 물리 메모리
cpu가 프로세스를 처리할 때 보는 주소 값과 실제 메모리의 주소 값은 다르다. 프로세스가 보는 메모리 영역을 논리 메모리 영역 또는 가상 메모리 영역이라고 하고 실제로 사용되는 메모리 영역(RAM)을 물리 메모리 영역이라고 한다. 그리고 cpu가 프로세스를 실행하며 보는 주소 값을 논리 주소 또는 가상 주소라고 하며 실제 메모리에서 사용되는 주소는 물리 주소라고 한다.
연속 메모리 할당
- 고정 분할 방식: 메모리 영역을 분할한 뒤 각 영역에 프로세스를 할당 → 단편화 발생
- 가변 분할 방식: 할당할 프로세스의 크기에 따라 메모리 공간을 분할 → 외부 단편화만 발생
- 최초 적합: 가용 메모리 공간에서 프로세스 크기만큼 비어 있는 메모리 공간을 찾아 차례대로 프로세스 로드
- 최적 적합: 할당하려는 프로세스 크기 이상인 가용 메모리 공간 중에서 가장 작은 공간에 프로세스를 할당하는 방식으로 모든 가용 메모리 공간 탐색 필요
- 최악 적합: 할당하려는 프로세스 크기보다 큰 가용 메모리 공간 중에서 가장 큰 공간에 프로세스를 할당하는 방식으로 모든 가용 메모리 공간을 탐색 필요
비연속 메모리 할당
- 페이징: 프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지와 프레임으로 나눈다. 페이지와 프레임을 매핑하는 데는 페이지 테이블을 사용한다. 페이징 기법을 사용하면 물리 메모리에 연속으로 할당할 필요가 없어 외부 단편화 문제를 해결할 수 있지만 프로세스의 마지막 페이지가 페이지 크기보다 작을 수 있으므로 내부 단편화 문제가 발생할 수 있다.
- 스와핑: 안 쓰는 프로세스를 잠시 하드디스크에 저장하는 방식
- 요구 페이징: 프로세스에서 필요한 페이지만 메모리에 로드하는 방식
- 페이지 폴트: 프로그램을 실행하다 물리 메모리에 필요한 페이지가 없는 현상
- 세그멘테이션: 프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당 세그먼트 테이블을 사용해 세그먼트의 논리 주소를 물리 주소로 매핑하고 세그먼트 테이블은 세그먼트 번호를 인덱스로 사용하며 세그먼트별 시작 주소인 base와 세그먼트 길이인 limit을 저장한다. 길이가 다 다르기 때문에 외부 단편화 발생할 수 있다.
가상 메모리
프로세스의 일부만 메모리에 로드하고 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식으로 가상메모리를 사용하면 프로그램이 메모리 크기에 대한 제약을 덜 받고 동시에 많은 프로그램을 실행할 수 있고 필요한 영역만 메모리에 로드해 스와핑 횟수를 줄여 프로그램 실행 속도를 높일 수 있다.
캐시 메모리
cpu와 메인 메모리 간에 데이터 접근 시 속도 차이를 줄이기 위해 사용한다. cpu에서 메인 메모리에 있는 데이터를 가져올 때 자주 사용하는 데이터는 캐시 메모리에 따로 저장해 데이터가 필요하면 캐시 메모리에서 가져온다. 캐시 메모리에 어떤 데이터를 저장할지는 지역성을 바탕으로 결정한다. 지역성은 cpu가 자주 참조하는 데이터가 고르게 분포되지 않고 특정 부분에 몰려 있는 것을 나타낸다.
- 시간 지역성: 최근 참조한 내용을 다시 참조할 가능성이 높다.
- 공간 지역성: 실제 참조한 주소 근처의 내용을 참조할 가능성이 높다.
728x90'엘리스트랙' 카테고리의 다른 글
인터넷과 HTTP 복습! (0) 2024.03.31 네트워크 복습! (0) 2024.03.31 2차 프로젝트를 끝내며! (0) 2024.03.22 2차 프로젝트 어드민 페이지 구현! (0) 2024.03.16 2차 프로젝트 개인정보 페이지 구현! (0) 2024.03.16