오래 못 할 짓 하지 않기

[ 운영체제 ] 21. Main memory 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 21. Main memory

쫑알bot 2024. 5. 20. 09:27
728x90

이제는 CPU가 하는 일보다는,
메모리에 관련된 작업은 어떻게 이루어지는지 알아보자.


 

● 배경 지식

 

Process = 실행되고 있는 Program

 

= 이 Program은 Instruction의 집합체 이고, 

   이들은 Main memory 안에 있다.

 

 

- Memory는

많은 양의 Byte로 된 Array로 이루어져 있고, 

   이는 각각의 address가 있다.

 

▶ 따라서 CPU는 Memory에서 PC에 따라 이 Instruction들을 Fetch하여 사용한다.

 

 


 

메모리 보호

  : Process가 들어갈 수 있는 크기가 있다.
     그걸 정해주는 Register 한 쌍 : Base register / Limit register 

 

     Process 하나가 메모리에 들어가는 크기 = Limit

     Process 하나가 메모리에 들어가는 주소의 시작점 = Base Register

 

 

 

 

 

 

 

Address Binding

: 데이터를 저장할 주소를 결정하는 것

 

주로 [ Symbolic Address →  Relocatable Address→Logical Address →  Physical Address
형태로 올라간다.

 

 

Address가 정해지는 것에 관해서는 3가지 단계가 있다.

 

1. Compiler 
    : 사용자 및 컴파일러 단계

- 숫자로 된 주소를 바로 사용하지 않고 Symbolic한 주소를 사용한다.

- 만약 새로운 주소로 바꾸고 싶다면, Compile을 다시 한다.

 

 

ex) int a ; char b 처럼 만든 변수 같은 것들은 그냥 해당 주소가 Symbolic하게 사용될 뿐

    사용자가 직접 그 변수나 함수를 몇 번지에 저장하라고 하지 않는다.

 

 

= Symbolic Address 사용

 

 

 


2. Compiler에서 / Load time
    : Compiler에서 CPU로 넘겨주는 단계 

- Compiler가 Symbolic한 주소에서 Logical한 주소로 바꾼다.

   → 이 또한 실제 메모리 주소가 아닌 Logical한 메모리로 가상 메모리이다.

 

= Logical Address 사용

→ 각 프로세스마다 독립적으로 가지는 주소 공간.
     CPU가 데이터들을 처리하기 위한 주소

 

Relocatable이랑 다른건가?

 


 

 

 

3. Memory에 Load되었을 때  [ Memory 단계 ]

= Physical  Address 사용

실제로 memory에 들어있는 주소.

 

 

참고 (설명 잘 되어 있음)▼

 

 

주소는 Symbolic → Logical →  Physical 로 변환되고

각 주소가 해당 단계별로 변하는 걸 Address Binding이라고 한다.

 

언제 Physical memory address가 정해지는지에 따라 

Address Binding Time을 나눈다.

 

https://charles098.tistory.com/103

 

 

1. Compile Time에 Binding

 : 프로그램이 컴파일 될 때 주소가 매핑

 = 주소가 다 정해져 있다는 것이다.

 = 해당 주소의 메모리가 비어 있어야 정상적으로 작동한다.

 

 = Logical Address의 존재 이유가 없다.

https://charles098.tistory.com/103

 

 

 

 

2. Load Time Binding

https://charles098.tistory.com/103

 

 : 메모리에 로딩할 때 바꾸는 방법

 

 

 

 

3. Execution Time에 Binding

https://charles098.tistory.com/103

 : 실행할 때 메모리 주소를 Relocate 시키는 것

 

 = Binding을 실행 직전까지 Delay시키므로, process가 그 사이에 움직일 수 있다.

주로 이 방법을 사용함

 


Logical address / Physical address

 

● Logical  Address

: CPU에서 만들어지고, Virtual address라고도 불린다.

 

 

● Physical  Address

: memory unit에서 보이는 address

 

 

- Logical / Physical address는  Compile and load time에서는 같다.

                                     하지만  Execution time에서는 다르다.

 

 

● Logical  Address Space

: 모든 Logical address의 집합

 

 

● Physical  Address Space

: Logical address에 대응하는 Physical address의 집합

 

● MMU - Memory-management unit  

: run time에 Virtual address를 Physical address로 Mapping해주는 Hardware 

 

 

 


● Dynamic Loading

: 어떤 프로그램이 메모리로 Load되면 그걸 Process라고 한다.

 

근데 만약 프로그램이 있을 때 [ 파일 전체를 Load해야 하는가? ]

→ X , 모든 루틴을 할 필요없이 필요한 부분만!

 

   ex) 보고할 때 안녕하십니까 공병대대 본중 병장 김민혁입니다 오늘 뭐뭐뭐~~ 가 아니라

       > 오늘 뭐뭐뭐 끝 하는 것

 

 

● Dynamic Linking

: 유저가 사용하려고 하는 Program과 라이브러리를 연결시켜 주는 것

   바로 하지 않고, Execution time시작 전까지 기다렸다가 한다.

 

ex) #Include <stdlib> 만 추가하면 됨

 

 


 

Contiguous Memory Allocation 
연속 메모리 할당

https://min-h-study-review.tistory.com/255

우리는 Process들을 여기저기 뿌려놓는 게 아니라

메모리에 차곡차곡 연속적으로 쌓아둔다. 

 

 

● Variable Partition 가변 분할

: 각기 다른 크기들의 Process들이 메모리 안에서 정해진 자리에 있는 것이 아니라

  유동적으로 Partition을 치고 자리를 사용하는 것

 

ex) KTX 와 지하철의 차이

 

하지만, 이 가변 분할을 사용할 시에는 , 중간에 생기는 빈틈인 Hole을 어떻게 관리할지도 정해야한다.

 

 

● 가변 분할 메모리 할당 방법 

 

  1. First Fit
    : 가장 잘 맞는 거 찾으면 바로 Hole에 들어간다.

  2. Best Fit
    : 가장 잘 맞는 것 중에서 가장 작은 Hole에 들어간다.

    ▶ 전체 List 탐색 후 , 맞는 것 중에 가장 작은 것으로

  3. Worst Fit
    : 가장 큰 곳에 들어간다.

    ▶ 전체 List 탐색 후 , 맞는 것 중에 가장 큰 것으로

어떤 것이 가장 좋을까?


▶ First 랑 Best가 속도메모리 활용도 측면에서는 Worst보다 낫다.

▶ First 랑 Best 중에서 어느 것이 더 나은지는 알 수 없지만, First가 주로 더 빠르다.

 

 


Fragmentation
단편화

: Memory에서 남아있는 메모리의 총량은 충분히 많지만, 

 모두 흩어져있어서 사용할 수 없는 것.

 

= 메모리가 많은 양의 Hole로 산산조각 나있어서 사용할 수 없는 상황

 

ex) 7000원 필요한데 산산조각으로 찢어진 10000원 있는 경우

 

 

다음과 같이 프로세스들이 끝나고 나왔을 때

총 메모리에 비어있는 공간은 50MB인데

40MB인 프로세스 F가 들어갈 자리가 없는 상황

 

 

해결 방법  )

= Compaction

: Memory에 있는 Process들을 재정렬해서 빈 공간들을 합친다.

 

: Relocation 이 가능할 때, Execution Time에 가능하다. 

 

● 단점 )

: Expensive

 

  + 또 다른 해결 방법 : Paging / Segmentation

 

 

 

(참고)▼

https://zrr.kr/MAN4

 

한동대학교 고윤민교수님 - 운영체제

 

https://charles098.tistory.com/103