★★★★★★★

 

  1. Address
    1. Physical address / Logical address
    2. Absolute address / Relative address
  2. Physical Address
    1. 컴퓨터의 메인 메모리에 접근할 때 사용되는 주소
  3. Logical Address
    1. 프로세스 관점에서 사용되는 주소
    2. CPU에 의해 발생한다.
  4. Memory Management Unit (MMU)
    1. Logical AddressPhysical Addresstranslate 시킨다.
    2. 서로 다른 프로세스가 서로 같은 Logical Address를 쓸 수 있지만, MMU를 통해 서로 다른 Physical Address에 매핑되어있다.
  5. Fixed Partition : 고정되게 메모리 쪼개기
    1. Physical Address = Base Address + Logical Address
    2. 장점
      1. Base register 값을 읽거나 주면 되므로 구현이 간단하고 Context switch가 쉽다.
    3. 단점
      1. Partition Size
      2. Internal Fragmentation : 메모리를 프로세스에게 exclusive하게 나눠준거라서 남은 공간을 다른 프로세스가 할당 받지 못하게 된다.
  6. Variable Partition : 다양하게 메모리 쪼개기
    1. 일정 크기로 쪼갤 필요 없이, 프로세스가 얼마나 필요한지 알고, 비어있는 부분을 프로세스에게 주는 것
    2. 메모리 사이즈를 체크해서 할당하므로 Internal fragmentation이 발생하지 않는다.
    3. 단점
      1. External Fragmentation : 메모리가 쪼개져서 프로세스 하나가 그만큼의 크기의 메모리를 할당받지 못한다.
    4. 해결책
      1. Compaction : 앞으로 밀착시켜서 Contiguous하게 만든다.
      2. Paging : 아예 작게 잘라서 조금씩 준다.
  7. Segmentation : Variable Partition의 확장
    1. Address space의 4가지인 Code, Data, Heap, Stack을 서로 다른 Segment로 놓는다.
    2. 모두 다르게 allocation 할 수 있다.
    3. 프로세스는 자신의 Address space를 Segment의 collection으로 본다.
    4. 따라서 자신의 Segment Table을 참조해야 한다.
    5. 단점
      1. 여전히 External Fragmentation이 발생한다.
      2. Segment Table 새로 바꿔야할 수도 있다.

 

  1. 대부분의 모든 프로세스는 (            ) address로 동작한다.
  2. Fixed Partition에서 Physical address = (     ) address + (      ) address

 

  1. Logical
  2. base, logical


 

 


 


 

 

Address란? 


 

다양한 Addressing 방법이 있다.

physical address : 정확한 주소로 나누는 것

logical address : 지역을 정해서 나누는 것 (팔달구, 영통구)

Absolute address : GPS

Relative address : 팔달관은 어디에? 성호관 길에서 좀 더 위로


 

 

 

 

 

 

 

1) 물리 주소 (Physical address)
  (1) 컴퓨터의 메인 메모리를 접근할 때 사용되는 주소
  (2) 기억 장치의 주소 레지스터에 적재되는 주소

 2) 가상 주소 (Virtual address)
  (1) 프로세스 관점에서 사용하는 주소
  (2) 어느 메모리 모델을 사용하느냐에 따라, CPU 관점의 주소가 물리 주소가 될 수도, 가상 주소가 될 수도 있다.
  (3) 논리적인 주소이기 때문에, 주소 공간을 의미있는 단위로 나누어 사용할 수 있다.
   - 인텔의 경우, 주소 공간을 의미 있는 단위인 세그먼트(segment) 로 나누어 사용하지만, 일반적으로 disabled 되어 있다.

 

 

대부분의 모든 프로세스는 Logical address로 동작을 한다.

실제 메모리가 필요하다면 Logical address를 Physical address로 전환한다.

 


 Fixed Partition 

물리적 메모리를 미리 몇 개의 partition으로 나눔
분할의 크기가 모두 동일할 수도 있고, 아닐 수도 있다.
분할 당 하나의 프로그램을 적재시키며 이로인해 단편화가 발생

 

각 partition의 시작주소를 가리키는 base address가 있고,

base address로부터 relative한 주소를 가리키는 virtual address가 있다.


서로 다른 프로세스가 서로 같은 logical address를 사용할지 언정

운영체제 MMU를 통해서 실제 Physical address의 서로 다른 위치로 매핑이 되었다.

 


 

Base register인 0x1000와 logical address인 0x0214 를 합하면 해당하는 프로세스의 주소가 된다.



 


 

장점

1. 구현이 간단하다.

왜? Base register이 있고 필요할 때마다 하나씩 주면 되니까

2. access가 valid한지 invalid 한지 확인하기 쉽다.

3. Context switch가 쉽다. Base register 값 읽으면 되니까

 

단점

1. Partition Size

2. Internal fragmentation 


메모리를 일정한 크기로 나눠서 프로세스들에게 나눠주는 상황이다.

프로세스들이 사용하고 남은 공간이 있기 마련이다.

프로세스 3은 많이 남았다.

 

메모리가 더 필요한데 해당하는 프로세스에게 exclusive하게 나눠준 거라서,

남아있는 공간은 다른 프로세스가 사용하지 못하게 된다.

이런 상황을 Internal Fragmentation 이라고 한다.

다른 애가 갖다 쓰지 못하는 상황

 


 Variable Partition 

 

Variable Partition : 일정 크기로 쪼갤 필요 없이, 프로세스가 얼마가 필요한지 알고 비어있는 부분을 해당하는 프로세스에게 주는 것

 


Logical address와 Base address를 더해서 참조해보고 Limit register안에 있으면 



 

 

단점 

 External fragmentation 

다 쓰고 반환하고 다 쓰고 반환하고 하면 hole이 흩어지게 되어있다. 

쪼가리난 Partition만 남아서 Process X가 그 공간을 이용할 수 없게 된다.

 

어떤 Resource를 variable 사이즈로 allocation 하는 것을 반복하다 보면은 available resource가 점점 잘게 쪼개지면서 Address space resource가 여기저기 흩어지게 되어서, 어느 순간이 되면 allocation하고 있지 않은 메모리 크기의 합은 요청한 것 보다 충분히 크게 있지만 다 쪼개져 있어서 contiguous한 chunk를 만들 수가 없어서 allocation을 못하게 된다.

 


 

External fragmentation 해결책  

Compaction : 앞으로 밀착시킨다. Contiguous하게 만든다.

Paging : 아예 작게 잘라서 조금씩 준다.


 

Variable Partition을 쓰려면 Memory Allocation Stratge를 고려해야 한다.

 

 

 

Best fit : (hole의 크기 - allocate 크기)가 가장 작은 

별로 중요 x


 

하나의 프로세스가 가져가는 Address space를 Segment 단위로 쪼개서,

Segment 단위로 allocation 하면 훨씬 flexible 하게 allocation 할 수 있지 않을까?


 

프로세스의 Address space의 4가지인 Code, Data, Heap, Stack 을 서로 다른 Segment로 놓을 수 있다.

하나하나를 다르게 allocation 시킬 수 있다.

 

그래서 프로세스가 보기에 자기의 Address space는 Segment들의 collection으로 본다.


 

하나의 address space을 segment로 쪼개고 각각 다른 곳에 저장한다.


 

 

limit과 비교해서 access 할 수 있으면 들어가고

limit보다 크거나 하면 잘못된 애들을 참조하니까 process가 죽는다.


 

 

segment table을 참조해야한다.


 

더 이상 하나의 프로세스가 하나의 큰 chunk로 갈 필요가 없다.

해당하는 Chunk가 밑으로 자라거나 위로 자랄거 같은 것을 고려해서 Address space를 줄 수 있다.

얼마나 필요한지 예측하기가 쉽지 않아서 Variable Partition보다는 Segmentation을 사용한다.

 

그치만 문제도 있다.

1. 여전히 External fragmentation이 발생한다.

2. Segment table도 문제이다. 왜냐하면 Segement table을 통째로 갈아치워야 하기 때문이다.

 

 

 

 

'🚦 Server > Operating System' 카테고리의 다른 글

20. Page Tables  (0) 2020.06.20
19. Paging and Page Tables  (0) 2020.06.14
17. Deadlock  (0) 2020.06.11
16. Synchronization (3)  (0) 2020.05.26
15. Synchronization (2)  (0) 2020.05.26
복사했습니다!