운영체제_가상 메모리_하드웨어와 제어구조

미뇽·2024년 6월 8일
0

운영체제(강의)

목록 보기
25/43
post-thumbnail

하드웨어와 제어구조

페이징과 세그먼테이션의 특성

  • 프로세스의 모든 메모리 참조는 논리주소이며, 프로세스 수행 시간에 동적으로 물리주소로 변환
    => 한 프로세스가 스와핑으로 주기억장치에 적재할 때 다른 위치에 적재 가능함을 의미
  • 한 프로세스의 주소공간은 여러 블록으로 분할될 수 있고, 프로세스 수행 중 이 블록들은 주기억장치의 연속된 영역에 위치할 필요가 없음
    => 프로세스가 수행될 때 페이지(혹은 세그먼트) 테이블을 활용해 동적으로 주소를 변환함으로써 가능케됨
    => 수행 시간에 프로세스의 모든 페이지(혹은 세그먼트)가 주기억장치에 적재될 필요가 없음(적재집합)

적재집합(resident set)
프로세스의 코드나 데이터 중 임의 시점에 주기억장치에 적재되어 있는 부분

주기억장치에 적재되지 않은 논리주소가 참조(적재집합에 없는 메모리 참조)되었을 경우
-> 처리기는 메모리 접근 오류(memory access fault)를 의미하는 인터럽트 발생
-> 인터럽트 당한 프로세스를 블록 상태에 두고 제어를 넘겨받음
-> 디스크 입출력 요청
-> 다른 프로세스에게 CPU를 넘겨 디스크 입출력이 진행되는 동안 수행
-> 운영체제가 제어를 돌려받고 이전에 메모리 접근 오류를 발생시켜 블록 되었던 프로세스를 준비 상태로 전환시킴

위 새로운 기법의 장점

  • 보다 많은 프로세스를 주기억장치에 유지 가능
    - 각 프로세스에 대해 일부 브록들만 적재
  • 주기억장치보다 큰 프로세스 수행 가능
    - 프로그래밍에 있어 가장 근본적 제약점 중 하나 제거

가상 메모리 페이징/세그먼테이션

페이징과 세그먼테이션에 가상메모리를 적용했을 때와 적용하지 않았을 때

단순 페이징 / 가상 메모리 페이징단순 / 가상 메모리 세그먼테이션
주기억장치는 프레임이라 불리는 고정 크기의 작은 블록으로 분할됨주기억장치는 분할되지 않음
프로그램은 컴파일러나 메모리 관리 시스템에 의해 다수의 페이지로 분할됨프로그래머가 컴파일러에게 프로그램 세그먼트를 명시해줌(분할 방식은 프로그래머에 의해 결정됨)
내부 단편화내부 단편화 없음
외부 단편화 없음외부 단편화
각 페이지가 어느 프레임에 적재되어 있는지 나타내기 위해 운영체제는 프로세스 각각을 위한 페이지 테이블을 관리해야 함각 세그먼트의 적재 위치와 길이를 나타내기 위해 운영체제는 프로세스 각각을 위한 세그먼트 테이블을 관리해야 함
운영체제는 가용 프레임 리스트(free frame list)를 관리해야 함운영체제는 메모리에 흩어져 있는 가용 공간(free hole)들의 리스트를 관리해야 함
처리기는 페이지 번호와 오프셋을 사용해 절대 주소를 계산함처리기는 세그먼트 번호와 오프셋을 사용해 절대 주소를 계산함
단순 페이징가상 메모리 페이징단순 메모리 세그먼테이션가상 메모리 세그먼테이션
오버레이를 사용하지 않을 경우, 수행할 프로세스의 모든 페이지가 주기억장치에 있어야 함수행할 프로세스의 모든 페이지가 주기억장치에 있을 필요 없으며, 필요할 때 적재 가능함오버레이를 사용하지 않을 경우 수행할 프로세스의 모든 세그먼트가 주기억장치에 있어야 함수행할 프로세스의 모든 세그먼트가 주기억장치에 있을 필요 없으며, 필요할 때 적재 가능함
주기억장치로 한 페이지를 읽어들이기 위해 한 페이지를 디스크에 기록해야 할 수도 있음주기억장치로 한 세그먼트를 읽어들이기 위해 하나 이상의 세그먼트를 디스크에 기록해야 할 수도 있음

가상 메모리(Virtual memory)

  • 프로그래머나 사용자가 가지는 디스크 상에 할당된 훨씬 큰 잠재적 메모리
  • 효과적인 멀티프로그래밍을 허용하면서도 주기억장치를 사용할 때의 엄격한 제약을 해소시켜 줌

지역성(Locality)과 가상메모리

  • 긴 프로그램과 다수의 데이터 배열로 구성된 큰 프로세스의 경우
    - 모두 적재 시 비경제적
    => 각 프로세스는 메모리 상에 몇 개의 블록만 가지게 되고, 이를 통해 보다 많은 프로세스를 메모리에 유지할 수 있음
  • 쓰레싱(thrashing)
    - 과도한 스와핑으로 인한 블록 이동
    => 지역성의 원리(프로세스 내의 명령어 및 데이터에 대한 참조가 가지는 군집화 경향)에 기초하여 해결
  • 가상 메모리를 실용적이고 효과적으로 사용하기 위해 필요한 요소
    - 하드웨어(페이징,세그멘테이션) + 소프트웨어(블록 이동)

페이징

  • 프로세스마다 고유의 페이지 테이블을 가짐
    - 프로세스의 페이지들이 적재될 때 주기억장치에 설정
    - 각 페이지테이블 항목에는 해당 페이지가 적재된 페이지프레임의 번호와 패리티비트(존재비트) P와 함께 저장
    - 해당 페이지가 메모리에 적재된 후 그 내용이 변경되었는지 여부를 나타내는 변경비트 M를 가짐
  • 페이징의 장점
    - 투명한 페이징으로 외부단편화를 없애 주기억장치를 효율적으로 사용
    - 블록들이 고정 크기이기 때문에 프로그램의 행태에 부합되는 정교한 메모리 관리 알고리즘 개발 가능

페이지 테이블 구조


  • 메모리에서 한 워드를 읽을 때마다 페이지 번호와 오프셋으로 구성된 가상 주소가 물리 주소(프레임번호+오프셋)로 변환

  • 페이지 테이블 시작 주소 특정 레지스터에 저장

  • 일반적으로 페이지 번호 필드가 프레임 번호 필드보다 긺(n>m)

  • 프로세스당 하나의 페이지 테이블 설정으로 메모리가 큼
    => 큰 페이지테이블을 구성하기 위해 2단계 구조 사용
    - 32비트 주소체계의 경우
    - 4KB(2122^{12})의 페이지
    => 4GB(2322^{32}) 크기의 가상주소공간 설정
    => 페이지 각각이 4바이트
    => 2202^{20}개의 PTE(Page Table Entry)로 구성된 4MB(1MB*4) 크기의 페이지테이블을 만들 수 있음
    => 2102^{10}개의 페이지를 차지하는 페이지테이블이 2102^{10}개의 PTE를 가지는 4KB의 루트 페이지 테이블에 사상되어 가상메모리 상에 유지
    - 루트 페이지는 주기억장치에 상주

  • 가상 주소의 처음 10비트는 루트 페이지에 대한 인덱스로 쓰이며 사용자 페이지테이블이 저장된 페이지를 위한 PTE를 찾아줌

  • 그 페이지가 주기억장치에 없다면 페이지폴트 발생

  • 주기억장치에 있다면 다음 10비트가 사용자 페이지테이블에 대한 인덱스로 쓰여 실제 페이지를 위한 PTE를 찾음

역페이지테이블(Inverted Page Table)

  • 페이지테이블의 단점
    - 크기가 가상주소공간 크기에 비례
    => 역페이지테이블의 사용
  • 역페이지테이블
    - 페이지번호 부분이 해시함수를 통해 특정 해시값으로 매핑
    - 페이지테이블 항목의 개수가 실기억장치의 페이지프레임당 하나씩 설정
    - 동일 해시 값에 의해 오버플로우 체인 필요
  • 역페이지 테이블 제어비트
    - 유효(valid)
    - 참조(reference)
    - 변경(modify)
    - 보호(pretection)
    - 잠금(locking)

TLB(Translation Lookaside Buffer)

  • 모든 가상메모리 참조 -> 2번의 물리메모리 참조
    - 페이지테이블 항목 참조
    - 요구된 데이터 접근
    => 두 배의 메모리 접근 시간
    => 페이지테이블 항목들에 대한 특수 고속 캐시 사용(TLB)
  • 가장 최근에 참조된 페이지테이블 항목들을 유지
  • 페이지테이블 항목의 존재비트가 0일 경우 페이지폴트(page fault) 발생

작동순서

  • 가장 처음 TLB에 페이지테이블 항목이 있는지 확인
    - 있을 경우(TLB hit) -> 바로 프레임 번호 추출되어 실주소 구성
    - 없을 경우(TLB miss) -> 페이지 번호로 페이지테이블을 인덱싱하여 페이지테이블 항목 참조
  • 요구된 페이지가 주기억장치에 없을 때 페이지폴트 처리 루틴(인터럽트) 호출
  • 지역성의 원리에 의해 대부분의 가상주소 참조는 최근에 사용된 페이지들 내의 위치들로 한정 -> 대부분의 참조는 캐시 안에 있는 페이지테이블 항목과 연계

TLB와 캐시

직접사상

  • 페이지 번호가 곧 페이지 테이블 내에서 인덱싱하여 직접적으로 접근할 수 있게끔 사용됨

연관사상

  • TLB는 페이지테이블의 일부 항목들만 포함. 대신 항목들은 페이지 번호도 포함해야 함
  • 처리기에 특정 페이지 번호와 일치하는 TLB 항목이 있는지 조사하는 하드웨어 장착

TLB와 캐시의 동작

- 메모리 시스템은 일치하는 페이지테이블 항목이 TLB 상에 존재하는지 조사 - 존재 -> 프레임 번호와 오프셋이 결합된 실주소 생성 - 비존재 ->페이지테이블 상의 해당 항목 접근 - 실주소 생성 - 해당 워드를 포함한 블록이 캐시 상에 존재하는지 조사 - 존재 -> 캐시 상의 해당 워드가 CPU에게 보내짐 - 비존재 -> 해당 워드는 주기억장치로부터 읽힘

페이지 크기와 페이지 폴트의 관계

  • 내부 단편화
    - 페이지가 작을수록 적어짐
  • 페이지가 작을 경우
    - 큰 페이지테이블 필요
    - 두 번의 페이지폴트 가능성(페이지테이블 + 프로세스페이지)
    - 페이지의 개수가 많아져 페이지폴트 빈도 감소
  • 페이지가 클 경우
    - 개별 페이지들이 최근의 참조로부터 보다 멀리 떨어진 위치를 포함하여 지역성의 원리에 따른 효과 감소
    -> 페이지폴트 발생률 증가
    - 페이지 크기가 프로세스 전체 크기일 경우 페이지폴트 발생 X
  • 한 프로세스에 할당된 프레임 개수도 페이지폴트 발생률에 영향
    - 페이지 크기가 고정 + 주기억장치에 유지되는 페이지 개수가 증가하면 프레임이 많아지면서 폴트 발생률이 떨어짐
  • TLB 크기가 고정되어있다고 할 때 프로세스의 메모리 크기가 커지며 지역성이 줄어들면서 TLB의 적중률 또한 감소
  • 커지는 메모리에 비해 상대적으로 용량 증가가 어려운 TLB로 인한 병목지점 가능성
    - 다른 대안
    - 페이지의 크기 키우기 -> 성능이 떨어질 가능성
    - 다수의 페이지 크기를 지원하여 유연성 증가 -> 복잡하여 현실적으로 어려움

세그먼테이션

  • 메모리를 다수의 주소공간들(or 세그먼트)의 조합으로 볼 수 있음
    - 세그먼트의 크기는 동적 설정, 메모리 참조는 (세그먼트 번호, 오프셋)의 주소 형식으로 이루어짐

가상메모리의 유익

  • 점진적으로 커져가는 자료구조 처리의 단순화
    - 필요에 따라 운영체제가 동적인 세그먼트의 크기에 맞춰 확장 및 축소 가능
  • 프로그램 전체에 대한 재연결(relink)이나 재적재(reloading) 없이, 세그먼트 각각을 변경하거나 재컴파일이 가능
  • 프로세스들이 세그먼트 공유 가능
  • 세그먼트 보호 가능
    - 프로그래머나 시스템 관리자가 자신에게 용이한 방식으로 접근 권한 부여 가능

세그먼테이션 구성

단순 세그먼테이션의 경우

  • 프로세스마다 고유의 세그먼트테이블이 설정
  • 프로세스의 세그먼트들이 적재될 때 주기억장치에 설정되며 각 세그먼트테이블 항목에는 그에 대응된 세그먼트가 적재된 메모리 영역의 시작주소와 길이가 저장

가상 메모리 세그먼테이션의 경우

  • 동일한 장치로서 세그먼트테이블 필요하지만 추가 비트가 있음
    - 존재 비트 P
    - 테이블 항목에서 주기억장치에 적재되어 있는지를 나타냄
    - 변경 비트 M
    - 해당 세그먼트가 적재된 이후 그 내용이 변경되었는지를 나타냄
    - 세그먼트 교체 시 변경된 세그먼트만 구별하여 디스크에 기록할 수 있게 해줌
  • 세그먼트 + 오프셋으로 구성된 가상 주소를 물리 주소로 변환
  • 세그먼트테이블이 프로세스의 크기에 따라 가변 길이를 가져 주기억장치의 참조 가능 영역에 세그먼트테이블을 유지해야 함
  • 가상 주소의 세그먼트 번호를 세그먼트테이블의 인덱스로 사용하여 적재된 세그먼트의 시작 위치에 해당하는 주기억장치의 주소 + 가상주소의 오프셋 = 실주소 값(real address)

페이징과 세그먼테이션의 결합

페이징 고유의 장점 + 세그먼테이션 고유의 장점을 결합시키기 위해 두 기법 모두 제공되는 시스템도 있음


  • 사용자의 주소 공간이 몇 개의 세그먼트로 나뉘어지고, 이는 다시 주기억장치의 프레임 크기와 동일한 고정 크기의 페이지들로 분할됨
  • 한 세그먼트의 크기가 한 페이지 크기보다 작을 경우, 하나의 페이지만 차지
  • 프로그래머 관점에서
    - 논리주소는 여전히 세그먼트 번호와 세그먼트 오프셋으로 구성
  • 시스템 관점에서
    - 세그먼트 오프셋은 해당 세그먼트 내의 한 페이지에 대한 페이지 번호와 페이지 오프셋으로 보임
  • 페이지 테이블의 다른 제어비트의 경우 공유나 보호등을 위해 사용
  • 페이지 테이블의 변경 비트는 해당 페이지프레임에 다른 페이지를 적재하려 할 때, 기존 페이지의 내용을 디스크에 기록할 필요가 있는지 나타냄

보호와 공유

  • 세그먼테이션이 보호와 공유 정책을 구현하기에 적합
  • 각 항목에 시작 주소와 길이가 포함되어 있어 프로그램은 세그먼트 범위 밖의 주기억장치 영역에 접근 불가능
  • 공유를 위해 다수의 세그먼트테이블이 특정 세그먼트를 참조하게 할 수 있음
    - 페이징은 프로그램과 데이터의 페이지 구조가 투명하기 때문에 보호나 공유의 요건을 명확히 표현하기 어려움
  • 보다 정교한 기법들로도 가능 -> 링-보호(ring-protection)
profile
문이과 통합형 인재(人災)

0개의 댓글