OS 페이징, 세그먼트

꾸준하게 달리기~·2023년 9월 9일
0

cs

목록 보기
16/16
post-thumbnail

들어가기 앞서

우선, 가상 메모리 시스템을 알아야 한다.

가상 메모리..?
뭐라는거지..?
싶으시면 잘 읽어보자.

지난번에, 연속 할당과 불연속 할당을 포스팅했다.
https://velog.io/@dlsrjsdl6505/OS-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-%EC%97%B0%EC%86%8D-%EB%B6%88%EC%97%B0%EC%86%8D-%ED%95%A0%EB%8B%B9

불연속 할당은,
말 그대로 프로세스가 불연속적으로 메모리에 적재된다.
즉, 찢어진다는 뜻이다.

그렇다면, 크나큰 프로세스중에서
사용중인 프로세스만 메모리에 적재해서 사용할 수는 없을까?

있다.
사용중인 프로세스만 메모리에 적재해서 사용하고,
사용중이지 않은 프로세스는 보조기억장치에 놓아두는 시스템,
그게 바로 가상 메모리 시스템 이다.


비단 컴퓨터 OS 뿐만 아니라,

위 사진과 같이 안드로이드에서도 찾아볼 수 있다.
나는 보다시피 저장공간은 충분해서, 8기가바이트의 용량을
가상 메모리로 사용하고 있다.


또 알아야 할 내용이 한가지 더 있다.
그렇다면 불연속 할당 시스템은, 프로세스가 찢어진다.
그렇다면 찢어진 프로세스들은 어떻게 찾을까?

바로 테이블을 메모리에 적재시켜 찾는다.

해당 내용은 아래와 같다.

일단 대충 페이지와 세그먼트를 찢어진 프로세스의 일부라고 하자.
그렇다면, 위의 가상 주소와 같이
(b, d) 숫자가 주어진다.

위의 사진을 보고 설명을 드리자면,
어떤 페이지나 세그먼트의 주소가 (b, d)라고 하자.

해당 숫자의 b를 통해
현재 매핑 테이블에서 해당 페이지나 세그먼트가

메모리에 적재되어있는지
(resident bit = 1)

메모리에 적재되지 않아 가상 메모리에서 가져와야 하는지
(resident bit = 0, 컨텍스트 스위칭으로 인한 자원이 소모되고,
찾는 페이지나 세그먼트가 없다! 라는 의미의 페이지 폴트 라고 함.)

여부를 확인한 후
실제 주소를 찾고 (a),

해당 실제 주소와 위치 주소 (d)를 이용해
a 페이지의 d (a + d = r)를 이용해서 원하는 자원을 찾는 방식이다.

아래의 두 시스템 페이징과 세그먼트는,
위의 방식과 같이 테이블이 존재하여
해당 테이블을 기반으로 메모리를 관리한다.

이제 위의 내용을 안다는 가정 하에 시작하겠다!


세그먼트 시스템

일단 페이징 시스템과 세그먼트 시스템을 한문장으로 설명하자면,
크나 큰 프로세스를 가상 메모리 공간에 넣을건데 어떻게 찢을거냐?
에 관한 문제이다.

세그먼트 시스템은,
가상 메모리와 실제 메모리에서 사용할 프로세스를
논리적 분할에 따라 찢는 방법이다.

물론 위의 글을 보고 이해가 가지 않을 수 있다.
그렇다면 아래 사진을 보자.

위 곤충이 하나의 프로세스라고 하면,
위 곤충은 너무 커서 메모리에 올라오지 못한다.

그런데 사용해야하므로, 나는 찢어서 메모리에 올릴 생각이다.
그런데, 어떻게 찢어야 할까?
나는 머리, 가슴, 배 와 같이
어떠한 기준을 두고 찢기로 했다.

이게 세그먼트 시스템이다.

즉,

  • 프로그램을 의미가 있는 논리적 세그먼트로 분할한다.

  • 논리적 의미로 분할되니까, 각각의 세그먼트에 있어 OS가 수행해야 할 공유나 권한에 관한 문제들이 쉬워진다.
    (공유 : 논리 단위로 찢어져 있으니, 공유하기가 쉽다.
    책을 한권씩 빌리는것에 비유하면 쉽다.)
    (권한 : 머리 프로세스에는 생각할 수 있는 권한을 주고, 배 프로세스에는 다리가 있으니 이동할 수 있는 권한을 준다.)

  • 논리적인 단위에 따라 찢게 되니,
    페이징 시스템에 비해 많은 세그먼트가 요구되어,
    메모리 관리의 오버헤드가 커진다. (서로 크기가 달라 테이블이 복잡해짐)

  • 내부 단편화는 존재하지 않는다.

  • 외부 단편화는 존재한다.

(내, 외부 단편화에 대한 설명도 이전 포스팅에 존재합니다!)




페이징 시스템

세그먼트 시스템이 논리적 역할에 따라 나누게 된다면,
페이징 시스템은 정해진 크기에 따라 나눈다.

프로세스를 그냥 일정한 크기로 찢는것이다.

그림을 보면 알겠지만, 세그먼트 시스템과 기본적인 개념은 같다.
하지만 세그먼트와 다른점은, 일정한 크기로 프로세스를 나눈다는 것이다.

특징은 다음과 같다.

  • 프로세스를 고정된 크기의 페이지로 분할한다.

  • 외부 단편화 문제에서 자유롭다.

  • 프로그램의 논리적 구조는 고려하지 않는다.

  • 공유, 권한 문제가 상대적으로 복잡하다.
    (공유 : 서로 다른 책을 권 단위가 아니라, 1.3권 이런식으로 빌려줌
    권한 : 마찬가지로, 교수에게 빌려줄 수 있는 책과 학부생에게 빌려줄 수 있는 책이 있는데, 1.3권이기 때문에 해당 책들이 섞여버릴 수 있음)


레퍼런스 : https://hpclab.tistory.com/1?category=887083

profile
반갑습니다~! 좋은하루 보내세요 :)

0개의 댓글