370 likes | 623 Views
기억 장치 관리. 주기억 장치 관리 가상 기억 장치 보조 기억 장치 디스크 스케줄링 기법. 주기억 장치 관리 메모리 공간을 프로세스들에게 할당하고 회수하는 기법. Uni-Programming. 연속할당. 고정 분할 ( 같은 크기 ). Multi-Programming. 가변 분할 ( 다른 크기 ). 페이징. 비연속할당. 세그먼테이션. Multi-Programming. 페이징 / 세그먼테이션 혼용. 연속 할당 프로세스를 위해 메모리 내 연속된 공간을 할당해 주는 방법
E N D
주기억 장치 관리 • 가상 기억 장치 • 보조 기억 장치 • 디스크 스케줄링 기법
주기억 장치 관리 • 메모리 공간을 프로세스들에게 할당하고 회수하는 기법 Uni-Programming 연속할당 고정 분할(같은 크기) Multi-Programming 가변 분할(다른 크기) 페이징 비연속할당 세그먼테이션 Multi-Programming 페이징/세그먼테이션 혼용
연속 할당 • 프로세스를 위해 메모리 내 연속된 공간을 할당해 주는 방법 • Uni-Programming -> Multi-Programming으로 발전 • 프로세스마다 할당해주는 공간의 크기 결정 • 고정 분할(fixed partition) -> 가변 분할(variable partition) • 고정 분할 : 일류적으로 동일한 공간 할당 • 가변 분할 : 프로세스마다 요구에 맞게 할당 • 단일 프로그래밍/연속 할당 • 주기억 장치에 항상 한 프로그램만이 적재(load)되어 실행되는 가장 단순한 기법 • 메모리의 나머지 부분은 활용이 안된 채 낭비
멀티 프로그래밍/고정 할당(fixed partition) • 메모리에 여러 프로그램을 동시에 load 시켜 놓은 채 실행 • 정적 분할(static partition) • 일률적으로 똑같은 크기의 공간을 프로세스에게 할당 • 재배치(relocation) 작업 필요 • 프로그램이 메모리내의 어떤 공간에서도 실행할 수 있도록 프로그램 주소 부분의 값을 재조정
멀티 프로그래밍/가변 분할(variable partition) • 각 프로세스가 요청하는 크기에 맞추어 메모리 공간을 할당 • 일정 시간 운영 후, 메모리는 다양한 크기의 조각으로 분할 • 배치 전략(placement) • 새로 load할 프로그램을 이들 유휴 공간 중에 어느 곳에 load 할 것인가를 결정 • 최적 적합(Best-fit) • load 될 프로그램과 가장 근접한 크기(남는 공간이 가장 적은)의 공간 선택 • 최초 적합(First-fit) • 빈 공간을 찾다가 첫 번째로 가능한 공간 선택 • 최악 적합(Worst-fit) • 남은 공간 중 가장 큰 공간에 할당 • 남은 공간은 다시 빈 공간 list에 귀속
멀티 프로그래밍/가변 분할(variable partition) • 각 프로세스가 요청하는 크기에 맞추어 메모리 공간을 할당 • 일정 시간 운영 후, 메모리는 다양한 크기의 조각으로 분할 • 배치 전략(placement) • 새로 load할 프로그램을 이들 유휴 공간 중에 어느 곳에 load 할 것인가를 결정 • 최적 적합(Best-fit) • load 될 프로그램과 가장 근접한 크기(남는 공간이 가장 적은)의 공간 선택 • 최초 적합(First-fit) • 빈 공간을 찾다가 첫 번째로가능한 공간 선택 • 최악 적합(Worst-fit) • 남은 공간 중 가장 큰 공간에 할당 • 남은 공간은 다시 빈 공간 list에 귀속
연속 할당 기법의 문제점과 해결 • 단편화(fragmentation) • 프로그램들이 사용하지 못하게 되어버리는 메모리 공간 부분 • 내부 단편화(internal fragmentation) • 프로그램이 요구한 것 보다 더 큰 공간을 할당할 경우 낭비되는 부분 • 고정 분할 시 발생 – 프로그램이 요구한 것보다 더 큰 부분 할당 • 외부 단편화(external fragmentation) • 빈 공간 list에 속한 유휴 공간 중 크기가 너무 작아서 어느 누구도 쓸 수 없는 공간 • 가변 분할 시 발생 – 외부 단편화 발생 가능, 내부 단편화 발생 하지 않음
운영체제 운영체제 P1 P1 P1 7K 7K 7K P2 3K P2 P2 3K 3K P3 P3 P3 10 K 6K 6K 6K 10 K P4 P4 P4 6K 6K 6K 4K 작업 큐 작업 큐 3 K 4 K 8 K 1 K 4 K 1 K 4 K 4 K 1 K • 내부 단편화(internal fragmentation)– 고정 분할 시 [예] 32K 메모리 시스템 : 운영체제(10K), 사용자 공간(22K) • 작업 큐 : 7K, 3K, 6K, 6K를 요구하는 작업 -10K영역과 3개의 4K영역으로 나눔 7K 작업 10K영역에[3K 내부 단편화] 3K 작업 4K 영역 하나에 [1K 내부 단편화] 할당 6K 작업 할당될 수 없음 • 10K, 8K, 4K 영역으로 나눔 7K 작업 8K 영역에3K 작업 4K영역에6K 작업 10K 영역에 할당 수행 6K의 내부 단편화 발생
외부 단편화(internal fragmentation)– 가변 분할 시 • 많은 수의 작은 사용가능 공간으로 단편화 됨 • 공백 크기가 작아짐 - 다른 사용자를 위해서 메모리 할당 못함 • 작업 큐: 작업 1->60k, 작업 2->100k, 작업 3->30k, 작업 4->70k, 작업 5->50k [그림 (a)] : 26K의 외부 단편화 존재 ⇒ 작업 4 와 작업 5를 적재 못함 [그림 (c)] : 56K(=30K + 26K)의 외부 단편화 ⇒ 이 공간은 2개의 조각으로 나누어짐 작업 5의 메모리 요구를 만족시킬 수 없음 : 기다려야 함
외부단편화 해결 방안 • 통합(Coalescing) • 빈 공간 list에서 빈 공간들의 주소가 인접한 경우 공간을 통합 • 매주 작은 공간들이 여러 갭 발생되는 것을 막는 방법 운영체제 운영체제 운영체제 프로그램 A 프로그램 A 프로그램 A 프로그램 B 종료 합병 Hole Hole 합병된 공간 프로그램 B Hole Hole Hole 프로그램 C 프로그램 C 프로그램 C Hole Hole Hole
외부단편화 해결 방안 • 압축(Compaction) • 모든 빈 공간들을 한 곳으로 합치는 작업 - 하나의 빈 영역 생성 • 일종의 쓰레기 수집(garbage collection) 작업 운영체제 운영체제 프로그램 A 프로그램 A 압축 Hole 프로그램 B 프로그램 C 한 끝으로 모두 합친 빈 공간 프로그램 B Hole 프로그램 C
운영 체제 사용자 영역 보조(예비) 기억장치 메인 메모리 • 연속 할당 기법의 문제점과 해결 • 사용자 프로그램의 크기가 큰 경우 • 연속 할당에서 사용자 프로그램의 크기가 큰 경우 문제 발생 • 오버레이(overlay) 기법 • 비연속 기억 장치 할당 기법 • 스와핑(swapping) 기법 • 일부 프로세스를 보조 기억 장치로 보냈다가 추후 다시 주기억 장치로 불러 들임 • 이렇게 선점해서 생긴 공간을 다른 프로그램에 할당 • 스와퍼(swapper) 또는 중기 스케줄러
비연속 할당 • 프로그램을 여러 부분으로 나누고 각 부분을 비연속적으로 산재된 공간에 load 하는 방법 • 하드웨어가 실행 시간 도중에 논리적 주소 -> 물리적 주소 변환 • 논리적 주소는 연속적 • 물리적 주소는 비연속 • 가상 기억 장치(virtual memory) • 논리적 주소가 실제 주소와 다름 • 가상 주소 : 논리적 주소를 뜻함 • 페이징(paging) – 동일한 크기 • 세그먼테이션(segmentation) – 다른 크기
페이징(paging) 기법 • 사용자 프로그램 : 페이지 크기로 나눔 • 메모리 : 페이지 프레임(page frame)으로 나눔 • 프로그램 페이지는 메모리 상의 빈 페이지 프레임으로 load
세그먼테이션(segmentation) 기법 • 사용자 프로그램을 세그먼트 크기로 나누고 세그먼트 단위로 load • 세그먼테이션 예
페이징기법 • 장점 • 연속 할당의 단점인 외부 단편화 현상 방지 • 단점 • 관리에 오버헤드가 요구 – 페이지 테이블을 보관할 장소 요구, 주소변환을 위한 추가적인 비용 소모 • 프로그램에게 할당된 마지막 페이지에서 내부 단편화가 생길 수 있음 • 세그먼테이션 기법 • 장점 • 가변적인 데이터 구조와 모듈 처리 가능 • 단점 • 외부 단편화 발생 가능
사용자의 주소 공간을 여러 부분으로 나누고, 실행 시에는 필요한 부분만 주 기억 장치에 load하여 수행하게 해줌 • 사용자에게 주기억 장치 용량보다 훨씬 더 큰 공간을 가상적으로 제공 • 현재 수행에 필요한 부분만 메모리에 load • 프로그램의 나머지 부분은 보조 기억 장치에 유지 • 가상 메모리의 발생 • 1960년 영국 맨체스터 대학에서 제작된 아틀라스 컴퓨터 시스템에 처음 등장
가상 메모리 관리 정책 • 프로그램의 모든 블록들을 디스크에 저장하고 있다가, 실행 도중 수시로 이들을 블록별로 메모리로 load • 블록들을 언제, 어느 공간으로 load 할 것인가? • 빈 공간이 메모리에 없을 경우 기존에 올라와 있던 블록 중 어느 것을 희생시킬 것인가?
가상 메모리 관리 정책 (cont’d) • 페이지 반입(fetch) 정책 • when : 언제 블록을 메모리로 가져 올 것인가를 결정 • 요구 페이징, 예상 페이징 기법 등 • 페이지 배치(placement) 정책 • where : 블록을 메모리 어느 장소로 가져올 것인가를 결정 • 페이징 시스템 : 문제 없음 • 세그먼트 시스템 : best-fit, first-fit 등의 기법 • 페이지 교체(replacement) 정책 • which : 메모리에서 사용하고 있던 블록들 중 어느 것을 희생 시킬 것인가를 결정 • FIFO, LRU, LFU, MFU 기법 등
요구 페이징(demand paging) • prefetch • 프로세스가 페이지를 요구할 때 해당 페이지를 메모리로 적재 • 페이지 부재(page fault) • 요구 페이징 시스템에서 프로그램이 페이지를 요청할 때 그 페이지가 메모리에 적재되어 있지 않은 상황 • 요구 페이징의 성능 • 프로그램은 페이지 부재가 발생할 때마다 디스크에서 그 페이지가 올라오기 까지 기다려야 함 • 페이지 부재율을 낮추지 않으면 프로그램의 수행은 매우 느려짐
페이지 교체 알고리즘 • OPT(Optimal Page Replacement) 알고리즘 • Belady의 최적 알고리즘 • 페이지 부재를 최소화하기 위해서 향후 가장 오랫동안 사용되지 않을 페이지를 교체 • 성능이 가장 우수하지만, 실제 구현 불가능 Reference String
페이지 교체 알고리즘(cont’d) • FIFO(First-In First-Out) 기법 • FIFO 페이지 대치 기법은 주기억 장치에 가장 먼저 들어온 페이지를 교체 • FIFO의 모순(anomaly) • 프로세스에게 더 많은 페이지 프레임을 할당할 수록 더 적게 페이지 부재 발생 -> 실제 FIFO에서는 페이지 부재가 더 많이 발생 Reference String
R.S = 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 3개의 page frame -> 9번의 page fault 4개의 page frame -> 10번의 page fault Belady’s anomaly 즉, frame 증가가 fault 증가 프레임 3 9번 발생 1 2 3 4 1 2 5 1 2 3 4 5 1 1 1 4 4 4 5 5 5 2 2 2 1 1 1 3 3 3 3 3 2 2 2 4 1 1 1 1 5 5 5 5 4 4 2 2 2 2 1 1 1 1 5 3 3 3 3 2 2 2 2 4 4 4 4 3 3 3 프레임 4 10번 발생
페이지 교체 알고리즘(cont’d) • LRU(Least Recently Used) 기법 • 페이지 대치가 필요할 때마다 가장 오랫동안 사용되지 않은 페이지를 희생 • FIFO 모순 발생되지 않아 스택 알고리즘 이라고 하기도 함 Reference String
페이지 교체 알고리즘(cont’d) • LFU(Least Frequently Used) 기법 • 참조된 횟수가 가장 적은 페이지를 교체시키는 방법 • MFU(Most Frequently Used) 기법 Reference String
페이지 할당 알고리즘 • 균등 할당법(equal allocation) • 모든 프로세스에게 똑같은 수의 프레임을 배정하는 방법 • 비례 할당법(proportional allocation) • 각 프로세스마다 다르게 할당하는 방법 • 각 프로세스는 필요로 하는 양에 비례하여 할당 받음
기타 고려사항 • 스레싱(thrashing) • 빈번하게 페이지 부재가 일어나는 현상 • 프로세스가 수행에 보내는 시간보다 페이지 이동에 보내는 시간이 더 길어짐 • CPU는 대부분의 시간을 페이지 이동을 기다리며 대기 • 시스템의 성능을 심각하게 저하 • 스레싱의 원인 • 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 utilization 향상 • 다중 프로그래밍의 정도가 과도하게 높아지면 프로세스당 할당되는 페이지 프레임 수가 너무 적게 되어 페이지 부재율이 급격히 증가 -> utilization 급격히 감소 • 스레싱 현상 방지 • 다중 프로그램의 정도를 낮추어프로세스마다 돌아가는 공간을 늘려야 함 • 워킹 셋(working set) • 최소한의 페이지 프레임 수 유지
구역성(locality) • 프로세스가 메모리에 참조하는 특성을 기술 • 실행 중인 프로세스는 일정 시간에 메모리의 일정 부분만을 집중적으로 참조 • 가상 메모리의 주요 개념 • 일정시간에 프로그램의 일부분만 메모리에 올려 놓아도 빠르게 수행됨 • 시간 지역성(temporal locality) • 프로세스가 2시에 사용된 페이지는 2시 1분에도 사용할 가능성이 높다 • 공간 지역성(spatial locality) • 프로세스가 100번지를 사용 중이라면 99, 101번지도 곧 사용할 가능성이 높다
페이지 부재 빈도에 따른 프레임 할당 • 페이지 부재 발생률이 상한선 보다 높으면 • 더 많은 페이지 프레임 할당 • 페이지 부재 발생률이 하한선 보다 낮으면 • 이미 할당되었던 페이지 프레임도 일부 회수 프레임 수 늘릴 것 Page Fault Rate 프레임 수 줄일 것 페이지 프레임 할당량
주기억 장치 • 속도는 빠르지만 용량이 작고 휘발성 • 보조 기억 장치 • 속도는 느리지만 용량이 크고 비휘발성 • 자기 디스크 • 물리적 구조 • 트랙, 섹터, 실린더 • 디스크 접근 시간 • 탐색 시간, 회전 지연 시간, 전송 시간
특징 • 작업 요청이 들어온 순서대로 처리해 주기 보다는 디스크 헤드가 움직이고 있는 경로 상에 있는 섹터라면 상대적으로 늦게 들어온 요청이라도 헤드가 같은 방향으로 움직이는 도중에 처리해줌 • 전체 디스크의 throughput 향상 • 디스크 스케줄링 기법 • FCFS(First Come First Served) • 가장 간단한 스케줄링 • 디스크 I/O 요청이 들어온 순서대로 서비스 • 특징 • 공평하며 간편하지만 seek 시간을 최적화 할 수 없음 • 디스크에 부하가 적으면 사용해도 무방
SSTF(Shortest Seek Time First) • 다음 탐색 거리(seek distance)가 가장 짧은 요청을 먼저 서비스 • 특징 • 디스크 요청이 바깥쪽 트랙보다 가운데 트랙으로 몰림 • 변두리 트랙들은 소외되는 경향을 보임 • FCFS보다 throughput이 증가 • I/O 처리 시간이 짧아짐 • throughput이 중요한 일괄 처리 시스템에는 적합 • 대화형 시스템 부적합 • 응답 시간의 편차가 커지기 때문에
SCAN • 헤드가 맨 바깥쪽 트랙에서 안쪽으로 이동하면서 진행 방향에 있는 요구를 차례대로 서비스 • 가장 안쪽 트랙에 도달하면 다시 반대방향으로 디스크 헤드가 이동 • 진행 방향상 가장 짧은 거리에 있는 요청 순서대로 서비스 • 특징 • SSTF에서 발생하는 차별을 줄이고 응답 시간 편차를 감소 • 실제 많은 시스템에서 채택
C-SCAN(Circular-SCAN) • SCAN 스케줄링에서 변두리 트랙들은 가운데 트랙보다 반 정도 밖에는 서비스를 못 받음 • 헤드가 항상 바깥 트랙에서 안쪽 트랙 방향으로만 이동하면서 경로상의 요청을 서비스 • 특징 • 가장 안쪽과 가장 바깥쪽의 트랙에 대한 차별 대우가 없어짐 • 응답 시간의 편차가 매우 작아짐 • 부하가 아주 많은 상황에서 효율적 • 부하가 적은 경우는 SCAN 기법
N-step SCAN • 헤드가 한 쪽 끝에서 이동을 시작하면 그 이동을 시작한 시점 이후 이동 중에 도착한 요청들을 한데 모았다가 반대 방향으로 되돌아 올 때 최적으로 서비스 하도록 배열하는 스케줄링 • LOOK • SCAN에서 헤드가 각 방향을 가다가 그 앞에 더 이상 기다리는 요청이 없을 경우 헤드의 이동 방향을 즉시 반대로 바꾸는 스케줄링 • 방향 전환 전에 요청 검사