메모리 관리의 개요
메모리 이해하기
메모리 주소
1B로 나뉜 메모리의 각 영역은 메모리 주소로 구분하는데 보통 0번지부터 시작
1kb 메모리의 경우 8bit(행)*공간(열) : 8bit 씩 저장공간이 1k(0~1023)개 있다
256워드가 있다. → 주소를 짧은 bit로 표현이 가능하다. trade off해서 주소변환이 가능하다. 순서의 상관을 쓰지 않는다.
주소: 16진법을 쓴다.
주소는 8bit 단위 32bit = 1word
CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 주소를 사용
메모리 관리의 복잡성
메모리는 폰노이만 구조의 컴퓨터에서 유일한 작업 공간이며 모든 프로그램은 메모리에 올라와야 실행 가능(운영체제도 마찬가지)
일괄처리 시스템은 한번에 하나의 프로그램만 실행시킴으로 메모리 관리가 단순함
시분할 시스템에서는 운영체제를 포함한 실행중인 모든 프로세스가 메모리에 적재되어 있기 때문에 메모리 관리가 복잡함
메모리 관리의 이중성
프로세스 입장에서는 메모리를 독차지하려 하고, 메모리 관리자 입장에서는 되도록 관리를 효율적으로 하고 싶어하는 성질
운영체제는 이 두가지 충돌을 타협하여 메모리 관리
소스코드의 번역과 실행
언어 번역 프로그램의 종류
컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행(C 언어, 자바 등)
컴파일러의 목적에는 코드 최적화 포함
인터프리터: 소스코드를 한 행씩 번역하여 실행(자바스크립트, 파이썬 등)
컴파일 과정
소스코드 작성 및 컴파일
오류찾기와 최적화
목적 코드와 라이브러리 연결
링커가 연결해준다.
동적 라이브러리를 포함하여 최종 실행
동적 라이브러리는 실행 시에 포함됨으로 컴파일 필요 없음
exe 파일이 커지지 않는다. 작업환경에 저장된다.
실행하려면 load(적재)되어야 하는데 이를 loader가 해준다.
메모리 관리 작업
메모리 관리자는 가져오기, 배치, 재배치 작업시, 각각의 정책을 수립하여 관리함.
메모리 가져오기(fetch)
실행할 프로세스와 데이터를 메모리로 가져옴
필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책