OS ch8

4. 메모리

4.1 메모리 역사

메모리 용량 증가 vs 프로그램 크기 증가 → 메모리는 항상 부족

어떻게 하면 효과적으로 사용할 수 있을까?

  • 메모리 낭비 없애기
  • 가상 메모리

4.2 메모리 주소

  • 주소 (address) + 데이터 (data)
  • 프로그램 개발

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/20b294c9-8235-48fb-aecc-fc7b752b546e/Untitled.png

    • source file: 고수준언어 또는 어셈블리언어
    • object file: 컴파일/ 어셈블 결과
    • executable file: 링크 결과
  • 프로그램 실행
    • code + data + stack (함쑤호출, 지역변수)

MMU 사용

  • Relocation register 재배치 레지스터
  • 주소구분

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/61ba5d60-fd2f-42a4-9039-4aed75c3c6e0/Untitled.png

    • 논리주소 (CPU) vs 물리주소 (메인메모리)

4.3 메모리 낭비 방지

(1) Dynamic Loading 동적 적재

프로그램 실행에 반드시 필요한 루틴/데이터만 적재 → 실행시 필요할때만 해당 부분을 메모리에 올림

ex) 오류 처리, 배열

(2) Dynamix Linking 동적 연결

여러 프로그램에 공통 사용되는 라이브러리를 메모리에 중복으로 올리는 것은 낭비

→ 라이브러리 루틴 연결을 실행시까지 미룸

→ 오직 하나의 라이브러리 루틴만 메모리에 적재, 다른 애플리케잇션에서 실행시 이 루틴과 연결

  • 공유라이브러리 shared library
  • dyanamix linking library

(3) Swapping 스와핑

[https://miro.medium.com/max/60/0SKlK0mL_5VChpjah?q=20](https://miro.medium.com/max/60/0SKlK0mL_5VChpjah?q=20)

메모리에 적재되어있으나 현재 사용되지 않는 프로세스 이미지를 Backing store (swap device, 메인메모리 크기 정도임) 로 몰아내기

  • 교체 시간의 대부분이 전송시간이다.
  • swap out : backing store 로 가는것
  • swap in: backing store 에서 메인메모리로
  • Relocation register 사용으로 적재 위치는 무관
  • 프로세스 크기가 크면 Backing store 입출력에 부담이 됨
  • https://neos518.tistory.com/12