기억장치 용어
1차 기억장치 -> RAM이라고 생각하면 편하다.
2차 기억장치 -> HDD, SSD
=> 이 부분에서 알아둘 것은 RAM은 프로세스로 존재하고, SSD, HDD등은 프로그램으로 존재한다.
1.가상 기억 장치 기본 개념
◈가상 기억 장치(virtual memory)
-사용자가 보조 기억장치에 해당하는 커다란 기억 장소를 갖고 있는 것처럼 생각하고 프로그램을 작성 가능케 해준다.
-다중 프로그래밍을 기반으로 한다.
⊙ 사용자의 프로그램 + 데이터 + 스택등의 크기가 이용할 수 있는 물리적인 주기억장치를 초과할 수 있다는데 있음
-주기억장치가 부족할 경우를 가정한다/
⊙ 프로그래머가 주기억장치의 한계를 걱정할 필요가 없게한다.
-그렇다고 메모리를 마구잡이로 쓰라는 것은 아니다. 대신 램의 한계를 걱정하면서 예외처리를 할 경우의 수를 줄인다? 정도의 의의를 갖는다.
⊙ 구현하기 어려우며, 시스템 성능이 저하될 수 있음.
-다다익램인 이유. RAM을 초과할 경우 프로그램의 일부를 다른 곳에 임시로 저장해야할텐데 많은 오버로드를 동반한다.
⊙ 주기억장치 관리자의 주소 공간 추상화(abstraction), 기억장치 할당(allocation), 기억 장치 분리(isolation), 기억 장치 공유(sharing)등 모든 기능이 적용된다.
=> 따라서 하드디스크나 SSD가 용량이 가득 차거나 거의 찼다면 가상 기억장치를 사용하지 못한다! 용량이 가득 찬 경우 자연스럽게 컴퓨터의 성능이 크게 하락할 것이다.
=> 말 그대로 virtual(가상) 이기 때문에 더 크고 넓은 세상을 가질 수 있다고 보면 편하다.
아래는 단어들을 정리한 것이다.
...
◈가상 주소 or 논리주소(logical address)
- 수행 중인 프로세스가 참조하는 페이지 주소. 즉 보조기억 장치 번지.
- 이들의 주소의 집합을 virtual address space(가상 주소 공간)라고 부름.
◈실 주소(real address) or 물리주소(physical address)
- 주기억장치의 사용 가능한 주소
◈가상 주소 변환(VAT: virtual address translation)
-가상 주소를 실 주소로 변환하는 함수(아래에서 추가 설명)
◈세그먼트와 페이지
-크고 작은 실행가능 프로그램은 블록(block)으로 나뉘어서 수행된다. 실행 프로그램이 들어가기 때문에 주기억장치에서 작동한다.
-세그먼트(segment) => 블록을 가변 크기로 나눈다.
-페이지(page) => 블록을 고정 크기로 나눈다.
왜 굳이 두개로 나누냐 ? 하면 각자의 장단점이 존재하는데 단점을 최소화 하기 위한 노력이다.
◈페이징(paging)과 세그먼테이션(segmentation)
-주 기억 장치와 보조기억 장치 사이에서 세그먼트나 페이지를 교환하면서 프로그램을 수행하기 위해 가장 주소에서 물리 주소로 실행시간에 매핑하는 기법
2.가상 주소 변환 (매핑 과정!)
프로그램이 실행될 때 운영체제는 가상주소를 물리주소로 변환해주는 메모리 매핑 과정을 수행한다. 이를 통해 프로그램이 가상주소를 사용하여 메모리에 접근할 수 있게 되며, 실제 메모리 주소를 몰라도 프로그램이 정상적으로 실행될 수 있게된다.
일단 각자의 정의부터 명확하게 하고 넘어가자
⊙이름공간(name space) : 변수, 함수, 객체 등의 이름을 저장하는 추상적인 개념이다.. 프로그래밍에서 이름공간은 변수나 함수를 정의할 때 사용된다. 네임스페이스를 사용하면 같은 이름의 함수나 클래스도 명확하게 나눌 수 있다.
⊙가상주소 : 프로그램이 실행될 때 사용되는 메모리 주소. 프로그램은 가상주소를 사용하여 메모리에 접근하며, 운영체제는 이 가상주소를 물리적인 메모리 주소로 변환해주는 작업을 수행한다.
⊙물리주소 : 실제 물리적인 메모리 주소를 의미한다.
컴퓨터 시스템에서는 프로그램이 실행될 때, 가상주소를 물리주소로 매핑하여 실제로 메모리에 접근한다.
대체 왜 굳이 주소를 변환하는 과정을 거칠까 ?
- 효율 :여러 개의 프로세스가 같은 함수를 호출하는 경우, 해당 함수의 코드는 하나의 메모리 공간
- 보안 : 각각의 프로세스가 자신의 메모리 공간을 침범하지 못하도록 보호
등등으로 그냥 메모리 관리의 효율을 위한 것이다.
◈사상 (mapping)
- 가상 주소와 물리 주소의 대응 관계, 혹은 가상 주소로부터 물리 주소를 찾아 내는 일.
=> 말 그대로 가상의 주소이기 때문에 가상 주소가 존재해야할 물리적인 주소가 필요하다. 허공에 정보를 저장할 수는 없지 않은가 ? 아무리 가상의 주소여도 물리적으로 저장할 곳이 필요하다.
=>예시로 프로세스 A랑 B가 있다고 쳐보자.
프로세스 A가 의미하는 가상주소 0x0000 0000랑 프로세스 B 가상주소 0x0000 0000가 다를 수 있다. 각 프로세스의 주소가 분리되었기 때문이다. 그러나 물리적 주소 0x0000 0000에 두개의 프로그램이 존재할 수는 없다. 따라서 운영체제는 A와 B를 적당한 물리적 메모리에 나누어서 담는 과정을 거치는 것이 쉽게 설명한 매핑이다.
◈페이지 부재(page fault) : Bt(i) = Ω 이라면 이루어 지는것.
⊙Bt(i) = Ω 방정식
-Bt()는 페이지를 가져오는데 걸리는 시간 방적이다.
-Ω 는 최악의 시간
=> 페이지를 가져오는데 최악의 경우, 주기억장치에 페이지가 fault할 것이다. 라는 뜻이다.
◈artificial continuity(인위적인 연속성)
모든 프로세스의 가상 주소 공간상의 연속된 페이지 주소들은 물리주소 공간상의 페이지 프레임 주소로 변환되는데, 이 페이지 주소가 반드시 연속적일 필요가 없다는 의미이다.
-인위적인 연속성을 위해 연속된 블록을 할당하다보면, 주기억장치의 빈 공간이 연속적으로 존재하지 않는 경우가 발생할 수 있다 -> 내부 단편화
-작은 조각으로 나누어진 여러 개의 빈 공간이 발생하기 때문에 메모리 낭비가 발생합니다. -> 외부 단편화
내, 외부 단편화는 ch.5에서 다룬다.
3. 페이징 기법
◈순수 페이징
메모리 관리 기법 중 하나로, 프로세스의 논리 주소 공간을 고정 크기의 페이지로 나누어서 관리하는 방식각 페이지는 고유한 페이지 번호를 가지며, 이 페이지 번호를 사용하여 페이지 테이블에서 물리 주소를 찾아내어 메모리에 접근합니다.
순수 페이징에서의 주소 변환 과정은 다음과 같다.
- 프로세스가 생성되면, 운영체제는 해당 프로세스의 주소 공간을 페이지 단위로 분할합니다.
- 프로세스는 각 페이지에 대한 가상 주소를 사용하여 메모리에 접근합니다. 이때 가상 주소는 페이지 번호와 페이지 내에서의 오프셋으로 구성됩니다.
- 가상 주소 중 페이지 번호를 사용하여 해당 페이지의 페이지 테이블 항목을 찾아냅니다.
- 페이지 테이블 항목에는 해당 페이지의 물리 주소가 기록되어 있으므로, 이를 사용하여 실제 메모리에서 데이터에 접근합니다.
- 만약 페이지 테이블에 해당 페이지의 물리 주소가 기록되어 있지 않다면, 페이지 폴트(Page Fault)가 발생합니다. 이때 운영체제는 디스크에서 해당 페이지를 찾아서 메모리로 로드합니다.
처음에 말했다 싶이 페이지는 고정된 크기로 나누는 방식인데, 페이지로 분할한 뒤 이를 번호와 오프셋으로 구성하는 방식이다.
+페이징에서 각 프레임마다 보호비트를 구현해서 기억장치를 보호한다.
+유효비트, 무효비트로 가상 주소 공간에 존재하는지 아닌지를 판단한다 => 페이지는 주기억장치 뿐만이 아닌 보조기억장치에도 존재하기 때문이다.
+주소변환 Bt는 메모리 관리장치 MMU에 의해 수행된다.
정리 : 순수 페이징은 페이지들을 물리 메모리에 연속적으로 할당하지 않는 방식으로, 페이지들은 물리 메모리에 분산되어 할당된다. 따라서 주소공간을 확장할 수 있다. Array와 List의 차이를 생각하면 이해하기 편할 것이다.
그러나 이 방식은 외부 단편화를 가져온다 => 작은 조각으로 나누어진 여러 개의 빈 공간이 발생하기 때문에 메모리 낭비가 발생
2) 페이지 부재 처리
1. 프로세스가 페이지를 참조하는데 페이지 부재를 발생시킨 프로세스는 중단한다.(없는걸 찾아봐야 의미 없으니까 일단 실행을 중단하고 찾아본다)
2. 페이지 보호비트를 검사한다
3. 기억장치 관리자는 가상기억 장치에서 가용 페이지를 찾는다.
4. 페이지가 주기억장치에 적재되고, 상황에 따라 다른 페이지가 해제 되기도 한다!
5.기억장치 관리자의 페이지 테이블은 갱신된다.
6.프로세스는 중단되었던 시점에서 다시 시작한다.
연관사상/ 순수 페이징 혼용
◈연관 사상(associative mapping)은 캐시 메모리와 같은 작은 크기의 메모리 영역에서 빠르게 검색하기 위해 사용되는 기법
일반적으로 메인 메모리는 크기가 큰 반면, CPU가 직접 접근할 수 있는 속도는 느리기 때문에 캐시 메모리를 두어 CPU가 필요로 하는 데이터나 명령어를 빠르게 접근할 수 있도록 합니다. 캐시 메모리에는 메인 메모리의 일부 데이터를 복사해 두는데, 이를 캐시 블록(cache block)이라고 합니다. 캐시 블록은 메인 메모리에서 가져올 때 그 위치가 일치하는 것이 보장됩니다.
연관 사상에서는 캐시 메모리에 데이터를 저장할 때 캐시 블록을 자유롭게 배치하고, CPU가 데이터를 요청했을 때 전체 캐시 블록 중에서 요청된 데이터를 찾아내는 방식입니다. 이 때 캐시 블록 내부에서 데이터의 위치를 찾기 위해 태그(tag)라는 정보를 이용합니다. 태그는 요청된 데이터가 메인 메모리 어디에 저장되어 있는지를 나타내는 정보입니다.
-뜬금없이 나와서 뭔가 했는다 자세히 읽어보니 컴퓨터 구조시간에 배웠던 기억이 난다. 운영체제를 공부하기 전에 컴퓨터 구조가 선행되어야 한다.
연관 사상은 페이지들을 물리 메모리에 연속적으로 할당하는 방식으로, 페이지 테이블의 인덱스를 물리 주소의 일부로 사용하여 페이지 테이블의 접근 횟수를 줄이고 페이지 테이블을 검색하는 데 걸리는 시간을 최소화한다. 이 방식은 내부 단편화 문제가 있으며, 물리 메모리의 크기에 제한을 받기 때문에 주소 공간을 축소시키는 문제가 있다.
순수 페이징은 주소 공간을 확장할 수 있는 장점이 있다.
연관 사상과 순수 페이징을 혼용하는 방법에서는 세그먼테이션과 페이징을 함께 사용하여, 큰 주소 공간을 관리할 수 있고, 물리 메모리에서의 페이지 할당 문제를 해결할 수 있다. 세그먼테이션으로 큰 주소 공간을 분할하고, 각 세그먼트 내에서는 페이지를 사용하여 물리 메모리에 할당하면 외부 단편화 문제를 해결할 수 있으면서도 물리 메모리에서 페이지 할당 문제를 최소화할 수 있다 !
페이지 테이블 구조
가상 주소를 물리 주소로 매핑하는 데 사용되는 데이터 구조. 일반적으로 운영 체제에서 각 프로세스마다 하나의 페이지 테이블이 생성된다.
1) 계층구조 페이지 테이블(Hierarchical Page Table)
가상 주소 공간을 여러단계의 페이지 테이블로 나누는 것이다.
왜 이렇게 계층적으로 나누냐 ? 하면
프로그램의 크기가 커져서 주기억장치(RAM)에 한 번에 올릴 수 없는 경우가 많기 때문에 보조기억장치에 저장된 프로그램을 필요할 때마다 일부씩 주기억장치에 가져와서 실행한다. 이 때 페이지 테이블은 이러한 페이지들이 어떤 주소에 매핑되어 있는지 기록둔다.
하지만 페이지 테이블이 매우 큰 경우가 있는데, 이 때문에 모든 페이지 테이블을 한번에 관리하는 것은 매우 힘든 일이기에 때문에 페이지 테이블을 계층적으로 구성하여 관리하기 위해 만들어진 구조다.
2) 해시 페이지 테이블(Hashed Page Table)
방금 설명한 페이지 테이블의 단점인 크기와 검색 속도를 개선하기 위해 고안된 기술
애초에 운영체제를 배울정도면 자료구조를 어느정도 알 것이다. 메모리 탐색속도를 개선하기위해 해시함수를 쓰는 일반적인 해시테이블과 구조가 거의 동일하다고 보면 될 것이다.
+같은 위치에 해시되는 항목들은 체인 형태의 연결 리스트로 만든다.
+또한 현대 컴퓨터는 용량이 굉장히 크기 때문에 해시 페이지 테이블인 경우가 많다.
3) 역 페이지 테이블 (Inverted Page Table)
페이지 테이블의 역할을 하는 자료 구조로 구조는 비슷하지만, 물리적인 메모리 주소를 기준으로 가상 메모리 주소를 찾아내는 데 사용된다.
말 그대로 역의 역할을 한다. 가상 메모리 주소 => 물리적 메모리 주소 를 반대로 행한다.
역페이지 테이블은 다음과 같은 단점을 지닌다.
1.메모리 공유 불가 - 모든 페이지와 프레임이 일대일 대응 관계이므로 프로세스간 메모리 공유가 불가능
2.페이지 테이블 참조 오버헤드가 큼 - 매핑할 때 마다 테이블에서 pid/p 값을 찾아야함최악의 경우 페이지 테이블의 끝까지 탐색.
4. 세그먼테이션 기법
5.가상 기억장치 관리 정책
우선 프로그램을 분할함으로써 얻는 이득이 무엇인지 생각해보자.
사용자는 자유롭게 프로그래밍이 가능하다 -> 처음에 말했듯이 메모리가 물리적으로 부족한 경우를 고려하지 않고 프로그래밍이 가능하기 때문에 생산성 증대에 도움이 된다.
CPU의 이용률과 처리율이 증가한다. ->
5-2(fetch strategic) 반입정책
요구 페이징(demand paging) : 수행중인 프로세스에 의하여 호출된 페이지나 세그먼트를 주 기억 장치로 옮기는 기법
프로그램이 실행될 때 옮기는 기법이다. 아래의 예상 페이징과 다른점은 프로그램이 올라는 시점.
장점 :
-호출되는 페이지는 실제로 참조되는 페이지
-
-
단점 :
예상 페이징(anticipatory paging) 기법
장)
-캐시메모리 히트율 미리미리 올려놓고 잘 히트가 되면 대기시간을 줄이는 것이 가능.
예측 결정이 옳았으면 감소.
-정확한 결정이라면 다른 프로세스 실행에 영향을주지 않는다. -> 당연하다.
-하드웨어의 비약적인 발전으로 실패했을 때의 릿크가 심각하지 않다.
단)
-옳지 않았다면 오버헤드가 크다. -> 예상하기 힘들다는 뜻이다.
-사용가능 페이지를 선정하는 것이 현실적으로 어렵다.
5-3 교체 정책 (replacement strategy)
정의 :
1) 최적 교체 알고리즘
-실질적으로 구현하기 쉽지 않은 알고리즘이다. 아래의 단점에서 알 수 있다.
가장 오랫동안 사용되지 않은 페이지를 교체한다.
장 : FIFO의 모순을 피할 수 있고, 최소의 페이지 부재율을 갖는다.
단 : 페이지 호출 순서를 모든 상황에 맞게 미리 파악하기 어렵고 현실적이지 못하다.
Ex) 페이지 참조열이 7 0 1 2 0 3 0 4 2 3 2 3 ...일 경우
아래의 페이지 프레임은 3개이다.(세로열의 길이)
'컴퓨터과학 > 운영체제' 카테고리의 다른 글
ch.01 운영체제(Operating system) 개관 (0) | 2023.04.30 |
---|