clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • uikit
  • ㅅ
  • Swift
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

운영체제(OS) - 메모리 관리(Basic Memory Management)
CS/운영체제

운영체제(OS) - 메모리 관리(Basic Memory Management)

2022. 6. 7. 16:22

Real Memory(Real Storage)

실제 메모리(주 기억장치)라고도 한다.

메모리는 CPU와 상호작용을 통해 CPU는 메인메모리에 주소로 접근하면 CPU는 메모리에서 해당 주소에 위치한데이터를 가져온다.

 

주소의 개수

128M의 Ram이 있을 경우

M(메가바이트) = 2의 20승

128 = 2의 7승

2^20 * 2^7 = 2^27만큼의 주소 개수가 사용된다.

 

 

재배치 문제

a와 b는 개별 프로그램의 메모리구조이며 각 메모리마다 0~16380의 메모리 영역을 차지한다..

a를 실행하면 0번이 실행되고 24번으로 점프한 후 나머지가 실행되고 끝난다.

b는 28번으로 점프해서CMP(비교)를 실행하고 프로그램이 끝난다.

 

이렇게 작성된 프로그램을 한개의 메모리에 적재를 시킨다. a가 낮은 주소 영역(흑색), b가 높은 주소 영역(흰색)이다.

한 메모리에 적재가 되었지만 프로그램을 수정해주지 않게 된다면 프로그램 a에선 문제가 없지만 프로그램 b에선 점프가 일어날 때 엉뚱한 프로그램인 a로 점프를 하게된다.

해당 프로그렘의 주소영역이 아닌 다른 프로그램의 주소 영역을 침범하게 되며 에러가 발생한다. 이게 재배치 문제.

 

재배치 문제 solution 1. 고정분할 Absolute Loading.

각 프로그램은 고정된 장소로 적재되게 된다.

파티션 별로 크기와 공간을 나누고 해당된 공간에 해당된 프로그램을 적재한다고 할 경우 문제가 생긴다.

파티션1은 10k의 공간을 차지하고, 파티션 2는 100k, 파티션 3은 1m의 공간을 차지한다고 할 경우 파티션2에 들어가야하는 프로그램은 당연히 파티션 1에 들어가지 못한다.

왜냐하면 공간이 부족하기 때문.

1. 파티션3이 비어있어도 파티션 2에 들어가야하는 프로그램은 파티션3에 들어갈 수 없다. 공간의 활용도가 매우 떨어진다.

2. 파티션2에 프로그램이 들어갔는데 90k만 차지하고 있더라도 남는 10k 공간에 다른 프로그램이 들어가지 못한다. 남는 10k의 메모리가 사용될 수 없다.

 

재배치 문제 solution 2. 고정분할 Relocatable Loading.

파티션을 크기별로 나눈다. 이후 프로세스는 공간이 충분하다면 어디든 들어갈 수 있다. 이러면 재배치 문제가 생기게 되는데 재배치 문제가 발생할 때 마다 주소값을 고쳐주어야 한다.

 

재배치와 보호

재배치(Relocation): 프로그램 코드와 데이터를 위한 적재 주소를 할당하고 코드 및 데이터를 할당된 주소에 적합하게 조정해주는것.

 

정적 재배치

- 프로그램을 적재할 때 참조하는 주소를 직접 수정해주는 것.

- IBM360의 Loader: 재배치가 이루어질 때 메모리의 주소들을 바꿔주는 프로그램

 

동적 재배치 및 보호를 위한 해결

base와 limit값을 사용한다. 

실제 물리적 주소의 한계값은 base값에 address를 더한 것인데, 재배치가 이루어 질때 address >= limit이면 error를 발생한다.

 

주소의 종류

Logical address

- 프로세스마다 독립적으로 갖는 공간.

- 논리적인 주소 체계로, 0번지를 시작으로 상대적인 주소 값을 갖는다.

- CPU에서 인식하는 주소 체계이다.

- virtual / relative / relocatable address 라고도 한다.

 

Physical address

- 실제 물리적인 메모리 위치를 식별하는 주소

- absolute address라고도 한다.

 

Symbolic address

- 변수나 함수와 같이 코드에서 사용하는 상징적인 이름을 주소로 사용하는 방법 -> 프로그래머가 이해하기 쉽다

 

Address Binding

만약 프로그램에다가

int a = 2

이런 코드를 쓰면 a라는 번지에 2를 쓰는(write)것.

근데 실제로 CPU가 명령을 수행하면

store #4920, 2     //(4902는 임의의 주소)

이렇게 되는데, 이 #4920이란 메모리 번지를 언제 결정하느냐가 크게 3가지가 있다.

1. compile time binding,

2. load time binding

3. execution time(Run-time)

이 메모리 번지를 언제 어떻게 결정 하느냐가 어드레스 바인딩, 주소할당이라고 한다. -> 한 주소 공간에서 다른 주소공간으로 매핑하는 과정

 

 

Compile time binding

- 컴파일 시간(Compile time)에 물리 주소를 결정하는 것으로, 실행 파일에 물리주소를 포함시킨다.

- 논리주소와 물리주소가 같다.

 

프로그램에 절대주소(Physical address)가 포함되어 있으므로 프로세스를 로드하는것이 빠르지만, 생성된 주소공간이 다른 프로그램에 의해 점유되어 있을 경우 충돌이 발생할 수 있기 때문에, 프로그램을 다시 컴파일 해야하는 상황이 생긴다.

이러한 이유로 다중 프로그래밍이 가능한데 현대 OS환경에선 실효성이 떨어져 사용하지 않는 방법이다.

 

Load time binding

- 로드 시간에 논리주소를 물리주소로 바인딩하는것.

- Loader에 의해 재배치 가능한 주소가 절대 주소로 변환된다.

- 컴파일러가 주소를 결정할 수 없는 경우 symbolic address를 Logical address로 변경한 후 Loader에 의해 Physical address로 변경한다.

 

Execution time(Runtime) binding

- 실행 시간에 논리주소를 물리주소로 바인딩 하는 것.

- 현대 OS는 대부분 이 방식을 사용.

- MMU(Memory Management Unit)장치에 의해 논리주소를 물리주소로 변경한다.


Swapping

너무 많은 프로세스가 있을경우 메모리가 충분하지 않게 됨 -> Trashing이 발생함.

프로세스가 실행되려면 반드시 메모리에 올라가야 한다.

Trashing이 발생하면 사용하지 않는 x번 프로세스를 잠시 보조기억장치에 옮겨둔다. -> Swap-out(roll-out)

시간이 지나고 x번 프로세스에 이벤트가 도착했다면 다시 메모리에 올려줘야 한다. -> Swap-in(roll-in)

이런 Swap-in, Swap-out을 반복하는 일을 Swapping이라고 한다.

 

 

저작자표시 비영리 동일조건 (새창열림)
    'CS/운영체제' 카테고리의 다른 글
    • 운영체제(OS) - 페이지 교체(Page Replacement)
    • 운영체제(OS) - 가상메모리(Virtual Memory)
    • 운영체제(OS) - 세마포어(Semaphore)와 뮤텍스(Mutex)
    • 운영체제(OS) - 식사하는 철학자 문제(Dining Philosophers Problem)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바