제 7장. 물리 메모리 관리
메모리 주소
1B(바이트)로 나뉜 메모리의 각 영역은 메모리 주소로 구분하는데 보통 0번지부터 시작
CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 주소를 사용
주소 → 포인터(메모리에 대한 주소 개념)
OS가 메모리를 관리하는 단위 : phage(4Kbyte)
1-1 메모리 관리의 복잡성
과거의 일괄처리 시스템은 한번에 하나의 작업만 처리하므로 메모리 관리가 단순함
오늘날 시분할 시스템에서는 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와 실행되기 때문에 메모리 관리가 복잡함
1-2 메모리 관리의 이중성
프로세스 입장에서는 메모리를 독차지하려 하고, 메모리 관리자 입장에서는 되도록 관리를 효율적으로 하고 싶어서 충돌이 발생
충분히 크지 않은 메모리에서 여러 작업을 동시에 실행하는 문제에서 비롯됨
1-3 소스코드의 번역과 실행
언어 번역 프로그램의 종류
컴파일러 : 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행(c언어, 자바 등)
인터프리터 : 소스코드를 한 행(줄)씩 번역하여 실행(자바스크립트, 파이썬 등)
컴파일러 방식의 목적
오류 발견 : 소스코드에서 오류를 발견하여 실행 시 문제가 없도록 하는 것
소스코드 최적화 : 코드를 간결하게 정리하여 실행 속도를 빠르게 하는 것
컴파일러와 인터프리터의 차이
컴파일러 : 실행 전에 소스코드를 점검하여 오류를 수정하고 필요 없는 부분을 정리하여 최적화된 실행 파일을 만든다
인터프리터 : 한 줄씩 위에서부터 아래로 실행되기 때문에 같은 일을 반복하는 경우나 필요 없는 변수를 확인 할 수 없다.
→ 크고 복잡한 프로그램에서는 컴파일러를 사용하고, 간단한 프로그램에서는 인터프리터를 사용
1-4 메모리 관리 작업
메모리 관리 작업 : 가져오기 / 배치 / 재배치
가져오기
실행할 프로세스와 데이터를 메모리로 가져옴
필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
배치
가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정
페이징(paging) : 메모리를 같은 크기로 자르는것(책의 모든 페이지가 같은 크기인 데에서 유래)
세그먼테이션(segmentation) : 프로세스의 크기에 맞게 자르는 것
배치 정책은 페이징과 세크먼테이션의 장단점을 파악하여 메모리를 효율적으로 관리할 수 있도록 정책
재배치
꽉 찬 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보냄(HDD로 내보냄, swap)
메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책
2-1 32bit 와 64bit CPU차이
CPU의 비트
bit는 한번에 다룰 수 있는 데이터의 최대 크기
32bit CPU는 한번에 다룰 수 있는 데이터의 최대 크기가 32bit
32bit CPU내의 레지스터 크기는 전부 32비트, 산술논리 연산장치와 대역폭도 32bit
32bit CPU의 메모리 크기
표현할 수 있는 메모리 주소의 범위가 0~2^32-1, 총 개수가 2^32
16진수로 나타내면 00000000~FFFFFFFF 총크기는 2^32바이트 → 4GB
결론 : 32bit CPU컴퓨터는 메모리를 최대 4GB까지 사용할 수 있다.
64bit CPU의 메모리 크기
2^64-1번지의 주소 공간을 제공
결론 : 무한대에 가까운 메모리
물리 주소 공간(Physical address space)
하드웨어 입장에서 바라본 주소 공간으로 컴퓨터마다 크기가 다름 → 사용자는 확인 불가