1) 기억장치 관리
(1) 개요
① 초기의 컴퓨터
- 주기억장치(main memory)는 매우 비싼 자원
- 효율적 이용과 관리를 위한 노력은 당연할 수 밖에 없음
② 컴퓨터 기억장치
- 주기억 장치 : 용량이 제한 (보조기억 장치에 비해 많이 작음) / 처리 속도가 빠름 (CPU와 동기적으로 동작) / 값이 비싸다 / 전원이 꺼지면 삭제됨
- 보조기억 장치 : 용량이 크다 / 처리속도가 느리다 (SSD로 극복) / 값이 싸다 / 전원이 없어도 삭제되지 않음
2) 기억장치(주기억장치)의 구성
- 기억장치 관리기법은 운영체제 발전의 역사화 함께 발전
- 1명 사용
- 2명 이상의 다중 사용자 허용?
→ 할당 크기는 어떻게?
→ 고정 분할 (fixed partition) : 사용자별로 같은 크기 할당
→ 가변 분할(variable partition) : 사용자별로 다른 크기 할당
→ 할당된 크기의 변화 가능성
→ 정적 분할 (static partitioning) : 최초 할당 크기 유지
→ 동적 분할 (dynamic partitioning) : 실행중에 할당 크기 변화 허용
3) 주소 바인딩 (address binding)
- 보조기억 장치에 저장되는 프로그램은 논리적 주소(logical address)로 저장
- 프로그램이 주기억장치로 탑재되면 물리적 주소(physical address, real address)로 변경
→ 주소 바인딩 (address binding)
4) 주소 바인딩 시점
① 컴파일 시간 바인딩
→ 컴파일 할 때, 프로세스가 탑재될 주기억장치의 위치를 정확하게 알 수 있으면 처음부터 물리적 주소로 컴파일 가능
→ 탑재 위치가 바뀌면 컴파일 새로 해야..
② 적재 시간 바인딩
→ 컴파일러는 재배치 가능한 코드로 실행 파일 생성
→ 로더(load)에 의해 주기억장치에 탑재될 때 주소 바인딩 됨
③ 실행 시간 바인딩
→ 프로세스가 실행 중에 위치가 주기억장치에서의 위치가 변경될 때 처리됨
5) 논리적 주소 & 물리적 주소
① 논리적 주소 (logical address)
→ CPU가 생성하는 주소
→ 가상 주소(virtual address)라고도 함
② 물리적 주소 (physical address)
→ 주기억장치의 실제 주소 (real address)
→ 실제 프로그램 코드와 데이터 등이 저장되는 공간
* 모든 논리적 주소는 주기억장치의 물리적 주소로 변환되어야 함
** 주소 매핑(address mapping)은 기억장치관리기(MMU : Memory Management Unit)에서 한다.
6) 기억장치의 계층구조, 관리 기법
① 기억장치 계층구조의 변화
→ CPU (레지스터) - 주기억장치 - 보조기억장치
→ CPU (레지스터) - 캐시(cache) 기억장치 - 주기억장치 - 보조기억장치
② 기억장치 관리 기법
(1) 인출(fetch) 기법
→ CPU가 필요한 다음 프로그램 / 데이터를 언제 주기억장치로 가져올 것인가를 결정하는 것
(1)-(1) 요구 인출(demand fetch) 기법 : CPU가 참조하려는 시점에 주기억장치로 옮김
(1)-(2) 예상 인출 (anticipatory fetch) 기법 : 요구될 가능성이 큰 것을 미리 예상하여 주기억장치로 옮겨 놓음
(2) 배치(placement) 기법
→ 인출 기법으로 가져온 프로그램 / 데이터를 저장할 주기억장치의 위치를 결정하는 것
→ 새 데이터를 저장할 빈 공간이 있을 때
(1)-(1) 최초 적합 (first-fit)
(1)-(2) 최적 적합 (best-fit)
(1)-(3) 최악적합 (worst-fit)
(3) 교체(replacement) 기법
→ 주기억장치의 빈 공간 마련을 위해 무엇을 제거할 것인가를 결정하는 것
→ 새 데이터를 저장할 빈 공간이 없을 때