CPU관점에서 간략하게 살펴보자
1. CPU는 메모리에 프로그램이 올라와야 읽고 실행 할 수 있다!
2. 메모리에 올라온 프로그램 -> 프로세스!
- OS는 프로세스를 어떻게 관리하는가? PCB
- 프로세스의 라이프 사이클, 쓰레드, 스케쥴링
- IPC, 그리고 공유자원 문제, 교착상태
메모리 관리
운영체제에 의해 메모리 관리가 필요한 이유
메모리는 공유자원
메모리 보호
- 프로세스의 독립된 메모리 공간 보장
- 다른 프로세스로부터 보호
메모리 용량 한계 극복
- 여러 프로세스의 메모리 합이 설치된 물리 메모리보다 큰 경우 필요
메모리 효율성 증대
- 가능하면 많은 개수의 프로세스를 실행시키기 위해서
- 프로세스당 최소한의 메모리 할당
메모리는 컴퓨터 시스템 곳곳에 계층적으로 존재
- CPU레지스터 - CPU캐시 - 메인메모리 - 보조기억장치
- CPU레지스터에서 보조기억장치로 갈수록
- 용량 증가, 가격 저렴, 속도 저하
- 메모리 계층 구조의 중심은 메인 메모리
그렇다면 왜 메모리를 계층화 했을까?
바로 CPU가 메모리에 접근하는 시간은 최대한 줄여 프로그램의 실행 속도를 올리기 위해서이다.
메모리 관리는 왜 어려운가?
- 폰노이만 구조 -> 메모리는 컴퓨터의 유일한 작업공간이라 모든 프로그램은 메모리에 올라온다.
- 일괄처리 시스템 : 한번에 하나의 프로그램만 실행시킴으로 메모리 관리가 단순하다.
- 다중 프로그래밍 : 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와야 한다.
- 유일한 작업공간을 같이 쓰다보니..
- 여러 프로세스간 침범이 안되게 하면서
- 그러면서 필요한 공간은 충분히 할당해줘야 하고
- 가능한 많은 프로세스를 동작시켜야 하는데, 메모리는 부족하고...
메모리 관리의 이중성
- 프로세스 : 가능한 많은 메모리를 쓰고 싶어함(메모리 독점)
- OS/관리자 : 가능한 메모리를 적게 주고 싶어함. 가능한 효율적으로..
컴퓨터의 메모리를 어떻게 관리 할 것인가?
-> 메모리 관리자의 작업/정책
- 적재 정책(Fetch policy)
- 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
- 요구반입 vs 예상반입
- 배치 정책(Placement policy)
- 가져온 프로세스를 메모리의 어떤위치에 올려놓을지 결정하는 정책
- 최초 적합 vs 최적 적합 vs 최악 적합
- 재배치(교체) 정책(Replacement policy)
- 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책
- 최적 교체, FIFO, LRU(Least Recently Used), LFU(Least Frequently Used)
MMU
Memory Management Unit의 약자로 일반적으로 MMU가 메모리 관리자로 불린다.
위 그림에서 빨간색 점선을 따라가보자
- 논리주소를 물리주소로 바꾸는 하드웨어 장치
- CPU가 발생시킨 논리 주소는 MMU에 의해 물리 주소로 바뀌어 메모리에 도달한다.
- 오늘날 MMU는 CPU 안에 내장
- MMU 덕분에 여러 프로세스가 하나의 메모리에서 실행될 수 있다.
메모리 오버레이
프로그램의 크기가 실제 메모리(물리 메모리)보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법 즉, 프로그램이 실행되면 현재 필요한 부분만 메모리에 올라와 실행 -> 바꿔가면서(swap)
가상메모리 공간
- 각 프로세스는 자신이
모든
메모리를 점유하고 있는 것처럼 생각한다.
swap
- 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
- 메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기에 저장장치는 장소만 빌려주고 메모리 관리자가 관리
- 사용자는 실제 메모리의 크기와 스왑 영역의 크기를 합쳐서 전체 메모리로 인식하고 사용